diff --git a/.version b/.version index 559828c1..f252cb58 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -2.0.0-alpha.10.1 +2.0.0-alpha.11 diff --git a/HyperionConfig.h.in b/HyperionConfig.h.in index 1f4c0ccd..9b098a73 100644 --- a/HyperionConfig.h.in +++ b/HyperionConfig.h.in @@ -57,6 +57,9 @@ // Define to enable experimental features #cmakedefine ENABLE_EXPERIMENTAL +// Define to enable deploy dependencies to packages +#cmakedefine ENABLE_DEPLOY_DEPENDENCIES + // the hyperion build id string #define HYPERION_BUILD_ID "${HYPERION_BUILD_ID}" #define HYPERION_GIT_REMOTE "${HYPERION_GIT_REMOTE}" diff --git a/cmake/package-scripts/postinst b/cmake/package-scripts/postinst index 4bed1cb3..9012b84f 100644 --- a/cmake/package-scripts/postinst +++ b/cmake/package-scripts/postinst @@ -39,8 +39,7 @@ NET_IP=`hostname -I | cut -d " " -f1` # search for users in system, returns first entry FOUND_USR=`who | grep -o -m1 '^\w*\b'` || "root" -start_msg="" -restart_msg="" +START_MSG="" # service registration if no gui is present (only on initial installation and not upgrade) if [ "$IS_UPGRADE" = false ]; then @@ -53,34 +52,39 @@ if [ "$IS_UPGRADE" = false ]; then echo "---> init deamon: systemd" install_file /usr/share/hyperion/service/hyperion.systemd /etc/systemd/system/hyperion@.service systemctl enable hyperion"@${FOUND_USR}".service - start_msg="--> systemctl start hyperion for user ${FOUND_USR}" + START_MSG="--> systemctl start hyperion for user ${FOUND_USR}" systemctl start hyperion"@${FOUND_USR}" elif [ -e /sbin/initctl ] then # upstart echo "---> init deamon: upstart" install_file /usr/share/hyperion/service/hyperion.initctl /etc/init/hyperion.conf && initctl reload-configuration - start_msg="--> initctl start hyperion" + START_MSG="--> initctl start hyperion" initctl start hyperion else # sysV echo "---> init deamon: sysV" install_file /usr/share/hyperion/service/hyperion.init /etc/init.d/hyperion && chmod +x /etc/init.d/hyperion && update-rc.d hyperion defaults 98 02 - start_msg="---> service hyperion start" + START_MSG="---> service hyperion start" service hyperion start fi + + #after registration cleanup service files + rm -r /usr/share/hyperion/service 2>/dev/null else STARTUP_MSG="echo ---> You can start Hyperion from your menu now" fi +else + if [ -z "${DISPLAY}" ] && [ -z "${WAYLAND_DISPLAY}" ] && [ -z "${XDG_CURRENT_DESKTOP}" ]; then + #cleanup service files also on upgrade (non gui user) + rm -r /usr/share/hyperion/service 2>/dev/null + fi fi -#cleanup -rm -r /usr/share/hyperion/service - #link binarys and set exec bit BINSP=/usr/share/hyperion BINTP=/usr/bin -chmod +x -R $BINSP/bin +chmod +x -R $BINSP/bin $BINSP/scripts ln -fs $BINSP/bin/hyperiond $BINTP/hyperiond ln -fs $BINSP/bin/hyperion-remote $BINTP/hyperion-remote ln -fs $BINSP/bin/hyperion-v4l2 $BINTP/hyperion-v4l2 @@ -126,7 +130,7 @@ if [ $CPU_RPI -eq 1 ]; then fi fi -echo ${start_msg} +echo ${START_MSG} echo "-----------------------------------------------------------------------------" if [ "$IS_UPGRADE" = true ]; then diff --git a/cmake/package-scripts/preinst b/cmake/package-scripts/preinst index 3151540e..d5c9d584 100644 --- a/cmake/package-scripts/preinst +++ b/cmake/package-scripts/preinst @@ -12,7 +12,7 @@ then then echo "--> stop init deamon: systemd" # systemd - systemctl stop hyperion hyperiond"@${FOUND_USR}" hyperion"@${FOUND_USR}" 2> /dev/null + systemctl stop hyperion hyperiond"@${FOUND_USR}" hyperion"@${FOUND_USR}" "hyperiond@root" "hyperion@root" 2> /dev/null elif [ -e /sbin/initctl ] then echo "--> stop init deamon: upstart" diff --git a/cmake/package-scripts/prerm b/cmake/package-scripts/prerm index d4e35627..2f8875d5 100644 --- a/cmake/package-scripts/prerm +++ b/cmake/package-scripts/prerm @@ -24,11 +24,11 @@ if grep -m1 systemd /proc/1/comm > /dev/null then echo "---> stop init deamon: systemd" # systemd - $HYPERION_RUNNING && systemctl stop hyperion hyperiond"@${FOUND_USR}" hyperion"@${FOUND_USR}" 2> /dev/null + $HYPERION_RUNNING && systemctl stop hyperion hyperiond"@${FOUND_USR}" hyperion"@${FOUND_USR}" "hyperiond@root" "hyperion@root" 2> /dev/null # disable user specific symlink echo "---> Disable service and remove entry" systemctl -q disable hyperion hyperiond"@${FOUND_USR}" hyperion"@${FOUND_USR}" 2> /dev/null - rm -v /etc/systemd/system/hyperion.service /etc/systemd/system/hyperiond@.service /etc/systemd/system/hyperion@.service 2>/dev/null + rm -v /etc/systemd/system/hyperion.service /etc/systemd/system/hyperiond@.service /etc/systemd/system/hyperion@.service 2> /dev/null elif [ -e /sbin/initctl ] then @@ -43,8 +43,8 @@ then else echo "---> stop init deamon: sysV" # sysV - $HYPERION_RUNNING && service hyperiond stop 2>/dev/null - $HYPERION_RUNNING && service hyperion stop 2>/dev/null + $HYPERION_RUNNING && service hyperiond stop 2> /dev/null + $HYPERION_RUNNING && service hyperion stop 2> /dev/null echo "---> Remove sysV service" update-rc.d -f hyperion remove rm /etc/init.d/hyperion* 2>/dev/null @@ -56,8 +56,8 @@ killall hyperiond 2> /dev/null # delete desktop icons; desktop-file-edit is a workaround to hide the entry and delete it afterwards manual. # TODO Better way for deletion and keep the desktop in sync without logout/login or desktop dependend cmds? echo "---> Delete Hyperion desktop icons" -desktop-file-edit --set-key=NoDisplay --set-value=true /usr/share/applications/hyperiond.desktop 2>/dev/null -rm -v /usr/share/applications/hyperion* 2>/dev/null -rm -rv /usr/share/pixmaps/hyperion 2>/dev/null +desktop-file-edit --set-key=NoDisplay --set-value=true /usr/share/applications/hyperiond.desktop 2> /dev/null +rm -v /usr/share/applications/hyperion* 2> /dev/null +rm -rv /usr/share/pixmaps/hyperion 2> /dev/null exit 0 diff --git a/libsrc/hyperion/SettingsManager.cpp b/libsrc/hyperion/SettingsManager.cpp index 4c6ba9ee..7351825e 100644 --- a/libsrc/hyperion/SettingsManager.cpp +++ b/libsrc/hyperion/SettingsManager.cpp @@ -100,9 +100,16 @@ SettingsManager::SettingsManager(quint8 instance, QObject* parent, bool readonly QJsonObject newGeneralConfig = dbConfig["general"].toObject(); semver::version BUILD_VERSION(HYPERION_VERSION); + + if (!BUILD_VERSION.isValid()) + { + Error(_log, "Current Hyperion version [%s] is invalid. Exiting...", BUILD_VERSION.getVersion().c_str()); + exit(1); + } + if ( _configVersion > BUILD_VERSION ) { - Error(_log, "Database version [%s] is greater that current Hyperion version [%s]", _configVersion.getVersion().c_str(), BUILD_VERSION.getVersion().c_str()); + Error(_log, "Database version [%s] is greater than current Hyperion version [%s]", _configVersion.getVersion().c_str(), BUILD_VERSION.getVersion().c_str()); // TODO: Remove version checking and Settingsmanager from components' constructor to be able to stop hyperion. } else diff --git a/libsrc/python/CMakeLists.txt b/libsrc/python/CMakeLists.txt index e6261f6a..6b83eb14 100644 --- a/libsrc/python/CMakeLists.txt +++ b/libsrc/python/CMakeLists.txt @@ -3,11 +3,13 @@ if (NOT CMAKE_VERSION VERSION_LESS "3.12") find_package(Python3 COMPONENTS Interpreter Development REQUIRED) include_directories(${Python3_INCLUDE_DIRS} ${Python3_INCLUDE_DIRS}/..) - add_compile_definitions(PYTHON_VERSION_MAJOR_MINOR=${Python3_VERSION_MAJOR}${Python3_VERSION_MINOR}) + add_compile_definitions(PYTHON_VERSION_MAJOR=${Python3_VERSION_MAJOR}) + add_compile_definitions(PYTHON_VERSION_MINOR=${Python3_VERSION_MINOR}) else() find_package (PythonLibs ${PYTHON_VERSION_STRING} EXACT) # Maps PythonLibs to the PythonInterp version of the main cmake include_directories(${PYTHON_INCLUDE_DIRS} ${PYTHON_INCLUDE_DIRS}/..) - add_definitions(-DPYTHON_VERSION_MAJOR_MINOR=${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR}) + add_definitions(-DPYTHON_VERSION_MAJOR=${PYTHON_VERSION_MAJOR}) + add_definitions(-DPYTHON_VERSION_MINOR=${PYTHON_VERSION_MINOR}) endif() # Define the current source locations diff --git a/libsrc/python/PythonInit.cpp b/libsrc/python/PythonInit.cpp index 497f6ae7..d8ed5fce 100644 --- a/libsrc/python/PythonInit.cpp +++ b/libsrc/python/PythonInit.cpp @@ -11,6 +11,9 @@ // modules to init #include +// Required to determine the cmake options +#include + #ifdef _WIN32 #include #endif @@ -23,12 +26,13 @@ PythonInit::PythonInit() // register modules EffectModule::registerHyperionExtensionModule(); +#if defined(ENABLE_DEPLOY_DEPENDENCIES) // Set Program name Py_SetProgramName(L"Hyperion"); // set Python module path when exists - QString py_patch = QDir::cleanPath(qApp->applicationDirPath() + "/../lib/python" + STRINGIFY(PYTHON_VERSION_MAJOR_MINOR)); - QString py_file = QDir::cleanPath(qApp->applicationDirPath() + "/python" + STRINGIFY(PYTHON_VERSION_MAJOR_MINOR) + ".zip"); + QString py_patch = QDir::cleanPath(qApp->applicationDirPath() + "/../lib/python" + STRINGIFY(PYTHON_VERSION_MAJOR) + "." + STRINGIFY(PYTHON_VERSION_MINOR)); + QString py_file = QDir::cleanPath(qApp->applicationDirPath() + "/python" + STRINGIFY(PYTHON_VERSION_MAJOR) + STRINGIFY(PYTHON_VERSION_MINOR) + ".zip"); if (QFile(py_file).exists() || QDir(py_patch).exists()) { @@ -40,10 +44,11 @@ PythonInit::PythonInit() } else if (QDir(py_patch).exists()) { - Py_SetPythonHome(Py_DecodeLocale(py_file.toLatin1().data(), nullptr)); + Py_SetPythonHome(Py_DecodeLocale(py_patch.toLatin1().data(), nullptr)); Py_SetPath(Py_DecodeLocale(py_patch.toLatin1().data(), nullptr)); } } +#endif // init Python Debug(Logger::getInstance("DAEMON"), "Initializing Python interpreter");