Fix OSX Bundling (#1465)

* Fix OSX Bundling

* Fix OSX Bundling - Refined

* editorial updates

* Update change log

* Update version references

* Update Link

* Test

* Pass ENABLE_EFFECTENGINE to install code, correct output messages
This commit is contained in:
LordGrey 2022-05-22 08:01:49 +02:00 committed by GitHub
parent 2ac8f30bb1
commit ec71772f98
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 148 additions and 95 deletions

View File

@ -6,55 +6,72 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased](https://github.com/hyperion-project/hyperion.ng/compare/2.0.12...HEAD)
### Breaking
### Added
- Allow to build a "light" version of Hyperion, i.e. no grabbers, or services like flat-/proto buffers, boblight, CEC
- Allow to restart Hyperion via Systray
- LED-Device: Support retry attempts enabling devices, e.g. to open devices after network or a device itself got available (#1302)
(Fixes that devices got "stuck", if initial open failed e.g. for WLED, Hue)
- LED-Devices: New UDP-DDP (Distributed Display Protocol) device to overcome the 490 LEDs limitation of UDP-RAW
- LED Matrix Layout - Support vertical cabling direction (#1420)
- Support additional Yeelight models
- LED-Devices: Show warning, if get properties failed (Network devices: indication that network device is not reachable)
- hyperion-remote: Show image filename in UI for images sent
- mDNS support for all platforms inkl. Windows (#740)
- LED-Devices mDNS discovery support and ease of configuration (Cololight, Nanoleaf, Philips-Hue, WLED, Yeelight); removes the need to configure IP-Address, as address is resolved automatically.
- Forwarder: mDNS discovery support and ease of configuration of other Hyperion instances
- Grabber: mDNS discovery for standalone grabbers
- Grabber: Dynamic loading of the Dispmanx Grabber (#1418)
- Flatbuffer/Protobuf are now able to receive RGBA data
- Added the instance number as part of the logline (#910). In the UI Log the instance is presented as a readable name.
- New language: Japanese
##### LED-Devices
- Support retry attempts enabling devices, e.g. to open devices after network or a device itself got available (#1302). Fixes that devices got "stuck", if initial open failed e.g. for WLED, Hue
- New UDP-DDP (Distributed Display Protocol) device to overcome the 490 LEDs limitation of UDP-RAW
- mDNS discovery support and ease of configuration (Cololight, Nanoleaf, Philips-Hue, WLED, Yeelight); removes the need to configure IP-Address, as address is resolved automatically.
- Allow to disable switching LEDs on during startup (#1390)
- Support additional Yeelight models
- Show warning, if get properties failed (Network devices: indication that network device is not reachable)
- LED Layout Classic: Support keystone correction via draggable corner LEDs
- LED Layout Matrix: Support vertical cabling direction (#1420)
### Changed
- Colors Smoothing is started in pause mode to save resources, when Hyperion starts with no active source
- Color Smoothing is started in pause mode to save resources, when Hyperion starts with no active source
- Boblight: Support multiple Boblight clients with different priorities
- UI: LED Preview has been given a touch of Ambilight.
- UI: Allow configuration of a Boblight server per LED-instance
- UI: LED Layout - Removed limitations on indention
- mDNS Publisher :Aligned Hyperion mDNS names to general conventions and simplified namings
- UI: Log output and LED preview window can be maximized
- mDNS Publisher: Aligned Hyperion mDNS names to general conventions and simplified naming
##### LED-Devices
- Refactored Philips Hue wizard and LED-Device
- LED-Devices: WLED's default streaming protocol is now UDP-DDP. More than 490 LEDs are supported now (requires minimum WLED 0.11.0). UDP-RAW is still supported in parallel (via expert settings).
- WLED's default streaming protocol is now UDP-DDP. More than 490 LEDs are supported now (requires minimum WLED 0.11.0). UDP-RAW is still supported in parallel (via expert settings).
- Present all serial/TTY devices during discovery in expert mode; no filtering on existing vendor-identifier (Adalight serial USB does not show up in GUI #1458)
### Fixed
- UI: Ensure all configuration and system info response are there before reloading the page (#1430)
- UI: Show all previous log lines in the Log UI (was only working for Debug before)
- UI: Remote control: Treat duration=0 as endless
- UI: Stop Web-Browser capture when user triggers other activities
- Effects: Fix image URL in Matrix effect
- Effects: Fix that start effect is stuck on UI
- Fixes that the Led-Device output flow was interrupted, by an enabling API request on an already enabled device (#967
- Effects: Fixed that effect specific smoothing setup was not applied when effect is started from available- or effects under configuration
- Qt-Grabber: Fixed position handling of multiple monitors (#1320, #1403)
- Standalone grabbers: Improved fps help/error text, fixed default address and port, fixed auto discovery of Hyperion server in hyperion-remote
- hyperion-remote: Show image filename in UI for images sent
- Reworked PriorityMuxer and Subscriptions
- PriorityMuxer: Fix crash when running fore- and background effect in parallel during start-up
- Update Priority, if first LED changes for COLOR update (to reflect color correctly in UI)
- Start JSON and WebServer only, if Hyperion's instance 0 is available
- Treat http headers case insensitive (RFC 2616)
- Fixed: Signal detection does not switch off all instances (#1281)
- Do not kill application on SIGILL-signal (#1435)
- Fixed Qt version override, e.g. set via QTDIR
- Update jsonschema and checkschema to allow checking hyperion.config.json.default on Windows
##### LED-Devices
- Fixes that the Led-Device output flow was interrupted, by an enabling API request on an already enabled device (#967)
- Yeelight - Workaround: Ignore error when setting music mode = off, but the music-mode is already off (#1372)
- Fixed: Hue Entertainment mode does not resume after no signal (#930)
- Standalone grabbers: Improved fps help/error text, fixed default address and port, fixed auto discovery of Hyperion server in hyperion-remote
- Fixed Qt version override, e.g. set via QTDIR
- Remote control UI: Treat duration=0 as endless
- Stop Web-Browser capture when user triggers other activities
- Treat http headers case insensitive (RFC 2616)
- Qt-Grabber: Fixed position handling of multiple monitors (#1320, #1403)
- Fixed: Signal detection does not switch off all instances (#1281)
- Reworked PriorityMuxer and Sub-scriptions
- Do not kill application on SIGILL-signal (#1435)
- Start JSON and WebServer only, if Hyperion's instance 0 is available
## Removed
- UI Removed sessions (of other Hyperions)
- UI: Removed sessions (of other Hyperions)
- Replaced existing AVAHI/Bonjour code by QMdnsEngine
## [2.0.12](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.12) - 2021-11-20

View File

@ -338,16 +338,16 @@ message(STATUS "Services options:")
addIndent(" - ")
option(ENABLE_EFFECTENGINE "Enable Effect-Engine" ${DEFAULT_EFFECTENGINE})
message(STATUS "ENABLE_EFFECTENGINE = " ${ENABLE_EFFECTENGINE})
message(STATUS "ENABLE_EFFECTENGINE = ${ENABLE_EFFECTENGINE}")
option(ENABLE_EXPERIMENTAL "Compile experimental features" ${DEFAULT_EXPERIMENTAL})
message(STATUS "ENABLE_EXPERIMENTAL = ${ENABLE_EXPERIMENTAL}")
option(ENABLE_MDNS "Enable mDNS (aka Zeroconf)" ${DEFAULT_MDNS})
message(STATUS "ENABLE_MDNS = " ${ENABLE_MDNS})
message(STATUS "ENABLE_MDNS = ${ENABLE_MDNS}")
option(ENABLE_REMOTE_CTL "Enable Hyperion remote control" ${DEFAULT_REMOTE_CTL})
message(STATUS "ENABLE_REMOTE_CTL = " ${ENABLE_REMOTE_CTL})
message(STATUS "ENABLE_REMOTE_CTL = ${ENABLE_REMOTE_CTL}")
removeIndent()

View File

@ -60,7 +60,7 @@ Released and unreleased changes at [CHANGELOG.md](CHANGELOG.md)
See [CompileHowto.md](doc/development/CompileHowto.md).
## Installation
See [Documentation](#documentation) or at [Installation.md](Installation.md).
See [Documentation](https://docs.hyperion-project.org/en/user/Installation.html) or at [Installation.md](Installation.md).
## Download
Releases available from the [Hyperion release page](https://github.com/hyperion-project/hyperion.ng/releases)

View File

@ -9,74 +9,110 @@ macro(DeployMacOS TARGET)
OUTPUT_STRIP_TRAILING_WHITESPACE
)
install(CODE "set(TARGET_FILE \"${TARGET_FILE}\") \n set(TARGET_BUNDLE_NAME \"${TARGET}.app\") \n set(PLUGIN_DIR \"${QT_PLUGIN_DIR}\") \n set(BUILD_DIR \"${CMAKE_BINARY_DIR}\")" COMPONENT "Hyperion")
install(CODE "set(TARGET_FILE \"${TARGET_FILE}\")" COMPONENT "Hyperion")
install(CODE "set(TARGET_BUNDLE_NAME \"${TARGET}.app\")" COMPONENT "Hyperion")
install(CODE "set(PLUGIN_DIR \"${QT_PLUGIN_DIR}\")" COMPONENT "Hyperion")
install(CODE "set(BUILD_DIR \"${CMAKE_BINARY_DIR}\")" COMPONENT "Hyperion")
install(CODE "set(ENABLE_EFFECTENGINE \"${ENABLE_EFFECTENGINE}\")" COMPONENT "Hyperion")
install(CODE [[
file(GET_RUNTIME_DEPENDENCIES
EXECUTABLES ${TARGET_FILE}
RESOLVED_DEPENDENCIES_VAR resolved_deps
UNRESOLVED_DEPENDENCIES_VAR unresolved_deps
PRE_INCLUDE_REGEXES ".dylib"
PRE_EXCLUDE_REGEXES ".*"
)
foreach(dependency ${resolved_deps})
file(INSTALL
FILES "${dependency}"
DESTINATION "${CMAKE_INSTALL_PREFIX}/${TARGET_BUNDLE_NAME}/Contents/Frameworks"
TYPE SHARED_LIBRARY
file(GET_RUNTIME_DEPENDENCIES
EXECUTABLES ${TARGET_FILE}
RESOLVED_DEPENDENCIES_VAR resolved_deps
UNRESOLVED_DEPENDENCIES_VAR unresolved_deps
)
endforeach()
list(LENGTH unresolved_deps unresolved_length)
if("${unresolved_length}" GREATER 0)
message(WARNING "The following unresolved dependencies were discovered: ${unresolved_deps}")
endif()
foreach(PLUGIN "platforms" "sqldrivers" "imageformats")
if(EXISTS ${PLUGIN_DIR}/${PLUGIN})
file(GLOB files "${PLUGIN_DIR}/${PLUGIN}/*")
foreach(file ${files})
get_filename_component(plugin ${file} NAME)
list(APPEND QT_PLUGINS "${CMAKE_INSTALL_PREFIX}/${TARGET_BUNDLE_NAME}/Contents/plugins/${PLUGIN}/${plugin}")
foreach(dependency ${resolved_deps})
string(FIND ${dependency} "dylib" _index)
if (${_index} GREATER -1)
file(INSTALL
FILES ${file}
DESTINATION "${CMAKE_INSTALL_PREFIX}/${TARGET_BUNDLE_NAME}/Contents/plugins/${PLUGIN}"
FILES "${dependency}"
DESTINATION "${CMAKE_INSTALL_PREFIX}/${TARGET_BUNDLE_NAME}/Contents/Frameworks"
TYPE SHARED_LIBRARY
)
endforeach()
else()
file(INSTALL
FILES "${dependency}"
DESTINATION "${CMAKE_INSTALL_PREFIX}/${TARGET_BUNDLE_NAME}/Contents/lib"
TYPE SHARED_LIBRARY
)
endif()
endforeach()
list(LENGTH unresolved_deps unresolved_length)
if("${unresolved_length}" GREATER 0)
MESSAGE("The following unresolved dependencies were discovered: ${unresolved_deps}")
endif()
endforeach()
if(ENABLE_EFFECTENGINE)
include(BundleUtilities)
fixup_bundle("${CMAKE_INSTALL_PREFIX}/${TARGET_BUNDLE_NAME}" "${QT_PLUGINS}" "" IGNORE_ITEM "python;python3;Python;Python3;.Python;.Python3")
foreach(PLUGIN "platforms" "sqldrivers" "imageformats")
if(EXISTS ${PLUGIN_DIR}/${PLUGIN})
file(GLOB files "${PLUGIN_DIR}/${PLUGIN}/*")
foreach(file ${files})
file(GET_RUNTIME_DEPENDENCIES
EXECUTABLES ${file}
RESOLVED_DEPENDENCIES_VAR PLUGINS
UNRESOLVED_DEPENDENCIES_VAR unresolved_deps
)
# Detect the Python version and modules directory
find_package(Python3 3.5 REQUIRED)
execute_process(
COMMAND ${Python3_EXECUTABLE} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(standard_lib=True))"
OUTPUT_VARIABLE PYTHON_MODULES_DIR
OUTPUT_STRIP_TRAILING_WHITESPACE
)
foreach(DEPENDENCY ${PLUGINS})
file(INSTALL
DESTINATION "${CMAKE_INSTALL_PREFIX}/${TARGET_BUNDLE_NAME}/Contents/lib"
TYPE SHARED_LIBRARY
FILES ${DEPENDENCY}
)
endforeach()
# Copy Python modules to '/../Frameworks/Python.framework/Versions/Current/lib/PythonMAJOR.MINOR' and ignore the unnecessary stuff listed below
if (PYTHON_MODULES_DIR)
set(PYTHON_VERSION_MAJOR_MINOR "${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}")
file(
COPY ${PYTHON_MODULES_DIR}/
DESTINATION "${CMAKE_INSTALL_PREFIX}/${TARGET_BUNDLE_NAME}/Contents/Frameworks/Python.framework/Versions/Current/lib/python${PYTHON_VERSION_MAJOR_MINOR}"
PATTERN "*.pyc" EXCLUDE # compiled bytecodes
PATTERN "__pycache__" EXCLUDE # any cache
PATTERN "config-${PYTHON_VERSION_MAJOR_MINOR}*" EXCLUDE # static libs
PATTERN "lib2to3" EXCLUDE # automated Python 2 to 3 code translation
PATTERN "tkinter" EXCLUDE # Tk interface
PATTERN "turtledemo" EXCLUDE # Tk demo folder
PATTERN "turtle.py" EXCLUDE # Tk demo file
PATTERN "test" EXCLUDE # unittest module
PATTERN "sitecustomize.py" EXCLUDE # site-specific configs
get_filename_component(singleQtLib ${file} NAME)
list(APPEND QT_PLUGINS "${CMAKE_INSTALL_PREFIX}/${TARGET_BUNDLE_NAME}/Contents/plugins/${PLUGIN}/${singleQtLib}")
file(INSTALL
FILES ${file}
DESTINATION "${CMAKE_INSTALL_PREFIX}/${TARGET_BUNDLE_NAME}/Contents/plugins/${PLUGIN}"
TYPE SHARED_LIBRARY
)
endforeach()
endif()
endforeach()
include(BundleUtilities)
fixup_bundle("${CMAKE_INSTALL_PREFIX}/${TARGET_BUNDLE_NAME}" "${QT_PLUGINS}" "${CMAKE_INSTALL_PREFIX}/${TARGET_BUNDLE_NAME}/Contents/lib" IGNORE_ITEM "python;python3;Python;Python3;.Python;.Python3")
if(ENABLE_EFFECTENGINE)
# Detect the Python version and modules directory
find_package(Python3 3.5 REQUIRED)
execute_process(
COMMAND ${Python3_EXECUTABLE} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(standard_lib=True))"
OUTPUT_VARIABLE PYTHON_MODULES_DIR
OUTPUT_STRIP_TRAILING_WHITESPACE
)
endif(PYTHON_MODULES_DIR)
endif(ENABLE_EFFECTENGINE)
MESSAGE("Add Python ${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR} to bundle")
MESSAGE("PYTHON_MODULES_DIR: ${PYTHON_MODULES_DIR}")
# Copy Python modules to '/../Frameworks/Python.framework/Versions/Current/lib/PythonMAJOR.MINOR' and ignore the unnecessary stuff listed below
if (PYTHON_MODULES_DIR)
set(PYTHON_VERSION_MAJOR_MINOR "${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}")
file(
COPY ${PYTHON_MODULES_DIR}/
DESTINATION "${CMAKE_INSTALL_PREFIX}/${TARGET_BUNDLE_NAME}/Contents/Frameworks/Python.framework/Versions/Current/lib/python${PYTHON_VERSION_MAJOR_MINOR}"
PATTERN "*.pyc" EXCLUDE # compiled bytecodes
PATTERN "__pycache__" EXCLUDE # any cache
PATTERN "config-${PYTHON_VERSION_MAJOR_MINOR}*" EXCLUDE # static libs
PATTERN "lib2to3" EXCLUDE # automated Python 2 to 3 code translation
PATTERN "tkinter" EXCLUDE # Tk interface
PATTERN "turtledemo" EXCLUDE # Tk demo folder
PATTERN "turtle.py" EXCLUDE # Tk demo file
PATTERN "test" EXCLUDE # unittest module
PATTERN "sitecustomize.py" EXCLUDE # site-specific configs
)
endif(PYTHON_MODULES_DIR)
endif(ENABLE_EFFECTENGINE)
file(REMOVE_RECURSE "${CMAKE_INSTALL_PREFIX}/${TARGET_BUNDLE_NAME}/Contents/lib")
file(REMOVE_RECURSE "${CMAKE_INSTALL_PREFIX}/share")
]] COMPONENT "Hyperion")
else()

View File

@ -132,16 +132,16 @@ brew install qt5 python3 cmake libusb doxygen
We assume a 64bit Windows 10. Install the following;
- [Git](https://git-scm.com/downloads) (Check: Add to PATH)
- [CMake (Windows win64-x64 installer)](https://cmake.org/download/) (Check: Add to PATH)
- [Visual Studio 2019 Build Tools](https://go.microsoft.com/fwlink/?linkid=840931) ([direct link](https://aka.ms/vs/16/release/vs_buildtools.exe))
- Select C++ Buildtools
- On the right, just select `MSVC v142 VS 2019 C++ x64/x86-Buildtools` and latest `Windows 10 SDK`. Everything else is not needed.
- [Visual Studio 2022 Community Edition](https://visualstudio.microsoft.com/downloads/#visual-studio-community-2022)
- Select 'Desktop development with C++'
- On the right, just select `MSVC v143 VS 2022 C++ x64/x86-Buildtools` and latest `Windows 10 SDK`. Everything else is not needed.
- [Win64 OpenSSL v1.1.1k](https://slproweb.com/products/Win32OpenSSL.html) ([direct link](https://slproweb.com/download/Win64OpenSSL-1_1_1k.exe))
- [Python 3 (Windows x86-64 executable installer)](https://www.python.org/downloads/windows/) (Check: Add to PATH and Debug Symbols)
- Open a console window and execute `pip install aqtinstall`.
- Now we can download Qt to _C:\Qt_ `mkdir c:\Qt && aqt install -O c:\Qt 5.15.0 windows desktop win64_msvc2019_64`
- Now we can download Qt to _C:\Qt_ `mkdir c:\Qt && aqt install -O c:\Qt 5.15.2 windows desktop win64_msvc2019_64`
- QT6.2 requires the [Vulkan SDK](https://vulkan.lunarg.com/sdk/home) to be installed
- [libjpeg-turbo SDK for Visual C++](https://sourceforge.net/projects/libjpeg-turbo/files/)
- Download the latest 64bit installer (currently `libjpeg-turbo-2.1.0-vc64.exe`) and install to its default location `C:\libjpeg-turbo64`.
- Download the latest 64bit installer (currently `libjpeg-turbo-2.1.3-vc64.exe`) and install to its default location `C:\libjpeg-turbo64`.
### Optional:
- For DirectX9 grabber:
@ -181,14 +181,14 @@ bin/hyperiond
In case you would like to build with a dedicated Qt version, Either supply ``QTDIR`` as ``-DQTDIR=<path>`` to cmake or set and environment variable ``QTDIR`` pointing to the Qt installation.
On Windows MSVC2019 set it via the CMakeSettings.json:
On Windows MSVC2022 set it via the CMakeSettings.json:
```posh
"configurations": [
{
...
"environments": [
{
"QTDIR": "C:/Qt/6.2.0/msvc2019_64/"
"QTDIR": "C:/Qt/6.2.2/msvc2019_64/"
}
]
},
@ -241,8 +241,8 @@ Platform should be auto detected and refer to windows, you can also force window
```posh
# You might need to setup MSVC env first
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
cmake -DPLATFORM=windows -G "Visual Studio 16 2019" ..
call "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
cmake -DPLATFORM=windows -G "Visual Studio 17 2022" ..
```
**Run make to build Hyperion:**
@ -261,7 +261,7 @@ On Windows run:
```posh
cmake --build . --config Release -- -maxcpucount
```
Maintainer: To build installer, install [NSIS](https://nsis.sourceforge.io/Main_Page) and set env `VCINSTALLDIR="C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC"`
Maintainer: To build installer, install [NSIS](https://nsis.sourceforge.io/Main_Page) and set env `VCINSTALLDIR="C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC"`
**Install hyperion into your system:**
Copy all necessary files to ``/usr/local/share/hyperion``