Skip to contentSkip to conversation

Fix PYC-only installation for Python3

PATCH New Daniel Nelson 3 participants 9 messages Jan 27, 2013 – Jan 28, 2013

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Fix PYC-only installation for Python3

All,

This is my first buildroot/open source submission. I'd appreciate some feedback.

Python3 changes the behavior of .pyc caching, breaking the PYC-only option in buildroot. The details are in http://www.python.org/dev/peps/pep-3147

I've added a configure flag to Python3, and corresponding logic in buildroot.

Thoughts?

Thanks,

Daniel Nelson

---
 ...ython3-3.3-012-support-pre-pep3147-stdlib.patch | 121 +++++++++++++++++++++
 package/python3/python3.mk                         |   4 +
 2 files changed, 125 insertions(+)
 create mode 100644 package/python3/python3-3.3-012-support-pre-pep3147-stdlib.patch
package/python3/python3-3.3-012-support-pre-pep3147-stdlib.patch new file +121 -0
new file mode 100644
index 0000000..fadd5e1
@@ -0,0 +1,121 @@
+--- python3-3.3.0/configure.ac	2013-01-26 19:12:56.446601796 -0800
++++ python3-3.3.0-new/configure.ac	2013-01-26 19:11:31.632687123 -0800
+@@ -1827,6 +1828,28 @@
+     LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';;
+ esac
+ 
++STDLIB_CACHE_FLAGS=
++STDLIB_CACHE_TYPE=pep3147
++AC_MSG_CHECKING(for --with-stdlib-cache)
++AC_ARG_WITH(stdlib-cache,
++    AS_HELP_STRING([--with-stdlib-cache=type], [select type of stdlib cache ("pep3147", or "old")]),
++[
++	AC_MSG_RESULT($withval)
++    STDLIB_CACHE_TYPE=$withval
++],
++[
++ 	AC_MSG_RESULT(${STDLIB_CACHE_TYPE})
++])
++case $STDLIB_CACHE_TYPE in
++    pep3147)
++        STDLIB_CACHE_FLAGS="" 
++        ;;
++    old)
++        STDLIB_CACHE_FLAGS="-b"
++        ;;
++esac
++AC_SUBST(STDLIB_CACHE_FLAGS)
++
+ AC_MSG_CHECKING(for --enable-framework)
+ if test "$enable_framework"
+ then
+--- python3-3.3.0/configure	2012-09-29 01:00:50.000000000 -0700
++++ python3-3.3.0-new/configure	2013-01-26 19:11:38.562839350 -0800
+@@ -633,6 +653,7 @@
+ LDCXXSHARED
+ LDSHARED
+ SO
++STDLIB_CACHE_FLAGS
+ LIBTOOL_CRUFT
+ OTHER_LIBTOOL_OPT
+ UNIVERSAL_ARCH_FLAGS
+@@ -765,6 +787,7 @@
+ enable_shared
+ enable_profiling
+ with_pydebug
++with_stdlib_cache
+ with_libs
+ with_system_expat
+ with_system_ffi
+@@ -1437,6 +1458,8 @@
+                           compiler
+   --with-suffix=.exe      set executable suffix
+   --with-pydebug          build with Py_DEBUG defined
++  --with-stdlib-cache=type
++                          select type of stdlib cache ("pep3147", or "old")
+   --with-libs='lib1 ...'  link against additional libs
+   --with-system-expat     build pyexpat module using an installed expat
+                           library
+@@ -8246,6 +8290,35 @@
+     LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';;
+ esac
+ 
++STDLIB_CACHE_FLAGS=
++STDLIB_CACHE_TYPE=pep3147
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-stdlib-cache" >&5
++$as_echo_n "checking for --with-stdlib-cache... " >&6; }
++
++# Check whether --with-stdlib-cache was given.
++if test "${with_stdlib_cache+set}" = set; then :
++  withval=$with_stdlib_cache;
++	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $withval" >&5
++$as_echo "$withval" >&6; }
++    STDLIB_CACHE_TYPE=$withval
++
++else
++
++ 	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${STDLIB_CACHE_TYPE}" >&5
++$as_echo "${STDLIB_CACHE_TYPE}" >&6; }
++
++fi
++
++case $STDLIB_CACHE_TYPE in
++    pep3147)
++        STDLIB_CACHE_FLAGS=""
++        ;;
++    old)
++        STDLIB_CACHE_FLAGS="-b"
++        ;;
++esac
++
++
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-framework" >&5
+ $as_echo_n "checking for --enable-framework... " >&6; }
+ if test "$enable_framework"
+--- python3-3.3.0/Makefile.pre.in	2013-01-26 19:12:56.438601609 -0800
++++ python3-3.3.0-new/Makefile.pre.in	2013-01-26 19:10:22.466167415 -0800
+@@ -143,6 +143,9 @@
+ # Options to enable prebinding (for fast startup prior to Mac OS X 10.3)
+ OTHER_LIBTOOL_OPT=@OTHER_LIBTOOL_OPT@
+ 
++# Option to enable old-style precompiled stdlib
++STDLIB_CACHE_FLAGS=@STDLIB_CACHE_FLAGS@
++
+ # Environment to run shared python without installed libraries
+ RUNSHARED=       @RUNSHARED@
+ 
+@@ -1079,12 +1082,12 @@
+ 	fi
+ 	-PYTHONPATH=$(DESTDIR)$(LIBDEST)  $(RUNSHARED) \
+ 		$(PYTHON_FOR_BUILD) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \
+-		-d $(LIBDEST) -f \
++		-d $(LIBDEST) -f $(STDLIB_CACHE_FLAGS) \
+ 		-x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
+ 		$(DESTDIR)$(LIBDEST)
+ 	-PYTHONPATH=$(DESTDIR)$(LIBDEST)  $(RUNSHARED) \
+ 		$(PYTHON_FOR_BUILD) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \
+-		-d $(LIBDEST)/site-packages -f \
++		-d $(LIBDEST)/site-packages -f $(STDLIB_CACHE_FLAGS) \
+ 		-x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
+ 	-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+ 		$(PYTHON_FOR_BUILD) -m lib2to3.pgen2.driver $(DESTDIR)$(LIBDEST)/lib2to3/Grammar.txt
package/python3/python3.mk +4 -0
index e7c0983..51fed51 100644
@@ -70,6 +70,10 @@ else
 PYTHON3_CONF_OPT += --with-expat=none
 endif
 
+ifeq ($(BR2_PACKAGE_PYTHON3_PYC_ONLY),y)
+PYTHON3_CONF_OPT += --with-stdlib-cache=old
+endif
+
 ifeq ($(BR2_PACKAGE_PYTHON3_SQLITE),y)
 PYTHON3_DEPENDENCIES += sqlite
 endif
Signature · 1 line
1.8.1
#1 lore raw

PATCH 1/1 Fix PYC-only installation for Python3

Quoted 7 lines · Daniel Nelson

All,

This is my first buildroot/open source submission. I'd appreciate some feedback.

Python3 changes the behavior of .pyc caching, breaking the PYC-only option in buildroot. The details are inhttp://www.python.org/dev/peps/pep-3147

I've added a configure flag to Python3, and corresponding logic in buildroot.

Hasn't this been fixed in git 6ffab129 ?

Regards,
Arnout

commit 6ffab129a3ebc76caf7ae40caf1f6b0185f3e114

Author: Maxime Ripard <[email protected]>
Date:   Fri Jan 18 04:06:14 2013 +0000

python3: Handle properly the pyc and py files on the target

Fixes #5690

package/python3/python3.mk +22 -0
index 0d54162..e7c0983 100644
@@ -155,5 +155,27 @@ endef
 ifneq ($(BR2_PACKAGE_PYTHON),y)
 PYTHON3_POST_INSTALL_TARGET_HOOKS += PYTHON3_INSTALL_SYMLINK
 endif
+
+ifeq ($(BR2_PACKAGE_PYTHON3_PY_ONLY),y)
+define PYTHON3_REMOVE_MODULES_FILES
+       for i in `find $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR) \
+                -name __pycache__` ; do \
+               rm -rf $$i ; \
+       done
+endef
+endif
+
+ifeq ($(BR2_PACKAGE_PYTHON3_PYC_ONLY),y)
+define PYTHON3_REMOVE_MODULES_FILES
+       for i in `find $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR) \
+                -name *.py` ; do \
+               rm -f $$i ; \
+       done
+endef
+endif
+
+PYTHON3_POST_INSTALL_TARGET_HOOKS += PYTHON3_REMOVE_MODULES_FILES
+
+
 $(eval $(autotools-package))
 $(eval $(host-autotools-package))
Signature · 6 lines
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F
author
#2 lore raw

PATCH 1/1 Fix PYC-only installation for Python3

Arnout,

Not quite. The commit you reference _does_ remove .py files on PYC_ONLY installations, but the logic in python3 will not look for a .pyc file in the __pycache__ directory if the parent .py file is not present. Thus, in its current incarnation, the PYC_ONLY option breaks python3 at runtime.

python3 does fall back to looking for a .pyc file in the directory that it expects the .py to be in.

http://www.python.org/dev/peps/pep-3147/#flow-chart

Daniel

Quoted 66 lines · Arnout Vandecappelle
Quoted 3 lines · Daniel Nelson

All,

This is my first buildroot/open source submission. I'd appreciate some

feedback.

Quoted 2 lines

Python3 changes the behavior of .pyc caching, breaking the PYC-only

option in buildroot. The details are inhttp://
www.python.org/dev/peps/pep-3147

Quoted 2 lines

I've added a configure flag to Python3, and corresponding logic in

buildroot.

Hasn't this been fixed in git 6ffab129 ?

Regards,
Arnout

commit 6ffab129a3ebc76caf7ae40caf1f6b0185f3e114

Author: Maxime Ripard <[email protected]>
Date:   Fri Jan 18 04:06:14 2013 +0000

python3: Handle properly the pyc and py files on the target

Fixes #5690

package/python3/python3.mk +22 -0
index 0d54162..e7c0983 100644
@@ -155,5 +155,27 @@ endef
 ifneq ($(BR2_PACKAGE_PYTHON),y)
 PYTHON3_POST_INSTALL_TARGET_HOOKS += PYTHON3_INSTALL_SYMLINK
 endif
+
+ifeq ($(BR2_PACKAGE_PYTHON3_PY_ONLY),y)
+define PYTHON3_REMOVE_MODULES_FILES
+       for i in `find
 $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR) \
+                -name __pycache__` ; do \
+               rm -rf $$i ; \
+       done
+endef
+endif
+
+ifeq ($(BR2_PACKAGE_PYTHON3_PYC_ONLY),y)
+define PYTHON3_REMOVE_MODULES_FILES
+       for i in `find
 $(TARGET_DIR)/usr/lib/python$(PYTHON3_VERSION_MAJOR) \
+                -name *.py` ; do \
+               rm -f $$i ; \
+       done
+endef
+endif
+
+PYTHON3_POST_INSTALL_TARGET_HOOKS += PYTHON3_REMOVE_MODULES_FILES
+
+

$(eval $(autotools-package))
$(eval $(host-autotools-package))

Quoted 8 lines

--

Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20130127/0ee59202/attachment.html>

#3 lore raw

PATCH 1/1 Fix PYC-only installation for Python3

Quoted 11 lines · Daniel N

Arnout,

Not quite. The commit you reference _does_ remove .py files on PYC_ONLY installations, but the logic in python3 will not look for a .pyc file in the __pycache__ directory if the parent .py file is not present. Thus, in its current incarnation, the PYC_ONLY option breaks python3 at runtime.

python3 does fall back to looking for a .pyc file in the directory that it expects the .py to be in.

http://www.python.org/dev/peps/pep-3147/#flow-chart

Okay, in that case your patch looks good.

Regards,
Arnout

PS Please avoid top-posting.

Quoted 22 lines

Daniel

On Sun, Jan 27, 2013 at 2:42 PM, Arnout Vandecappelle <[email protected] <mailto:[email protected]>> wrote:

    On 27/01/13 20:03, Daniel Nelson wrote:
     > All,
     >
     > This is my first buildroot/open source submission. I'd appreciate
    some feedback.
     >
     > Python3 changes the behavior of .pyc caching, breaking the
    PYC-only option in buildroot. The details are
    inhttp://www.python.org/dev/peps/pep-3147
    <http://www.python.org/dev/peps/pep-3147>
     >
     > I've added a configure flag to Python3, and corresponding logic in
    buildroot.

      Hasn't this been fixed in git 6ffab129 ?

[snip]

Signature · 6 lines
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F
#4 lore raw

PATCH 1/1 Fix PYC-only installation for Python3

In reply to Daniel Nelson
Quoted 6 lines · Daniel Nelson

All,

This is my first buildroot/open source submission. I'd appreciate some feedback.

Python3 changes the behavior of .pyc caching, breaking the PYC-only option in buildroot. The details are in http://www.python.org/dev/peps/pep-3147

Quoted 7 lines

I've added a configure flag to Python3, and corresponding logic in buildroot.

Thoughts?

Thanks,

Daniel Nelson

This message will end up in the git log, but it's not appropriate for
that. Please create a proper commit message, and make sure it is line-wrapped at 80 columns. If you want to give additional comments that should not go into the git log (like the 'this is my first open source submission'), add them below the ---.

Also, we require you to add a Signed-off-by line for yourself. This is
a short way for you to assert that you are entitled to contribute the patch under buildroot's GPL license. See
http://elinux.org/Developer_Certificate_Of_Origin
for more details.

More minor comments below - but they're just optional, so:

(untested)

(If you repost this patch, with or without the proposed modifications, you can add my Acked-by line below your Signed-off-by line.)

Quoted 12 lines
---
  ...ython3-3.3-012-support-pre-pep3147-stdlib.patch | 121 +++++++++++++++++++++
  package/python3/python3.mk                         |   4 +
  2 files changed, 125 insertions(+)

create mode 100644 package/python3/python3-3.3-012-support-pre-pep3147-stdlib.patch

package/python3/python3-3.3-012-support-pre-pep3147-stdlib.patch new file +0 -0
new file mode 100644
index 0000000..fadd5e1

package/python3/python3-3.3-012-support-pre-pep3147-stdlib.patch line 10

Quoted 10 lines
package/python3/python3-3.3-012-support-pre-pep3147-stdlib.patch new file +10 -0
@@ -0,0 +1,121 @@
+--- python3-3.3.0/configure.ac	2013-01-26 19:12:56.446601796 -0800
++++ python3-3.3.0-new/configure.ac	2013-01-26 19:11:31.632687123 -0800
+@@ -1827,6 +1828,28 @@
+     LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';;
+ esac
+
++STDLIB_CACHE_FLAGS=
++STDLIB_CACHE_TYPE=pep3147
++AC_MSG_CHECKING(for --with-stdlib-cache)
++AC_ARG_WITH(stdlib-cache,

Since there are only two options, an AC_ARG_ENABLE seems more
appropriate. That also makes the implementation slightly smaller because you don't need the STDLIB_CACHE_TYPE, just:

AC_ARG_ENABLE(old-stdlib-cache,

     AS_HELP_STRING(...),
     [
     if [ "$enableval" = "yes" ]; then
        STDLIB_CACHE_FLAGS="-b"
     else
        STDLIB_CACHE_FLAGS=""
     fi
     ],
     [STDLIB_CACHE_FLAGS=""])
Quoted 13 lines
package/python3/python3-3.3-012-support-pre-pep3147-stdlib.patch new file +13 -0
++    AS_HELP_STRING([--with-stdlib-cache=type], [select type of stdlib cache ("pep3147", or "old")]),
++[
++	AC_MSG_RESULT($withval)
++    STDLIB_CACHE_TYPE=$withval
++],
++[
++ 	AC_MSG_RESULT(${STDLIB_CACHE_TYPE})
++])
++case $STDLIB_CACHE_TYPE in
++    pep3147)
++        STDLIB_CACHE_FLAGS=""
++        ;;
++    old)

package/python3/python3-3.3-012-support-pre-pep3147-stdlib.patch line 33

Quoted 10 lines
package/python3/python3-3.3-012-support-pre-pep3147-stdlib.patch new file +10 -0
++        STDLIB_CACHE_FLAGS="-b"
++        ;;
++esac
++AC_SUBST(STDLIB_CACHE_FLAGS)
++
+ AC_MSG_CHECKING(for --enable-framework)
+ if test "$enable_framework"
+ then
+--- python3-3.3.0/configure	2012-09-29 01:00:50.000000000 -0700
++++ python3-3.3.0-new/configure	2013-01-26 19:11:38.562839350 -0800

Since we run autoreconf, it's not necessary to patch the configure
script - it will anyway be overwritten.

Regards,
Arnout

[snip]

Signature · 6 lines
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F
author
#5 lore raw

PATCH 1/1 Fix PYC-only installation for Python3

Quoted 27 lines · Arnout Vandecappelle
Quoted 9 lines · Daniel Nelson

All,

This is my first buildroot/open source submission. I'd appreciate some feedback.

Python3 changes the behavior of .pyc caching, breaking the PYC-only option in buildroot. The details are in http://www.python.org/dev/**
peps/pep-3147 <http://www.python.org/dev/peps/pep-3147>

Quoted 9 lines

I've added a configure flag to Python3, and corresponding logic in buildroot.

Thoughts?

Thanks,

Daniel Nelson

This message will end up in the git log, but it's not appropriate for
that. Please create a proper commit message, and make sure it is line-wrapped at 80 columns. If you want to give additional comments that should not go into the git log (like the 'this is my first open source submission'), add them below the ---.

Quoted 7 lines

Also, we require you to add a Signed-off-by line for yourself. This is a
short way for you to assert that you are entitled to contribute the patch under buildroot's GPL license. See
http://elinux.org/Developer_**Certificate_Of_Origin<http://elinux.org/Developer_Certificate_Of_Origin>
for more details.

I edited the patch file before git send-email to include the above text, so the above text will not be in the commit message. I'll provide a correct commit message in the next version of the patch.

Quoted 7 lines

More minor comments below - but they're just optional, so:

(untested)

(If you repost this patch, with or without the proposed modifications, you can add my Acked-by line below your Signed-off-by line.)

I will. Thanks.

Quoted 38 lines

---

Quoted 18 lines
  ...ython3-3.3-012-support-pre-**pep3147-stdlib.patch | 121
+++++++++++++++++++++
  package/python3/python3.mk                         |   4 +
  2 files changed, 125 insertions(+)

create mode 100644 package/python3/python3-3.3-**
012-support-pre-pep3147-**stdlib.patch

package/python3/python3-3.3-**012-support-pre-pep3147-** new file +0 -0
new file mode 100644
index 0000000..fadd5e1

stdlib.patch

package/python3/python3-3.3-**012-support-pre-pep3147-** new file +2 -0
@@ -0,0 +1,121 @@
+--- python3-3.3.0/configure.ac 2013-01-26 19:12:56.446601796 -0800
++++ python3-3.3.0-new/configure.ac     2013-01-26 19:11:31.632687123

package/python3/python3-3.3-**012-support-pre-pep3147-**

Quoted 10 lines
package/python3/python3-3.3-**012-support-pre-pep3147-** new file +8 -2
-0800
+@@ -1827,6 +1828,28 @@
+     LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION)
-current_version $(VERSION)';;
+ esac
+
++STDLIB_CACHE_FLAGS=
++STDLIB_CACHE_TYPE=pep3147
++AC_MSG_CHECKING(for --with-stdlib-cache)
++AC_ARG_WITH(stdlib-cache,

Since there are only two options, an AC_ARG_ENABLE seems more
appropriate. That also makes the implementation slightly smaller because you don't need the STDLIB_CACHE_TYPE, just:

AC_ARG_ENABLE(old-stdlib-**cache,

Quoted 11 lines
    AS_HELP_STRING(...),
    [
    if [ "$enableval" = "yes" ]; then
       STDLIB_CACHE_FLAGS="-b"
    else
       STDLIB_CACHE_FLAGS=""
    fi
    ],
    [STDLIB_CACHE_FLAGS=""])

Will do.

Quoted 28 lines

++ AS_HELP_STRING([--with-stdlib-**cache=type], [select type of

Quoted 21 lines

stdlib cache ("pep3147", or "old")]),
++[
++ AC_MSG_RESULT($withval)
++ STDLIB_CACHE_TYPE=$withval
++],
++[
++ AC_MSG_RESULT(${STDLIB_CACHE_**TYPE})
++])
++case $STDLIB_CACHE_TYPE in
++ pep3147)
++ STDLIB_CACHE_FLAGS=""
++ ;;
++ old)
++ STDLIB_CACHE_FLAGS="-b"
++ ;;
++esac
++AC_SUBST(STDLIB_CACHE_FLAGS)
++
+ AC_MSG_CHECKING(for --enable-framework)
+ if test "$enable_framework"
+ then

Quoted 4 lines
+--- python3-3.3.0/configure    2012-09-29 01:00:50.000000000 -0700
++++ python3-3.3.0-new/configure        2013-01-26 19:11:38.562839350

-0800

Quoted 4 lines

Since we run autoreconf, it's not necessary to patch the configure script
- it will anyway be overwritten.

Acked. I'll make the modifications and resubmit.

Thanks,

Daniel

Quoted 9 lines

Regards,
Arnout

[snip]

Quoted 8 lines

--

Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/**arnoutvandecappelle<http://www.linkedin.com/in/arnoutvandecappelle>
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20130127/64a1b71e/attachment.html>

#6 lore raw

PATCH 1/1 Fix PYC-only installation for Python3

Quoted 1 line · Daniel N

Acked. I'll make the modifications and resubmit.

Could you also CC
Maxime Ripard <[email protected]>

He has done the most work on python3 so he should be able to runtime test it (I can do a compile test but that doesn't help much).

Regards,
Arnout

Signature · 6 lines
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F
#7 lore raw

PATCH v2 1/1 python3: Fix pyc-only related runtime exceptions

In reply to Daniel Nelson

Python3 changes the pyc lookup strategy, ignoring the __pycache__ directory if the .py file is missing. Change install location to enable use of .pyc without their parent .py

See http://www.python.org/dev/peps/pep-3147

(untested)

---
 .../python3/python3-3.3-012-old-stdlib-cache.patch | 53 ++++++++++++++++++++++
 package/python3/python3.mk                         |  4 ++
 2 files changed, 57 insertions(+)
 create mode 100644 package/python3/python3-3.3-012-old-stdlib-cache.patch
package/python3/python3-3.3-012-old-stdlib-cache.patch new file +53 -0
new file mode 100644
index 0000000..23171d5
@@ -0,0 +1,53 @@
+--- python3-3.3.0/configure.ac	2013-01-27 16:35:52.429067797 -0800
++++ python3-3.3.0/configure.ac	2013-01-27 16:43:43.528601443 -0800
+@@ -1827,6 +1827,23 @@
+     LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';;
+ esac
+ 
++STDLIB_CACHE_FLAGS=
++AC_MSG_CHECKING(for --enable-old-stdlib-cache)
++AC_ARG_ENABLE(old-stdlib-cache,
++    AS_HELP_STRING([--enable-old-stdlib-cache], [enable pre-pep3147 stdlib cache]),
++[
++    if test "$enableval" = "yes"
++    then
++        STDLIB_CACHE_FLAGS="-b"
++    else
++        STDLIB_CACHE_FLAGS="" 
++    fi
++],
++[
++    STDLIB_CACHE_FLAGS="" 
++])
++AC_SUBST(STDLIB_CACHE_FLAGS)
++
+ AC_MSG_CHECKING(for --enable-framework)
+ if test "$enable_framework"
+ then
+--- python3-3.3.0/Makefile.pre.in	2013-01-27 16:35:52.422067642 -0800
++++ python3-3.3.0/Makefile.pre.in	2013-01-27 16:37:03.710650439 -0800
+@@ -143,6 +143,9 @@
+ # Options to enable prebinding (for fast startup prior to Mac OS X 10.3)
+ OTHER_LIBTOOL_OPT=@OTHER_LIBTOOL_OPT@
+ 
++# Option to enable old-style precompiled stdlib
++STDLIB_CACHE_FLAGS=@STDLIB_CACHE_FLAGS@
++
+ # Environment to run shared python without installed libraries
+ RUNSHARED=       @RUNSHARED@
+ 
+@@ -1079,12 +1082,12 @@
+ 	fi
+ 	-PYTHONPATH=$(DESTDIR)$(LIBDEST)  $(RUNSHARED) \
+ 		$(PYTHON_FOR_BUILD) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \
+-		-d $(LIBDEST) -f \
++		-d $(LIBDEST) -f $(STDLIB_CACHE_FLAGS) \
+ 		-x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
+ 		$(DESTDIR)$(LIBDEST)
+ 	-PYTHONPATH=$(DESTDIR)$(LIBDEST)  $(RUNSHARED) \
+ 		$(PYTHON_FOR_BUILD) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \
+-		-d $(LIBDEST)/site-packages -f \
++		-d $(LIBDEST)/site-packages -f $(STDLIB_CACHE_FLAGS) \
+ 		-x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
+ 	-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+ 		$(PYTHON_FOR_BUILD) -m lib2to3.pgen2.driver $(DESTDIR)$(LIBDEST)/lib2to3/Grammar.txt
package/python3/python3.mk +4 -0
index e7c0983..7551a7b 100644
@@ -70,6 +70,10 @@ else
 PYTHON3_CONF_OPT += --with-expat=none
 endif
 
+ifeq ($(BR2_PACKAGE_PYTHON3_PYC_ONLY),y)
+PYTHON3_CONF_OPT += --enable-old-stdlib-cache
+endif
+
 ifeq ($(BR2_PACKAGE_PYTHON3_SQLITE),y)
 PYTHON3_DEPENDENCIES += sqlite
 endif
Signature · 1 line
1.8.1
#8 lore raw

PATCH v2 1/1 python3: Fix pyc-only related runtime exceptions

Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line

"Daniel" == Daniel Nelson <[email protected]> writes:

Daniel> Python3 changes the pyc lookup strategy, ignoring the Daniel> __pycache__ directory if the .py file is missing. Change Daniel> install location to enable use of .pyc without their parent .py

Daniel> See http://www.python.org/dev/peps/pep-3147

Daniel> Signed-off-by: Daniel Nelson <[email protected]> Daniel> Acked-by: Arnout Vandecappelle (Essensium/Mind) <[email protected]>
Daniel> (untested)
Daniel> ---

 Daniel>  .../python3/python3-3.3-012-old-stdlib-cache.patch | 53 ++++++++++++++++++++++
 Daniel>  package/python3/python3.mk                         |  4 ++

Daniel> 2 files changed, 57 insertions(+)
Daniel> create mode 100644 package/python3/python3-3.3-012-old-stdlib-cache.patch

Daniel> diff --git a/package/python3/python3-3.3-012-old-stdlib-cache.patch b/package/python3/python3-3.3-012-old-stdlib-cache.patch Daniel> new file mode 100644
Daniel> index 0000000..23171d5
Daniel> --- /dev/null
Daniel> +++ b/package/python3/python3-3.3-012-old-stdlib-cache.patch

You forgot to add a patch header describing what it does. I've copied your commit message to here and committed, thanks.

Signature · 1 line
Bye, Peter Korsgaard