Set the SOVERSION in CMake from MAJOR/MINOR/RELEASE variables instead of git info
Backports:
* https://github.com/ROCm/amdsmi/commit/ccfdb65b6ff873d74c610cc48b3b398002a16757
* https://github.com/ROCm/amdsmi/commit/925014ddafb3d6c18686613afd7ac817b548f1e6
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -43,6 +43,11 @@ find_program(GIT NAMES git)
 
 ## 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")
+get_version_from_file("include/amd_smi/amdsmi.h" "MINOR")
+get_version_from_file("include/amd_smi/amdsmi.h" "RELEASE")
+set(DEFAULT_VERSION "${MAJOR}.${MINOR}.${RELEASE}")
+get_package_version_number(${DEFAULT_VERSION} ${PKG_VERSION_GIT_TAG_PREFIX} GIT)
 get_package_version_number("26.0.2" ${PKG_VERSION_GIT_TAG_PREFIX} GIT)
 message("Package version: ${PKG_VERSION_STR}")
 set(${AMD_SMI_LIBS_TARGET}_VERSION_MAJOR "${CPACK_PACKAGE_VERSION_MAJOR}")
@@ -54,6 +59,11 @@ set(${AMD_SMI_LIBS_TARGET}_VERSION_STRING
     "${${AMD_SMI_LIBS_TARGET}_VERSION_MAJOR}.${${AMD_SMI_LIBS_TARGET}_VERSION_MINOR}.${${AMD_SMI_LIBS_TARGET}_VERSION_PATCH}+${${AMD_SMI_LIBS_TARGET}_VERSION_HASH}"
 )
 
+set(DEFAULT_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
+update_version_in_file("include/amd_smi/amdsmi.h" ${DEFAULT_VERSION} "#define AMDSMI_LIB_VERSION_" " *" " ")
+update_version_in_file("rust-interface/src/amdsmi_wrapper.rs" ${DEFAULT_VERSION} "AMDSMI_LIB_VERSION_" " *: *u32 *= *"
+                       ": u32 = ")
+
 # Make proper version for appending
 # Default Value is 99999
 set(ROCM_VERSION_FOR_PACKAGE "99999")
--- a/cmake_modules/utils.cmake
+++ b/cmake_modules/utils.cmake
@@ -56,30 +56,87 @@ function(parse_version VERSION_STRING)
 
 endfunction()
 
+function(get_version_from_file REL_FILE_PATH ITEM)
+    set(FILE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${REL_FILE_PATH}")
+    set(OUTPUT_ITEM "0")
+
+    if(EXISTS "${FILE_PATH}")
+        file(READ ${FILE_PATH} file_contents)
+        string(REGEX MATCHALL "AMDSMI_LIB_VERSION_${ITEM} *[0-9]+" OUTPUT_STR "${file_contents}")
+        list(LENGTH OUTPUT_STR OUTPUT_STR_LENGTH)
+        if(${OUTPUT_STR_LENGTH} GREATER 0)
+            string(REGEX MATCH "[0-9]+" OUTPUT_ITEM "${OUTPUT_STR}")
+        endif()
+    endif()
+
+    set(${ITEM} "${OUTPUT_ITEM}" PARENT_SCOPE)
+endfunction()
+
+# Parses file for a pattern and replaces the value
+# associated with that pattern with a specified value
+# Replaces VERSION(MAJOR.MINOR.RELEASE) with updated values
+function(update_version_in_file REL_FILE_PATH DEFAULT_VERSION PAT1 PAT2 PAT3)
+    get_version_from_file(${REL_FILE_PATH} "MAJOR")
+    get_version_from_file(${REL_FILE_PATH} "MINOR")
+    get_version_from_file(${REL_FILE_PATH} "RELEASE")
+    set(FILE_VERSION "${MAJOR}.${MINOR}.${RELEASE}")
+
+    if(DEFAULT_VERSION VERSION_GREATER FILE_VERSION)
+        set(FILE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${REL_FILE_PATH}")
+        if(EXISTS "${FILE_PATH}")
+            parse_version(${DEFAULT_VERSION})
+            file(READ ${FILE_PATH} file_contents_new)
+
+            string(REGEX REPLACE "${PAT1}MAJOR${PAT2} *[0-9]*" "${PAT1}MAJOR${PAT3}${VERSION_MAJOR}" file_contents
+                                 "${file_contents_new}")
+            string(REGEX REPLACE "${PAT1}MINOR${PAT2} *[0-9]*" "${PAT1}MINOR${PAT3}${VERSION_MINOR}" file_contents_new
+                                 "${file_contents}")
+            string(REGEX REPLACE "${PAT1}RELEASE${PAT2} *[0-9]*" "${PAT1}RELEASE${PAT3}${VERSION_PATCH}" file_contents
+                                 "${file_contents_new}")
+
+            file(WRITE ${FILE_PATH} "${file_contents}")
+        endif()
+        set(VERSION_STRING "${DEFAULT_VERSION}" PARENT_SCOPE)
+    else()
+        set(VERSION_STRING "${FILE_VERSION}" PARENT_SCOPE)
+    endif()
+endfunction()
+
 ## Gets the current version of the repository
 ## using versioning tags and git describe.
 ## Passes back a packaging version string
 ## and a library version string.
 function(get_version_from_tag DEFAULT_VERSION_STRING VERSION_PREFIX GIT)
     parse_version(${DEFAULT_VERSION_STRING})
+    set(DEFAULT_VERSION_MAJOR "${VERSION_MAJOR}")
+    set(DEFAULT_VERSION_MINOR "${VERSION_MINOR}")
+    set(DEFAULT_VERSION_PATCH "${VERSION_PATCH}")
 
     if(GIT)
         execute_process(
-            COMMAND git describe --tags --dirty --long --match ${VERSION_PREFIX}-[0-9.]*
+            COMMAND git tag --list --sort=-version:refname "${VERSION_PREFIX}*"
+            COMMAND head -n 1
             WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
             OUTPUT_VARIABLE GIT_TAG_STRING
-            OUTPUT_STRIP_TRAILING_WHITESPACE
-            RESULT_VARIABLE RESULT)
-        if(${RESULT} EQUAL 0)
+            OUTPUT_STRIP_TRAILING_WHITESPACE RESULTS_VARIABLE RESULTS)
+        if(GIT_TAG_STRING)
+
             parse_version(${GIT_TAG_STRING})
         endif()
 
     endif()
 
-    set(VERSION_STRING "${VERSION_STRING}" PARENT_SCOPE)
-    set(VERSION_MAJOR "${VERSION_MAJOR}" PARENT_SCOPE)
-    set(VERSION_MINOR "${VERSION_MINOR}" PARENT_SCOPE)
-    set(VERSION_PATCH "${VERSION_PATCH}" PARENT_SCOPE)
+    if(VERSION_STRING VERSION_GREATER DEFAULT_VERSION_STRING)
+        set(VERSION_STRING "${VERSION_STRING}" PARENT_SCOPE)
+        set(VERSION_MAJOR "${VERSION_MAJOR}" PARENT_SCOPE)
+        set(VERSION_MINOR "${VERSION_MINOR}" PARENT_SCOPE)
+        set(VERSION_PATCH "${VERSION_PATCH}" PARENT_SCOPE)
+    else()
+        set(VERSION_STRING "${DEFAULT_VERSION_STRING}" PARENT_SCOPE)
+        set(VERSION_MAJOR "${DEFAULT_VERSION_MAJOR}" PARENT_SCOPE)
+        set(VERSION_MINOR "${DEFAULT_VERSION_MINOR}" PARENT_SCOPE)
+        set(VERSION_PATCH "${DEFAULT_VERSION_PATCH}" PARENT_SCOPE)
+    endif()
 endfunction()
 
 function(num_change_since_prev_pkg VERSION_PREFIX)
@@ -106,6 +163,7 @@ function(num_change_since_prev_pkg VERSION_PREFIX)
 endfunction()
 
 function(get_package_version_number DEFAULT_VERSION_STRING VERSION_PREFIX GIT)
+    parse_version(${DEFAULT_VERSION_STRING})
     get_version_from_tag(${DEFAULT_VERSION_STRING} ${VERSION_PREFIX} GIT)
     num_change_since_prev_pkg(${VERSION_PREFIX})
     set(PKG_VERSION_STR "${VERSION_STRING}.${NUM_COMMITS}")
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -59,27 +59,9 @@ endif()
 # VERSION_* variables should be set by get_version_from_tag
 message("Package version: ${PKG_VERSION_STR}")
 
-# Debian package specific variables
-# Set a default value for the package version
-get_version_from_tag("${${AMD_SMI_LIBS_TARGET}_VERSION_MAJOR}.${${AMD_SMI_LIBS_TARGET}_VERSION_MINOR}.0.0"
-                     ${SO_VERSION_GIT_TAG_PREFIX} GIT)
-
-# VERSION_* variables should be set by get_version_from_tag
-if(${ROCM_PATCH_VERSION})
-    set(VERSION_PATCH ${ROCM_PATCH_VERSION})
-    set(SO_VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
-else()
-    set(SO_VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}")
-endif()
-set(${AMD_SMI}_VERSION_MAJOR "${VERSION_MAJOR}")
-set(${AMD_SMI}_VERSION_MINOR "${VERSION_MINOR}")
-set(${AMD_SMI}_VERSION_PATCH "0")
-set(${AMD_SMI}_VERSION_BUILD "0")
+set(SO_VERSION_STRING "${MAJOR}.${MINOR}.${RELEASE}")
 message("SOVERSION: ${SO_VERSION_STRING}")
 
-# Create a configure file to get version info from within library
-configure_file("amd_smiConfig.in" "${PROJECT_SOURCE_DIR}/include/amd_smi/amd_smiConfig.h")
-
 add_library(${AMD_SMI} ${SRC_LIST} ${INC_LIST})
 target_link_libraries(${AMD_SMI} pthread rt dl ${DRM_LIBRARIES} ${AMDGPU_DRM_LIBRARIES})
 target_include_directories(${AMD_SMI} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/rocm_smi/include
@@ -90,7 +72,7 @@ target_include_directories(${AMD_SMI} PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_
                                              "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>")
 
 ## Set the VERSION and SOVERSION values
-set_property(TARGET ${AMD_SMI} PROPERTY SOVERSION "${VERSION_MAJOR}")
+set_property(TARGET ${AMD_SMI} PROPERTY SOVERSION "${MAJOR}")
 set_property(TARGET ${AMD_SMI} PROPERTY VERSION "${SO_VERSION_STRING}")
 
 ## If the library is a release, strip the target library
@@ -115,6 +97,6 @@ install(
     DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/amd_smi
     COMPONENT dev)
 install(
-    FILES ${PROJECT_SOURCE_DIR}/include/amd_smi/amd_smiConfig.h
+    FILES ${PROJECT_SOURCE_DIR}/rocm_smi/include/rocm_smi/kfd_ioctl.h
     DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/amd_smi
     COMPONENT dev)
