diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml index 66c79e2..83376b8 100644 --- a/.github/workflows/examples.yml +++ b/.github/workflows/examples.yml @@ -10,7 +10,7 @@ on: workflow_dispatch: env: - CMLIB_VERSION: 1.2.0 + CMLIB_VERSION: 1.3.1 jobs: examples-linux: diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 7d1aea0..3bfdc06 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -10,7 +10,7 @@ on: workflow_dispatch: env: - CMLIB_VERSION: 1.2.0 + CMLIB_VERSION: 1.3.1 jobs: test_linux: diff --git a/system_modules/CMDEF_ENV.cmake b/system_modules/CMDEF_ENV.cmake index d23ff1b..ea8753f 100644 --- a/system_modules/CMDEF_ENV.cmake +++ b/system_modules/CMDEF_ENV.cmake @@ -204,11 +204,14 @@ ENDFUNCTION() # ) # MACRO(_CMDEF_ENV_SET_OS) + SET(_system_name) IF(NOT DEFINED CMAKE_SYSTEM_NAME) - MESSAGE(FATAL_ERROR "CMAKE_SYSTEM_NAME is not defined!") + CMAKE_HOST_SYSTEM_INFORMATION(RESULT _system_name QUERY OS_NAME) + ELSE() + SET(_system_name "${CMAKE_SYSTEM_NAME}") ENDIF() - SET(_os_name "${CMAKE_SYSTEM_NAME}") + SET(_os_name "${_system_name}") MESSAGE(STATUS "System name: ${_os_name}") SET(os_name "") IF("${_os_name}" STREQUAL "Darwin" OR @@ -433,7 +436,21 @@ FUNCTION(_CMDEF_ENV_GET_ARCH arch) RETURN() ENDIF() IF(CMDEF_OS_LINUX) - SET(_arch "${CMAKE_SYSTEM_PROCESSOR}") + SET(_arch) + IF(DEFINED CMAKE_SYSTEM_PROCESSOR) + SET(_arch "${CMAKE_SYSTEM_PROCESSOR}") + ELSE() + FIND_PROGRAM(uname_exe uname NO_CACHE REQUIRED) + EXECUTE_PROCESS( + COMMAND ${uname_exe} -m + OUTPUT_VARIABLE _arch + RESULT_VARIABLE result + ) + STRING(REGEX REPLACE "\n" "" _arch "${_arch}") + IF(NOT result EQUAL 0) + MESSAGE(FATAL_ERROR "Cannot determine system architecture. uname -m failed") + ENDIF() + ENDIF() STRING(REGEX REPLACE "[^a-zA-Z0-9.]" "-" _arch_mapped "${_arch}") STRING(TOLOWER "${_arch_mapped}" _arch_normalized) IF(NOT _arch_normalized) diff --git a/test/CMDEF_ENV/CMakeLists.txt b/test/CMDEF_ENV/CMakeLists.txt index a3da5f0..eb43855 100644 --- a/test/CMDEF_ENV/CMakeLists.txt +++ b/test/CMDEF_ENV/CMakeLists.txt @@ -16,6 +16,24 @@ TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/os_detection") TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/arch_detection") TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/cache_variables_validation") +EXECUTE_PROCESS( + COMMAND "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_LIST_DIR}/os_detection/CMakeLists.txt" + WORKING_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}/os_detection" + RESULT_VARIABLE result_var +) +IF(NOT result_var EQUAL 0) + MESSAGE(FATAL_ERROR "os_detection test did not pass in script mode!") +ENDIF() + +EXECUTE_PROCESS( + COMMAND "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_LIST_DIR}/arch_detection/CMakeLists.txt" + WORKING_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}/arch_detection" + RESULT_VARIABLE result_var +) +IF(NOT result_var EQUAL 0) + MESSAGE(FATAL_ERROR "arch_detection test did not pass in script mode!") +ENDIF() + IF(CMDEF_OS_WINDOWS) TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/windows_specific") ELSEIF(CMDEF_OS_POSIX) diff --git a/test/CMDEF_ENV/arch_detection/CMakeLists.txt b/test/CMDEF_ENV/arch_detection/CMakeLists.txt index 8921861..8e89666 100644 --- a/test/CMDEF_ENV/arch_detection/CMakeLists.txt +++ b/test/CMDEF_ENV/arch_detection/CMakeLists.txt @@ -3,8 +3,10 @@ # Test architecture detection in CMDEF_ENV # -CMAKE_MINIMUM_REQUIRED(VERSION 3.22) -PROJECT(CMDEF_ENV_ARCH_DETECTION_TEST) +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.22) + PROJECT(CMDEF_ENV_ARCH_DETECTION_TEST) +ENDIF() FIND_PACKAGE(CMLIB REQUIRED) diff --git a/test/CMDEF_ENV/cache_variables_validation/CMakeLists.txt b/test/CMDEF_ENV/cache_variables_validation/CMakeLists.txt index 1f82a1d..6c9f472 100644 --- a/test/CMDEF_ENV/cache_variables_validation/CMakeLists.txt +++ b/test/CMDEF_ENV/cache_variables_validation/CMakeLists.txt @@ -6,6 +6,8 @@ # are properly set with expected values for each supported platform (Linux, macOS, Windows). # Also tests environment variable support. # +# It tests only variables which are shared across all platforms. +# CMAKE_MINIMUM_REQUIRED(VERSION 3.22) PROJECT(CMDEF_ENV_CACHE_VARIABLES_TEST) @@ -26,12 +28,6 @@ INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../../system_modules/CMDEF_ENV.cmake") # () # FUNCTION(TEST_LINUX_CACHE_VARIABLES) - IF(NOT CMDEF_OS_LINUX) - MESSAGE(STATUS "Skipping Linux cache variables test - not running on Linux") - RETURN() - ENDIF() - - MESSAGE(STATUS "Testing CMDEF_ENV cache variables for Linux platform") # OS Detection Variables TEST_VAR_VALUE_EQUAL(CMDEF_OS_NAME "linux") @@ -42,9 +38,7 @@ FUNCTION(TEST_LINUX_CACHE_VARIABLES) TEST_VAR_FALSE(CMDEF_OS_MACOS) TEST_VAR_TRUE(CMDEF_OS_POSIX) - # Architecture Variables TEST_VAR_DEFINED(CMDEF_ARCHITECTURE) - # Linux architecture should be one of the supported ones SET(supported_archs "x86-64" "x86" "aarch64" "aplsil") LIST(FIND supported_archs "${CMDEF_ARCHITECTURE}" arch_found) IF(arch_found EQUAL -1) @@ -84,11 +78,9 @@ FUNCTION(TEST_LINUX_CACHE_VARIABLES) CMAKE_PATH(CONVERT "${CMDEF_BINARY_INSTALL_DIR}" TO_CMAKE_PATH_LIST _normalized) TEST_VAR_VALUE_EQUAL(_normalized "bin") - # Naming Convention Variables TEST_VAR_VALUE_EQUAL(CMDEF_ENV_NAME_SEPARATOR "_") TEST_VAR_VALUE_EQUAL(CMDEF_ENV_NAMESPACE_SUFFIX "::") - # Supported Languages TEST_VAR_DEFINED(CMDEF_SUPPORTED_LANG_LIST) SET(expected_langs "C" "CXX" "OBJC" "OBJCXX" "RC") FOREACH(lang IN LISTS expected_langs) @@ -98,14 +90,11 @@ FUNCTION(TEST_LINUX_CACHE_VARIABLES) ENDIF() ENDFOREACH() - # Output Directory Variables TEST_VAR_DEFINED(CMDEF_TARGET_OUTPUT_DIRECTORY) - # Description Variables TEST_VAR_VALUE_EQUAL(CMDEF_ENV_DESCRIPTION_COMPANY_NAME "Company name") TEST_VAR_VALUE_EQUAL(CMDEF_ENV_DESCRIPTION_COPYRIGHT "Company name") - # Multi-config Variables TEST_VAR_VALUE_EQUAL(CMDEF_MULTICONF_FOLDER_NAME "CMDEF") MESSAGE(STATUS "Linux cache variables validation passed") @@ -120,12 +109,6 @@ ENDFUNCTION() # () # FUNCTION(TEST_MACOS_CACHE_VARIABLES) - IF(NOT CMDEF_OS_MACOS) - MESSAGE(STATUS "Skipping macOS cache variables test - not running on macOS") - RETURN() - ENDIF() - - MESSAGE(STATUS "Testing CMDEF_ENV cache variables for macOS platform") TEST_VAR_VALUE_EQUAL(CMDEF_OS_NAME "macos") TEST_VAR_VALUE_EQUAL(CMDEF_OS_NAME_SHORT "mac") @@ -197,13 +180,6 @@ ENDFUNCTION() # () # FUNCTION(TEST_WINDOWS_CACHE_VARIABLES) - IF(NOT CMDEF_OS_WINDOWS) - MESSAGE(STATUS "Skipping Windows cache variables test - not running on Windows") - RETURN() - ENDIF() - - MESSAGE(STATUS "Testing CMDEF_ENV cache variables for Windows platform") - TEST_VAR_VALUE_EQUAL(CMDEF_OS_NAME "windows") TEST_VAR_VALUE_EQUAL(CMDEF_OS_NAME_SHORT "win") TEST_VAR_VALUE_EQUAL(CMDEF_OS_NAME_UPPER "WINDOWS") @@ -244,7 +220,6 @@ FUNCTION(TEST_WINDOWS_CACHE_VARIABLES) TEST_VAR_VALUE_EQUAL(CMDEF_ENV_NAME_SEPARATOR "_") TEST_VAR_VALUE_EQUAL(CMDEF_ENV_NAMESPACE_SUFFIX "::") - # Supported Languages TEST_VAR_DEFINED(CMDEF_SUPPORTED_LANG_LIST) SET(expected_langs "C" "CXX" "OBJC" "OBJCXX" "RC") FOREACH(lang IN LISTS expected_langs) @@ -367,8 +342,14 @@ FUNCTION(TEST_ENVIRONMENT_VARIABLES) MESSAGE(STATUS "Environment variable support validation passed") ENDFUNCTION() -TEST_LINUX_CACHE_VARIABLES() -TEST_MACOS_CACHE_VARIABLES() -TEST_WINDOWS_CACHE_VARIABLES() +IF(CMDEF_OS_LINUX) + TEST_LINUX_CACHE_VARIABLES() +ELSEIF(CMDEF_OS_MACOS) + TEST_MACOS_CACHE_VARIABLES() +ELSEIF(CMDEF_OS_WINDOWS) + TEST_WINDOWS_CACHE_VARIABLES() +ELSE() + MESSAGE(FATAL_ERROR "Unsupported or undetected OS") +ENDIF() TEST_COMMON_CACHE_VARIABLES() TEST_ENVIRONMENT_VARIABLES() diff --git a/test/CMDEF_ENV/os_detection/CMakeLists.txt b/test/CMDEF_ENV/os_detection/CMakeLists.txt index 5e507e6..6a557f4 100644 --- a/test/CMDEF_ENV/os_detection/CMakeLists.txt +++ b/test/CMDEF_ENV/os_detection/CMakeLists.txt @@ -3,15 +3,17 @@ # Test OS detection in CMDEF_ENV # -CMAKE_MINIMUM_REQUIRED(VERSION 3.22) -PROJECT(CMDEF_ENV_OS_DETECTION_TEST) +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.22) + PROJECT(CMDEF_ENV_OS_DETECTION_TEST) +ENDIF() FIND_PACKAGE(CMLIB REQUIRED) INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../TEST.cmake") INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../../system_modules/CMDEF_ENV.cmake") -IF(CMDEF_OS_LINUX) +IF(UNIX AND NOT APPLE) TEST_VAR_VALUE_EQUAL(CMDEF_OS_NAME "linux") TEST_VAR_VALUE_EQUAL(CMDEF_OS_NAME_SHORT "lin") TEST_VAR_VALUE_EQUAL(CMDEF_OS_NAME_UPPER "LINUX") @@ -19,7 +21,7 @@ IF(CMDEF_OS_LINUX) TEST_VAR_FALSE(CMDEF_OS_WINDOWS) TEST_VAR_FALSE(CMDEF_OS_MACOS) TEST_VAR_TRUE(CMDEF_OS_POSIX) -ELSEIF(CMDEF_OS_WINDOWS) +ELSEIF(WIN32) TEST_VAR_VALUE_EQUAL(CMDEF_OS_NAME "windows") TEST_VAR_VALUE_EQUAL(CMDEF_OS_NAME_SHORT "win") TEST_VAR_VALUE_EQUAL(CMDEF_OS_NAME_UPPER "WINDOWS") @@ -27,7 +29,7 @@ ELSEIF(CMDEF_OS_WINDOWS) TEST_VAR_FALSE(CMDEF_OS_LINUX) TEST_VAR_FALSE(CMDEF_OS_MACOS) TEST_VAR_FALSE(CMDEF_OS_POSIX) -ELSEIF(CMDEF_OS_MACOS) +ELSEIF(APPLE) TEST_VAR_VALUE_EQUAL(CMDEF_OS_NAME "macos") TEST_VAR_VALUE_EQUAL(CMDEF_OS_NAME_SHORT "mac") TEST_VAR_VALUE_EQUAL(CMDEF_OS_NAME_UPPER "MACOS") diff --git a/version.txt b/version.txt index aef125e..f7b14fb 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -version=1.0.0 +version=1.0.3