From 55767c6252aa3370adfb59ee77f6f0f22ebd20bf Mon Sep 17 00:00:00 2001 From: Jan Kubalek Date: Sat, 24 Jan 2026 22:05:04 +0100 Subject: [PATCH 01/28] First init --- BA_PACKAGE.cmake | 17 +++++++++++++++++ BA_PACKAGE_VARS.cmake | 5 +++++ README.md | 1 + helpers/BA_PACKAGE_PREREQ.cmake | 2 ++ 4 files changed, 25 insertions(+) diff --git a/BA_PACKAGE.cmake b/BA_PACKAGE.cmake index e730c1f..de2aedb 100644 --- a/BA_PACKAGE.cmake +++ b/BA_PACKAGE.cmake @@ -146,6 +146,7 @@ FUNCTION(_BRINGAUTO_PACKAGE package_name version_tag prefix suffix output_var) SET(revision_arg REVISION "${revision_var}") ENDIF() SET(git_path "${CMDEF_DISTRO_ID}/${CMDEF_DISTRO_VERSION_ID}/${machine}") + BA_PACKAGE_VARS_GET(URI_TEMPLATE template_var) CMLIB_STORAGE_TEMPLATE_INSTANCE(remote_file template_var ${revision_arg} @@ -154,6 +155,20 @@ FUNCTION(_BRINGAUTO_PACKAGE package_name version_tag prefix suffix output_var) PACKAGE_GROUP_NAME "${package_name}" ) + SET(git_archive_path_arg) + SET(git_revision_arg) + BA_PACKAGE_VARS_GET(GIT_PATH_TEMPLATE git_path_template_var) + IF(git_path_template_var) + CMLIB_STORAGE_TEMPLATE_INSTANCE(git_archive_path git_path_template_var + ${revision_arg} + GIT_PATH "${git_path}" + ARCHIVE_NAME "${package_string}" + PACKAGE_GROUP_NAME "${package_name}" + ) + SET(git_revision_arg "GIT_REVISION ${revision_var}") + SET(git_archive_path_arg "GIT_PATH ${git_archive_path}") + ENDIF() + STRING(TOUPPER "${package_name}" package_name_upper_orig) STRING(REGEX REPLACE "[^A-Z0-9]" "" package_name_upper "${package_name_upper_orig}") STRING(REGEX REPLACE "[\\-]" "" package_name_upper_wodash "${package_name_upper_orig}") @@ -187,6 +202,8 @@ FUNCTION(_BRINGAUTO_PACKAGE package_name version_tag prefix suffix output_var) KEYWORDS ${keywords} TYPE ARCHIVE URI "${remote_file}" + ${git_revision_arg} + ${git_archive_path_arg} OUTPUT_PATH_VAR cache_path ) ENDIF() diff --git a/BA_PACKAGE_VARS.cmake b/BA_PACKAGE_VARS.cmake index 8cd648b..e7b9096 100644 --- a/BA_PACKAGE_VARS.cmake +++ b/BA_PACKAGE_VARS.cmake @@ -27,6 +27,11 @@ SET(BA_PACKAGE_VARS__URI_TEMPLATE "NonExistentPath" "Storage URI template used to construct the package download URI" ) +SET(BA_PACKAGE_VARS__GIT_PATH_TEMPLATE "NonExistentPath" + CACHE INTERNAL + "Git path template to use. If non empty the URI_TEMPALTE represents remote Git repository. Takes same template params as URI_TEMPLATE." +) + ## diff --git a/README.md b/README.md index 3a56c9f..04a8df1 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,7 @@ Setting variable values are highly affected by [CMCONF Global Config]. - `` - path to Packages in the repository for a given system. Set to `${CMDEF_DISTRO_ID}/${CMDEF_DISTRO_VERSION_ID}/${CMDEF_ARCHITECTURE}`, - `` - package group name as stated in [BringAuto Packager Context] - `` - full name of the Package. Set to ${package_group_name}_${version_tag}_${platform_string}.zip. The platform string is derived from CMDEF variables: `CMDEF_ARCHITECTURE`, `CMDEF_DISTRO_ID`, `CMDEF_DISTRO_VERSION_ID`. +- `GIT_PATH_TEMPLATE` - [CMake-lib] template to construct path to the package in the repository. If set `URI_TEMPLATE` shall represents remote Git repository. It takes same template params as `URI_TEMPLATE`. ```cmake # Set REVISION to deps_update diff --git a/helpers/BA_PACKAGE_PREREQ.cmake b/helpers/BA_PACKAGE_PREREQ.cmake index 973ba4e..ee101ee 100644 --- a/helpers/BA_PACKAGE_PREREQ.cmake +++ b/helpers/BA_PACKAGE_PREREQ.cmake @@ -49,10 +49,12 @@ FUNCTION(BA_PACKAGE_PREREQ_CMCONF_INIT template_output_var revision_output_var) CMCONF_GET(BA_PACKAGE_HTTP_AUTHORIZATION_HEADER) CMCONF_GET(BA_PACKAGE_URI_REVISION) CMCONF_GET(BA_PACKAGE_URI_TEMPLATE_REMOTE) + CMCONF_GET(BA_PACKAGE_) ENDIF() SET(template) SET(revision) + SET(git_archive_path) IF(DEFINED ENV{BA_PACKAGE_LOCAL_PATH}) IF(BA_PACKAGE_LOCAL_USE) MESSAGE(WARNING "BA_PACKAGE_LOCAL_PATH ENV variable is defined and BA_PACKAGE_LOCAL_USE is ON. Using BA_PACKAGE_LOCAL_PATH ENV variable to set as Repository path") From 82505494376f40a05c249dbcb81ead543c433de6 Mon Sep 17 00:00:00 2001 From: Jan Kubalek Date: Sat, 24 Jan 2026 22:25:51 +0100 Subject: [PATCH 02/28] cmake-tests init --- .../CMakeLists.txt | 27 +++++++++++++++++ .../test_env_var_precedence/CMakeLists.txt | 30 +++++++++++++++++++ .../CMakeLists.txt | 27 +++++++++++++++++ .../test_invalid_local_path/CMakeLists.txt | 19 ++++++++++++ .../test_local_use_off/CMakeLists.txt | 28 +++++++++++++++++ .../test_local_use_on/CMakeLists.txt | 25 ++++++++++++++++ .../CMakeLists.txt | 25 ++++++++++++++++ cmake_tests/CMakeLists.txt | 11 +++++++ cmake_tests/TEST.cmake | 8 +++++ cmake_tests/mock/CMCONF.cmake | 15 ++++++++++ 10 files changed, 215 insertions(+) create mode 100644 cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_env_var_precedence/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_env_var_with_local_use_warning/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_invalid_local_path/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_local_use_off/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_local_use_on/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_revision_with_local_warning/CMakeLists.txt create mode 100644 cmake_tests/CMakeLists.txt create mode 100644 cmake_tests/TEST.cmake create mode 100644 cmake_tests/mock/CMCONF.cmake diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt new file mode 100644 index 0000000..dfd315c --- /dev/null +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt @@ -0,0 +1,27 @@ +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(BA_PACKAGE_PREREQ_CMCONF_INIT_TEST) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../TEST.cmake") + +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/test_local_use_on") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/test_local_use_off") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/test_env_var_precedence") + +TEST_RUN_AND_CHECK_OUTPUT("test_env_var_with_local_use_warning" + WARNING_MESSAGE "BA_PACKAGE_LOCAL_PATH ENV variable is defined" + ALWAYS_SCRIPT_MODE ON +) + +TEST_INVALID_CMAKE_RUN("${CMAKE_CURRENT_LIST_DIR}/test_invalid_local_path" + "Local repository path variable is not" +) + +TEST_RUN_AND_CHECK_OUTPUT("test_revision_with_local_warning" + WARNING_MESSAGE "Revision is defined but local repository is used" + ALWAYS_SCRIPT_MODE ON +) + diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_env_var_precedence/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_env_var_precedence/CMakeLists.txt new file mode 100644 index 0000000..a65e99c --- /dev/null +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_env_var_precedence/CMakeLists.txt @@ -0,0 +1,30 @@ +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_ENV_VAR_PRECEDENCE) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../TEST.cmake") + +SET(TEST_CMCONF_BA_PACKAGE_LOCAL_USE OFF) +SET(TEST_CMCONF_BA_PACKAGE_HTTP_AUTHORIZATION_HEADER "Bearer test-token") +SET(TEST_CMCONF_BA_PACKAGE_URI_REVISION "v1.0.0") +SET(TEST_CMCONF_BA_PACKAGE_URI_TEMPLATE_REMOTE "https://example.com/packages/") +SET(TEST_CMCONF_BA_PACKAGE_ "") + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../mock/CMCONF.cmake") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../../helpers/BA_PACKAGE_PREREQ.cmake") + +SET(ENV{BA_PACKAGE_LOCAL_PATH} "/tmp") + +BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision) + +UNSET(ENV{BA_PACKAGE_LOCAL_PATH}) + +SET(expected_template "file:///tmp/package///") +TEST_VAR_EQUALS_LITERAL(result_template "${expected_template}") + +SET(expected_revision "") +TEST_VAR_EQUALS_LITERAL(result_revision "${expected_revision}") + diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_env_var_with_local_use_warning/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_env_var_with_local_use_warning/CMakeLists.txt new file mode 100644 index 0000000..94f534c --- /dev/null +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_env_var_with_local_use_warning/CMakeLists.txt @@ -0,0 +1,27 @@ +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_ENV_VAR_WITH_LOCAL_USE_WARNING) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../TEST.cmake") + +SET(TEST_CMCONF_BA_PACKAGE_LOCAL_USE ON) +SET(TEST_CMCONF_BA_PACKAGE_LOCAL_PATH "/tmp") + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../mock/CMCONF.cmake") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../../helpers/BA_PACKAGE_PREREQ.cmake") + +SET(ENV{BA_PACKAGE_LOCAL_PATH} "/tmp") + +BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision) + +UNSET(ENV{BA_PACKAGE_LOCAL_PATH}) + +SET(expected_template "file:///tmp/package///") +TEST_VAR_EQUALS_LITERAL(result_template "${expected_template}") + +SET(expected_revision "") +TEST_VAR_EQUALS_LITERAL(result_revision "${expected_revision}") + diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_invalid_local_path/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_invalid_local_path/CMakeLists.txt new file mode 100644 index 0000000..db52ffb --- /dev/null +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_invalid_local_path/CMakeLists.txt @@ -0,0 +1,19 @@ +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_INVALID_LOCAL_PATH) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../TEST.cmake") + +SET(TEST_CMCONF_BA_PACKAGE_LOCAL_USE ON) +SET(TEST_CMCONF_BA_PACKAGE_LOCAL_PATH "/nonexistent/invalid/path/that/does/not/exist") + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../mock/CMCONF.cmake") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../../helpers/BA_PACKAGE_PREREQ.cmake") + +UNSET(ENV{BA_PACKAGE_LOCAL_PATH}) + +BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision) + diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_local_use_off/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_local_use_off/CMakeLists.txt new file mode 100644 index 0000000..00e95c2 --- /dev/null +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_local_use_off/CMakeLists.txt @@ -0,0 +1,28 @@ +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_LOCAL_USE_OFF) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../TEST.cmake") + +SET(TEST_CMCONF_BA_PACKAGE_LOCAL_USE OFF) +SET(TEST_CMCONF_BA_PACKAGE_HTTP_AUTHORIZATION_HEADER "Bearer test-token") +SET(TEST_CMCONF_BA_PACKAGE_URI_REVISION "v1.0.0") +SET(TEST_CMCONF_BA_PACKAGE_URI_TEMPLATE_REMOTE "https://example.com/packages/") +SET(TEST_CMCONF_BA_PACKAGE_ "") + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../mock/CMCONF.cmake") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../../helpers/BA_PACKAGE_PREREQ.cmake") + +UNSET(ENV{BA_PACKAGE_LOCAL_PATH}) + +BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision) + +SET(expected_template "https://example.com/packages/") +TEST_VAR_EQUALS_LITERAL(result_template "${expected_template}") + +SET(expected_revision "v1.0.0") +TEST_VAR_EQUALS_LITERAL(result_revision "${expected_revision}") + diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_local_use_on/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_local_use_on/CMakeLists.txt new file mode 100644 index 0000000..30c05f9 --- /dev/null +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_local_use_on/CMakeLists.txt @@ -0,0 +1,25 @@ +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_LOCAL_USE_ON) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../TEST.cmake") + +SET(TEST_CMCONF_BA_PACKAGE_LOCAL_USE ON) +SET(TEST_CMCONF_BA_PACKAGE_LOCAL_PATH "/tmp") + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../mock/CMCONF.cmake") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../../helpers/BA_PACKAGE_PREREQ.cmake") + +UNSET(ENV{BA_PACKAGE_LOCAL_PATH}) + +BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision) + +SET(expected_template "file:///tmp/package///") +TEST_VAR_EQUALS_LITERAL(result_template "${expected_template}") + +SET(expected_revision "") +TEST_VAR_EQUALS_LITERAL(result_revision "${expected_revision}") + diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_revision_with_local_warning/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_revision_with_local_warning/CMakeLists.txt new file mode 100644 index 0000000..ec9207e --- /dev/null +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_revision_with_local_warning/CMakeLists.txt @@ -0,0 +1,25 @@ +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_REVISION_WITH_LOCAL_WARNING) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../TEST.cmake") + +SET(TEST_CMCONF_BA_PACKAGE_LOCAL_USE ON) +SET(TEST_CMCONF_BA_PACKAGE_LOCAL_PATH "/tmp") + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../mock/CMCONF.cmake") + +SET(BA_PACKAGE_URI_REVISION "v1.0.0") + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../../helpers/BA_PACKAGE_PREREQ.cmake") + +UNSET(ENV{BA_PACKAGE_LOCAL_PATH}) + +BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision) + +SET(expected_template "file:///tmp/package///") +TEST_VAR_EQUALS_LITERAL(result_template "${expected_template}") + diff --git a/cmake_tests/CMakeLists.txt b/cmake_tests/CMakeLists.txt new file mode 100644 index 0000000..19ae0cb --- /dev/null +++ b/cmake_tests/CMakeLists.txt @@ -0,0 +1,11 @@ +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(BA_PACKAGE_TESTS) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/TEST.cmake") + +TEST_RUN("BA_PACKAGE_PREREQ_CMCONF_INIT") + diff --git a/cmake_tests/TEST.cmake b/cmake_tests/TEST.cmake new file mode 100644 index 0000000..b4990d2 --- /dev/null +++ b/cmake_tests/TEST.cmake @@ -0,0 +1,8 @@ +FIND_PACKAGE(CMLIB REQUIRED) + +IF(NOT EXISTS "${CMLIB_DIR}") + MESSAGE(FATAL_ERROR "Cannot find CMLIB_DIR '${CMLIB_DIR}'") +ENDIF() + +INCLUDE("${CMLIB_DIR}/test/TEST.cmake") + diff --git a/cmake_tests/mock/CMCONF.cmake b/cmake_tests/mock/CMCONF.cmake new file mode 100644 index 0000000..b911ad6 --- /dev/null +++ b/cmake_tests/mock/CMCONF.cmake @@ -0,0 +1,15 @@ +## +# +# Mock CMCONF module for testing BA_PACKAGE_PREREQ_CMCONF_INIT +# +# This mock provides CMCONF_GET function that returns pre-configured test values. +# Test values are set via TEST_CMCONF_ variables before including this mock. +# + +FUNCTION(CMCONF_GET var_name) + IF(NOT DEFINED TEST_CMCONF_${var_name}) + MESSAGE(FATAL_ERROR "Mock CMCONF_GET: TEST_CMCONF_${var_name} is not defined") + ENDIF() + SET(${var_name} "${TEST_CMCONF_${var_name}}" PARENT_SCOPE) +ENDFUNCTION() + From c698106479d860429fa443e18b502262757c655b Mon Sep 17 00:00:00 2001 From: Jan Kubalek Date: Sat, 24 Jan 2026 22:34:54 +0100 Subject: [PATCH 03/28] cmake-tests init --- cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt | 5 +---- .../test_revision_with_local_warning/CMakeLists.txt | 6 +++--- cmake_tests/mock/CMCONF.cmake | 2 +- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt index dfd315c..95ca2a1 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt @@ -20,8 +20,5 @@ TEST_INVALID_CMAKE_RUN("${CMAKE_CURRENT_LIST_DIR}/test_invalid_local_path" "Local repository path variable is not" ) -TEST_RUN_AND_CHECK_OUTPUT("test_revision_with_local_warning" - WARNING_MESSAGE "Revision is defined but local repository is used" - ALWAYS_SCRIPT_MODE ON -) +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/test_revision_with_local_warning") diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_revision_with_local_warning/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_revision_with_local_warning/CMakeLists.txt index ec9207e..38b31b0 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_revision_with_local_warning/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_revision_with_local_warning/CMakeLists.txt @@ -11,9 +11,6 @@ SET(TEST_CMCONF_BA_PACKAGE_LOCAL_USE ON) SET(TEST_CMCONF_BA_PACKAGE_LOCAL_PATH "/tmp") INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../mock/CMCONF.cmake") - -SET(BA_PACKAGE_URI_REVISION "v1.0.0") - INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../../helpers/BA_PACKAGE_PREREQ.cmake") UNSET(ENV{BA_PACKAGE_LOCAL_PATH}) @@ -23,3 +20,6 @@ BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision) SET(expected_template "file:///tmp/package///") TEST_VAR_EQUALS_LITERAL(result_template "${expected_template}") +SET(expected_revision "") +TEST_VAR_EQUALS_LITERAL(result_revision "${expected_revision}") + diff --git a/cmake_tests/mock/CMCONF.cmake b/cmake_tests/mock/CMCONF.cmake index b911ad6..2ad9aa3 100644 --- a/cmake_tests/mock/CMCONF.cmake +++ b/cmake_tests/mock/CMCONF.cmake @@ -3,7 +3,7 @@ # Mock CMCONF module for testing BA_PACKAGE_PREREQ_CMCONF_INIT # # This mock provides CMCONF_GET function that returns pre-configured test values. -# Test values are set via TEST_CMCONF_ variables before including this mock. +# Test values are set via TEST_CMCONF_ before using CMCONF_GET # FUNCTION(CMCONF_GET var_name) From afb7e65242d8704638cdd0d6c0c8426a0cc18bc3 Mon Sep 17 00:00:00 2001 From: Jan Kubalek Date: Sat, 24 Jan 2026 22:41:11 +0100 Subject: [PATCH 04/28] Add Mock tests. --- cmake_tests/mock/test/CMakeLists.txt | 15 ++++++++++ .../get_fails_on_undefined/CMakeLists.txt | 9 ++++++ .../test/get_returns_value/CMakeLists.txt | 29 +++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 cmake_tests/mock/test/CMakeLists.txt create mode 100644 cmake_tests/mock/test/get_fails_on_undefined/CMakeLists.txt create mode 100644 cmake_tests/mock/test/get_returns_value/CMakeLists.txt diff --git a/cmake_tests/mock/test/CMakeLists.txt b/cmake_tests/mock/test/CMakeLists.txt new file mode 100644 index 0000000..1011229 --- /dev/null +++ b/cmake_tests/mock/test/CMakeLists.txt @@ -0,0 +1,15 @@ +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(MOCK_CMCONF_TEST) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../TEST.cmake") + +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/get_returns_value") + +TEST_INVALID_CMAKE_RUN("${CMAKE_CURRENT_LIST_DIR}/get_fails_on_undefined" + "Mock CMCONF_GET: TEST_CMCONF_UNDEFINED_VAR is not defined" +) + diff --git a/cmake_tests/mock/test/get_fails_on_undefined/CMakeLists.txt b/cmake_tests/mock/test/get_fails_on_undefined/CMakeLists.txt new file mode 100644 index 0000000..88e68bf --- /dev/null +++ b/cmake_tests/mock/test/get_fails_on_undefined/CMakeLists.txt @@ -0,0 +1,9 @@ +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_CMCONF_GET_FAILS_ON_UNDEFINED) +ENDIF() + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../CMCONF.cmake") + +CMCONF_GET(UNDEFINED_VAR) + diff --git a/cmake_tests/mock/test/get_returns_value/CMakeLists.txt b/cmake_tests/mock/test/get_returns_value/CMakeLists.txt new file mode 100644 index 0000000..3afc649 --- /dev/null +++ b/cmake_tests/mock/test/get_returns_value/CMakeLists.txt @@ -0,0 +1,29 @@ +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_CMCONF_GET_RETURNS_VALUE) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../../TEST.cmake") + +SET(TEST_CMCONF_MY_STRING_VAR "expected_string_value") +SET(TEST_CMCONF_MY_BOOL_VAR ON) +SET(TEST_CMCONF_MY_PATH_VAR "/some/test/path") +SET(TEST_CMCONF_MY_EMPTY_VAR "") + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../CMCONF.cmake") + +CMCONF_GET(MY_STRING_VAR) +TEST_VAR_EQUALS_LITERAL(MY_STRING_VAR "expected_string_value") + +CMCONF_GET(MY_BOOL_VAR) +TEST_VAR_TRUE(MY_BOOL_VAR) + +CMCONF_GET(MY_PATH_VAR) +TEST_VAR_EQUALS_LITERAL(MY_PATH_VAR "/some/test/path") + +CMCONF_GET(MY_EMPTY_VAR) +TEST_VAR_DEFINED(MY_EMPTY_VAR) +TEST_VAR_EQUALS_LITERAL(MY_EMPTY_VAR "") + From 33fa3a8d7fe19c2523e91ad1b74a13c8366ab5a6 Mon Sep 17 00:00:00 2001 From: Jan Kubalek Date: Sat, 24 Jan 2026 22:44:06 +0100 Subject: [PATCH 05/28] Rename test - remove test_ --- .../BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt | 12 ++++++------ .../CMakeLists.txt | 0 .../CMakeLists.txt | 0 .../CMakeLists.txt | 0 .../CMakeLists.txt | 0 .../CMakeLists.txt | 0 .../CMakeLists.txt | 0 7 files changed, 6 insertions(+), 6 deletions(-) rename cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/{test_env_var_precedence => env_var_precedence}/CMakeLists.txt (100%) rename cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/{test_env_var_with_local_use_warning => env_var_with_local_use_warning}/CMakeLists.txt (100%) rename cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/{test_invalid_local_path => invalid_local_path}/CMakeLists.txt (100%) rename cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/{test_local_use_off => local_use_off}/CMakeLists.txt (100%) rename cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/{test_local_use_on => local_use_on}/CMakeLists.txt (100%) rename cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/{test_revision_with_local_warning => revision_with_local_warning}/CMakeLists.txt (100%) diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt index 95ca2a1..a0fc740 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt @@ -7,18 +7,18 @@ FIND_PACKAGE(CMLIB REQUIRED) INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../TEST.cmake") -TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/test_local_use_on") -TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/test_local_use_off") -TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/test_env_var_precedence") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/local_use_on") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/local_use_off") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/env_var_precedence") -TEST_RUN_AND_CHECK_OUTPUT("test_env_var_with_local_use_warning" +TEST_RUN_AND_CHECK_OUTPUT("env_var_with_local_use_warning" WARNING_MESSAGE "BA_PACKAGE_LOCAL_PATH ENV variable is defined" ALWAYS_SCRIPT_MODE ON ) -TEST_INVALID_CMAKE_RUN("${CMAKE_CURRENT_LIST_DIR}/test_invalid_local_path" +TEST_INVALID_CMAKE_RUN("${CMAKE_CURRENT_LIST_DIR}/invalid_local_path" "Local repository path variable is not" ) -TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/test_revision_with_local_warning") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/revision_with_local_warning") diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_env_var_precedence/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_precedence/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_env_var_precedence/CMakeLists.txt rename to cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_precedence/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_env_var_with_local_use_warning/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_with_local_use_warning/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_env_var_with_local_use_warning/CMakeLists.txt rename to cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_with_local_use_warning/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_invalid_local_path/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/invalid_local_path/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_invalid_local_path/CMakeLists.txt rename to cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/invalid_local_path/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_local_use_off/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_off/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_local_use_off/CMakeLists.txt rename to cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_off/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_local_use_on/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_on/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_local_use_on/CMakeLists.txt rename to cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_on/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_revision_with_local_warning/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/revision_with_local_warning/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/test_revision_with_local_warning/CMakeLists.txt rename to cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/revision_with_local_warning/CMakeLists.txt From c40dd1fdad2046c167f42c0b3691021116aac380 Mon Sep 17 00:00:00 2001 From: Jan Kubalek Date: Sat, 24 Jan 2026 22:54:15 +0100 Subject: [PATCH 06/28] tests are working --- .../CMakeLists.txt | 2 -- .../env_var_precedence/CMakeLists.txt | 3 ++- .../CMakeLists.txt | 2 ++ .../invalid_local_path/CMakeLists.txt | 2 ++ .../local_use_off/CMakeLists.txt | 3 ++- .../local_use_on/CMakeLists.txt | 2 ++ .../CMakeLists.txt | 25 ------------------- .../get_fails_on_undefined/CMakeLists.txt | 2 ++ .../test/get_returns_value/CMakeLists.txt | 2 ++ 9 files changed, 14 insertions(+), 29 deletions(-) delete mode 100644 cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/revision_with_local_warning/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt index a0fc740..e5e35a9 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt @@ -20,5 +20,3 @@ TEST_INVALID_CMAKE_RUN("${CMAKE_CURRENT_LIST_DIR}/invalid_local_path" "Local repository path variable is not" ) -TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/revision_with_local_warning") - diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_precedence/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_precedence/CMakeLists.txt index a65e99c..bfa7857 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_precedence/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_precedence/CMakeLists.txt @@ -1,3 +1,5 @@ +## ENV{BA_PACKAGE_LOCAL_PATH} takes precedence over BA_PACKAGE_LOCAL_USE=OFF +# IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) CMAKE_MINIMUM_REQUIRED(VERSION 3.21) PROJECT(TEST_ENV_VAR_PRECEDENCE) @@ -11,7 +13,6 @@ SET(TEST_CMCONF_BA_PACKAGE_LOCAL_USE OFF) SET(TEST_CMCONF_BA_PACKAGE_HTTP_AUTHORIZATION_HEADER "Bearer test-token") SET(TEST_CMCONF_BA_PACKAGE_URI_REVISION "v1.0.0") SET(TEST_CMCONF_BA_PACKAGE_URI_TEMPLATE_REMOTE "https://example.com/packages/") -SET(TEST_CMCONF_BA_PACKAGE_ "") INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../mock/CMCONF.cmake") INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../../helpers/BA_PACKAGE_PREREQ.cmake") diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_with_local_use_warning/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_with_local_use_warning/CMakeLists.txt index 94f534c..d4e3abe 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_with_local_use_warning/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_with_local_use_warning/CMakeLists.txt @@ -1,3 +1,5 @@ +## Warning emitted when both BA_PACKAGE_LOCAL_USE=ON and ENV{BA_PACKAGE_LOCAL_PATH} are set +# IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) CMAKE_MINIMUM_REQUIRED(VERSION 3.21) PROJECT(TEST_ENV_VAR_WITH_LOCAL_USE_WARNING) diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/invalid_local_path/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/invalid_local_path/CMakeLists.txt index db52ffb..945b9a3 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/invalid_local_path/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/invalid_local_path/CMakeLists.txt @@ -1,3 +1,5 @@ +## FATAL_ERROR when BA_PACKAGE_LOCAL_PATH points to non-existent directory +# IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) CMAKE_MINIMUM_REQUIRED(VERSION 3.21) PROJECT(TEST_INVALID_LOCAL_PATH) diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_off/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_off/CMakeLists.txt index 00e95c2..fbfd5f5 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_off/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_off/CMakeLists.txt @@ -1,3 +1,5 @@ +## BA_PACKAGE_LOCAL_USE=OFF returns remote template and configured revision +# IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) CMAKE_MINIMUM_REQUIRED(VERSION 3.21) PROJECT(TEST_LOCAL_USE_OFF) @@ -11,7 +13,6 @@ SET(TEST_CMCONF_BA_PACKAGE_LOCAL_USE OFF) SET(TEST_CMCONF_BA_PACKAGE_HTTP_AUTHORIZATION_HEADER "Bearer test-token") SET(TEST_CMCONF_BA_PACKAGE_URI_REVISION "v1.0.0") SET(TEST_CMCONF_BA_PACKAGE_URI_TEMPLATE_REMOTE "https://example.com/packages/") -SET(TEST_CMCONF_BA_PACKAGE_ "") INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../mock/CMCONF.cmake") INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../../helpers/BA_PACKAGE_PREREQ.cmake") diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_on/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_on/CMakeLists.txt index 30c05f9..52948bd 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_on/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_on/CMakeLists.txt @@ -1,3 +1,5 @@ +## BA_PACKAGE_LOCAL_USE=ON returns local file:// template and empty revision +# IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) CMAKE_MINIMUM_REQUIRED(VERSION 3.21) PROJECT(TEST_LOCAL_USE_ON) diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/revision_with_local_warning/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/revision_with_local_warning/CMakeLists.txt deleted file mode 100644 index 38b31b0..0000000 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/revision_with_local_warning/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) - CMAKE_MINIMUM_REQUIRED(VERSION 3.21) - PROJECT(TEST_REVISION_WITH_LOCAL_WARNING) -ENDIF() - -FIND_PACKAGE(CMLIB REQUIRED) - -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../TEST.cmake") - -SET(TEST_CMCONF_BA_PACKAGE_LOCAL_USE ON) -SET(TEST_CMCONF_BA_PACKAGE_LOCAL_PATH "/tmp") - -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../mock/CMCONF.cmake") -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../../helpers/BA_PACKAGE_PREREQ.cmake") - -UNSET(ENV{BA_PACKAGE_LOCAL_PATH}) - -BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision) - -SET(expected_template "file:///tmp/package///") -TEST_VAR_EQUALS_LITERAL(result_template "${expected_template}") - -SET(expected_revision "") -TEST_VAR_EQUALS_LITERAL(result_revision "${expected_revision}") - diff --git a/cmake_tests/mock/test/get_fails_on_undefined/CMakeLists.txt b/cmake_tests/mock/test/get_fails_on_undefined/CMakeLists.txt index 88e68bf..26b4c17 100644 --- a/cmake_tests/mock/test/get_fails_on_undefined/CMakeLists.txt +++ b/cmake_tests/mock/test/get_fails_on_undefined/CMakeLists.txt @@ -1,3 +1,5 @@ +## Mock CMCONF_GET fails with FATAL_ERROR when TEST_CMCONF_* variable is not defined +# IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) CMAKE_MINIMUM_REQUIRED(VERSION 3.21) PROJECT(TEST_CMCONF_GET_FAILS_ON_UNDEFINED) diff --git a/cmake_tests/mock/test/get_returns_value/CMakeLists.txt b/cmake_tests/mock/test/get_returns_value/CMakeLists.txt index 3afc649..3fe6817 100644 --- a/cmake_tests/mock/test/get_returns_value/CMakeLists.txt +++ b/cmake_tests/mock/test/get_returns_value/CMakeLists.txt @@ -1,3 +1,5 @@ +## Mock CMCONF_GET returns values configured via TEST_CMCONF_* variables +# IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) CMAKE_MINIMUM_REQUIRED(VERSION 3.21) PROJECT(TEST_CMCONF_GET_RETURNS_VALUE) From 1d30904e44399f5b4396a49b95efec58d824b2b2 Mon Sep 17 00:00:00 2001 From: Jan Kubalek Date: Sat, 24 Jan 2026 22:54:37 +0100 Subject: [PATCH 07/28] TYPO and Comment --- helpers/BA_PACKAGE_PREREQ.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpers/BA_PACKAGE_PREREQ.cmake b/helpers/BA_PACKAGE_PREREQ.cmake index ee101ee..c20efed 100644 --- a/helpers/BA_PACKAGE_PREREQ.cmake +++ b/helpers/BA_PACKAGE_PREREQ.cmake @@ -49,7 +49,6 @@ FUNCTION(BA_PACKAGE_PREREQ_CMCONF_INIT template_output_var revision_output_var) CMCONF_GET(BA_PACKAGE_HTTP_AUTHORIZATION_HEADER) CMCONF_GET(BA_PACKAGE_URI_REVISION) CMCONF_GET(BA_PACKAGE_URI_TEMPLATE_REMOTE) - CMCONF_GET(BA_PACKAGE_) ENDIF() SET(template) @@ -72,6 +71,7 @@ FUNCTION(BA_PACKAGE_PREREQ_CMCONF_INIT template_output_var revision_output_var) ENDIF() ENDIF() + # unreachable, but for clarity... IF(revision AND (BA_PACKAGE_LOCAL_USE OR DEFINED ENV{BA_PACKAGE_LOCAL_PATH})) MESSAGE(WARNING "Revision is defined but local repository is used.") ENDIF() From 674bedc09a16faaa825b7218618b91b51bce5cc1 Mon Sep 17 00:00:00 2001 From: Jan Kubalek Date: Sat, 24 Jan 2026 23:00:26 +0100 Subject: [PATCH 08/28] fix tests --- .../env_var_precedence/CMakeLists.txt | 2 +- .../BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_off/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_precedence/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_precedence/CMakeLists.txt index bfa7857..1bd1cfd 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_precedence/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_precedence/CMakeLists.txt @@ -10,7 +10,7 @@ FIND_PACKAGE(CMLIB REQUIRED) INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../TEST.cmake") SET(TEST_CMCONF_BA_PACKAGE_LOCAL_USE OFF) -SET(TEST_CMCONF_BA_PACKAGE_HTTP_AUTHORIZATION_HEADER "Bearer test-token") +SET(TEST_CMCONF_BA_PACKAGE_HTTP_AUTHORIZATION_HEADER "") SET(TEST_CMCONF_BA_PACKAGE_URI_REVISION "v1.0.0") SET(TEST_CMCONF_BA_PACKAGE_URI_TEMPLATE_REMOTE "https://example.com/packages/") diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_off/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_off/CMakeLists.txt index fbfd5f5..f47cad2 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_off/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_off/CMakeLists.txt @@ -10,7 +10,7 @@ FIND_PACKAGE(CMLIB REQUIRED) INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../TEST.cmake") SET(TEST_CMCONF_BA_PACKAGE_LOCAL_USE OFF) -SET(TEST_CMCONF_BA_PACKAGE_HTTP_AUTHORIZATION_HEADER "Bearer test-token") +SET(TEST_CMCONF_BA_PACKAGE_HTTP_AUTHORIZATION_HEADER "") SET(TEST_CMCONF_BA_PACKAGE_URI_REVISION "v1.0.0") SET(TEST_CMCONF_BA_PACKAGE_URI_TEMPLATE_REMOTE "https://example.com/packages/") From 457d67a3d6fdefc94ae2dbdddb675210523e8cf4 Mon Sep 17 00:00:00 2001 From: Jan Kubalek Date: Sat, 24 Jan 2026 23:22:59 +0100 Subject: [PATCH 09/28] add git path --- helpers/BA_PACKAGE_PREREQ.cmake | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/helpers/BA_PACKAGE_PREREQ.cmake b/helpers/BA_PACKAGE_PREREQ.cmake index c20efed..cad9eb9 100644 --- a/helpers/BA_PACKAGE_PREREQ.cmake +++ b/helpers/BA_PACKAGE_PREREQ.cmake @@ -37,7 +37,7 @@ ENDFUNCTION() # // variable name to receive the revision (parent scope) # ) # -FUNCTION(BA_PACKAGE_PREREQ_CMCONF_INIT template_output_var revision_output_var) +FUNCTION(BA_PACKAGE_PREREQ_CMCONF_INIT template_output_var revision_output_var git_archive_path_template_output_var) # # Let's get variables to ensure they are defined # By a Global Config for their appropriate use... @@ -48,6 +48,7 @@ FUNCTION(BA_PACKAGE_PREREQ_CMCONF_INIT template_output_var revision_output_var) ELSE() CMCONF_GET(BA_PACKAGE_HTTP_AUTHORIZATION_HEADER) CMCONF_GET(BA_PACKAGE_URI_REVISION) + CMCONF_GET(BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE) CMCONF_GET(BA_PACKAGE_URI_TEMPLATE_REMOTE) ENDIF() @@ -60,7 +61,6 @@ FUNCTION(BA_PACKAGE_PREREQ_CMCONF_INIT template_output_var revision_output_var) ENDIF() BA_PACKAGE_PREREQ_LOCAL_PATH_CHECK("$ENV{BA_PACKAGE_LOCAL_PATH}") SET(template "file://$ENV{BA_PACKAGE_LOCAL_PATH}/package///") - SET(revision "") ELSE() IF(BA_PACKAGE_LOCAL_USE) BA_PACKAGE_PREREQ_LOCAL_PATH_CHECK("${BA_PACKAGE_LOCAL_PATH}") @@ -68,6 +68,7 @@ FUNCTION(BA_PACKAGE_PREREQ_CMCONF_INIT template_output_var revision_output_var) ELSE() SET(template "${BA_PACKAGE_URI_TEMPLATE_REMOTE}") SET(revision "${BA_PACKAGE_URI_REVISION}") + SET(git_archive_path "${BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE}") ENDIF() ENDIF() @@ -75,7 +76,12 @@ FUNCTION(BA_PACKAGE_PREREQ_CMCONF_INIT template_output_var revision_output_var) IF(revision AND (BA_PACKAGE_LOCAL_USE OR DEFINED ENV{BA_PACKAGE_LOCAL_PATH})) MESSAGE(WARNING "Revision is defined but local repository is used.") ENDIF() + + IF(BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE AND BA_PACKAGE_HTTP_AUTHORIZATION_HEADER) + MESSAGE(WARNING "BA_PACKAGE_HTTP_AUTHORIZATION_HEADER is defined together with BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE. ARCHIVE_PATH_TEMPLATE implies the URI type is GIT but HTTP_HEADERS are used only for raw HTTP Downloads!") + ENDIF() SET(${template_output_var} "${template}" PARENT_SCOPE) SET(${revision_output_var} "${revision}" PARENT_SCOPE) + SET(${git_archive_path_template_output_var} "${git_archive_path}" PARENT_SCOPE) ENDFUNCTION() \ No newline at end of file From 157c94f445c746de530b9b8ff2618a9cb1b7b115 Mon Sep 17 00:00:00 2001 From: Jan Kubalek Date: Sat, 24 Jan 2026 23:28:04 +0100 Subject: [PATCH 10/28] Storage updated --- STORAGE.cmake | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/STORAGE.cmake b/STORAGE.cmake index 8d60c3e..47f997c 100644 --- a/STORAGE.cmake +++ b/STORAGE.cmake @@ -8,7 +8,7 @@ SET(BA_PACKAGE_CMCONF_USE TRUE "Switch on for CMCONF use; off for testing purposes. Do not alter this setting unless you know what you are doing." ) IF(BA_PACKAGE_CMCONF_USE) - BA_PACKAGE_PREREQ_CMCONF_INIT(template revision) + BA_PACKAGE_PREREQ_CMCONF_INIT(template revision git_archive_path_template) ENDIF() IF(BA_PACKAGE_HTTP_AUTHORIZATION_HEADER) @@ -28,5 +28,6 @@ INCLUDE("${CMAKE_CURRENT_LIST_DIR}/BA_PACKAGE_VARS.cmake") INCLUDE("${CMAKE_CURRENT_LIST_DIR}/BA_PACKAGE.cmake") INCLUDE("${CMAKE_CURRENT_LIST_DIR}/BA_PACKAGE_DEPS.cmake") -BA_PACKAGE_VARS_SET(REVISION "${revision}") -BA_PACKAGE_VARS_SET(URI_TEMPLATE "${template}") +BA_PACKAGE_VARS_SET(REVISION "${revision}") +BA_PACKAGE_VARS_SET(URI_TEMPLATE "${template}") +BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "${git_archive_path_template}") From 3497aca3e747ff99a027567ab833316a27c17c5a Mon Sep 17 00:00:00 2001 From: Jan Kubalek Date: Tue, 27 Jan 2026 17:06:52 +0100 Subject: [PATCH 11/28] Update --- .../CMakeLists.txt | 9 +++++- .../env_var_precedence/CMakeLists.txt | 11 ++++---- .../CMakeLists.txt | 10 +++---- .../git_archive_path_returned/CMakeLists.txt | 28 +++++++++++++++++++ .../CMakeLists.txt | 28 +++++++++++++++++++ .../invalid_local_path/CMakeLists.txt | 2 +- .../local_use_off/CMakeLists.txt | 11 ++++---- .../local_use_on/CMakeLists.txt | 10 +++---- 8 files changed, 83 insertions(+), 26 deletions(-) create mode 100644 cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_path_returned/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_with_http_header_warning/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt index e5e35a9..0674d66 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt @@ -12,10 +12,17 @@ TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/local_use_off") TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/env_var_precedence") TEST_RUN_AND_CHECK_OUTPUT("env_var_with_local_use_warning" - WARNING_MESSAGE "BA_PACKAGE_LOCAL_PATH ENV variable is defined" + WARNING_MESSAGE "BA_PACKAGE_LOCAL_PATH ENV variable is defined and BA_PACKAGE_LOCAL_USE is.*ON.*Using BA_PACKAGE_LOCAL_PATH ENV variable to set as Repository path" ALWAYS_SCRIPT_MODE ON ) +TEST_RUN_AND_CHECK_OUTPUT("git_archive_with_http_header_warning" + WARNING_MESSAGE "BA_PACKAGE_HTTP_AUTHORIZATION_HEADER is defined together with.*BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE.*ARCHIVE_PATH_TEMPLATE implies the.*URI type is GIT but HTTP_HEADERS are used only for raw HTTP Downloads" + ALWAYS_SCRIPT_MODE ON +) + +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/git_archive_path_returned") + TEST_INVALID_CMAKE_RUN("${CMAKE_CURRENT_LIST_DIR}/invalid_local_path" "Local repository path variable is not" ) diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_precedence/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_precedence/CMakeLists.txt index 1bd1cfd..2712170 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_precedence/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_precedence/CMakeLists.txt @@ -13,19 +13,18 @@ SET(TEST_CMCONF_BA_PACKAGE_LOCAL_USE OFF) SET(TEST_CMCONF_BA_PACKAGE_HTTP_AUTHORIZATION_HEADER "") SET(TEST_CMCONF_BA_PACKAGE_URI_REVISION "v1.0.0") SET(TEST_CMCONF_BA_PACKAGE_URI_TEMPLATE_REMOTE "https://example.com/packages/") +SET(TEST_CMCONF_BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE "") INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../mock/CMCONF.cmake") INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../../helpers/BA_PACKAGE_PREREQ.cmake") SET(ENV{BA_PACKAGE_LOCAL_PATH} "/tmp") -BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision) +BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision result_git_archive_path) UNSET(ENV{BA_PACKAGE_LOCAL_PATH}) -SET(expected_template "file:///tmp/package///") -TEST_VAR_EQUALS_LITERAL(result_template "${expected_template}") - -SET(expected_revision "") -TEST_VAR_EQUALS_LITERAL(result_revision "${expected_revision}") +TEST_VAR_EQUALS_LITERAL(result_template "file:///tmp/package///") +TEST_VAR_EQUALS_LITERAL(result_revision "") +TEST_VAR_EQUALS_LITERAL(result_git_archive_path "") diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_with_local_use_warning/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_with_local_use_warning/CMakeLists.txt index d4e3abe..dbc4be5 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_with_local_use_warning/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_with_local_use_warning/CMakeLists.txt @@ -17,13 +17,11 @@ INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../../helpers/BA_PACKAGE_PREREQ.cmake") SET(ENV{BA_PACKAGE_LOCAL_PATH} "/tmp") -BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision) +BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision result_git_archive_path) UNSET(ENV{BA_PACKAGE_LOCAL_PATH}) -SET(expected_template "file:///tmp/package///") -TEST_VAR_EQUALS_LITERAL(result_template "${expected_template}") - -SET(expected_revision "") -TEST_VAR_EQUALS_LITERAL(result_revision "${expected_revision}") +TEST_VAR_EQUALS_LITERAL(result_template "file:///tmp/package///") +TEST_VAR_EQUALS_LITERAL(result_revision "") +TEST_VAR_EQUALS_LITERAL(result_git_archive_path "") diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_path_returned/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_path_returned/CMakeLists.txt new file mode 100644 index 0000000..7cb8f7a --- /dev/null +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_path_returned/CMakeLists.txt @@ -0,0 +1,28 @@ +## BA_PACKAGE_LOCAL_USE=OFF returns configured BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_GIT_ARCHIVE_PATH_RETURNED) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../TEST.cmake") + +SET(TEST_CMCONF_BA_PACKAGE_LOCAL_USE OFF) +SET(TEST_CMCONF_BA_PACKAGE_HTTP_AUTHORIZATION_HEADER "") +SET(TEST_CMCONF_BA_PACKAGE_URI_REVISION "v1.0.0") +SET(TEST_CMCONF_BA_PACKAGE_URI_TEMPLATE_REMOTE "https://example.com/packages/") +SET(TEST_CMCONF_BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE "packages///") + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../mock/CMCONF.cmake") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../../helpers/BA_PACKAGE_PREREQ.cmake") + +UNSET(ENV{BA_PACKAGE_LOCAL_PATH}) + +BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision result_git_archive_path) + +TEST_VAR_EQUALS_LITERAL(result_template "https://example.com/packages/") +TEST_VAR_EQUALS_LITERAL(result_revision "v1.0.0") +TEST_VAR_EQUALS_LITERAL(result_git_archive_path "packages///") + diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_with_http_header_warning/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_with_http_header_warning/CMakeLists.txt new file mode 100644 index 0000000..72eaad6 --- /dev/null +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_with_http_header_warning/CMakeLists.txt @@ -0,0 +1,28 @@ +## Warning when both BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE and BA_PACKAGE_HTTP_AUTHORIZATION_HEADER are set +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_GIT_ARCHIVE_WITH_HTTP_HEADER_WARNING) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../TEST.cmake") + +SET(TEST_CMCONF_BA_PACKAGE_LOCAL_USE OFF) +SET(TEST_CMCONF_BA_PACKAGE_HTTP_AUTHORIZATION_HEADER "Bearer token") +SET(TEST_CMCONF_BA_PACKAGE_URI_REVISION "v1.0.0") +SET(TEST_CMCONF_BA_PACKAGE_URI_TEMPLATE_REMOTE "https://example.com/packages/") +SET(TEST_CMCONF_BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE "packages///") + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../mock/CMCONF.cmake") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../../helpers/BA_PACKAGE_PREREQ.cmake") + +UNSET(ENV{BA_PACKAGE_LOCAL_PATH}) + +BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision result_git_archive_path) + +TEST_VAR_EQUALS_LITERAL(result_template "https://example.com/packages/") +TEST_VAR_EQUALS_LITERAL(result_revision "v1.0.0") +TEST_VAR_EQUALS_LITERAL(result_git_archive_path "packages///") + diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/invalid_local_path/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/invalid_local_path/CMakeLists.txt index 945b9a3..951e03d 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/invalid_local_path/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/invalid_local_path/CMakeLists.txt @@ -17,5 +17,5 @@ INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../../helpers/BA_PACKAGE_PREREQ.cmake") UNSET(ENV{BA_PACKAGE_LOCAL_PATH}) -BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision) +BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision result_git_archive_path) diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_off/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_off/CMakeLists.txt index f47cad2..c0d1f79 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_off/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_off/CMakeLists.txt @@ -13,17 +13,16 @@ SET(TEST_CMCONF_BA_PACKAGE_LOCAL_USE OFF) SET(TEST_CMCONF_BA_PACKAGE_HTTP_AUTHORIZATION_HEADER "") SET(TEST_CMCONF_BA_PACKAGE_URI_REVISION "v1.0.0") SET(TEST_CMCONF_BA_PACKAGE_URI_TEMPLATE_REMOTE "https://example.com/packages/") +SET(TEST_CMCONF_BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE "") INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../mock/CMCONF.cmake") INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../../helpers/BA_PACKAGE_PREREQ.cmake") UNSET(ENV{BA_PACKAGE_LOCAL_PATH}) -BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision) +BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision result_git_archive_path) -SET(expected_template "https://example.com/packages/") -TEST_VAR_EQUALS_LITERAL(result_template "${expected_template}") - -SET(expected_revision "v1.0.0") -TEST_VAR_EQUALS_LITERAL(result_revision "${expected_revision}") +TEST_VAR_EQUALS_LITERAL(result_template "https://example.com/packages/") +TEST_VAR_EQUALS_LITERAL(result_revision "v1.0.0") +TEST_VAR_EQUALS_LITERAL(result_git_archive_path "") diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_on/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_on/CMakeLists.txt index 52948bd..2261aa4 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_on/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_on/CMakeLists.txt @@ -17,11 +17,9 @@ INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../../helpers/BA_PACKAGE_PREREQ.cmake") UNSET(ENV{BA_PACKAGE_LOCAL_PATH}) -BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision) +BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision result_git_archive_path) -SET(expected_template "file:///tmp/package///") -TEST_VAR_EQUALS_LITERAL(result_template "${expected_template}") - -SET(expected_revision "") -TEST_VAR_EQUALS_LITERAL(result_revision "${expected_revision}") +TEST_VAR_EQUALS_LITERAL(result_template "file:///tmp/package///") +TEST_VAR_EQUALS_LITERAL(result_revision "") +TEST_VAR_EQUALS_LITERAL(result_git_archive_path "") From ed67444dfa6708cc3d3c20992275c4234efde810 Mon Sep 17 00:00:00 2001 From: Jan Kubalek Date: Tue, 27 Jan 2026 17:21:49 +0100 Subject: [PATCH 12/28] Update --- .../env_var_precedence/CMakeLists.txt | 7 ++++--- .../env_var_with_local_use_warning/CMakeLists.txt | 7 ++++--- .../git_archive_path_returned/CMakeLists.txt | 7 ++++--- .../git_archive_with_http_header_warning/CMakeLists.txt | 7 ++++--- .../invalid_local_path/CMakeLists.txt | 7 ++++--- .../local_use_off/CMakeLists.txt | 7 ++++--- .../local_use_on/CMakeLists.txt | 7 ++++--- cmake_tests/VARS.cmake | 9 +++++++++ .../mock/test/get_fails_on_undefined/CMakeLists.txt | 3 ++- cmake_tests/mock/test/get_returns_value/CMakeLists.txt | 5 +++-- 10 files changed, 42 insertions(+), 24 deletions(-) create mode 100644 cmake_tests/VARS.cmake diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_precedence/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_precedence/CMakeLists.txt index 2712170..5df98b9 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_precedence/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_precedence/CMakeLists.txt @@ -7,7 +7,8 @@ ENDIF() FIND_PACKAGE(CMLIB REQUIRED) -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../TEST.cmake") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../VARS.cmake") +INCLUDE("${CMAKE_TESTS_ROOT}/TEST.cmake") SET(TEST_CMCONF_BA_PACKAGE_LOCAL_USE OFF) SET(TEST_CMCONF_BA_PACKAGE_HTTP_AUTHORIZATION_HEADER "") @@ -15,8 +16,8 @@ SET(TEST_CMCONF_BA_PACKAGE_URI_REVISION "v1.0.0") SET(TEST_CMCONF_BA_PACKAGE_URI_TEMPLATE_REMOTE "https://example.com/packages/") SET(TEST_CMCONF_BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE "") -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../mock/CMCONF.cmake") -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../../helpers/BA_PACKAGE_PREREQ.cmake") +INCLUDE("${CMAKE_TESTS_ROOT}/mock/CMCONF.cmake") +INCLUDE("${PACKAGER_PROJECT_ROOT}/helpers/BA_PACKAGE_PREREQ.cmake") SET(ENV{BA_PACKAGE_LOCAL_PATH} "/tmp") diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_with_local_use_warning/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_with_local_use_warning/CMakeLists.txt index dbc4be5..1cb17a1 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_with_local_use_warning/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_with_local_use_warning/CMakeLists.txt @@ -7,13 +7,14 @@ ENDIF() FIND_PACKAGE(CMLIB REQUIRED) -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../TEST.cmake") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../VARS.cmake") +INCLUDE("${CMAKE_TESTS_ROOT}/TEST.cmake") SET(TEST_CMCONF_BA_PACKAGE_LOCAL_USE ON) SET(TEST_CMCONF_BA_PACKAGE_LOCAL_PATH "/tmp") -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../mock/CMCONF.cmake") -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../../helpers/BA_PACKAGE_PREREQ.cmake") +INCLUDE("${CMAKE_TESTS_ROOT}/mock/CMCONF.cmake") +INCLUDE("${PACKAGER_PROJECT_ROOT}/helpers/BA_PACKAGE_PREREQ.cmake") SET(ENV{BA_PACKAGE_LOCAL_PATH} "/tmp") diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_path_returned/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_path_returned/CMakeLists.txt index 7cb8f7a..0b87aa0 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_path_returned/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_path_returned/CMakeLists.txt @@ -7,7 +7,8 @@ ENDIF() FIND_PACKAGE(CMLIB REQUIRED) -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../TEST.cmake") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../VARS.cmake") +INCLUDE("${CMAKE_TESTS_ROOT}/TEST.cmake") SET(TEST_CMCONF_BA_PACKAGE_LOCAL_USE OFF) SET(TEST_CMCONF_BA_PACKAGE_HTTP_AUTHORIZATION_HEADER "") @@ -15,8 +16,8 @@ SET(TEST_CMCONF_BA_PACKAGE_URI_REVISION "v1.0.0") SET(TEST_CMCONF_BA_PACKAGE_URI_TEMPLATE_REMOTE "https://example.com/packages/") SET(TEST_CMCONF_BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE "packages///") -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../mock/CMCONF.cmake") -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../../helpers/BA_PACKAGE_PREREQ.cmake") +INCLUDE("${CMAKE_TESTS_ROOT}/mock/CMCONF.cmake") +INCLUDE("${PACKAGER_PROJECT_ROOT}/helpers/BA_PACKAGE_PREREQ.cmake") UNSET(ENV{BA_PACKAGE_LOCAL_PATH}) diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_with_http_header_warning/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_with_http_header_warning/CMakeLists.txt index 72eaad6..a2f0eab 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_with_http_header_warning/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_with_http_header_warning/CMakeLists.txt @@ -7,7 +7,8 @@ ENDIF() FIND_PACKAGE(CMLIB REQUIRED) -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../TEST.cmake") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../VARS.cmake") +INCLUDE("${CMAKE_TESTS_ROOT}/TEST.cmake") SET(TEST_CMCONF_BA_PACKAGE_LOCAL_USE OFF) SET(TEST_CMCONF_BA_PACKAGE_HTTP_AUTHORIZATION_HEADER "Bearer token") @@ -15,8 +16,8 @@ SET(TEST_CMCONF_BA_PACKAGE_URI_REVISION "v1.0.0") SET(TEST_CMCONF_BA_PACKAGE_URI_TEMPLATE_REMOTE "https://example.com/packages/") SET(TEST_CMCONF_BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE "packages///") -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../mock/CMCONF.cmake") -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../../helpers/BA_PACKAGE_PREREQ.cmake") +INCLUDE("${CMAKE_TESTS_ROOT}/mock/CMCONF.cmake") +INCLUDE("${PACKAGER_PROJECT_ROOT}/helpers/BA_PACKAGE_PREREQ.cmake") UNSET(ENV{BA_PACKAGE_LOCAL_PATH}) diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/invalid_local_path/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/invalid_local_path/CMakeLists.txt index 951e03d..b198a80 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/invalid_local_path/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/invalid_local_path/CMakeLists.txt @@ -7,13 +7,14 @@ ENDIF() FIND_PACKAGE(CMLIB REQUIRED) -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../TEST.cmake") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../VARS.cmake") +INCLUDE("${CMAKE_TESTS_ROOT}/TEST.cmake") SET(TEST_CMCONF_BA_PACKAGE_LOCAL_USE ON) SET(TEST_CMCONF_BA_PACKAGE_LOCAL_PATH "/nonexistent/invalid/path/that/does/not/exist") -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../mock/CMCONF.cmake") -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../../helpers/BA_PACKAGE_PREREQ.cmake") +INCLUDE("${CMAKE_TESTS_ROOT}/mock/CMCONF.cmake") +INCLUDE("${PACKAGER_PROJECT_ROOT}/helpers/BA_PACKAGE_PREREQ.cmake") UNSET(ENV{BA_PACKAGE_LOCAL_PATH}) diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_off/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_off/CMakeLists.txt index c0d1f79..2e76b83 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_off/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_off/CMakeLists.txt @@ -7,7 +7,8 @@ ENDIF() FIND_PACKAGE(CMLIB REQUIRED) -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../TEST.cmake") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../VARS.cmake") +INCLUDE("${CMAKE_TESTS_ROOT}/TEST.cmake") SET(TEST_CMCONF_BA_PACKAGE_LOCAL_USE OFF) SET(TEST_CMCONF_BA_PACKAGE_HTTP_AUTHORIZATION_HEADER "") @@ -15,8 +16,8 @@ SET(TEST_CMCONF_BA_PACKAGE_URI_REVISION "v1.0.0") SET(TEST_CMCONF_BA_PACKAGE_URI_TEMPLATE_REMOTE "https://example.com/packages/") SET(TEST_CMCONF_BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE "") -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../mock/CMCONF.cmake") -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../../helpers/BA_PACKAGE_PREREQ.cmake") +INCLUDE("${CMAKE_TESTS_ROOT}/mock/CMCONF.cmake") +INCLUDE("${PACKAGER_PROJECT_ROOT}/helpers/BA_PACKAGE_PREREQ.cmake") UNSET(ENV{BA_PACKAGE_LOCAL_PATH}) diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_on/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_on/CMakeLists.txt index 2261aa4..4bfa996 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_on/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_on/CMakeLists.txt @@ -7,13 +7,14 @@ ENDIF() FIND_PACKAGE(CMLIB REQUIRED) -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../TEST.cmake") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../VARS.cmake") +INCLUDE("${CMAKE_TESTS_ROOT}/TEST.cmake") SET(TEST_CMCONF_BA_PACKAGE_LOCAL_USE ON) SET(TEST_CMCONF_BA_PACKAGE_LOCAL_PATH "/tmp") -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../mock/CMCONF.cmake") -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../../helpers/BA_PACKAGE_PREREQ.cmake") +INCLUDE("${CMAKE_TESTS_ROOT}/mock/CMCONF.cmake") +INCLUDE("${PACKAGER_PROJECT_ROOT}/helpers/BA_PACKAGE_PREREQ.cmake") UNSET(ENV{BA_PACKAGE_LOCAL_PATH}) diff --git a/cmake_tests/VARS.cmake b/cmake_tests/VARS.cmake new file mode 100644 index 0000000..9aca1d3 --- /dev/null +++ b/cmake_tests/VARS.cmake @@ -0,0 +1,9 @@ +# +# Root of the CMake tests directory +# +SET(CMAKE_TESTS_ROOT "${CMAKE_CURRENT_LIST_DIR}") + +# +# Root of the Package Tracker project +# +GET_FILENAME_COMPONENT(PACKAGER_PROJECT_ROOT "${CMAKE_CURRENT_LIST_DIR}/.." ABSOLUTE) \ No newline at end of file diff --git a/cmake_tests/mock/test/get_fails_on_undefined/CMakeLists.txt b/cmake_tests/mock/test/get_fails_on_undefined/CMakeLists.txt index 26b4c17..0d502d6 100644 --- a/cmake_tests/mock/test/get_fails_on_undefined/CMakeLists.txt +++ b/cmake_tests/mock/test/get_fails_on_undefined/CMakeLists.txt @@ -5,7 +5,8 @@ IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) PROJECT(TEST_CMCONF_GET_FAILS_ON_UNDEFINED) ENDIF() -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../CMCONF.cmake") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../../VARS.cmake") +INCLUDE("${CMAKE_TESTS_ROOT}/mock/CMCONF.cmake") CMCONF_GET(UNDEFINED_VAR) diff --git a/cmake_tests/mock/test/get_returns_value/CMakeLists.txt b/cmake_tests/mock/test/get_returns_value/CMakeLists.txt index 3fe6817..f3df062 100644 --- a/cmake_tests/mock/test/get_returns_value/CMakeLists.txt +++ b/cmake_tests/mock/test/get_returns_value/CMakeLists.txt @@ -7,14 +7,15 @@ ENDIF() FIND_PACKAGE(CMLIB REQUIRED) -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../../TEST.cmake") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../../VARS.cmake") +INCLUDE("${CMAKE_TESTS_ROOT}/TEST.cmake") SET(TEST_CMCONF_MY_STRING_VAR "expected_string_value") SET(TEST_CMCONF_MY_BOOL_VAR ON) SET(TEST_CMCONF_MY_PATH_VAR "/some/test/path") SET(TEST_CMCONF_MY_EMPTY_VAR "") -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../CMCONF.cmake") +INCLUDE("${CMAKE_TESTS_ROOT}/mock/CMCONF.cmake") CMCONF_GET(MY_STRING_VAR) TEST_VAR_EQUALS_LITERAL(MY_STRING_VAR "expected_string_value") From a7efd3a9911d5fa29127fd73dc44ee3aec20b26b Mon Sep 17 00:00:00 2001 From: Jan Kubalek Date: Tue, 27 Jan 2026 17:31:35 +0100 Subject: [PATCH 13/28] Fix --- cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt index 0674d66..82e3f6c 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt @@ -24,6 +24,6 @@ TEST_RUN_AND_CHECK_OUTPUT("git_archive_with_http_header_warning" TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/git_archive_path_returned") TEST_INVALID_CMAKE_RUN("${CMAKE_CURRENT_LIST_DIR}/invalid_local_path" - "Local repository path variable is not" + "Local repository path variable is not a directory" ) From b69063475257c49e42187ccae29cf62dc9093f8b Mon Sep 17 00:00:00 2001 From: Jan Kubalek Date: Tue, 27 Jan 2026 17:33:22 +0100 Subject: [PATCH 14/28] Update --- cmake_tests/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake_tests/CMakeLists.txt b/cmake_tests/CMakeLists.txt index 19ae0cb..998f5e3 100644 --- a/cmake_tests/CMakeLists.txt +++ b/cmake_tests/CMakeLists.txt @@ -8,4 +8,5 @@ FIND_PACKAGE(CMLIB REQUIRED) INCLUDE("${CMAKE_CURRENT_LIST_DIR}/TEST.cmake") TEST_RUN("BA_PACKAGE_PREREQ_CMCONF_INIT") +TEST_RUN("mock/test") From 720e7e74552e54fa5df82de243494dbc976d860c Mon Sep 17 00:00:00 2001 From: Jan Kubalek Date: Tue, 27 Jan 2026 23:10:45 +0100 Subject: [PATCH 15/28] Add BA_PACKAGE_LIBRARY tests --- BA_PACKAGE.cmake | 9 +-- cmake_tests/BA_PACKAGE_LIBRARY/CMakeLists.txt | 31 ++++++++ .../cache_only_not_found_error/CMakeLists.txt | 24 ++++++ .../CMakeLists.txt | 27 +++++++ .../cmake_prefix_path_updated/CMakeLists.txt | 29 +++++++ .../debug_suffix/CMakeLists.txt | 35 +++++++++ .../git_path_template_args/CMakeLists.txt | 33 ++++++++ .../BA_PACKAGE_LIBRARY/include_general.cmake | 23 ++++++ .../invalid_package_name_error/CMakeLists.txt | 22 ++++++ .../no_debug_skips_suffix/CMakeLists.txt | 45 +++++++++++ .../CMakeLists.txt | 32 ++++++++ .../output_path_var_propagates/CMakeLists.txt | 25 ++++++ .../package_name_dash_warning/CMakeLists.txt | 24 ++++++ .../release_basic/CMakeLists.txt | 38 +++++++++ cmake_tests/CMakeLists.txt | 1 + cmake_tests/mock/CMDEF_VARS.cmake | 30 ++++++++ cmake_tests/mock/CMLIB_CACHE.cmake | 62 +++++++++++++++ cmake_tests/mock/CMLIB_DEPENDENCY.cmake | 77 +++++++++++++++++++ cmake_tests/mock/CMLIB_STORAGE.cmake | 52 +++++++++++++ cmake_tests/mock/CMUTIL.cmake | 53 +++++++++++++ 20 files changed, 667 insertions(+), 5 deletions(-) create mode 100644 cmake_tests/BA_PACKAGE_LIBRARY/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE_LIBRARY/cache_only_not_found_error/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE_LIBRARY/cache_only_skips_dependency/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE_LIBRARY/cmake_prefix_path_updated/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE_LIBRARY/debug_suffix/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE_LIBRARY/git_path_template_args/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE_LIBRARY/include_general.cmake create mode 100644 cmake_tests/BA_PACKAGE_LIBRARY/invalid_package_name_error/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE_LIBRARY/no_debug_skips_suffix/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE_LIBRARY/no_git_args_without_template/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE_LIBRARY/output_path_var_propagates/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE_LIBRARY/package_name_dash_warning/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE_LIBRARY/release_basic/CMakeLists.txt create mode 100644 cmake_tests/mock/CMDEF_VARS.cmake create mode 100644 cmake_tests/mock/CMLIB_CACHE.cmake create mode 100644 cmake_tests/mock/CMLIB_DEPENDENCY.cmake create mode 100644 cmake_tests/mock/CMLIB_STORAGE.cmake create mode 100644 cmake_tests/mock/CMUTIL.cmake diff --git a/BA_PACKAGE.cmake b/BA_PACKAGE.cmake index de2aedb..39fed5d 100644 --- a/BA_PACKAGE.cmake +++ b/BA_PACKAGE.cmake @@ -165,17 +165,16 @@ FUNCTION(_BRINGAUTO_PACKAGE package_name version_tag prefix suffix output_var) ARCHIVE_NAME "${package_string}" PACKAGE_GROUP_NAME "${package_name}" ) - SET(git_revision_arg "GIT_REVISION ${revision_var}") - SET(git_archive_path_arg "GIT_PATH ${git_archive_path}") + SET(git_revision_arg GIT_REVISION "${revision_var}") + SET(git_archive_path_arg GIT_PATH "${git_archive_path}") ENDIF() STRING(TOUPPER "${package_name}" package_name_upper_orig) - STRING(REGEX REPLACE "[^A-Z0-9]" "" package_name_upper "${package_name_upper_orig}") - STRING(REGEX REPLACE "[\\-]" "" package_name_upper_wodash "${package_name_upper_orig}") + STRING(REGEX REPLACE "[^A-Z0-9]" "" package_name_upper "${package_name_upper_orig}") IF(NOT package_name_upper) MESSAGE(FATAL_ERROR "Invalid package name: ${package_name}") ENDIF() - IF(NOT (package_name_upper STREQUAL package_name_upper_wodash)) + IF(NOT (package_name_upper STREQUAL package_name_upper_orig)) MESSAGE(WARNING "Package name ${package_name} contains invalid characters. It was normalized to form a proper CMLIB cache keyword: ${package_name} --> ${package_name_upper}") ENDIF() diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/CMakeLists.txt b/cmake_tests/BA_PACKAGE_LIBRARY/CMakeLists.txt new file mode 100644 index 0000000..e3ed8bc --- /dev/null +++ b/cmake_tests/BA_PACKAGE_LIBRARY/CMakeLists.txt @@ -0,0 +1,31 @@ +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(BA_PACKAGE_LIBRARY_TEST) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../TEST.cmake") + +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/release_basic") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/debug_suffix") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/no_debug_skips_suffix") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/git_path_template_args") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/no_git_args_without_template") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/cache_only_skips_dependency") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/output_path_var_propagates") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/cmake_prefix_path_updated") + +TEST_RUN_AND_CHECK_OUTPUT("package_name_dash_warning" + WARNING_MESSAGE "Package name.*contains invalid characters.*normalized" + ALWAYS_SCRIPT_MODE ON +) + +TEST_INVALID_CMAKE_RUN("${CMAKE_CURRENT_LIST_DIR}/invalid_package_name_error" + "Invalid package name" +) + +TEST_INVALID_CMAKE_RUN("${CMAKE_CURRENT_LIST_DIR}/cache_only_not_found_error" + "Package not found" +) + diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/cache_only_not_found_error/CMakeLists.txt b/cmake_tests/BA_PACKAGE_LIBRARY/cache_only_not_found_error/CMakeLists.txt new file mode 100644 index 0000000..003824a --- /dev/null +++ b/cmake_tests/BA_PACKAGE_LIBRARY/cache_only_not_found_error/CMakeLists.txt @@ -0,0 +1,24 @@ +## +# Test: CACHE_ONLY=ON with missing package emits FATAL_ERROR +# +# Verifies that BA_PACKAGE_LIBRARY with CACHE_ONLY=ON emits FATAL_ERROR +# when the package is not found in the cache (CMLIB_CACHE_GET returns empty). +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_CACHE_ONLY_NOT_FOUND_ERROR) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +SET(MOCK_CMLIB_CACHE_GET_RETURN_PATH "" CACHE INTERNAL "") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../include_general.cmake") +INCLUDE("${CMAKE_TESTS_ROOT}/mock/CMLIB_CACHE.cmake") + +SET(CMAKE_BUILD_TYPE "Release") +BA_PACKAGE_VARS_SET(REVISION "main") +BA_PACKAGE_VARS_SET(URI_TEMPLATE "https://example.com////") +BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "") + +BA_PACKAGE_LIBRARY(mypkg v1.0.0 CACHE_ONLY ON) + diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/cache_only_skips_dependency/CMakeLists.txt b/cmake_tests/BA_PACKAGE_LIBRARY/cache_only_skips_dependency/CMakeLists.txt new file mode 100644 index 0000000..b6ab57f --- /dev/null +++ b/cmake_tests/BA_PACKAGE_LIBRARY/cache_only_skips_dependency/CMakeLists.txt @@ -0,0 +1,27 @@ +## +# Test: CACHE_ONLY=ON uses CMLIB_CACHE_GET instead of CMLIB_DEPENDENCY +# +# Verifies that BA_PACKAGE_LIBRARY with CACHE_ONLY=ON calls CMLIB_CACHE_GET +# to retrieve cached package and does not call CMLIB_DEPENDENCY. +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_CACHE_ONLY_SKIPS_DEPENDENCY) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +SET(MOCK_CMLIB_CACHE_GET_RETURN_PATH "/mock/cached/path" CACHE INTERNAL "") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../include_general.cmake") +INCLUDE("${CMAKE_TESTS_ROOT}/mock/CMLIB_CACHE.cmake") + +SET(CMAKE_BUILD_TYPE "Release") +BA_PACKAGE_VARS_SET(REVISION "main") +BA_PACKAGE_VARS_SET(URI_TEMPLATE "https://example.com////") +BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "") + +BA_PACKAGE_LIBRARY(mypkg v1.0.0 CACHE_ONLY ON) + +TEST_VAR_TRUE(MOCK_CMLIB_CACHE_GET_CALLED) +TEST_VAR_FALSE(MOCK_CMLIB_DEPENDENCY_CALLED) + diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/cmake_prefix_path_updated/CMakeLists.txt b/cmake_tests/BA_PACKAGE_LIBRARY/cmake_prefix_path_updated/CMakeLists.txt new file mode 100644 index 0000000..292cc49 --- /dev/null +++ b/cmake_tests/BA_PACKAGE_LIBRARY/cmake_prefix_path_updated/CMakeLists.txt @@ -0,0 +1,29 @@ +## +# Test: CMAKE_PREFIX_PATH is updated with the cached package path +# +# Verifies that BA_PACKAGE_LIBRARY appends the package path to CMAKE_PREFIX_PATH +# so that find_package() can locate the installed package. +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_CMAKE_PREFIX_PATH_UPDATED) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../include_general.cmake") + +SET(CMAKE_BUILD_TYPE "Release") +BA_PACKAGE_VARS_SET(REVISION "main") +BA_PACKAGE_VARS_SET(URI_TEMPLATE "https://example.com////") +BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "") + +SET(CMAKE_PREFIX_PATH "") + +BA_PACKAGE_LIBRARY(mypkg v1.0.0) + +LIST(FIND CMAKE_PREFIX_PATH "/mock/cache/path" idx_found) +IF(idx_found EQUAL -1) + MESSAGE(FATAL_ERROR "CMAKE_PREFIX_PATH should contain /mock/cache/path: ${CMAKE_PREFIX_PATH}") +ENDIF() + diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/debug_suffix/CMakeLists.txt b/cmake_tests/BA_PACKAGE_LIBRARY/debug_suffix/CMakeLists.txt new file mode 100644 index 0000000..052832e --- /dev/null +++ b/cmake_tests/BA_PACKAGE_LIBRARY/debug_suffix/CMakeLists.txt @@ -0,0 +1,35 @@ +## +# Test: Debug build adds 'd' suffix to package name and DEBUG keyword +# +# Verifies that BA_PACKAGE_LIBRARY in Debug mode adds DEBUG keyword and +# appends 'd' suffix to the package name in the URI (e.g., libmypkgd-dev). +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_DEBUG_SUFFIX) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +SET(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT "https://example.com/main/mock_distro/0.0.0/mock_arch/mypkg/libmypkgd-dev_v1.0.0_mock_arch_mock_distro_0.0.0.zip" CACHE INTERNAL "") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../include_general.cmake") + +SET(CMAKE_BUILD_TYPE "Debug") +BA_PACKAGE_VARS_SET(REVISION "main") +BA_PACKAGE_VARS_SET(URI_TEMPLATE "https://example.com////") +BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "") + +BA_PACKAGE_LIBRARY(mypkg v1.0.0) + +TEST_VAR_TRUE(MOCK_CMLIB_DEPENDENCY_CALLED) + +LIST(FIND MOCK_CMLIB_DEPENDENCY_KEYWORDS "DEBUG" idx_debug) +IF(idx_debug EQUAL -1) + MESSAGE(FATAL_ERROR "KEYWORDS missing DEBUG: ${MOCK_CMLIB_DEPENDENCY_KEYWORDS}") +ENDIF() + +STRING(FIND "${MOCK_CMLIB_DEPENDENCY_URI}" "libmypkgd-dev" found_debug_suffix) +IF(found_debug_suffix EQUAL -1) + MESSAGE(FATAL_ERROR "URI does not contain 'd-dev' suffix: ${MOCK_CMLIB_DEPENDENCY_URI}") +ENDIF() + diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/git_path_template_args/CMakeLists.txt b/cmake_tests/BA_PACKAGE_LIBRARY/git_path_template_args/CMakeLists.txt new file mode 100644 index 0000000..22dd233 --- /dev/null +++ b/cmake_tests/BA_PACKAGE_LIBRARY/git_path_template_args/CMakeLists.txt @@ -0,0 +1,33 @@ +## +# Test: GIT_PATH_TEMPLATE defined passes GIT_REVISION and GIT_PATH to CMLIB_DEPENDENCY +# +# Verifies that when GIT_PATH_TEMPLATE is set, BA_PACKAGE_LIBRARY passes +# GIT_REVISION and GIT_PATH arguments to CMLIB_DEPENDENCY for git-based downloads. +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_GIT_PATH_TEMPLATE_ARGS) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +SET(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT "package/mock_distro/0.0.0/mock_arch/mypkg/libmypkg-dev_v1.0.0.zip" CACHE INTERNAL "") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../include_general.cmake") + +SET(CMAKE_BUILD_TYPE "Release") +BA_PACKAGE_VARS_SET(REVISION "main") +BA_PACKAGE_VARS_SET(URI_TEMPLATE "git@github.com:org/repo.git") +BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "package///") + +BA_PACKAGE_LIBRARY(mypkg v1.0.0) + +TEST_VAR_TRUE(MOCK_CMLIB_DEPENDENCY_CALLED) + +IF(NOT MOCK_CMLIB_DEPENDENCY_GIT_REVISION) + MESSAGE(FATAL_ERROR "GIT_REVISION should be set when GIT_PATH_TEMPLATE is defined") +ENDIF() + +IF(NOT MOCK_CMLIB_DEPENDENCY_GIT_PATH) + MESSAGE(FATAL_ERROR "GIT_PATH should be set when GIT_PATH_TEMPLATE is defined") +ENDIF() + diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/include_general.cmake b/cmake_tests/BA_PACKAGE_LIBRARY/include_general.cmake new file mode 100644 index 0000000..384bcdd --- /dev/null +++ b/cmake_tests/BA_PACKAGE_LIBRARY/include_general.cmake @@ -0,0 +1,23 @@ +## +# Common includes for BA_PACKAGE_LIBRARY tests +# +# Provides standard test setup including VARS, TEST framework, BA_PACKAGE modules, +# and all standard mocks (CMDEF_VARS, CMUTIL, CMLIB_STORAGE, CMLIB_DEPENDENCY). +# +# Does NOT include CMLIB_CACHE mock - tests requiring CACHE_ONLY must include it separately. +# +# Note: If test needs custom MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT, +# set it BEFORE including this file. +# + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../VARS.cmake") +INCLUDE("${CMAKE_TESTS_ROOT}/TEST.cmake") + +INCLUDE("${PACKAGER_PROJECT_ROOT}/BA_PACKAGE_VARS.cmake") +INCLUDE("${PACKAGER_PROJECT_ROOT}/BA_PACKAGE.cmake") + +INCLUDE("${CMAKE_TESTS_ROOT}/mock/CMDEF_VARS.cmake") +INCLUDE("${CMAKE_TESTS_ROOT}/mock/CMUTIL.cmake") +INCLUDE("${CMAKE_TESTS_ROOT}/mock/CMLIB_STORAGE.cmake") +INCLUDE("${CMAKE_TESTS_ROOT}/mock/CMLIB_DEPENDENCY.cmake") + diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/invalid_package_name_error/CMakeLists.txt b/cmake_tests/BA_PACKAGE_LIBRARY/invalid_package_name_error/CMakeLists.txt new file mode 100644 index 0000000..3cba9e4 --- /dev/null +++ b/cmake_tests/BA_PACKAGE_LIBRARY/invalid_package_name_error/CMakeLists.txt @@ -0,0 +1,22 @@ +## +# Test: Invalid package name (all special characters) emits FATAL_ERROR +# +# Verifies that BA_PACKAGE_LIBRARY emits FATAL_ERROR when the package name +# normalizes to an empty string (e.g., "---" becomes ""). +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_INVALID_PACKAGE_NAME_ERROR) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../include_general.cmake") + +SET(CMAKE_BUILD_TYPE "Release") +BA_PACKAGE_VARS_SET(REVISION "main") +BA_PACKAGE_VARS_SET(URI_TEMPLATE "https://example.com////") +BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "") + +BA_PACKAGE_LIBRARY("---" v1.0.0) + diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/no_debug_skips_suffix/CMakeLists.txt b/cmake_tests/BA_PACKAGE_LIBRARY/no_debug_skips_suffix/CMakeLists.txt new file mode 100644 index 0000000..96e9893 --- /dev/null +++ b/cmake_tests/BA_PACKAGE_LIBRARY/no_debug_skips_suffix/CMakeLists.txt @@ -0,0 +1,45 @@ +## +# Test: NO_DEBUG=ON skips debug suffix and build type keywords +# +# Verifies that BA_PACKAGE_LIBRARY with NO_DEBUG=ON does not add DEBUG/RELEASE +# keywords and does not append 'd' suffix even in Debug build mode. +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_NO_DEBUG_SKIPS_SUFFIX) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +SET(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT "https://example.com/main/mock_distro/0.0.0/mock_arch/mypkg/libmypkg-dev_v1.0.0_mock_arch_mock_distro_0.0.0.zip" CACHE INTERNAL "") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../include_general.cmake") + +SET(CMAKE_BUILD_TYPE "Debug") +BA_PACKAGE_VARS_SET(REVISION "main") +BA_PACKAGE_VARS_SET(URI_TEMPLATE "https://example.com////") +BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "") + +BA_PACKAGE_LIBRARY(mypkg v1.0.0 NO_DEBUG ON) + +TEST_VAR_TRUE(MOCK_CMLIB_DEPENDENCY_CALLED) + +LIST(FIND MOCK_CMLIB_DEPENDENCY_KEYWORDS "DEBUG" idx_debug) +IF(NOT idx_debug EQUAL -1) + MESSAGE(FATAL_ERROR "KEYWORDS should NOT contain DEBUG when NO_DEBUG=ON: ${MOCK_CMLIB_DEPENDENCY_KEYWORDS}") +ENDIF() + +LIST(FIND MOCK_CMLIB_DEPENDENCY_KEYWORDS "RELEASE" idx_release) +IF(NOT idx_release EQUAL -1) + MESSAGE(FATAL_ERROR "KEYWORDS should NOT contain RELEASE when NO_DEBUG=ON: ${MOCK_CMLIB_DEPENDENCY_KEYWORDS}") +ENDIF() + +STRING(FIND "${MOCK_CMLIB_DEPENDENCY_URI}" "libmypkgd-dev" found_debug_suffix) +IF(NOT found_debug_suffix EQUAL -1) + MESSAGE(FATAL_ERROR "URI should NOT contain 'd-dev' suffix when NO_DEBUG=ON: ${MOCK_CMLIB_DEPENDENCY_URI}") +ENDIF() + +STRING(FIND "${MOCK_CMLIB_DEPENDENCY_URI}" "libmypkg-dev" found_release_suffix) +IF(found_release_suffix EQUAL -1) + MESSAGE(FATAL_ERROR "URI should contain '-dev' suffix (no 'd'): ${MOCK_CMLIB_DEPENDENCY_URI}") +ENDIF() + diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/no_git_args_without_template/CMakeLists.txt b/cmake_tests/BA_PACKAGE_LIBRARY/no_git_args_without_template/CMakeLists.txt new file mode 100644 index 0000000..f9546c4 --- /dev/null +++ b/cmake_tests/BA_PACKAGE_LIBRARY/no_git_args_without_template/CMakeLists.txt @@ -0,0 +1,32 @@ +## +# Test: Empty GIT_PATH_TEMPLATE does not pass GIT_REVISION/GIT_PATH +# +# Verifies that when GIT_PATH_TEMPLATE is empty, BA_PACKAGE_LIBRARY does not +# pass GIT_REVISION or GIT_PATH arguments to CMLIB_DEPENDENCY. +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_NO_GIT_ARGS_WITHOUT_TEMPLATE) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../include_general.cmake") + +SET(CMAKE_BUILD_TYPE "Release") +BA_PACKAGE_VARS_SET(REVISION "main") +BA_PACKAGE_VARS_SET(URI_TEMPLATE "https://example.com////") +BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "") + +BA_PACKAGE_LIBRARY(mypkg v1.0.0) + +TEST_VAR_TRUE(MOCK_CMLIB_DEPENDENCY_CALLED) + +IF(MOCK_CMLIB_DEPENDENCY_GIT_REVISION) + MESSAGE(FATAL_ERROR "GIT_REVISION should NOT be set when GIT_PATH_TEMPLATE is empty: ${MOCK_CMLIB_DEPENDENCY_GIT_REVISION}") +ENDIF() + +IF(MOCK_CMLIB_DEPENDENCY_GIT_PATH) + MESSAGE(FATAL_ERROR "GIT_PATH should NOT be set when GIT_PATH_TEMPLATE is empty: ${MOCK_CMLIB_DEPENDENCY_GIT_PATH}") +ENDIF() + diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/output_path_var_propagates/CMakeLists.txt b/cmake_tests/BA_PACKAGE_LIBRARY/output_path_var_propagates/CMakeLists.txt new file mode 100644 index 0000000..17aecbb --- /dev/null +++ b/cmake_tests/BA_PACKAGE_LIBRARY/output_path_var_propagates/CMakeLists.txt @@ -0,0 +1,25 @@ +## +# Test: OUTPUT_PATH_VAR returns the cached package path +# +# Verifies that BA_PACKAGE_LIBRARY with OUTPUT_PATH_VAR parameter sets the +# specified variable to the path returned by CMLIB_DEPENDENCY. +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_OUTPUT_PATH_VAR_PROPAGATES) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../include_general.cmake") + +SET(CMAKE_BUILD_TYPE "Release") +BA_PACKAGE_VARS_SET(REVISION "main") +BA_PACKAGE_VARS_SET(URI_TEMPLATE "https://example.com////") +BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "") + +BA_PACKAGE_LIBRARY(mypkg v1.0.0 OUTPUT_PATH_VAR my_output_path) + +TEST_VAR_DEFINED(my_output_path) +TEST_VAR_EQUALS_LITERAL(my_output_path "/mock/cache/path") + diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/package_name_dash_warning/CMakeLists.txt b/cmake_tests/BA_PACKAGE_LIBRARY/package_name_dash_warning/CMakeLists.txt new file mode 100644 index 0000000..c1e7e5f --- /dev/null +++ b/cmake_tests/BA_PACKAGE_LIBRARY/package_name_dash_warning/CMakeLists.txt @@ -0,0 +1,24 @@ +## +# Test: Package name with dashes emits normalization warning +# +# Verifies that BA_PACKAGE_LIBRARY emits a WARNING when the package name +# contains invalid characters (like dashes) that are normalized for CMLIB keywords. +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_PACKAGE_NAME_DASH_WARNING) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../include_general.cmake") + +SET(CMAKE_BUILD_TYPE "Release") +BA_PACKAGE_VARS_SET(REVISION "main") +BA_PACKAGE_VARS_SET(URI_TEMPLATE "https://example.com////") +BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "") + +BA_PACKAGE_LIBRARY(my-pkg v1.0.0) + +TEST_VAR_TRUE(MOCK_CMLIB_DEPENDENCY_CALLED) + diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/release_basic/CMakeLists.txt b/cmake_tests/BA_PACKAGE_LIBRARY/release_basic/CMakeLists.txt new file mode 100644 index 0000000..23de70f --- /dev/null +++ b/cmake_tests/BA_PACKAGE_LIBRARY/release_basic/CMakeLists.txt @@ -0,0 +1,38 @@ +## +# Test: Release build calls CMLIB_DEPENDENCY with correct KEYWORDS and TYPE +# +# Verifies that BA_PACKAGE_LIBRARY in Release mode passes BACPACK, package name, +# and RELEASE keywords to CMLIB_DEPENDENCY with TYPE=ARCHIVE. +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_RELEASE_BASIC) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../include_general.cmake") + +SET(CMAKE_BUILD_TYPE "Release") +BA_PACKAGE_VARS_SET(REVISION "main") +BA_PACKAGE_VARS_SET(URI_TEMPLATE "https://example.com////") +BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "") + +BA_PACKAGE_LIBRARY(mypkg v1.0.0) + +TEST_VAR_TRUE(MOCK_CMLIB_DEPENDENCY_CALLED) +TEST_VAR_EQUALS_LITERAL(MOCK_CMLIB_DEPENDENCY_TYPE "ARCHIVE") + +LIST(FIND MOCK_CMLIB_DEPENDENCY_KEYWORDS "BACPACK" idx_bacpack) +LIST(FIND MOCK_CMLIB_DEPENDENCY_KEYWORDS "MYPKG" idx_pkg) +LIST(FIND MOCK_CMLIB_DEPENDENCY_KEYWORDS "RELEASE" idx_release) +IF(idx_bacpack EQUAL -1) + MESSAGE(FATAL_ERROR "KEYWORDS missing BACPACK: ${MOCK_CMLIB_DEPENDENCY_KEYWORDS}") +ENDIF() +IF(idx_pkg EQUAL -1) + MESSAGE(FATAL_ERROR "KEYWORDS missing MYPKG: ${MOCK_CMLIB_DEPENDENCY_KEYWORDS}") +ENDIF() +IF(idx_release EQUAL -1) + MESSAGE(FATAL_ERROR "KEYWORDS missing RELEASE: ${MOCK_CMLIB_DEPENDENCY_KEYWORDS}") +ENDIF() + diff --git a/cmake_tests/CMakeLists.txt b/cmake_tests/CMakeLists.txt index 998f5e3..a2e4558 100644 --- a/cmake_tests/CMakeLists.txt +++ b/cmake_tests/CMakeLists.txt @@ -8,5 +8,6 @@ FIND_PACKAGE(CMLIB REQUIRED) INCLUDE("${CMAKE_CURRENT_LIST_DIR}/TEST.cmake") TEST_RUN("BA_PACKAGE_PREREQ_CMCONF_INIT") +TEST_RUN("BA_PACKAGE_LIBRARY") TEST_RUN("mock/test") diff --git a/cmake_tests/mock/CMDEF_VARS.cmake b/cmake_tests/mock/CMDEF_VARS.cmake new file mode 100644 index 0000000..26bf09d --- /dev/null +++ b/cmake_tests/mock/CMDEF_VARS.cmake @@ -0,0 +1,30 @@ +## +# +# Mock CMDEF variables for testing BA_PACKAGE_LIBRARY +# +# This file provides deterministic CMDEF_* variables that would normally be +# detected from the system by CMDEF. Using fictional values ensures tests +# produce consistent results and do not accidentally match real system values. +# +# Variables provided: +# CMDEF_ARCHITECTURE - CPU architecture +# CMDEF_DISTRO_ID - Linux distribution ID +# CMDEF_DISTRO_VERSION_ID - Distribution version +# +# Usage: +# Include this file AFTER BA_PACKAGE.cmake to override the real CMDEF values. +# + +SET(CMDEF_ARCHITECTURE "mock_arch" + CACHE INTERNAL + "Mock CPU architecture for testing" +) +SET(CMDEF_DISTRO_ID "mock_distro" + CACHE INTERNAL + "Mock Linux distribution ID for testing" +) +SET(CMDEF_DISTRO_VERSION_ID "0.0.0" + CACHE INTERNAL + "Mock distribution version for testing" +) + diff --git a/cmake_tests/mock/CMLIB_CACHE.cmake b/cmake_tests/mock/CMLIB_CACHE.cmake new file mode 100644 index 0000000..f47f106 --- /dev/null +++ b/cmake_tests/mock/CMLIB_CACHE.cmake @@ -0,0 +1,62 @@ +## +# +# Mock CMLIB_CACHE module for testing BA_PACKAGE_LIBRARY CACHE_ONLY mode +# +# This mock captures arguments passed to CMLIB_CACHE_GET and returns a +# configurable path. Used to test BA_PACKAGE_LIBRARY's CACHE_ONLY behavior +# without accessing the real CMLIB cache. +# +# Captured variables (CACHE INTERNAL): +# MOCK_CMLIB_CACHE_GET_CALLED - TRUE if function was called +# MOCK_CMLIB_CACHE_GET_KEYWORDS - List of KEYWORDS passed +# +# Configuration: +# MOCK_CMLIB_CACHE_GET_RETURN_PATH - Set before including this file to control +# the return value. Empty string simulates +# cache miss (package not found). +# +# Usage: +# SET(MOCK_CMLIB_CACHE_GET_RETURN_PATH "/mock/cached/path" CACHE INTERNAL "") +# INCLUDE("mock/CMLIB_CACHE.cmake") +# BA_PACKAGE_LIBRARY(pkg v1.0.0 CACHE_ONLY ON) +# # Verify MOCK_CMLIB_CACHE_GET_CALLED is TRUE +# + +SET(MOCK_CMLIB_CACHE_GET_CALLED FALSE + CACHE INTERNAL + "TRUE if CMLIB_CACHE_GET was called" +) +SET(MOCK_CMLIB_CACHE_GET_KEYWORDS "" + CACHE INTERNAL + "Captured KEYWORDS argument list" +) +IF(NOT DEFINED MOCK_CMLIB_CACHE_GET_RETURN_PATH) + SET(MOCK_CMLIB_CACHE_GET_RETURN_PATH "" + CACHE INTERNAL + "Path to return from mock; empty simulates cache miss" + ) +ENDIF() + +## +# Mock implementation of CMLIB_CACHE_GET +# +# Captures KEYWORDS and returns MOCK_CMLIB_CACHE_GET_RETURN_PATH via CACHE_PATH_VAR. +# +FUNCTION(CMLIB_CACHE_GET) + SET_PROPERTY(CACHE MOCK_CMLIB_CACHE_GET_CALLED PROPERTY VALUE TRUE) + CMLIB_PARSE_ARGUMENTS( + MULTI_VALUE + KEYWORDS + ONE_VALUE + CACHE_PATH_VAR + OPTIONS + TRY_REGENERATE + P_ARGN + ${ARGN} + ) + SET_PROPERTY(CACHE MOCK_CMLIB_CACHE_GET_KEYWORDS PROPERTY VALUE "${__KEYWORDS}") + IF(__CACHE_PATH_VAR) + SET(${__CACHE_PATH_VAR} "${MOCK_CMLIB_CACHE_GET_RETURN_PATH}" PARENT_SCOPE) + ENDIF() +ENDFUNCTION() + diff --git a/cmake_tests/mock/CMLIB_DEPENDENCY.cmake b/cmake_tests/mock/CMLIB_DEPENDENCY.cmake new file mode 100644 index 0000000..09694ed --- /dev/null +++ b/cmake_tests/mock/CMLIB_DEPENDENCY.cmake @@ -0,0 +1,77 @@ +## +# +# Mock CMLIB_DEPENDENCY module for testing BA_PACKAGE_LIBRARY +# +# This mock captures all arguments passed to CMLIB_DEPENDENCY without performing +# actual dependency resolution. It allows tests to verify that BA_PACKAGE_LIBRARY +# calls CMLIB_DEPENDENCY with correct arguments. +# +# Captured variables (CACHE INTERNAL): +# MOCK_CMLIB_DEPENDENCY_CALLED - TRUE if function was called +# MOCK_CMLIB_DEPENDENCY_KEYWORDS - List of KEYWORDS passed +# MOCK_CMLIB_DEPENDENCY_TYPE - TYPE argument value +# MOCK_CMLIB_DEPENDENCY_URI - URI argument value +# MOCK_CMLIB_DEPENDENCY_GIT_REVISION - GIT_REVISION argument value +# MOCK_CMLIB_DEPENDENCY_GIT_PATH - GIT_PATH argument value +# +# The mock returns "/mock/cache/path" via OUTPUT_PATH_VAR if specified. +# +# Usage: +# Include this file AFTER BA_PACKAGE.cmake to override the real CMLIB_DEPENDENCY. +# Call BA_PACKAGE_LIBRARY, then verify MOCK_CMLIB_DEPENDENCY_* variables. +# + +SET(MOCK_CMLIB_DEPENDENCY_CALLED FALSE + CACHE INTERNAL + "TRUE if CMLIB_DEPENDENCY was called" +) +SET(MOCK_CMLIB_DEPENDENCY_KEYWORDS "" + CACHE INTERNAL + "Captured KEYWORDS argument list" +) +SET(MOCK_CMLIB_DEPENDENCY_TYPE "" + CACHE INTERNAL + "Captured TYPE argument value" +) +SET(MOCK_CMLIB_DEPENDENCY_URI "" + CACHE INTERNAL + "Captured URI argument value" +) +SET(MOCK_CMLIB_DEPENDENCY_GIT_REVISION "" + CACHE INTERNAL + "Captured GIT_REVISION argument value" +) +SET(MOCK_CMLIB_DEPENDENCY_GIT_PATH "" + CACHE INTERNAL + "Captured GIT_PATH argument value" +) + +## +# Mock implementation of CMLIB_DEPENDENCY +# +# Captures all arguments and returns a mock path via OUTPUT_PATH_VAR. +# +FUNCTION(CMLIB_DEPENDENCY) + SET_PROPERTY(CACHE MOCK_CMLIB_DEPENDENCY_CALLED PROPERTY VALUE TRUE) + CMLIB_PARSE_ARGUMENTS( + MULTI_VALUE + KEYWORDS + ONE_VALUE + TYPE + URI + GIT_REVISION + GIT_PATH + OUTPUT_PATH_VAR + P_ARGN + ${ARGN} + ) + SET_PROPERTY(CACHE MOCK_CMLIB_DEPENDENCY_KEYWORDS PROPERTY VALUE "${__KEYWORDS}") + SET_PROPERTY(CACHE MOCK_CMLIB_DEPENDENCY_TYPE PROPERTY VALUE "${__TYPE}") + SET_PROPERTY(CACHE MOCK_CMLIB_DEPENDENCY_URI PROPERTY VALUE "${__URI}") + SET_PROPERTY(CACHE MOCK_CMLIB_DEPENDENCY_GIT_REVISION PROPERTY VALUE "${__GIT_REVISION}") + SET_PROPERTY(CACHE MOCK_CMLIB_DEPENDENCY_GIT_PATH PROPERTY VALUE "${__GIT_PATH}") + IF(__OUTPUT_PATH_VAR) + SET(${__OUTPUT_PATH_VAR} "/mock/cache/path" PARENT_SCOPE) + ENDIF() +ENDFUNCTION() + diff --git a/cmake_tests/mock/CMLIB_STORAGE.cmake b/cmake_tests/mock/CMLIB_STORAGE.cmake new file mode 100644 index 0000000..657a769 --- /dev/null +++ b/cmake_tests/mock/CMLIB_STORAGE.cmake @@ -0,0 +1,52 @@ +## +# +# Mock CMLIB_STORAGE module for testing BA_PACKAGE_LIBRARY URI template expansion +# +# This mock replaces CMLIB_STORAGE_TEMPLATE_INSTANCE to return configurable URIs +# without performing actual template expansion. Allows tests to verify URI +# construction and control the expanded URI value. +# +# Captured variables (CACHE INTERNAL): +# MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_CALLED - TRUE if function was called +# MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_TEMPLATE_VAR - Name of template variable passed +# +# Configuration: +# MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT - Set before including this file +# to control the returned URI. +# Defaults to mock URL if not set. +# +# Usage: +# SET(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT "https://example.com/pkg.zip" CACHE INTERNAL "") +# INCLUDE("mock/CMLIB_STORAGE.cmake") +# + +SET(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_CALLED FALSE + CACHE INTERNAL + "TRUE if CMLIB_STORAGE_TEMPLATE_INSTANCE was called" +) +IF(NOT DEFINED MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT) + SET(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT "" + CACHE INTERNAL + "URI to return from mock; uses default if empty" + ) +ENDIF() +SET(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_TEMPLATE_VAR "" + CACHE INTERNAL + "Captured template variable name argument" +) + +## +# Mock implementation of CMLIB_STORAGE_TEMPLATE_INSTANCE +# +# Returns MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT or a default mock URL. +# +FUNCTION(CMLIB_STORAGE_TEMPLATE_INSTANCE output_var template_var_name) + SET_PROPERTY(CACHE MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_CALLED PROPERTY VALUE TRUE) + SET_PROPERTY(CACHE MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_TEMPLATE_VAR PROPERTY VALUE "${template_var_name}") + SET(result "https://mock.example.com/mock_expanded_uri") + IF(NOT "${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT}" STREQUAL "") + SET(result "${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT}") + ENDIF() + SET(${output_var} "${result}" PARENT_SCOPE) +ENDFUNCTION() + diff --git a/cmake_tests/mock/CMUTIL.cmake b/cmake_tests/mock/CMUTIL.cmake new file mode 100644 index 0000000..8cd096f --- /dev/null +++ b/cmake_tests/mock/CMUTIL.cmake @@ -0,0 +1,53 @@ +## +# +# Mock CMUTIL module for testing BA_PACKAGE_LIBRARY platform string construction +# +# This mock replaces CMUTIL_PLATFORM_STRING_CONSTRUCT to return a deterministic +# platform string without querying the actual system. Allows tests to run +# consistently across different platforms. +# +# Captured variables (CACHE INTERNAL): +# MOCK_CMUTIL_PLATFORM_STRING_CONSTRUCT_CALLED - TRUE if function was called +# +# Configuration: +# MOCK_CMUTIL_PLATFORM_STRING - Set before including this file to override +# the default platform string construction. +# If not set, constructs from input arguments. +# +# Usage: +# SET(MOCK_CMUTIL_PLATFORM_STRING "x86_64_ubuntu_22.04" CACHE INTERNAL "") +# INCLUDE("mock/CMUTIL.cmake") +# + +SET(MOCK_CMUTIL_PLATFORM_STRING_CONSTRUCT_CALLED FALSE + CACHE INTERNAL + "TRUE if CMUTIL_PLATFORM_STRING_CONSTRUCT was called" +) +SET(MOCK_CMUTIL_PLATFORM_STRING "" + CACHE INTERNAL + "Platform string to return; uses constructed value if empty" +) + +## +# Mock implementation of CMUTIL_PLATFORM_STRING_CONSTRUCT +# +# Returns MOCK_CMUTIL_PLATFORM_STRING or constructs from MACHINE_DISTRO_NAME_ID_DISTRO_VERSION_ID. +# +FUNCTION(CMUTIL_PLATFORM_STRING_CONSTRUCT) + SET_PROPERTY(CACHE MOCK_CMUTIL_PLATFORM_STRING_CONSTRUCT_CALLED PROPERTY VALUE TRUE) + CMLIB_PARSE_ARGUMENTS( + ONE_VALUE + MACHINE + DISTRO_NAME_ID + DISTRO_VERSION_ID + OUTPUT_VAR + P_ARGN + ${ARGN} + ) + SET(result "${__MACHINE}_${__DISTRO_NAME_ID}_${__DISTRO_VERSION_ID}") + IF(MOCK_CMUTIL_PLATFORM_STRING) + SET(result "${MOCK_CMUTIL_PLATFORM_STRING}") + ENDIF() + SET(${__OUTPUT_VAR} "${result}" PARENT_SCOPE) +ENDFUNCTION() + From 00e90ae1f06a9cbe97bbc8e2b9f4565a0cfc6b38 Mon Sep 17 00:00:00 2001 From: Jan Kubalek Date: Sun, 15 Feb 2026 14:47:35 +0100 Subject: [PATCH 16/28] Add cmake tests for BA_PACKAGE_EXECUTEBLE --- .../BA_PACKAGE_EXECUTABLE/CMakeLists.txt | 12 ++++++ .../debug_suffix/CMakeLists.txt | 41 +++++++++++++++++++ .../release_basic/CMakeLists.txt | 41 +++++++++++++++++++ cmake_tests/CMakeLists.txt | 1 + 4 files changed, 95 insertions(+) create mode 100644 cmake_tests/BA_PACKAGE_EXECUTABLE/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE_EXECUTABLE/debug_suffix/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE_EXECUTABLE/release_basic/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_EXECUTABLE/CMakeLists.txt b/cmake_tests/BA_PACKAGE_EXECUTABLE/CMakeLists.txt new file mode 100644 index 0000000..e86b63f --- /dev/null +++ b/cmake_tests/BA_PACKAGE_EXECUTABLE/CMakeLists.txt @@ -0,0 +1,12 @@ +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(BA_PACKAGE_EXECUTABLE_TEST) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../TEST.cmake") + +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/release_basic") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/debug_suffix") + diff --git a/cmake_tests/BA_PACKAGE_EXECUTABLE/debug_suffix/CMakeLists.txt b/cmake_tests/BA_PACKAGE_EXECUTABLE/debug_suffix/CMakeLists.txt new file mode 100644 index 0000000..777da2a --- /dev/null +++ b/cmake_tests/BA_PACKAGE_EXECUTABLE/debug_suffix/CMakeLists.txt @@ -0,0 +1,41 @@ +## +# Test: Debug build adds only 'd' suffix for executable package (no '-dev') +# +# Verifies that BA_PACKAGE_EXECUTABLE in Debug mode produces a URI with 'd' suffix +# but without "lib" prefix and without "-dev" (e.g., mypkgd_v1.0.0 not libmypkgd-dev_v1.0.0). +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_EXEC_DEBUG_SUFFIX) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +SET(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT "https://example.com/main/mock_distro/0.0.0/mock_arch/mypkg/mypkgd_v1.0.0_mock_arch_mock_distro_0.0.0.zip" CACHE INTERNAL "") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../BA_PACKAGE_LIBRARY/include_general.cmake") + +SET(CMAKE_BUILD_TYPE "Debug") +BA_PACKAGE_VARS_SET(REVISION "main") +BA_PACKAGE_VARS_SET(URI_TEMPLATE "https://example.com////") +BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "") + +# Make sure the mypkg does not contain any keywords tested below +BA_PACKAGE_EXECUTABLE(mypkg v1.0.0) + +TEST_VAR_TRUE(MOCK_CMLIB_DEPENDENCY_CALLED) + +STRING(FIND "${MOCK_CMLIB_DEPENDENCY_URI}" "mypkgd_v1.0.0" found_debug_suffix) +IF(found_debug_suffix EQUAL -1) + MESSAGE(FATAL_ERROR "URI does not contain 'mypkgd_v1.0.0': ${MOCK_CMLIB_DEPENDENCY_URI}") +ENDIF() + +STRING(FIND "${MOCK_CMLIB_DEPENDENCY_URI}" "lib" found_lib) +IF(NOT found_lib EQUAL -1) + MESSAGE(FATAL_ERROR "URI should not contain 'lib' prefix: ${MOCK_CMLIB_DEPENDENCY_URI}") +ENDIF() + +STRING(FIND "${MOCK_CMLIB_DEPENDENCY_URI}" "-dev" found_dev) +IF(NOT found_dev EQUAL -1) + MESSAGE(FATAL_ERROR "URI should not contain '-dev' suffix: ${MOCK_CMLIB_DEPENDENCY_URI}") +ENDIF() + diff --git a/cmake_tests/BA_PACKAGE_EXECUTABLE/release_basic/CMakeLists.txt b/cmake_tests/BA_PACKAGE_EXECUTABLE/release_basic/CMakeLists.txt new file mode 100644 index 0000000..8fea80e --- /dev/null +++ b/cmake_tests/BA_PACKAGE_EXECUTABLE/release_basic/CMakeLists.txt @@ -0,0 +1,41 @@ +## +# Test: Release build uses empty prefix and empty suffix for executable package +# +# Verifies that BA_PACKAGE_EXECUTABLE in Release mode produces a URI without +# "lib" prefix and without "-dev" suffix (e.g., mypkg_v1.0.0 not libmypkg-dev_v1.0.0). +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_EXEC_RELEASE_BASIC) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +SET(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT "https://example.com/main/mock_distro/0.0.0/mock_arch/mypkg/mypkg_v1.0.0_mock_arch_mock_distro_0.0.0.zip" CACHE INTERNAL "") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../BA_PACKAGE_LIBRARY/include_general.cmake") + +SET(CMAKE_BUILD_TYPE "Release") +BA_PACKAGE_VARS_SET(REVISION "main") +BA_PACKAGE_VARS_SET(URI_TEMPLATE "https://example.com////") +BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "") + +# Make sure the mypkg does not contain any keywords tested below +BA_PACKAGE_EXECUTABLE(mypkg v1.0.0) + +TEST_VAR_TRUE(MOCK_CMLIB_DEPENDENCY_CALLED) + +STRING(FIND "${MOCK_CMLIB_DEPENDENCY_URI}" "mypkg_v1.0.0" found_pkg) +IF(found_pkg EQUAL -1) + MESSAGE(FATAL_ERROR "URI does not contain 'mypkg_v1.0.0': ${MOCK_CMLIB_DEPENDENCY_URI}") +ENDIF() + +STRING(FIND "${MOCK_CMLIB_DEPENDENCY_URI}" "lib" found_lib) +IF(NOT found_lib EQUAL -1) + MESSAGE(FATAL_ERROR "URI should not contain 'lib' prefix: ${MOCK_CMLIB_DEPENDENCY_URI}") +ENDIF() + +STRING(FIND "${MOCK_CMLIB_DEPENDENCY_URI}" "-dev" found_dev) +IF(NOT found_dev EQUAL -1) + MESSAGE(FATAL_ERROR "URI should not contain '-dev' suffix: ${MOCK_CMLIB_DEPENDENCY_URI}") +ENDIF() + diff --git a/cmake_tests/CMakeLists.txt b/cmake_tests/CMakeLists.txt index a2e4558..a6b21e9 100644 --- a/cmake_tests/CMakeLists.txt +++ b/cmake_tests/CMakeLists.txt @@ -9,5 +9,6 @@ INCLUDE("${CMAKE_CURRENT_LIST_DIR}/TEST.cmake") TEST_RUN("BA_PACKAGE_PREREQ_CMCONF_INIT") TEST_RUN("BA_PACKAGE_LIBRARY") +TEST_RUN("BA_PACKAGE_EXECUTABLE") TEST_RUN("mock/test") From bd8d4a3117f7b9e4e7992838605fdd23db41383a Mon Sep 17 00:00:00 2001 From: Jan Kubalek Date: Sun, 15 Feb 2026 16:56:51 +0100 Subject: [PATCH 17/28] Make _BRINGAUTO_PACKAGE available as BA_PACKAGE --- BA_PACKAGE.cmake | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/BA_PACKAGE.cmake b/BA_PACKAGE.cmake index 39fed5d..2f340da 100644 --- a/BA_PACKAGE.cmake +++ b/BA_PACKAGE.cmake @@ -21,6 +21,11 @@ FIND_PACKAGE(CMLIB COMPONENTS CMUTIL CMDEF) # # OUTPUT_PATH_VAR - name of the variable where the absolute path of the package root will be stored. # +# Wrapper arounf BA_PACKAGE +# - adds package path to CMAKE_PREFIX_PATH +# - propagates output variables +# - manage prefixes and suffixes +# # ( # # @@ -45,7 +50,7 @@ FUNCTION(BA_PACKAGE_LIBRARY package_name version_tag) SET(suffix "d") ENDIF() - _BRINGAUTO_PACKAGE(${package_name} ${version_tag} "lib" "${suffix}-dev" output_var + BA_PACKAGE(${package_name} ${version_tag} "lib" "${suffix}-dev" output_var CACHE_ONLY ${__CACHE_ONLY} NO_DEBUG ${__NO_DEBUG} ) @@ -64,7 +69,20 @@ ENDFUNCTION() ## # -# Download, cache and populate Executable package +# Download, cache and populate Executable package. +# +# CACHE_ONLY - if specified no download is performed. The package +# must be cached by a previous call to BA_PACKAGE_EXECUTABLE() without CACHE_ONLY switch. +# +# NO_DEBUG - use release, not debug version of the package (can be used if release and debug +# variant are equal) +# +# OUTPUT_PATH_VAR - name of the variable where the absolute path of the package root will be stored. +# +# Wrapper arounf BA_PACKAGE +# - adds package path to CMAKE_PREFIX_PATH +# - propagates output variables +# - manage prefixes and suffixes # # ( # @@ -90,7 +108,7 @@ FUNCTION(BA_PACKAGE_EXECUTABLE package_name version_tag) SET(suffix "d") ENDIF() - _BRINGAUTO_PACKAGE(${package_name} ${version_tag} "" "${suffix}" output_var + BA_PACKAGE(${package_name} ${version_tag} "" "${suffix}" output_var CACHE_ONLY ${__CACHE_ONLY} NO_DEBUG ${__NO_DEBUG} ) @@ -107,7 +125,7 @@ ENDFUNCTION() -## Helper +## # # Download, cache and populate package represented by 'package_name' # and concretized by 'prefix' and 'suffix'. @@ -120,7 +138,7 @@ ENDFUNCTION() # [NO_DEBUG {ON|OFF}] # ) # -FUNCTION(_BRINGAUTO_PACKAGE package_name version_tag prefix suffix output_var) +FUNCTION(BA_PACKAGE package_name version_tag prefix suffix output_var) CMLIB_PARSE_ARGUMENTS( OPTIONS CACHE_ONLY From 46c329a7895ef1b7f0925cc5a14b633d5f964d11 Mon Sep 17 00:00:00 2001 From: Jan Kubalek Date: Sun, 15 Feb 2026 17:09:39 +0100 Subject: [PATCH 18/28] Add tests for BA_PACKAGE and normalize other PACKAGE tests --- cmake_tests/BA_PACKAGE/CMakeLists.txt | 30 ++++++++++++++++ .../cache_only_not_found_error/CMakeLists.txt | 8 ++--- .../CMakeLists.txt | 10 +++--- .../BA_PACKAGE/debug_keyword/CMakeLists.txt | 29 ++++++++++++++++ .../debug_suffix_applied/CMakeLists.txt | 29 ++++++++++++++++ .../git_path_template_args/CMakeLists.txt | 10 +++--- .../invalid_package_name_error/CMakeLists.txt | 8 ++--- .../no_debug_skips_keyword/CMakeLists.txt | 34 +++++++++++++++++++ .../CMakeLists.txt | 12 +++---- .../package_name_dash_warning/CMakeLists.txt | 8 ++--- .../release_basic/CMakeLists.txt | 12 +++---- .../BA_PACKAGE_EXECUTABLE/CMakeLists.txt | 2 ++ .../cmake_prefix_path_updated/CMakeLists.txt | 29 ++++++++++++++++ .../debug_suffix/CMakeLists.txt | 2 +- .../output_path_var_propagates/CMakeLists.txt | 25 ++++++++++++++ .../release_basic/CMakeLists.txt | 2 +- cmake_tests/BA_PACKAGE_LIBRARY/CMakeLists.txt | 17 ---------- .../cmake_prefix_path_updated/CMakeLists.txt | 2 +- .../debug_suffix/CMakeLists.txt | 7 +--- .../no_debug_skips_suffix/CMakeLists.txt | 12 +------ .../output_path_var_propagates/CMakeLists.txt | 2 +- cmake_tests/CMakeLists.txt | 1 + .../include_general.cmake | 4 +-- cmake_tests/mock/CMLIB_STORAGE.cmake | 16 +++++++++ 24 files changed, 237 insertions(+), 74 deletions(-) create mode 100644 cmake_tests/BA_PACKAGE/CMakeLists.txt rename cmake_tests/{BA_PACKAGE_LIBRARY => BA_PACKAGE}/cache_only_not_found_error/CMakeLists.txt (71%) rename cmake_tests/{BA_PACKAGE_LIBRARY => BA_PACKAGE}/cache_only_skips_dependency/CMakeLists.txt (68%) create mode 100644 cmake_tests/BA_PACKAGE/debug_keyword/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE/debug_suffix_applied/CMakeLists.txt rename cmake_tests/{BA_PACKAGE_LIBRARY => BA_PACKAGE}/git_path_template_args/CMakeLists.txt (75%) rename cmake_tests/{BA_PACKAGE_LIBRARY => BA_PACKAGE}/invalid_package_name_error/CMakeLists.txt (67%) create mode 100644 cmake_tests/BA_PACKAGE/no_debug_skips_keyword/CMakeLists.txt rename cmake_tests/{BA_PACKAGE_LIBRARY => BA_PACKAGE}/no_git_args_without_template/CMakeLists.txt (66%) rename cmake_tests/{BA_PACKAGE_LIBRARY => BA_PACKAGE}/package_name_dash_warning/CMakeLists.txt (70%) rename cmake_tests/{BA_PACKAGE_LIBRARY => BA_PACKAGE}/release_basic/CMakeLists.txt (73%) create mode 100644 cmake_tests/BA_PACKAGE_EXECUTABLE/cmake_prefix_path_updated/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE_EXECUTABLE/output_path_var_propagates/CMakeLists.txt rename cmake_tests/{BA_PACKAGE_LIBRARY => }/include_general.cmake (88%) diff --git a/cmake_tests/BA_PACKAGE/CMakeLists.txt b/cmake_tests/BA_PACKAGE/CMakeLists.txt new file mode 100644 index 0000000..b87941f --- /dev/null +++ b/cmake_tests/BA_PACKAGE/CMakeLists.txt @@ -0,0 +1,30 @@ +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(BA_PACKAGE_TEST) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../TEST.cmake") + +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/release_basic") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/debug_keyword") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/debug_suffix_applied") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/no_debug_skips_keyword") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/git_path_template_args") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/no_git_args_without_template") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/cache_only_skips_dependency") + +TEST_RUN_AND_CHECK_OUTPUT("package_name_dash_warning" + WARNING_MESSAGE "Package name.*contains invalid characters.*normalized" + ALWAYS_SCRIPT_MODE ON +) + +TEST_INVALID_CMAKE_RUN("${CMAKE_CURRENT_LIST_DIR}/invalid_package_name_error" + "Invalid package name" +) + +TEST_INVALID_CMAKE_RUN("${CMAKE_CURRENT_LIST_DIR}/cache_only_not_found_error" + "Package not found" +) + diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/cache_only_not_found_error/CMakeLists.txt b/cmake_tests/BA_PACKAGE/cache_only_not_found_error/CMakeLists.txt similarity index 71% rename from cmake_tests/BA_PACKAGE_LIBRARY/cache_only_not_found_error/CMakeLists.txt rename to cmake_tests/BA_PACKAGE/cache_only_not_found_error/CMakeLists.txt index 003824a..4d6c3bd 100644 --- a/cmake_tests/BA_PACKAGE_LIBRARY/cache_only_not_found_error/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE/cache_only_not_found_error/CMakeLists.txt @@ -1,18 +1,18 @@ ## # Test: CACHE_ONLY=ON with missing package emits FATAL_ERROR # -# Verifies that BA_PACKAGE_LIBRARY with CACHE_ONLY=ON emits FATAL_ERROR +# Verifies that BA_PACKAGE with CACHE_ONLY=ON emits FATAL_ERROR # when the package is not found in the cache (CMLIB_CACHE_GET returns empty). # IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) CMAKE_MINIMUM_REQUIRED(VERSION 3.21) - PROJECT(TEST_CACHE_ONLY_NOT_FOUND_ERROR) + PROJECT(TEST_BA_PACKAGE_CACHE_ONLY_NOT_FOUND_ERROR) ENDIF() FIND_PACKAGE(CMLIB REQUIRED) SET(MOCK_CMLIB_CACHE_GET_RETURN_PATH "" CACHE INTERNAL "") -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../include_general.cmake") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../include_general.cmake") INCLUDE("${CMAKE_TESTS_ROOT}/mock/CMLIB_CACHE.cmake") SET(CMAKE_BUILD_TYPE "Release") @@ -20,5 +20,5 @@ BA_PACKAGE_VARS_SET(REVISION "main") BA_PACKAGE_VARS_SET(URI_TEMPLATE "https://example.com////") BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "") -BA_PACKAGE_LIBRARY(mypkg v1.0.0 CACHE_ONLY ON) +BA_PACKAGE(mypkg v1.0.0 "" "" output_path CACHE_ONLY ON) diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/cache_only_skips_dependency/CMakeLists.txt b/cmake_tests/BA_PACKAGE/cache_only_skips_dependency/CMakeLists.txt similarity index 68% rename from cmake_tests/BA_PACKAGE_LIBRARY/cache_only_skips_dependency/CMakeLists.txt rename to cmake_tests/BA_PACKAGE/cache_only_skips_dependency/CMakeLists.txt index b6ab57f..a100005 100644 --- a/cmake_tests/BA_PACKAGE_LIBRARY/cache_only_skips_dependency/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE/cache_only_skips_dependency/CMakeLists.txt @@ -1,18 +1,18 @@ ## # Test: CACHE_ONLY=ON uses CMLIB_CACHE_GET instead of CMLIB_DEPENDENCY # -# Verifies that BA_PACKAGE_LIBRARY with CACHE_ONLY=ON calls CMLIB_CACHE_GET -# to retrieve cached package and does not call CMLIB_DEPENDENCY. +# Verifies that BA_PACKAGE with CACHE_ONLY=ON calls CMLIB_CACHE_GET +# and does not call CMLIB_DEPENDENCY. # IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) CMAKE_MINIMUM_REQUIRED(VERSION 3.21) - PROJECT(TEST_CACHE_ONLY_SKIPS_DEPENDENCY) + PROJECT(TEST_BA_PACKAGE_CACHE_ONLY_SKIPS_DEPENDENCY) ENDIF() FIND_PACKAGE(CMLIB REQUIRED) SET(MOCK_CMLIB_CACHE_GET_RETURN_PATH "/mock/cached/path" CACHE INTERNAL "") -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../include_general.cmake") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../include_general.cmake") INCLUDE("${CMAKE_TESTS_ROOT}/mock/CMLIB_CACHE.cmake") SET(CMAKE_BUILD_TYPE "Release") @@ -20,7 +20,7 @@ BA_PACKAGE_VARS_SET(REVISION "main") BA_PACKAGE_VARS_SET(URI_TEMPLATE "https://example.com////") BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "") -BA_PACKAGE_LIBRARY(mypkg v1.0.0 CACHE_ONLY ON) +BA_PACKAGE(mypkg v1.0.0 "" "" output_path CACHE_ONLY ON) TEST_VAR_TRUE(MOCK_CMLIB_CACHE_GET_CALLED) TEST_VAR_FALSE(MOCK_CMLIB_DEPENDENCY_CALLED) diff --git a/cmake_tests/BA_PACKAGE/debug_keyword/CMakeLists.txt b/cmake_tests/BA_PACKAGE/debug_keyword/CMakeLists.txt new file mode 100644 index 0000000..c89de8c --- /dev/null +++ b/cmake_tests/BA_PACKAGE/debug_keyword/CMakeLists.txt @@ -0,0 +1,29 @@ +## +# Test: Debug build adds DEBUG keyword +# +# Verifies that BA_PACKAGE in Debug mode adds the DEBUG keyword +# to CMLIB_DEPENDENCY. +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_BA_PACKAGE_DEBUG_KEYWORD) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../include_general.cmake") + +SET(CMAKE_BUILD_TYPE "Debug") +BA_PACKAGE_VARS_SET(REVISION "main") +BA_PACKAGE_VARS_SET(URI_TEMPLATE "https://example.com////") +BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "") + +BA_PACKAGE(mypkg v1.0.0 "" "" output_path) + +TEST_VAR_TRUE(MOCK_CMLIB_DEPENDENCY_CALLED) + +LIST(FIND MOCK_CMLIB_DEPENDENCY_KEYWORDS "DEBUG" idx_debug) +IF(idx_debug EQUAL -1) + MESSAGE(FATAL_ERROR "KEYWORDS missing DEBUG: ${MOCK_CMLIB_DEPENDENCY_KEYWORDS}") +ENDIF() + diff --git a/cmake_tests/BA_PACKAGE/debug_suffix_applied/CMakeLists.txt b/cmake_tests/BA_PACKAGE/debug_suffix_applied/CMakeLists.txt new file mode 100644 index 0000000..a4a7125 --- /dev/null +++ b/cmake_tests/BA_PACKAGE/debug_suffix_applied/CMakeLists.txt @@ -0,0 +1,29 @@ +## +# Test: Prefix and suffix are applied to the package name +# +# Verifies that BA_PACKAGE constructs the expanded package name as +# prefix + package_name + suffix (e.g., "myprefixmypkgmysuffix"). +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_BA_PACKAGE_DEBUG_SUFFIX_APPLIED) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../include_general.cmake") + +SET(CMAKE_BUILD_TYPE "Release") +BA_PACKAGE_VARS_SET(REVISION "main") +BA_PACKAGE_VARS_SET(URI_TEMPLATE "https://example.com////") +BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "") + +BA_PACKAGE(mypkg v1.0.0 "myprefix" "mysuffix" output_path) + +TEST_VAR_TRUE(MOCK_CMLIB_DEPENDENCY_CALLED) + +STRING(FIND "${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME}" "myprefixmypkgmysuffix" found_expanded) +IF(found_expanded EQUAL -1) + MESSAGE(FATAL_ERROR "ARCHIVE_NAME should contain 'myprefixmypkgmysuffix': ${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME}") +ENDIF() + diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/git_path_template_args/CMakeLists.txt b/cmake_tests/BA_PACKAGE/git_path_template_args/CMakeLists.txt similarity index 75% rename from cmake_tests/BA_PACKAGE_LIBRARY/git_path_template_args/CMakeLists.txt rename to cmake_tests/BA_PACKAGE/git_path_template_args/CMakeLists.txt index 22dd233..2fbe123 100644 --- a/cmake_tests/BA_PACKAGE_LIBRARY/git_path_template_args/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE/git_path_template_args/CMakeLists.txt @@ -1,25 +1,25 @@ ## # Test: GIT_PATH_TEMPLATE defined passes GIT_REVISION and GIT_PATH to CMLIB_DEPENDENCY # -# Verifies that when GIT_PATH_TEMPLATE is set, BA_PACKAGE_LIBRARY passes +# Verifies that when GIT_PATH_TEMPLATE is set, BA_PACKAGE passes # GIT_REVISION and GIT_PATH arguments to CMLIB_DEPENDENCY for git-based downloads. # IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) CMAKE_MINIMUM_REQUIRED(VERSION 3.21) - PROJECT(TEST_GIT_PATH_TEMPLATE_ARGS) + PROJECT(TEST_BA_PACKAGE_GIT_PATH_TEMPLATE_ARGS) ENDIF() FIND_PACKAGE(CMLIB REQUIRED) -SET(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT "package/mock_distro/0.0.0/mock_arch/mypkg/libmypkg-dev_v1.0.0.zip" CACHE INTERNAL "") -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../include_general.cmake") +SET(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT "package/mock_distro/0.0.0/mock_arch/mypkg/mypkg_v1.0.0.zip" CACHE INTERNAL "") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../include_general.cmake") SET(CMAKE_BUILD_TYPE "Release") BA_PACKAGE_VARS_SET(REVISION "main") BA_PACKAGE_VARS_SET(URI_TEMPLATE "git@github.com:org/repo.git") BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "package///") -BA_PACKAGE_LIBRARY(mypkg v1.0.0) +BA_PACKAGE(mypkg v1.0.0 "" "" output_path) TEST_VAR_TRUE(MOCK_CMLIB_DEPENDENCY_CALLED) diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/invalid_package_name_error/CMakeLists.txt b/cmake_tests/BA_PACKAGE/invalid_package_name_error/CMakeLists.txt similarity index 67% rename from cmake_tests/BA_PACKAGE_LIBRARY/invalid_package_name_error/CMakeLists.txt rename to cmake_tests/BA_PACKAGE/invalid_package_name_error/CMakeLists.txt index 3cba9e4..bdf5b55 100644 --- a/cmake_tests/BA_PACKAGE_LIBRARY/invalid_package_name_error/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE/invalid_package_name_error/CMakeLists.txt @@ -1,22 +1,22 @@ ## # Test: Invalid package name (all special characters) emits FATAL_ERROR # -# Verifies that BA_PACKAGE_LIBRARY emits FATAL_ERROR when the package name +# Verifies that BA_PACKAGE emits FATAL_ERROR when the package name # normalizes to an empty string (e.g., "---" becomes ""). # IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) CMAKE_MINIMUM_REQUIRED(VERSION 3.21) - PROJECT(TEST_INVALID_PACKAGE_NAME_ERROR) + PROJECT(TEST_BA_PACKAGE_INVALID_PACKAGE_NAME_ERROR) ENDIF() FIND_PACKAGE(CMLIB REQUIRED) -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../include_general.cmake") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../include_general.cmake") SET(CMAKE_BUILD_TYPE "Release") BA_PACKAGE_VARS_SET(REVISION "main") BA_PACKAGE_VARS_SET(URI_TEMPLATE "https://example.com////") BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "") -BA_PACKAGE_LIBRARY("---" v1.0.0) +BA_PACKAGE("---" v1.0.0 "" "" output_path) diff --git a/cmake_tests/BA_PACKAGE/no_debug_skips_keyword/CMakeLists.txt b/cmake_tests/BA_PACKAGE/no_debug_skips_keyword/CMakeLists.txt new file mode 100644 index 0000000..447e81c --- /dev/null +++ b/cmake_tests/BA_PACKAGE/no_debug_skips_keyword/CMakeLists.txt @@ -0,0 +1,34 @@ +## +# Test: NO_DEBUG=ON suppresses DEBUG and RELEASE keywords +# +# Verifies that BA_PACKAGE with NO_DEBUG=ON does not add DEBUG or RELEASE +# keywords to CMLIB_DEPENDENCY even in Debug build mode. +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_BA_PACKAGE_NO_DEBUG_SKIPS_KEYWORD) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../include_general.cmake") + +SET(CMAKE_BUILD_TYPE "Debug") +BA_PACKAGE_VARS_SET(REVISION "main") +BA_PACKAGE_VARS_SET(URI_TEMPLATE "https://example.com////") +BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "") + +BA_PACKAGE(mypkg v1.0.0 "" "" output_path NO_DEBUG ON) + +TEST_VAR_TRUE(MOCK_CMLIB_DEPENDENCY_CALLED) + +LIST(FIND MOCK_CMLIB_DEPENDENCY_KEYWORDS "DEBUG" idx_debug) +IF(NOT idx_debug EQUAL -1) + MESSAGE(FATAL_ERROR "KEYWORDS should NOT contain DEBUG when NO_DEBUG=ON: ${MOCK_CMLIB_DEPENDENCY_KEYWORDS}") +ENDIF() + +LIST(FIND MOCK_CMLIB_DEPENDENCY_KEYWORDS "RELEASE" idx_release) +IF(NOT idx_release EQUAL -1) + MESSAGE(FATAL_ERROR "KEYWORDS should NOT contain RELEASE when NO_DEBUG=ON: ${MOCK_CMLIB_DEPENDENCY_KEYWORDS}") +ENDIF() + diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/no_git_args_without_template/CMakeLists.txt b/cmake_tests/BA_PACKAGE/no_git_args_without_template/CMakeLists.txt similarity index 66% rename from cmake_tests/BA_PACKAGE_LIBRARY/no_git_args_without_template/CMakeLists.txt rename to cmake_tests/BA_PACKAGE/no_git_args_without_template/CMakeLists.txt index f9546c4..9b72e94 100644 --- a/cmake_tests/BA_PACKAGE_LIBRARY/no_git_args_without_template/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE/no_git_args_without_template/CMakeLists.txt @@ -1,24 +1,24 @@ ## -# Test: Empty GIT_PATH_TEMPLATE does not pass GIT_REVISION/GIT_PATH +# Test: Empty GIT_PATH_TEMPLATE does not pass GIT_REVISION or GIT_PATH # -# Verifies that when GIT_PATH_TEMPLATE is empty, BA_PACKAGE_LIBRARY does not -# pass GIT_REVISION or GIT_PATH arguments to CMLIB_DEPENDENCY. +# Verifies that when GIT_PATH_TEMPLATE is empty, BA_PACKAGE does not pass +# GIT_REVISION or GIT_PATH arguments to CMLIB_DEPENDENCY. # IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) CMAKE_MINIMUM_REQUIRED(VERSION 3.21) - PROJECT(TEST_NO_GIT_ARGS_WITHOUT_TEMPLATE) + PROJECT(TEST_BA_PACKAGE_NO_GIT_ARGS_WITHOUT_TEMPLATE) ENDIF() FIND_PACKAGE(CMLIB REQUIRED) -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../include_general.cmake") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../include_general.cmake") SET(CMAKE_BUILD_TYPE "Release") BA_PACKAGE_VARS_SET(REVISION "main") BA_PACKAGE_VARS_SET(URI_TEMPLATE "https://example.com////") BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "") -BA_PACKAGE_LIBRARY(mypkg v1.0.0) +BA_PACKAGE(mypkg v1.0.0 "" "" output_path) TEST_VAR_TRUE(MOCK_CMLIB_DEPENDENCY_CALLED) diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/package_name_dash_warning/CMakeLists.txt b/cmake_tests/BA_PACKAGE/package_name_dash_warning/CMakeLists.txt similarity index 70% rename from cmake_tests/BA_PACKAGE_LIBRARY/package_name_dash_warning/CMakeLists.txt rename to cmake_tests/BA_PACKAGE/package_name_dash_warning/CMakeLists.txt index c1e7e5f..f8716d4 100644 --- a/cmake_tests/BA_PACKAGE_LIBRARY/package_name_dash_warning/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE/package_name_dash_warning/CMakeLists.txt @@ -1,24 +1,24 @@ ## # Test: Package name with dashes emits normalization warning # -# Verifies that BA_PACKAGE_LIBRARY emits a WARNING when the package name +# Verifies that BA_PACKAGE emits a WARNING when the package name # contains invalid characters (like dashes) that are normalized for CMLIB keywords. # IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) CMAKE_MINIMUM_REQUIRED(VERSION 3.21) - PROJECT(TEST_PACKAGE_NAME_DASH_WARNING) + PROJECT(TEST_BA_PACKAGE_PACKAGE_NAME_DASH_WARNING) ENDIF() FIND_PACKAGE(CMLIB REQUIRED) -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../include_general.cmake") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../include_general.cmake") SET(CMAKE_BUILD_TYPE "Release") BA_PACKAGE_VARS_SET(REVISION "main") BA_PACKAGE_VARS_SET(URI_TEMPLATE "https://example.com////") BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "") -BA_PACKAGE_LIBRARY(my-pkg v1.0.0) +BA_PACKAGE(my-pkg v1.0.0 "" "" output_path) TEST_VAR_TRUE(MOCK_CMLIB_DEPENDENCY_CALLED) diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/release_basic/CMakeLists.txt b/cmake_tests/BA_PACKAGE/release_basic/CMakeLists.txt similarity index 73% rename from cmake_tests/BA_PACKAGE_LIBRARY/release_basic/CMakeLists.txt rename to cmake_tests/BA_PACKAGE/release_basic/CMakeLists.txt index 23de70f..78786f9 100644 --- a/cmake_tests/BA_PACKAGE_LIBRARY/release_basic/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE/release_basic/CMakeLists.txt @@ -1,24 +1,24 @@ ## -# Test: Release build calls CMLIB_DEPENDENCY with correct KEYWORDS and TYPE +# Test: Release build sets BACPACK, package name, and RELEASE keywords # -# Verifies that BA_PACKAGE_LIBRARY in Release mode passes BACPACK, package name, -# and RELEASE keywords to CMLIB_DEPENDENCY with TYPE=ARCHIVE. +# Verifies that BA_PACKAGE in Release mode adds BACPACK, normalized package +# name, and RELEASE keywords to CMLIB_DEPENDENCY with TYPE=ARCHIVE. # IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) CMAKE_MINIMUM_REQUIRED(VERSION 3.21) - PROJECT(TEST_RELEASE_BASIC) + PROJECT(TEST_BA_PACKAGE_RELEASE_BASIC) ENDIF() FIND_PACKAGE(CMLIB REQUIRED) -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../include_general.cmake") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../include_general.cmake") SET(CMAKE_BUILD_TYPE "Release") BA_PACKAGE_VARS_SET(REVISION "main") BA_PACKAGE_VARS_SET(URI_TEMPLATE "https://example.com////") BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "") -BA_PACKAGE_LIBRARY(mypkg v1.0.0) +BA_PACKAGE(mypkg v1.0.0 "" "" output_path) TEST_VAR_TRUE(MOCK_CMLIB_DEPENDENCY_CALLED) TEST_VAR_EQUALS_LITERAL(MOCK_CMLIB_DEPENDENCY_TYPE "ARCHIVE") diff --git a/cmake_tests/BA_PACKAGE_EXECUTABLE/CMakeLists.txt b/cmake_tests/BA_PACKAGE_EXECUTABLE/CMakeLists.txt index e86b63f..e7330ba 100644 --- a/cmake_tests/BA_PACKAGE_EXECUTABLE/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_EXECUTABLE/CMakeLists.txt @@ -9,4 +9,6 @@ INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../TEST.cmake") TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/release_basic") TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/debug_suffix") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/output_path_var_propagates") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/cmake_prefix_path_updated") diff --git a/cmake_tests/BA_PACKAGE_EXECUTABLE/cmake_prefix_path_updated/CMakeLists.txt b/cmake_tests/BA_PACKAGE_EXECUTABLE/cmake_prefix_path_updated/CMakeLists.txt new file mode 100644 index 0000000..6695318 --- /dev/null +++ b/cmake_tests/BA_PACKAGE_EXECUTABLE/cmake_prefix_path_updated/CMakeLists.txt @@ -0,0 +1,29 @@ +## +# Test: CMAKE_PREFIX_PATH is updated with the cached package path +# +# Verifies that BA_PACKAGE_EXECUTABLE appends the package path to CMAKE_PREFIX_PATH +# so that find_package() can locate the installed package. +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_BA_PACKAGE_EXECUTABLE_CMAKE_PREFIX_PATH_UPDATED) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../include_general.cmake") + +SET(CMAKE_BUILD_TYPE "Release") +BA_PACKAGE_VARS_SET(REVISION "main") +BA_PACKAGE_VARS_SET(URI_TEMPLATE "https://example.com////") +BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "") + +SET(CMAKE_PREFIX_PATH "") + +BA_PACKAGE_EXECUTABLE(mypkg v1.0.0) + +LIST(FIND CMAKE_PREFIX_PATH "/mock/cache/path" idx_found) +IF(idx_found EQUAL -1) + MESSAGE(FATAL_ERROR "CMAKE_PREFIX_PATH should contain /mock/cache/path: ${CMAKE_PREFIX_PATH}") +ENDIF() + diff --git a/cmake_tests/BA_PACKAGE_EXECUTABLE/debug_suffix/CMakeLists.txt b/cmake_tests/BA_PACKAGE_EXECUTABLE/debug_suffix/CMakeLists.txt index 777da2a..cdee3af 100644 --- a/cmake_tests/BA_PACKAGE_EXECUTABLE/debug_suffix/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_EXECUTABLE/debug_suffix/CMakeLists.txt @@ -12,7 +12,7 @@ ENDIF() FIND_PACKAGE(CMLIB REQUIRED) SET(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT "https://example.com/main/mock_distro/0.0.0/mock_arch/mypkg/mypkgd_v1.0.0_mock_arch_mock_distro_0.0.0.zip" CACHE INTERNAL "") -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../BA_PACKAGE_LIBRARY/include_general.cmake") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../include_general.cmake") SET(CMAKE_BUILD_TYPE "Debug") BA_PACKAGE_VARS_SET(REVISION "main") diff --git a/cmake_tests/BA_PACKAGE_EXECUTABLE/output_path_var_propagates/CMakeLists.txt b/cmake_tests/BA_PACKAGE_EXECUTABLE/output_path_var_propagates/CMakeLists.txt new file mode 100644 index 0000000..892d021 --- /dev/null +++ b/cmake_tests/BA_PACKAGE_EXECUTABLE/output_path_var_propagates/CMakeLists.txt @@ -0,0 +1,25 @@ +## +# Test: OUTPUT_PATH_VAR returns the cached package path +# +# Verifies that BA_PACKAGE_EXECUTABLE with OUTPUT_PATH_VAR parameter sets the +# specified variable to the path returned by CMLIB_DEPENDENCY. +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_BA_PACKAGE_EXECUTABLE_OUTPUT_PATH_VAR_PROPAGATES) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../include_general.cmake") + +SET(CMAKE_BUILD_TYPE "Release") +BA_PACKAGE_VARS_SET(REVISION "main") +BA_PACKAGE_VARS_SET(URI_TEMPLATE "https://example.com////") +BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "") + +BA_PACKAGE_EXECUTABLE(mypkg v1.0.0 OUTPUT_PATH_VAR my_output_path) + +TEST_VAR_DEFINED(my_output_path) +TEST_VAR_EQUALS_LITERAL(my_output_path "/mock/cache/path") + diff --git a/cmake_tests/BA_PACKAGE_EXECUTABLE/release_basic/CMakeLists.txt b/cmake_tests/BA_PACKAGE_EXECUTABLE/release_basic/CMakeLists.txt index 8fea80e..76746b6 100644 --- a/cmake_tests/BA_PACKAGE_EXECUTABLE/release_basic/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_EXECUTABLE/release_basic/CMakeLists.txt @@ -12,7 +12,7 @@ ENDIF() FIND_PACKAGE(CMLIB REQUIRED) SET(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT "https://example.com/main/mock_distro/0.0.0/mock_arch/mypkg/mypkg_v1.0.0_mock_arch_mock_distro_0.0.0.zip" CACHE INTERNAL "") -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../BA_PACKAGE_LIBRARY/include_general.cmake") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../include_general.cmake") SET(CMAKE_BUILD_TYPE "Release") BA_PACKAGE_VARS_SET(REVISION "main") diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/CMakeLists.txt b/cmake_tests/BA_PACKAGE_LIBRARY/CMakeLists.txt index e3ed8bc..bb71c4c 100644 --- a/cmake_tests/BA_PACKAGE_LIBRARY/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_LIBRARY/CMakeLists.txt @@ -7,25 +7,8 @@ FIND_PACKAGE(CMLIB REQUIRED) INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../TEST.cmake") -TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/release_basic") TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/debug_suffix") TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/no_debug_skips_suffix") -TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/git_path_template_args") -TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/no_git_args_without_template") -TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/cache_only_skips_dependency") TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/output_path_var_propagates") TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/cmake_prefix_path_updated") -TEST_RUN_AND_CHECK_OUTPUT("package_name_dash_warning" - WARNING_MESSAGE "Package name.*contains invalid characters.*normalized" - ALWAYS_SCRIPT_MODE ON -) - -TEST_INVALID_CMAKE_RUN("${CMAKE_CURRENT_LIST_DIR}/invalid_package_name_error" - "Invalid package name" -) - -TEST_INVALID_CMAKE_RUN("${CMAKE_CURRENT_LIST_DIR}/cache_only_not_found_error" - "Package not found" -) - diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/cmake_prefix_path_updated/CMakeLists.txt b/cmake_tests/BA_PACKAGE_LIBRARY/cmake_prefix_path_updated/CMakeLists.txt index 292cc49..6b10635 100644 --- a/cmake_tests/BA_PACKAGE_LIBRARY/cmake_prefix_path_updated/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_LIBRARY/cmake_prefix_path_updated/CMakeLists.txt @@ -11,7 +11,7 @@ ENDIF() FIND_PACKAGE(CMLIB REQUIRED) -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../include_general.cmake") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../include_general.cmake") SET(CMAKE_BUILD_TYPE "Release") BA_PACKAGE_VARS_SET(REVISION "main") diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/debug_suffix/CMakeLists.txt b/cmake_tests/BA_PACKAGE_LIBRARY/debug_suffix/CMakeLists.txt index 052832e..141ffb9 100644 --- a/cmake_tests/BA_PACKAGE_LIBRARY/debug_suffix/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_LIBRARY/debug_suffix/CMakeLists.txt @@ -12,7 +12,7 @@ ENDIF() FIND_PACKAGE(CMLIB REQUIRED) SET(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT "https://example.com/main/mock_distro/0.0.0/mock_arch/mypkg/libmypkgd-dev_v1.0.0_mock_arch_mock_distro_0.0.0.zip" CACHE INTERNAL "") -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../include_general.cmake") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../include_general.cmake") SET(CMAKE_BUILD_TYPE "Debug") BA_PACKAGE_VARS_SET(REVISION "main") @@ -23,11 +23,6 @@ BA_PACKAGE_LIBRARY(mypkg v1.0.0) TEST_VAR_TRUE(MOCK_CMLIB_DEPENDENCY_CALLED) -LIST(FIND MOCK_CMLIB_DEPENDENCY_KEYWORDS "DEBUG" idx_debug) -IF(idx_debug EQUAL -1) - MESSAGE(FATAL_ERROR "KEYWORDS missing DEBUG: ${MOCK_CMLIB_DEPENDENCY_KEYWORDS}") -ENDIF() - STRING(FIND "${MOCK_CMLIB_DEPENDENCY_URI}" "libmypkgd-dev" found_debug_suffix) IF(found_debug_suffix EQUAL -1) MESSAGE(FATAL_ERROR "URI does not contain 'd-dev' suffix: ${MOCK_CMLIB_DEPENDENCY_URI}") diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/no_debug_skips_suffix/CMakeLists.txt b/cmake_tests/BA_PACKAGE_LIBRARY/no_debug_skips_suffix/CMakeLists.txt index 96e9893..db139bb 100644 --- a/cmake_tests/BA_PACKAGE_LIBRARY/no_debug_skips_suffix/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_LIBRARY/no_debug_skips_suffix/CMakeLists.txt @@ -12,7 +12,7 @@ ENDIF() FIND_PACKAGE(CMLIB REQUIRED) SET(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT "https://example.com/main/mock_distro/0.0.0/mock_arch/mypkg/libmypkg-dev_v1.0.0_mock_arch_mock_distro_0.0.0.zip" CACHE INTERNAL "") -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../include_general.cmake") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../include_general.cmake") SET(CMAKE_BUILD_TYPE "Debug") BA_PACKAGE_VARS_SET(REVISION "main") @@ -23,16 +23,6 @@ BA_PACKAGE_LIBRARY(mypkg v1.0.0 NO_DEBUG ON) TEST_VAR_TRUE(MOCK_CMLIB_DEPENDENCY_CALLED) -LIST(FIND MOCK_CMLIB_DEPENDENCY_KEYWORDS "DEBUG" idx_debug) -IF(NOT idx_debug EQUAL -1) - MESSAGE(FATAL_ERROR "KEYWORDS should NOT contain DEBUG when NO_DEBUG=ON: ${MOCK_CMLIB_DEPENDENCY_KEYWORDS}") -ENDIF() - -LIST(FIND MOCK_CMLIB_DEPENDENCY_KEYWORDS "RELEASE" idx_release) -IF(NOT idx_release EQUAL -1) - MESSAGE(FATAL_ERROR "KEYWORDS should NOT contain RELEASE when NO_DEBUG=ON: ${MOCK_CMLIB_DEPENDENCY_KEYWORDS}") -ENDIF() - STRING(FIND "${MOCK_CMLIB_DEPENDENCY_URI}" "libmypkgd-dev" found_debug_suffix) IF(NOT found_debug_suffix EQUAL -1) MESSAGE(FATAL_ERROR "URI should NOT contain 'd-dev' suffix when NO_DEBUG=ON: ${MOCK_CMLIB_DEPENDENCY_URI}") diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/output_path_var_propagates/CMakeLists.txt b/cmake_tests/BA_PACKAGE_LIBRARY/output_path_var_propagates/CMakeLists.txt index 17aecbb..966ce3e 100644 --- a/cmake_tests/BA_PACKAGE_LIBRARY/output_path_var_propagates/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_LIBRARY/output_path_var_propagates/CMakeLists.txt @@ -11,7 +11,7 @@ ENDIF() FIND_PACKAGE(CMLIB REQUIRED) -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../include_general.cmake") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../include_general.cmake") SET(CMAKE_BUILD_TYPE "Release") BA_PACKAGE_VARS_SET(REVISION "main") diff --git a/cmake_tests/CMakeLists.txt b/cmake_tests/CMakeLists.txt index a6b21e9..e407aec 100644 --- a/cmake_tests/CMakeLists.txt +++ b/cmake_tests/CMakeLists.txt @@ -8,6 +8,7 @@ FIND_PACKAGE(CMLIB REQUIRED) INCLUDE("${CMAKE_CURRENT_LIST_DIR}/TEST.cmake") TEST_RUN("BA_PACKAGE_PREREQ_CMCONF_INIT") +TEST_RUN("BA_PACKAGE") TEST_RUN("BA_PACKAGE_LIBRARY") TEST_RUN("BA_PACKAGE_EXECUTABLE") TEST_RUN("mock/test") diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/include_general.cmake b/cmake_tests/include_general.cmake similarity index 88% rename from cmake_tests/BA_PACKAGE_LIBRARY/include_general.cmake rename to cmake_tests/include_general.cmake index 384bcdd..9754f87 100644 --- a/cmake_tests/BA_PACKAGE_LIBRARY/include_general.cmake +++ b/cmake_tests/include_general.cmake @@ -1,5 +1,5 @@ ## -# Common includes for BA_PACKAGE_LIBRARY tests +# Common includes for BA_PACKAGE* tests # # Provides standard test setup including VARS, TEST framework, BA_PACKAGE modules, # and all standard mocks (CMDEF_VARS, CMUTIL, CMLIB_STORAGE, CMLIB_DEPENDENCY). @@ -10,7 +10,7 @@ # set it BEFORE including this file. # -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../VARS.cmake") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/VARS.cmake") INCLUDE("${CMAKE_TESTS_ROOT}/TEST.cmake") INCLUDE("${PACKAGER_PROJECT_ROOT}/BA_PACKAGE_VARS.cmake") diff --git a/cmake_tests/mock/CMLIB_STORAGE.cmake b/cmake_tests/mock/CMLIB_STORAGE.cmake index 657a769..0b78c96 100644 --- a/cmake_tests/mock/CMLIB_STORAGE.cmake +++ b/cmake_tests/mock/CMLIB_STORAGE.cmake @@ -34,6 +34,10 @@ SET(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_TEMPLATE_VAR "" CACHE INTERNAL "Captured template variable name argument" ) +SET(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME "" + CACHE INTERNAL + "Captured ARCHIVE_NAME argument" +) ## # Mock implementation of CMLIB_STORAGE_TEMPLATE_INSTANCE @@ -43,6 +47,18 @@ SET(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_TEMPLATE_VAR "" FUNCTION(CMLIB_STORAGE_TEMPLATE_INSTANCE output_var template_var_name) SET_PROPERTY(CACHE MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_CALLED PROPERTY VALUE TRUE) SET_PROPERTY(CACHE MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_TEMPLATE_VAR PROPERTY VALUE "${template_var_name}") + CMLIB_PARSE_ARGUMENTS( + ONE_VALUE + REVISION + GIT_PATH + ARCHIVE_NAME + PACKAGE_GROUP_NAME + P_ARGN + ${ARGN} + ) + IF(__ARCHIVE_NAME) + SET_PROPERTY(CACHE MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME PROPERTY VALUE "${__ARCHIVE_NAME}") + ENDIF() SET(result "https://mock.example.com/mock_expanded_uri") IF(NOT "${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT}" STREQUAL "") SET(result "${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT}") From 40fca3f31d0754aece137b223a9e3ea5348a79c8 Mon Sep 17 00:00:00 2001 From: Jan Kubalek Date: Sun, 15 Feb 2026 20:12:37 +0100 Subject: [PATCH 19/28] Make tests more defined and concise.... --- BA_PACKAGE.cmake | 61 +++++++- BA_PACKAGE_VARS.cmake | 14 +- README.md | 24 +-- STORAGE.cmake | 34 ++-- cmake_tests/BA_PACKAGE/CMakeLists.txt | 12 +- .../archive_type_zip/CMakeLists.txt | 24 +++ .../BA_PACKAGE/empty_revision/CMakeLists.txt | 25 +++ .../CMakeLists.txt | 27 ++++ .../CMakeLists.txt | 27 ++++ .../BA_PACKAGE/output_var_set/CMakeLists.txt | 25 +++ .../BA_PACKAGE_EXECUTABLE/CMakeLists.txt | 2 + .../cache_only_forwarding/CMakeLists.txt | 27 ++++ .../debug_suffix/CMakeLists.txt | 13 +- .../no_debug_skips_suffix/CMakeLists.txt | 44 ++++++ .../release_basic/CMakeLists.txt | 13 +- cmake_tests/BA_PACKAGE_LIBRARY/CMakeLists.txt | 2 + .../cache_only_forwarding/CMakeLists.txt | 27 ++++ .../debug_suffix/CMakeLists.txt | 5 +- .../no_debug_skips_suffix/CMakeLists.txt | 19 ++- .../release_basic/CMakeLists.txt | 34 ++++ .../CMakeLists.txt | 5 +- .../env_var_precedence/CMakeLists.txt | 7 +- .../CMakeLists.txt | 4 +- .../CMakeLists.txt | 32 ++++ .../CMakeLists.txt | 32 ++++ .../git_archive_path_returned/CMakeLists.txt | 7 +- .../CMakeLists.txt | 9 +- .../http_header_returned/CMakeLists.txt | 32 ++++ .../invalid_local_path/CMakeLists.txt | 2 +- .../local_use_off/CMakeLists.txt | 7 +- .../local_use_on/CMakeLists.txt | 4 +- cmake_tests/README.md | 27 ++++ cmake_tests/mock/CMLIB_DEPENDENCY.cmake | 7 + cmake_tests/mock/CMLIB_STORAGE.cmake | 26 ++++ cmake_tests/mock/MOCK_VARIABLES.md | 145 ++++++++++++++++++ doc/GlobalConfiguration.md | 4 +- doc/MigrationGuide_1_to_2.md | 72 +++++++++ example/config/CMCONF_EXAMPLEConfig.cmake | 15 +- helpers/BA_PACKAGE_PREREQ.cmake | 15 +- test/README.md | 34 +++- test/app/CMakeLists.txt | 6 + .../app/lib/shared_library_gst/CMakeLists.txt | 45 ++++++ test/app/lib/shared_library_gst/library.c | 3 + test/app/main.c | 12 +- .../app/tests_list/gstreamer_style_naming.txt | 109 +++++++++++++ test/app/tests_list/standard_install.txt | 3 + .../tests_list/symlink_named_differently.txt | 3 + .../tests_list/symlink_named_same_as_file.txt | 3 + version.txt | 2 +- 49 files changed, 1042 insertions(+), 89 deletions(-) create mode 100644 cmake_tests/BA_PACKAGE/archive_type_zip/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE/empty_revision/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE/escape_template_args_applied/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE/escape_template_args_not_applied/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE/output_var_set/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE_EXECUTABLE/cache_only_forwarding/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE_EXECUTABLE/no_debug_skips_suffix/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE_LIBRARY/cache_only_forwarding/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE_LIBRARY/release_basic/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/escape_template_args_off_returned/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/escape_template_args_on_returned/CMakeLists.txt create mode 100644 cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/http_header_returned/CMakeLists.txt create mode 100644 cmake_tests/README.md create mode 100644 cmake_tests/mock/MOCK_VARIABLES.md create mode 100644 doc/MigrationGuide_1_to_2.md create mode 100644 test/app/lib/shared_library_gst/CMakeLists.txt create mode 100644 test/app/lib/shared_library_gst/library.c create mode 100644 test/app/tests_list/gstreamer_style_naming.txt diff --git a/BA_PACKAGE.cmake b/BA_PACKAGE.cmake index 2f340da..2fe118c 100644 --- a/BA_PACKAGE.cmake +++ b/BA_PACKAGE.cmake @@ -21,7 +21,7 @@ FIND_PACKAGE(CMLIB COMPONENTS CMUTIL CMDEF) # # OUTPUT_PATH_VAR - name of the variable where the absolute path of the package root will be stored. # -# Wrapper arounf BA_PACKAGE +# Wrapper around BA_PACKAGE # - adds package path to CMAKE_PREFIX_PATH # - propagates output variables # - manage prefixes and suffixes @@ -79,7 +79,7 @@ ENDFUNCTION() # # OUTPUT_PATH_VAR - name of the variable where the absolute path of the package root will be stored. # -# Wrapper arounf BA_PACKAGE +# Wrapper around BA_PACKAGE # - adds package path to CMAKE_PREFIX_PATH # - propagates output variables # - manage prefixes and suffixes @@ -159,11 +159,19 @@ FUNCTION(BA_PACKAGE package_name version_tag prefix suffix output_var) SET(package_string "${package_name_expanded}_${version_tag}_${platform_string}.zip") BA_PACKAGE_VARS_GET(REVISION revision_var) + SET(git_path "${CMDEF_DISTRO_ID}/${CMDEF_DISTRO_VERSION_ID}/${machine}") + BA_PACKAGE_VARS_GET(ESCAPE_TEMPLATE_ARGS escape_template_args) + IF(escape_template_args) + _BA_PACKAGE_URL_ENCODE("${revision_var}" revision_var) + _BA_PACKAGE_URL_ENCODE("${git_path}" git_path) + _BA_PACKAGE_URL_ENCODE("${package_string}" package_string) + _BA_PACKAGE_URL_ENCODE("${package_name}" package_name) + ENDIF() + SET(revision_arg) IF(revision_var) SET(revision_arg REVISION "${revision_var}") ENDIF() - SET(git_path "${CMDEF_DISTRO_ID}/${CMDEF_DISTRO_VERSION_ID}/${machine}") BA_PACKAGE_VARS_GET(URI_TEMPLATE template_var) CMLIB_STORAGE_TEMPLATE_INSTANCE(remote_file template_var @@ -192,9 +200,12 @@ FUNCTION(BA_PACKAGE package_name version_tag prefix suffix output_var) IF(NOT package_name_upper) MESSAGE(FATAL_ERROR "Invalid package name: ${package_name}") ENDIF() - IF(NOT (package_name_upper STREQUAL package_name_upper_orig)) - MESSAGE(WARNING "Package name ${package_name} contains invalid characters. It was normalized to form a proper CMLIB cache keyword: ${package_name} --> ${package_name_upper}") - ENDIF() + + # Not sure if this is useful? In production it feels weird. + # The only reason is to not have accidental collisions.... + #IF(NOT (package_name_upper STREQUAL package_name_upper_orig)) + # MESSAGE(WARNING "Package name ${package_name} contains invalid characters. It was normalized to form a proper CMLIB cache keyword: ${package_name} --> ${package_name_upper}") + #ENDIF() SET(keywords BACPACK ${package_name_upper}) @@ -218,6 +229,7 @@ FUNCTION(BA_PACKAGE package_name version_tag prefix suffix output_var) CMLIB_DEPENDENCY( KEYWORDS ${keywords} TYPE ARCHIVE + ARCHIVE_TYPE ZIP URI "${remote_file}" ${git_revision_arg} ${git_archive_path_arg} @@ -232,7 +244,40 @@ ENDFUNCTION() ## Helper # -# Print preformatted message +# Percent-encode characters that are not allowed in URI components. +# +# ( +# +# ) +# +FUNCTION(_BA_PACKAGE_URL_ENCODE input output) + SET(result "${input}") + STRING(REPLACE "%" "%25" result "${result}") + STRING(REPLACE " " "%20" result "${result}") + STRING(REPLACE "!" "%21" result "${result}") + STRING(REPLACE "#" "%23" result "${result}") + STRING(REPLACE "$" "%24" result "${result}") + STRING(REPLACE "&" "%26" result "${result}") + STRING(REPLACE "'" "%27" result "${result}") + STRING(REPLACE "(" "%28" result "${result}") + STRING(REPLACE ")" "%29" result "${result}") + STRING(REPLACE "*" "%2A" result "${result}") + STRING(REPLACE "+" "%2B" result "${result}") + STRING(REPLACE "," "%2C" result "${result}") + STRING(REPLACE "/" "%2F" result "${result}") + STRING(REPLACE ":" "%3A" result "${result}") + STRING(REPLACE ";" "%3B" result "${result}") + STRING(REPLACE "=" "%3D" result "${result}") + STRING(REPLACE "?" "%3F" result "${result}") + STRING(REPLACE "@" "%40" result "${result}") + SET(${output} "${result}" PARENT_SCOPE) +ENDFUNCTION() + + + +## Helper +# +# Print reformatted message # # ( # @@ -245,4 +290,4 @@ FUNCTION(_BA_PACKAGE_MESSAGE action message) MESSAGE(FATAL_ERROR "BA_PACKAGE: Cannot print unknown action ${action}") ENDIF() MESSAGE(STATUS "BA_PACKAGE [${action}]: ${message}") -ENDFUNCTION() \ No newline at end of file +ENDFUNCTION() diff --git a/BA_PACKAGE_VARS.cmake b/BA_PACKAGE_VARS.cmake index e7b9096..04cd494 100644 --- a/BA_PACKAGE_VARS.cmake +++ b/BA_PACKAGE_VARS.cmake @@ -8,7 +8,7 @@ # be stored as INTERNAL cache variable. # - Every variable is stored as a CMake cache variable with name BA_PACKAGE_VARS__. # Double _ is chosen to avoid defining reserved variable names SET and GET. -# - Every variable shall be set/get by a SetterGetter function. +# - Every variable shall be set/get by a Setter-Getter function. # # Mechanism of Setter/Getter was chosen in order to simplify # future maintenance and "configuration" (in backward compatibility manner) @@ -29,7 +29,17 @@ SET(BA_PACKAGE_VARS__URI_TEMPLATE "NonExistentPath" SET(BA_PACKAGE_VARS__GIT_PATH_TEMPLATE "NonExistentPath" CACHE INTERNAL - "Git path template to use. If non empty the URI_TEMPALTE represents remote Git repository. Takes same template params as URI_TEMPLATE." + "Git path template to use. If non empty the URI_TEMPLATE represents remote Git repository. Takes same template params as URI_TEMPLATE." +) + +SET(BA_PACKAGE_VARS__HTTP_HEADER "NonExistentHTTPHEADER" + CACHE INTERNAL + "HTTP header to use when accessing Package Repository over HTTP." +) + +SET(BA_PACKAGE_VARS__ESCAPE_TEMPLATE_ARGS OFF + CACHE INTERNAL + "Escape template arguments when constructing the package download URI" ) diff --git a/README.md b/README.md index 04a8df1..13d44c2 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ Setting variable values are highly affected by [CMCONF Global Config]. - `` - path to Packages in the repository for a given system. Set to `${CMDEF_DISTRO_ID}/${CMDEF_DISTRO_VERSION_ID}/${CMDEF_ARCHITECTURE}`, - `` - package group name as stated in [BringAuto Packager Context] - `` - full name of the Package. Set to ${package_group_name}_${version_tag}_${platform_string}.zip. The platform string is derived from CMDEF variables: `CMDEF_ARCHITECTURE`, `CMDEF_DISTRO_ID`, `CMDEF_DISTRO_VERSION_ID`. -- `GIT_PATH_TEMPLATE` - [CMake-lib] template to construct path to the package in the repository. If set `URI_TEMPLATE` shall represents remote Git repository. It takes same template params as `URI_TEMPLATE`. +- `GIT_PATH_TEMPLATE` - [CMake-lib] template to construct path to the package in the repository. If set `URI_TEMPLATE` shall represent a remote Git repository. It takes the same template params as `URI_TEMPLATE`. ```cmake # Set REVISION to deps_update @@ -71,6 +71,12 @@ BA_PACKAGE_VARS_SET(REVISION deps_update) BA_PACKAGE_LIBRARY(nlohmann-json v3.10.5) ``` +## Tests + +- [cmake_tests/] — unit tests for CMake module logic using mocks, no network or build required. +- [test/] — integration tests that build a real application, install dependencies, and verify installed file structure. + + ## FAQ ### Q: Package not found even if it exists in the repository @@ -79,21 +85,21 @@ BA_PACKAGE_LIBRARY(nlohmann-json v3.10.5) - Verify REVISION and URI_TEMPLATE (see CMCONF Global Config) point to the right Package Repository and branch. - If using a local Package Repository, confirm BA_PACKAGE_LOCAL_PATH points to the correct directory and that the expected package archive exists. -### Q: Package conflict if I want to build my project by second build type +### Q: Package conflict if I want to build my project by another build type -If you want to use the same cache path for Release and Debug build types -you must ensure that the package differs between Debug/Release build configs +If the same cache path is used for Release and Debug build types, +it must be ensured that the package differs between Debug/Release build configs and does not have files with the same paths. -If you have a package that has the same content for Debug and Release you need to -use `NO_DEBUG ON` in `BA_PACKAGE_LIBRARY`; otherwise the conflict will occur. +If the package has the same content for Debug and Release + `NO_DEBUG ON` flag shall be used in `BA_PACKAGE_LIBRARY`; otherwise the conflict will occur. (Look at [example/] for quick overview) - - [BringAuto Packager]: https://github.com/bacpack-system/packager [CMCONF Global Config]: ./doc/GlobalConfiguration.md [CMake-lib]: https://github.com/cmakelib/cmakelib [BringAuto Packager Context]: https://github.com/bacpack-system/packager/blob/master/doc/ContextStructure.md -[example/]: example/ \ No newline at end of file +[example/]: example/ +[cmake_tests/]: cmake_tests/ +[test/]: test/ \ No newline at end of file diff --git a/STORAGE.cmake b/STORAGE.cmake index 47f997c..344163c 100644 --- a/STORAGE.cmake +++ b/STORAGE.cmake @@ -7,27 +7,27 @@ SET(BA_PACKAGE_CMCONF_USE TRUE CACHE BOOL "Switch on for CMCONF use; off for testing purposes. Do not alter this setting unless you know what you are doing." ) +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/BA_PACKAGE_VARS.cmake") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/BA_PACKAGE.cmake") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/BA_PACKAGE_DEPS.cmake") + IF(BA_PACKAGE_CMCONF_USE) - BA_PACKAGE_PREREQ_CMCONF_INIT(template revision git_archive_path_template) + BA_PACKAGE_PREREQ_CMCONF_INIT(template revision git_archive_path_template http_header template_args_uri_escape) + BA_PACKAGE_VARS_SET(REVISION "${revision}") + BA_PACKAGE_VARS_SET(URI_TEMPLATE "${template}") + BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "${git_archive_path_template}") + BA_PACKAGE_VARS_SET(ESCAPE_TEMPLATE_ARGS "${template_args_uri_escape}") + BA_PACKAGE_VARS_SET(HTTP_HEADER "${http_header}") ENDIF() -IF(BA_PACKAGE_HTTP_AUTHORIZATION_HEADER) - IF(CMLIB_FILE_DOWNLOAD_AUTHORIZATION_HEADER) - MESSAGE(WARNING "HTTP Authorization header is defined but CMLIB_FILE_DOWNLOAD_AUTHORIZATION_HEADER is already set. Using BA_PACKAGE_HTTP_AUTHORIZATION_HEADER.") +BA_PACKAGE_VARS_GET(HTTP_HEADER http_header) +IF(http_header) + IF(CMLIB_FILE_DOWNLOAD_HTTP_HEADER AND (NOT CMLIB_FILE_DOWNLOAD_HTTP_HEADER STREQUAL http_header)) + MESSAGE(WARNING "BA_PACKAGE_HTTP_HEADER is defined but CMLIB_FILE_DOWNLOAD_HTTP_HEADER is already set. Using BA_PACKAGE HTTP_HEADER.") ENDIF() - SET(CMLIB_FILE_DOWNLOAD_AUTHORIZATION_HEADER "Authorization: ${BA_PACKAGE_HTTP_AUTHORIZATION_HEADER}" + SET(CMLIB_FILE_DOWNLOAD_HTTP_HEADER "${http_header}" CACHE STRING - "HTTP Authorization header set by Package Tracker to access the private repository" + "HTTP header set by Package Tracker to access the private repository" FORCE ) -ENDIF() - - - -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/BA_PACKAGE_VARS.cmake") -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/BA_PACKAGE.cmake") -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/BA_PACKAGE_DEPS.cmake") - -BA_PACKAGE_VARS_SET(REVISION "${revision}") -BA_PACKAGE_VARS_SET(URI_TEMPLATE "${template}") -BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "${git_archive_path_template}") +ENDIF() \ No newline at end of file diff --git a/cmake_tests/BA_PACKAGE/CMakeLists.txt b/cmake_tests/BA_PACKAGE/CMakeLists.txt index b87941f..2e59c27 100644 --- a/cmake_tests/BA_PACKAGE/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE/CMakeLists.txt @@ -14,11 +14,15 @@ TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/no_debug_skips_keyword") TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/git_path_template_args") TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/no_git_args_without_template") TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/cache_only_skips_dependency") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/escape_template_args_applied") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/escape_template_args_not_applied") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/output_var_set") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/archive_type_zip") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/empty_revision") -TEST_RUN_AND_CHECK_OUTPUT("package_name_dash_warning" - WARNING_MESSAGE "Package name.*contains invalid characters.*normalized" - ALWAYS_SCRIPT_MODE ON -) +#TEST_RUN_AND_CHECK_OUTPUT("package_name_dash_warning" +# WARNING_MESSAGE "Package name.*contains invalid characters.*normalized" +#) TEST_INVALID_CMAKE_RUN("${CMAKE_CURRENT_LIST_DIR}/invalid_package_name_error" "Invalid package name" diff --git a/cmake_tests/BA_PACKAGE/archive_type_zip/CMakeLists.txt b/cmake_tests/BA_PACKAGE/archive_type_zip/CMakeLists.txt new file mode 100644 index 0000000..8dc0016 --- /dev/null +++ b/cmake_tests/BA_PACKAGE/archive_type_zip/CMakeLists.txt @@ -0,0 +1,24 @@ +## +# Test: ARCHIVE_TYPE=ZIP is passed to CMLIB_DEPENDENCY +# +# Verifies that BA_PACKAGE passes ARCHIVE_TYPE ZIP to CMLIB_DEPENDENCY. +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_BA_PACKAGE_ARCHIVE_TYPE_ZIP) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../include_general.cmake") + +SET(CMAKE_BUILD_TYPE "Release") +BA_PACKAGE_VARS_SET(REVISION "main") +BA_PACKAGE_VARS_SET(URI_TEMPLATE "https://example.com////") +BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "") + +BA_PACKAGE(mypkg v1.0.0 "" "" output_path) + +TEST_VAR_TRUE(MOCK_CMLIB_DEPENDENCY_CALLED) +TEST_VAR_EQUALS_LITERAL(MOCK_CMLIB_DEPENDENCY_ARCHIVE_TYPE "ZIP") + diff --git a/cmake_tests/BA_PACKAGE/empty_revision/CMakeLists.txt b/cmake_tests/BA_PACKAGE/empty_revision/CMakeLists.txt new file mode 100644 index 0000000..2f06202 --- /dev/null +++ b/cmake_tests/BA_PACKAGE/empty_revision/CMakeLists.txt @@ -0,0 +1,25 @@ +## +# Test: Empty REVISION means no REVISION arg passed to template expansion +# +# Verifies that BA_PACKAGE does not pass REVISION to +# CMLIB_STORAGE_TEMPLATE_INSTANCE when REVISION is empty. +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_BA_PACKAGE_EMPTY_REVISION) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../include_general.cmake") + +SET(CMAKE_BUILD_TYPE "Release") +BA_PACKAGE_VARS_SET(REVISION "") +BA_PACKAGE_VARS_SET(URI_TEMPLATE "https://example.com///") +BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "") + +BA_PACKAGE(mypkg v1.0.0 "" "" output_path) + +TEST_VAR_TRUE(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_CALLED) +TEST_VAR_EQUALS_LITERAL(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_REVISION "") + diff --git a/cmake_tests/BA_PACKAGE/escape_template_args_applied/CMakeLists.txt b/cmake_tests/BA_PACKAGE/escape_template_args_applied/CMakeLists.txt new file mode 100644 index 0000000..99625fc --- /dev/null +++ b/cmake_tests/BA_PACKAGE/escape_template_args_applied/CMakeLists.txt @@ -0,0 +1,27 @@ +## ESCAPE_TEMPLATE_ARGS=ON replaces "/" with "%2F" in template arguments +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_BA_PACKAGE_ESCAPE_TEMPLATE_ARGS_APPLIED) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../include_general.cmake") + +SET(CMAKE_BUILD_TYPE "Release") +BA_PACKAGE_VARS_SET(REVISION "refs/heads/main") +BA_PACKAGE_VARS_SET(URI_TEMPLATE "https://example.com////") +BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "") +BA_PACKAGE_VARS_SET(ESCAPE_TEMPLATE_ARGS ON) + +# "my+pkg" is used for test purposes only — package_name cannot normally contain "+" +BA_PACKAGE(my+pkg v1.0.0 "" "" output_path) + +TEST_VAR_TRUE(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_CALLED) +TEST_VAR_EQUALS_LITERAL(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_TEMPLATE_VALUE "https://example.com////") +TEST_VAR_EQUALS_LITERAL(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_REVISION "refs%2Fheads%2Fmain") +TEST_VAR_EQUALS_LITERAL(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_GIT_PATH "mock_distro%2F0.0.0%2Fmock_arch") +TEST_VAR_EQUALS_LITERAL(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_PACKAGE_GROUP_NAME "my%2Bpkg") +TEST_VAR_EQUALS_LITERAL(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME "my%2Bpkg_v1.0.0_mock_arch_mock_distro_0.0.0.zip") + diff --git a/cmake_tests/BA_PACKAGE/escape_template_args_not_applied/CMakeLists.txt b/cmake_tests/BA_PACKAGE/escape_template_args_not_applied/CMakeLists.txt new file mode 100644 index 0000000..7318fca --- /dev/null +++ b/cmake_tests/BA_PACKAGE/escape_template_args_not_applied/CMakeLists.txt @@ -0,0 +1,27 @@ +## ESCAPE_TEMPLATE_ARGS=OFF keeps "/" unchanged in template arguments +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_BA_PACKAGE_ESCAPE_TEMPLATE_ARGS_NOT_APPLIED) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../include_general.cmake") + +SET(CMAKE_BUILD_TYPE "Release") +BA_PACKAGE_VARS_SET(REVISION "refs/heads/main") +BA_PACKAGE_VARS_SET(URI_TEMPLATE "https://example.com////") +BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "") +BA_PACKAGE_VARS_SET(ESCAPE_TEMPLATE_ARGS OFF) + +# "my+pkg" is used for test purposes only — package_name cannot normally contain "+" +BA_PACKAGE(my+pkg v1.0.0 "" "" output_path) + +TEST_VAR_TRUE(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_CALLED) +TEST_VAR_EQUALS_LITERAL(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_TEMPLATE_VALUE "https://example.com////") +TEST_VAR_EQUALS_LITERAL(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_REVISION "refs/heads/main") +TEST_VAR_EQUALS_LITERAL(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_GIT_PATH "mock_distro/0.0.0/mock_arch") +TEST_VAR_EQUALS_LITERAL(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_PACKAGE_GROUP_NAME "my+pkg") +TEST_VAR_EQUALS_LITERAL(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME "my+pkg_v1.0.0_mock_arch_mock_distro_0.0.0.zip") + diff --git a/cmake_tests/BA_PACKAGE/output_var_set/CMakeLists.txt b/cmake_tests/BA_PACKAGE/output_var_set/CMakeLists.txt new file mode 100644 index 0000000..1953a87 --- /dev/null +++ b/cmake_tests/BA_PACKAGE/output_var_set/CMakeLists.txt @@ -0,0 +1,25 @@ +## +# Test: output_var is set to the cache path returned by CMLIB_DEPENDENCY +# +# Verifies that BA_PACKAGE sets the output_var to the path returned +# by CMLIB_DEPENDENCY's OUTPUT_PATH_VAR. +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_BA_PACKAGE_OUTPUT_VAR_SET) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../include_general.cmake") + +SET(CMAKE_BUILD_TYPE "Release") +BA_PACKAGE_VARS_SET(REVISION "main") +BA_PACKAGE_VARS_SET(URI_TEMPLATE "https://example.com////") +BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "") + +BA_PACKAGE(mypkg v1.0.0 "" "" output_path) + +TEST_VAR_DEFINED(output_path) +TEST_VAR_EQUALS_LITERAL(output_path "/mock/cache/path") + diff --git a/cmake_tests/BA_PACKAGE_EXECUTABLE/CMakeLists.txt b/cmake_tests/BA_PACKAGE_EXECUTABLE/CMakeLists.txt index e7330ba..a39aa0b 100644 --- a/cmake_tests/BA_PACKAGE_EXECUTABLE/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_EXECUTABLE/CMakeLists.txt @@ -9,6 +9,8 @@ INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../TEST.cmake") TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/release_basic") TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/debug_suffix") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/no_debug_skips_suffix") TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/output_path_var_propagates") TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/cmake_prefix_path_updated") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/cache_only_forwarding") diff --git a/cmake_tests/BA_PACKAGE_EXECUTABLE/cache_only_forwarding/CMakeLists.txt b/cmake_tests/BA_PACKAGE_EXECUTABLE/cache_only_forwarding/CMakeLists.txt new file mode 100644 index 0000000..8e0d7eb --- /dev/null +++ b/cmake_tests/BA_PACKAGE_EXECUTABLE/cache_only_forwarding/CMakeLists.txt @@ -0,0 +1,27 @@ +## +# Test: CACHE_ONLY=ON is forwarded to BA_PACKAGE +# +# Verifies that BA_PACKAGE_EXECUTABLE with CACHE_ONLY=ON calls CMLIB_CACHE_GET +# and does not call CMLIB_DEPENDENCY. +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_EXEC_CACHE_ONLY_FORWARDING) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +SET(MOCK_CMLIB_CACHE_GET_RETURN_PATH "/mock/cached/path" CACHE INTERNAL "") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../include_general.cmake") +INCLUDE("${CMAKE_TESTS_ROOT}/mock/CMLIB_CACHE.cmake") + +SET(CMAKE_BUILD_TYPE "Release") +BA_PACKAGE_VARS_SET(REVISION "main") +BA_PACKAGE_VARS_SET(URI_TEMPLATE "https://example.com////") +BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "") + +BA_PACKAGE_EXECUTABLE(mypkg v1.0.0 CACHE_ONLY ON) + +TEST_VAR_TRUE(MOCK_CMLIB_CACHE_GET_CALLED) +TEST_VAR_FALSE(MOCK_CMLIB_DEPENDENCY_CALLED) + diff --git a/cmake_tests/BA_PACKAGE_EXECUTABLE/debug_suffix/CMakeLists.txt b/cmake_tests/BA_PACKAGE_EXECUTABLE/debug_suffix/CMakeLists.txt index cdee3af..86e78a1 100644 --- a/cmake_tests/BA_PACKAGE_EXECUTABLE/debug_suffix/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_EXECUTABLE/debug_suffix/CMakeLists.txt @@ -11,7 +11,6 @@ ENDIF() FIND_PACKAGE(CMLIB REQUIRED) -SET(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT "https://example.com/main/mock_distro/0.0.0/mock_arch/mypkg/mypkgd_v1.0.0_mock_arch_mock_distro_0.0.0.zip" CACHE INTERNAL "") INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../include_general.cmake") SET(CMAKE_BUILD_TYPE "Debug") @@ -24,18 +23,18 @@ BA_PACKAGE_EXECUTABLE(mypkg v1.0.0) TEST_VAR_TRUE(MOCK_CMLIB_DEPENDENCY_CALLED) -STRING(FIND "${MOCK_CMLIB_DEPENDENCY_URI}" "mypkgd_v1.0.0" found_debug_suffix) +STRING(FIND "${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME}" "mypkgd_v1.0.0" found_debug_suffix) IF(found_debug_suffix EQUAL -1) - MESSAGE(FATAL_ERROR "URI does not contain 'mypkgd_v1.0.0': ${MOCK_CMLIB_DEPENDENCY_URI}") + MESSAGE(FATAL_ERROR "ARCHIVE_NAME does not contain 'mypkgd_v1.0.0': ${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME}") ENDIF() -STRING(FIND "${MOCK_CMLIB_DEPENDENCY_URI}" "lib" found_lib) +STRING(FIND "${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME}" "lib" found_lib) IF(NOT found_lib EQUAL -1) - MESSAGE(FATAL_ERROR "URI should not contain 'lib' prefix: ${MOCK_CMLIB_DEPENDENCY_URI}") + MESSAGE(FATAL_ERROR "ARCHIVE_NAME should not contain 'lib': ${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME}") ENDIF() -STRING(FIND "${MOCK_CMLIB_DEPENDENCY_URI}" "-dev" found_dev) +STRING(FIND "${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME}" "-dev" found_dev) IF(NOT found_dev EQUAL -1) - MESSAGE(FATAL_ERROR "URI should not contain '-dev' suffix: ${MOCK_CMLIB_DEPENDENCY_URI}") + MESSAGE(FATAL_ERROR "ARCHIVE_NAME should not contain '-dev': ${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME}") ENDIF() diff --git a/cmake_tests/BA_PACKAGE_EXECUTABLE/no_debug_skips_suffix/CMakeLists.txt b/cmake_tests/BA_PACKAGE_EXECUTABLE/no_debug_skips_suffix/CMakeLists.txt new file mode 100644 index 0000000..b622a91 --- /dev/null +++ b/cmake_tests/BA_PACKAGE_EXECUTABLE/no_debug_skips_suffix/CMakeLists.txt @@ -0,0 +1,44 @@ +## +# Test: NO_DEBUG=ON skips debug suffix and build type keywords for executable +# +# Verifies that BA_PACKAGE_EXECUTABLE with NO_DEBUG=ON does not add DEBUG/RELEASE +# keywords and does not append 'd' suffix even in Debug build mode. +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_EXEC_NO_DEBUG_SKIPS_SUFFIX) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../include_general.cmake") + +SET(CMAKE_BUILD_TYPE "Debug") +BA_PACKAGE_VARS_SET(REVISION "main") +BA_PACKAGE_VARS_SET(URI_TEMPLATE "https://example.com////") +BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "") + +BA_PACKAGE_EXECUTABLE(mypkg v1.0.0 NO_DEBUG ON) + +TEST_VAR_TRUE(MOCK_CMLIB_DEPENDENCY_CALLED) + +STRING(FIND "${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME}" "mypkgd" found_debug_suffix) +IF(NOT found_debug_suffix EQUAL -1) + MESSAGE(FATAL_ERROR "ARCHIVE_NAME should NOT contain 'mypkgd' when NO_DEBUG=ON: ${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME}") +ENDIF() + +STRING(FIND "${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME}" "mypkg_v1.0.0" found_plain) +IF(found_plain EQUAL -1) + MESSAGE(FATAL_ERROR "ARCHIVE_NAME does not contain 'mypkg_v1.0.0': ${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME}") +ENDIF() + +LIST(FIND MOCK_CMLIB_DEPENDENCY_KEYWORDS "DEBUG" idx_debug) +IF(NOT idx_debug EQUAL -1) + MESSAGE(FATAL_ERROR "KEYWORDS should NOT contain DEBUG when NO_DEBUG=ON: ${MOCK_CMLIB_DEPENDENCY_KEYWORDS}") +ENDIF() + +LIST(FIND MOCK_CMLIB_DEPENDENCY_KEYWORDS "RELEASE" idx_release) +IF(NOT idx_release EQUAL -1) + MESSAGE(FATAL_ERROR "KEYWORDS should NOT contain RELEASE when NO_DEBUG=ON: ${MOCK_CMLIB_DEPENDENCY_KEYWORDS}") +ENDIF() + diff --git a/cmake_tests/BA_PACKAGE_EXECUTABLE/release_basic/CMakeLists.txt b/cmake_tests/BA_PACKAGE_EXECUTABLE/release_basic/CMakeLists.txt index 76746b6..b70e0ea 100644 --- a/cmake_tests/BA_PACKAGE_EXECUTABLE/release_basic/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_EXECUTABLE/release_basic/CMakeLists.txt @@ -11,7 +11,6 @@ ENDIF() FIND_PACKAGE(CMLIB REQUIRED) -SET(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT "https://example.com/main/mock_distro/0.0.0/mock_arch/mypkg/mypkg_v1.0.0_mock_arch_mock_distro_0.0.0.zip" CACHE INTERNAL "") INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../include_general.cmake") SET(CMAKE_BUILD_TYPE "Release") @@ -24,18 +23,18 @@ BA_PACKAGE_EXECUTABLE(mypkg v1.0.0) TEST_VAR_TRUE(MOCK_CMLIB_DEPENDENCY_CALLED) -STRING(FIND "${MOCK_CMLIB_DEPENDENCY_URI}" "mypkg_v1.0.0" found_pkg) +STRING(FIND "${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME}" "mypkg_v1.0.0" found_pkg) IF(found_pkg EQUAL -1) - MESSAGE(FATAL_ERROR "URI does not contain 'mypkg_v1.0.0': ${MOCK_CMLIB_DEPENDENCY_URI}") + MESSAGE(FATAL_ERROR "ARCHIVE_NAME does not contain 'mypkg_v1.0.0': ${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME}") ENDIF() -STRING(FIND "${MOCK_CMLIB_DEPENDENCY_URI}" "lib" found_lib) +STRING(FIND "${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME}" "lib" found_lib) IF(NOT found_lib EQUAL -1) - MESSAGE(FATAL_ERROR "URI should not contain 'lib' prefix: ${MOCK_CMLIB_DEPENDENCY_URI}") + MESSAGE(FATAL_ERROR "ARCHIVE_NAME should not contain 'lib': ${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME}") ENDIF() -STRING(FIND "${MOCK_CMLIB_DEPENDENCY_URI}" "-dev" found_dev) +STRING(FIND "${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME}" "-dev" found_dev) IF(NOT found_dev EQUAL -1) - MESSAGE(FATAL_ERROR "URI should not contain '-dev' suffix: ${MOCK_CMLIB_DEPENDENCY_URI}") + MESSAGE(FATAL_ERROR "ARCHIVE_NAME should not contain '-dev': ${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME}") ENDIF() diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/CMakeLists.txt b/cmake_tests/BA_PACKAGE_LIBRARY/CMakeLists.txt index bb71c4c..5f0a620 100644 --- a/cmake_tests/BA_PACKAGE_LIBRARY/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_LIBRARY/CMakeLists.txt @@ -7,8 +7,10 @@ FIND_PACKAGE(CMLIB REQUIRED) INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../TEST.cmake") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/release_basic") TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/debug_suffix") TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/no_debug_skips_suffix") TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/output_path_var_propagates") TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/cmake_prefix_path_updated") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/cache_only_forwarding") diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/cache_only_forwarding/CMakeLists.txt b/cmake_tests/BA_PACKAGE_LIBRARY/cache_only_forwarding/CMakeLists.txt new file mode 100644 index 0000000..61eb296 --- /dev/null +++ b/cmake_tests/BA_PACKAGE_LIBRARY/cache_only_forwarding/CMakeLists.txt @@ -0,0 +1,27 @@ +## +# Test: CACHE_ONLY=ON is forwarded to BA_PACKAGE +# +# Verifies that BA_PACKAGE_LIBRARY with CACHE_ONLY=ON calls CMLIB_CACHE_GET +# and does not call CMLIB_DEPENDENCY. +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_LIB_CACHE_ONLY_FORWARDING) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +SET(MOCK_CMLIB_CACHE_GET_RETURN_PATH "/mock/cached/path" CACHE INTERNAL "") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../include_general.cmake") +INCLUDE("${CMAKE_TESTS_ROOT}/mock/CMLIB_CACHE.cmake") + +SET(CMAKE_BUILD_TYPE "Release") +BA_PACKAGE_VARS_SET(REVISION "main") +BA_PACKAGE_VARS_SET(URI_TEMPLATE "https://example.com////") +BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "") + +BA_PACKAGE_LIBRARY(mypkg v1.0.0 CACHE_ONLY ON) + +TEST_VAR_TRUE(MOCK_CMLIB_CACHE_GET_CALLED) +TEST_VAR_FALSE(MOCK_CMLIB_DEPENDENCY_CALLED) + diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/debug_suffix/CMakeLists.txt b/cmake_tests/BA_PACKAGE_LIBRARY/debug_suffix/CMakeLists.txt index 141ffb9..87d9903 100644 --- a/cmake_tests/BA_PACKAGE_LIBRARY/debug_suffix/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_LIBRARY/debug_suffix/CMakeLists.txt @@ -11,7 +11,6 @@ ENDIF() FIND_PACKAGE(CMLIB REQUIRED) -SET(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT "https://example.com/main/mock_distro/0.0.0/mock_arch/mypkg/libmypkgd-dev_v1.0.0_mock_arch_mock_distro_0.0.0.zip" CACHE INTERNAL "") INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../include_general.cmake") SET(CMAKE_BUILD_TYPE "Debug") @@ -23,8 +22,8 @@ BA_PACKAGE_LIBRARY(mypkg v1.0.0) TEST_VAR_TRUE(MOCK_CMLIB_DEPENDENCY_CALLED) -STRING(FIND "${MOCK_CMLIB_DEPENDENCY_URI}" "libmypkgd-dev" found_debug_suffix) +STRING(FIND "${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME}" "libmypkgd-dev" found_debug_suffix) IF(found_debug_suffix EQUAL -1) - MESSAGE(FATAL_ERROR "URI does not contain 'd-dev' suffix: ${MOCK_CMLIB_DEPENDENCY_URI}") + MESSAGE(FATAL_ERROR "ARCHIVE_NAME does not contain 'libmypkgd-dev': ${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME}") ENDIF() diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/no_debug_skips_suffix/CMakeLists.txt b/cmake_tests/BA_PACKAGE_LIBRARY/no_debug_skips_suffix/CMakeLists.txt index db139bb..e43833e 100644 --- a/cmake_tests/BA_PACKAGE_LIBRARY/no_debug_skips_suffix/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_LIBRARY/no_debug_skips_suffix/CMakeLists.txt @@ -11,7 +11,6 @@ ENDIF() FIND_PACKAGE(CMLIB REQUIRED) -SET(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT "https://example.com/main/mock_distro/0.0.0/mock_arch/mypkg/libmypkg-dev_v1.0.0_mock_arch_mock_distro_0.0.0.zip" CACHE INTERNAL "") INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../include_general.cmake") SET(CMAKE_BUILD_TYPE "Debug") @@ -23,13 +22,23 @@ BA_PACKAGE_LIBRARY(mypkg v1.0.0 NO_DEBUG ON) TEST_VAR_TRUE(MOCK_CMLIB_DEPENDENCY_CALLED) -STRING(FIND "${MOCK_CMLIB_DEPENDENCY_URI}" "libmypkgd-dev" found_debug_suffix) +STRING(FIND "${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME}" "libmypkgd-dev" found_debug_suffix) IF(NOT found_debug_suffix EQUAL -1) - MESSAGE(FATAL_ERROR "URI should NOT contain 'd-dev' suffix when NO_DEBUG=ON: ${MOCK_CMLIB_DEPENDENCY_URI}") + MESSAGE(FATAL_ERROR "ARCHIVE_NAME should NOT contain 'libmypkgd-dev' when NO_DEBUG=ON: ${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME}") ENDIF() -STRING(FIND "${MOCK_CMLIB_DEPENDENCY_URI}" "libmypkg-dev" found_release_suffix) +STRING(FIND "${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME}" "libmypkg-dev" found_release_suffix) IF(found_release_suffix EQUAL -1) - MESSAGE(FATAL_ERROR "URI should contain '-dev' suffix (no 'd'): ${MOCK_CMLIB_DEPENDENCY_URI}") + MESSAGE(FATAL_ERROR "ARCHIVE_NAME does not contain 'libmypkg-dev': ${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME}") +ENDIF() + +LIST(FIND MOCK_CMLIB_DEPENDENCY_KEYWORDS "RELEASE" idx_release) +IF(NOT idx_release EQUAL -1) + MESSAGE(FATAL_ERROR "KEYWORDS should NOT contain RELEASE when NO_DEBUG=ON: ${MOCK_CMLIB_DEPENDENCY_KEYWORDS}") +ENDIF() + +LIST(FIND MOCK_CMLIB_DEPENDENCY_KEYWORDS "DEBUG" idx_debug) +IF(NOT idx_debug EQUAL -1) + MESSAGE(FATAL_ERROR "KEYWORDS should NOT contain DEBUG when NO_DEBUG=ON: ${MOCK_CMLIB_DEPENDENCY_KEYWORDS}") ENDIF() diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/release_basic/CMakeLists.txt b/cmake_tests/BA_PACKAGE_LIBRARY/release_basic/CMakeLists.txt new file mode 100644 index 0000000..6e84f94 --- /dev/null +++ b/cmake_tests/BA_PACKAGE_LIBRARY/release_basic/CMakeLists.txt @@ -0,0 +1,34 @@ +## +# Test: Release build uses "lib" prefix and "-dev" suffix for library package +# +# Verifies that BA_PACKAGE_LIBRARY in Release mode produces a URI with +# "lib" prefix and "-dev" suffix (e.g., libmypkg-dev_v1.0.0). +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_LIB_RELEASE_BASIC) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../include_general.cmake") + +SET(CMAKE_BUILD_TYPE "Release") +BA_PACKAGE_VARS_SET(REVISION "main") +BA_PACKAGE_VARS_SET(URI_TEMPLATE "https://example.com////") +BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "") + +BA_PACKAGE_LIBRARY(mypkg v1.0.0) + +TEST_VAR_TRUE(MOCK_CMLIB_DEPENDENCY_CALLED) + +STRING(FIND "${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME}" "libmypkg-dev" found_lib_dev) +IF(found_lib_dev EQUAL -1) + MESSAGE(FATAL_ERROR "ARCHIVE_NAME does not contain 'libmypkg-dev': ${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME}") +ENDIF() + +STRING(FIND "${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME}" "libmypkgd-dev" found_debug_suffix) +IF(NOT found_debug_suffix EQUAL -1) + MESSAGE(FATAL_ERROR "ARCHIVE_NAME should NOT contain 'libmypkgd-dev' in Release: ${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME}") +ENDIF() + diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt index 82e3f6c..dc829ab 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt @@ -17,11 +17,14 @@ TEST_RUN_AND_CHECK_OUTPUT("env_var_with_local_use_warning" ) TEST_RUN_AND_CHECK_OUTPUT("git_archive_with_http_header_warning" - WARNING_MESSAGE "BA_PACKAGE_HTTP_AUTHORIZATION_HEADER is defined together with.*BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE.*ARCHIVE_PATH_TEMPLATE implies the.*URI type is GIT but HTTP_HEADERS are used only for raw HTTP Downloads" + WARNING_MESSAGE "BA_PACKAGE_HTTP_HEADER is defined together with.*BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE.*ARCHIVE_PATH_TEMPLATE implies the.*URI type is GIT but HTTP_HEADERS are used only for raw HTTP Downloads" ALWAYS_SCRIPT_MODE ON ) TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/git_archive_path_returned") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/http_header_returned") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/escape_template_args_on_returned") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/escape_template_args_off_returned") TEST_INVALID_CMAKE_RUN("${CMAKE_CURRENT_LIST_DIR}/invalid_local_path" "Local repository path variable is not a directory" diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_precedence/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_precedence/CMakeLists.txt index 5df98b9..c0a7c9d 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_precedence/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_precedence/CMakeLists.txt @@ -11,21 +11,24 @@ INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../VARS.cmake") INCLUDE("${CMAKE_TESTS_ROOT}/TEST.cmake") SET(TEST_CMCONF_BA_PACKAGE_LOCAL_USE OFF) -SET(TEST_CMCONF_BA_PACKAGE_HTTP_AUTHORIZATION_HEADER "") +SET(TEST_CMCONF_BA_PACKAGE_HTTP_HEADER "") SET(TEST_CMCONF_BA_PACKAGE_URI_REVISION "v1.0.0") SET(TEST_CMCONF_BA_PACKAGE_URI_TEMPLATE_REMOTE "https://example.com/packages/") SET(TEST_CMCONF_BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE "") +SET(TEST_CMCONF_BA_PACKAGE_TEMPLATE_ARGS_URI_ESCAPE OFF) INCLUDE("${CMAKE_TESTS_ROOT}/mock/CMCONF.cmake") INCLUDE("${PACKAGER_PROJECT_ROOT}/helpers/BA_PACKAGE_PREREQ.cmake") SET(ENV{BA_PACKAGE_LOCAL_PATH} "/tmp") -BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision result_git_archive_path) +BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision result_git_archive_path result_http_header result_escape) UNSET(ENV{BA_PACKAGE_LOCAL_PATH}) TEST_VAR_EQUALS_LITERAL(result_template "file:///tmp/package///") TEST_VAR_EQUALS_LITERAL(result_revision "") TEST_VAR_EQUALS_LITERAL(result_git_archive_path "") +TEST_VAR_EQUALS_LITERAL(result_http_header "") +TEST_VAR_EQUALS_LITERAL(result_escape "") diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_with_local_use_warning/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_with_local_use_warning/CMakeLists.txt index 1cb17a1..859acb9 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_with_local_use_warning/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_with_local_use_warning/CMakeLists.txt @@ -18,11 +18,13 @@ INCLUDE("${PACKAGER_PROJECT_ROOT}/helpers/BA_PACKAGE_PREREQ.cmake") SET(ENV{BA_PACKAGE_LOCAL_PATH} "/tmp") -BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision result_git_archive_path) +BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision result_git_archive_path result_http_header result_escape) UNSET(ENV{BA_PACKAGE_LOCAL_PATH}) TEST_VAR_EQUALS_LITERAL(result_template "file:///tmp/package///") TEST_VAR_EQUALS_LITERAL(result_revision "") TEST_VAR_EQUALS_LITERAL(result_git_archive_path "") +TEST_VAR_EQUALS_LITERAL(result_http_header "") +TEST_VAR_EQUALS_LITERAL(result_escape "") diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/escape_template_args_off_returned/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/escape_template_args_off_returned/CMakeLists.txt new file mode 100644 index 0000000..7b0bc01 --- /dev/null +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/escape_template_args_off_returned/CMakeLists.txt @@ -0,0 +1,32 @@ +## BA_PACKAGE_LOCAL_USE=OFF with TEMPLATE_ARGS_URI_ESCAPE=OFF returns OFF +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_ESCAPE_TEMPLATE_ARGS_OFF_RETURNED) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../VARS.cmake") +INCLUDE("${CMAKE_TESTS_ROOT}/TEST.cmake") + +SET(TEST_CMCONF_BA_PACKAGE_LOCAL_USE OFF) +SET(TEST_CMCONF_BA_PACKAGE_HTTP_HEADER "Authorization: Bearer token/with/slashes") +SET(TEST_CMCONF_BA_PACKAGE_URI_REVISION "refs/heads/main") +SET(TEST_CMCONF_BA_PACKAGE_URI_TEMPLATE_REMOTE "https://example.com////") +SET(TEST_CMCONF_BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE "packages///") +SET(TEST_CMCONF_BA_PACKAGE_TEMPLATE_ARGS_URI_ESCAPE OFF) + +INCLUDE("${CMAKE_TESTS_ROOT}/mock/CMCONF.cmake") +INCLUDE("${PACKAGER_PROJECT_ROOT}/helpers/BA_PACKAGE_PREREQ.cmake") + +UNSET(ENV{BA_PACKAGE_LOCAL_PATH}) + +BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision result_git_archive_path result_http_header result_escape) + +TEST_VAR_EQUALS_LITERAL(result_template "https://example.com////") +TEST_VAR_EQUALS_LITERAL(result_revision "refs/heads/main") +TEST_VAR_EQUALS_LITERAL(result_git_archive_path "packages///") +TEST_VAR_EQUALS_LITERAL(result_http_header "Authorization: Bearer token/with/slashes") +TEST_VAR_EQUALS_LITERAL(result_escape "OFF") + diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/escape_template_args_on_returned/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/escape_template_args_on_returned/CMakeLists.txt new file mode 100644 index 0000000..f3b80b4 --- /dev/null +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/escape_template_args_on_returned/CMakeLists.txt @@ -0,0 +1,32 @@ +## BA_PACKAGE_LOCAL_USE=OFF with TEMPLATE_ARGS_URI_ESCAPE=ON returns ON +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_ESCAPE_TEMPLATE_ARGS_ON_RETURNED) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../VARS.cmake") +INCLUDE("${CMAKE_TESTS_ROOT}/TEST.cmake") + +SET(TEST_CMCONF_BA_PACKAGE_LOCAL_USE OFF) +SET(TEST_CMCONF_BA_PACKAGE_HTTP_HEADER "Authorization: Bearer token/with/slashes") +SET(TEST_CMCONF_BA_PACKAGE_URI_REVISION "refs/heads/main") +SET(TEST_CMCONF_BA_PACKAGE_URI_TEMPLATE_REMOTE "https://example.com////") +SET(TEST_CMCONF_BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE "packages///") +SET(TEST_CMCONF_BA_PACKAGE_TEMPLATE_ARGS_URI_ESCAPE ON) + +INCLUDE("${CMAKE_TESTS_ROOT}/mock/CMCONF.cmake") +INCLUDE("${PACKAGER_PROJECT_ROOT}/helpers/BA_PACKAGE_PREREQ.cmake") + +UNSET(ENV{BA_PACKAGE_LOCAL_PATH}) + +BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision result_git_archive_path result_http_header result_escape) + +TEST_VAR_EQUALS_LITERAL(result_template "https://example.com////") +TEST_VAR_EQUALS_LITERAL(result_revision "refs/heads/main") +TEST_VAR_EQUALS_LITERAL(result_git_archive_path "packages///") +TEST_VAR_EQUALS_LITERAL(result_http_header "Authorization: Bearer token/with/slashes") +TEST_VAR_EQUALS_LITERAL(result_escape "ON") + diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_path_returned/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_path_returned/CMakeLists.txt index 0b87aa0..4831c46 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_path_returned/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_path_returned/CMakeLists.txt @@ -11,19 +11,22 @@ INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../VARS.cmake") INCLUDE("${CMAKE_TESTS_ROOT}/TEST.cmake") SET(TEST_CMCONF_BA_PACKAGE_LOCAL_USE OFF) -SET(TEST_CMCONF_BA_PACKAGE_HTTP_AUTHORIZATION_HEADER "") +SET(TEST_CMCONF_BA_PACKAGE_HTTP_HEADER "") SET(TEST_CMCONF_BA_PACKAGE_URI_REVISION "v1.0.0") SET(TEST_CMCONF_BA_PACKAGE_URI_TEMPLATE_REMOTE "https://example.com/packages/") SET(TEST_CMCONF_BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE "packages///") +SET(TEST_CMCONF_BA_PACKAGE_TEMPLATE_ARGS_URI_ESCAPE OFF) INCLUDE("${CMAKE_TESTS_ROOT}/mock/CMCONF.cmake") INCLUDE("${PACKAGER_PROJECT_ROOT}/helpers/BA_PACKAGE_PREREQ.cmake") UNSET(ENV{BA_PACKAGE_LOCAL_PATH}) -BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision result_git_archive_path) +BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision result_git_archive_path result_http_header result_escape) TEST_VAR_EQUALS_LITERAL(result_template "https://example.com/packages/") TEST_VAR_EQUALS_LITERAL(result_revision "v1.0.0") TEST_VAR_EQUALS_LITERAL(result_git_archive_path "packages///") +TEST_VAR_EQUALS_LITERAL(result_http_header "") +TEST_VAR_EQUALS_LITERAL(result_escape "OFF") diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_with_http_header_warning/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_with_http_header_warning/CMakeLists.txt index a2f0eab..cd7eca6 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_with_http_header_warning/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_with_http_header_warning/CMakeLists.txt @@ -1,4 +1,4 @@ -## Warning when both BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE and BA_PACKAGE_HTTP_AUTHORIZATION_HEADER are set +## Warning when both BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE and BA_PACKAGE_HTTP_HEADER are set # IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) CMAKE_MINIMUM_REQUIRED(VERSION 3.21) @@ -11,19 +11,22 @@ INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../VARS.cmake") INCLUDE("${CMAKE_TESTS_ROOT}/TEST.cmake") SET(TEST_CMCONF_BA_PACKAGE_LOCAL_USE OFF) -SET(TEST_CMCONF_BA_PACKAGE_HTTP_AUTHORIZATION_HEADER "Bearer token") +SET(TEST_CMCONF_BA_PACKAGE_HTTP_HEADER "Authorization: Bearer token") SET(TEST_CMCONF_BA_PACKAGE_URI_REVISION "v1.0.0") SET(TEST_CMCONF_BA_PACKAGE_URI_TEMPLATE_REMOTE "https://example.com/packages/") SET(TEST_CMCONF_BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE "packages///") +SET(TEST_CMCONF_BA_PACKAGE_TEMPLATE_ARGS_URI_ESCAPE OFF) INCLUDE("${CMAKE_TESTS_ROOT}/mock/CMCONF.cmake") INCLUDE("${PACKAGER_PROJECT_ROOT}/helpers/BA_PACKAGE_PREREQ.cmake") UNSET(ENV{BA_PACKAGE_LOCAL_PATH}) -BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision result_git_archive_path) +BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision result_git_archive_path result_http_header result_escape) TEST_VAR_EQUALS_LITERAL(result_template "https://example.com/packages/") TEST_VAR_EQUALS_LITERAL(result_revision "v1.0.0") TEST_VAR_EQUALS_LITERAL(result_git_archive_path "packages///") +TEST_VAR_EQUALS_LITERAL(result_http_header "Authorization: Bearer token") +TEST_VAR_EQUALS_LITERAL(result_escape "OFF") diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/http_header_returned/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/http_header_returned/CMakeLists.txt new file mode 100644 index 0000000..3da86e9 --- /dev/null +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/http_header_returned/CMakeLists.txt @@ -0,0 +1,32 @@ +## BA_PACKAGE_LOCAL_USE=OFF returns configured HTTP_HEADER +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_HTTP_HEADER_RETURNED) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../VARS.cmake") +INCLUDE("${CMAKE_TESTS_ROOT}/TEST.cmake") + +SET(TEST_CMCONF_BA_PACKAGE_LOCAL_USE OFF) +SET(TEST_CMCONF_BA_PACKAGE_HTTP_HEADER "Authorization: Bearer mytoken") +SET(TEST_CMCONF_BA_PACKAGE_URI_REVISION "v1.0.0") +SET(TEST_CMCONF_BA_PACKAGE_URI_TEMPLATE_REMOTE "https://example.com/packages/") +SET(TEST_CMCONF_BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE "") +SET(TEST_CMCONF_BA_PACKAGE_TEMPLATE_ARGS_URI_ESCAPE OFF) + +INCLUDE("${CMAKE_TESTS_ROOT}/mock/CMCONF.cmake") +INCLUDE("${PACKAGER_PROJECT_ROOT}/helpers/BA_PACKAGE_PREREQ.cmake") + +UNSET(ENV{BA_PACKAGE_LOCAL_PATH}) + +BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision result_git_archive_path result_http_header result_escape) + +TEST_VAR_EQUALS_LITERAL(result_template "https://example.com/packages/") +TEST_VAR_EQUALS_LITERAL(result_revision "v1.0.0") +TEST_VAR_EQUALS_LITERAL(result_git_archive_path "") +TEST_VAR_EQUALS_LITERAL(result_http_header "Authorization: Bearer mytoken") +TEST_VAR_EQUALS_LITERAL(result_escape "OFF") + diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/invalid_local_path/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/invalid_local_path/CMakeLists.txt index b198a80..48e805d 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/invalid_local_path/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/invalid_local_path/CMakeLists.txt @@ -18,5 +18,5 @@ INCLUDE("${PACKAGER_PROJECT_ROOT}/helpers/BA_PACKAGE_PREREQ.cmake") UNSET(ENV{BA_PACKAGE_LOCAL_PATH}) -BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision result_git_archive_path) +BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision result_git_archive_path result_http_header result_escape) diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_off/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_off/CMakeLists.txt index 2e76b83..25939f5 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_off/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_off/CMakeLists.txt @@ -11,19 +11,22 @@ INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../VARS.cmake") INCLUDE("${CMAKE_TESTS_ROOT}/TEST.cmake") SET(TEST_CMCONF_BA_PACKAGE_LOCAL_USE OFF) -SET(TEST_CMCONF_BA_PACKAGE_HTTP_AUTHORIZATION_HEADER "") +SET(TEST_CMCONF_BA_PACKAGE_HTTP_HEADER "") SET(TEST_CMCONF_BA_PACKAGE_URI_REVISION "v1.0.0") SET(TEST_CMCONF_BA_PACKAGE_URI_TEMPLATE_REMOTE "https://example.com/packages/") SET(TEST_CMCONF_BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE "") +SET(TEST_CMCONF_BA_PACKAGE_TEMPLATE_ARGS_URI_ESCAPE OFF) INCLUDE("${CMAKE_TESTS_ROOT}/mock/CMCONF.cmake") INCLUDE("${PACKAGER_PROJECT_ROOT}/helpers/BA_PACKAGE_PREREQ.cmake") UNSET(ENV{BA_PACKAGE_LOCAL_PATH}) -BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision result_git_archive_path) +BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision result_git_archive_path result_http_header result_escape) TEST_VAR_EQUALS_LITERAL(result_template "https://example.com/packages/") TEST_VAR_EQUALS_LITERAL(result_revision "v1.0.0") TEST_VAR_EQUALS_LITERAL(result_git_archive_path "") +TEST_VAR_EQUALS_LITERAL(result_http_header "") +TEST_VAR_EQUALS_LITERAL(result_escape "OFF") diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_on/CMakeLists.txt b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_on/CMakeLists.txt index 4bfa996..2601828 100644 --- a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_on/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_on/CMakeLists.txt @@ -18,9 +18,11 @@ INCLUDE("${PACKAGER_PROJECT_ROOT}/helpers/BA_PACKAGE_PREREQ.cmake") UNSET(ENV{BA_PACKAGE_LOCAL_PATH}) -BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision result_git_archive_path) +BA_PACKAGE_PREREQ_CMCONF_INIT(result_template result_revision result_git_archive_path result_http_header result_escape) TEST_VAR_EQUALS_LITERAL(result_template "file:///tmp/package///") TEST_VAR_EQUALS_LITERAL(result_revision "") TEST_VAR_EQUALS_LITERAL(result_git_archive_path "") +TEST_VAR_EQUALS_LITERAL(result_http_header "") +TEST_VAR_EQUALS_LITERAL(result_escape "") diff --git a/cmake_tests/README.md b/cmake_tests/README.md new file mode 100644 index 0000000..074d060 --- /dev/null +++ b/cmake_tests/README.md @@ -0,0 +1,27 @@ +# CMake Unit Tests + +Unit tests for individual CMake modules (BA_PACKAGE_VARS, BA_PACKAGE, BA_PACKAGE_LIBRARY, etc.). + +Tests use mocks to isolate modules from external dependencies (CMLIB, CMDEF, etc.). +Each test is a standalone CMakeLists.txt in its own subdirectory. + +## Run + +From repository root: + +``` +cmake -P cmake_tests/CMakeLists.txt +``` + +## Mocks + +See [mock/MOCK_VARIABLES.md] for a detailed description of the mocks and the variables they set. + +## Difference from [test/] + +`cmake_tests/` — unit tests for CMake module logic using mocks, no network or build required. + +[test/] — integration tests that build a real application, install dependencies, and verify installed file structure. + +[test/]: ../test/ +[mock/MOCK_VARIABLES.md]: mock/MOCK_VARIABLES.md diff --git a/cmake_tests/mock/CMLIB_DEPENDENCY.cmake b/cmake_tests/mock/CMLIB_DEPENDENCY.cmake index 09694ed..704d502 100644 --- a/cmake_tests/mock/CMLIB_DEPENDENCY.cmake +++ b/cmake_tests/mock/CMLIB_DEPENDENCY.cmake @@ -12,6 +12,7 @@ # MOCK_CMLIB_DEPENDENCY_TYPE - TYPE argument value # MOCK_CMLIB_DEPENDENCY_URI - URI argument value # MOCK_CMLIB_DEPENDENCY_GIT_REVISION - GIT_REVISION argument value +# MOCK_CMLIB_DEPENDENCY_ARCHIVE_TYPE - ARCHIVE_TYPE argument value # MOCK_CMLIB_DEPENDENCY_GIT_PATH - GIT_PATH argument value # # The mock returns "/mock/cache/path" via OUTPUT_PATH_VAR if specified. @@ -41,6 +42,10 @@ SET(MOCK_CMLIB_DEPENDENCY_GIT_REVISION "" CACHE INTERNAL "Captured GIT_REVISION argument value" ) +SET(MOCK_CMLIB_DEPENDENCY_ARCHIVE_TYPE "" + CACHE INTERNAL + "Captured ARCHIVE_TYPE argument value" +) SET(MOCK_CMLIB_DEPENDENCY_GIT_PATH "" CACHE INTERNAL "Captured GIT_PATH argument value" @@ -58,6 +63,7 @@ FUNCTION(CMLIB_DEPENDENCY) KEYWORDS ONE_VALUE TYPE + ARCHIVE_TYPE URI GIT_REVISION GIT_PATH @@ -67,6 +73,7 @@ FUNCTION(CMLIB_DEPENDENCY) ) SET_PROPERTY(CACHE MOCK_CMLIB_DEPENDENCY_KEYWORDS PROPERTY VALUE "${__KEYWORDS}") SET_PROPERTY(CACHE MOCK_CMLIB_DEPENDENCY_TYPE PROPERTY VALUE "${__TYPE}") + SET_PROPERTY(CACHE MOCK_CMLIB_DEPENDENCY_ARCHIVE_TYPE PROPERTY VALUE "${__ARCHIVE_TYPE}") SET_PROPERTY(CACHE MOCK_CMLIB_DEPENDENCY_URI PROPERTY VALUE "${__URI}") SET_PROPERTY(CACHE MOCK_CMLIB_DEPENDENCY_GIT_REVISION PROPERTY VALUE "${__GIT_REVISION}") SET_PROPERTY(CACHE MOCK_CMLIB_DEPENDENCY_GIT_PATH PROPERTY VALUE "${__GIT_PATH}") diff --git a/cmake_tests/mock/CMLIB_STORAGE.cmake b/cmake_tests/mock/CMLIB_STORAGE.cmake index 0b78c96..7fa9f4e 100644 --- a/cmake_tests/mock/CMLIB_STORAGE.cmake +++ b/cmake_tests/mock/CMLIB_STORAGE.cmake @@ -38,6 +38,22 @@ SET(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME "" CACHE INTERNAL "Captured ARCHIVE_NAME argument" ) +SET(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_GIT_PATH "" + CACHE INTERNAL + "Captured GIT_PATH argument" +) +SET(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_REVISION "" + CACHE INTERNAL + "Captured REVISION argument" +) +SET(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_PACKAGE_GROUP_NAME "" + CACHE INTERNAL + "Captured PACKAGE_GROUP_NAME argument" +) +SET(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_TEMPLATE_VALUE "" + CACHE INTERNAL + "Captured template string value (dereferenced from template variable name)" +) ## # Mock implementation of CMLIB_STORAGE_TEMPLATE_INSTANCE @@ -47,6 +63,7 @@ SET(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME "" FUNCTION(CMLIB_STORAGE_TEMPLATE_INSTANCE output_var template_var_name) SET_PROPERTY(CACHE MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_CALLED PROPERTY VALUE TRUE) SET_PROPERTY(CACHE MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_TEMPLATE_VAR PROPERTY VALUE "${template_var_name}") + SET_PROPERTY(CACHE MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_TEMPLATE_VALUE PROPERTY VALUE "${${template_var_name}}") CMLIB_PARSE_ARGUMENTS( ONE_VALUE REVISION @@ -59,6 +76,15 @@ FUNCTION(CMLIB_STORAGE_TEMPLATE_INSTANCE output_var template_var_name) IF(__ARCHIVE_NAME) SET_PROPERTY(CACHE MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME PROPERTY VALUE "${__ARCHIVE_NAME}") ENDIF() + IF(__GIT_PATH) + SET_PROPERTY(CACHE MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_GIT_PATH PROPERTY VALUE "${__GIT_PATH}") + ENDIF() + IF(__REVISION) + SET_PROPERTY(CACHE MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_REVISION PROPERTY VALUE "${__REVISION}") + ENDIF() + IF(__PACKAGE_GROUP_NAME) + SET_PROPERTY(CACHE MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_PACKAGE_GROUP_NAME PROPERTY VALUE "${__PACKAGE_GROUP_NAME}") + ENDIF() SET(result "https://mock.example.com/mock_expanded_uri") IF(NOT "${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT}" STREQUAL "") SET(result "${MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT}") diff --git a/cmake_tests/mock/MOCK_VARIABLES.md b/cmake_tests/mock/MOCK_VARIABLES.md new file mode 100644 index 0000000..af50c61 --- /dev/null +++ b/cmake_tests/mock/MOCK_VARIABLES.md @@ -0,0 +1,145 @@ +# Mock Variable Dependencies + +## Data Flow Through BA_PACKAGE + +```mermaid +flowchart TD + subgraph CMDEF_VARS["CMDEF_VARS.cmake (constants)"] + ARCH["CMDEF_ARCHITECTURE\n= 'mock_arch'"] + DISTRO["CMDEF_DISTRO_ID\n= 'mock_distro'"] + VER["CMDEF_DISTRO_VERSION_ID\n= '0.0.0'"] + end + + subgraph CMUTIL["CMUTIL.cmake"] + CMUTIL_CFG["config: MOCK_CMUTIL_PLATFORM_STRING\n(optional override)"] + CMUTIL_CAP["captured: MOCK_CMUTIL_PLATFORM_STRING_CONSTRUCT_CALLED"] + end + + subgraph BA["BA_PACKAGE (production code)"] + PLAT["platform_string"] + PKG["package_string\n= {prefix}{name}{suffix}_{version}_{platform}.zip"] + GIT["git_path\n= {DISTRO_ID}/{VERSION_ID}/{ARCH}"] + KW["keywords\n= BACPACK;{NAME};{BUILD_TYPE}"] + RF["remote_file"] + end + + subgraph STORAGE["CMLIB_STORAGE.cmake"] + ST_CFG["config: MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT\n(optional override, default: mock URL)"] + ST_CALLED["captured: MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_CALLED"] + ST_TVAR["captured: MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_TEMPLATE_VAR"] + ST_TVAL["captured: MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_TEMPLATE_VALUE"] + ST_AN["captured: MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME"] + ST_GP["captured: MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_GIT_PATH"] + ST_REV["captured: MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_REVISION"] + ST_PGN["captured: MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_PACKAGE_GROUP_NAME"] + end + + subgraph DEP["CMLIB_DEPENDENCY.cmake"] + DEP_CALLED["captured: MOCK_CMLIB_DEPENDENCY_CALLED"] + DEP_URI["captured: MOCK_CMLIB_DEPENDENCY_URI"] + DEP_KW["captured: MOCK_CMLIB_DEPENDENCY_KEYWORDS"] + DEP_TYPE["captured: MOCK_CMLIB_DEPENDENCY_TYPE"] + DEP_ATYPE["captured: MOCK_CMLIB_DEPENDENCY_ARCHIVE_TYPE"] + DEP_GREV["captured: MOCK_CMLIB_DEPENDENCY_GIT_REVISION"] + DEP_GPATH["captured: MOCK_CMLIB_DEPENDENCY_GIT_PATH"] + end + + subgraph CACHE["CMLIB_CACHE.cmake (CACHE_ONLY path)"] + CA_CFG["config: MOCK_CMLIB_CACHE_GET_RETURN_PATH\n(empty = cache miss)"] + CA_CALLED["captured: MOCK_CMLIB_CACHE_GET_CALLED"] + CA_KW["captured: MOCK_CMLIB_CACHE_GET_KEYWORDS"] + end + + ARCH --> PLAT + DISTRO --> PLAT + VER --> PLAT + CMUTIL_CFG -.->|overrides| PLAT + + ARCH --> GIT + DISTRO --> GIT + VER --> GIT + + PLAT --> PKG + + PKG --> ST_AN + GIT --> ST_GP + ST_CFG -->|returned as| RF + RF --> DEP_URI + + KW --> DEP_KW + KW --> CA_KW +``` + +## Variable Categories + +### Configuration (set by test before calling production code) + +| Variable | Mock | Default | Effect | +|---|---|---|---| +| `MOCK_CMUTIL_PLATFORM_STRING` | CMUTIL | constructed from args | Overrides platform_string | +| `MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT` | CMLIB_STORAGE | `https://mock.example.com/mock_expanded_uri` | Returned as `remote_file` → captured in `MOCK_CMLIB_DEPENDENCY_URI` | +| `MOCK_CMLIB_CACHE_GET_RETURN_PATH` | CMLIB_CACHE | empty string, simulates cache miss | Returned as `cache_path` | +| `TEST_CMCONF_` | CMCONF | no default, must be defined by test | Returned by `CMCONF_GET(var_name)` | + +### Captured (set by mock during production code execution) + +| Variable | Captured From | Source in BA_PACKAGE | +|---|---|---| +| `MOCK_CMUTIL_PLATFORM_STRING_CONSTRUCT_CALLED` | function call | `CMUTIL_PLATFORM_STRING_CONSTRUCT(...)` | +| `MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_CALLED` | function call | `CMLIB_STORAGE_TEMPLATE_INSTANCE(...)` | +| `MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_TEMPLATE_VAR` | 2nd positional arg | `template_var` (name of variable holding URI template) | +| `MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_TEMPLATE_VALUE` | dereferenced 2nd arg | `${template_var}` (the actual template string) | +| `MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME` | `ARCHIVE_NAME` kwarg | `package_string` = `{prefix}{name}{suffix}_{version}_{platform}.zip` | +| `MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_GIT_PATH` | `GIT_PATH` kwarg | `{DISTRO_ID}/{VERSION_ID}/{ARCH}` | +| `MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_REVISION` | `REVISION` kwarg | `BA_PACKAGE_VARS__REVISION` | +| `MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_PACKAGE_GROUP_NAME` | `PACKAGE_GROUP_NAME` kwarg | `package_name` (original, not expanded) | +| `MOCK_CMLIB_DEPENDENCY_CALLED` | function call | `CMLIB_DEPENDENCY(...)` | +| `MOCK_CMLIB_DEPENDENCY_URI` | `URI` kwarg | `remote_file` (= return value of `CMLIB_STORAGE_TEMPLATE_INSTANCE`) | +| `MOCK_CMLIB_DEPENDENCY_KEYWORDS` | `KEYWORDS` kwarg | `BACPACK;{NAME_UPPER}[;{BUILD_TYPE}]` | +| `MOCK_CMLIB_DEPENDENCY_TYPE` | `TYPE` kwarg | `ARCHIVE` | +| `MOCK_CMLIB_DEPENDENCY_ARCHIVE_TYPE` | `ARCHIVE_TYPE` kwarg | `ZIP` | +| `MOCK_CMLIB_DEPENDENCY_GIT_REVISION` | `GIT_REVISION` kwarg | `revision` (only if `GIT_PATH_TEMPLATE` is set) | +| `MOCK_CMLIB_DEPENDENCY_GIT_PATH` | `GIT_PATH` kwarg | 2nd `CMLIB_STORAGE_TEMPLATE_INSTANCE` result (only if `GIT_PATH_TEMPLATE` is set) | +| `MOCK_CMLIB_CACHE_GET_CALLED` | function call | `CMLIB_CACHE_GET(...)` (only if `CACHE_ONLY`) | +| `MOCK_CMLIB_CACHE_GET_KEYWORDS` | `KEYWORDS` kwarg | same keywords as `CMLIB_DEPENDENCY` | + +### Constants (CMDEF_VARS.cmake) + +| Variable | Value | +|---|---| +| `CMDEF_ARCHITECTURE` | `mock_arch` | +| `CMDEF_DISTRO_ID` | `mock_distro` | +| `CMDEF_DISTRO_VERSION_ID` | `0.0.0` | + +## Key Mock-to-Mock Dependency + +``` +MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT ──→ MOCK_CMLIB_DEPENDENCY_URI +``` + +The mock does **not** perform template expansion. It returns `OUTPUT` (or a default URL) as `remote_file`, +which BA_PACKAGE then passes as `URI` to `CMLIB_DEPENDENCY`. Therefore `MOCK_CMLIB_DEPENDENCY_URI` +always equals `MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT` (or the default) — it does **not** reflect +the computed `package_string`. + +To verify the actual archive name computed by BA_PACKAGE, check `MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME`. + +## Execution Paths + +| Condition | Path | Mocks Involved | +|---|---|---| +| `CACHE_ONLY=OFF` (default) | CMUTIL → CMLIB_STORAGE → CMLIB_DEPENDENCY | CMDEF_VARS, CMUTIL, CMLIB_STORAGE, CMLIB_DEPENDENCY | +| `CACHE_ONLY=ON` | CMUTIL → CMLIB_STORAGE → CMLIB_CACHE | CMDEF_VARS, CMUTIL, CMLIB_STORAGE, CMLIB_CACHE | +| `BA_PACKAGE_PREREQ_CMCONF_INIT` | CMCONF only | CMCONF | + +## Include Order (include_general.cmake) + +1. CMDEF_VARS +2. CMUTIL +3. CMLIB_STORAGE +4. CMLIB_DEPENDENCY + +CMLIB_CACHE is **not** included by default — tests requiring `CACHE_ONLY` include it separately. + +CMCONF is **not** included by default — `BA_PACKAGE_PREREQ_CMCONF_INIT` tests include it separately. + diff --git a/doc/GlobalConfiguration.md b/doc/GlobalConfiguration.md index d523dc6..0f8549f 100644 --- a/doc/GlobalConfiguration.md +++ b/doc/GlobalConfiguration.md @@ -23,7 +23,9 @@ to [CMake User Package Registry]. [CMCONF Example] can be found in [CMCONF] repo | BA_PACKAGE_LOCAL_PATH | Absolute Path to the local Package Repository. Used if BA_PACKAGE_LOCAL_USE is set to ON. If ENV variable BA_PACKAGE_LOCAL_PATH is set it is used instead of this CMCONF setting. Resulting value is passed to URI_TEMPLATE setting variable as "file:///package///" | | BA_PACKAGE_URI_REVISION | Git revision to use when accessing Package Repository. Used if BA_PACKAGE_LOCAL_USE is set to OFF. | | BA_PACKAGE_URI_TEMPLATE_REMOTE | [CMake-lib] template to construct URI to download package from remote Package Repository. Passed to URI_TEMPLATE setting variable. Used if BA_PACKAGE_LOCAL_USE is set to OFF. | -| BA_PACKAGE_HTTP_AUTHORIZATION_HEADER | HTTP Authorization header to use when accessing Package Repository. Used if BA_PACKAGE_LOCAL_USE is set to OFF. | +| BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE | [CMake-lib] template to construct the git archive path. Passed to GIT_PATH_TEMPLATE setting variable. If set the BA_PACKAGE_URI_TEMPLATE_REMOTE shall point to the Git repository and BA_PACKAGE_URI_REVISION is used as Git revision. Used if BA_PACKAGE_LOCAL_USE is set to OFF. | +| BA_PACKAGE_HTTP_HEADER | HTTP header to use when accessing Package Repository. Used if BA_PACKAGE_LOCAL_USE is set to OFF. | +| BA_PACKAGE_TEMPLATE_ARGS_URI_ESCAPE | If set to ON, template argument values (REVISION, GIT_PATH, PACKAGE_GROUP_NAME, ARCHIVE_NAME) are percent-encoded before URI template expansion. Used if BA_PACKAGE_LOCAL_USE is set to OFF. | ## Environment Variables diff --git a/doc/MigrationGuide_1_to_2.md b/doc/MigrationGuide_1_to_2.md new file mode 100644 index 0000000..6ece3b3 --- /dev/null +++ b/doc/MigrationGuide_1_to_2.md @@ -0,0 +1,72 @@ + +# Package Tracker Migration Guide - v1 to v2 + +It describes how to migrate CMake projects for use with Package Tracker `v2.0.0`. + +## Changes + +- `BA_PACKAGE_HTTP_AUTHORIZATION_HEADER` CMCONF variable renamed to `BA_PACKAGE_HTTP_HEADER`. + The value must now contain the full HTTP header (e.g. `Authorization: token `) instead of just the token part. + Package Tracker no longer prepends `Authorization: ` automatically. +- New required CMCONF variables (must be defined even if empty/OFF): + - `BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE` — [CMake-lib] template to construct the git archive path. + - `BA_PACKAGE_TEMPLATE_ARGS_URI_ESCAPE` — if ON, template argument values are percent-encoded before URI expansion. + - `BA_PACKAGE_HTTP_HEADER` — full HTTP header for accessing Package Repository. + +## Use Old Version + +To use old version of Package Tracker without the v2 changes, manually set Package Tracker revision to `v1.0.2` in [CMLibStorage.cmake]: + +```cmake +SET(STORAGE_LIST_DEP_REVISION "v1.0.2") +``` + +## Migration Steps + +Steps: + +- Rename `BA_PACKAGE_HTTP_AUTHORIZATION_HEADER` to `BA_PACKAGE_HTTP_HEADER` in the CMCONF Config file. + Prepend `Authorization: ` to the value: + + ```cmake + # v1 + CMCONF_SET(BA_PACKAGE_HTTP_AUTHORIZATION_HEADER "token ") + # v2 + CMCONF_SET(BA_PACKAGE_HTTP_HEADER "Authorization: token ") + ``` + +- Add new required CMCONF variables to the CMCONF Config file: + + ```cmake + CMCONF_SET(BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE "") + CMCONF_SET(BA_PACKAGE_HTTP_HEADER "") + CMCONF_SET(BA_PACKAGE_TEMPLATE_ARGS_URI_ESCAPE OFF) + ``` + +- Clean all CMake caches and reconfigure the CMake project. + +Full CMCONF Config example for v2: + +```cmake +FIND_PACKAGE(CMLIB REQUIRED COMPONENTS CMCONF) +CMCONF_INIT_SYSTEM() + +CMCONF_SET(BA_PACKAGE_LOCAL_USE OFF) +CMCONF_SET(BA_PACKAGE_LOCAL_PATH "") + +CMCONF_SET(BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE "") +CMCONF_SET(BA_PACKAGE_HTTP_HEADER "") +CMCONF_SET(BA_PACKAGE_TEMPLATE_ARGS_URI_ESCAPE OFF) +CMCONF_SET(BA_PACKAGE_URI_REVISION main) +CMCONF_SET(BA_PACKAGE_URI_TEMPLATE_REMOTE "https://gitea.example.com/username/repository/media//package///") +``` + +Examples for different Package Repository hosting services and authentication methods can be found in [example/], [example-project] and [example-context] + + +[CMCONF Global Config]: ./GlobalConfiguration.md +[CMLibStorage.cmake]: ../example/CMLibStorage.cmake +[example/]: ../example/ +[cmakelib]: https://github.com/cmakelib/cmakelib +[example-project]: https://github.com/bacpack-system/example-project +[example-context]: https://github.com/bacpack-system/example-context \ No newline at end of file diff --git a/example/config/CMCONF_EXAMPLEConfig.cmake b/example/config/CMCONF_EXAMPLEConfig.cmake index c6ff21e..8957c34 100644 --- a/example/config/CMCONF_EXAMPLEConfig.cmake +++ b/example/config/CMCONF_EXAMPLEConfig.cmake @@ -13,12 +13,12 @@ CMCONF_INIT_SYSTEM(EXAMPLE) CMCONF_SET(BA_PACKAGE_LOCAL_USE OFF) CMCONF_SET(BA_PACKAGE_LOCAL_PATH "") -INCLUDE("${CMAKE_CURRENT_LIST_DIR}/credentials.cmake") -CMCONF_SET(BA_PACKAGE_HTTP_AUTHORIZATION_HEADER "${credentials}") - # # It works for a publicly accessible repository. # +CMCONF_SET(BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE "") +CMCONF_SET(BA_PACKAGE_HTTP_HEADER "") +CMCONF_SET(BA_PACKAGE_TEMPLATE_ARGS_URI_ESCAPE OFF) CMCONF_SET(BA_PACKAGE_URI_REVISION main) CMCONF_SET(BA_PACKAGE_URI_TEMPLATE_REMOTE "https://gitea.example.com/username/repository/media//package///") @@ -31,11 +31,14 @@ CMCONF_SET(BA_PACKAGE_URI_TEMPLATE_REMOTE "https://gitea.example.com/username/re # Gitea hosted private Package Repository. # Do not forget to specify Access Token # -#CMCONF_SET(BA_PACKAGE_HTTP_AUTHORIZATION_HEADER "token ") +#CMCONF_SET(BA_PACKAGE_HTTP_HEADER "Authorization: token ") #CMCONF_SET(BA_PACKAGE_URI_TEMPLATE_REMOTE "https://gitea.example.com/username/repository/raw//package///") # # Gitlab hosted private Package Repository. +# gitlab_project_id is the id of the project in Gitlab. It can be found in General setting page of the project # -#CMCONF_SET(BA_PACKAGE_HTTP_AUTHORIZATION_HEADER "Bearer ") -#CMCONF_SET(BA_PACKAGE_URI_TEMPLATE_REMOTE "https://gitlab.example.com/username/repository/-/raw//package///") \ No newline at end of file +#SET(gitlab_project_id 000) +#CMCONF_SET(BA_PACKAGE_TEMPLATE_ARGS_URI_ESCAPE ON) +#CMCONF_SET(BA_PACKAGE_HTTP_HEADER "PRIVATE-TOKEN: $ENV{GITLAB_TOKEN}") +#CMCONF_SET(BA_PACKAGE_URI_TEMPLATE_REMOTE "https://gitlab.example.com/api/v4/projects/${gitlab_project_id}/repository/files/package%2F%2F%2F/raw?ref=&lfs=true") \ No newline at end of file diff --git a/helpers/BA_PACKAGE_PREREQ.cmake b/helpers/BA_PACKAGE_PREREQ.cmake index cad9eb9..8e9b094 100644 --- a/helpers/BA_PACKAGE_PREREQ.cmake +++ b/helpers/BA_PACKAGE_PREREQ.cmake @@ -37,7 +37,7 @@ ENDFUNCTION() # // variable name to receive the revision (parent scope) # ) # -FUNCTION(BA_PACKAGE_PREREQ_CMCONF_INIT template_output_var revision_output_var git_archive_path_template_output_var) +FUNCTION(BA_PACKAGE_PREREQ_CMCONF_INIT template_output_var revision_output_var git_archive_path_template_output_var http_header_output_var template_args_uri_escape_output_var) # # Let's get variables to ensure they are defined # By a Global Config for their appropriate use... @@ -46,15 +46,18 @@ FUNCTION(BA_PACKAGE_PREREQ_CMCONF_INIT template_output_var revision_output_var g IF(BA_PACKAGE_LOCAL_USE) CMCONF_GET(BA_PACKAGE_LOCAL_PATH) ELSE() - CMCONF_GET(BA_PACKAGE_HTTP_AUTHORIZATION_HEADER) + CMCONF_GET(BA_PACKAGE_HTTP_HEADER) CMCONF_GET(BA_PACKAGE_URI_REVISION) CMCONF_GET(BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE) CMCONF_GET(BA_PACKAGE_URI_TEMPLATE_REMOTE) + CMCONF_GET(BA_PACKAGE_TEMPLATE_ARGS_URI_ESCAPE) ENDIF() SET(template) SET(revision) SET(git_archive_path) + SET(http_header) + SET(template_args_uri_escape) IF(DEFINED ENV{BA_PACKAGE_LOCAL_PATH}) IF(BA_PACKAGE_LOCAL_USE) MESSAGE(WARNING "BA_PACKAGE_LOCAL_PATH ENV variable is defined and BA_PACKAGE_LOCAL_USE is ON. Using BA_PACKAGE_LOCAL_PATH ENV variable to set as Repository path") @@ -69,6 +72,8 @@ FUNCTION(BA_PACKAGE_PREREQ_CMCONF_INIT template_output_var revision_output_var g SET(template "${BA_PACKAGE_URI_TEMPLATE_REMOTE}") SET(revision "${BA_PACKAGE_URI_REVISION}") SET(git_archive_path "${BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE}") + SET(http_header "${BA_PACKAGE_HTTP_HEADER}") + SET(template_args_uri_escape "${BA_PACKAGE_TEMPLATE_ARGS_URI_ESCAPE}") ENDIF() ENDIF() @@ -77,11 +82,13 @@ FUNCTION(BA_PACKAGE_PREREQ_CMCONF_INIT template_output_var revision_output_var g MESSAGE(WARNING "Revision is defined but local repository is used.") ENDIF() - IF(BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE AND BA_PACKAGE_HTTP_AUTHORIZATION_HEADER) - MESSAGE(WARNING "BA_PACKAGE_HTTP_AUTHORIZATION_HEADER is defined together with BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE. ARCHIVE_PATH_TEMPLATE implies the URI type is GIT but HTTP_HEADERS are used only for raw HTTP Downloads!") + IF(BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE AND BA_PACKAGE_HTTP_HEADER) + MESSAGE(WARNING "BA_PACKAGE_HTTP_HEADER is defined together with BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE. ARCHIVE_PATH_TEMPLATE implies the URI type is GIT but HTTP_HEADERS are used only for raw HTTP Downloads!") ENDIF() SET(${template_output_var} "${template}" PARENT_SCOPE) SET(${revision_output_var} "${revision}" PARENT_SCOPE) SET(${git_archive_path_template_output_var} "${git_archive_path}" PARENT_SCOPE) + SET(${http_header_output_var} "${http_header}" PARENT_SCOPE) + SET(${template_args_uri_escape_output_var} "${template_args_uri_escape}" PARENT_SCOPE) ENDFUNCTION() \ No newline at end of file diff --git a/test/README.md b/test/README.md index 1a1a677..c9dbafc 100644 --- a/test/README.md +++ b/test/README.md @@ -29,6 +29,7 @@ Application components: - Application libraries (dependencies) - shared_library - shared_library_for_prerun + - shared_library_gst - tests_list `Application executable` links against `Application libraries`. As a build argument the name of the test from the `tests_list/` @@ -38,12 +39,14 @@ Files inside `tests_list/` directory serve as use cases for altering files insta ### Application Libraries (dependencies) -There are two shared libraries, `shared_library` and `shared_library_for_prerun` +There are three shared libraries, `shared_library`, `shared_library_for_prerun` and `shared_library_gst` `shared_library` represents standard CMake Package (with all needed exported targets etc.) `shared_library_for_prerun` represents standard system library (not a complete CMake Package - no exported targets and configs) +`shared_library_gst` represents a library with gstreamer-style naming where version is part of the name before `.so` (e.g. `libfoo-1.0.so`, `libfoo-1.0.so.0`, `libfoo-1.0.so.0.1.0`) + All libraries are built as a part of the `Application executable` CMake configure. ### Application Libraries - use case altering @@ -113,12 +116,41 @@ TEST_PRERUN_GET_EXPECTED_DEPENDENCY_FILE_LIST(...) TEST_GET_EXPECTED_INSTALLED_FILES_LIST(...) ``` +```cmake +# +# Function is called after the application target is created +# (after CMDEF_ADD_EXECUTABLE and base TARGET_LINK_LIBRARIES). +# +# Function allows the test to perform additional target setup such as +# creating IMPORTED GLOBAL library targets, linking additional libraries, +# or adding compile definitions. +# +# Tests that do not need additional target setup shall provide an empty stub. +# +# TARGET - name of the application target +# +# ( +# TARGET +# ) +# +TEST_POST_TARGET_SETUP(...) +``` + ## Test Run Workflow ![BringAuto Packager Test Activity](img/BAPackageTestActivity.svg) +## Difference from [cmake_tests/] + +`test/` — integration tests that build a real application, install dependencies, and verify installed file structure. + +[cmake_tests/] — unit tests for CMake module logic using mocks, no network or build required. + ## TODO - Rename `shared_library` and `shared_library_for_prerun` to `library` and `library_for_prerun` to avoid duplicities. (system automatically adds the -shared suffix to the resulting library names...) + + +[cmake_tests/]: ../cmake_tests/ \ No newline at end of file diff --git a/test/app/CMakeLists.txt b/test/app/CMakeLists.txt index db60011..c6f17b7 100644 --- a/test/app/CMakeLists.txt +++ b/test/app/CMakeLists.txt @@ -76,6 +76,10 @@ ENDIF() IF(NOT COMMAND TEST_PRERUN_GET_EXPECTED_DEPENDENCY_FILE_LIST) MESSAGE(FATAL_ERROR "Test is not valid. TEST_PRERUN_GET_EXPECTED_DEPENDENCY_FILE_LIST function not found.") ENDIF() +IF(NOT COMMAND TEST_POST_TARGET_SETUP) + MESSAGE(FATAL_ERROR "Test is not valid. TEST_POST_TARGET_SETUP function not found.") +ENDIF() + TEST_PRERUN( VERSION "1.2.3" INSTALL_DIR "${DEPENDENCY_INSTALL_DIR}/lib/shared-library-for-prerun" @@ -108,6 +112,8 @@ TARGET_LINK_LIBRARIES(${PROJECT_NAME} PUBLIC shared-library-shared::shared-library-shared shared-library-for-prerun-shared) +TEST_POST_TARGET_SETUP(TARGET ${PROJECT_NAME}) + CMDEF_INSTALL(TARGET ${PROJECT_NAME} NAMESPACE ${PROJECT_NAME}::) # Create a package diff --git a/test/app/lib/shared_library_gst/CMakeLists.txt b/test/app/lib/shared_library_gst/CMakeLists.txt new file mode 100644 index 0000000..fe28efa --- /dev/null +++ b/test/app/lib/shared_library_gst/CMakeLists.txt @@ -0,0 +1,45 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + +SET(PROJECT_NAME shared-library-gst) +PROJECT(${PROJECT_NAME} LANGUAGES C) + +IF(NOT DEFINED LIBRARY_VERSION) + MESSAGE(FATAL_ERROR "Please specify LIBRARY_VERSION in format major.minor.patch") +ENDIF() +IF(NOT CMAKE_BUILD_TYPE STREQUAL "Release") + MESSAGE(FATAL_ERROR "Only supported build type is Release! (specify by CMAKE_BUILD_TYPE)") +ENDIF() + +FIND_PACKAGE(CMLIB COMPONENTS CMDEF REQUIRED) + +SET(install_dir "lib/${PROJECT_NAME}") +SET(old_install_dir ${CMDEF_LIBRARY_INSTALL_DIR}) + +CMDEF_ADD_LIBRARY( + LIBRARY_GROUP ${PROJECT_NAME} + TYPE SHARED + SOURCES library.c + VERSION ${LIBRARY_VERSION} +) + +SET_TARGET_PROPERTIES(${PROJECT_NAME}-shared + PROPERTIES + OUTPUT_NAME ${PROJECT_NAME}-1.0 + SOVERSION 0 + VERSION ${LIBRARY_VERSION} +) + +SET(CMDEF_LIBRARY_INSTALL_DIR "${install_dir}" + CACHE STRING "Overridden" + FORCE +) +CMDEF_INSTALL( + TARGET ${PROJECT_NAME}-shared + NAMESPACE ${PROJECT_NAME}-shared:: + NO_INSTALL_CONFIG ON +) +SET(CMDEF_LIBRARY_INSTALL_DIR "${old_install_dir}" + CACHE STRING "Overridden" + FORCE +) + diff --git a/test/app/lib/shared_library_gst/library.c b/test/app/lib/shared_library_gst/library.c new file mode 100644 index 0000000..0b55384 --- /dev/null +++ b/test/app/lib/shared_library_gst/library.c @@ -0,0 +1,3 @@ + +int shared_gst_func() { return 42; } + diff --git a/test/app/main.c b/test/app/main.c index 2cbd637..e75e70d 100644 --- a/test/app/main.c +++ b/test/app/main.c @@ -2,8 +2,18 @@ extern int shared_out_of_dir_symlink(); extern int shared_with_soname(); +#ifdef USE_GST_LIBRARY +extern int shared_gst_func(); +#endif + int main() { - return shared_out_of_dir_symlink() + shared_with_soname(); + int r = shared_out_of_dir_symlink() + shared_with_soname(); + +#ifdef USE_GST_LIBRARY + r += shared_gst_func(); +#endif + + return r; } \ No newline at end of file diff --git a/test/app/tests_list/gstreamer_style_naming.txt b/test/app/tests_list/gstreamer_style_naming.txt new file mode 100644 index 0000000..08c84f4 --- /dev/null +++ b/test/app/tests_list/gstreamer_style_naming.txt @@ -0,0 +1,109 @@ +# +# Test for gstreamer-style library naming where version is part of the +# library name before .so (e.g. libfoo-1.0.so, libfoo-1.0.so.0, libfoo-1.0.so.0.1.0) +# + +FUNCTION(TEST_PRERUN) + BUILD_INSTALL_DEPENDENCY("${DEPENDENCY_INSTALL_PREFIX}" 0.1.0 ${TESTLIST_BASE_PATH}/../lib/shared_library_gst) +ENDFUNCTION() + +FUNCTION(TEST_POST_TARGET_SETUP) + CMLIB_PARSE_ARGUMENTS( + ONE_VALUE + TARGET + REQUIRED + TARGET + P_ARGN ${ARGN} + ) + + ADD_LIBRARY(shared-library-gst-shared SHARED IMPORTED GLOBAL) + SET_TARGET_PROPERTIES(shared-library-gst-shared + PROPERTIES + IMPORTED_LOCATION ${DEPENDENCY_INSTALL_DIR}/${CMDEF_LIBRARY_INSTALL_DIR}/shared-library-gst/shared-library-gst-1.0.so.0.1.0 + IMPORTED_SONAME shared-library-gst-1.0.so.0 + ) + + TARGET_LINK_LIBRARIES(${__TARGET} PUBLIC shared-library-gst-shared) + TARGET_COMPILE_DEFINITIONS(${__TARGET} PRIVATE USE_GST_LIBRARY) +ENDFUNCTION() + + + +# +# ${DEPENDENCY_INSTALL_DIR} +# ├── include +# │ └── shared_out_of_dir_symlink.h +# └── lib +# ├── cmake +# │ └── shared-library-shared +# │ ├── shared-library-shared.cmake +# │ ├── shared-library-sharedConfig.cmake +# │ ├── shared-library-sharedConfigVersion.cmake +# │ └── shared-library-shared-release.cmake +# ├── libshared-library-shared.so +# ├── libshared-library-shared.so.5.67.1 +# ├── shared-library-for-prerun +# │ ├── libshared-library-for-prerun-shared.so +# │ └── libshared-library-for-prerun-shared.so.1.2.3 +# └── shared-library-gst +# ├── shared-library-gst-1.0.so +# ├── shared-library-gst-1.0.so.0 +# └── shared-library-gst-1.0.so.0.1.0 +# +MACRO(TEST_PRERUN_GET_EXPECTED_DEPENDENCY_FILE_LIST list_var) + LIST(APPEND ${list_var} + "lib/cmake/shared-library-shared/shared-library-sharedConfig.cmake" + "lib/cmake/shared-library-shared/shared-library-sharedConfigVersion.cmake" + "lib/cmake/shared-library-shared/shared-library-shared.cmake" + "lib/cmake/shared-library-shared/shared-library-shared-release.cmake" + "include/shared_out_of_dir_symlink.h" + "lib/libshared-library-shared.so" + "lib/libshared-library-shared.so.5.67.1" + "lib/shared-library-for-prerun/libshared-library-for-prerun-shared.so" + "lib/shared-library-for-prerun/libshared-library-for-prerun-shared.so.1.2.3" + "lib/shared-library-gst/shared-library-gst-1.0.so" + "lib/shared-library-gst/shared-library-gst-1.0.so.0" + "lib/shared-library-gst/shared-library-gst-1.0.so.0.1.0" + ) +ENDMACRO() + + + +# +# Expected installed app structure +# +# ${INSTALL_DIR} +# ├── bin +# │ └── MyTestApp +# └── lib +# ├── cmake +# │ └── MyTestApp +# │ ├── MyTestApp.cmake +# │ ├── MyTestAppConfig.cmake +# │ ├── MyTestAppConfigVersion.cmake +# │ └── MyTestApp-release.cmake +# ├── libshared-library-for-prerun-shared.so +# ├── libshared-library-for-prerun-shared.so.1.2.3 +# ├── shared-library-gst-1.0.so +# ├── shared-library-gst-1.0.so.0 +# ├── shared-library-gst-1.0.so.0.1.0 +# ├── libshared-library-shared.so +# └── libshared-library-shared.so.5.67.1 +# +MACRO(TEST_GET_EXPECTED_INSTALLED_FILES_LIST list_var) + LIST(APPEND ${list_var} + "bin/MyTestApp" + "lib/cmake/MyTestApp/MyTestApp.cmake" + "lib/cmake/MyTestApp/MyTestAppConfig.cmake" + "lib/cmake/MyTestApp/MyTestAppConfigVersion.cmake" + "lib/cmake/MyTestApp/MyTestApp-release.cmake" + "lib/libshared-library-for-prerun-shared.so" + "lib/libshared-library-for-prerun-shared.so.1.2.3" + "lib/shared-library-gst-1.0.so" + "lib/shared-library-gst-1.0.so.0" + "lib/shared-library-gst-1.0.so.0.1.0" + "lib/libshared-library-shared.so" + "lib/libshared-library-shared.so.5.67.1" + ) +ENDMACRO() + diff --git a/test/app/tests_list/standard_install.txt b/test/app/tests_list/standard_install.txt index 75e88d8..a63b7d7 100644 --- a/test/app/tests_list/standard_install.txt +++ b/test/app/tests_list/standard_install.txt @@ -2,6 +2,9 @@ # Test for standard library installation without modifications # +FUNCTION(TEST_POST_TARGET_SETUP target) +ENDFUNCTION() + # FUNCTION(TEST_PRERUN) MESSAGE(STATUS "Test STANDARD_INSTALL start") diff --git a/test/app/tests_list/symlink_named_differently.txt b/test/app/tests_list/symlink_named_differently.txt index 7fc5906..cf7eb2e 100644 --- a/test/app/tests_list/symlink_named_differently.txt +++ b/test/app/tests_list/symlink_named_differently.txt @@ -1,6 +1,9 @@ # # +FUNCTION(TEST_POST_TARGET_SETUP target) +ENDFUNCTION() + # # More documentation can be found inside the README # diff --git a/test/app/tests_list/symlink_named_same_as_file.txt b/test/app/tests_list/symlink_named_same_as_file.txt index 84b537f..882d01b 100644 --- a/test/app/tests_list/symlink_named_same_as_file.txt +++ b/test/app/tests_list/symlink_named_same_as_file.txt @@ -3,6 +3,9 @@ # and make soname symlink to pre_run library in the lib/ directory # +FUNCTION(TEST_POST_TARGET_SETUP target) +ENDFUNCTION() + # # More documentation can be found inside the README # diff --git a/version.txt b/version.txt index beb72cc..e997a9a 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -version=1.0.0 \ No newline at end of file +version=2.0.0 \ No newline at end of file From 8595714c929b80f05644e397d7f5c14938634953 Mon Sep 17 00:00:00 2001 From: Jan Kubalek Date: Sun, 22 Feb 2026 22:24:37 +0100 Subject: [PATCH 20/28] Do not escape GIT_PATH... --- BA_PACKAGE.cmake | 36 ++++++++++--------- cmake_tests/BA_PACKAGE/CMakeLists.txt | 1 + .../CMakeLists.txt | 30 ++++++++++++++++ 3 files changed, 51 insertions(+), 16 deletions(-) create mode 100644 cmake_tests/BA_PACKAGE/git_path_template_with_escape/CMakeLists.txt diff --git a/BA_PACKAGE.cmake b/BA_PACKAGE.cmake index 2fe118c..08596c7 100644 --- a/BA_PACKAGE.cmake +++ b/BA_PACKAGE.cmake @@ -160,25 +160,23 @@ FUNCTION(BA_PACKAGE package_name version_tag prefix suffix output_var) BA_PACKAGE_VARS_GET(REVISION revision_var) SET(git_path "${CMDEF_DISTRO_ID}/${CMDEF_DISTRO_VERSION_ID}/${machine}") - BA_PACKAGE_VARS_GET(ESCAPE_TEMPLATE_ARGS escape_template_args) - IF(escape_template_args) - _BA_PACKAGE_URL_ENCODE("${revision_var}" revision_var) - _BA_PACKAGE_URL_ENCODE("${git_path}" git_path) - _BA_PACKAGE_URL_ENCODE("${package_string}" package_string) - _BA_PACKAGE_URL_ENCODE("${package_name}" package_name) - ENDIF() + + _BA_PACKAGE_URL_ENCODE_IF_ENABLED("${revision_var}" revision_var_norm) + _BA_PACKAGE_URL_ENCODE_IF_ENABLED("${git_path}" git_path_norm) + _BA_PACKAGE_URL_ENCODE_IF_ENABLED("${package_string}" package_string_norm) + _BA_PACKAGE_URL_ENCODE_IF_ENABLED("${package_name}" package_name_norm) SET(revision_arg) - IF(revision_var) - SET(revision_arg REVISION "${revision_var}") + IF(revision_var_norm) + SET(revision_arg REVISION "${revision_var_norm}") ENDIF() BA_PACKAGE_VARS_GET(URI_TEMPLATE template_var) CMLIB_STORAGE_TEMPLATE_INSTANCE(remote_file template_var ${revision_arg} - GIT_PATH "${git_path}" - ARCHIVE_NAME "${package_string}" - PACKAGE_GROUP_NAME "${package_name}" + GIT_PATH "${git_path_norm}" + ARCHIVE_NAME "${package_string_norm}" + PACKAGE_GROUP_NAME "${package_name_norm}" ) SET(git_archive_path_arg) @@ -187,9 +185,9 @@ FUNCTION(BA_PACKAGE package_name version_tag prefix suffix output_var) IF(git_path_template_var) CMLIB_STORAGE_TEMPLATE_INSTANCE(git_archive_path git_path_template_var ${revision_arg} - GIT_PATH "${git_path}" - ARCHIVE_NAME "${package_string}" - PACKAGE_GROUP_NAME "${package_name}" + GIT_PATH "${git_path_norm}" + ARCHIVE_NAME "${package_string_norm}" + PACKAGE_GROUP_NAME "${package_name_norm}" ) SET(git_revision_arg GIT_REVISION "${revision_var}") SET(git_archive_path_arg GIT_PATH "${git_archive_path}") @@ -245,12 +243,18 @@ ENDFUNCTION() ## Helper # # Percent-encode characters that are not allowed in URI components. +# Encoding is only performed when ESCAPE_TEMPLATE_ARGS is ON/True. # # ( # # ) # -FUNCTION(_BA_PACKAGE_URL_ENCODE input output) +FUNCTION(_BA_PACKAGE_URL_ENCODE_IF_ENABLED input output) + BA_PACKAGE_VARS_GET(ESCAPE_TEMPLATE_ARGS _escape_enabled) + IF(NOT _escape_enabled) + SET(${output} "${input}" PARENT_SCOPE) + RETURN() + ENDIF() SET(result "${input}") STRING(REPLACE "%" "%25" result "${result}") STRING(REPLACE " " "%20" result "${result}") diff --git a/cmake_tests/BA_PACKAGE/CMakeLists.txt b/cmake_tests/BA_PACKAGE/CMakeLists.txt index 2e59c27..6485bab 100644 --- a/cmake_tests/BA_PACKAGE/CMakeLists.txt +++ b/cmake_tests/BA_PACKAGE/CMakeLists.txt @@ -16,6 +16,7 @@ TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/no_git_args_without_template") TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/cache_only_skips_dependency") TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/escape_template_args_applied") TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/escape_template_args_not_applied") +TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/git_path_template_with_escape") TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/output_var_set") TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/archive_type_zip") TEST_RUN("${CMAKE_CURRENT_LIST_DIR}/empty_revision") diff --git a/cmake_tests/BA_PACKAGE/git_path_template_with_escape/CMakeLists.txt b/cmake_tests/BA_PACKAGE/git_path_template_with_escape/CMakeLists.txt new file mode 100644 index 0000000..038c90d --- /dev/null +++ b/cmake_tests/BA_PACKAGE/git_path_template_with_escape/CMakeLists.txt @@ -0,0 +1,30 @@ +## +# Test: GIT_PATH_TEMPLATE + ESCAPE_TEMPLATE_ARGS=ON encodes template args but not GIT_REVISION +# +# Verifies that when both GIT_PATH_TEMPLATE and ESCAPE_TEMPLATE_ARGS are set, +# CMLIB_STORAGE_TEMPLATE_INSTANCE receives encoded args while +# CMLIB_DEPENDENCY GIT_REVISION stays unencoded (raw git ref). +# +IF(NOT DEFINED CMAKE_SCRIPT_MODE_FILE) + CMAKE_MINIMUM_REQUIRED(VERSION 3.21) + PROJECT(TEST_BA_PACKAGE_GIT_PATH_TEMPLATE_WITH_ESCAPE) +ENDIF() + +FIND_PACKAGE(CMLIB REQUIRED) + +SET(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT "package/mock_distro/0.0.0/mock_arch/mypkg/mypkg_v1.0.0.zip" CACHE INTERNAL "") +INCLUDE("${CMAKE_CURRENT_LIST_DIR}/../../include_general.cmake") + +SET(CMAKE_BUILD_TYPE "Release") +BA_PACKAGE_VARS_SET(REVISION "refs/heads/main") +BA_PACKAGE_VARS_SET(URI_TEMPLATE "git@github.com:org/repo.git") +BA_PACKAGE_VARS_SET(GIT_PATH_TEMPLATE "package///") +BA_PACKAGE_VARS_SET(ESCAPE_TEMPLATE_ARGS ON) + +BA_PACKAGE(mypkg v1.0.0 "" "" output_path) + +# Template args must be encoded +TEST_VAR_EQUALS_LITERAL(MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_REVISION "refs%2Fheads%2Fmain") + +# GIT_REVISION for CMLIB_DEPENDENCY must stay unencoded (raw git ref) +TEST_VAR_EQUALS_LITERAL(MOCK_CMLIB_DEPENDENCY_GIT_REVISION "refs/heads/main") From 06d1f8ffcc959ae44cc5ca11257c75554dc4abbd Mon Sep 17 00:00:00 2001 From: Jan Kubalek Date: Mon, 23 Feb 2026 15:42:47 +0100 Subject: [PATCH 21/28] Migraton guide added --- README.md | 6 ++++++ doc/{MigrationGuide.md => MigrationGuide_0_to_1.md} | 0 doc/MigrationGuide_1_to_2.md | 1 + 3 files changed, 7 insertions(+) rename doc/{MigrationGuide.md => MigrationGuide_0_to_1.md} (100%) diff --git a/README.md b/README.md index 13d44c2..65d8977 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,12 @@ BA_PACKAGE_LIBRARY(nlohmann-json v3.10.5) ## FAQ +### Q: I want to migrate to newest version of Package tracker + +- see [doc/MigrationGuide_0_to_1.md] +- see [doc/MigrationGuide_1_to_2.md] + + ### Q: Package not found even if it exists in the repository - Ensure the package was built for your platform (CMDEF_DISTRO_ID, CMDEF_DISTRO_VERSION_ID, CMDEF_ARCHITECTURE). diff --git a/doc/MigrationGuide.md b/doc/MigrationGuide_0_to_1.md similarity index 100% rename from doc/MigrationGuide.md rename to doc/MigrationGuide_0_to_1.md diff --git a/doc/MigrationGuide_1_to_2.md b/doc/MigrationGuide_1_to_2.md index 6ece3b3..2b0da16 100644 --- a/doc/MigrationGuide_1_to_2.md +++ b/doc/MigrationGuide_1_to_2.md @@ -25,6 +25,7 @@ SET(STORAGE_LIST_DEP_REVISION "v1.0.2") Steps: +- Update [cmakelib] to version v1.3.3 - Rename `BA_PACKAGE_HTTP_AUTHORIZATION_HEADER` to `BA_PACKAGE_HTTP_HEADER` in the CMCONF Config file. Prepend `Authorization: ` to the value: From 63386e88410c150b53471435e2716f1114fd454d Mon Sep 17 00:00:00 2001 From: Jan Kubalek Date: Mon, 23 Feb 2026 15:44:39 +0100 Subject: [PATCH 22/28] TYPOs --- doc/MigrationGuide_1_to_2.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/MigrationGuide_1_to_2.md b/doc/MigrationGuide_1_to_2.md index 2b0da16..19079a0 100644 --- a/doc/MigrationGuide_1_to_2.md +++ b/doc/MigrationGuide_1_to_2.md @@ -3,6 +3,8 @@ It describes how to migrate CMake projects for use with Package Tracker `v2.0.0`. + + ## Changes - `BA_PACKAGE_HTTP_AUTHORIZATION_HEADER` CMCONF variable renamed to `BA_PACKAGE_HTTP_HEADER`. @@ -65,7 +67,6 @@ CMCONF_SET(BA_PACKAGE_URI_TEMPLATE_REMOTE "https://gitea.example.com/username/re Examples for different Package Repository hosting services and authentication methods can be found in [example/], [example-project] and [example-context] -[CMCONF Global Config]: ./GlobalConfiguration.md [CMLibStorage.cmake]: ../example/CMLibStorage.cmake [example/]: ../example/ [cmakelib]: https://github.com/cmakelib/cmakelib From a0fc53de5b96ed7c9fa9d41f29d22b5e02bdb449 Mon Sep 17 00:00:00 2001 From: Jan Kubalek Date: Mon, 23 Feb 2026 15:58:00 +0100 Subject: [PATCH 23/28] TYPOs --- doc/MigrationGuide_1_to_2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/MigrationGuide_1_to_2.md b/doc/MigrationGuide_1_to_2.md index 19079a0..d6c2d65 100644 --- a/doc/MigrationGuide_1_to_2.md +++ b/doc/MigrationGuide_1_to_2.md @@ -29,8 +29,8 @@ Steps: - Update [cmakelib] to version v1.3.3 - Rename `BA_PACKAGE_HTTP_AUTHORIZATION_HEADER` to `BA_PACKAGE_HTTP_HEADER` in the CMCONF Config file. - Prepend `Authorization: ` to the value: +- If HTTP Header is used, prepend `Authorization: ` to the value: ```cmake # v1 CMCONF_SET(BA_PACKAGE_HTTP_AUTHORIZATION_HEADER "token ") From ccfdcfe7da96a3143cfc7ba4cd95ce7f00ee3798 Mon Sep 17 00:00:00 2001 From: Jan Kubalek Date: Mon, 9 Mar 2026 11:22:05 +0100 Subject: [PATCH 24/28] Update tests vars diagram --- cmake_tests/mock/MOCK_VARIABLES.md | 37 ++++++++++++++++-------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/cmake_tests/mock/MOCK_VARIABLES.md b/cmake_tests/mock/MOCK_VARIABLES.md index af50c61..98a37c5 100644 --- a/cmake_tests/mock/MOCK_VARIABLES.md +++ b/cmake_tests/mock/MOCK_VARIABLES.md @@ -5,33 +5,34 @@ ```mermaid flowchart TD subgraph CMDEF_VARS["CMDEF_VARS.cmake (constants)"] - ARCH["CMDEF_ARCHITECTURE\n= 'mock_arch'"] - DISTRO["CMDEF_DISTRO_ID\n= 'mock_distro'"] - VER["CMDEF_DISTRO_VERSION_ID\n= '0.0.0'"] + ARCH["CMDEF_ARCHITECTURE\n= mock_arch"] + DISTRO["CMDEF_DISTRO_ID\n= mock_distro"] + VER["CMDEF_DISTRO_VERSION_ID\n= 0.0.0"] end subgraph CMUTIL["CMUTIL.cmake"] + direction LR CMUTIL_CFG["config: MOCK_CMUTIL_PLATFORM_STRING\n(optional override)"] - CMUTIL_CAP["captured: MOCK_CMUTIL_PLATFORM_STRING_CONSTRUCT_CALLED"] + CMUTIL_CAP["captured: MOCK_CMUTIL_PLATFORM_STRING\n_CONSTRUCT_CALLED"] end subgraph BA["BA_PACKAGE (production code)"] PLAT["platform_string"] - PKG["package_string\n= {prefix}{name}{suffix}_{version}_{platform}.zip"] - GIT["git_path\n= {DISTRO_ID}/{VERSION_ID}/{ARCH}"] - KW["keywords\n= BACPACK;{NAME};{BUILD_TYPE}"] + PKG["package_string"] + GIT["git_path"] + KW["keywords"] RF["remote_file"] end subgraph STORAGE["CMLIB_STORAGE.cmake"] - ST_CFG["config: MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_OUTPUT\n(optional override, default: mock URL)"] - ST_CALLED["captured: MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_CALLED"] - ST_TVAR["captured: MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_TEMPLATE_VAR"] - ST_TVAL["captured: MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_TEMPLATE_VALUE"] - ST_AN["captured: MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_ARCHIVE_NAME"] - ST_GP["captured: MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_GIT_PATH"] - ST_REV["captured: MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_REVISION"] - ST_PGN["captured: MOCK_CMLIB_STORAGE_TEMPLATE_INSTANCE_PACKAGE_GROUP_NAME"] + ST_CFG["config: MOCK_CMLIB_STORAGE\n_TEMPLATE_INSTANCE_OUTPUT\n(default: mock URL)"] + ST_CALLED["captured: MOCK_CMLIB_STORAGE\n_TEMPLATE_INSTANCE_CALLED"] + ST_TVAR["captured: MOCK_CMLIB_STORAGE\n_TEMPLATE_INSTANCE_TEMPLATE_VAR"] + ST_TVAL["captured: MOCK_CMLIB_STORAGE\n_TEMPLATE_INSTANCE_TEMPLATE_VALUE"] + ST_AN["captured: MOCK_CMLIB_STORAGE\n_TEMPLATE_INSTANCE_ARCHIVE_NAME"] + ST_GP["captured: MOCK_CMLIB_STORAGE\n_TEMPLATE_INSTANCE_GIT_PATH"] + ST_REV["captured: MOCK_CMLIB_STORAGE\n_TEMPLATE_INSTANCE_REVISION"] + ST_PGN["captured: MOCK_CMLIB_STORAGE\n_TEMPLATE_INSTANCE_PACKAGE_GROUP_NAME"] end subgraph DEP["CMLIB_DEPENDENCY.cmake"] @@ -44,8 +45,8 @@ flowchart TD DEP_GPATH["captured: MOCK_CMLIB_DEPENDENCY_GIT_PATH"] end - subgraph CACHE["CMLIB_CACHE.cmake (CACHE_ONLY path)"] - CA_CFG["config: MOCK_CMLIB_CACHE_GET_RETURN_PATH\n(empty = cache miss)"] + subgraph CACHE["CMLIB_CACHE.cmake (CACHE_ONLY)"] + CA_CFG["config: MOCK_CMLIB_CACHE\n_GET_RETURN_PATH\n(empty = cache miss)"] CA_CALLED["captured: MOCK_CMLIB_CACHE_GET_CALLED"] CA_KW["captured: MOCK_CMLIB_CACHE_GET_KEYWORDS"] end @@ -70,6 +71,8 @@ flowchart TD KW --> CA_KW ``` +> **Legend:** "config:" = variable set by test before calling production code, "captured:" = variable set by mock during execution. + ## Variable Categories ### Configuration (set by test before calling production code) From 80cdd66530781d7cf8f7af9d9d49ce48c2ed667d Mon Sep 17 00:00:00 2001 From: Jan Kubalek Date: Mon, 9 Mar 2026 11:28:55 +0100 Subject: [PATCH 25/28] Better tests/readme --- test/README.md | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/test/README.md b/test/README.md index c9dbafc..9c01656 100644 --- a/test/README.md +++ b/test/README.md @@ -17,8 +17,20 @@ The test consists of Test Application located in 'app/' directory. In the \test/ directory run -```cmake -cmake -P ./run_tests.cmake +```bash +cmake -DTEST_WITH_DESTDIR=OFF -P ./run_app_tests.cmake +cmake -DTEST_WITH_DESTDIR=ON -P ./run_app_tests.cmake + +cmake -DINVALID_VAR_TEST=OFF -P ./run_vars_test.cmake + +# It shall fail - return code shall not be 0! +cmake -DINVALID_VAR_TEST=ON -P ./run_vars_test.cmake +``` + +or run all tests in one batch by running + +```bash +./run_tests.sh ``` ## Test application architecture From 4412e270847004fe1cf5a0d43a1de769a45380d7 Mon Sep 17 00:00:00 2001 From: Jan Kubalek Date: Mon, 9 Mar 2026 11:48:57 +0100 Subject: [PATCH 26/28] Tests directory renamed --- {cmake_tests => integration_tests}/BA_PACKAGE/CMakeLists.txt | 0 .../BA_PACKAGE/archive_type_zip/CMakeLists.txt | 0 .../BA_PACKAGE/cache_only_not_found_error/CMakeLists.txt | 0 .../BA_PACKAGE/cache_only_skips_dependency/CMakeLists.txt | 0 .../BA_PACKAGE/debug_keyword/CMakeLists.txt | 0 .../BA_PACKAGE/debug_suffix_applied/CMakeLists.txt | 0 .../BA_PACKAGE/empty_revision/CMakeLists.txt | 0 .../BA_PACKAGE/escape_template_args_applied/CMakeLists.txt | 0 .../BA_PACKAGE/escape_template_args_not_applied/CMakeLists.txt | 0 .../BA_PACKAGE/git_path_template_args/CMakeLists.txt | 0 .../BA_PACKAGE/git_path_template_with_escape/CMakeLists.txt | 0 .../BA_PACKAGE/invalid_package_name_error/CMakeLists.txt | 0 .../BA_PACKAGE/no_debug_skips_keyword/CMakeLists.txt | 0 .../BA_PACKAGE/no_git_args_without_template/CMakeLists.txt | 0 .../BA_PACKAGE/output_var_set/CMakeLists.txt | 0 .../BA_PACKAGE/package_name_dash_warning/CMakeLists.txt | 0 .../BA_PACKAGE/release_basic/CMakeLists.txt | 0 .../BA_PACKAGE_EXECUTABLE/CMakeLists.txt | 0 .../BA_PACKAGE_EXECUTABLE/cache_only_forwarding/CMakeLists.txt | 0 .../cmake_prefix_path_updated/CMakeLists.txt | 0 .../BA_PACKAGE_EXECUTABLE/debug_suffix/CMakeLists.txt | 0 .../BA_PACKAGE_EXECUTABLE/no_debug_skips_suffix/CMakeLists.txt | 0 .../output_path_var_propagates/CMakeLists.txt | 0 .../BA_PACKAGE_EXECUTABLE/release_basic/CMakeLists.txt | 0 .../BA_PACKAGE_LIBRARY/CMakeLists.txt | 0 .../BA_PACKAGE_LIBRARY/cache_only_forwarding/CMakeLists.txt | 0 .../BA_PACKAGE_LIBRARY/cmake_prefix_path_updated/CMakeLists.txt | 0 .../BA_PACKAGE_LIBRARY/debug_suffix/CMakeLists.txt | 0 .../BA_PACKAGE_LIBRARY/no_debug_skips_suffix/CMakeLists.txt | 0 .../BA_PACKAGE_LIBRARY/output_path_var_propagates/CMakeLists.txt | 0 .../BA_PACKAGE_LIBRARY/release_basic/CMakeLists.txt | 0 .../BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt | 0 .../env_var_precedence/CMakeLists.txt | 0 .../env_var_with_local_use_warning/CMakeLists.txt | 0 .../escape_template_args_off_returned/CMakeLists.txt | 0 .../escape_template_args_on_returned/CMakeLists.txt | 0 .../git_archive_path_returned/CMakeLists.txt | 0 .../git_archive_with_http_header_warning/CMakeLists.txt | 0 .../http_header_returned/CMakeLists.txt | 0 .../invalid_local_path/CMakeLists.txt | 0 .../BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_off/CMakeLists.txt | 0 .../BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_on/CMakeLists.txt | 0 {cmake_tests => integration_tests}/CMakeLists.txt | 0 {cmake_tests => integration_tests}/README.md | 0 {cmake_tests => integration_tests}/TEST.cmake | 0 {cmake_tests => integration_tests}/VARS.cmake | 0 {cmake_tests => integration_tests}/include_general.cmake | 0 {cmake_tests => integration_tests}/mock/CMCONF.cmake | 0 {cmake_tests => integration_tests}/mock/CMDEF_VARS.cmake | 0 {cmake_tests => integration_tests}/mock/CMLIB_CACHE.cmake | 0 {cmake_tests => integration_tests}/mock/CMLIB_DEPENDENCY.cmake | 0 {cmake_tests => integration_tests}/mock/CMLIB_STORAGE.cmake | 0 {cmake_tests => integration_tests}/mock/CMUTIL.cmake | 0 {cmake_tests => integration_tests}/mock/MOCK_VARIABLES.md | 0 {cmake_tests => integration_tests}/mock/test/CMakeLists.txt | 0 .../mock/test/get_fails_on_undefined/CMakeLists.txt | 0 .../mock/test/get_returns_value/CMakeLists.txt | 0 {test => unit_tests}/README.md | 0 {test => unit_tests}/app/CMakeLists.txt | 0 {test => unit_tests}/app/lib/shared_library/CMakeLists.txt | 0 {test => unit_tests}/app/lib/shared_library/library.c | 0 .../app/lib/shared_library_for_prerun/CMakeLists.txt | 0 .../shared_library_for_prerun/include/shared_out_of_dir_symlink.h | 0 {test => unit_tests}/app/lib/shared_library_for_prerun/library.c | 0 {test => unit_tests}/app/lib/shared_library_gst/CMakeLists.txt | 0 {test => unit_tests}/app/lib/shared_library_gst/library.c | 0 {test => unit_tests}/app/main.c | 0 {test => unit_tests}/app/tests_list/gstreamer_style_naming.txt | 0 {test => unit_tests}/app/tests_list/standard_install.txt | 0 {test => unit_tests}/app/tests_list/symlink_named_differently.txt | 0 .../app/tests_list/symlink_named_same_as_file.txt | 0 {test => unit_tests}/img/BAPackageTestActivity.svg | 0 {test => unit_tests}/run_app_tests.cmake | 0 {test => unit_tests}/run_tests.sh | 0 {test => unit_tests}/run_vars_test.cmake | 0 75 files changed, 0 insertions(+), 0 deletions(-) rename {cmake_tests => integration_tests}/BA_PACKAGE/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE/archive_type_zip/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE/cache_only_not_found_error/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE/cache_only_skips_dependency/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE/debug_keyword/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE/debug_suffix_applied/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE/empty_revision/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE/escape_template_args_applied/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE/escape_template_args_not_applied/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE/git_path_template_args/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE/git_path_template_with_escape/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE/invalid_package_name_error/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE/no_debug_skips_keyword/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE/no_git_args_without_template/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE/output_var_set/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE/package_name_dash_warning/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE/release_basic/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE_EXECUTABLE/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE_EXECUTABLE/cache_only_forwarding/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE_EXECUTABLE/cmake_prefix_path_updated/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE_EXECUTABLE/debug_suffix/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE_EXECUTABLE/no_debug_skips_suffix/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE_EXECUTABLE/output_path_var_propagates/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE_EXECUTABLE/release_basic/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE_LIBRARY/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE_LIBRARY/cache_only_forwarding/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE_LIBRARY/cmake_prefix_path_updated/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE_LIBRARY/debug_suffix/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE_LIBRARY/no_debug_skips_suffix/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE_LIBRARY/output_path_var_propagates/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE_LIBRARY/release_basic/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_precedence/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_with_local_use_warning/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE_PREREQ_CMCONF_INIT/escape_template_args_off_returned/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE_PREREQ_CMCONF_INIT/escape_template_args_on_returned/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_path_returned/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_with_http_header_warning/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE_PREREQ_CMCONF_INIT/http_header_returned/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE_PREREQ_CMCONF_INIT/invalid_local_path/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_off/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_on/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/README.md (100%) rename {cmake_tests => integration_tests}/TEST.cmake (100%) rename {cmake_tests => integration_tests}/VARS.cmake (100%) rename {cmake_tests => integration_tests}/include_general.cmake (100%) rename {cmake_tests => integration_tests}/mock/CMCONF.cmake (100%) rename {cmake_tests => integration_tests}/mock/CMDEF_VARS.cmake (100%) rename {cmake_tests => integration_tests}/mock/CMLIB_CACHE.cmake (100%) rename {cmake_tests => integration_tests}/mock/CMLIB_DEPENDENCY.cmake (100%) rename {cmake_tests => integration_tests}/mock/CMLIB_STORAGE.cmake (100%) rename {cmake_tests => integration_tests}/mock/CMUTIL.cmake (100%) rename {cmake_tests => integration_tests}/mock/MOCK_VARIABLES.md (100%) rename {cmake_tests => integration_tests}/mock/test/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/mock/test/get_fails_on_undefined/CMakeLists.txt (100%) rename {cmake_tests => integration_tests}/mock/test/get_returns_value/CMakeLists.txt (100%) rename {test => unit_tests}/README.md (100%) rename {test => unit_tests}/app/CMakeLists.txt (100%) rename {test => unit_tests}/app/lib/shared_library/CMakeLists.txt (100%) rename {test => unit_tests}/app/lib/shared_library/library.c (100%) rename {test => unit_tests}/app/lib/shared_library_for_prerun/CMakeLists.txt (100%) rename {test => unit_tests}/app/lib/shared_library_for_prerun/include/shared_out_of_dir_symlink.h (100%) rename {test => unit_tests}/app/lib/shared_library_for_prerun/library.c (100%) rename {test => unit_tests}/app/lib/shared_library_gst/CMakeLists.txt (100%) rename {test => unit_tests}/app/lib/shared_library_gst/library.c (100%) rename {test => unit_tests}/app/main.c (100%) rename {test => unit_tests}/app/tests_list/gstreamer_style_naming.txt (100%) rename {test => unit_tests}/app/tests_list/standard_install.txt (100%) rename {test => unit_tests}/app/tests_list/symlink_named_differently.txt (100%) rename {test => unit_tests}/app/tests_list/symlink_named_same_as_file.txt (100%) rename {test => unit_tests}/img/BAPackageTestActivity.svg (100%) rename {test => unit_tests}/run_app_tests.cmake (100%) rename {test => unit_tests}/run_tests.sh (100%) rename {test => unit_tests}/run_vars_test.cmake (100%) diff --git a/cmake_tests/BA_PACKAGE/CMakeLists.txt b/integration_tests/BA_PACKAGE/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE/CMakeLists.txt rename to integration_tests/BA_PACKAGE/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE/archive_type_zip/CMakeLists.txt b/integration_tests/BA_PACKAGE/archive_type_zip/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE/archive_type_zip/CMakeLists.txt rename to integration_tests/BA_PACKAGE/archive_type_zip/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE/cache_only_not_found_error/CMakeLists.txt b/integration_tests/BA_PACKAGE/cache_only_not_found_error/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE/cache_only_not_found_error/CMakeLists.txt rename to integration_tests/BA_PACKAGE/cache_only_not_found_error/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE/cache_only_skips_dependency/CMakeLists.txt b/integration_tests/BA_PACKAGE/cache_only_skips_dependency/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE/cache_only_skips_dependency/CMakeLists.txt rename to integration_tests/BA_PACKAGE/cache_only_skips_dependency/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE/debug_keyword/CMakeLists.txt b/integration_tests/BA_PACKAGE/debug_keyword/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE/debug_keyword/CMakeLists.txt rename to integration_tests/BA_PACKAGE/debug_keyword/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE/debug_suffix_applied/CMakeLists.txt b/integration_tests/BA_PACKAGE/debug_suffix_applied/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE/debug_suffix_applied/CMakeLists.txt rename to integration_tests/BA_PACKAGE/debug_suffix_applied/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE/empty_revision/CMakeLists.txt b/integration_tests/BA_PACKAGE/empty_revision/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE/empty_revision/CMakeLists.txt rename to integration_tests/BA_PACKAGE/empty_revision/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE/escape_template_args_applied/CMakeLists.txt b/integration_tests/BA_PACKAGE/escape_template_args_applied/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE/escape_template_args_applied/CMakeLists.txt rename to integration_tests/BA_PACKAGE/escape_template_args_applied/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE/escape_template_args_not_applied/CMakeLists.txt b/integration_tests/BA_PACKAGE/escape_template_args_not_applied/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE/escape_template_args_not_applied/CMakeLists.txt rename to integration_tests/BA_PACKAGE/escape_template_args_not_applied/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE/git_path_template_args/CMakeLists.txt b/integration_tests/BA_PACKAGE/git_path_template_args/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE/git_path_template_args/CMakeLists.txt rename to integration_tests/BA_PACKAGE/git_path_template_args/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE/git_path_template_with_escape/CMakeLists.txt b/integration_tests/BA_PACKAGE/git_path_template_with_escape/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE/git_path_template_with_escape/CMakeLists.txt rename to integration_tests/BA_PACKAGE/git_path_template_with_escape/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE/invalid_package_name_error/CMakeLists.txt b/integration_tests/BA_PACKAGE/invalid_package_name_error/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE/invalid_package_name_error/CMakeLists.txt rename to integration_tests/BA_PACKAGE/invalid_package_name_error/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE/no_debug_skips_keyword/CMakeLists.txt b/integration_tests/BA_PACKAGE/no_debug_skips_keyword/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE/no_debug_skips_keyword/CMakeLists.txt rename to integration_tests/BA_PACKAGE/no_debug_skips_keyword/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE/no_git_args_without_template/CMakeLists.txt b/integration_tests/BA_PACKAGE/no_git_args_without_template/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE/no_git_args_without_template/CMakeLists.txt rename to integration_tests/BA_PACKAGE/no_git_args_without_template/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE/output_var_set/CMakeLists.txt b/integration_tests/BA_PACKAGE/output_var_set/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE/output_var_set/CMakeLists.txt rename to integration_tests/BA_PACKAGE/output_var_set/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE/package_name_dash_warning/CMakeLists.txt b/integration_tests/BA_PACKAGE/package_name_dash_warning/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE/package_name_dash_warning/CMakeLists.txt rename to integration_tests/BA_PACKAGE/package_name_dash_warning/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE/release_basic/CMakeLists.txt b/integration_tests/BA_PACKAGE/release_basic/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE/release_basic/CMakeLists.txt rename to integration_tests/BA_PACKAGE/release_basic/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_EXECUTABLE/CMakeLists.txt b/integration_tests/BA_PACKAGE_EXECUTABLE/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE_EXECUTABLE/CMakeLists.txt rename to integration_tests/BA_PACKAGE_EXECUTABLE/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_EXECUTABLE/cache_only_forwarding/CMakeLists.txt b/integration_tests/BA_PACKAGE_EXECUTABLE/cache_only_forwarding/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE_EXECUTABLE/cache_only_forwarding/CMakeLists.txt rename to integration_tests/BA_PACKAGE_EXECUTABLE/cache_only_forwarding/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_EXECUTABLE/cmake_prefix_path_updated/CMakeLists.txt b/integration_tests/BA_PACKAGE_EXECUTABLE/cmake_prefix_path_updated/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE_EXECUTABLE/cmake_prefix_path_updated/CMakeLists.txt rename to integration_tests/BA_PACKAGE_EXECUTABLE/cmake_prefix_path_updated/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_EXECUTABLE/debug_suffix/CMakeLists.txt b/integration_tests/BA_PACKAGE_EXECUTABLE/debug_suffix/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE_EXECUTABLE/debug_suffix/CMakeLists.txt rename to integration_tests/BA_PACKAGE_EXECUTABLE/debug_suffix/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_EXECUTABLE/no_debug_skips_suffix/CMakeLists.txt b/integration_tests/BA_PACKAGE_EXECUTABLE/no_debug_skips_suffix/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE_EXECUTABLE/no_debug_skips_suffix/CMakeLists.txt rename to integration_tests/BA_PACKAGE_EXECUTABLE/no_debug_skips_suffix/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_EXECUTABLE/output_path_var_propagates/CMakeLists.txt b/integration_tests/BA_PACKAGE_EXECUTABLE/output_path_var_propagates/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE_EXECUTABLE/output_path_var_propagates/CMakeLists.txt rename to integration_tests/BA_PACKAGE_EXECUTABLE/output_path_var_propagates/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_EXECUTABLE/release_basic/CMakeLists.txt b/integration_tests/BA_PACKAGE_EXECUTABLE/release_basic/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE_EXECUTABLE/release_basic/CMakeLists.txt rename to integration_tests/BA_PACKAGE_EXECUTABLE/release_basic/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/CMakeLists.txt b/integration_tests/BA_PACKAGE_LIBRARY/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE_LIBRARY/CMakeLists.txt rename to integration_tests/BA_PACKAGE_LIBRARY/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/cache_only_forwarding/CMakeLists.txt b/integration_tests/BA_PACKAGE_LIBRARY/cache_only_forwarding/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE_LIBRARY/cache_only_forwarding/CMakeLists.txt rename to integration_tests/BA_PACKAGE_LIBRARY/cache_only_forwarding/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/cmake_prefix_path_updated/CMakeLists.txt b/integration_tests/BA_PACKAGE_LIBRARY/cmake_prefix_path_updated/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE_LIBRARY/cmake_prefix_path_updated/CMakeLists.txt rename to integration_tests/BA_PACKAGE_LIBRARY/cmake_prefix_path_updated/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/debug_suffix/CMakeLists.txt b/integration_tests/BA_PACKAGE_LIBRARY/debug_suffix/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE_LIBRARY/debug_suffix/CMakeLists.txt rename to integration_tests/BA_PACKAGE_LIBRARY/debug_suffix/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/no_debug_skips_suffix/CMakeLists.txt b/integration_tests/BA_PACKAGE_LIBRARY/no_debug_skips_suffix/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE_LIBRARY/no_debug_skips_suffix/CMakeLists.txt rename to integration_tests/BA_PACKAGE_LIBRARY/no_debug_skips_suffix/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/output_path_var_propagates/CMakeLists.txt b/integration_tests/BA_PACKAGE_LIBRARY/output_path_var_propagates/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE_LIBRARY/output_path_var_propagates/CMakeLists.txt rename to integration_tests/BA_PACKAGE_LIBRARY/output_path_var_propagates/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_LIBRARY/release_basic/CMakeLists.txt b/integration_tests/BA_PACKAGE_LIBRARY/release_basic/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE_LIBRARY/release_basic/CMakeLists.txt rename to integration_tests/BA_PACKAGE_LIBRARY/release_basic/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt b/integration_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt rename to integration_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_precedence/CMakeLists.txt b/integration_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_precedence/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_precedence/CMakeLists.txt rename to integration_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_precedence/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_with_local_use_warning/CMakeLists.txt b/integration_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_with_local_use_warning/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_with_local_use_warning/CMakeLists.txt rename to integration_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/env_var_with_local_use_warning/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/escape_template_args_off_returned/CMakeLists.txt b/integration_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/escape_template_args_off_returned/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/escape_template_args_off_returned/CMakeLists.txt rename to integration_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/escape_template_args_off_returned/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/escape_template_args_on_returned/CMakeLists.txt b/integration_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/escape_template_args_on_returned/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/escape_template_args_on_returned/CMakeLists.txt rename to integration_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/escape_template_args_on_returned/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_path_returned/CMakeLists.txt b/integration_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_path_returned/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_path_returned/CMakeLists.txt rename to integration_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_path_returned/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_with_http_header_warning/CMakeLists.txt b/integration_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_with_http_header_warning/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_with_http_header_warning/CMakeLists.txt rename to integration_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/git_archive_with_http_header_warning/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/http_header_returned/CMakeLists.txt b/integration_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/http_header_returned/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/http_header_returned/CMakeLists.txt rename to integration_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/http_header_returned/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/invalid_local_path/CMakeLists.txt b/integration_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/invalid_local_path/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/invalid_local_path/CMakeLists.txt rename to integration_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/invalid_local_path/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_off/CMakeLists.txt b/integration_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_off/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_off/CMakeLists.txt rename to integration_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_off/CMakeLists.txt diff --git a/cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_on/CMakeLists.txt b/integration_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_on/CMakeLists.txt similarity index 100% rename from cmake_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_on/CMakeLists.txt rename to integration_tests/BA_PACKAGE_PREREQ_CMCONF_INIT/local_use_on/CMakeLists.txt diff --git a/cmake_tests/CMakeLists.txt b/integration_tests/CMakeLists.txt similarity index 100% rename from cmake_tests/CMakeLists.txt rename to integration_tests/CMakeLists.txt diff --git a/cmake_tests/README.md b/integration_tests/README.md similarity index 100% rename from cmake_tests/README.md rename to integration_tests/README.md diff --git a/cmake_tests/TEST.cmake b/integration_tests/TEST.cmake similarity index 100% rename from cmake_tests/TEST.cmake rename to integration_tests/TEST.cmake diff --git a/cmake_tests/VARS.cmake b/integration_tests/VARS.cmake similarity index 100% rename from cmake_tests/VARS.cmake rename to integration_tests/VARS.cmake diff --git a/cmake_tests/include_general.cmake b/integration_tests/include_general.cmake similarity index 100% rename from cmake_tests/include_general.cmake rename to integration_tests/include_general.cmake diff --git a/cmake_tests/mock/CMCONF.cmake b/integration_tests/mock/CMCONF.cmake similarity index 100% rename from cmake_tests/mock/CMCONF.cmake rename to integration_tests/mock/CMCONF.cmake diff --git a/cmake_tests/mock/CMDEF_VARS.cmake b/integration_tests/mock/CMDEF_VARS.cmake similarity index 100% rename from cmake_tests/mock/CMDEF_VARS.cmake rename to integration_tests/mock/CMDEF_VARS.cmake diff --git a/cmake_tests/mock/CMLIB_CACHE.cmake b/integration_tests/mock/CMLIB_CACHE.cmake similarity index 100% rename from cmake_tests/mock/CMLIB_CACHE.cmake rename to integration_tests/mock/CMLIB_CACHE.cmake diff --git a/cmake_tests/mock/CMLIB_DEPENDENCY.cmake b/integration_tests/mock/CMLIB_DEPENDENCY.cmake similarity index 100% rename from cmake_tests/mock/CMLIB_DEPENDENCY.cmake rename to integration_tests/mock/CMLIB_DEPENDENCY.cmake diff --git a/cmake_tests/mock/CMLIB_STORAGE.cmake b/integration_tests/mock/CMLIB_STORAGE.cmake similarity index 100% rename from cmake_tests/mock/CMLIB_STORAGE.cmake rename to integration_tests/mock/CMLIB_STORAGE.cmake diff --git a/cmake_tests/mock/CMUTIL.cmake b/integration_tests/mock/CMUTIL.cmake similarity index 100% rename from cmake_tests/mock/CMUTIL.cmake rename to integration_tests/mock/CMUTIL.cmake diff --git a/cmake_tests/mock/MOCK_VARIABLES.md b/integration_tests/mock/MOCK_VARIABLES.md similarity index 100% rename from cmake_tests/mock/MOCK_VARIABLES.md rename to integration_tests/mock/MOCK_VARIABLES.md diff --git a/cmake_tests/mock/test/CMakeLists.txt b/integration_tests/mock/test/CMakeLists.txt similarity index 100% rename from cmake_tests/mock/test/CMakeLists.txt rename to integration_tests/mock/test/CMakeLists.txt diff --git a/cmake_tests/mock/test/get_fails_on_undefined/CMakeLists.txt b/integration_tests/mock/test/get_fails_on_undefined/CMakeLists.txt similarity index 100% rename from cmake_tests/mock/test/get_fails_on_undefined/CMakeLists.txt rename to integration_tests/mock/test/get_fails_on_undefined/CMakeLists.txt diff --git a/cmake_tests/mock/test/get_returns_value/CMakeLists.txt b/integration_tests/mock/test/get_returns_value/CMakeLists.txt similarity index 100% rename from cmake_tests/mock/test/get_returns_value/CMakeLists.txt rename to integration_tests/mock/test/get_returns_value/CMakeLists.txt diff --git a/test/README.md b/unit_tests/README.md similarity index 100% rename from test/README.md rename to unit_tests/README.md diff --git a/test/app/CMakeLists.txt b/unit_tests/app/CMakeLists.txt similarity index 100% rename from test/app/CMakeLists.txt rename to unit_tests/app/CMakeLists.txt diff --git a/test/app/lib/shared_library/CMakeLists.txt b/unit_tests/app/lib/shared_library/CMakeLists.txt similarity index 100% rename from test/app/lib/shared_library/CMakeLists.txt rename to unit_tests/app/lib/shared_library/CMakeLists.txt diff --git a/test/app/lib/shared_library/library.c b/unit_tests/app/lib/shared_library/library.c similarity index 100% rename from test/app/lib/shared_library/library.c rename to unit_tests/app/lib/shared_library/library.c diff --git a/test/app/lib/shared_library_for_prerun/CMakeLists.txt b/unit_tests/app/lib/shared_library_for_prerun/CMakeLists.txt similarity index 100% rename from test/app/lib/shared_library_for_prerun/CMakeLists.txt rename to unit_tests/app/lib/shared_library_for_prerun/CMakeLists.txt diff --git a/test/app/lib/shared_library_for_prerun/include/shared_out_of_dir_symlink.h b/unit_tests/app/lib/shared_library_for_prerun/include/shared_out_of_dir_symlink.h similarity index 100% rename from test/app/lib/shared_library_for_prerun/include/shared_out_of_dir_symlink.h rename to unit_tests/app/lib/shared_library_for_prerun/include/shared_out_of_dir_symlink.h diff --git a/test/app/lib/shared_library_for_prerun/library.c b/unit_tests/app/lib/shared_library_for_prerun/library.c similarity index 100% rename from test/app/lib/shared_library_for_prerun/library.c rename to unit_tests/app/lib/shared_library_for_prerun/library.c diff --git a/test/app/lib/shared_library_gst/CMakeLists.txt b/unit_tests/app/lib/shared_library_gst/CMakeLists.txt similarity index 100% rename from test/app/lib/shared_library_gst/CMakeLists.txt rename to unit_tests/app/lib/shared_library_gst/CMakeLists.txt diff --git a/test/app/lib/shared_library_gst/library.c b/unit_tests/app/lib/shared_library_gst/library.c similarity index 100% rename from test/app/lib/shared_library_gst/library.c rename to unit_tests/app/lib/shared_library_gst/library.c diff --git a/test/app/main.c b/unit_tests/app/main.c similarity index 100% rename from test/app/main.c rename to unit_tests/app/main.c diff --git a/test/app/tests_list/gstreamer_style_naming.txt b/unit_tests/app/tests_list/gstreamer_style_naming.txt similarity index 100% rename from test/app/tests_list/gstreamer_style_naming.txt rename to unit_tests/app/tests_list/gstreamer_style_naming.txt diff --git a/test/app/tests_list/standard_install.txt b/unit_tests/app/tests_list/standard_install.txt similarity index 100% rename from test/app/tests_list/standard_install.txt rename to unit_tests/app/tests_list/standard_install.txt diff --git a/test/app/tests_list/symlink_named_differently.txt b/unit_tests/app/tests_list/symlink_named_differently.txt similarity index 100% rename from test/app/tests_list/symlink_named_differently.txt rename to unit_tests/app/tests_list/symlink_named_differently.txt diff --git a/test/app/tests_list/symlink_named_same_as_file.txt b/unit_tests/app/tests_list/symlink_named_same_as_file.txt similarity index 100% rename from test/app/tests_list/symlink_named_same_as_file.txt rename to unit_tests/app/tests_list/symlink_named_same_as_file.txt diff --git a/test/img/BAPackageTestActivity.svg b/unit_tests/img/BAPackageTestActivity.svg similarity index 100% rename from test/img/BAPackageTestActivity.svg rename to unit_tests/img/BAPackageTestActivity.svg diff --git a/test/run_app_tests.cmake b/unit_tests/run_app_tests.cmake similarity index 100% rename from test/run_app_tests.cmake rename to unit_tests/run_app_tests.cmake diff --git a/test/run_tests.sh b/unit_tests/run_tests.sh similarity index 100% rename from test/run_tests.sh rename to unit_tests/run_tests.sh diff --git a/test/run_vars_test.cmake b/unit_tests/run_vars_test.cmake similarity index 100% rename from test/run_vars_test.cmake rename to unit_tests/run_vars_test.cmake From 501ad843ca6ac60c596506732d22f232b09737b0 Mon Sep 17 00:00:00 2001 From: Jan Kubalek Date: Mon, 9 Mar 2026 11:56:49 +0100 Subject: [PATCH 27/28] Update wording for env vars --- doc/GlobalConfiguration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/GlobalConfiguration.md b/doc/GlobalConfiguration.md index 0f8549f..06e5710 100644 --- a/doc/GlobalConfiguration.md +++ b/doc/GlobalConfiguration.md @@ -23,7 +23,7 @@ to [CMake User Package Registry]. [CMCONF Example] can be found in [CMCONF] repo | BA_PACKAGE_LOCAL_PATH | Absolute Path to the local Package Repository. Used if BA_PACKAGE_LOCAL_USE is set to ON. If ENV variable BA_PACKAGE_LOCAL_PATH is set it is used instead of this CMCONF setting. Resulting value is passed to URI_TEMPLATE setting variable as "file:///package///" | | BA_PACKAGE_URI_REVISION | Git revision to use when accessing Package Repository. Used if BA_PACKAGE_LOCAL_USE is set to OFF. | | BA_PACKAGE_URI_TEMPLATE_REMOTE | [CMake-lib] template to construct URI to download package from remote Package Repository. Passed to URI_TEMPLATE setting variable. Used if BA_PACKAGE_LOCAL_USE is set to OFF. | -| BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE | [CMake-lib] template to construct the git archive path. Passed to GIT_PATH_TEMPLATE setting variable. If set the BA_PACKAGE_URI_TEMPLATE_REMOTE shall point to the Git repository and BA_PACKAGE_URI_REVISION is used as Git revision. Used if BA_PACKAGE_LOCAL_USE is set to OFF. | +| BA_PACKAGE_GIT_ARCHIVE_PATH_TEMPLATE | When set the BA_PACKAGE_URI_TEMPLATE_REMOTE represents a Git repository URI which forces `git clone --archive` to be used to download depdencies instead of HTTP download. It is [CMake-lib] template to construct the git archive path. Passed to GIT_PATH_TEMPLATE setting variable. If set the BA_PACKAGE_URI_TEMPLATE_REMOTE shall point to the Git repository and BA_PACKAGE_URI_REVISION is used as Git revision. Used if BA_PACKAGE_LOCAL_USE is set to OFF. | | BA_PACKAGE_HTTP_HEADER | HTTP header to use when accessing Package Repository. Used if BA_PACKAGE_LOCAL_USE is set to OFF. | | BA_PACKAGE_TEMPLATE_ARGS_URI_ESCAPE | If set to ON, template argument values (REVISION, GIT_PATH, PACKAGE_GROUP_NAME, ARCHIVE_NAME) are percent-encoded before URI template expansion. Used if BA_PACKAGE_LOCAL_USE is set to OFF. | From ae26bec3ccb13b426f62460587729f521470a93d Mon Sep 17 00:00:00 2001 From: Jan Kubalek Date: Sun, 19 Apr 2026 18:00:36 +0200 Subject: [PATCH 28/28] TYPOs fixed --- STORAGE.cmake | 2 +- integration_tests/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/STORAGE.cmake b/STORAGE.cmake index 344163c..0b140f9 100644 --- a/STORAGE.cmake +++ b/STORAGE.cmake @@ -23,7 +23,7 @@ ENDIF() BA_PACKAGE_VARS_GET(HTTP_HEADER http_header) IF(http_header) IF(CMLIB_FILE_DOWNLOAD_HTTP_HEADER AND (NOT CMLIB_FILE_DOWNLOAD_HTTP_HEADER STREQUAL http_header)) - MESSAGE(WARNING "BA_PACKAGE_HTTP_HEADER is defined but CMLIB_FILE_DOWNLOAD_HTTP_HEADER is already set. Using BA_PACKAGE HTTP_HEADER.") + MESSAGE(WARNING "BA_PACKAGE_HTTP_HEADER is defined but CMLIB_FILE_DOWNLOAD_HTTP_HEADER is already set. Using BA_PACKAGE_HTTP_HEADER.") ENDIF() SET(CMLIB_FILE_DOWNLOAD_HTTP_HEADER "${http_header}" CACHE STRING diff --git a/integration_tests/README.md b/integration_tests/README.md index 074d060..cfa7459 100644 --- a/integration_tests/README.md +++ b/integration_tests/README.md @@ -10,7 +10,7 @@ Each test is a standalone CMakeLists.txt in its own subdirectory. From repository root: ``` -cmake -P cmake_tests/CMakeLists.txt +cmake -P integration_tests/CMakeLists.txt ``` ## Mocks