From 41d1bd678351db4eb8fbfa2e73f9b3005533c7b5 Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Sat, 13 Jan 2024 21:29:09 +0100 Subject: [PATCH 1/3] fix: Use uname to check for Linux In build environments like Fedora's mockbuild, there is no OSTYPE environment variable set. Use a more secure method to detect Linux. --- deps/lua.cmake | 1 + lib/utils.lua | 11 ++++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/deps/lua.cmake b/deps/lua.cmake index 7c0b9e3d..b35c8462 100644 --- a/deps/lua.cmake +++ b/deps/lua.cmake @@ -120,6 +120,7 @@ IF(WIN32) ELSE() target_link_libraries(lua lualib ${LIBS}) SET_TARGET_PROPERTIES(lua PROPERTIES ENABLE_EXPORTS ON) + target_compile_options(lua PRIVATE -DLUA_USE_POSIX) ENDIF(WIN32) MACRO(LUA_add_custom_commands luajit_target) diff --git a/lib/utils.lua b/lib/utils.lua index 3bbc99ec..001209f5 100644 --- a/lib/utils.lua +++ b/lib/utils.lua @@ -19,10 +19,15 @@ if _G.jit and _G.jit.os then else -- Normal lua will only have \ for path separator on windows. utils.isWindows = package.config:find("\\") and true or false + utils.isLinux = false + if not utils.isWindows then - local _os = os.getenv('RUNNER_OS') or os.getenv('OSTYPE') - if (_os and _os:lower():match('linux')) then - utils.isLinux = true + -- TODO Use uv.os_uname() when the minimum required libuv provides it + local popen_handle = io.popen('uname -s') + if popen_handle then + local uname_os = assert(popen_handle:read('*a')) + popen_handle:close() + utils.isLinux = uname_os:lower() == 'linux' end end end From 58e71b6f32b42eaf278bd847d2e3cf20fe75f745 Mon Sep 17 00:00:00 2001 From: Ryan Liptak Date: Wed, 17 Jan 2024 09:39:02 -0800 Subject: [PATCH 2/3] Fix LUA_USE_POSIX definition --- deps/lua.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps/lua.cmake b/deps/lua.cmake index b35c8462..5685a0d5 100644 --- a/deps/lua.cmake +++ b/deps/lua.cmake @@ -118,9 +118,9 @@ add_executable(lua ${LUA_DIR}/lua.c) IF(WIN32) target_link_libraries(lua lualib) ELSE() + target_compile_definitions(lualib PRIVATE LUA_USE_POSIX) target_link_libraries(lua lualib ${LIBS}) SET_TARGET_PROPERTIES(lua PROPERTIES ENABLE_EXPORTS ON) - target_compile_options(lua PRIVATE -DLUA_USE_POSIX) ENDIF(WIN32) MACRO(LUA_add_custom_commands luajit_target) From 7877a2280e6a9232e280e82e59d0541eb28a5729 Mon Sep 17 00:00:00 2001 From: Ryan Liptak Date: Wed, 17 Jan 2024 09:44:51 -0800 Subject: [PATCH 3/3] utils: Use os_uname when it's available to detect Linux --- lib/utils.lua | 45 +++++++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/lib/utils.lua b/lib/utils.lua index 001209f5..24f22b81 100644 --- a/lib/utils.lua +++ b/lib/utils.lua @@ -12,6 +12,20 @@ else usecolors = false end +function utils.uvVersionGEQ(min_version) + if not min_version then return true end + local min_version_num = min_version + if type(min_version) == "string" then + local version_parts = {} + for part in min_version:gmatch("%d+") do + table.insert(version_parts, tonumber(part)) + end + assert(#version_parts == 3, "malformed version string: " .. min_version) + min_version_num = version_parts[1]*0x10000 + version_parts[2]*0x100 + version_parts[3] + end + return uv.version() >= min_version_num +end + if _G.jit and _G.jit.os then -- Luajit provides explicit platform detection utils.isWindows = _G.jit.os == "Windows" @@ -22,12 +36,17 @@ else utils.isLinux = false if not utils.isWindows then - -- TODO Use uv.os_uname() when the minimum required libuv provides it - local popen_handle = io.popen('uname -s') - if popen_handle then - local uname_os = assert(popen_handle:read('*a')) - popen_handle:close() - utils.isLinux = uname_os:lower() == 'linux' + -- Use os_uname if it's available, fallback to popen + if utils.uvVersionGEQ("1.25.0") then + local uname = uv.os_uname() + utils.isLinux = uname.sysname:lower() == 'linux' + else + local popen_handle = io.popen('uname -s') + if popen_handle then + local uname_os = assert(popen_handle:read('*a')) + popen_handle:close() + utils.isLinux = uname_os:lower() == 'linux' + end end end end @@ -181,19 +200,5 @@ function utils.prettyPrint(...) print(table.concat(arguments, "\t")) end -function utils.uvVersionGEQ(min_version) - if not min_version then return true end - local min_version_num = min_version - if type(min_version) == "string" then - local version_parts = {} - for part in min_version:gmatch("%d+") do - table.insert(version_parts, tonumber(part)) - end - assert(#version_parts == 3, "malformed version string: " .. min_version) - min_version_num = version_parts[1]*0x10000 + version_parts[2]*0x100 + version_parts[3] - end - return uv.version() >= min_version_num -end - return utils