From 7000572bbea7795fa8b72e7bd1780242e05fcb87 Mon Sep 17 00:00:00 2001 From: alexandreSalconiDenis <38858375+alexandreSalconiDenis@users.noreply.github.com> Date: Wed, 27 Jan 2021 07:29:15 -0500 Subject: [PATCH] Feature/prettify package lock (#162) * add prettify macro * apply the prettier and change the name of the output arg * add parameter inside macro * resolve path if its cmake_sourc_dir * add missing uparsed argument * add early unit test for prettifier * retab prettify_cpm_add_package * rename prettify_cpm_add_package cpm_prettyfy_package_arguments * convert macro to function and fix unit test * fix typo in the name of the parse argument in prettyfy function * change the unit test to test only the function * add test for the commented part * remove dead code * fix typo * run cmake-format on CPM.cmake * reformated unit test prettify * flip the logic to add space on new argument unparsed to avoir space at the end * remove debug message * apply most suggestion from pr 162, disable formating only for small part in unit test * add unit test to cover defauld source dir added inside lock * run format tool on unit test * remove dead code * change the prettifier from 4 space to 2 * run format on unit test --- cmake/CPM.cmake | 71 ++++++++++++++++++++++++++- test/unit/package-lock_prettify.cmake | 42 ++++++++++++++++ 2 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 test/unit/package-lock_prettify.cmake diff --git a/cmake/CPM.cmake b/cmake/CPM.cmake index a469a7d..2bd2def 100644 --- a/cmake/CPM.cmake +++ b/cmake/CPM.cmake @@ -464,14 +464,16 @@ endmacro() function(cpm_add_to_package_lock Name) if(NOT CPM_DONT_CREATE_PACKAGE_LOCK) - file(APPEND ${CPM_PACKAGE_LOCK_FILE} "# ${Name}\nCPMDeclarePackage(${Name} \"${ARGN}\")\n") + cpm_prettify_package_arguments(PRETTY_ARGN false ${ARGN}) + file(APPEND ${CPM_PACKAGE_LOCK_FILE} "# ${Name}\nCPMDeclarePackage(${Name}\n${PRETTY_ARGN})\n") endif() endfunction() function(cpm_add_comment_to_package_lock Name) if(NOT CPM_DONT_CREATE_PACKAGE_LOCK) + cpm_prettify_package_arguments(PRETTY_ARGN true ${ARGN}) file(APPEND ${CPM_PACKAGE_LOCK_FILE} - "# ${Name} (unversioned)\n# CPMDeclarePackage(${Name} \"${ARGN}\")\n" + "# ${Name} (unversioned)\n# CPMDeclarePackage(${Name}\n${PRETTY_ARGN}#)\n" ) endif() endfunction() @@ -625,3 +627,68 @@ function(cpm_is_git_tag_commit_hash GIT_TAG RESULT) endif() endif() endfunction() + +function(cpm_prettify_package_arguments OUT_VAR IS_IN_COMMENT) + set(oneValueArgs + NAME + FORCE + VERSION + GIT_TAG + DOWNLOAD_ONLY + GITHUB_REPOSITORY + GITLAB_REPOSITORY + GIT_REPOSITORY + SOURCE_DIR + DOWNLOAD_COMMAND + FIND_PACKAGE_ARGUMENTS + NO_CACHE + GIT_SHALLOW + ) + set(multiValueArgs OPTIONS) + cmake_parse_arguments(CPM_ARGS "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + foreach(oneArgName ${oneValueArgs}) + if(DEFINED CPM_ARGS_${oneArgName}) + if(${IS_IN_COMMENT}) + string(APPEND PRETTY_OUT_VAR "#") + endif() + if(${oneArgName} STREQUAL "SOURCE_DIR") + string(REPLACE ${CMAKE_SOURCE_DIR} "\${CMAKE_SOURCE_DIR}" CPM_ARGS_${oneArgName} + ${CPM_ARGS_${oneArgName}} + ) + endif() + string(APPEND PRETTY_OUT_VAR " ${oneArgName} ${CPM_ARGS_${oneArgName}}\n") + endif() + endforeach() + foreach(multiArgName ${multiValueArgs}) + if(DEFINED CPM_ARGS_${multiArgName}) + if(${IS_IN_COMMENT}) + string(APPEND PRETTY_OUT_VAR "#") + endif() + string(APPEND PRETTY_OUT_VAR " ${multiArgName}\n") + foreach(singleOption ${CPM_ARGS_${multiArgName}}) + if(${IS_IN_COMMENT}) + string(APPEND PRETTY_OUT_VAR "#") + endif() + string(APPEND PRETTY_OUT_VAR " \"${singleOption}\"\n") + endforeach() + endif() + endforeach() + + if(NOT "${CPM_ARGS_UNPARSED_ARGUMENTS}" STREQUAL "") + if(${IS_IN_COMMENT}) + string(APPEND PRETTY_OUT_VAR "#") + endif() + string(APPEND PRETTY_OUT_VAR " ") + foreach(CPM_ARGS_UNPARSED_ARGUMENT ${CPM_ARGS_UNPARSED_ARGUMENTS}) + string(APPEND PRETTY_OUT_VAR " ${CPM_ARGS_UNPARSED_ARGUMENT}") + endforeach() + string(APPEND PRETTY_OUT_VAR "\n") + endif() + + set(${OUT_VAR} + ${PRETTY_OUT_VAR} + PARENT_SCOPE + ) + +endfunction() diff --git a/test/unit/package-lock_prettify.cmake b/test/unit/package-lock_prettify.cmake new file mode 100644 index 0000000..e77110d --- /dev/null +++ b/test/unit/package-lock_prettify.cmake @@ -0,0 +1,42 @@ +cmake_minimum_required(VERSION 3.14 FATAL_ERROR) + +include(${CPM_PATH}/CPM.cmake) +include(${CPM_PATH}/testing.cmake) + +# cmake-format: off +cpm_prettify_package_arguments(PRETTY_ARGN false + NAME Dependency + SOURCE_DIR ${CMAKE_SOURCE_DIR}/local_dependency/dependency + UPDATE_DISCONNECTED ON + TESTCUSTOMDATA TRUE +) +# cmake-format: on +set(EXPECTED_UNCOMMENTED + " NAME Dependency + SOURCE_DIR \${CMAKE_SOURCE_DIR}/local_dependency/dependency + UPDATE_DISCONNECTED ON TESTCUSTOMDATA TRUE +" +) +assert_equal(${PRETTY_ARGN} ${EXPECTED_UNCOMMENTED}) + +# cmake-format: off +cpm_prettify_package_arguments(PRETTY_ARGN true + NAME Dependency + SOURCE_DIR ${CMAKE_SOURCE_DIR}/local_dependency/dependency + UPDATE_DISCONNECTED ON + TESTCUSTOMDATA TRUE +) +# cmake-format: on +set(EXPECTED_COMMENTED + "# NAME Dependency +# SOURCE_DIR \${CMAKE_SOURCE_DIR}/local_dependency/dependency +# UPDATE_DISCONNECTED ON TESTCUSTOMDATA TRUE +" +) +assert_equal(${PRETTY_ARGN} ${EXPECTED_COMMENTED}) + +cpm_prettify_package_arguments(PRETTY_ARGN true "local directory") +set(EXPECTED_COMMENTED_LOCALDIR "# local directory +" +) +assert_equal(${PRETTY_ARGN} ${EXPECTED_COMMENTED_LOCALDIR})