X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=Debian%2FDebhelper%2FBuildsystem%2Fpython_distutils.pm;h=9b20e185c2a48aca7df0cbc4fc8e225d5dffd29f;hb=ec62efa9792eae708c39c688aacc0a26f90c7fda;hp=cca000d6f5f616881a4d390ffe7e151f1154f6f6;hpb=ee5536e22dbe1a629beca2296c1b29ec5c771fde;p=debhelper.git diff --git a/Debian/Debhelper/Buildsystem/python_distutils.pm b/Debian/Debhelper/Buildsystem/python_distutils.pm index cca000d..9b20e18 100644 --- a/Debian/Debhelper/Buildsystem/python_distutils.pm +++ b/Debian/Debhelper/Buildsystem/python_distutils.pm @@ -61,12 +61,12 @@ sub pre_building_step { return unless grep /$step/, qw(build install clean); - # --build-base can only be passed to the build command. However, - # it is always read from the config file (really weird design). - # Therefore create such a cfg config file. - # See http://bugs.python.org/issue818201 - # http://bugs.python.org/issue1011113 if ($this->get_buildpath() ne $this->DEFAULT_BUILD_DIRECTORY()) { + # --build-base can only be passed to the build command. However, + # it is always read from the config file (really weird design). + # Therefore create such a cfg config file. + # See http://bugs.python.org/issue818201 + # http://bugs.python.org/issue1011113 not $this->not_our_cfg() or error("cannot set custom build directory: .pydistutils.cfg is in use"); $this->mkdir_builddir(); @@ -79,10 +79,83 @@ sub pre_building_step { $this->SUPER::pre_building_step($step); } +sub dbg_build_needed { + my $this=shift; + my $act=shift; + + # Return a list of python-dbg package which are listed + # in the build-dependencies. This is kinda ugly, but building + # dbg extensions without checking if they're supposed to be + # built may result in various FTBFS if the package is not + # built in a clean chroot. + + my @dbg; + open (CONTROL, 'debian/control') || + error("cannot read debian/control: $!\n"); + foreach my $builddeps (join('', ) =~ + /^Build-Depends[^:]*:.*\n(?:^[^\w\n].*\n)*/gmi) { + while ($builddeps =~ /(python[^, ]*-dbg)/g) { + push @dbg, $1; + } + } + + close CONTROL; + return @dbg; + +} + sub setup_py { my $this=shift; my $act=shift; - $this->doit_in_sourcedir("python", "setup.py", $act, @_); + + # We need to to run setup.py with the default python first + # as distutils/setuptools modifies the shebang lines of scripts. + # This ensures that #!/usr/bin/python is used and not pythonX.Y + # Take into account that the default Python must not be in + # the requested Python versions. + # Then, run setup.py with each available python, to build + # extensions for each. + + my $python_default = `pyversions -d`; + $python_default =~ s/^\s+//; + $python_default =~ s/\s+$//; + my @python_requested = split ' ', `pyversions -r 2>/dev/null`; + if (grep /^\Q$python_default\E/, @python_requested) { + @python_requested = ("python", grep(!/^\Q$python_default\E/, + @python_requested)); + } + + my @python_dbg; + my @dbg_build_needed = $this->dbg_build_needed(); + foreach my $python (map { $_."-dbg" } @python_requested) { + if (grep /^(python-all-dbg|\Q$python\E)/, @dbg_build_needed) { + push @python_dbg, $python; + } + elsif (($python eq "python-dbg") + and (grep /^\Q$python_default\E/, @dbg_build_needed)) { + push @python_dbg, $python_default."-dbg"; + } + } + + foreach my $python (@python_requested, @python_dbg) { + if (-x "/usr/bin/".$python) { + # To allow backports of debhelper we don't pass + # --install-layout=deb to 'setup.py install` for + # those Python versions where the option is + # ignored by distutils/setuptools. + if ( $act eq "install" and not + ( ($python =~ /^python(?:-dbg)?$/ + and $python_default =~ /^python2\.[2345]$/) + or $python =~ /^python2\.[2345](?:-dbg)?$/ )) { + $this->doit_in_sourcedir($python, "setup.py", + $act, @_, "--install-layout=deb"); + } + else { + $this->doit_in_sourcedir($python, "setup.py", + $act, @_); + } + } + } } sub build { @@ -94,10 +167,10 @@ sub install { my $this=shift; my $destdir=shift; $this->setup_py("install", + "--force", "--root=$destdir", "--no-compile", "-O0", - "--install-layout=deb", @_); }