• dpkg: scripts/mk: add fragment to preen env

    From Konstantin Demin@21:1/5 to All on Thu Jan 5 06:50:01 2023
    Greetings!

    I'd like to contribute a Makefile fragment to ease env "preen".

    --
    SY,
    Konstantin Demin

    RnJvbSBmYjhlNGMxMzM3N2IzMWFlYTNhNWYzNWM4OTIxNDRhYjdkODgwZjUzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBLb25zdGFudGluIERlbWluIDxyb2NrZHJpbGxhQGdtYWlsLmNv bT4KRGF0ZTogVGh1LCA1IEphbiAyMDIzIDA4OjQ2OjA2ICswMzAwClN1YmplY3Q6IFtQQVRDSF0g c2NyaXB0cy9tazogYWRkIGZyYWdtZW50IHRvIHByZWVuIGVudgoKU2lnbmVkLW9mZi1ieTogS29u c3RhbnRpbiBEZW1pbiA8cm9ja2RyaWxsYUBnbWFpbC5jb20+Ci0tLQogc2NyaXB0cy9tay9NYWtl ZmlsZS5hbSAgICB8ICAxICsKIHNjcmlwdHMvbWsvZW52LWRlZmF1bHQubWsgfCAxMiArKysrKysr KysrKysKIDIgZmlsZXMgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAw NjQ0IHNjcmlwdHMvbWsvZW52LWRlZmF1bHQubWsKCmRpZmYgLS1naXQgYS9zY3JpcHRzL21rL01h a2VmaWxlLmFtIGIvc2NyaXB0cy9tay9NYWtlZmlsZS5hbQppbmRleCBhODJlNDA5ZC4uZDUyM2Q4 ZDIgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWsvTWFrZWZpbGUuYW0KKysrIGIvc2NyaXB0cy9tay9N YWtlZmlsZS5hbQpAQCAtNiw2ICs2LDcgQEAgZGlzdF9wa2dkYXRhX0RBVEEgPSBcCiAJYnVpbGRv cHRzLm1rIFwKIAlidWlsZHRvb2xzLm1rIFwKIAlkZWZhdWx0Lm1rIFwKKwllbnYtZGVmYXVsdC5t ayBcCiAJcGtnLWluZm8ubWsgXAogCXZlbmRvci5tayBcCiAJIyBFT0wKZGlmZiAtLWdpdCBhL3Nj cmlwdHMvbWsvZW52LWRlZmF1bHQubWsgYi9zY3JpcHRzL21rL2Vudi1kZWZhdWx0Lm1rCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi41NGY0YWYzMAotLS0gL2Rldi9udWxsCisr KyBiL3NjcmlwdHMvbWsvZW52LWRlZmF1bHQubWsKQEAgLTAsMCArMSwxMiBAQAorZGVmaW5lIGRw a2dfZmx1c2hfdmFycz0KKyQoZm9yZWFjaCBpLCQoMSksJChldmFsIHVuZXhwb3J0ICQoaSkpKQor JChmb3JlYWNoIGksJCgxKSwkKGV2YWwgb3ZlcnJpZGUgdW5kZWZpbmUgJChpKSkpCitlbmRlZgor CiskKGNhbGwgZHBrZ19mbHVzaF92YXJzLCBMQU5HVUFHRSBMQ19DVFlQRSBMQ19OVU1FUklDIExD X1RJTUUgTENfQ09MTEFURSApCiskKGNhbGwgZHBrZ19mbHVzaF92YXJzLCBMQ19NT05FVEFSWSBM Q19NRVNTQUdFUyBMQ19QQVBFUiBMQ19OQU1FIExDX0FERFJFU1MgKQorJChjYWxsIGRwa2dfZmx1 c2hfdmFycywgTENfVEVMRVBIT05FIExDX01FQVNVUkVNRU5UIExDX0lERU5USUZJQ0FUSU9OICkK KyQoY2FsbCBkcGtnX2ZsdXNoX3ZhcnMsIFBPU0lYTFlfQ09SUkVDVCApCisKK2V4cG9ydCBMQ19B TEwgOj1DLlVURi04CitleHBvcnQgTEFORyAgIDo9Qy5VVEYtOAotLSAKMi4zOS4wCgo=

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Guillem Jover@21:1/5 to Konstantin Demin on Sun Jan 29 18:40:01 2023
    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

    From 9fe659d104495c7de98e4aaf164ff168e69c77d1 Mon Sep 17 00:00:00 2001
    From: Guillem Jover <guillem@debian.org>
    Date: Sun, 29 Jan 2023 16:27:34 +0100
    Subject: [PATCH] scripts/mk: Add a new buildenv Makefile fragment file

    Prompted-by: Konstantin Demin <rockdrilla@gmail.com>
    ---
    scripts/Dpkg/Vendor/Debian.pm | 2 ++
    scripts/Makefile.am | 3 +++
    scripts/mk/Makefile.am | 6 +++++
    scripts/mk/buildenv.mk | 29 ++++++++++++++++++++++++
    scripts/t/bin/test-eq-envvar | 12 ++++++++++
    scripts/t/bin/test-no-envvar | 11 +++++++++
    scripts/t/mk.t | 42 ++++++++++++++++++++++++++++++++++-
    scripts/t/mk/buildenv.mk | 20 +++++++++++++++++
    8 files changed, 124 insertions(+), 1 deletion(-)
    create mode 100644 scripts/mk/buildenv.mk
    create mode 100755 scripts/t/bin/test-eq-envvar
    create mode 100755 scripts/t/bin/test-no-envvar
    create mode 100644 scripts/t/mk/buildenv.mk

    diff --git a/scripts/Dpkg/Vendor/Debian.pm b/scripts/Dpkg/Vendor/Debian.pm index 06aa49ad6..574bf4479 100644
    --- a/scripts/Dpkg/Vendor/Debian.pm
    +++ b/scripts/Dpkg/Vendor/Debian.pm
    @@ -87,6 +87,8 @@ sub run_hook {
    umask 0022;
    # Reset locale to a sane default.
    $ENV{LC_COLLATE} = 'C.UTF-8';
    + # Remove functionality affecting
  • From Konstantin Demin@21:1/5 to All on Mon Jan 30 07:50:01 2023
    Hi!

    Many thanks for your work!

    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

    I'd suggest adding function for "unexport/override undefine" (in order
    to make it available to manual invocation) either setting
    "dpkg_reset_envvars" less strict (e.g. "?=" or "+=" instead of ":=").

    Anyway - thanks for replying and have a nice day!

    вс, 29 янв. 2023 г. в 20:35, Guillem Jover <guillem@debian.org>:

    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



    --
    SY,
    Konstantin Demin

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)