* [gentoo-python] [PATCH] Support -A / --ABIs-patterns option in python_mod_optimize() and python_mod_cleanup()
@ 2011-12-29 13:08 Mike Gilbert
2011-12-29 13:41 ` Michał Górny
0 siblings, 1 reply; 6+ messages in thread
From: Mike Gilbert @ 2011-12-29 13:08 UTC (permalink / raw
To: gentoo-python
[-- Attachment #1.1: Type: text/plain, Size: 600 bytes --]
I would like to apply the attached patch to python.eclass. This is a
port from Progress overlay.
This patch allows python_mod_optimize to be used in cases where a
different set of python modules is installed depending on the python abi.
For example, dev-python/feedparse-5.1 (not yet in the tree) installs the
_feedparser_sgmllib.py module only in python-3*.
The only difference from Arfrever's original changeset (Progress r1408)
is the "return_status" variable. For some reason, he has renamed this to
"exit_status".
Please provide any comments/questions/objections you may have.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: python-eclass-progress-r1408.patch --]
[-- Type: text/x-patch; name="python-eclass-progress-r1408.patch", Size: 6973 bytes --]
Support -A / --ABIs-patterns option in python_mod_optimize() and python_mod_cleanup().
Ported from Progress overlay.
Index: python.eclass
===================================================================
RCS file: /var/cvsroot/gentoo-x86/eclass/python.eclass,v
retrieving revision 1.143
diff -u -B -r1.143 python.eclass
--- python.eclass 19 Dec 2011 01:29:57 -0000 1.143
+++ python.eclass 29 Dec 2011 12:46:58 -0000
@@ -2735,7 +2735,7 @@
}
# @FUNCTION: python_mod_optimize
-# @USAGE: [--allow-evaluated-non-sitedir-paths] [-d directory] [-f] [-l] [-q] [-x regular_expression] [--] <file|directory> [files|directories]
+# @USAGE: [-A|--ABIs-patterns Python_ABIs] [--allow-evaluated-non-sitedir-paths] [-d directory] [-f] [-l] [-q] [-x regular_expression] [--] <file|directory> [files|directories]
# @DESCRIPTION:
# Byte-compile specified Python modules.
# -d, -f, -l, -q and -x options passed to this function are passed to compileall.py.
@@ -2751,18 +2751,18 @@
if ! has "${EAPI:-0}" 0 1 2 || _python_package_supporting_installation_for_multiple_python_abis || _python_implementation || [[ "${CATEGORY}/${PN}" == "sys-apps/portage" ]]; then
# PYTHON_ABI variable cannot be local in packages not supporting installation for multiple Python ABIs.
- local allow_evaluated_non_sitedir_paths="0" dir dirs=() evaluated_dirs=() evaluated_files=() file files=() iterated_PYTHON_ABIS options=() other_dirs=() other_files=() previous_PYTHON_ABI="${PYTHON_ABI}" return_code root site_packages_dirs=() site_packages_files=() stderr stderr_line
+ local ABIs_patterns="*" allow_evaluated_non_sitedir_paths="0" dir dirs=() enabled_PYTHON_ABI enabled_PYTHON_ABIS evaluated_dirs=() evaluated_files=() file files=() iterated_PYTHON_ABIS options=() other_dirs=() other_files=() previous_PYTHON_ABI="${PYTHON_ABI}" return_code root site_packages_dirs=() site_packages_files=() stderr stderr_line
if _python_package_supporting_installation_for_multiple_python_abis; then
if has "${EAPI:-0}" 0 1 2 3 && [[ -z "${PYTHON_ABIS}" ]]; then
die "${FUNCNAME}(): python_pkg_setup() or python_execute_function() not called"
fi
- iterated_PYTHON_ABIS="${PYTHON_ABIS}"
+ enabled_PYTHON_ABIS="${PYTHON_ABIS}"
else
if has "${EAPI:-0}" 0 1 2 3; then
- iterated_PYTHON_ABIS="${PYTHON_ABI:=$(PYTHON --ABI)}"
+ enabled_PYTHON_ABIS="${PYTHON_ABI:=$(PYTHON --ABI)}"
else
- iterated_PYTHON_ABIS="${PYTHON_ABI}"
+ enabled_PYTHON_ABIS="${PYTHON_ABI}"
fi
fi
@@ -2771,6 +2771,10 @@
while (($#)); do
case "$1" in
+ -A|--ABIs-patterns)
+ ABIs_patterns="$2"
+ shift
+ ;;
--allow-evaluated-non-sitedir-paths)
allow_evaluated_non_sitedir_paths="1"
;;
@@ -2803,6 +2807,12 @@
die "${FUNCNAME}(): Missing files or directories"
fi
+ for enabled_PYTHON_ABI in ${enabled_PYTHON_ABIS}; do
+ if _python_check_python_abi_matching --patterns-list "${enabled_PYTHON_ABI}" "${ABIs_patterns}"; then
+ iterated_PYTHON_ABIS+="${iterated_PYTHON_ABIS:+ }${enabled_PYTHON_ABI}"
+ fi
+ done
+
while (($#)); do
if [[ "$1" =~ ^($|(\.|\.\.|/)($|/)) ]]; then
die "${FUNCNAME}(): Invalid argument '$1'"
@@ -2816,20 +2826,24 @@
if [[ "$1" != *\$* ]]; then
die "${FUNCNAME}(): '$1' has invalid syntax"
fi
- if [[ "$1" == *.py ]]; then
- evaluated_files+=("$1")
- else
- evaluated_dirs+=("$1")
+ if [[ -n "${iterated_PYTHON_ABIS}" ]]; then
+ if [[ "$1" == *.py ]]; then
+ evaluated_files+=("$1")
+ else
+ evaluated_dirs+=("$1")
+ fi
fi
else
- if [[ -d "${root}$1" ]]; then
- other_dirs+=("${root}$1")
- elif [[ -f "${root}$1" ]]; then
- other_files+=("${root}$1")
- elif [[ -e "${root}$1" ]]; then
- eerror "${FUNCNAME}(): '${root}$1' is not a regular file or a directory"
- else
- eerror "${FUNCNAME}(): '${root}$1' does not exist"
+ if [[ -n "${iterated_PYTHON_ABIS}" ]]; then
+ if [[ -d "${root}$1" ]]; then
+ other_dirs+=("${root}$1")
+ elif [[ -f "${root}$1" ]]; then
+ other_files+=("${root}$1")
+ elif [[ -e "${root}$1" ]]; then
+ eerror "${FUNCNAME}(): '${root}$1' is not a regular file or a directory"
+ else
+ eerror "${FUNCNAME}(): '${root}$1' does not exist"
+ fi
fi
fi
else
@@ -3010,7 +3024,7 @@
}
# @FUNCTION: python_mod_cleanup
-# @USAGE: [--allow-evaluated-non-sitedir-paths] [--] <file|directory> [files|directories]
+# @USAGE: [-A|--ABIs-patterns Python_ABIs] [--allow-evaluated-non-sitedir-paths] [--] <file|directory> [files|directories]
# @DESCRIPTION:
# Delete orphaned byte-compiled Python modules corresponding to specified Python modules.
#
@@ -3023,18 +3037,18 @@
_python_check_python_pkg_setup_execution
_python_initialize_prefix_variables
- local allow_evaluated_non_sitedir_paths="0" dir iterated_PYTHON_ABIS PYTHON_ABI="${PYTHON_ABI}" root search_paths=() sitedir
+ local ABIs_patterns="*" allow_evaluated_non_sitedir_paths="0" dir enabled_PYTHON_ABI enabled_PYTHON_ABIS iterated_PYTHON_ABIS PYTHON_ABI="${PYTHON_ABI}" root search_paths=() sitedir
if _python_package_supporting_installation_for_multiple_python_abis; then
if has "${EAPI:-0}" 0 1 2 3 && [[ -z "${PYTHON_ABIS}" ]]; then
die "${FUNCNAME}(): python_pkg_setup() or python_execute_function() not called"
fi
- iterated_PYTHON_ABIS="${PYTHON_ABIS}"
+ enabled_PYTHON_ABIS="${PYTHON_ABIS}"
else
if has "${EAPI:-0}" 0 1 2 3; then
- iterated_PYTHON_ABIS="${PYTHON_ABI:-$(PYTHON --ABI)}"
+ enabled_PYTHON_ABIS="${PYTHON_ABI:-$(PYTHON --ABI)}"
else
- iterated_PYTHON_ABIS="${PYTHON_ABI}"
+ enabled_PYTHON_ABIS="${PYTHON_ABI}"
fi
fi
@@ -3043,6 +3057,10 @@
while (($#)); do
case "$1" in
+ -A|--ABIs-patterns)
+ ABIs_patterns="$2"
+ shift
+ ;;
--allow-evaluated-non-sitedir-paths)
allow_evaluated_non_sitedir_paths="1"
;;
@@ -3068,6 +3086,12 @@
die "${FUNCNAME}(): Missing files or directories"
fi
+ for enabled_PYTHON_ABI in ${enabled_PYTHON_ABIS}; do
+ if _python_check_python_abi_matching --patterns-list "${enabled_PYTHON_ABI}" "${ABIs_patterns}"; then
+ iterated_PYTHON_ABIS+="${iterated_PYTHON_ABIS:+ }${enabled_PYTHON_ABI}"
+ fi
+ done
+
if ! has "${EAPI:-0}" 0 1 2 || _python_package_supporting_installation_for_multiple_python_abis || _python_implementation || [[ "${CATEGORY}/${PN}" == "sys-apps/portage" ]]; then
while (($#)); do
if [[ "$1" =~ ^($|(\.|\.\.|/)($|/)) ]]; then
@@ -3086,7 +3110,9 @@
eval "search_paths+=(\"\${root}$1\")"
done
else
- search_paths+=("${root}$1")
+ if [[ -n "${iterated_PYTHON_ABIS}" ]]; then
+ search_paths+=("${root}$1")
+ fi
fi
else
for PYTHON_ABI in ${iterated_PYTHON_ABIS}; do
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 230 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [gentoo-python] [PATCH] Support -A / --ABIs-patterns option in python_mod_optimize() and python_mod_cleanup()
2011-12-29 13:08 [gentoo-python] [PATCH] Support -A / --ABIs-patterns option in python_mod_optimize() and python_mod_cleanup() Mike Gilbert
@ 2011-12-29 13:41 ` Michał Górny
2011-12-29 13:50 ` Mike Gilbert
0 siblings, 1 reply; 6+ messages in thread
From: Michał Górny @ 2011-12-29 13:41 UTC (permalink / raw
To: Mike Gilbert; +Cc: gentoo-python
[-- Attachment #1: Type: text/plain, Size: 465 bytes --]
On Thu, 29 Dec 2011 08:08:26 -0500
Mike Gilbert <floppym@gentoo.org> wrote:
> This patch allows python_mod_optimize to be used in cases where a
> different set of python modules is installed depending on the python
> abi.
>
> For example, dev-python/feedparse-5.1 (not yet in the tree) installs
> the _feedparser_sgmllib.py module only in python-3*.
Could you paste some example on how it is supposed to be used?
--
Best regards,
Michał Górny
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 316 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [gentoo-python] [PATCH] Support -A / --ABIs-patterns option in python_mod_optimize() and python_mod_cleanup()
2011-12-29 13:41 ` Michał Górny
@ 2011-12-29 13:50 ` Mike Gilbert
2011-12-29 14:06 ` Michał Górny
0 siblings, 1 reply; 6+ messages in thread
From: Mike Gilbert @ 2011-12-29 13:50 UTC (permalink / raw
To: Michał Górny; +Cc: gentoo-python
[-- Attachment #1: Type: text/plain, Size: 833 bytes --]
On 12/29/2011 08:41 AM, Michał Górny wrote:
> On Thu, 29 Dec 2011 08:08:26 -0500
> Mike Gilbert <floppym@gentoo.org> wrote:
>
>> This patch allows python_mod_optimize to be used in cases where a
>> different set of python modules is installed depending on the python
>> abi.
>>
>> For example, dev-python/feedparse-5.1 (not yet in the tree) installs
>> the _feedparser_sgmllib.py module only in python-3*.
>
> Could you paste some example on how it is supposed to be used?
>
Sure. Borrowed from feedparser-5.1.ebuild in Progress:
pkg_postinst() {
python_mod_optimize -A "2.*" feedparser.py
python_mod_optimize -A "3.*" feedparser.py _feedparser_sgmllib.py
}
pkg_postrm() {
python_mod_cleanup -A "2.*" feedparser.py
python_mod_cleanup -A "3.*" feedparser.py _feedparser_sgmllib.py
}
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 230 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [gentoo-python] [PATCH] Support -A / --ABIs-patterns option in python_mod_optimize() and python_mod_cleanup()
2011-12-29 13:50 ` Mike Gilbert
@ 2011-12-29 14:06 ` Michał Górny
2011-12-29 14:26 ` Mike Gilbert
0 siblings, 1 reply; 6+ messages in thread
From: Michał Górny @ 2011-12-29 14:06 UTC (permalink / raw
To: Mike Gilbert; +Cc: gentoo-python
[-- Attachment #1: Type: text/plain, Size: 1345 bytes --]
On Thu, 29 Dec 2011 08:50:11 -0500
Mike Gilbert <floppym@gentoo.org> wrote:
> On 12/29/2011 08:41 AM, Michał Górny wrote:
> > On Thu, 29 Dec 2011 08:08:26 -0500
> > Mike Gilbert <floppym@gentoo.org> wrote:
> >
> >> This patch allows python_mod_optimize to be used in cases where a
> >> different set of python modules is installed depending on the
> >> python abi.
> >>
> >> For example, dev-python/feedparse-5.1 (not yet in the tree)
> >> installs the _feedparser_sgmllib.py module only in python-3*.
> >
> > Could you paste some example on how it is supposed to be used?
> >
>
> Sure. Borrowed from feedparser-5.1.ebuild in Progress:
>
> pkg_postinst() {
> python_mod_optimize -A "2.*" feedparser.py
> python_mod_optimize -A "3.*" feedparser.py _feedparser_sgmllib.py
> }
>
> pkg_postrm() {
> python_mod_cleanup -A "2.*" feedparser.py
> python_mod_cleanup -A "3.*" feedparser.py _feedparser_sgmllib.py
> }
Ok, now that I see it, I think you're inventing a really big hammer to
get rid of a single mosquito.
On the other hand, I don't think I can think of a good per-ebuild way
to handle this. I'd rather start by pinging upstream not to pollute
global namespace and install a package instead; even if it supposed to
contain __init__.py only.
--
Best regards,
Michał Górny
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 316 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [gentoo-python] [PATCH] Support -A / --ABIs-patterns option in python_mod_optimize() and python_mod_cleanup()
2011-12-29 14:06 ` Michał Górny
@ 2011-12-29 14:26 ` Mike Gilbert
2011-12-29 14:49 ` Mike Gilbert
0 siblings, 1 reply; 6+ messages in thread
From: Mike Gilbert @ 2011-12-29 14:26 UTC (permalink / raw
To: Michał Górny; +Cc: gentoo-python
[-- Attachment #1: Type: text/plain, Size: 1904 bytes --]
On 12/29/2011 09:06 AM, Michał Górny wrote:
> On Thu, 29 Dec 2011 08:50:11 -0500
> Mike Gilbert <floppym@gentoo.org> wrote:
>
>> On 12/29/2011 08:41 AM, Michał Górny wrote:
>>> On Thu, 29 Dec 2011 08:08:26 -0500
>>> Mike Gilbert <floppym@gentoo.org> wrote:
>>>
>>>> This patch allows python_mod_optimize to be used in cases where a
>>>> different set of python modules is installed depending on the
>>>> python abi.
>>>>
>>>> For example, dev-python/feedparse-5.1 (not yet in the tree)
>>>> installs the _feedparser_sgmllib.py module only in python-3*.
>>>
>>> Could you paste some example on how it is supposed to be used?
>>>
>>
>> Sure. Borrowed from feedparser-5.1.ebuild in Progress:
>>
>> pkg_postinst() {
>> python_mod_optimize -A "2.*" feedparser.py
>> python_mod_optimize -A "3.*" feedparser.py _feedparser_sgmllib.py
>> }
>>
>> pkg_postrm() {
>> python_mod_cleanup -A "2.*" feedparser.py
>> python_mod_cleanup -A "3.*" feedparser.py _feedparser_sgmllib.py
>> }
>
> Ok, now that I see it, I think you're inventing a really big hammer to
> get rid of a single mosquito.
>
I don't think the hammer is really that big; it seems like a relatively
small extension to me. The code for checking ABI patterns is already
there, this just wires it up to a couple of additional functions.
I actually think it would make more sense to call python_mod_optimize
using python_execute_function, but I think that would require a
backward-incompatible API change.
> On the other hand, I don't think I can think of a good per-ebuild way
> to handle this. I'd rather start by pinging upstream not to pollute
> global namespace and install a package instead; even if it supposed to
> contain __init__.py only.
>
That would take care of this specific package, yes. However, I still
think it would be nice to have a workaround available.
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 230 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [gentoo-python] [PATCH] Support -A / --ABIs-patterns option in python_mod_optimize() and python_mod_cleanup()
2011-12-29 14:26 ` Mike Gilbert
@ 2011-12-29 14:49 ` Mike Gilbert
0 siblings, 0 replies; 6+ messages in thread
From: Mike Gilbert @ 2011-12-29 14:49 UTC (permalink / raw
To: gentoo-python
[-- Attachment #1: Type: text/plain, Size: 1854 bytes --]
On 12/29/2011 09:26 AM, Mike Gilbert wrote:
> On 12/29/2011 09:06 AM, Michał Górny wrote:
>> On Thu, 29 Dec 2011 08:50:11 -0500
>> Mike Gilbert <floppym@gentoo.org> wrote:
>>
>>> On 12/29/2011 08:41 AM, Michał Górny wrote:
>>>> On Thu, 29 Dec 2011 08:08:26 -0500
>>>> Mike Gilbert <floppym@gentoo.org> wrote:
>>>>
>>>>> This patch allows python_mod_optimize to be used in cases where a
>>>>> different set of python modules is installed depending on the
>>>>> python abi.
>>>>>
>>>>> For example, dev-python/feedparse-5.1 (not yet in the tree)
>>>>> installs the _feedparser_sgmllib.py module only in python-3*.
>>>>
>>>> Could you paste some example on how it is supposed to be used?
>>>>
>>>
>>> Sure. Borrowed from feedparser-5.1.ebuild in Progress:
>>>
>>> pkg_postinst() {
>>> python_mod_optimize -A "2.*" feedparser.py
>>> python_mod_optimize -A "3.*" feedparser.py _feedparser_sgmllib.py
>>> }
>>>
>>> pkg_postrm() {
>>> python_mod_cleanup -A "2.*" feedparser.py
>>> python_mod_cleanup -A "3.*" feedparser.py _feedparser_sgmllib.py
>>> }
>>
>> Ok, now that I see it, I think you're inventing a really big hammer to
>> get rid of a single mosquito.
>>
>
> I don't think the hammer is really that big; it seems like a relatively
> small extension to me. The code for checking ABI patterns is already
> there, this just wires it up to a couple of additional functions.
>
> I actually think it would make more sense to call python_mod_optimize
> using python_execute_function, but I think that would require a
> backward-incompatible API change.
>
On second thought, most of python_mod_optimize could be refactored into
a new function (python_mod_optimize_abi?) that would be called once per
ABI by python_execute_function. So, please disregard that last comment.
</tangent>
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 230 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2011-12-29 14:49 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-12-29 13:08 [gentoo-python] [PATCH] Support -A / --ABIs-patterns option in python_mod_optimize() and python_mod_cleanup() Mike Gilbert
2011-12-29 13:41 ` Michał Górny
2011-12-29 13:50 ` Mike Gilbert
2011-12-29 14:06 ` Michał Górny
2011-12-29 14:26 ` Mike Gilbert
2011-12-29 14:49 ` Mike Gilbert
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox