diff --git a/projects/rocm-smi-lib/CMakeLists.txt b/projects/rocm-smi-lib/CMakeLists.txt index 327cb30366..5e47e002f6 100644 --- a/projects/rocm-smi-lib/CMakeLists.txt +++ b/projects/rocm-smi-lib/CMakeLists.txt @@ -39,6 +39,18 @@ set(SHARE_INSTALL_PREFIX # provide git to utilities find_program (GIT NAMES git) +# Set Lintian Support Flags +set(BUILD_ENABLE_LINTIAN_OVERRIDES + OFF + CACHE BOOL + "Enable/Disable Lintian Overrides" +) +set(BUILD_DEBIAN_PKGING_FLAG + OFF + CACHE BOOL + "Internal Status Flag to indicate Debian Packaging Build" +) + # sets DRM_INCLUDE_DIRS pkg_check_modules(DRM REQUIRED libdrm) @@ -188,10 +200,12 @@ set(CMN_INC_LIST ${CMN_INC_LIST} "${SHR_MUTEX_DIR}/shared_mutex.h") ## set components if(ENABLE_ASAN_PACKAGING) - # ASAN Package requires only asan component with libraries and license file - set(CPACK_COMPONENTS_ALL asan) + # ASAN Package requires only asan component with libraries and license file + set(CPACK_COMPONENTS_ALL asan) + set(COMP_TYPE "asan") else() - set(CPACK_COMPONENTS_ALL dev tests) + set(CPACK_COMPONENTS_ALL dev tests) + set(COMP_TYPE "dev") endif() # Enable Component Mode & Install Settings @@ -276,7 +290,7 @@ install(EXPORT rocm_smiTargets COMPONENT dev) #License file -set(CPACK_RPM_PACKAGE_LICENSE "NCSA") +set(CPACK_RPM_PACKAGE_LICENSE "MIT") # install license file in share/doc/rocm-smi-lib-asan folder if( ENABLE_ASAN_PACKAGING ) install(FILES ${CPACK_RESOURCE_FILE_LICENSE} @@ -299,7 +313,9 @@ else() set(CPACK_PACKAGE_NAME ${ROCM_SMI_PACKAGE}) endif() set(CPACK_PACKAGE_VENDOR "Advanced Micro Devices, Inc.") -set(CPACK_PACKAGE_CONTACT "RocmSMILib Support ") +set(PKG_MAINTAINER_NM "RocmSMILib Support") +set(PKG_MAINTAINER_EMAIL "rocm-smi.support@amd.com") +set(CPACK_PACKAGE_CONTACT "${PKG_MAINTAINER_NM} <${PKG_MAINTAINER_EMAIL}>") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "AMD System Management libraries") #Make proper version for appending @@ -385,7 +401,35 @@ set ( CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/RPM/post set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT") set(CPACK_RPM_FILE_NAME "RPM-DEFAULT") -include (CPack) +# Configure Lintian Specific Package Data +configure_pkg( ${CPACK_PACKAGE_NAME} ${COMP_TYPE} ${CPACK_PACKAGE_VERSION} ${PKG_MAINTAINER_NM} ${PKG_MAINTAINER_EMAIL}) + +# Custom installation for Debian Lintian File +if(BUILD_ENABLE_LINTIAN_OVERRIDES AND BUILD_DEBIAN_PKGING_FLAG) + set(OVERRIDE_FILE + "${CMAKE_BINARY_DIR}/DEBIAN/${DEB_OVERRIDES_INSTALL_FILENM}" + ) + set(OVERRIDE_TEMP_INSTALL_LOC + "/_CPack_Packages/Linux/DEB/${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux/${COMP_TYPE}" + ) + if(BUILD_SHARED_LIBS) + set(CPACK_INSTALL_COMMANDS + "${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}${OVERRIDE_TEMP_INSTALL_LOC}${DEB_OVERRIDES_INSTALL_PATH}" + "${CMAKE_COMMAND} -E copy ${OVERRIDE_FILE} ${CMAKE_BINARY_DIR}${OVERRIDE_TEMP_INSTALL_LOC}${DEB_OVERRIDES_INSTALL_PATH}" + ) + else() + set(OVERRIDE_FILE_STATIC "${DEB_OVERRIDES_INSTALL_FILENM}-static-dev") + set(OVERRIDE_FILE_STATIC_DEST + "${CMAKE_BINARY_DIR}${OVERRIDE_TEMP_INSTALL_LOC}${DEB_OVERRIDES_INSTALL_PATH}${OVERRIDE_FILE_STATIC}" + ) + set(CPACK_INSTALL_COMMANDS + "${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}${OVERRIDE_TEMP_INSTALL_LOC}${DEB_OVERRIDES_INSTALL_PATH}" + "${CMAKE_COMMAND} -E copy ${OVERRIDE_FILE} ${OVERRIDE_FILE_STATIC_DEST}" + ) + endif() +endif() + +include(CPack) cpack_add_component( dev diff --git a/projects/rocm-smi-lib/DEBIAN/changelog.in b/projects/rocm-smi-lib/DEBIAN/changelog.in new file mode 100644 index 0000000000..0571513793 --- /dev/null +++ b/projects/rocm-smi-lib/DEBIAN/changelog.in @@ -0,0 +1,4 @@ +@DEB_PACKAGE_NAME@ (@DEB_PACKAGE_VERSION@) stable; urgency=low + + * ROCm Runtime software stack Base Package. + -- @DEB_MAINTAINER_NAME@ <@DEB_MAINTAINER_EMAIL@> @DEB_TIMESTAMP@ diff --git a/projects/rocm-smi-lib/DEBIAN/copyright.in b/projects/rocm-smi-lib/DEBIAN/copyright.in new file mode 100644 index 0000000000..872d2f6828 --- /dev/null +++ b/projects/rocm-smi-lib/DEBIAN/copyright.in @@ -0,0 +1,25 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: @DEB_PACKAGE_NAME@ +Upstream-Contact: @DEB_MAINTAINER_NAME@ <@DEB_MAINTAINER_EMAIL@> +Source: https://github.com/ROCm/rocm-systems +Files: * +License: @DEB_LICENSE@ +Copyright: @DEB_COPYRIGHT_YEAR@ Advanced Micro Devices, Inc. All rights reserved. + +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. diff --git a/projects/rocm-smi-lib/DEBIAN/overrides.in b/projects/rocm-smi-lib/DEBIAN/overrides.in new file mode 100644 index 0000000000..6bee886c10 --- /dev/null +++ b/projects/rocm-smi-lib/DEBIAN/overrides.in @@ -0,0 +1,3 @@ +@DEB_OVERRIDES_INSTALL_FILENM@: no-copyright-file +@DEB_OVERRIDES_INSTALL_FILENM@: debian-changelog-file-missing +@DEB_OVERRIDES_INSTALL_FILENM@: dir-or-file-in-opt diff --git a/projects/rocm-smi-lib/cmake_modules/utils.cmake b/projects/rocm-smi-lib/cmake_modules/utils.cmake index 77aadee8d5..1c80f51c04 100644 --- a/projects/rocm-smi-lib/cmake_modules/utils.cmake +++ b/projects/rocm-smi-lib/cmake_modules/utils.cmake @@ -164,3 +164,216 @@ function(get_package_version_number DEFAULT_VERSION_STRING VERSION_PREFIX GIT) set(CPACK_PACKAGE_VERSION_MINOR ${VERSION_MINOR} PARENT_SCOPE) set(CPACK_PACKAGE_VERSION_PATCH ${VERSION_PATCH} PARENT_SCOPE) endfunction() + +## function to append content of IN_FILE to OUT_FILE +function(append_file IN_FILE OUT_FILE) + file(READ "${IN_FILE}" CONTENTS) + file(APPEND "${OUT_FILE}" "${CONTENTS}") +endfunction() + +## Configure Lintian Specific install Files for Debian Package +function( + configure_pkg + PACKAGE_NAME_T + COMPONENT_NAME_T + PACKAGE_VERSION_T + MAINTAINER_NM_T + MAINTAINER_EMAIL_T +) + # Check If Debian Platform + find_file(DEBIAN debian_version debconf.conf PATHS /etc) + if(DEBIAN) + set(BUILD_ENABLE_LINTIAN_OVERRIDES + ON + CACHE BOOL + "Enable/Disable Lintian Overrides" + FORCE + ) + set(BUILD_DEBIAN_PKGING_FLAG + ON + CACHE BOOL + "Internal Status Flag to indicate Debian Packaging Build" + FORCE + ) + set_debian_pkg_cmake_flags(${PACKAGE_NAME_T} ${PACKAGE_VERSION_T} + ${MAINTAINER_NM_T} ${MAINTAINER_EMAIL_T} + ) + # Create debian directory in build tree + file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/DEBIAN") + # Configure the copyright file + configure_file( + "${CMAKE_SOURCE_DIR}/DEBIAN/copyright.in" + "${CMAKE_BINARY_DIR}/DEBIAN/copyright" + @ONLY + ) + + # Install copyright file + install( + FILES "${CMAKE_BINARY_DIR}/DEBIAN/copyright" + DESTINATION ${CMAKE_INSTALL_DATADIR}/doc/${ROCM_SMI_PACKAGE} + COMPONENT ${COMPONENT_NAME_T} + ) + + # Configure the changelog file + set(CHANGELOG_DATA_FILES + "${CMAKE_SOURCE_DIR}/DEBIAN/changelog.in" + "${CMAKE_SOURCE_DIR}/CHANGELOG.md" + ) + set(CHANGELOG_DATA_APPENDED "${CMAKE_BINARY_DIR}/DEBIAN/changelog.in") + file(WRITE "${CHANGELOG_DATA_APPENDED}" "") + foreach(changelog_data ${CHANGELOG_DATA_FILES}) + append_file("${changelog_data}" "${CHANGELOG_DATA_APPENDED}") + endforeach() + configure_file( + "${CHANGELOG_DATA_APPENDED}" + "${CMAKE_BINARY_DIR}/DEBIAN/changelog.Debian" + @ONLY + ) + + # Install Change Log + find_program(DEB_GZIP_EXEC gzip) + if(NOT DEB_GZIP_EXEC) + message( + FATAL_ERROR + "gzip command not found: Failed to compress the changelog" + ) + endif() + if(EXISTS "${CMAKE_BINARY_DIR}/DEBIAN/changelog.Debian") + execute_process( + COMMAND + ${DEB_GZIP_EXEC} -f -n -9 + "${CMAKE_BINARY_DIR}/DEBIAN/changelog.Debian" + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/DEBIAN" + RESULT_VARIABLE result + OUTPUT_VARIABLE output + ERROR_VARIABLE error + ) + if(NOT ${result} EQUAL 0) + message(FATAL_ERROR "Failed to compress: ${error}") + endif() + install( + FILES + "${CMAKE_BINARY_DIR}/DEBIAN/${DEB_CHANGELOG_INSTALL_FILENM}" + DESTINATION ${CMAKE_INSTALL_DATADIR}/doc/${ROCM_SMI_PACKAGE} + COMPONENT ${COMPONENT_NAME_T} + ) + endif() + + if(BUILD_ENABLE_LINTIAN_OVERRIDES) + if(ENABLE_ASAN_PACKAGING) + string(FIND ${DEB_OVERRIDES_INSTALL_FILENM} "asan" OUT_VAR2) + if(OUT_VAR2 EQUAL -1) + set(DEB_OVERRIDES_INSTALL_FILENM + "${DEB_OVERRIDES_INSTALL_FILENM}-asan" + CACHE STRING + "Debian Package Lintian Override File Name" + FORCE + ) + endif() + endif() + # Configure the Lintian Overrides file + configure_file( + "${CMAKE_SOURCE_DIR}/DEBIAN/overrides.in" + "${CMAKE_BINARY_DIR}/DEBIAN/${DEB_OVERRIDES_INSTALL_FILENM}" + FILE_PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ + @ONLY + ) + endif() + endif() +endfunction() + +# Set variables for changelog and copyright +# For Debian specific Packages +function( + set_debian_pkg_cmake_flags + DEB_PACKAGE_NAME_T + DEB_PACKAGE_VERSION_T + DEB_MAINTAINER_NM_T + DEB_MAINTAINER_EMAIL_T +) + # Setting configure flags + set(DEB_PACKAGE_NAME + "${DEB_PACKAGE_NAME_T}" + CACHE STRING + "Debian Package Name" + ) + set(DEB_PACKAGE_VERSION + "${DEB_PACKAGE_VERSION_T}" + CACHE STRING + "Debian Package Version String" + ) + set(DEB_MAINTAINER_NAME + "${DEB_MAINTAINER_NM_T}" + CACHE STRING + "Debian Package Maintainer Name" + ) + set(DEB_MAINTAINER_EMAIL + "${DEB_MAINTAINER_EMAIL_T}" + CACHE STRING + "Debian Package Maintainer Email" + ) + set(DEB_LICENSE "MIT" CACHE STRING "Debian Package License Type") + set(DEB_CHANGELOG_INSTALL_FILENM + "changelog.Debian.gz" + CACHE STRING + "Debian Package ChangeLog File Name" + ) + + if(BUILD_ENABLE_LINTIAN_OVERRIDES) + set(DEB_OVERRIDES_INSTALL_FILENM + "${DEB_PACKAGE_NAME}" + CACHE STRING + "Debian Package Lintian Override File Name" + ) + set(DEB_OVERRIDES_INSTALL_PATH + "/usr/share/lintian/overrides/" + CACHE STRING + "Deb Pkg Lintian Override Install Location" + ) + endif() + + # Get TimeStamp + find_program(DEB_DATE_TIMESTAMP_EXEC date) + if(NOT DEB_DATE_TIMESTAMP_EXEC) + message( + FATAL_ERROR + "date command not found: Failed to Configure the timestamp for Copyright/Changelog." + ) + endif() + set(DEB_TIMESTAMP_FORMAT_OPTION "-R") + execute_process( + COMMAND ${DEB_DATE_TIMESTAMP_EXEC} ${DEB_TIMESTAMP_FORMAT_OPTION} + OUTPUT_VARIABLE TIMESTAMP_T + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + set(DEB_TIMESTAMP + "${TIMESTAMP_T}" + CACHE STRING + "Current Time Stamp for Copyright/Changelog" + ) + + # Get Copyright Year + set(DEB_YEAR_FORMAT_OPTION "+%Y") + execute_process( + COMMAND ${DEB_DATE_TIMESTAMP_EXEC} ${DEB_YEAR_FORMAT_OPTION} + OUTPUT_VARIABLE DEB_COPYRIGHT_YEAR_T + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + set(DEB_COPYRIGHT_YEAR + "${DEB_COPYRIGHT_YEAR_T}" + CACHE STRING + "Debian Package Copyright Year" + ) + + message(STATUS "DEB_PACKAGE_NAME : ${DEB_PACKAGE_NAME}") + message(STATUS "DEB_PACKAGE_VERSION : ${DEB_PACKAGE_VERSION}") + message(STATUS "DEB_MAINTAINER_NAME : ${DEB_MAINTAINER_NAME}") + message(STATUS "DEB_MAINTAINER_EMAIL : ${DEB_MAINTAINER_EMAIL}") + message(STATUS "DEB_COPYRIGHT_YEAR : ${DEB_COPYRIGHT_YEAR}") + message(STATUS "DEB_LICENSE : ${DEB_LICENSE}") + message(STATUS "DEB_TIMESTAMP : ${DEB_TIMESTAMP}") + message( + STATUS + "DEB_CHANGELOG_INSTALL_FILENM : ${DEB_CHANGELOG_INSTALL_FILENM}" + ) +endfunction() diff --git a/projects/rocminfo/CMakeLists.txt b/projects/rocminfo/CMakeLists.txt index 11a4400221..afecbc732d 100644 --- a/projects/rocminfo/CMakeLists.txt +++ b/projects/rocminfo/CMakeLists.txt @@ -91,6 +91,20 @@ set(PKG_VERSION_GIT_TAG_PREFIX "rocminfo_pkg_ver") find_program (GIT NAMES git) +# Set Lintian Support Flags +set(BUILD_ENABLE_LINTIAN_OVERRIDES + OFF + CACHE BOOL + "Enable/Disable Lintian Overrides" +) +set(BUILD_DEBIAN_PKGING_FLAG + OFF + CACHE BOOL + "Internal Status Flag to indicate Debian Packaging Build" +) +# No Library for rocminfo, So no ASAN specific package, no asan comp type +set(COMP_TYPE "dev") + get_package_version_number("1.0.0" ${PKG_VERSION_GIT_TAG_PREFIX} GIT) # VERSION_* variables should be set by get_version_from_tag message("Package version: ${PKG_VERSION_STR}") @@ -195,7 +209,9 @@ set(CPACK_PACKAGE_VENDOR "Advanced Micro Devices, Inc.") set(CPACK_PACKAGE_VERSION_MAJOR "${PKG_VERSION_MAJOR}") set(CPACK_PACKAGE_VERSION_MINOR "${PKG_VERSION_MINOR}") set(CPACK_PACKAGE_VERSION_PATCH "${PKG_VERSION_PATCH}") -set(CPACK_PACKAGE_CONTACT "AMD Rocminfo Support ") +set(PKG_MAINTAINER_NM "AMD Rocminfo Support") +set(PKG_MAINTAINER_EMAIL "rocminfo.support@amd.com") +set(CPACK_PACKAGE_CONTACT "${PKG_MAINTAINER_NM} <${PKG_MAINTAINER_EMAIL}>") set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/License.txt") set( CPACK_RPM_PACKAGE_LICENSE "NCSA" ) set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Radeon Open Compute (ROCm) Runtime rocminfo tool") @@ -268,4 +284,33 @@ if(NOT BUILD_SHARED_LIBS) string(REPLACE "hsa-rocr" "hsa-rocr-static-dev" CPACK_DEBIAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_PACKAGE_DEPENDS}) string(REPLACE "hsa-rocr" "hsa-rocr-static-devel" CPACK_RPM_PACKAGE_REQUIRES ${CPACK_RPM_PACKAGE_REQUIRES}) endif() + +# Configure Lintian Specific Package Data +configure_pkg( ${CPACK_PACKAGE_NAME} ${COMP_TYPE} ${CPACK_PACKAGE_VERSION} ${PKG_MAINTAINER_NM} ${PKG_MAINTAINER_EMAIL}) + +# Custom installation for Debian Lintian File +if(BUILD_ENABLE_LINTIAN_OVERRIDES AND BUILD_DEBIAN_PKGING_FLAG) + set(OVERRIDE_FILE + "${CMAKE_BINARY_DIR}/DEBIAN/${DEB_OVERRIDES_INSTALL_FILENM}" + ) + set(OVERRIDE_TEMP_INSTALL_LOC + "/_CPack_Packages/Linux/DEB/${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Linux/" + ) + if(BUILD_SHARED_LIBS) + set(CPACK_INSTALL_COMMANDS + "${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}${OVERRIDE_TEMP_INSTALL_LOC}${DEB_OVERRIDES_INSTALL_PATH}" + "${CMAKE_COMMAND} -E copy ${OVERRIDE_FILE} ${CMAKE_BINARY_DIR}${OVERRIDE_TEMP_INSTALL_LOC}${DEB_OVERRIDES_INSTALL_PATH}" + ) + else() + set(OVERRIDE_FILE_STATIC "${DEB_OVERRIDES_INSTALL_FILENM}-static-dev") + set(OVERRIDE_FILE_STATIC_DEST + "${CMAKE_BINARY_DIR}${OVERRIDE_TEMP_INSTALL_LOC}${DEB_OVERRIDES_INSTALL_PATH}${OVERRIDE_FILE_STATIC}" + ) + set(CPACK_INSTALL_COMMANDS + "${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}${OVERRIDE_TEMP_INSTALL_LOC}${DEB_OVERRIDES_INSTALL_PATH}" + "${CMAKE_COMMAND} -E copy ${OVERRIDE_FILE} ${OVERRIDE_FILE_STATIC_DEST}" + ) + endif() +endif() + include ( CPack ) diff --git a/projects/rocminfo/DEBIAN/changelog.in b/projects/rocminfo/DEBIAN/changelog.in new file mode 100644 index 0000000000..0571513793 --- /dev/null +++ b/projects/rocminfo/DEBIAN/changelog.in @@ -0,0 +1,4 @@ +@DEB_PACKAGE_NAME@ (@DEB_PACKAGE_VERSION@) stable; urgency=low + + * ROCm Runtime software stack Base Package. + -- @DEB_MAINTAINER_NAME@ <@DEB_MAINTAINER_EMAIL@> @DEB_TIMESTAMP@ diff --git a/projects/rocminfo/DEBIAN/copyright.in b/projects/rocminfo/DEBIAN/copyright.in new file mode 100644 index 0000000000..d0c8bee9ce --- /dev/null +++ b/projects/rocminfo/DEBIAN/copyright.in @@ -0,0 +1,7 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: @DEB_PACKAGE_NAME@ +Upstream-Contact: @DEB_MAINTAINER_NAME@ <@DEB_MAINTAINER_EMAIL@> +Source: https://github.com/ROCm/rocm-systems +Files: * +License: @DEB_LICENSE@ +Copyright: @DEB_COPYRIGHT_YEAR@ Advanced Micro Devices, Inc. All rights reserved. diff --git a/projects/rocminfo/DEBIAN/overrides.in b/projects/rocminfo/DEBIAN/overrides.in new file mode 100644 index 0000000000..6bee886c10 --- /dev/null +++ b/projects/rocminfo/DEBIAN/overrides.in @@ -0,0 +1,3 @@ +@DEB_OVERRIDES_INSTALL_FILENM@: no-copyright-file +@DEB_OVERRIDES_INSTALL_FILENM@: debian-changelog-file-missing +@DEB_OVERRIDES_INSTALL_FILENM@: dir-or-file-in-opt diff --git a/projects/rocminfo/cmake_modules/utils.cmake b/projects/rocminfo/cmake_modules/utils.cmake index 5e1c19bd3f..9532ad6d1e 100644 --- a/projects/rocminfo/cmake_modules/utils.cmake +++ b/projects/rocminfo/cmake_modules/utils.cmake @@ -160,3 +160,190 @@ function(get_package_version_number DEFAULT_VERSION_STRING VERSION_PREFIX GIT) set(PKG_VERSION_STR "${PKG_VERSION_STR}-${VERSION_HASH}") set(PKG_VERSION_STR ${PKG_VERSION_STR} PARENT_SCOPE) endfunction() + +## Configure Lintian Specific install Files for Debian Package +function( + configure_pkg + PACKAGE_NAME_T + COMPONENT_NAME_T + PACKAGE_VERSION_T + MAINTAINER_NM_T + MAINTAINER_EMAIL_T +) + # Check If Debian Platform + find_file(DEBIAN debian_version debconf.conf PATHS /etc) + if(DEBIAN) + set(BUILD_ENABLE_LINTIAN_OVERRIDES + ON + CACHE BOOL + "Enable/Disable Lintian Overrides" + FORCE + ) + set(BUILD_DEBIAN_PKGING_FLAG + ON + CACHE BOOL + "Internal Status Flag to indicate Debian Packaging Build" + FORCE + ) + set_debian_pkg_cmake_flags(${PACKAGE_NAME_T} ${PACKAGE_VERSION_T} + ${MAINTAINER_NM_T} ${MAINTAINER_EMAIL_T} + ) + + # Create debian directory in build tree + file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/DEBIAN") + + # Configure the copyright file + configure_file( + "${CMAKE_SOURCE_DIR}/DEBIAN/copyright.in" + "${CMAKE_BINARY_DIR}/DEBIAN/copyright" + @ONLY + ) + + # Install copyright file + install( + FILES "${CMAKE_BINARY_DIR}/DEBIAN/copyright" + DESTINATION "${CMAKE_INSTALL_DOCDIR}" + COMPONENT ${COMPONENT_NAME_T} + ) + + # Configure the changelog file + configure_file( + "${CMAKE_SOURCE_DIR}/DEBIAN/changelog.in" + "${CMAKE_BINARY_DIR}/DEBIAN/changelog.Debian" + @ONLY + ) + + # Install Change Log + find_program(DEB_GZIP_EXEC gzip) + if(NOT DEB_GZIP_EXEC) + message( + FATAL_ERROR + "gzip command not found: Failed to compress the changelog" + ) + endif() + if(EXISTS "${CMAKE_BINARY_DIR}/DEBIAN/changelog.Debian") + execute_process( + COMMAND + ${DEB_GZIP_EXEC} -f -n -9 + "${CMAKE_BINARY_DIR}/DEBIAN/changelog.Debian" + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/DEBIAN" + RESULT_VARIABLE result + OUTPUT_VARIABLE output + ERROR_VARIABLE error + ) + if(NOT ${result} EQUAL 0) + message(FATAL_ERROR "Failed to compress: ${error}") + endif() + install( + FILES + "${CMAKE_BINARY_DIR}/DEBIAN/${DEB_CHANGELOG_INSTALL_FILENM}" + DESTINATION ${CMAKE_INSTALL_DOCDIR} + COMPONENT ${COMPONENT_NAME_T} + ) + endif() + if(BUILD_ENABLE_LINTIAN_OVERRIDES) + if(ENABLE_ASAN_PACKAGING) + string(FIND ${DEB_OVERRIDES_INSTALL_FILENM} "asan" OUT_VAR2) + if(OUT_VAR2 EQUAL -1) + set(DEB_OVERRIDES_INSTALL_FILENM + "${DEB_OVERRIDES_INSTALL_FILENM}-asan" + CACHE STRING + "Debian Package Lintian Override File Name" + FORCE + ) + endif() + endif() + # Configure the Lintian overrides file + configure_file( + "${CMAKE_SOURCE_DIR}/DEBIAN/overrides.in" + "${CMAKE_BINARY_DIR}/DEBIAN/${DEB_OVERRIDES_INSTALL_FILENM}" + FILE_PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ + @ONLY + ) + endif() + endif() +endfunction() + +# Set variables for changelog and copyright +# For Debian specific Packages +function( + set_debian_pkg_cmake_flags + DEB_PACKAGE_NAME_T + DEB_PACKAGE_VERSION_T + DEB_MAINTAINER_NM_T + DEB_MAINTAINER_EMAIL_T +) + # Setting configure flags + set(DEB_PACKAGE_NAME + "${DEB_PACKAGE_NAME_T}" + CACHE STRING + "Debian Package Name" + ) + set(DEB_PACKAGE_VERSION + "${DEB_PACKAGE_VERSION_T}" + CACHE STRING + "Debian Package Version String" + ) + set(DEB_MAINTAINER_NAME + "${DEB_MAINTAINER_NM_T}" + CACHE STRING + "Debian Package Maintainer Name" + ) + set(DEB_MAINTAINER_EMAIL + "${DEB_MAINTAINER_EMAIL_T}" + CACHE STRING + "Debian Package Maintainer Email" + ) + set(DEB_COPYRIGHT_YEAR "2025" CACHE STRING "Debian Package Copyright Year") + set(DEB_LICENSE "NCSA" CACHE STRING "Debian Package License Type") + set(DEB_CHANGELOG_INSTALL_FILENM + "changelog.Debian.gz" + CACHE STRING + "Debian Package ChangeLog File Name" + ) + + if(BUILD_ENABLE_LINTIAN_OVERRIDES) + set(DEB_OVERRIDES_INSTALL_FILENM + "${DEB_PACKAGE_NAME}" + CACHE STRING + "Debian Package Lintian Override File Name" + ) + set(DEB_OVERRIDES_INSTALL_PATH + "/usr/share/lintian/overrides/" + CACHE STRING + "Deb Pkg Lintian Override Install Loc" + ) + endif() + + # Get TimeStamp + find_program(DEB_DATE_TIMESTAMP_EXEC date) + if(NOT DEB_DATE_TIMESTAMP_EXEC) + message( + FATAL_ERROR + "date command not found: Failed to Configure the timestamp for Copyright/Changelog." + ) + endif() + set(DEB_TIMESTAMP_FORMAT_OPTION "-R") + execute_process( + COMMAND ${DEB_DATE_TIMESTAMP_EXEC} ${DEB_TIMESTAMP_FORMAT_OPTION} + OUTPUT_VARIABLE TIMESTAMP_T + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + set(DEB_TIMESTAMP + "${TIMESTAMP_T}" + CACHE STRING + "Current Time Stamp for Copyright/Changelog" + ) + + message(STATUS "DEB_PACKAGE_NAME : ${DEB_PACKAGE_NAME}") + message(STATUS "DEB_PACKAGE_VERSION : ${DEB_PACKAGE_VERSION}") + message(STATUS "DEB_MAINTAINER_NAME : ${DEB_MAINTAINER_NAME}") + message(STATUS "DEB_MAINTAINER_EMAIL : ${DEB_MAINTAINER_EMAIL}") + message(STATUS "DEB_COPYRIGHT_YEAR : ${DEB_COPYRIGHT_YEAR}") + message(STATUS "DEB_LICENSE : ${DEB_LICENSE}") + message(STATUS "DEB_TIMESTAMP : ${DEB_TIMESTAMP}") + message( + STATUS + "DEB_CHANGELOG_INSTALL_FILENM : ${DEB_CHANGELOG_INSTALL_FILENM}" + ) +endfunction()