Skip to content

Commit 7000572

Browse files
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
1 parent fe8d15b commit 7000572

File tree

2 files changed

+111
-2
lines changed

2 files changed

+111
-2
lines changed

cmake/CPM.cmake

Lines changed: 69 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -464,14 +464,16 @@ endmacro()
464464

465465
function(cpm_add_to_package_lock Name)
466466
if(NOT CPM_DONT_CREATE_PACKAGE_LOCK)
467-
file(APPEND ${CPM_PACKAGE_LOCK_FILE} "# ${Name}\nCPMDeclarePackage(${Name} \"${ARGN}\")\n")
467+
cpm_prettify_package_arguments(PRETTY_ARGN false ${ARGN})
468+
file(APPEND ${CPM_PACKAGE_LOCK_FILE} "# ${Name}\nCPMDeclarePackage(${Name}\n${PRETTY_ARGN})\n")
468469
endif()
469470
endfunction()
470471

471472
function(cpm_add_comment_to_package_lock Name)
472473
if(NOT CPM_DONT_CREATE_PACKAGE_LOCK)
474+
cpm_prettify_package_arguments(PRETTY_ARGN true ${ARGN})
473475
file(APPEND ${CPM_PACKAGE_LOCK_FILE}
474-
"# ${Name} (unversioned)\n# CPMDeclarePackage(${Name} \"${ARGN}\")\n"
476+
"# ${Name} (unversioned)\n# CPMDeclarePackage(${Name}\n${PRETTY_ARGN}#)\n"
475477
)
476478
endif()
477479
endfunction()
@@ -625,3 +627,68 @@ function(cpm_is_git_tag_commit_hash GIT_TAG RESULT)
625627
endif()
626628
endif()
627629
endfunction()
630+
631+
function(cpm_prettify_package_arguments OUT_VAR IS_IN_COMMENT)
632+
set(oneValueArgs
633+
NAME
634+
FORCE
635+
VERSION
636+
GIT_TAG
637+
DOWNLOAD_ONLY
638+
GITHUB_REPOSITORY
639+
GITLAB_REPOSITORY
640+
GIT_REPOSITORY
641+
SOURCE_DIR
642+
DOWNLOAD_COMMAND
643+
FIND_PACKAGE_ARGUMENTS
644+
NO_CACHE
645+
GIT_SHALLOW
646+
)
647+
set(multiValueArgs OPTIONS)
648+
cmake_parse_arguments(CPM_ARGS "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
649+
650+
foreach(oneArgName ${oneValueArgs})
651+
if(DEFINED CPM_ARGS_${oneArgName})
652+
if(${IS_IN_COMMENT})
653+
string(APPEND PRETTY_OUT_VAR "#")
654+
endif()
655+
if(${oneArgName} STREQUAL "SOURCE_DIR")
656+
string(REPLACE ${CMAKE_SOURCE_DIR} "\${CMAKE_SOURCE_DIR}" CPM_ARGS_${oneArgName}
657+
${CPM_ARGS_${oneArgName}}
658+
)
659+
endif()
660+
string(APPEND PRETTY_OUT_VAR " ${oneArgName} ${CPM_ARGS_${oneArgName}}\n")
661+
endif()
662+
endforeach()
663+
foreach(multiArgName ${multiValueArgs})
664+
if(DEFINED CPM_ARGS_${multiArgName})
665+
if(${IS_IN_COMMENT})
666+
string(APPEND PRETTY_OUT_VAR "#")
667+
endif()
668+
string(APPEND PRETTY_OUT_VAR " ${multiArgName}\n")
669+
foreach(singleOption ${CPM_ARGS_${multiArgName}})
670+
if(${IS_IN_COMMENT})
671+
string(APPEND PRETTY_OUT_VAR "#")
672+
endif()
673+
string(APPEND PRETTY_OUT_VAR " \"${singleOption}\"\n")
674+
endforeach()
675+
endif()
676+
endforeach()
677+
678+
if(NOT "${CPM_ARGS_UNPARSED_ARGUMENTS}" STREQUAL "")
679+
if(${IS_IN_COMMENT})
680+
string(APPEND PRETTY_OUT_VAR "#")
681+
endif()
682+
string(APPEND PRETTY_OUT_VAR " ")
683+
foreach(CPM_ARGS_UNPARSED_ARGUMENT ${CPM_ARGS_UNPARSED_ARGUMENTS})
684+
string(APPEND PRETTY_OUT_VAR " ${CPM_ARGS_UNPARSED_ARGUMENT}")
685+
endforeach()
686+
string(APPEND PRETTY_OUT_VAR "\n")
687+
endif()
688+
689+
set(${OUT_VAR}
690+
${PRETTY_OUT_VAR}
691+
PARENT_SCOPE
692+
)
693+
694+
endfunction()
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
2+
3+
include(${CPM_PATH}/CPM.cmake)
4+
include(${CPM_PATH}/testing.cmake)
5+
6+
# cmake-format: off
7+
cpm_prettify_package_arguments(PRETTY_ARGN false
8+
NAME Dependency
9+
SOURCE_DIR ${CMAKE_SOURCE_DIR}/local_dependency/dependency
10+
UPDATE_DISCONNECTED ON
11+
TESTCUSTOMDATA TRUE
12+
)
13+
# cmake-format: on
14+
set(EXPECTED_UNCOMMENTED
15+
" NAME Dependency
16+
SOURCE_DIR \${CMAKE_SOURCE_DIR}/local_dependency/dependency
17+
UPDATE_DISCONNECTED ON TESTCUSTOMDATA TRUE
18+
"
19+
)
20+
assert_equal(${PRETTY_ARGN} ${EXPECTED_UNCOMMENTED})
21+
22+
# cmake-format: off
23+
cpm_prettify_package_arguments(PRETTY_ARGN true
24+
NAME Dependency
25+
SOURCE_DIR ${CMAKE_SOURCE_DIR}/local_dependency/dependency
26+
UPDATE_DISCONNECTED ON
27+
TESTCUSTOMDATA TRUE
28+
)
29+
# cmake-format: on
30+
set(EXPECTED_COMMENTED
31+
"# NAME Dependency
32+
# SOURCE_DIR \${CMAKE_SOURCE_DIR}/local_dependency/dependency
33+
# UPDATE_DISCONNECTED ON TESTCUSTOMDATA TRUE
34+
"
35+
)
36+
assert_equal(${PRETTY_ARGN} ${EXPECTED_COMMENTED})
37+
38+
cpm_prettify_package_arguments(PRETTY_ARGN true "local directory")
39+
set(EXPECTED_COMMENTED_LOCALDIR "# local directory
40+
"
41+
)
42+
assert_equal(${PRETTY_ARGN} ${EXPECTED_COMMENTED_LOCALDIR})

0 commit comments

Comments
 (0)