Skip to content

Commit

Permalink
[irods#8036] Communicate server status to service manager
Browse files Browse the repository at this point in the history
In addition to the service manager communication functionality, this commit
introduces `distro_distill.py`, a slightly updated version of the
`distro_info.py` module currently in the externals repo. The goal is to
eventually make a standalone package for `distro_distill.py`. The buildsystem
now uses this instead of the `distro` Python module or `lsb_release` to
populate the `IRODS_LINUX_DISTRIBUTION_*` variables. Downstream projects may
need to be updated accordingly. As this results in potential changes to cache
variables, a clean build may be desirable.

This commit also introduces the header `irods/chrono.hpp` in `lib/core` which
contains a couple of funcitons related to timestamp generation. The code for
getting the monotonic timestamp for service manager communication has enough
in common with the timestamp string generation code used by the logger that it
made sense to consolidate them both into the same header.

Also:
  - [irods#8123] Package systemd service unit template
  - [irods#8125] Add `procps` to recommends for server deb package
  • Loading branch information
SwooshyCueb authored and alanking committed Feb 5, 2025
1 parent 52e036d commit cb33c8b
Show file tree
Hide file tree
Showing 21 changed files with 988 additions and 79 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/build-irods-debian.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
- name: Install Prerequisites
run: |
apt-get update -qq
apt-get install -qq apt-transport-https ca-certificates gnupg wget curl g++ make python3-dev unixodbc libcurl4-gnutls-dev libbz2-dev zlib1g-dev libpam0g-dev libssl-dev libxml2-dev unixodbc-dev python3-psutil odbc-postgresql libkrb5-dev python3-distro flex bison
apt-get install -qq apt-transport-https ca-certificates gnupg wget curl g++ make python3-dev unixodbc libcurl4-gnutls-dev libbz2-dev zlib1g-dev libpam0g-dev libssl-dev libxml2-dev unixodbc-dev python3-psutil odbc-postgresql libkrb5-dev python3-distro flex bison libsystemd-dev
- name: Install iRODS Externals
run: |
wget -qO - https://unstable.irods.org/irods-unstable-signing-key.asc | apt-key add -
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build-irods-enterprise-linux-8.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
dnf -y install bind-utils wget git epel-release
dnf -y install dnf-plugin-config-manager dnf-plugins-core
dnf config-manager --set-enabled powertools
dnf -y install gcc gcc-c++ make rpm-build bzip2-devel curl-devel fakeroot openssl-devel pam-devel python36-devel unixODBC unixODBC-devel zlib-devel python3-distro flex bison
dnf -y install gcc gcc-c++ make rpm-build bzip2-devel curl-devel fakeroot openssl-devel pam-devel python36-devel unixODBC unixODBC-devel zlib-devel python3-distro flex bison systemd-devel
- name: Install iRODS Externals
run: |
rpm --import https://unstable.irods.org/irods-unstable-signing-key.asc
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build-irods-enterprise-linux-9.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
dnf -y install bind-utils wget git epel-release
dnf -y install dnf-plugin-config-manager dnf-plugins-core
dnf config-manager --set-enabled crb
dnf -y install gcc gcc-c++ make rpm-build bzip2-devel curl-devel fakeroot openssl-devel pam-devel python3-devel unixODBC unixODBC-devel zlib-devel python3-distro krb5-devel flex bison
dnf -y install gcc gcc-c++ make rpm-build bzip2-devel curl-devel fakeroot openssl-devel pam-devel python3-devel unixODBC unixODBC-devel zlib-devel python3-distro krb5-devel flex bison systemd-devel
- name: Install iRODS Externals
run: |
update-crypto-policies --set LEGACY # TODO: irods/irods#7349 - remove this
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build-irods-ubuntu.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
run: |
apt-get update -qq
apt-get install -qq dnsutils apt-transport-https ca-certificates
apt-get install -qq build-essential wget curl g++ make python3-dev unixodbc libcurl4-gnutls-dev libbz2-dev zlib1g-dev libpam0g-dev libssl-dev libxml2-dev unixodbc-dev python3-psutil odbc-postgresql libkrb5-dev python3-distro flex bison
apt-get install -qq build-essential wget curl g++ make python3-dev unixodbc libcurl4-gnutls-dev libbz2-dev zlib1g-dev libpam0g-dev libssl-dev libxml2-dev unixodbc-dev python3-psutil odbc-postgresql libkrb5-dev python3-distro flex bison libsystemd-dev
- name: Install iRODS Externals
run: |
wget -qO - https://unstable.irods.org/irods-unstable-signing-key.asc | apt-key add -
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/linter-irods-clang-tidy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ jobs:
python3-distro \
flex \
bison \
lsb-release
lsb-release \
libsystemd-dev
- name: Install iRODS Externals
run: |
wget -qO - https://unstable.irods.org/irods-unstable-signing-key.asc | sudo apt-key add -
Expand Down
21 changes: 21 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,18 @@ find_package(CURL REQUIRED)

find_package(OpenSSL REQUIRED COMPONENTS Crypto SSL)

set(IRODS_USE_LIBSYSTEMD_DOCSTRING "Use libsystemd for service manager status communication")
if (NOT DEFINED IRODS_USE_LIBSYSTEMD)
# if IRODS_USE_LIBSYSTEMD isn't set, check for systemd and set default value based on its presence.
find_package(systemd)
set(IRODS_USE_LIBSYSTEMD "${SYSTEMD_FOUND}" CACHE BOOL "${IRODS_USE_LIBSYSTEMD_DOCSTRING}")
else()
set(IRODS_USE_LIBSYSTEMD "${IRODS_USE_LIBSYSTEMD}" CACHE BOOL "${IRODS_USE_LIBSYSTEMD_DOCSTRING}")
if (IRODS_USE_LIBSYSTEMD)
find_package(systemd REQUIRED)
endif()
endif()

include(IrodsCPackPlatform)

set(IRODS_PLATFORM_STRING linux_platform)
Expand Down Expand Up @@ -337,6 +349,7 @@ install(
"${CMAKE_IRODS_SOURCE_DIR}/cmake/Modules/UseLibCXX.cmake"
"${CMAKE_IRODS_SOURCE_DIR}/cmake/Modules/FindCatch2.cmake"
"${CMAKE_IRODS_SOURCE_DIR}/cmake/Modules/Findnlohmann_json.cmake"
"${CMAKE_IRODS_SOURCE_DIR}/cmake/Modules/Findsystemd.cmake"
"${CMAKE_IRODS_SOURCE_DIR}/cmake/Modules/IrodsExternals.cmake"
"${CMAKE_IRODS_SOURCE_DIR}/cmake/Modules/IrodsCXXCompiler.cmake"
"${CMAKE_IRODS_SOURCE_DIR}/cmake/Modules/ObjectTargetHelpers.cmake"
Expand All @@ -347,6 +360,14 @@ install(
COMPONENT ${IRODS_PACKAGE_COMPONENT_DEVELOPMENT_NAME}
)

install(
FILES
"${CMAKE_IRODS_SOURCE_DIR}/scripts/irods/distro_distill.py"
DESTINATION "${IRODS_INSTALL_CMAKECONFDIR}/Modules"
COMPONENT ${IRODS_PACKAGE_COMPONENT_DEVELOPMENT_NAME}
PERMISSIONS OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
)

install(
EXPORT
IRODSTargets
Expand Down
3 changes: 3 additions & 0 deletions cmake/IRODSConfig.cmake.not_yet_installed.in
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,9 @@ endif()
if(NOT DEFINED IRODS_LINUX_DISTRIBUTION_NAME)
set(IRODS_LINUX_DISTRIBUTION_NAME "@IRODS_LINUX_DISTRIBUTION_NAME@")
endif()
if(NOT DEFINED IRODS_LINUX_DISTRIBUTION_VERSION)
set(IRODS_LINUX_DISTRIBUTION_VERSION "@IRODS_LINUX_DISTRIBUTION_VERSION@")
endif()
if(NOT DEFINED IRODS_LINUX_DISTRIBUTION_VERSION_MAJOR)
set(IRODS_LINUX_DISTRIBUTION_VERSION_MAJOR "@IRODS_LINUX_DISTRIBUTION_VERSION_MAJOR@")
endif()
Expand Down
203 changes: 203 additions & 0 deletions cmake/Modules/Findsystemd.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,203 @@
#[=======================================================================[.rst:
Findsystemd
-----------
Find the systemd library (``libsystemd``)
Imported targets
^^^^^^^^^^^^^^^^
This module defines the following :prop_tgt:`IMPORTED` targets:
``systemd::libsystemd``
The systemd library, if found.
Result and cache variables
^^^^^^^^^^^^^^^^^^^^^^^^^^
This module will set the following variables in your project:
``SYSTEMD_FOUND``
True if libsystemd is found.
``SYSTEMD_INCLUDE_DIRS``
Include directories for systemd headers. This is also a cache variable
that can be overridden.
``SYSTEMD_LIBRARIES``
Libraries to link to libsystemd. This is also a cache variable that can
be overridden.
``SYSTEMD_COMPILE_OPTIONS``
Compiler options for use when using libsystemd. This is also a cache
variable that can be overridden.
``SYSTEMD_LINK_OPTIONS``
Linker options for use when using libsystemd. This is also a cache
variable that can be overridden.
``SYSTEMD_LIKELY_VERSION``
The systemd version number supplied by pkg-config/pkgconf.
This module *may* set the following variable in your project:
``SYSTEMD_VERSION``
The systemd version number, confirmed to a reasonable degree of
certainty.
While the CMake documentation recommends against caching the above
variables, we do anyway to provide a clear means of manipulating the
generated import target.
#]=======================================================================]

cmake_policy(PUSH)

# consistent behavior of cache variables for find_* functions
if (POLICY CMP0125)
cmake_policy(SET CMP0125 NEW)
endif()
# mark_as_advanced() should not create new cache entries
if (POLICY CMP0102)
cmake_policy(SET CMP0102 NEW)
endif()
cmake_policy(SET CMP0057 NEW) # if(IN_LIST)
if (POLICY CMP0121)
cmake_policy(SET CMP0121 NEW)
endif()

# check to see if lists are equivalent, ignoring ordering and duplicates
function(_fsd_check_list_equivalence list1 list2 outvar)
foreach(l1e IN LISTS "${list1}")
if (NOT l1e IN_LIST "${list2}")
set("${outvar}" FALSE PARENT_SCOPE)
return()
endif()
endforeach()
foreach(l2e IN LISTS "${list2}")
if (NOT l2e IN_LIST "${list1}")
set("${outvar}" FALSE PARENT_SCOPE)
return()
endif()
endforeach()
set("${outvar}" TRUE PARENT_SCOPE)
endfunction()

find_package(PkgConfig QUIET)
if (PKG_CONFIG_FOUND)
pkg_check_modules(PC_LIBSYSTEMD QUIET libsystemd)
endif()

set(SYSTEMD_INCLUDE_DIRS_DOCSTRING "systemd include directories")
if (SYSTEMD_INCLUDE_DIRS)
set(SYSTEMD_INCLUDE_DIRS "${SYSTEMD_INCLUDE_DIRS}" CACHE STRING "${SYSTEMD_INCLUDE_DIRS_DOCSTRING}")
else()
find_path(
SYSTEMD_INCLUDE_DIR "systemd/sd-daemon.h"
HINTS "${PC_LIBSYSTEMD_INCLUDE_DIRS}" "${PC_LIBSYSTEMD_INCLUDEDIR}"
DOC "systemd main include directory"
)
mark_as_advanced(FORCE SYSTEMD_INCLUDE_DIR)
set(_SYSTEMD_INCLUDE_DIRS "${PC_LIBSYSTEMD_INCLUDE_DIRS}")
if (SYSTEMD_INCLUDE_DIR AND NOT SYSTEMD_INCLUDE_DIR IN_LIST _SYSTEMD_INCLUDE_DIRS)
list(INSERT _SYSTEMD_INCLUDE_DIRS 0 "${SYSTEMD_INCLUDE_DIR}")
endif()
if (NOT _SYSTEMD_INCLUDE_DIRS)
set(_SYSTEMD_INCLUDE_DIRS "SYSTEMD_INCLUDE_DIRS-NOTFOUND")
endif()
set(SYSTEMD_INCLUDE_DIRS "${_SYSTEMD_INCLUDE_DIRS}" CACHE STRING "${SYSTEMD_INCLUDE_DIRS_DOCSTRING}")
endif()

set(SYSTEMD_LIBRARIES_DOCSTRING "systemd libraries")
if (SYSTEMD_LIBRARIES)
set(SYSTEMD_LIBRARIES "${SYSTEMD_LIBRARIES}" CACHE STRING "${SYSTEMD_LIBRARIES_DOCSTRING}")
else()
find_library(
SYSTEMD_LIBRARY
NAMES systemd libsystemd
HINTS "${PC_LIBSYSTEMD_LIBRARY_DIRS}" "${PC_LIBSYSTEMD_LIBDIR}"
DOC "systemd main library"
)
mark_as_advanced(FORCE SYSTEMD_LIBRARY)
set(_SYSTEMD_LIBRARIES "${PC_LIBSYSTEMD_LINK_LIBRARIES}")
if (SYSTEMD_LIBRARY AND NOT SYSTEMD_LIBRARY IN_LIST _SYSTEMD_LIBRARIES)
list(INSERT _SYSTEMD_LIBRARIES 0 "${SYSTEMD_LIBRARY}")
endif()
if (NOT _SYSTEMD_LIBRARIES)
set(_SYSTEMD_LIBRARIES "SYSTEMD_LIBRARIES-NOTFOUND")
endif()
set(SYSTEMD_LIBRARIES "${_SYSTEMD_LIBRARIES}" CACHE STRING "${SYSTEMD_LIBRARIES_DOCSTRING}")
endif()

set(SYSTEMD_COMPILE_OPTIONS_DOCSTRING "compile options for building with systemd")
if (SYSTEMD_COMPILE_OPTIONS)
set(SYSTEMD_COMPILE_OPTIONS "${SYSTEMD_COMPILE_OPTIONS}" CACHE STRING "${SYSTEMD_COMPILE_OPTIONS_DOCSTRING}")
else()
set(_SYSTEMD_COMPILE_OPTIONS "${PC_LIBSYSTEMD_CFLAGS_OTHER}")
if (NOT _SYSTEMD_COMPILE_OPTIONS)
set(_SYSTEMD_COMPILE_OPTIONS "")
endif()
set(SYSTEMD_COMPILE_OPTIONS "${_SYSTEMD_COMPILE_OPTIONS}" CACHE STRING "${SYSTEMD_COMPILE_OPTIONS_DOCSTRING}")
endif()
mark_as_advanced(FORCE SYSTEMD_COMPILE_OPTIONS)

set(SYSTEMD_LINK_OPTIONS_DOCSTRING "link options for building with systemd")
if (SYSTEMD_LINK_OPTIONS)
set(SYSTEMD_LINK_OPTIONS "${SYSTEMD_LINK_OPTIONS}" CACHE STRING "${SYSTEMD_LINK_OPTIONS_DOCSTRING}")
else()
set(_SYSTEMD_LINK_OPTIONS "${PC_LIBSYSTEMD_LDFLAGS_OTHER}")
if (NOT _SYSTEMD_LINK_OPTIONS)
set(_SYSTEMD_LINK_OPTIONS "")
endif()
set(SYSTEMD_LINK_OPTIONS "${_SYSTEMD_LINK_OPTIONS}" CACHE STRING "${SYSTEMD_LINK_OPTIONS_DOCSTRING}")
endif()
mark_as_advanced(FORCE SYSTEMD_LINK_OPTIONS)

if (PC_LIBSYSTEMD_VERSION)
set(SYSTEMD_LIKELY_VERSION "${PC_LIBSYSTEMD_VERSION}")

# try to confirm that we're actually using the systemd pkgconf points us to
set(_systemd_pc_version_reasonably_certain FALSE)
if (SYSTEMD_INCLUDE_DIRS AND SYSTEMD_LIBRARIES)
_fsd_check_list_equivalence(SYSTEMD_INCLUDE_DIRS PC_LIBSYSTEMD_INCLUDE_DIRS _systemd_include_dirs_pc_equiv)
if (_systemd_include_dirs_pc_equiv)
_fsd_check_list_equivalence(SYSTEMD_LIBRARIES PC_LIBSYSTEMD_LINK_LIBRARIES _systemd_libs_pc_equiv)
if (_systemd_libs_pc_equiv)
set(_systemd_pc_version_reasonably_certain TRUE)
endif()
endif()
endif()
if (_systemd_pc_version_reasonably_certain)
set(SYSTEMD_VERSION "${PC_LIBSYSTEMD_VERSION}")
endif()
endif()

if (SYSTEMD_INCLUDE_DIRS AND SYSTEMD_LIBRARIES)
add_library(systemd::libsystemd INTERFACE IMPORTED)
set_target_properties(
systemd::libsystemd
PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${SYSTEMD_INCLUDE_DIRS}"
INTERFACE_LINK_LIBRARIES "${SYSTEMD_LIBRARIES}"
INTERFACE_COMPILE_OPTIONS "${SYSTEMD_COMPILE_OPTIONS}"
INTERFACE_LINK_OPTIONS "${SYSTEMD_LINK_OPTIONS}"
)
if (SYSTEMD_VERSION)
set_target_properties(
systemd::libsystemd
PROPERTIES
VERSION "${SYSTEMD_VERSION}"
)
endif()
endif()

include(FindPackageHandleStandardArgs)
if (SYSTEMD_VERSION)
set(_fphsa_vv1 "VERSION_VAR")
set(_fphsa_vv2 "SYSTEMD_VERSION")
else()
unset(_fphsa_vv1)
unset(_fphsa_vv2)
endif()
find_package_handle_standard_args(
systemd
REQUIRED_VARS SYSTEMD_INCLUDE_DIRS SYSTEMD_LIBRARIES
${_fphsa_vv1} ${_fphsa_vv2}
)

cmake_policy(POP)
47 changes: 30 additions & 17 deletions cmake/Modules/IrodsCPackPlatform.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -2,52 +2,65 @@

include_guard(GLOBAL)

# Determine location of distro_distill.py (source tree vs installed)
if (NOT DEFINED IRODS_DISTRO_DISTILL_PATH)
string(TOUPPER "${PROJECT_NAME}" PROJECT_NAME_UPPER)
if (PROJECT_NAME_UPPER STREQUAL "IRODS")
set(IRODS_DISTRO_DISTILL_PATH "${CMAKE_CURRENT_SOURCE_DIR}/scripts/irods/distro_distill.py")
else()
set(IRODS_DISTRO_DISTILL_PATH "${CMAKE_CURRENT_LIST_DIR}/distro_distill.py")
endif()
endif()

if (NOT IRODS_LINUX_DISTRIBUTION_NAME)
execute_process(
COMMAND "python3" "-c" "from __future__ import print_function; import distro; print(distro.id(), end='')"
COMMAND "${IRODS_DISTRO_DISTILL_PATH}" "--distilled-type"
RESULT_VARIABLE IRODS_EXECUTE_PROCESS_RESULT_LINUX_DISTRIBUTION_NAME
OUTPUT_VARIABLE IRODS_LINUX_DISTRIBUTION_NAME
)
if (NOT ${IRODS_EXECUTE_PROCESS_RESULT_LINUX_DISTRIBUTION_NAME} STREQUAL "0")
message(FATAL_ERROR "Linux platform name detection failed\n${IRODS_EXECUTE_PROCESS_RESULT_LINUX_DISTRIBUTION_NAME}")
endif()
string(STRIP ${IRODS_LINUX_DISTRIBUTION_NAME} IRODS_LINUX_DISTRIBUTION_NAME)
set(IRODS_LINUX_DISTRIBUTION_NAME ${IRODS_LINUX_DISTRIBUTION_NAME} CACHE STRING "Linux distribution name, e.g. {ubuntu, centos, ...}." FORCE)
message(STATUS "Setting unspecified IRODS_LINUX_DISTRIBUTION_NAME to '${IRODS_LINUX_DISTRIBUTION_NAME}'")
endif()

if (NOT IRODS_LINUX_DISTRIBUTION_VERSION_MAJOR)
if (NOT IRODS_LINUX_DISTRIBUTION_VERSION)
execute_process(
COMMAND "python3" "-c" "from __future__ import print_function; import distro; print(distro.major_version(), end='')"
RESULT_VARIABLE IRODS_EXECUTE_PROCESS_RESULT_LINUX_DISTRIBUTION_VERSION_MAJOR
OUTPUT_VARIABLE IRODS_LINUX_DISTRIBUTION_VERSION_MAJOR
COMMAND "${IRODS_DISTRO_DISTILL_PATH}" "--distilled-version"
RESULT_VARIABLE IRODS_EXECUTE_PROCESS_RESULT_LINUX_DISTRIBUTION_VERSION
OUTPUT_VARIABLE IRODS_LINUX_DISTRIBUTION_VERSION
)
if (NOT ${IRODS_EXECUTE_PROCESS_RESULT_LINUX_DISTRIBUTION_VERSION_MAJOR} STREQUAL "0")
message(FATAL_ERROR "Linux platform major version detection failed\n${IRODS_EXECUTE_PROCESS_RESULT_LINUX_DISTRIBUTION_VERSION_MAJOR}")
if (NOT ${IRODS_EXECUTE_PROCESS_RESULT_LINUX_DISTRIBUTION_VERSION} STREQUAL "0")
message(FATAL_ERROR "Linux platform version detection failed\n${IRODS_EXECUTE_PROCESS_RESULT_LINUX_DISTRIBUTION_VERSION}")
endif()
set(IRODS_LINUX_DISTRIBUTION_VERSION_MAJOR ${IRODS_LINUX_DISTRIBUTION_VERSION_MAJOR} CACHE STRING "Linux distribution major version number." FORCE)
message(STATUS "Setting unspecified IRODS_LINUX_DISTRIBUTION_VERSION_MAJOR to '${IRODS_LINUX_DISTRIBUTION_VERSION_MAJOR}'")
string(STRIP ${IRODS_LINUX_DISTRIBUTION_VERSION} IRODS_LINUX_DISTRIBUTION_VERSION)
set(IRODS_LINUX_DISTRIBUTION_VERSION ${IRODS_LINUX_DISTRIBUTION_VERSION} CACHE STRING "Linux distribution version number." FORCE)
message(STATUS "Setting unspecified IRODS_LINUX_DISTRIBUTION_VERSION to '${IRODS_LINUX_DISTRIBUTION_VERSION}'")
endif()

if (NOT IRODS_LINUX_DISTRIBUTION_VERSION_MAJOR)
string(REPLACE "." ";" IRODS_LINUX_DISTRIBUTION_VERSION_LIST "${IRODS_LINUX_DISTRIBUTION_VERSION}")
list(GET IRODS_LINUX_DISTRIBUTION_VERSION_LIST 0 IRODS_LINUX_DISTRIBUTION_VERSION_MAJOR)
endif()

if (NOT IRODS_LINUX_DISTRIBUTION_VERSION_CODENAME)
if(IRODS_LINUX_DISTRIBUTION_NAME STREQUAL "ubuntu" OR IRODS_LINUX_DISTRIBUTION_NAME STREQUAL "debian")
execute_process(
COMMAND "lsb_release" "-s" "-c"
COMMAND "${IRODS_DISTRO_DISTILL_PATH}" "--distilled-codename"
RESULT_VARIABLE IRODS_EXECUTE_PROCESS_RESULT_LINUX_DISTRIBUTION_VERSION_CODENAME
OUTPUT_VARIABLE IRODS_LINUX_DISTRIBUTION_VERSION_CODENAME
)
string(STRIP ${IRODS_LINUX_DISTRIBUTION_VERSION_CODENAME} IRODS_LINUX_DISTRIBUTION_VERSION_CODENAME)
if (NOT ${IRODS_EXECUTE_PROCESS_RESULT_LINUX_DISTRIBUTION_VERSION_CODENAME} STREQUAL "0")
message(FATAL_ERROR "Linux lsb_release shortname detection failed\n${IRODS_EXECUTE_PROCESS_RESULT_LINUX_DISTRIBUTION_VERSION_CODENAME}")
message(FATAL_ERROR "Linux distro codename detection failed\n${IRODS_EXECUTE_PROCESS_RESULT_LINUX_DISTRIBUTION_VERSION_CODENAME}")
endif()
string(STRIP ${IRODS_LINUX_DISTRIBUTION_VERSION_CODENAME} IRODS_LINUX_DISTRIBUTION_VERSION_CODENAME)
set(IRODS_LINUX_DISTRIBUTION_VERSION_CODENAME ${IRODS_LINUX_DISTRIBUTION_VERSION_CODENAME} CACHE STRING "Linux distribution version codename, e.g. {precise, wheezy, trusty, jessie, ...}." FORCE)
message(STATUS "Setting unspecified IRODS_LINUX_DISTRIBUTION_VERSION_CODENAME to '${IRODS_LINUX_DISTRIBUTION_VERSION_CODENAME}'")
endif()
endif()

if (IRODS_LINUX_DISTRIBUTION_NAME STREQUAL "centos" AND NOT IRODS_LINUX_DISTRIBUTION_VERSION_MAJOR STREQUAL "7")
message(WARNING "Unsupported CentOS major version: ${IRODS_LINUX_DISTRIBUTION_VERSION_MAJOR}. Caveat emptor.")
endif()

if (NOT CPACK_GENERATOR)
if (IRODS_LINUX_DISTRIBUTION_NAME STREQUAL "arch")
set(CPACK_GENERATOR TGZ CACHE STRING "CPack generator to use, e.g. {DEB, RPM, TGZ}." FORCE)
Expand All @@ -56,7 +69,7 @@ if (NOT CPACK_GENERATOR)
set(CPACK_GENERATOR DEB CACHE STRING "CPack generator to use, e.g. {DEB, RPM, TGZ}." FORCE)
message(STATUS "Setting unspecified CPACK_GENERATOR to ${CPACK_GENERATOR}. This is the correct setting for normal builds.")
else()
set(IRODS_SUPPORTED_RPM_BASED_LINUX_DISTRIBUTION_NAMES "centos" "opensuse" "fedora" "almalinux" "rocky")
set(IRODS_SUPPORTED_RPM_BASED_LINUX_DISTRIBUTION_NAMES "rhel" "opensuse" "fedora")
if(IRODS_LINUX_DISTRIBUTION_NAME IN_LIST IRODS_SUPPORTED_RPM_BASED_LINUX_DISTRIBUTION_NAMES)
set(CPACK_GENERATOR RPM CACHE STRING "CPack generator to use, e.g. {DEB, RPM, TGZ}." FORCE)
message(STATUS "Setting unspecified CPACK_GENERATOR to ${CPACK_GENERATOR}. This is the correct setting for normal builds.")
Expand Down
Loading

0 comments on commit cb33c8b

Please sign in to comment.