Skip to content

Commit

Permalink
create debian packages / multiple configs (hyperion-project#650)
Browse files Browse the repository at this point in the history
* implement make install
set CMAKE_INSTALL_PREFIX e.g. to /opt to install to /opt/hyperion
set ENABLE_SYSTEM_INSTALL to ON to activate installation
after compiling use
make install
or
make install/strip
(for performance/size optimized binaries - compile in Release to get best performance)

* cleanup cmake files
use
cmake -DINSTALL_PREFIX=/opt/hyperion ..
to install all files to hyperion or
cmake -DINSTALL_PREFIX=/usr/
to install to usr. install folders are linux standard. bin go to bin folder and additionals (effects) go to share/hyperion

* add uninstall target - be patient with that, this will remove files from your system
install service files to share/hyperion - if you want to use them you have to make a symlink to your location of service files

* optimize build release script
install service files into hyperion share folder (services not activated, this must be done by distribution package script)
initial support of cmake option -DPLATFORM= option. This selects platform specific cmake flags. no need for -DENABLE_... options (unless you want some special things)
automatic detect for apple build

* update submodule

* fix cmake error when no platform is given

* initial support for deb,rpm and tgz packages - no usefull content atm!

* make packeages contain usefull stuff

* add license
make packes more functional. package specific install missing yet

* implement debian postinstall

* disable rpm generation until it has a working state

* add hypercon compat

* add posibility for multiple config files. first one found is taken


Former-commit-id: 1c2669961da98fd05a97359e75f1d6d68e126715
  • Loading branch information
redPanther authored and brindosch committed May 24, 2016
1 parent 409ef38 commit 0940872
Show file tree
Hide file tree
Showing 22 changed files with 218 additions and 60 deletions.
19 changes: 9 additions & 10 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Define the main-project name
project(hyperiond)
project(hyperion)

# define the minimum cmake version (as required by cmake)
cmake_minimum_required(VERSION 2.8)
Expand All @@ -12,21 +12,27 @@ SET ( DEFAULT_DISPMANX OFF )
SET ( DEFAULT_FB OFF )
SET ( DEFAULT_OSX OFF )
SET ( DEFAULT_X11 OFF )
SET ( DEFAULT_SPIDEV OFF )
SET ( DEFAULT_WS2812BPWM OFF )
SET ( DEFAULT_WS281XPWM OFF )

if (APPLE)
SET ( DEFAULT_OSX ON )
else ()
if ( "${PLATFORM}" STREQUAL "rpi" )
SET ( DEFAULT_DISPMANX ON )
SET ( DEFAULT_SPIDEV ON )
elseif ( "${PLATFORM}" STREQUAL "rpi-pwm" )
SET ( DEFAULT_DISPMANX ON )
SET ( DEFAULT_WS2812BPWM ON )
SET ( DEFAULT_WS281XPWM ON )
SET ( DEFAULT_SPIDEV ON )
elseif ( "${PLATFORM}" STREQUAL "wetek" )
SET ( DEFAULT_AMLOGIC ON )
SET ( DEFAULT_FB ON )
elseif ( "${PLATFORM}" STREQUAL "x86" )
SET ( DEFAULT_X11 ON )
SET ( DEFAULT_FB ON )
elseif ( "${PLATFORM}" STREQUAL "imx6" )
SET ( DEFAULT_FB ON )
endif()
Expand All @@ -48,7 +54,7 @@ message(STATUS "ENABLE_OSX = " ${ENABLE_OSX})
option(ENABLE_PROTOBUF "Enable PROTOBUF server" ON)
message(STATUS "ENABLE_PROTOBUF = " ${ENABLE_PROTOBUF})

option(ENABLE_SPIDEV "Enable the SPIDEV device" ON)
option(ENABLE_SPIDEV "Enable the SPIDEV device" ${DEFAULT_SPIDEV} )
message(STATUS "ENABLE_SPIDEV = " ${ENABLE_SPIDEV})

option(ENABLE_TINKERFORGE "Enable the TINKERFORGE device" ON)
Expand Down Expand Up @@ -88,13 +94,6 @@ if(ENABLE_OSX AND ENABLE_DISPMANX)
message(FATAL_ERROR "dispmanx grabber and osx grabber cannot be used at the same time")
endif()

if (DEFINED INSTALL_PREFIX)
SET( ENABLE_SYSTEM_INSTALL ON)
SET( CMAKE_INSTALL_PREFIX "${INSTALL_PREFIX}" )
else()
SET(ENABLE_SYSTEM_INSTALL OFF)
endif()

SET ( PROTOBUF_INSTALL_BIN_DIR ${CMAKE_BINARY_DIR}/proto )
SET ( PROTOBUF_INSTALL_LIB_DIR ${CMAKE_BINARY_DIR}/proto )

Expand Down Expand Up @@ -125,7 +124,7 @@ endif()
# Define the global output path of binaries
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
SET(DEPLOY_DIR "${CMAKE_SOURCE_DIR}/deploy/hyperion" )

file(MAKE_DIRECTORY ${LIBRARY_OUTPUT_PATH})
file(MAKE_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})

Expand Down
21 changes: 21 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2014 hyperion team

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
17 changes: 10 additions & 7 deletions bin/create_all_releases.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,24 @@ make_release()
shift 2

mkdir -p build-${RELEASE}
mkdir -p deploy/${RELEASE}
cd build-${RELEASE}
cmake -DPLATFORM=${PLATFORM} $@ -DCMAKE_BUILD_TYPE=Release -Wno-dev .. || exit 1
cmake -DCMAKE_INSTALL_PREFIX=/usr -DPLATFORM=${PLATFORM} $@ -DCMAKE_BUILD_TYPE=Release -Wno-dev .. || exit 1
make -j $(nproc) || exit 1
strip bin/*
#strip bin/*
make package -j $(nproc)
mv hyperion-*-ambilight.* ../deploy/${RELEASE}
cd ..
bin/create_release.sh . ${RELEASE}
}

export PATH="$PATH:$HOME/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin"
CMAKE_PROTOC_FLAG="-DIMPORT_PROTOC=../build-x86x64/protoc_export.cmake"

make_release x86x64 x86
#make_release x32 x86 ${CMAKE_PROTOC_FLAG}
make_release rpi rpi -DCMAKE_TOOLCHAIN_FILE="../Toolchain-rpi.cmake" ${CMAKE_PROTOC_FLAG}
make_release wetek rpi -DCMAKE_TOOLCHAIN_FILE="../Toolchain-rpi.cmake" ${CMAKE_PROTOC_FLAG}
#make_release imx6 imx6 -DCMAKE_TOOLCHAIN_FILE="../Toolchain-imx6.cmake" ${CMAKE_PROTOC_FLAG}
make_release x86x64 x86
#make_release x32 x86 ${CMAKE_PROTOC_FLAG}
make_release rpi rpi-pwm -DCMAKE_TOOLCHAIN_FILE="../cmake/Toolchain-rpi.cmake" ${CMAKE_PROTOC_FLAG}
make_release wetek wetek -DCMAKE_TOOLCHAIN_FILE="../cmake/Toolchain-rpi.cmake" ${CMAKE_PROTOC_FLAG}
#make_release imx6 imx6 -DCMAKE_TOOLCHAIN_FILE="../cmake/Toolchain-imx6.cmake" ${CMAKE_PROTOC_FLAG}


2 changes: 1 addition & 1 deletion bin/service/hyperion.init.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
### END INIT INFO

DAEMON=hyperiond
DAEMONOPTS="/opt/hyperion/config/hyperion.config.json"
DAEMONOPTS="/opt/hyperion/hyperion.config.json /etc/hyperion/hyperion.config.json"
DAEMON_PATH="/usr/bin"

NAME=$DAEMON
Expand Down
2 changes: 1 addition & 1 deletion bin/service/hyperion.initctl.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ stop on (runlevel [!2345])

respawn

exec /usr/bin/hyperiond /opt/hyperion/config/hyperion.config.json
exec /usr/bin/hyperiond /opt/hyperion/hyperion.config.json /etc/hyperion/hyperion.config.json
2 changes: 1 addition & 1 deletion bin/service/hyperion.systemd.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Type=simple
User=root
Group=root
UMask=007
ExecStart=/opt/hyperion/bin/hyperiond /opt/hyperion/config/hyperion.config.json
ExecStart=/usr/bin/hyperiond /opt/hyperion/hyperion.config.json /etc/hyperion/hyperion.config.json
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
TimeoutStopSec=10
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
60 changes: 60 additions & 0 deletions cmake/debian/postinst
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
#!/bin/sh

install_file()
{
src="$1"
dest="$2"

if [ -e "$dest" ] && ! cmp --quiet "$src" "$dest"
then
cp "$src" "${dest}.new"
else
cp "$src" "${dest}"
fi
}


echo "--- hyperion ambilight postinstall ---"
echo "- install configuration template"
mkdir -p /etc/hyperion
install_file /usr/share/hyperion/config/hyperion.config.json /etc/hyperion/hyperion.config.json


if grep -m1 systemd /proc/1/comm > /dev/null
then
# systemd
echo
systemctl stop hyperion 2> /dev/null
install_file /usr/share/hyperion/service/hyperion.systemd.sh /etc/systemd/system/hyperion.service
systemctl -q enable hyperion.service
# if [ $OS_OSMC -eq 1 ]; then
# echo '---> Modify systemd script for OSMC usage'
# # Wait until kodi is sarted (for kodi checker)
# sed -i '/After = mediacenter.service/d' /etc/systemd/system/hyperion.service
# sed -i '/Unit/a After = mediacenter.service' /etc/systemd/system/hyperion.service
# sed -i 's/User=osmc/User=root/g' /etc/systemd/system/hyperion.service
# sed -i 's/Group=osmc/Group=root/g' /etc/systemd/system/hyperion.service
# systemctl -q daemon-reload
# fi
systemctl start hyperion

elif [ -e /sbin/initctl ]
then
# upstart
install_file /usr/share/hyperion/service/hyperion.initctl.sh /etc/init/hyperion.conf
initctl reload-configuration
initctl start hyperion

else
# sysV
service hyperion stop 2>/dev/null
install_file /usr/share/hyperion/service/hyperion.init.sh /etc/init.d/hyperion
chmod +x /etc/init.d/hyperion
update-rc.d hyperion defaults 98 02
service hyperion start
fi
echo "- done"

# hypercon compat
mkdir -p /opt/hyperion/config
ln -sf /usr/share/hyperion/effects /opt/hyperion/effects
35 changes: 32 additions & 3 deletions cmake/packages.cmake
Original file line number Diff line number Diff line change
@@ -1,3 +1,32 @@
SET(CPACK_GENERATOR "DEB" "RPM" "TGZ" )
SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "hyperion team")
include (CPack)
# cmake file for generating distribution packages

SET ( CPACK_GENERATOR "DEB" "TGZ" "STGZ" ) # "RPM"

SET ( CPACK_PACKAGE_NAME "hyperion" )
SET ( CPACK_PACKAGE_DESCRIPTION_SUMMARY "Hyperion is an opensource 'AmbiLight' implementation" )
SET ( CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README.md" )
SET ( CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE" )

SET ( CPACK_DEBIAN_PACKAGE_MAINTAINER "hyperion team")
SET ( CPACK_DEBIAN_PACKAGE_NAME "hyperion" )
SET ( CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_SOURCE_DIR}/cmake/debian/postinst" )
SET ( CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://github.com/hyperion-project/hyperion" )
SET ( CPACK_DEBIAN_PACKAGE_DEPENDS "libqtcore4 (>= 4:4.8.0), libqt4-network (>= 4:4.8.0)" )
SET ( CPACK_DEBIAN_PACKAGE_SECTION "Miscellaneous" )

SET ( CPACK_RPM_PACKAGE_NAME "hyperion" )
SET ( CPACK_RPM_PACKAGE_URL "https://github.com/hyperion-project/hyperion" )
SET ( CPACK_RPM_POST_INSTALL_SCRIPT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/cmake/rpm/postinst" )

SET(CPACK_PACKAGE_VERSION_MAJOR "1")
SET(CPACK_PACKAGE_VERSION_MINOR "3")
SET(CPACK_PACKAGE_VERSION_PATCH "0")

SET ( CPACK_COMPONENTS_ALL ambilight )
SET ( CPACK_ARCHIVE_COMPONENT_INSTALL ON )
SET ( CPACK_DEB_COMPONENT_INSTALL ON )
SET ( CPACK_RPM_COMPONENT_INSTALL ON )
SET ( CPACK_STRIP_FILES ON )

# no code after following line!
INCLUDE ( CPack )
57 changes: 57 additions & 0 deletions cmake/rpm/postinst
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
#!/bin/sh

install_file()
{
src="$1"
dest="$2"

if [ -e "$dest" ] && ! cmp --quiet "$src" "$dest"
then
cp "$src" "${dest}.new"
else
cp "$src" "${dest}"
fi
}


echo "--- hyperion ambilight postinstall ---"
echo "- install configuration template"
mkdir -p /etc/hyperion
install_file /usr/share/hyperion/config/hyperion.config.json /etc/hyperion/hyperion.config.json


if grep -m1 systemd /proc/1/comm > /dev/null
then
# systemd
echo
systemctl stop hyperion 2> /dev/null
install_file /usr/share/hyperion/service/hyperion.systemd.sh /etc/systemd/system/hyperion.service
systemctl -q enable hyperion.service
# if [ $OS_OSMC -eq 1 ]; then
# echo '---> Modify systemd script for OSMC usage'
# # Wait until kodi is sarted (for kodi checker)
# sed -i '/After = mediacenter.service/d' /etc/systemd/system/hyperion.service
# sed -i '/Unit/a After = mediacenter.service' /etc/systemd/system/hyperion.service
# sed -i 's/User=osmc/User=root/g' /etc/systemd/system/hyperion.service
# sed -i 's/Group=osmc/Group=root/g' /etc/systemd/system/hyperion.service
# systemctl -q daemon-reload
# fi
systemctl start hyperion

elif [ -e /sbin/initctl ]
then
# upstart
install_file /usr/share/hyperion/service/hyperion.initctl.sh /etc/init/hyperion.conf
initctl reload-configuration
initctl start hyperion

else
# sysV
service hyperion stop 2>/dev/null
install_file /usr/share/hyperion/service/hyperion.init.sh /etc/init.d/hyperion
chmod +x /etc/init.d/hyperion
update-rc.d hyperion defaults 98 02
service hyperion start
fi
echo "- done"

2 changes: 1 addition & 1 deletion config/hyperion_x86.config.json
Original file line number Diff line number Diff line change
Expand Up @@ -363,7 +363,7 @@
{
"paths" :
[
"/home/dincs/projects/hyperion/effects"
"/opt/hyperion/effects"
]
},

Expand Down
5 changes: 1 addition & 4 deletions src/hyperion-aml/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,4 @@ else()
qt4_use_modules(${PROJECT_NAME} Core Gui Network )
endif()

install ( TARGETS ${PROJECT_NAME} DESTINATION "${DEPLOY_DIR}/bin" )
if (ENABLE_SYSTEM_INSTALL)
install ( TARGETS ${PROJECT_NAME} DESTINATION "bin" )
endif()
install ( TARGETS ${PROJECT_NAME} DESTINATION "bin" COMPONENT ambilight )
6 changes: 1 addition & 5 deletions src/hyperion-dispmanx/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,4 @@ else()
qt4_use_modules(${PROJECT_NAME} Core Gui Network )
endif()


install ( TARGETS ${PROJECT_NAME} DESTINATION "${DEPLOY_DIR}/bin" )
if (ENABLE_SYSTEM_INSTALL)
install ( TARGETS ${PROJECT_NAME} DESTINATION "bin" )
endif()
install ( TARGETS ${PROJECT_NAME} DESTINATION "bin" COMPONENT ambilight )
5 changes: 1 addition & 4 deletions src/hyperion-framebuffer/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,4 @@ else()
qt4_use_modules(${PROJECT_NAME} Core Gui Network )
endif()

install ( TARGETS ${PROJECT_NAME} DESTINATION "${DEPLOY_DIR}/bin" )
if (ENABLE_SYSTEM_INSTALL)
install ( TARGETS ${PROJECT_NAME} DESTINATION "bin" )
endif()
install ( TARGETS ${PROJECT_NAME} DESTINATION "bin" COMPONENT ambilight )
2 changes: 1 addition & 1 deletion src/hyperion-osx/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -56,5 +56,5 @@ else()
qt4_use_modules(${PROJECT_NAME} Core Gui Network )
endif()

install ( TARGETS ${PROJECT_NAME} DESTINATION "${DEPLOY_DIR}/bin" )
install ( TARGETS ${PROJECT_NAME} DESTINATION "bin" COMPONENT ambilight )

5 changes: 1 addition & 4 deletions src/hyperion-remote/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,5 @@ else()
qt4_use_modules(${PROJECT_NAME} Core Gui Network )
endif()

install ( TARGETS ${PROJECT_NAME} DESTINATION "${DEPLOY_DIR}/bin" )
if (ENABLE_SYSTEM_INSTALL)
install ( TARGETS ${PROJECT_NAME} DESTINATION "bin" )
endif()
install ( TARGETS ${PROJECT_NAME} DESTINATION "bin" COMPONENT ambilight )

5 changes: 1 addition & 4 deletions src/hyperion-v4l2/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,4 @@ else()
qt4_use_modules(${PROJECT_NAME} Core Gui Network )
endif()

install ( TARGETS ${PROJECT_NAME} DESTINATION "${DEPLOY_DIR}/bin" )
if (ENABLE_SYSTEM_INSTALL)
install ( TARGETS ${PROJECT_NAME} DESTINATION "bin" )
endif()
install ( TARGETS ${PROJECT_NAME} DESTINATION "bin" COMPONENT ambilight )
5 changes: 1 addition & 4 deletions src/hyperion-x11/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,4 @@ else()
qt4_use_modules(${PROJECT_NAME} Core Gui Network )
endif()

install ( TARGETS ${PROJECT_NAME} DESTINATION "${DEPLOY_DIR}/bin" )
if (ENABLE_SYSTEM_INSTALL)
install ( TARGETS ${PROJECT_NAME} DESTINATION "bin" )
endif()
install ( TARGETS ${PROJECT_NAME} DESTINATION "bin" COMPONENT ambilight )
15 changes: 6 additions & 9 deletions src/hyperiond/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,9 @@ if (ENABLE_PROTOBUF)
target_link_libraries(hyperiond protoserver)
endif ()

install ( TARGETS hyperiond DESTINATION "${DEPLOY_DIR}/bin" )
install ( DIRECTORY ${CMAKE_SOURCE_DIR}/effects DESTINATION "${DEPLOY_DIR}/share/hyperion/" )
install ( DIRECTORY ${CMAKE_SOURCE_DIR}/bin/service DESTINATION "${DEPLOY_DIR}/share/hyperion/" )

if (ENABLE_SYSTEM_INSTALL)
install ( TARGETS hyperiond DESTINATION "bin" )
install ( DIRECTORY ${CMAKE_SOURCE_DIR}/effects DESTINATION "share/hyperion/" )
install ( DIRECTORY ${CMAKE_SOURCE_DIR}/bin/service DESTINATION "share/hyperion/" )
endif()
install ( TARGETS hyperiond DESTINATION "bin" COMPONENT ambilight )
install ( DIRECTORY ${CMAKE_SOURCE_DIR}/effects DESTINATION "share/hyperion/" COMPONENT ambilight )
install ( DIRECTORY ${CMAKE_SOURCE_DIR}/bin/service DESTINATION "share/hyperion/" COMPONENT ambilight )
install ( DIRECTORY ${CMAKE_SOURCE_DIR}/config DESTINATION "share/hyperion/" COMPONENT ambilight )


Loading

0 comments on commit 0940872

Please sign in to comment.