diff --git a/build/packaging/rpm/bloom.spec.in b/build/packaging/rpm/bloom.spec.in new file mode 100755 index 00000000..5064d9e4 --- /dev/null +++ b/build/packaging/rpm/bloom.spec.in @@ -0,0 +1,61 @@ +%define _topdir @CMAKE_BINARY_DIR@/packaging/rpm/playground +%define _rpmfilename @BLOOM_PACKAGE_FILE_NAME@.rpm +%define __spec_install_post %{nil} +%define debug_package %{nil} + +Name: @BLOOM_PACKAGE_NAME_LOWER@ +Version: @CMAKE_PROJECT_VERSION@ +Release: 1 +Summary: @BLOOM_PACKAGE_DESCRIPTION@ +License: LGPL-3.0 +Url: @CMAKE_PROJECT_HOMEPAGE_URL@ +Group: Development/Debuggers +SOURCE0: %{name}-%{version}.tar.gz + +BuildRoot: %{_tmppath}/%{name}-%{version}-root + +ExclusiveArch: x86_64 +AutoReqProv: OFF + +Requires: glibc >= 2.18 +Requires: fontconfig >= 2.11.94 +Requires: freetype >= 2.6 +Requires: libgcc >= 4.2 +Requires: mesa-libGL +Requires: libstdc++ >= 11 +# Requires: libudev1 >= 183 +Requires: libX11 +Requires: libX11-xcb +Requires: xcb-util-wm >= 0.4.1 +Requires: xcb-util-image >= 0.4.0 +Requires: xcb-util-keysyms >= 0.4.0 +Requires: xcb-util-renderutil +Requires: libXext +Requires: libxkbcommon-x11 >= 1.3.1 +Requires: libxkbcommon >= 1.3.1 +Requires: libXrender +Requires: zlib >= 1.2.11 + +%description +@BLOOM_PACKAGE_DESCRIPTION@ + +%prep +%setup -q + +%build +# Nothing to do here - Bloom has already been built - this spec file is used to generate a binary package (not +# a source package). + +%install +rm -rf %{buildroot} +mkdir -p %{buildroot} +cp -a ./* %{buildroot} + +%files +%defattr(-,root,root,-) +%dir "/opt/bloom" +"/opt/bloom/*" +"/usr/bin/bloom" +"/usr/lib/udev/rules.d/99-bloom.rules" + +%changelog diff --git a/build/packaging/rpm/package-rpm.sh.in b/build/packaging/rpm/package-rpm.sh.in new file mode 100644 index 00000000..eb40c548 --- /dev/null +++ b/build/packaging/rpm/package-rpm.sh.in @@ -0,0 +1,69 @@ +#!/bin/bash + +PLAYGROUND_DIR=@CMAKE_BINARY_DIR@/packaging/rpm/playground; +SPECS_DIR=${PLAYGROUND_DIR}/SPECS; +SOURCES_DIR=${PLAYGROUND_DIR}/SOURCES; +RELEASE_DIR_NAME=@BLOOM_PACKAGE_NAME_LOWER@-@CMAKE_PROJECT_VERSION@; +RELEASE_DIR=${PLAYGROUND_DIR}/${RELEASE_DIR_NAME}; +BLOOM_INSTALLATION_PREFIX=/opt/bloom/ +BLOOM_INSTALLATION_DIR=${RELEASE_DIR}/${BLOOM_INSTALLATION_PREFIX} +BLOOM_PACKAGE_PATH=@CMAKE_BINARY_DIR@/packaging/@BLOOM_PACKAGE_FILE_NAME@.rpm + +if [ ! -f @CMAKE_BINARY_DIR@/bin/bloom ]; then + echo "Build files not found. Did you forget to build?" + exit 1; +fi + +echo "Preparing playground directory..."; +rm -fr ${PLAYGROUND_DIR}; + +mkdir -p ${PLAYGROUND_DIR}; +mkdir -p ${SPECS_DIR}; +mkdir -p ${SOURCES_DIR}; +mkdir -p ${PLAYGROUND_DIR}/BUILD; +mkdir -p ${PLAYGROUND_DIR}/BUILDROOT; +mkdir -p ${PLAYGROUND_DIR}/RPMS; +mkdir -p ${PLAYGROUND_DIR}/SRPMS; +mkdir -p ${RELEASE_DIR}; +mkdir -p ${BLOOM_INSTALLATION_DIR}; +mkdir -p ${BLOOM_INSTALLATION_DIR}/bin; + +mkdir -p ${RELEASE_DIR}/usr/lib/udev/rules.d/; +mkdir -p ${RELEASE_DIR}/usr/bin/; + +echo "Copying RPM spec file..."; +cp -a @CMAKE_BINARY_DIR@/packaging/rpm/bloom.spec ${SPECS_DIR}/; + +echo "Copying Bloom binary..."; +cp -a @CMAKE_BINARY_DIR@/bin/bloom ${BLOOM_INSTALLATION_DIR}/bin/; + +echo "Copying resources..."; +cp -a @CMAKE_BINARY_DIR@/resources ${BLOOM_INSTALLATION_DIR}/; +cp -a @CMAKE_CURRENT_SOURCE_DIR@/build/distributed/fonts ${BLOOM_INSTALLATION_DIR}/resources/; + +echo "Copying distributed binaries..."; +cp -a @CMAKE_CURRENT_SOURCE_DIR@/build/distributed/bin/lib ${BLOOM_INSTALLATION_DIR}/; +cp -a @CMAKE_CURRENT_SOURCE_DIR@/build/distributed/bin/plugins ${BLOOM_INSTALLATION_DIR}/; + +echo "Copying udev rules..."; +cp -a @CMAKE_CURRENT_SOURCE_DIR@/build/distributed/udevrules/99-bloom.rules ${RELEASE_DIR}/usr/lib/udev/rules.d/; + +echo "Adjusting permissions..."; +chmod u=rwx,g=rx,o=rx -R ${BLOOM_INSTALLATION_DIR}/bin/; +chmod u=rwx,g=rx,o=rx -R ${BLOOM_INSTALLATION_DIR}/lib/; +chmod u=rwx,g=rx,o=rx -R ${BLOOM_INSTALLATION_DIR}/plugins/; + +chmod u=rwX,g=rX,o=rX -R ${BLOOM_INSTALLATION_DIR}/resources/; + +chmod u=rw,g=r,o=r ${RELEASE_DIR}/usr/lib/udev/rules.d/99-bloom.rules; + +echo "Creating symbolic link for Bloom binary..." +ln -s -f ${BLOOM_INSTALLATION_PREFIX}./bin/bloom ${RELEASE_DIR}/usr/bin/; + +echo "Creating release tarball..." +tar -zcvf ${SOURCES_DIR}/@BLOOM_PACKAGE_NAME_LOWER@-@CMAKE_PROJECT_VERSION@.tar.gz -C ${PLAYGROUND_DIR} ./${RELEASE_DIR_NAME} + +echo "Building RPM package..."; +rpmbuild -bb ${SPECS_DIR}/bloom.spec; + +mv -f ${PLAYGROUND_DIR}/RPMS/@BLOOM_PACKAGE_FILE_NAME@.rpm @CMAKE_BINARY_DIR@/packaging/; diff --git a/cmake/Packaging.cmake b/cmake/Packaging.cmake index 02146978..ab859247 100644 --- a/cmake/Packaging.cmake +++ b/cmake/Packaging.cmake @@ -24,3 +24,22 @@ configure_file( WORLD_READ @ONLY ) + +# Generate the RPM spec file and packaging script +file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/packaging/rpm") + +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/build/packaging/rpm/bloom.spec.in" + "${CMAKE_BINARY_DIR}/packaging/rpm/bloom.spec" + @ONLY +) + +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/build/packaging/rpm/package-rpm.sh.in" + "${CMAKE_BINARY_DIR}/packaging/package-rpm.sh" + FILE_PERMISSIONS + OWNER_EXECUTE OWNER_READ OWNER_WRITE + GROUP_READ + WORLD_READ + @ONLY +)