From 2fad0b7f8069787e2d404b4da7d6c4fb910de2ab Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Mon, 10 May 2021 18:54:28 +0200 Subject: [PATCH] Fetch pip packages at build time --- debian/control | 7 +++-- debian/nymea-plugin-fastcom.install.in | 4 +-- debian/nymea-plugin-neatobotvac.install.in | 4 +-- debian/nymea-plugin-sunposition.install.in | 5 +--- debian/rules | 15 +++++------ fastcom/fastcom.pro | 5 ++-- neatobotvac/neatobotvac.pro | 6 ++--- python-plugins.pri | 31 ++++++++++++++++++++++ sunposition/requirements.txt | 3 ++- sunposition/sunposition.pro | 5 ++-- 10 files changed, 51 insertions(+), 34 deletions(-) create mode 100644 python-plugins.pri diff --git a/debian/control b/debian/control index 6c0ed8cc..8de75371 100644 --- a/debian/control +++ b/debian/control @@ -19,6 +19,9 @@ Build-depends: libboblight-dev, libsodium-dev, libudev-dev, libhidapi-dev, + python3-pip:native, + python3-setuptools, + python3-wheel:native, Standards-Version: 3.9.3 @@ -274,7 +277,6 @@ Package: nymea-plugin-fastcom Architecture: any Depends: ${misc:Depends}, nymea-plugins-translations, - python3-pip, Description: nymea.io plugin for fast.com based internet speed test The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and @@ -485,7 +487,6 @@ Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, nymea-plugins-translations, - python3-pip, Description: nymea.io plugin for neato The nymea daemon is a plugin based IoT (Internet of Things) server. The server works like a translator for devices, things and services and @@ -957,8 +958,6 @@ Description: nymea.io plugin for Sonos smart speakers Package: nymea-plugin-sunposition Architecture: any Depends: ${misc:Depends}, - libatlas-base-dev, - python3-pip, nymea-plugins-translations, Description: nymea.io plugin for calculating the sun position The nymea daemon is a plugin based IoT (Internet of Things) server. The diff --git a/debian/nymea-plugin-fastcom.install.in b/debian/nymea-plugin-fastcom.install.in index f5a308b1..35f93aac 100644 --- a/debian/nymea-plugin-fastcom.install.in +++ b/debian/nymea-plugin-fastcom.install.in @@ -1,3 +1 @@ -fastcom/integrationpluginfastcom.json usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/fastcom/ -fastcom/integrationpluginfastcom.py usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/fastcom/ -fastcom/requirements.txt usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/fastcom/ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/fastcom/ diff --git a/debian/nymea-plugin-neatobotvac.install.in b/debian/nymea-plugin-neatobotvac.install.in index 76a6c8b3..2e89c39f 100644 --- a/debian/nymea-plugin-neatobotvac.install.in +++ b/debian/nymea-plugin-neatobotvac.install.in @@ -1,3 +1 @@ -neatobotvac/integrationpluginneatobotvac.json usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/neatobotvac/ -neatobotvac/integrationpluginneatobotvac.py usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/neatobotvac/ -neatobotvac/requirements.txt usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/neatobotvac/ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/neatobotvac/ diff --git a/debian/nymea-plugin-sunposition.install.in b/debian/nymea-plugin-sunposition.install.in index e8aa93fc..3a101231 100644 --- a/debian/nymea-plugin-sunposition.install.in +++ b/debian/nymea-plugin-sunposition.install.in @@ -1,4 +1 @@ -sunposition/integrationpluginsunposition.json usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/sunposition/ -sunposition/integrationpluginsunposition.py usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/sunposition/ -sunposition/sunposition.py usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/sunposition/ -sunposition/requirements.txt usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/sunposition/ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/sunposition/ diff --git a/debian/rules b/debian/rules index b0be54f1..36aff198 100755 --- a/debian/rules +++ b/debian/rules @@ -8,14 +8,6 @@ $(PREPROCESS_FILES:.in=): %: %.in sed 's,/@DEB_HOST_MULTIARCH@,$(DEB_HOST_MULTIARCH:%=/%),g' $< > $@ chmod --reference=$< $@ -# Auto-generate install/remove hooks to fetch/cleanup python dependencies from requirements.txt -PYTHON_REQUIREMENTS := $(shell find -name requirements.txt) -$(PYTHON_REQUIREMENTS:.txt=): %: %.txt - $(eval PYTHON_PLUGIN=$(subst /requirements.txt,,$<)) - echo "#DEBHELPER#" | tee debian/nymea-plugin-$(PYTHON_PLUGIN).postinst | tee debian/nymea-plugin-$(PYTHON_PLUGIN).prerm - echo "pip3 install --require-hashes --upgrade -r usr/lib/$(DEB_HOST_MULTIARCH)/nymea/plugins/$(PYTHON_PLUGIN)/requirements.txt -t usr/lib/$(DEB_HOST_MULTIARCH)/nymea/plugins/$(PYTHON_PLUGIN)/modules" >> debian/nymea-plugin-$(PYTHON_PLUGIN).postinst - echo "rm -rf usr/lib/$(DEB_HOST_MULTIARCH)/nymea/plugins/$(PYTHON_PLUGIN)/modules" >> debian/nymea-plugin-$(PYTHON_PLUGIN).prerm - %: dh $@ --parallel @@ -23,7 +15,7 @@ override_dh_auto_build: dh_auto_build make lrelease -override_dh_install: $(PREPROCESS_FILES:.in=) $(PYTHON_REQUIREMENTS:.txt=) +override_dh_install: $(PREPROCESS_FILES:.in=) dh_install --fail-missing override_dh_auto_clean: @@ -32,3 +24,8 @@ override_dh_auto_clean: find -name *.qm -exec rm {} \; rm -rf $(PREPROCESS_FILES:.in=) +override_dh_shlibdeps: + # Excluding numpy as it links against binaries in a plugins module dir + # which can't be found by shlibdeps. + # A better way would be to generate lib paths to them... + dh_shlibdeps --exclude=numpy diff --git a/fastcom/fastcom.pro b/fastcom/fastcom.pro index 54c80fe4..2715c87c 100644 --- a/fastcom/fastcom.pro +++ b/fastcom/fastcom.pro @@ -1,4 +1,3 @@ -TEMPLATE = aux +PY_SOURCES = integrationpluginfastcom.py -OTHER_FILES = integrationpluginfastcom.py \ - integrationpluginfastcom.json +include(../python-plugins.pri) diff --git a/neatobotvac/neatobotvac.pro b/neatobotvac/neatobotvac.pro index 5334cad8..862cbe76 100644 --- a/neatobotvac/neatobotvac.pro +++ b/neatobotvac/neatobotvac.pro @@ -1,5 +1,3 @@ -TEMPLATE = aux - -OTHER_FILES = integrationpluginneatobotvac.json \ - integrationpluginneatobotvac.py +PY_SOURCES += integrationpluginneatobotvac.py +include(../python-plugins.pri) diff --git a/python-plugins.pri b/python-plugins.pri new file mode 100644 index 00000000..f910b0f7 --- /dev/null +++ b/python-plugins.pri @@ -0,0 +1,31 @@ +# Importing this file will set up most needed things for python plugins. +# IMPORTANT: This file needs to be included after defining the plugin SOURCES +# +# Example python plugin .pro file: +# +# PY_SOURCES += integrationpluginexample.py +# include(../python-plugins.pri) + +TEMPLATE = aux + +JSONFILE=$${_PRO_FILE_PWD_}/integrationplugin"$$TARGET".json +REQUIREMENTSFILE=$${_PRO_FILE_PWD_}/requirements.txt + +# Make the device plugin json file visible in the Qt Creator +OTHER_FILES *= $$JSONFILE $$PY_SOURCES + +# Add a make requirements target to fetch requirements +requirements.commands = pip3 install -r $${_PRO_FILE_PWD_}/requirements.txt -t $${_PRO_FILE_PWD_}/modules/ +QMAKE_EXTRA_TARGETS += requirements + + +# Install plugin +target.path = $$[QT_INSTALL_LIBS]/nymea/plugins/$${TARGET} +target.files += $${OTHER_FILES} + +modules.path = $$[QT_INSTALL_LIBS]/nymea/plugins/$${TARGET} +modules.files = $${_PRO_FILE_PWD_}/modules/ +modules.depends += requirements + +INSTALLS += target modules + diff --git a/sunposition/requirements.txt b/sunposition/requirements.txt index 640137c7..d30c0851 100644 --- a/sunposition/requirements.txt +++ b/sunposition/requirements.txt @@ -35,4 +35,5 @@ simplejson==3.17.2 \ --hash=sha256:8acf76443cfb5c949b6e781c154278c059b09ac717d2757a830c869ba000cf8d \ --hash=sha256:934115642c8ba9659b402c8bdbdedb48651fb94b576e3b3efd1ccb079609b04a \ --hash=sha256:e058c7656c44fb494a11443191e381355388443d543f6fc1a245d5d238544396 \ - --hash=sha256:7ae6e6af2dc617d200fcebc943059ef7e60ddc4de49deb7317f0183ba5bdcdf6 + --hash=sha256:7ae6e6af2dc617d200fcebc943059ef7e60ddc4de49deb7317f0183ba5bdcdf6 \ + --hash=sha256:2862beabfb9097a745a961426fe7daf66e1714151da8bb9a0c430dde3d59c7c0 diff --git a/sunposition/sunposition.pro b/sunposition/sunposition.pro index f06cb4f0..94ab00d1 100644 --- a/sunposition/sunposition.pro +++ b/sunposition/sunposition.pro @@ -1,5 +1,4 @@ -TEMPLATE = aux -OTHER_FILES = integrationpluginsunposition.json \ - integrationpluginsunposition.py +PY_SOURCES = integrationpluginsunposition.py +include(../python-plugins.pri)