Patchwork [1/3] python-setuptools: forkbump and add workaround for shebang

login
register
mail settings
Submitter Gustavo Zacarias
Date April 13, 2013, 4:56 p.m.
Message ID <1365872210-20167-1-git-send-email-gustavo@zacarias.com.ar>
Download mbox | patch
Permalink /patch/236368/
State Superseded
Headers show

Comments

Gustavo Zacarias - April 13, 2013, 4:56 p.m.
Switch to distribute fork since it's maintained and fixes a few issues
while bumping to version 0.6.36.
There's work upstream in re-merging with setuptools which is now
supposedly maintained, see
http://mail.python.org/pipermail/distutils-sig/2013-March/020126.html

Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
---
 .../python-setuptools-add-executable.patch         | 50 ++++++++++++++++++++++
 package/python-setuptools/python-setuptools.mk     |  8 ++--
 2 files changed, 54 insertions(+), 4 deletions(-)
 create mode 100644 package/python-setuptools/python-setuptools-add-executable.patch
Arnout Vandecappelle - April 16, 2013, 6:27 a.m.
Hi Gustavo,

  I usually don't bother reviewing your patches, but now I found something:

On 13/04/13 18:56, Gustavo Zacarias wrote:
> Switch to distribute fork since it's maintained and fixes a few issues
> while bumping to version 0.6.36.
> There's work upstream in re-merging with setuptools which is now
> supposedly maintained, see
> http://mail.python.org/pipermail/distutils-sig/2013-March/020126.html
>
> Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
> ---
>   .../python-setuptools-add-executable.patch         | 50 ++++++++++++++++++++++
>   package/python-setuptools/python-setuptools.mk     |  8 ++--
>   2 files changed, 54 insertions(+), 4 deletions(-)
>   create mode 100644 package/python-setuptools/python-setuptools-add-executable.patch
>
> diff --git a/package/python-setuptools/python-setuptools-add-executable.patch b/package/python-setuptools/python-setuptools-add-executable.patch
> new file mode 100644
> index 0000000..a14a3ed
> --- /dev/null
> +++ b/package/python-setuptools/python-setuptools-add-executable.patch
> @@ -0,0 +1,50 @@
> +Add a new --executable option to distribute so that we can
> +force the shebang line in installed python scripts.
> +
> +Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
> +
> +diff -Nura distribute-0.6.36.orig/setuptools/command/install.py distribute-0.6.36/setuptools/command/install.py
> +--- distribute-0.6.36.orig/setuptools/command/install.py	2013-04-13 09:46:23.160823598 -0300
> ++++ distribute-0.6.36/setuptools/command/install.py	2013-04-13 11:17:28.418841986 -0300
> +@@ -6,6 +6,7 @@
> +     """Use easy_install to install the package, w/dependencies"""
> +
> +     user_options = _install.user_options + [
> ++        ('executable=', 'e', "specify final destination interpreter path"),
> +         ('old-and-unmanageable', None, "Try not to use this!"),
> +         ('single-version-externally-managed', None,
> +             "used by system package builders to create 'flat' eggs"),
> +@@ -21,6 +22,7 @@
> +
> +     def initialize_options(self):
> +         _install.initialize_options(self)
> ++	self.executable = None

  Mixing tabs with spaces... Also a few other instances in the rest of 
this patch.

> +         self.old_and_unmanageable = None
> +         self.single_version_externally_managed = None
> +         self.no_compile = None  # make DISTUTILS_DEBUG work right!
> +diff -Nura distribute-0.6.36.orig/setuptools/command/install_scripts.py distribute-0.6.36/setuptools/command/install_scripts.py
> +--- distribute-0.6.36.orig/setuptools/command/install_scripts.py	2013-04-13 09:46:23.160823598 -0300
> ++++ distribute-0.6.36/setuptools/command/install_scripts.py	2013-04-13 11:24:32.305416400 -0300
> +@@ -10,6 +10,13 @@
> +     def initialize_options(self):
> +         _install_scripts.initialize_options(self)
> +         self.no_ep = False
> ++	self.executable = None
> ++
> ++    def finalize_options(self):
> ++        _install_scripts.finalize_options(self)
> ++        self.set_undefined_options('install',
> ++	    ('executable','executable')
> ++	)
> +
> +     def run(self):
> +         from setuptools.command.easy_install import get_script_args
> +@@ -31,6 +38,8 @@
> +         )
> +         bs_cmd = self.get_finalized_command('build_scripts')
> +         executable = getattr(bs_cmd,'executable',sys_executable)
> ++	if self.executable is not None:
> ++	    executable = self.executable
> +         is_wininst = getattr(
> +             self.get_finalized_command("bdist_wininst"), '_is_running', False
> +         )
> diff --git a/package/python-setuptools/python-setuptools.mk b/package/python-setuptools/python-setuptools.mk
> index 25fddb9..64f6ded 100644
> --- a/package/python-setuptools/python-setuptools.mk
> +++ b/package/python-setuptools/python-setuptools.mk
> @@ -4,9 +4,9 @@
>   #
>   #############################################################
>
> -PYTHON_SETUPTOOLS_VERSION = 0.6c11
> -PYTHON_SETUPTOOLS_SOURCE  = setuptools-$(PYTHON_SETUPTOOLS_VERSION).tar.gz
> -PYTHON_SETUPTOOLS_SITE    = http://pypi.python.org/packages/source/s/setuptools
> +PYTHON_SETUPTOOLS_VERSION = 0.6.36
> +PYTHON_SETUPTOOLS_SOURCE  = distribute-$(PYTHON_SETUPTOOLS_VERSION).tar.gz

  I would add a comment here, e.g.

# "distribute" is a fork of the unmaintained setuptools package. There
# are plans to re-merge it into setuptools; if this happens, we can
# switch back to http://pypi.python.org/packages/source/s/setuptools

> +PYTHON_SETUPTOOLS_SITE    = http://pypi.python.org/packages/source/d/distribute
>   PYTHON_SETUPTOOLS_DEPENDENCIES = python
>
>   define HOST_PYTHON_SETUPTOOLS_BUILD_CMDS
> @@ -24,7 +24,7 @@ endef
>
>   define PYTHON_SETUPTOOLS_INSTALL_TARGET_CMDS
>   	(cd $(@D); PYTHONPATH="$(TARGET_DIR)/usr/lib/python$(PYTHON_VERSION_MAJOR)/site-packages"\
> -	$(HOST_DIR)/usr/bin/python setup.py install --prefix=$(TARGET_DIR)/usr)
> +	$(HOST_DIR)/usr/bin/python setup.py install --executable=/usr/bin/python --single-version-externally-managed --root=/ --prefix=$(TARGET_DIR)/usr)

  Please split this long line. Also, maybe it's worth explaining why we 
want --single-version-externally-managed?


  Regards,
  Arnout

>   endef
>
>   $(eval $(generic-package))
>
Gustavo Zacarias - April 16, 2013, 10:17 a.m.
On 04/16/2013 03:27 AM, Arnout Vandecappelle wrote:

>  Mixing tabs with spaces... Also a few other instances in the rest of
> this patch.

That's probably my vim settings doing something evil, i don't have a
special case for python, i'll fix it.

>  I would add a comment here, e.g.
> 
> # "distribute" is a fork of the unmaintained setuptools package. There
> # are plans to re-merge it into setuptools; if this happens, we can
> # switch back to http://pypi.python.org/packages/source/s/setuptools

Fair enough.

>  Please split this long line. Also, maybe it's worth explaining why we
> want --single-version-externally-managed?

That's for the trick to work, when python builds an egg (zip file) in
the build phase not only are we wasting time doing double decompression
later on the target but we are also finishing up the package (kind of a
mini-install phase) into the egg.
That makes the trick fail (probably solvable by doing --execute in the
build itself, didn't try since it's not the way IMHO).
I'll add a note since it's required for other python packages that do
use setuptools/distribution.
V2 when Thomas confirms it solves his issues with lava-test, did it for
me in my tests.
Regards.
Peter Korsgaard - May 6, 2013, 7:34 a.m.
>>>>> "Gustavo" == Gustavo Zacarias <gustavo@zacarias.com.ar> writes:

Hi,

 >> Please split this long line. Also, maybe it's worth explaining why we
 >> want --single-version-externally-managed?

 Gustavo> That's for the trick to work, when python builds an egg (zip
 Gustavo> file) in the build phase not only are we wasting time doing
 Gustavo> double decompression later on the target but we are also
 Gustavo> finishing up the package (kind of a mini-install phase) into
 Gustavo> the egg.

 Gustavo> That makes the trick fail (probably solvable by doing
 Gustavo> --execute in the build itself, didn't try since it's not the
 Gustavo> way IMHO).  I'll add a note since it's required for other
 Gustavo> python packages that do use setuptools/distribution.  V2 when
 Gustavo> Thomas confirms it solves his issues with lava-test, did it
 Gustavo> for me in my tests.

Did this ever get tested? Thomas, could you send your ack / Gustavo,
could you send a v2 fixing the issues pointed out by Arnout?
Gustavo Zacarias - May 6, 2013, 11:07 a.m.
On 05/06/2013 04:34 AM, Peter Korsgaard wrote:

> Did this ever get tested? Thomas, could you send your ack / Gustavo,
> could you send a v2 fixing the issues pointed out by Arnout?

It's partially solved for lava-test since it's pulling other
dependencies by itself - that should probably be solved via new
buildroot python packages since it's doing so because they're not found,
and it's not nice when a package starts downloading stuff at
build/install time.
Yes, a V2 is forthcoming addressing Arnout's comments and a few more
fixes/improvements.
You shouldn't have committed the fixes to python-bottle and
python-serial since they both depend on the patch to this package,
they'll probably fail now.
Regards.
Peter Korsgaard - May 6, 2013, 11:30 a.m.
>>>>> "Gustavo" == Gustavo Zacarias <gustavo@zacarias.com.ar> writes:

 Gustavo> On 05/06/2013 04:34 AM, Peter Korsgaard wrote:
 >> Did this ever get tested? Thomas, could you send your ack / Gustavo,
 >> could you send a v2 fixing the issues pointed out by Arnout?

 Gustavo> It's partially solved for lava-test since it's pulling other
 Gustavo> dependencies by itself - that should probably be solved via new
 Gustavo> buildroot python packages since it's doing so because they're not found,
 Gustavo> and it's not nice when a package starts downloading stuff at
 Gustavo> build/install time.
 Gustavo> Yes, a V2 is forthcoming addressing Arnout's comments and a few more
 Gustavo> fixes/improvements.

Ok, great.

 Gustavo> You shouldn't have committed the fixes to python-bottle and
 Gustavo> python-serial since they both depend on the patch to this package,
 Gustavo> they'll probably fail now.

Hmm, odd - They built fine here:

>>> python-bottle 0.11.6 Building
(cd /home/peko/source/buildroot/output/build/python-bottle-0.11.6; /home/peko/source/buildroot/output/host/usr/bin/python setup.py build --executable=/usr/bin/python)
running build
running build_py
creating build
creating build/lib
copying bottle.py -> build/lib
running build_scripts
creating build/scripts-2.7
copying and adjusting bottle.py -> build/scripts-2.7
changing mode of build/scripts-2.7/bottle.py from 644 to 755
Gustavo Zacarias - May 6, 2013, 11:34 a.m.
On 05/06/2013 08:30 AM, Peter Korsgaard wrote:
> Hmm, odd - They built fine here:

My bad, those are python distutils-based which has the --executable
functionality builtin (yes, there's more than one way of
building/installing modules in python, yes, it hurts).
Regards.

Patch

diff --git a/package/python-setuptools/python-setuptools-add-executable.patch b/package/python-setuptools/python-setuptools-add-executable.patch
new file mode 100644
index 0000000..a14a3ed
--- /dev/null
+++ b/package/python-setuptools/python-setuptools-add-executable.patch
@@ -0,0 +1,50 @@ 
+Add a new --executable option to distribute so that we can
+force the shebang line in installed python scripts.
+
+Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
+
+diff -Nura distribute-0.6.36.orig/setuptools/command/install.py distribute-0.6.36/setuptools/command/install.py
+--- distribute-0.6.36.orig/setuptools/command/install.py	2013-04-13 09:46:23.160823598 -0300
++++ distribute-0.6.36/setuptools/command/install.py	2013-04-13 11:17:28.418841986 -0300
+@@ -6,6 +6,7 @@
+     """Use easy_install to install the package, w/dependencies"""
+
+     user_options = _install.user_options + [
++        ('executable=', 'e', "specify final destination interpreter path"),
+         ('old-and-unmanageable', None, "Try not to use this!"),
+         ('single-version-externally-managed', None,
+             "used by system package builders to create 'flat' eggs"),
+@@ -21,6 +22,7 @@
+
+     def initialize_options(self):
+         _install.initialize_options(self)
++	self.executable = None
+         self.old_and_unmanageable = None
+         self.single_version_externally_managed = None
+         self.no_compile = None  # make DISTUTILS_DEBUG work right!
+diff -Nura distribute-0.6.36.orig/setuptools/command/install_scripts.py distribute-0.6.36/setuptools/command/install_scripts.py
+--- distribute-0.6.36.orig/setuptools/command/install_scripts.py	2013-04-13 09:46:23.160823598 -0300
++++ distribute-0.6.36/setuptools/command/install_scripts.py	2013-04-13 11:24:32.305416400 -0300
+@@ -10,6 +10,13 @@
+     def initialize_options(self):
+         _install_scripts.initialize_options(self)
+         self.no_ep = False
++	self.executable = None
++
++    def finalize_options(self):
++        _install_scripts.finalize_options(self)
++        self.set_undefined_options('install',
++	    ('executable','executable')
++	)
+
+     def run(self):
+         from setuptools.command.easy_install import get_script_args
+@@ -31,6 +38,8 @@
+         )
+         bs_cmd = self.get_finalized_command('build_scripts')
+         executable = getattr(bs_cmd,'executable',sys_executable)
++	if self.executable is not None:
++	    executable = self.executable
+         is_wininst = getattr(
+             self.get_finalized_command("bdist_wininst"), '_is_running', False
+         )
diff --git a/package/python-setuptools/python-setuptools.mk b/package/python-setuptools/python-setuptools.mk
index 25fddb9..64f6ded 100644
--- a/package/python-setuptools/python-setuptools.mk
+++ b/package/python-setuptools/python-setuptools.mk
@@ -4,9 +4,9 @@ 
 #
 #############################################################
 
-PYTHON_SETUPTOOLS_VERSION = 0.6c11
-PYTHON_SETUPTOOLS_SOURCE  = setuptools-$(PYTHON_SETUPTOOLS_VERSION).tar.gz
-PYTHON_SETUPTOOLS_SITE    = http://pypi.python.org/packages/source/s/setuptools
+PYTHON_SETUPTOOLS_VERSION = 0.6.36
+PYTHON_SETUPTOOLS_SOURCE  = distribute-$(PYTHON_SETUPTOOLS_VERSION).tar.gz
+PYTHON_SETUPTOOLS_SITE    = http://pypi.python.org/packages/source/d/distribute
 PYTHON_SETUPTOOLS_DEPENDENCIES = python
 
 define HOST_PYTHON_SETUPTOOLS_BUILD_CMDS
@@ -24,7 +24,7 @@  endef
 
 define PYTHON_SETUPTOOLS_INSTALL_TARGET_CMDS
 	(cd $(@D); PYTHONPATH="$(TARGET_DIR)/usr/lib/python$(PYTHON_VERSION_MAJOR)/site-packages"\
-	$(HOST_DIR)/usr/bin/python setup.py install --prefix=$(TARGET_DIR)/usr)
+	$(HOST_DIR)/usr/bin/python setup.py install --executable=/usr/bin/python --single-version-externally-managed --root=/ --prefix=$(TARGET_DIR)/usr)
 endef
 
 $(eval $(generic-package))