aboutsummaryrefslogtreecommitdiff
path: root/lang
diff options
context:
space:
mode:
authorJeffery To <jeffery.to@gmail.com>2020-04-14 21:14:49 +0800
committerJeffery To <jeffery.to@gmail.com>2020-04-19 01:56:23 +0800
commit3cdca38dce01553766b032d8bbfce08a35d6555e (patch)
tree01a39717623d2d1366a151182b7e5f68ae0fd2f1 /lang
parent0bc1bf55781e31a3513a6a6269f1003b4344d04e (diff)
python3: Move functionality into python3-package.mk
This moves functionality from python-package-install.sh into python3-package.mk, so that they can be reused separate from filespec processing. Signed-off-by: Jeffery To <jeffery.to@gmail.com>
Diffstat (limited to 'lang')
-rw-r--r--lang/python/python-package-install.sh56
-rw-r--r--lang/python/python3-package.mk70
2 files changed, 62 insertions, 64 deletions
diff --git a/lang/python/python-package-install.sh b/lang/python/python-package-install.sh
index 337727af1..fa42f6f4a 100644
--- a/lang/python/python-package-install.sh
+++ b/lang/python/python-package-install.sh
@@ -1,11 +1,6 @@
#!/bin/sh
set -e
-[ -z "$SOURCE_DATE_EPOCH" ] || {
- PYTHONHASHSEED="$SOURCE_DATE_EPOCH"
- export PYTHONHASHSEED
-}
-
process_filespec() {
local src_dir="$1"
local dst_dir="$2"
@@ -40,56 +35,11 @@ process_filespec() {
)
}
-delete_empty_dirs() {
- local dst_dir="$1"
- if [ -d "$dst_dir/usr" ] ; then
- find "$dst_dir/usr" -empty -type d -delete
- fi
-}
-
-ver="$1"
-src_dir="$2"
-dst_dir="$3"
-python="$4"
-mode="$5"
-filespec="$6"
-
-find "$src_dir" -name "*.exe" -delete
+src_dir="$1"
+dst_dir="$2"
+filespec="$3"
process_filespec "$src_dir" "$dst_dir" "$filespec" || {
echo "process filespec error-ed"
exit 1
}
-
-if [ "$mode" == "sources" ] ; then
- # Copy only python source files
- find "$dst_dir" -not -type d -not -name "*.py" -delete
-
- delete_empty_dirs "$dst_dir"
- exit 0
-fi
-
-if [ "$ver" == "3" ] ; then
- legacy="-b"
-fi
-# default max recursion is 10
-max_recursion_level=20
-
-# XXX [So that you won't goof as I did]
-# Note: Yes, I tried to use the -O & -OO flags here.
-# However the generated byte-codes were not portable.
-# So, we just stuck to un-optimized byte-codes,
-# which is still way better/faster than running
-# Python sources all the time.
-$python -m compileall -r "$max_recursion_level" $legacy -d '/' "$dst_dir" || {
- echo "python -m compileall err-ed"
- exit 1
-}
-
-# Delete source files and pyc [ un-optimized bytecode files ]
-# We may want to make this optimization thing configurable later, but not sure atm
-find "$dst_dir" -type f -name "*.py" -delete
-
-delete_empty_dirs "$dst_dir"
-
-exit 0
diff --git a/lang/python/python3-package.mk b/lang/python/python3-package.mk
index 81e7cd777..6fab0f5cd 100644
--- a/lang/python/python3-package.mk
+++ b/lang/python/python3-package.mk
@@ -75,7 +75,47 @@ define Python3/ModSetup
endef
define Python3/FixShebang
-$(SED) "1"'!'"b;s,^#"'!'".*python.*,#"'!'"/usr/bin/python3," -i --follow-symlinks $(1)
+ $(SED) "1"'!'"b;s,^#"'!'".*python.*,#"'!'"/usr/bin/python3," -i --follow-symlinks $(1)
+endef
+
+# default max recursion is 10
+PYTHON3_COMPILEALL_MAX_RECURSION_LEVEL:=20
+
+# $(1) => directory of python source files to compile
+#
+# XXX [So that you won't goof as I did]
+# Note: Yes, I tried to use the -O & -OO flags here.
+# However the generated byte-codes were not portable.
+# So, we just stuck to un-optimized byte-codes,
+# which is still way better/faster than running
+# Python sources all the time.
+#
+# Setting a fixed hash seed value is less secure than using
+# random seed values, but is necessary for reproducible builds
+# (for now).
+#
+# Should revisit this when https://bugs.python.org/issue37596
+# (and other related reproducibility issues) are fixed.
+define Python3/CompileAll
+ $(call Python3/Run,, \
+ -m compileall -r "$(PYTHON3_COMPILEALL_MAX_RECURSION_LEVEL)" -b -d '/' $(1),
+ $(if $(SOURCE_DATE_EPOCH),PYTHONHASHSEED="$(SOURCE_DATE_EPOCH)")
+ )
+endef
+
+# $(1) => target directory
+define Python3/DeleteSourceFiles
+ $(FIND) $(1) -type f -name '*.py' -delete
+endef
+
+# $(1) => target directory
+define Python3/DeleteNonSourceFiles
+ $(FIND) $(1) -not -type d -not -name '*.py' -delete
+endef
+
+# $(1) => target directory
+define Python3/DeleteEmptyDirs
+ $(FIND) $(1) -mindepth 1 -empty -type d -not -path '$(1)/CONTROL' -not -path '$(1)/CONTROL/*' -delete
endef
@@ -122,20 +162,28 @@ define Py3Package
ifndef Package/$(1)/install
$(call shexport,Py3Package/$(1)/filespec)
- define Package/$(1)/install
+ define Package/$(1)/install
$$(call Py3Package/$(1)/install,$$(1))
- $(SHELL) $(python3_mk_path)python-package-install.sh "3" \
+ $(SHELL) $(python3_mk_path)python-package-install.sh \
"$(PKG_INSTALL_DIR)" "$$(1)" \
- "$(HOST_PYTHON3_BIN)" "$$(2)" \
- "$$$$$$$$$$(call shvar,Py3Package/$(1)/filespec)" && \
- if [ -d "$$(1)/usr/bin" ]; then \
- $(call Python3/FixShebang,$$(1)/usr/bin/*) ; \
+ "$$$$$$$$$$(call shvar,Py3Package/$(1)/filespec)"
+ $(FIND) $$(1) -name '*.exe' -delete
+ $$(call Python3/CompileAll,$$(1))
+ $$(call Python3/DeleteSourceFiles,$$(1))
+ $$(call Python3/DeleteEmptyDirs,$$(1))
+ if [ -d "$$(1)/usr/bin" ]; then \
+ $$(call Python3/FixShebang,$$(1)/usr/bin/*) ; \
fi
- endef
+ endef
- define Package/$(1)-src/install
- $$(call Package/$(1)/install,$$(1),sources)
- endef
+ define Package/$(1)-src/install
+ $$(call Py3Package/$(1)/install,$$(1))
+ $(SHELL) $(python3_mk_path)python-package-install.sh \
+ "$(PKG_INSTALL_DIR)" "$$(1)" \
+ "$$$$$$$$$$(call shvar,Py3Package/$(1)/filespec)"
+ $$(call Python3/DeleteNonSourceFiles,$$(1))
+ $$(call Python3/DeleteEmptyDirs,$$(1))
+ endef
endif # Package/$(1)/install
endef