I'd like to contribute a Makefile fragment to ease env "preen".
diff --git a/scripts/mk/env-default.mk b/scripts/mk/env-default.mk
new file mode 100644
index 00000000..54f4af30
--- /dev/null
+++ b/scripts/mk/env-default.mk
@@ -0,0 +1,12 @@
+define dpkg_flush_vars=
+$(foreach i,$(1),$(eval unexport $(i)))
+$(foreach i,$(1),$(eval override undefine $(i)))
+endef
+
+$(call dpkg_flush_vars, LANGUAGE LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE ) +$(call dpkg_flush_vars, LC_MONETARY LC_MESSAGES LC_PAPER LC_NAME LC_ADDRESS )
+$(call dpkg_flush_vars, LC_TELEPHONE LC_MEASUREMENT LC_IDENTIFICATION ) +$(call dpkg_flush_vars, POSIXLY_CORRECT )
+
+export LC_ALL :=C.UTF-8
+export LANG :=C.UTF-8
diff --git a/scripts/mk/buildenv.mk b/scripts/mk/buildenv.mk
new file mode 100644
index 000000000..dc6f61428
--- /dev/null
+++ b/scripts/mk/buildenv.mk
@@ -0,0 +1,29 @@
+# This Makefile fragment (since dpkg 1.22.0) sanitizes the environment
+# variables.
+#
+# It unexports and undefines the following variables:
+#
+# POSIXLY_CORRECT
+#
+# And sets the following to C.UTF-8 on Debian and derivatives or C otherwose:
+#
+# LC_COLLATE
+#
+
+dpkg_datadir = $(srcdir)/mk
+include $(dpkg_datadir)/vendor.mk
+
+dpkg_reset_envvars := \
+ POSIXLY_CORRECT \
+ # EOL
+
+unexport $(dpkg_reset_envvars)
+$(foreach v,$(dpkg_reset_envvars),\
+ $(eval override undefine $(v)))
+
+ifeq ($(call dpkg_vendor_derives_from_v1,debian),yes)
+LC_COLLATE = C.UTF-8
+else
+LC_COLLATE = C
+endif
+export LC_COLLATE
Hi!
On Thu, 2023-01-05 at 08:48:59 +0300, Konstantin Demin wrote:
I'd like to contribute a Makefile fragment to ease env "preen".
Thanks for the patch!
diff --git a/scripts/mk/env-default.mk b/scripts/mk/env-default.mk
new file mode 100644
index 00000000..54f4af30
--- /dev/null
+++ b/scripts/mk/env-default.mk
@@ -0,0 +1,12 @@
+define dpkg_flush_vars=
+$(foreach i,$(1),$(eval unexport $(i)))
+$(foreach i,$(1),$(eval override undefine $(i)))
+endef
+
+$(call dpkg_flush_vars, LANGUAGE LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE ) +$(call dpkg_flush_vars, LC_MONETARY LC_MESSAGES LC_PAPER LC_NAME LC_ADDRESS )
+$(call dpkg_flush_vars, LC_TELEPHONE LC_MEASUREMENT LC_IDENTIFICATION ) +$(call dpkg_flush_vars, POSIXLY_CORRECT )
+
+export LC_ALL :=C.UTF-8
+export LANG :=C.UTF-8
Related to this there was #843776, which matches my thinking on why we
should not be globally resetting locale variables.
At the time I ended up adding support for that bug report as a vendor setting, to be enabled explicitly via dpkg-buildpackage option. But I
guess a make fragment file works too.
So I started playing with this, and I think we should at most set
LC_COLLATE, and perhaps remove POSIXLY_CORRECT, but given that this
one has the potential of making packages regress on portability pushed upstream, I'm not sure it should be globally set?
In any case what I've for now got is attached. (This would be
targeted for dpkg 1.22.x once that opens up.)
Thanks,
Guillem
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 393 |
Nodes: | 16 (2 / 14) |
Uptime: | 35:38:34 |
Calls: | 8,256 |
Files: | 13,132 |
Messages: | 5,877,407 |