From 0f76bb45c787e5d07b29091347223aafa2fb8749 Mon Sep 17 00:00:00 2001 From: arvindcheru <90783369+arvindcheru@users.noreply.github.com> Date: Thu, 4 Dec 2025 22:01:57 -0500 Subject: [PATCH] Enable Lintian configuration/Files for AMDSMI (#2140) * Enable Lintian configuration/Files for AMDSMI --- projects/amdsmi/CMakeLists.txt | 52 +++++- projects/amdsmi/DEBIAN/changelog.in | 4 + projects/amdsmi/DEBIAN/copyright.in | 2 +- projects/amdsmi/DEBIAN/overrides.in | 3 + projects/amdsmi/cmake_modules/utils.cmake | 185 ++++++++++++++++++++++ 5 files changed, 244 insertions(+), 2 deletions(-) create mode 100644 projects/amdsmi/DEBIAN/changelog.in create mode 100644 projects/amdsmi/DEBIAN/overrides.in diff --git a/projects/amdsmi/CMakeLists.txt b/projects/amdsmi/CMakeLists.txt index 444ec4e56a..f2c47c067f 100644 --- a/projects/amdsmi/CMakeLists.txt +++ b/projects/amdsmi/CMakeLists.txt @@ -41,6 +41,18 @@ generic_add_rocm() # 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" +) + ## Setup the package version based on git tags. set(PKG_VERSION_GIT_TAG_PREFIX "amdsmi_pkg_ver") get_version_from_file("include/amd_smi/amdsmi.h" "MAJOR") @@ -121,7 +133,13 @@ cmake_dependent_option(ENABLE_LDCONFIG "Set library links and caches using ldcon set(SHARE_INSTALL_PREFIX "${CMAKE_INSTALL_DATAROOTDIR}/${AMD_SMI}" CACHE STRING "Tests and Example install directory") # Packaging directives -set(CPACK_PACKAGE_CONTACT "AMD-SMILib Support " CACHE STRING "") +set(PKG_MAINTAINER_NM "AMD-SMILib Support") +set(PKG_MAINTAINER_EMAIL "amd-smi.support@amd.com") +set(CPACK_PACKAGE_CONTACT + "${PKG_MAINTAINER_NM} <${PKG_MAINTAINER_EMAIL}>" + CACHE STRING + "" +) generic_package() @@ -345,13 +363,17 @@ install( set(CPACK_RPM_PACKAGE_LICENSE "MIT") if(ENABLE_ASAN_PACKAGING) + set(COMP_TYPE "asan") # install license file in share/doc/amd_smi-asan folder install( FILES ${CPACK_RESOURCE_FILE_LICENSE} DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/doc/${CPACK_PACKAGE_NAME}-asan RENAME LICENSE.txt COMPONENT asan) +else() + set(COMP_TYPE "dev") endif() + # docs are installed into different share directory from tests and examples install( FILES ${CPACK_RESOURCE_FILE_LICENSE} @@ -506,6 +528,34 @@ set(CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE "${CMAKE_CURRENT_BINARY_DIR}/RPM/postun set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT") set(CPACK_RPM_FILE_NAME "RPM-DEFAULT") +# 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/runtime" + ) + 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) generic_package_post() diff --git a/projects/amdsmi/DEBIAN/changelog.in b/projects/amdsmi/DEBIAN/changelog.in new file mode 100644 index 0000000000..0571513793 --- /dev/null +++ b/projects/amdsmi/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/amdsmi/DEBIAN/copyright.in b/projects/amdsmi/DEBIAN/copyright.in index 4d6e35ee9c..acd4fbb0e0 100644 --- a/projects/amdsmi/DEBIAN/copyright.in +++ b/projects/amdsmi/DEBIAN/copyright.in @@ -3,7 +3,7 @@ Upstream-Name: amdsmi Source: https://github.com/ROCm/amdsmi.git Files: * -Copyright: @CURRENT_YEAR@ Advanced Micro Devices, Inc. +Copyright: @CURRENT_YEAR@ Advanced Micro Devices, Inc. All rights reserved. License: MIT License: MIT diff --git a/projects/amdsmi/DEBIAN/overrides.in b/projects/amdsmi/DEBIAN/overrides.in new file mode 100644 index 0000000000..6bee886c10 --- /dev/null +++ b/projects/amdsmi/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/amdsmi/cmake_modules/utils.cmake b/projects/amdsmi/cmake_modules/utils.cmake index f843874ba8..22a0a33e94 100644 --- a/projects/amdsmi/cmake_modules/utils.cmake +++ b/projects/amdsmi/cmake_modules/utils.cmake @@ -198,3 +198,188 @@ 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 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/${PACKAGE_NAME_T} + 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_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" + ) + + 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_TIMESTAMP : ${DEB_TIMESTAMP}") + message( + STATUS + "DEB_CHANGELOG_INSTALL_FILENM : ${DEB_CHANGELOG_INSTALL_FILENM}" + ) +endfunction()