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)
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) && \
--datarootdir=/.remove \
--enable-shared \
--disable-static \
- --without-python \
+ --with-python \
--without-debug \
- --without-c14n \
+ --with-c14n \
--without-legacy \
--without-catalog \
--without-docbook \
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)
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)
--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 \
$(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
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 \
--- /dev/null
+#!/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 "********************************************************************************"