From ecdf7f32f9fa89d9b1799244c21a314441a574ea Mon Sep 17 00:00:00 2001 From: Markham Date: Sun, 3 Mar 2024 15:41:02 +0100 Subject: [PATCH] add building python site-packages; add yt-dlp --- make/environment-build.mk | 2 +- make/libraries.mk | 10 +++++-- make/neutrino.mk | 7 +++-- make/python3.mk | 61 ++++++++++++++++++++++++++++++++++++++- make/rootfs.mk | 2 +- scripts/python-venv | 18 ++++++++++++ 6 files changed, 91 insertions(+), 9 deletions(-) create mode 100755 scripts/python-venv diff --git a/make/environment-build.mk b/make/environment-build.mk index 76410cc..9b6f16b 100755 --- a/make/environment-build.mk +++ b/make/environment-build.mk @@ -29,7 +29,7 @@ SUPPORT_DIR = $(BASE_DIR)/support CROSS_BASE = $(BASE_DIR)/cross CROSS_DIR ?= $(CROSS_BASE) -HOST_CPPFLAGS = -I$(HOSTPREFIX)/usr/include +HOST_CPPFLAGS = -I$(HOSTPREFIX)/usr/include -I$(HOSTPREFIX)/usr/include/python3.11 HOST_CFLAGS ?= -O2 HOST_CFLAGS += $(HOST_CPPFLAGS) HOST_CXXFLAGS += $(HOST_CFLAGS) diff --git a/make/libraries.mk b/make/libraries.mk index eac51ae..839a42e 100755 --- a/make/libraries.mk +++ b/make/libraries.mk @@ -661,7 +661,11 @@ $(D)/libjpeg-turbo2: $(ARCHIVE)/libjpeg-turbo-$(JPEG_TURBO2_VER).tar.gz | $(TARG NEVIS_XML2_FLAGS = --without-iconv NEVIS_XML2_FLAGS += --with-minimum #endif -$(D)/libxml2: $(ARCHIVE)/libxml2-$(LIBXML2_VER).tar.gz | $(TARGETPREFIX) +ifeq ($(BOXSERIES), $(filter $(BOXSERIES), hd5x hd6x)) +XML2_DEPS = $(D)/python3 +endif + +$(D)/libxml2: $(XML2_DEPS) $(ARCHIVE)/libxml2-$(LIBXML2_VER).tar.gz | $(TARGETPREFIX) $(START_BUILD) $(UNTAR)/libxml2-$(LIBXML2_VER).tar.gz pushd $(BUILD_TMP)/libxml2-$(LIBXML2_VER) && \ @@ -672,9 +676,9 @@ $(D)/libxml2: $(ARCHIVE)/libxml2-$(LIBXML2_VER).tar.gz | $(TARGETPREFIX) --datarootdir=/.remove \ --enable-shared \ --disable-static \ - --without-python \ + --with-python \ --without-debug \ - --without-c14n \ + --with-c14n \ --without-legacy \ --without-catalog \ --without-docbook \ diff --git a/make/neutrino.mk b/make/neutrino.mk index fffa671..854ddad 100755 --- a/make/neutrino.mk +++ b/make/neutrino.mk @@ -118,12 +118,13 @@ NEUTRINO_DEPS += $(D)/mc NEUTRINO_DEPS += $(D)/rsync NEUTRINO_DEPS += $(D)/davfs2 endif -ifeq ($(BOXSERIES), $(filter $(BOXSERIES), hd5x hd6x)) -NEUTRINO_DEPS += $(D)/irqbalance -endif NEUTRINO_DEPS += $(D)/libdvdcss NEUTRINO_DEPS += $(D)/dvdreadfs +ifeq ($(BOXSERIES), $(filter $(BOXSERIES), hd5x hd6x)) +NEUTRINO_DEPS += $(D)/irqbalance +NEUTRINO_DEPS += $(D)/yt-dlp +endif neutrino-deps: $(NEUTRINO_DEPS) diff --git a/make/python3.mk b/make/python3.mk index 90cb6f5..48dc333 100644 --- a/make/python3.mk +++ b/make/python3.mk @@ -73,6 +73,7 @@ $(D)/python3: $(D)/host_python3 $(ARCHIVE)/Python-$(PYTHON3_VER).tar.xz | $(TARG rm -rf $(TARGETPREFIX)/usr/bin/smtpd.py.* rm -rf $(TARGETPREFIX)/usr/lib/python$(PYTHON3_VER_MAJOR)/config-$(PYTHON3_VER_MAJOR)* chmod u+w $(TARGETPREFIX)/usr/lib/libpython$(PYTHON3_VER_MAJOR)*.so* + install -m 0755 $(BASE_DIR)/scripts/python-venv $(TARGETPREFIX)/usr/bin $(REMOVE)/Python-$(PYTHON3_VER) $(TOUCH) @@ -91,13 +92,13 @@ HOST_PYTHON3_CONF_OPTS += \ --without-ensurepip \ --without-cxx-main \ --with-expat=system \ + --enable-openssl \ --enable-unicodedata \ --disable-bzip2 \ --disable-codecs-cjk \ --disable-curses \ --disable-idle3 \ --disable-nis \ - --disable-openssl \ --disable-ossaudiodev \ --disable-sqlite3 \ --disable-test-modules \ @@ -121,6 +122,64 @@ $(D)/host_python3: $(D)/host_zlib $(D)/host_libffi $(D)/host_expat $(ARCHIVE)/Py $(REMOVE)/Python-$(PYTHON3_VER) $(TOUCH) +# -------------- Packages ------------------------------------------ +SITE_PACKAGES = $(BUILD_TMP)/sites-packages +VENV_DIR = $(BUILD_TMP)/python3_venv + +CFLAGS="-I$(TARGETPREFIX)/usr/include/python$(PYTHON3_VER_MAJOR)" + +PACKAGES_DEPS = $(D)/host_python3_pip $(D)/host_python3_crossenv $(D)/python3_build_crossenv $(D)/python3_upgrade_pip $(D)/python3_packages + +$(D)/yt-dlp: $(D)/python3_packages | $(TARGETPEFIX) + $(START_BUILD) + mkdir -p $(SITE_PACKAGES) + CFLAGS=$(CFLAGS) $(VENV_DIR)/bin/cross-pip -v install --upgrade --target=$(SITE_PACKAGES) yt-dlp + find $(SITE_PACKAGES) -name "*.so" -exec $(TARGET)-strip {} \; + +$(D)/python3_packages: $(PACKAGES_DEPS) | $(TARGETPEFIX) + $(START_BUILD) + mkdir -p $(SITE_PACKAGES) + CFLAGS=$(CFLAGS) $(VENV_DIR)/bin/cross-pip -v install --upgrade --target=$(SITE_PACKAGES) brotli + CFLAGS=$(CFLAGS) $(VENV_DIR)/bin/cross-pip -v install --upgrade --target=$(SITE_PACKAGES) certifi + CFLAGS=$(CFLAGS) $(VENV_DIR)/bin/cross-pip -v install --upgrade --target=$(SITE_PACKAGES) websockets + CFLAGS=$(CFLAGS) $(VENV_DIR)/bin/cross-pip -v install --upgrade --target=$(SITE_PACKAGES) requests + CFLAGS=$(CFLAGS) $(VENV_DIR)/bin/cross-pip -v install --upgrade --target=$(SITE_PACKAGES) mutagen + CFLAGS=$(CFLAGS) $(VENV_DIR)/bin/cross-pip -v install --upgrade --target=$(SITE_PACKAGES) pycryptodomex + find $(SITE_PACKAGES) -name "*.so" -exec $(TARGET)-strip {} \; + cp -fr $(SITE_PACKAGES)/bin/ $(TARGETPREFIX)/usr/ + rm -fr $(SITE_PACKAGES)/share + rsync -av --exclude='/bin/' $(SITE_PACKAGES)/ $(TARGETPREFIX)/usr/lib/python$(PYTHON3_VER_MAJOR)/site-packages/ + $(TOUCH) + +$(D)/python3_build_crossenv: $(D)/host_python3 $(D)/host_python3_crossenv | $(TARGETPEFIX) + $(START_BUILD) + $(REMOVE)/$(VENV_DIR) + @echo "Creating python crossenv." + @echo "This will take a few seconds ..." + $(HOSTPREFIX)/usr/bin/python3 -m crossenv $(TARGETPREFIX)/usr/bin/python3 $(VENV_DIR) + chmod 0755 $(VENV_DIR)/bin/activate + $(VENV_DIR)/bin/activate + $(TOUCH) +$(D)/python3_upgrade_pip: $(D)/python3 | $(TARGETPEFIX) + $(START_BUILD) + $(VENV_DIR)/bin/cross-python3 -m pip -v install pip --upgrade + $(TOUCH) + +$(D)/host_python3_crossenv: $(D)/host_python3 $(D)/host_python3_pip | $(TARGETPEFIX) + $(START_BUILD) + @echo "Installing python crossenv." + $(HOSTPREFIX)/usr/bin/pip install crossenv + $(TOUCH) + +$(ARCHIVE)/get-pip.py: + curl -sSL https://bootstrap.pypa.io/get-pip.py -o $(ARCHIVE)/get-pip.py + +$(D)/host_python3_pip: $(ARCHIVE)/get-pip.py $(D)/host_python3 | $(TARGETPEFIX) + $(START_BUILD) + @echo "Installing lastest pip." + $(HOSTPREFIX)/usr/bin/python3 $(ARCHIVE)/get-pip.py + $(TOUCH) + \ No newline at end of file diff --git a/make/rootfs.mk b/make/rootfs.mk index f89be2d..bc37d22 100755 --- a/make/rootfs.mk +++ b/make/rootfs.mk @@ -7,7 +7,7 @@ $(D)/rootfs: $(D)/driver mkdir -p $(ROOTFS_DIR)/oldroot rm -rf $(ROOTFS_DIR)/include $(ROOTFS_DIR)/mymodules rm -rf $(ROOTFS_DIR)/share/{aclocal,gdb,locale,doc} # locale not (yet) needed by anything - rm -rf $(ROOTFS_DIR)/lib/{cmake,gio,glib-*,libvorbisenc*,sigc++-*,pkgconfig,gettext} + rm -rf $(ROOTFS_DIR)/lib/{cmake,glib-*,libvorbisenc*,sigc++-*,pkgconfig,gettext} rm -rf $(ROOTFS_DIR)/usr/include rm -rf $(ROOTFS_DIR)/usr/lib/pkgconfig find $(ROOTFS_DIR)/share/tuxbox/neutrino/locale/ -type f \ diff --git a/scripts/python-venv b/scripts/python-venv new file mode 100755 index 0000000..730e49b --- /dev/null +++ b/scripts/python-venv @@ -0,0 +1,18 @@ +#!/bin/sh + +TERM_GREEN='\033[0;32m' +TERM_YELLOW_BOLD='\033[1;33m' +TERM_NORMAL='\033[0m' + +VENV=/tmp/venv + +if [ ! -e "${VENV}" ]; then + echo -e "${TERM_YELLOW_BOLD}Creating Python's virtual environment.${TERM_NORMAL}" + echo -e "This will take a few seconds ..." + python -m venv --system-site-packages "${VENV}" +fi + +echo "********************************************************************************" +echo -e "Type ${TERM_GREEN}'source "${VENV}"/bin/activate'${TERM_NORMAL} to activate Python's virtual environment." +echo -e "To leave the virtual environment type ${TERM_GREEN}'deactivate'${TERM_NORMAL} in the terminal." +echo "********************************************************************************" -- 2.39.5