You can add something obvious, like -DMITCHELL_WAS_HERE :)

On Thu, 8 Feb 2024, 18:35 Mitchell Dzurick, <2002...@bugs.launchpad.net>
wrote:

> That's a great idea Andreas! It's a little difficult to pinpoint the
> exact OPT flags as they are bunched up with the other compiler flags, so
> I'll add a test in addition to the current ones which makes it easier to
> see what's happening.
>
> --
> You received this bug notification because you are a member of Ubuntu
> Pythoneers, which is subscribed to python2.7 in Ubuntu.
> https://bugs.launchpad.net/bugs/2002043
>
> Title:
>   Python extension modules get built using wrong compiler flags with
>   python2
>
> Status in python2.7 package in Ubuntu:
>   Invalid
> Status in python2.7 source package in Bionic:
>   Won't Fix
> Status in python2.7 source package in Focal:
>   Fix Committed
> Status in python2.7 source package in Jammy:
>   Fix Committed
> Status in python2.7 source package in Kinetic:
>   Invalid
> Status in python2.7 source package in Lunar:
>   Invalid
> Status in python2.7 source package in Mantic:
>   Invalid
>
> Bug description:
>   [ Impact ]
>
>   When compiling Python extensions using Python2, CFLAGS optimization
>   flags are dropped.
>
>   This behavior has been caused by our update in this patch
>
> http://archive.ubuntu.com/ubuntu/pool/universe/p/python2.7/python2.7_2.7.18-1~20.04.3.diff.gz
>   which differs from upstream.
>
>   The fix modifies the portion of code in Lib/distutils/sysconfig.py
>   which gets the cflags from the environments, and includes the dropped
>   OPT flag from get_config_vars().
>
>   [ Test Plan ]
>
>   There will be 2 separate tests for this bug:
>   * Ensuring no-change rebuilds are not changed
>   * Ensuring local builds are not changed unless environment variable is
> set
>
>   Test 1) No-change rebuilds
>
>   To test that no-change rebuilds are not changed, the package python-
>   stdlib-extensions will be built against the new python2.7, and confirm
>   the compiler flags are not altered. This will be a manual test and
>   visual inspection of the build logs.
>
>   Test 2) Functional test
>
>   1. Create test container
>   $ lxc launch ubuntu:jammy jammy-2002043
>   $ lxc shell ubuntu:jammy jammy-2002043
>
>   2. Install required packages
>   For Jammy
>   # apt update -y && apt install -y python2 python-pip
>   For Focal
>   # apt update -y && apt install -y python2 python-setuptools
>
>   3. Create test files
>   # mkdir testprog
>   # cd testprog
>   # cat >setup.py <<EOL
>   from setuptools import setup, Extension
>
>   setup(
>       name="test",
>       ext_modules=[Extension("test", sources=["testmodule.c"])],
>       zip_safe=False
>   )
>   EOL
>   # cat >testmodule.c <<EOL
>   #include <stdio.h>
>
>   int main(void)
>   {
>           printf("This is test program");
>           return 0;
>   }
>   EOL
>
>   4. Compile a test program
>   # python2 setup.py build_ext --inplace
>
>   5. Check CFLAGS
>   # python2 -c "import sysconfig;
> print(sysconfig.get_config_var('CFLAGS'))"
>   -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes
> -Wdate-time -D_FORTIFY_SOURCE=2 -g
> -ffile-prefix-map=/build/python2.7-W40Ff2/python2.7-2.7.18=. -flto=auto
> -ffat-lto-objects -flto=auto -ffat-lto-objects -fstack-protector-strong
> -Wformat -Werror=format-security
>
>   6. Check the flags used to compile the test wheel
>   # strings build/lib.linux-x86_64-2.7/test.so  | grep -- -O
>   GNU GIMPLE 11.4.0 -mtune=generic -march=x86-64 -g -g -g -g -O2
> -fno-openmp -fno-openacc -fcf-protection=full -fno-strict-aliasing -fwrapv
> -fstack-protector-strong -ffat-lto-objects -fstack-protector-strong -fPIC
> -fltrans
>
>   7. Install fixed python
>   Once updated, this will simply be an apt update && apt upgrade
>   # add-apt-repository ppa:mitchdz/python2.7-optimization-flags -y
>   # apt install -y python2.7
>   # dpkg -s python2.7 | grep Version:
>   Version: 2.7.18-13ubuntu1.2~jammy9
>
>   8. Clean build
>   # rm -rf build/ test.so
>
>   9. Enable opt-in environment variable
>   # export APPLY_LP2002043_UBUNTU_CFLAGS_WORKAROUND=""
>
>   9. Rebuild with new python2.7 installed
>   # python2 setup.py build_ext --inplace
>
>   10. Check build flags
>   # strings build/lib.linux-x86_64-2.7/test.so  | grep -- -O
>   GNU GIMPLE 11.4.0 -mtune=generic -march=x86-64 -g -g -g -g -O2 -O2
> -fno-openmp -fno-openacc -fcf-protection=full -fno-strict-aliasing -fwrapv
> -fstack-protector-strong -ffat-lto-objects -fstack-protector-strong -fPIC
> -fltrans
>   GNU C17 11.4.0 -mtune=generic -march=x86-64 -g -g -O2
> -fno-strict-aliasing -fwrapv -flto -flto -ffat-lto-objects
> -fstack-protector-strong -fPIC -fasynchronous-unwind-tables
> -fstack-protector-strong -fstack-clash-protection -fcf-protection
>
>   [ Where problems could occur ]
>
>   * Changing optimization flags can cause a myriad of unattended side
> effects, but the change being opt-in means the users should be aware a
> change is being made
>   * The change is opt-in, so an informative message is printed to the
> console to spread awareness of the issue and how to use the workaround. A
> questionably made CI/CD system might see the new console output and flag it
> as a failure, so it is important to choose wording carefully.
>
> To manage notifications about this bug go to:
>
> https://bugs.launchpad.net/ubuntu/+source/python2.7/+bug/2002043/+subscriptions
>
> Launchpad-Notification-Type: bug
> Launchpad-Bug: distribution=ubuntu; sourcepackage=python2.7;
> component=universe; status=Invalid; importance=Undecided; assignee=None;
> Launchpad-Bug: distribution=ubuntu; distroseries=bionic;
> sourcepackage=python2.7; component=main; status=Won't Fix; importance=High;
> assignee=None;
> Launchpad-Bug: distribution=ubuntu; distroseries=focal;
> sourcepackage=python2.7; component=universe; status=Fix Committed;
> importance=High; assignee=mitchell.dzur...@canonical.com;
> Launchpad-Bug: distribution=ubuntu; distroseries=jammy;
> sourcepackage=python2.7; component=universe; status=Fix Committed;
> importance=High; assignee=mitchell.dzur...@canonical.com;
> Launchpad-Bug: distribution=ubuntu; distroseries=kinetic;
> sourcepackage=python2.7; component=None; status=Invalid; importance=High;
> assignee=None;
> Launchpad-Bug: distribution=ubuntu; distroseries=lunar;
> sourcepackage=python2.7; component=None; status=Invalid;
> importance=Undecided; assignee=None;
> Launchpad-Bug: distribution=ubuntu; distroseries=mantic;
> sourcepackage=python2.7; component=None; status=Invalid;
> importance=Undecided; assignee=None;
> Launchpad-Bug-Tags: patch se-sponsor-halves verification-needed
> verification-needed-focal verification-needed-jammy
> Launchpad-Bug-Information-Type: Public
> Launchpad-Bug-Private: no
> Launchpad-Bug-Security-Vulnerability: no
> Launchpad-Bug-Commenters: ahasenack crichton fabio.martins ghadi-rahme
> halves mitchdz nafeabd rpocase tjaalton vorlon xnox
> Launchpad-Bug-Reporter: Nafees (nafeabd)
> Launchpad-Bug-Modifier: Mitchell Dzurick (mitchdz)
> Launchpad-Message-Rationale: Subscriber (python2.7 in Ubuntu) @pythoneers
> Launchpad-Message-For: pythoneers
>
>

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to python2.7 in Ubuntu.
https://bugs.launchpad.net/bugs/2002043

Title:
  Python extension modules get built using wrong compiler flags with
  python2

Status in python2.7 package in Ubuntu:
  Invalid
Status in python2.7 source package in Bionic:
  Won't Fix
Status in python2.7 source package in Focal:
  Fix Committed
Status in python2.7 source package in Jammy:
  Fix Committed
Status in python2.7 source package in Kinetic:
  Invalid
Status in python2.7 source package in Lunar:
  Invalid
Status in python2.7 source package in Mantic:
  Invalid

Bug description:
  [ Impact ]

  When compiling Python extensions using Python2, CFLAGS optimization
  flags are dropped.

  This behavior has been caused by our update in this patch
  
http://archive.ubuntu.com/ubuntu/pool/universe/p/python2.7/python2.7_2.7.18-1~20.04.3.diff.gz
  which differs from upstream.

  The fix modifies the portion of code in Lib/distutils/sysconfig.py
  which gets the cflags from the environments, and includes the dropped
  OPT flag from get_config_vars().

  [ Test Plan ]

  There will be 2 separate tests for this bug:
  * Ensuring no-change rebuilds are not changed
  * Ensuring local builds are not changed unless environment variable is set

  Test 1) No-change rebuilds

  To test that no-change rebuilds are not changed, the package python-
  stdlib-extensions will be built against the new python2.7, and confirm
  the compiler flags are not altered. This will be a manual test and
  visual inspection of the build logs.

  Test 2) Functional test

  1. Create test container
  $ lxc launch ubuntu:jammy jammy-2002043
  $ lxc shell ubuntu:jammy jammy-2002043

  2. Install required packages
  For Jammy
  # apt update -y && apt install -y python2 python-pip
  For Focal
  # apt update -y && apt install -y python2 python-setuptools

  3. Create test files
  # mkdir testprog
  # cd testprog
  # cat >setup.py <<EOL
  from setuptools import setup, Extension

  setup(
      name="test",
      ext_modules=[Extension("test", sources=["testmodule.c"])],
      zip_safe=False
  )
  EOL
  # cat >testmodule.c <<EOL
  #include <stdio.h>

  int main(void)
  {
          printf("This is test program");
          return 0;
  }
  EOL

  4. Compile a test program
  # python2 setup.py build_ext --inplace

  5. Check CFLAGS
  # python2 -c "import sysconfig; print(sysconfig.get_config_var('CFLAGS'))"
  -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes 
-Wdate-time -D_FORTIFY_SOURCE=2 -g 
-ffile-prefix-map=/build/python2.7-W40Ff2/python2.7-2.7.18=. -flto=auto 
-ffat-lto-objects -flto=auto -ffat-lto-objects -fstack-protector-strong 
-Wformat -Werror=format-security

  6. Check the flags used to compile the test wheel
  # strings build/lib.linux-x86_64-2.7/test.so  | grep -- -O
  GNU GIMPLE 11.4.0 -mtune=generic -march=x86-64 -g -g -g -g -O2 -fno-openmp 
-fno-openacc -fcf-protection=full -fno-strict-aliasing -fwrapv 
-fstack-protector-strong -ffat-lto-objects -fstack-protector-strong -fPIC 
-fltrans

  7. Install fixed python
  Once updated, this will simply be an apt update && apt upgrade
  # add-apt-repository ppa:mitchdz/python2.7-optimization-flags -y
  # apt install -y python2.7
  # dpkg -s python2.7 | grep Version:
  Version: 2.7.18-13ubuntu1.2~jammy9

  8. Clean build
  # rm -rf build/ test.so

  9. Enable opt-in environment variable
  # export APPLY_LP2002043_UBUNTU_CFLAGS_WORKAROUND=""

  9. Rebuild with new python2.7 installed
  # python2 setup.py build_ext --inplace

  10. Check build flags
  # strings build/lib.linux-x86_64-2.7/test.so  | grep -- -O
  GNU GIMPLE 11.4.0 -mtune=generic -march=x86-64 -g -g -g -g -O2 -O2 
-fno-openmp -fno-openacc -fcf-protection=full -fno-strict-aliasing -fwrapv 
-fstack-protector-strong -ffat-lto-objects -fstack-protector-strong -fPIC 
-fltrans
  GNU C17 11.4.0 -mtune=generic -march=x86-64 -g -g -O2 -fno-strict-aliasing 
-fwrapv -flto -flto -ffat-lto-objects -fstack-protector-strong -fPIC 
-fasynchronous-unwind-tables -fstack-protector-strong -fstack-clash-protection 
-fcf-protection

  [ Where problems could occur ]

  * Changing optimization flags can cause a myriad of unattended side effects, 
but the change being opt-in means the users should be aware a change is being 
made
  * The change is opt-in, so an informative message is printed to the console 
to spread awareness of the issue and how to use the workaround. A questionably 
made CI/CD system might see the new console output and flag it as a failure, so 
it is important to choose wording carefully.

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/python2.7/+bug/2002043/+subscriptions


-- 
Mailing list: https://launchpad.net/~touch-packages
Post to     : touch-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~touch-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to