@@ -20,21 +20,45 @@ configure_file(${CMAKE_SOURCE_DIR}/resources/qldd.desktop.in ${CMAKE_BINARY_DIR}
2020
2121function (get_linux_lsb_release_information )
2222 find_program (LSB_RELEASE_EXEC lsb_release )
23- if (NOT LSB_RELEASE_EXEC)
24- message (WARNING "lsb_release not found; distro info will be unavailable" )
23+ if (LSB_RELEASE_EXEC)
24+ execute_process (COMMAND "${LSB_RELEASE_EXEC} " --short --id OUTPUT_VARIABLE LSB_RELEASE_ID_SHORT OUTPUT_STRIP_TRAILING_WHITESPACE )
25+ execute_process (COMMAND "${LSB_RELEASE_EXEC} " --short --release OUTPUT_VARIABLE LSB_RELEASE_VERSION_SHORT OUTPUT_STRIP_TRAILING_WHITESPACE )
26+ execute_process (COMMAND "${LSB_RELEASE_EXEC} " --short --codename OUTPUT_VARIABLE LSB_RELEASE_CODENAME_SHORT OUTPUT_STRIP_TRAILING_WHITESPACE )
27+ set (LSB_RELEASE_ID_SHORT "${LSB_RELEASE_ID_SHORT} " PARENT_SCOPE )
28+ set (LSB_RELEASE_VERSION_SHORT "${LSB_RELEASE_VERSION_SHORT} " PARENT_SCOPE )
29+ set (LSB_RELEASE_CODENAME_SHORT "${LSB_RELEASE_CODENAME_SHORT} " PARENT_SCOPE )
30+ elseif (EXISTS "/etc/os-release" )
31+ # Fallback: parse /etc/os-release (present on all systemd-based distros)
32+ set (_id "unknown" )
33+ set (_version "unknown" )
34+ set (_codename "unknown" )
35+ file (STRINGS "/etc/os-release" _os_release )
36+ foreach (_line ${_os_release} )
37+ if (_line MATCHES "^ID=(.+)$" )
38+ set (_id "${CMAKE_MATCH_1} " )
39+ string (REPLACE "\" " "" _id "${_id} " )
40+ # Capitalize first letter to match lsb_release output (ubuntu -> Ubuntu)
41+ string (SUBSTRING "${_id} " 0 1 _first)
42+ string (TOUPPER "${_first} " _first)
43+ string (SUBSTRING "${_id} " 1 -1 _rest)
44+ set (_id "${_first}${_rest} " )
45+ elseif (_line MATCHES "^VERSION_ID=(.+)$" )
46+ set (_version "${CMAKE_MATCH_1} " )
47+ string (REPLACE "\" " "" _version "${_version} " )
48+ elseif (_line MATCHES "^VERSION_CODENAME=(.+)$" )
49+ set (_codename "${CMAKE_MATCH_1} " )
50+ string (REPLACE "\" " "" _codename "${_codename} " )
51+ endif ()
52+ endforeach ()
53+ set (LSB_RELEASE_ID_SHORT "${_id} " PARENT_SCOPE )
54+ set (LSB_RELEASE_VERSION_SHORT "${_version} " PARENT_SCOPE )
55+ set (LSB_RELEASE_CODENAME_SHORT "${_codename} " PARENT_SCOPE )
56+ else ()
57+ message (WARNING "Neither lsb_release nor /etc/os-release found; distro info unavailable" )
2558 set (LSB_RELEASE_ID_SHORT "unknown" PARENT_SCOPE )
2659 set (LSB_RELEASE_VERSION_SHORT "unknown" PARENT_SCOPE )
2760 set (LSB_RELEASE_CODENAME_SHORT "unknown" PARENT_SCOPE )
28- return ()
2961 endif ()
30-
31- execute_process (COMMAND "${LSB_RELEASE_EXEC} " --short --id OUTPUT_VARIABLE LSB_RELEASE_ID_SHORT OUTPUT_STRIP_TRAILING_WHITESPACE )
32- execute_process (COMMAND "${LSB_RELEASE_EXEC} " --short --release OUTPUT_VARIABLE LSB_RELEASE_VERSION_SHORT OUTPUT_STRIP_TRAILING_WHITESPACE )
33- execute_process (COMMAND "${LSB_RELEASE_EXEC} " --short --codename OUTPUT_VARIABLE LSB_RELEASE_CODENAME_SHORT OUTPUT_STRIP_TRAILING_WHITESPACE )
34-
35- set (LSB_RELEASE_ID_SHORT "${LSB_RELEASE_ID_SHORT} " PARENT_SCOPE )
36- set (LSB_RELEASE_VERSION_SHORT "${LSB_RELEASE_VERSION_SHORT} " PARENT_SCOPE )
37- set (LSB_RELEASE_CODENAME_SHORT "${LSB_RELEASE_CODENAME_SHORT} " PARENT_SCOPE )
3862endfunction ()
3963
4064message (STATUS "COMMITTER_FULLSHA ${COMMITTER_FULLSHA} " )
0 commit comments