Skip to content

Commit a2ab160

Browse files
bas524claude
andcommitted
Fall back to /etc/os-release when lsb_release is unavailable
lsb_release is absent on CentOS Stream 9 and Fedora 44+ by default. Parse /etc/os-release as a fallback — it is present on all systemd-based distros. Capitalize the ID field to match lsb_release output so existing Ubuntu/Debian codename checks downstream continue to work unchanged. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent f562f38 commit a2ab160

1 file changed

Lines changed: 35 additions & 11 deletions

File tree

CMakeLists.txt

Lines changed: 35 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,45 @@ configure_file(${CMAKE_SOURCE_DIR}/resources/qldd.desktop.in ${CMAKE_BINARY_DIR}
2020

2121
function(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)
3862
endfunction()
3963

4064
message(STATUS "COMMITTER_FULLSHA ${COMMITTER_FULLSHA}")

0 commit comments

Comments
 (0)