X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Debian%2FDebhelper%2FBuildsystem%2Fpython_distutils.pm;h=5115a8aea5854c111ecf4b8013c6fded2d7c19dc;hb=e2a6d4cec4a7ee952cf6a7f250d80f1d75a38f95;hp=9274a7d131c5840d14fe6d187d250d7be12e87f9;hpb=3e479237e5cbe95d78cd71aa410a4b410830cfe3;p=debhelper.git diff --git a/Debian/Debhelper/Buildsystem/python_distutils.pm b/Debian/Debhelper/Buildsystem/python_distutils.pm index 9274a7d..5115a8a 100644 --- a/Debian/Debhelper/Buildsystem/python_distutils.pm +++ b/Debian/Debhelper/Buildsystem/python_distutils.pm @@ -31,7 +31,7 @@ sub new { sub check_auto_buildable { my $this=shift; - return -e $this->get_sourcepath("setup.py"); + return -e $this->get_sourcepath("setup.py") ? 1 : 0; } sub not_our_cfg { @@ -90,11 +90,11 @@ sub dbg_build_needed { # built in a clean chroot. my @dbg; - open (CONTROL, $this->get_sourcepath('debian/control')) || + open (CONTROL, 'debian/control') || error("cannot read debian/control: $!\n"); foreach my $builddeps (join('', ) =~ /^Build-Depends[^:]*:.*\n(?:^[^\w\n].*\n)*/gmi) { - foreach ($builddeps =~ /(python[^, ]*-dbg)/g) { + while ($builddeps =~ /(python[^, ]*-dbg)/g) { push @dbg, $1; } } @@ -108,50 +108,74 @@ sub setup_py { my $this=shift; my $act=shift; - # We need to to run setup.py with the default python first + # We need to to run setup.py with the default python last # as distutils/setuptools modifies the shebang lines of scripts. - # This ensures that #!/usr/bin/python is used and not pythonX.Y + # This ensures that #!/usr/bin/python is installed last 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 /^$python_default/, @python_requested) { - @python_requested = ("python", grep(!/^$python_default/, - @python_requested)); + # 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 = ( + grep(!/^\Q$python_default\E/, @python_requested), + "python", + ); } - my @dbg_build_needed = $this->dbg_build_needed(); - foreach my $python (@python_requested) { - if (-x "/usr/bin/".$python) { - $this->doit_in_sourcedir($python, "setup.py", $act, @_); + 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"; } - $python = $python . "-dbg"; - if ((grep /^(python-all-dbg|$python)/, @dbg_build_needed) - or (($python eq "python-dbg") - and (grep /^$python_default/, @dbg_build_needed))){ - $this->doit_in_sourcedir($python, "setup.py", $act, @_); + } + + foreach my $python (@python_dbg, @python_requested) { + 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 { my $this=shift; - $this->setup_py("build", @_); + $this->setup_py("build", + "--force", + @_); } sub install { my $this=shift; my $destdir=shift; $this->setup_py("install", + "--force", "--root=$destdir", "--no-compile", "-O0", - "--install-layout=deb", @_); }