Skip to content

Commit

Permalink
add support for RPM package building on Centos 7.x
Browse files Browse the repository at this point in the history
Signed-off-by: s3rj1k <[email protected]>
  • Loading branch information
s3rj1k committed Apr 17, 2019
1 parent 7f64275 commit 76adf02
Show file tree
Hide file tree
Showing 2 changed files with 132 additions and 16 deletions.
133 changes: 118 additions & 15 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.6.2)
cmake_minimum_required(VERSION 3.7.2)

option(SWCLT_DEBUG_JSON "Enables json frame logs to stdout" OFF)

Expand All @@ -17,8 +17,8 @@ if (WIN32)
endif()

# Declare our project, libks
project(Signalwire-Client-C VERSION 1.1.0 LANGUAGES C)
message("Signalwire-Client-C ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}")
project(SignalWire-Client-C VERSION 1.1.0 LANGUAGES C)
message("SignalWire-Client-C ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}")

# Set package version
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
Expand All @@ -31,11 +31,9 @@ ksutil_setup_platform()

# Find stuff we need for packaging on UNIX
if(KS_PLAT_LIN)
find_program(LSB_RELEASE_CMD lsb_release)
find_package(Git)
find_program(GZIP_CMD gzip)
find_program(DATE_CMD date)
find_program(DPKG_CMD dpkg)
endif()

# Fixes build on older gcc, Debian Jessie
Expand Down Expand Up @@ -63,13 +61,114 @@ if(KS_PLAT_LIN)
find_file(DEBIAN_FOUND debian_version debconf.conf
PATHS /etc
)

find_file(CENTOS_FOUND centos-release
PATHS /etc
)

if(DEBIAN_FOUND)
set(CMAKE_OS_NAME "Debian" CACHE STRING "Operating system name" FORCE)
endif()

if(CENTOS_FOUND)
set(CMAKE_OS_NAME "Centos" CACHE STRING "Operating system name" FORCE)
endif()
endif()

# Centos packaging
if("${CMAKE_OS_NAME}" STREQUAL "Centos")

# Enable component install
set(CPACK_RPM_COMPONENT_INSTALL ON)

# Find stuff we need for packaging on Centos
find_program(ARCH_CMD arch)
find_program(RPM_CMD rpm)

# Set package architecture
if(ARCH_CMD)
execute_process(COMMAND ${ARCH_CMD} OUTPUT_VARIABLE CENTOS_ARCH OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET)
set(CPACK_RPM_RUNTIME_PACKAGE_ARCHITECTURE ${CENTOS_ARCH})
set(CPACK_SYSTEM_NAME ${CENTOS_ARCH})
unset(CENTOS_ARCH)
endif()

# Get RPM DIST tag, rpm --eval '%{dist}'
if(RPM_CMD)
execute_process(COMMAND ${RPM_CMD} --eval %{dist}
OUTPUT_VARIABLE DIST_TAG
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_STRIP_TRAILING_WHITESPACE)
endif()

# https://gitlab.kitware.com/cmake/cmake/issues/16517
set(CPACK_COMPONENTS_ALL runtime)

# Set package type to build
set(CPACK_GENERATOR RPM)

# Set RPM package name
set(CPACK_RPM_RUNTIME_PACKAGE_NAME "signalwire-client-c")

# Set version release from environment variable
if (NOT "$ENV{PACKAGE_RELEASE}" STREQUAL "")
set(CPACK_RPM_PACKAGE_RELEASE "$ENV{PACKAGE_RELEASE}")
else()
if(DATE_CMD)
execute_process(COMMAND ${DATE_CMD} +%Y%m%d OUTPUT_VARIABLE DATE_YMD)
set(CPACK_RPM_PACKAGE_RELEASE ${DATE_YMD})
else()
set(CPACK_RPM_PACKAGE_RELEASE "1")
endif()
endif()

# Set RPM version
set(CPACK_RPM_PACKAGE_VERSION ${PROJECT_VERSION})

# Set OS DIST tag
set(CPACK_RPM_PACKAGE_RELEASE_DIST ${DIST_TAG})

# Set RPM filename
set(CPACK_RPM_RUNTIME_FILE_NAME "${CPACK_RPM_RUNTIME_PACKAGE_NAME}-${PROJECT_VERSION}-${CPACK_RPM_PACKAGE_RELEASE}${DIST_TAG}.${CENTOS_ARCH}rpm")

# Set license
set(CPACK_RPM_PACKAGE_LICENSE "MIT")

# Set RPM group
set(CPACK_RPM_PACKAGE_GROUP "Development/Libraries/C and C++")

# Set RPM vendor
set(CPACK_RPM_PACKAGE_VENDOR "SignalWire")

# Set RPM URL
set(CPACK_RPM_RUNTIME_PACKAGE_URL "https://signalwire.com/")

# Set RPM Description
set(CPACK_RPM_PACKAGE_DESCRIPTION "SignalWire C Client and Library Headers")

# Set RPM package summary
set(CPACK_RPM_PACKAGE_SUMMARY "SignalWire's C client")

# Set auto dependency detection
set(CPACK_RPM_PACKAGE_AUTOREQPROV "yes")

# Create changelog
string(TIMESTAMP NOW "%a %b %d %Y" UTC)
FILE(WRITE ${CMAKE_CURRENT_LIST_DIR}/changelog "* ${NOW} ${CPACK_RPM_PACKAGE_VENDOR} <${CPACK_PACKAGE_CONTACT}> ${PROJECT_VERSION}-${CPACK_RPM_PACKAGE_RELEASE}${DIST_TAG}\n")
FILE(APPEND ${CMAKE_CURRENT_LIST_DIR}/changelog "- autogenerated RPM package\n")
unset(NOW)
set(CPACK_RPM_CHANGELOG_FILE "${CMAKE_CURRENT_LIST_DIR}/changelog")

endif()

# Get distro codename
if (KS_PLAT_LIN AND NOT DISTRO_CODENAME)
# Debian packaging
if("${CMAKE_OS_NAME}" STREQUAL "Debian")

# Find stuff we need for packaging on Debian
find_program(DPKG_CMD dpkg)
find_program(LSB_RELEASE_CMD lsb_release)

# Get distro codename
if(NOT LSB_RELEASE_CMD)
message(WARNING "DEB Generator: Can't find lsb_release in your path. Setting DISTRO_CODENAME to unknown.")
set(DISTRO_CODENAME unknown)
Expand All @@ -78,10 +177,6 @@ if (KS_PLAT_LIN AND NOT DISTRO_CODENAME)
OUTPUT_VARIABLE DISTRO_CODENAME
OUTPUT_STRIP_TRAILING_WHITESPACE)
endif()
endif()

# Debian packaging
if("${CMAKE_OS_NAME}" STREQUAL "Debian")

# https://gitlab.kitware.com/cmake/cmake/issues/16517
set(CPACK_COMPONENTS_ALL runtime)
Expand All @@ -93,9 +188,6 @@ if("${CMAKE_OS_NAME}" STREQUAL "Debian")
# Abuse Cmake component name
set(CPACK_DEBIAN_RUNTIME_PACKAGE_NAME ${CPACK_DEBIAN_PACKAGE_NAME})

# Find stuff we need for packaging on Debian
find_program(DPKG_CMD dpkg)

# Set package type to build
set(CPACK_GENERATOR DEB)

Expand Down Expand Up @@ -276,7 +368,18 @@ if (NOT KS_PLAT_WIN)
# Set install targets
install(TARGETS signalwire_client COMPONENT "runtime" EXPORT SignalWireClientConfig DESTINATION lib)
install(DIRECTORY inc/signalwire-client-c COMPONENT "runtime" DESTINATION include PATTERN internal EXCLUDE)
install(FILES ${PROJECT_BINARY_DIR}/signalwire_client.pc COMPONENT "runtime" DESTINATION lib/pkgconfig)

# Set path for pkg-config based on ARCH and distro type
if("${CMAKE_OS_NAME}" STREQUAL "Centos") # pkg-config --variable pc_path pkg-config
if(${CPACK_SYSTEM_NAME} MATCHES "x86_64")
install(FILES ${PROJECT_BINARY_DIR}/signalwire_client.pc COMPONENT "runtime" DESTINATION lib64/pkgconfig)
else()
install(FILES ${PROJECT_BINARY_DIR}/signalwire_client.pc COMPONENT "runtime" DESTINATION lib/pkgconfig)
endif()
else()
install(FILES ${PROJECT_BINARY_DIR}/signalwire_client.pc COMPONENT "runtime" DESTINATION lib/pkgconfig)
endif()

install(EXPORT SignalWireClientConfig COMPONENT "runtime" DESTINATION include/signalwire-client-c/cmake)
install(FILES ${PROJECT_BINARY_DIR}/copyright COMPONENT "runtime" DESTINATION share/doc/signalwire-client-c)

Expand Down
15 changes: 14 additions & 1 deletion README
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
To build use cmake (Minimum version 3.6.2):
To build use cmake (Minimum version 3.7.2):
cmake .
make

Expand All @@ -25,3 +25,16 @@ OPENSSL_ROOT_DIR=/usr/local/opt/openssl cmake . -DCMAKE_INSTALL_PREFIX:PATH=/usr

To build release package with build number 42:
PACKAGE_RELEASE="42" cmake . -DCMAKE_BUILD_TYPE=Release && make package

To buld CMAKE from source
wget https://cmake.org/files/v3.7/cmake-3.7.2.tar.gz
tar -zxvf cmake-3.7.2.tar.gz
cd cmake-3.7.2
./bootstrap --prefix=/usr/local
make
make install
/usr/local/bin/cmake --version

Centos dependencies:
- yum groupinstall "Development Tools"
- yum install libuuid-devel libatomic openssl-devel

0 comments on commit 76adf02

Please sign in to comment.