diff --git a/.cmake-format.py b/.cmake-format.py index 468731cdffd0eda26eee1786b2c20bcf1bb538ef..32c6f98a1eddd0bd769310ff70afb6f6a71f0037 100644 --- a/.cmake-format.py +++ b/.cmake-format.py @@ -6,14 +6,14 @@ with section("parse"): # noqa: F821 additional_commands = { "mtime_add_example": { - "kwargs": {"ARG": 1}, - "pargs": {"flags": ["2"], "nargs": "2+"}, + "pargs": 2, + "kwargs": {"LIBRARIES": "*", "DEPENDS": "*"}, } } with section("format"): # noqa: F821 - max_pargs_hwrap = 4 - always_wrap = ["add_library"] + dangle_parens = True + max_lines_hwrap = 0 keyword_case = "upper" autosort = True @@ -21,7 +21,20 @@ with section("markup"): # noqa: F821 first_comment_is_literal = True with section("lint"): # noqa: F821 - disabled_codes = ["C0111", "C0103", "C0113", "C0301"] + # The formatter sometimes fails to fit the code into the line limit (C0301) + # and can disagree with the linter regarding the indentation (C0307): + disabled_codes = ["C0301", "C0307"] + # TODO: do not tolerate the following errors: + disabled_codes.extend(["C0111", "C0113"]) + # Names of local variables must be in lowercase but sometimes we need to + # override standard CMake variables: + local_var_pattern = "CMAKE_[0-9A-Z_]+|[a-z][0-9a-z_]+" + # The standard names of the languages in CMake are C and Fortran. Names of + # private variables must be in lowercase but can have substings "C" and + # "Fortran": + private_var_pattern = ( + "([a-z_][0-9a-z_]*_)?(C|Fortran)(_[a-z_][0-9a-z_]*)?|[a-z_][0-9a-z_]+" + ) # The standard name of the language in CMake is Fortran. Names of public # variables must be in uppercase but can have substring "Fortran": public_var_pattern = ( diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index 68aa220c7a6be73a1628461dbde2dbcf8fb678c4..03396833dd004de58aa7fcca3552b3281702fced 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -18,5 +18,8 @@ f913b91b554cfb59a5734f34b62656f4a623e0dd # Formatted Python code in the src directory with isort and black acb430c56641057e83765c3662c69c2fbc3c84af -# Formatted entire CMake code base with cmake-fortmat +# Formatted entire CMake code base with cmake-format b34d40a92a6a4508e37705bd0d71b0e95be748b5 + +# Reformatted entire CMake code base with updated configuration +e952f9224ade9bfc438d47cf8675a4e3e175b582 diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 13d0e442560cbe6c9723e076049ee9885ce31fd3..e55a6bd71ce55771c6380a3a9871427b54b4e185 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -62,7 +62,7 @@ Check style: - isort ${python_files} --profile black --skip-gitignore --line-length ${python_line_length} - black ${python_files} --line-length ${python_line_length} - - cmake_files=$(find "${CI_PROJECT_DIR}" -name '*.cmake' -o -name 'CMakeLists.txt') + - cmake_files=$(find "${CI_PROJECT_DIR}" -name '*.cmake' -o -name 'CMakeLists.txt' -o -name 'config.cmake.in') - cmake-format -i ${cmake_files} - git -C ${CI_PROJECT_DIR} diff --patch-with-raw > ${STYLE_PATCH} diff --git a/CMakeLists.txt b/CMakeLists.txt index 024d1709874d818444594b5353a9edb0d229f10c..663815c1817b5a294c2decbf6eef2d8aa06df366 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,7 +8,8 @@ cmake_minimum_required(VERSION 3.18) project( mtime VERSION 1.2.2 - LANGUAGES Fortran C) + LANGUAGES Fortran C +) option(BUILD_TESTING "Build tests" ON) option(BUILD_EXAMPLES "Build examples" ON) @@ -23,8 +24,9 @@ if(CMAKE_Fortran_COMPILER_ID STREQUAL "GNU") add_compile_options($<$<COMPILE_LANGUAGE:Fortran>:-ffree-line-length-none>) endif() -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in - ${CMAKE_CURRENT_BINARY_DIR}/config.h) +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h +) include(GNUInstallDirs) @@ -44,24 +46,32 @@ if(BUILD_DOCUMENTATION) add_subdirectory(doc) endif() -export(EXPORT "${PROJECT_NAME}-targets" - FILE "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-targets.cmake") +export( + EXPORT "${PROJECT_NAME}-targets" + FILE "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-targets.cmake" +) include(CMakePackageConfigHelpers) configure_package_config_file( "${PROJECT_SOURCE_DIR}/cmake/config.cmake.in" "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config.cmake" INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake" - NO_SET_AND_CHECK_MACRO NO_CHECK_REQUIRED_COMPONENTS_MACRO) + NO_SET_AND_CHECK_MACRO NO_CHECK_REQUIRED_COMPONENTS_MACRO +) write_basic_package_version_file( "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake" VERSION "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}" - COMPATIBILITY AnyNewerVersion) - -install(EXPORT "${PROJECT_NAME}-targets" - DESTINATION "${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}/cmake") - -install(FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config.cmake" - "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake" - DESTINATION "${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}/cmake") + COMPATIBILITY AnyNewerVersion +) + +install( + EXPORT "${PROJECT_NAME}-targets" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}/cmake" +) + +install( + FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config.cmake" + "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}/cmake" +) diff --git a/cmake/config.cmake.in b/cmake/config.cmake.in index 01ef3506c6a2cb912eda7c6170db3ffb66ceecc3..f15441eab2902dca31d2832479ecd0a823ef6500 100644 --- a/cmake/config.cmake.in +++ b/cmake/config.cmake.in @@ -8,4 +8,6 @@ include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@-targets.cmake") include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(@PROJECT_NAME@ REQUIRED_VARS @PROJECT_NAME@_DIR) +find_package_handle_standard_args( + @PROJECT_NAME@ REQUIRED_VARS @PROJECT_NAME@_DIR +) diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 0aaa15e2745a69bcd4520eb2acb72634dfecf724..ce4098e1ef81a66a070b9ceb7ac9708adde4bb60 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -12,7 +12,8 @@ set(DX_DOCDIR "doxygen-doc") set(top_srcdir "${PROJECT_SOURCE_DIR}") set(srcdir "${CMAKE_CURRENT_SOURCE_DIR}") -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in - ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile) +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile +) add_custom_target(doc COMMAND doxygen Doxyfile) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index be25e6c1823ed49e2413861c6096b6def3e5a23c..e3336f5fc98b5792ca678200c34f9a6bdd47a060 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -13,17 +13,19 @@ mtime_add_example(duration duration.f90 DEPENDS mo_kind.f90) mtime_add_example(example example.f90) -add_library( - mtime_event_manager - mo_event_manager.f90) +add_library(mtime_event_manager mo_event_manager.f90) target_link_libraries(mtime_event_manager PUBLIC mtime::mtime) -file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/iconatm.nml" - DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") +file( + COPY "${CMAKE_CURRENT_SOURCE_DIR}/iconatm.nml" + DESTINATION "${CMAKE_CURRENT_BINARY_DIR}" +) mtime_add_example(iconatm iconatm.f90 LIBRARIES mtime_event_manager) -file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/iconoce.nml" - DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") +file( + COPY "${CMAKE_CURRENT_SOURCE_DIR}/iconoce.nml" + DESTINATION "${CMAKE_CURRENT_BINARY_DIR}" +) mtime_add_example(iconoce iconoce.f90 LIBRARIES mtime_event_manager) mtime_add_example(model_integration model_integration.c) diff --git a/examples/example_helper.cmake b/examples/example_helper.cmake index 77568ef465801b5bd83b33b8d70f6a5079e26ae3..0e763eb2196fe666bf8cab21b8d0233d902a765e 100644 --- a/examples/example_helper.cmake +++ b/examples/example_helper.cmake @@ -5,13 +5,7 @@ function(mtime_add_example test_name file_name) - cmake_parse_arguments( - PARSE_ARGV - 2 - ARG - "" - "" - "LIBRARIES;DEPENDS") + cmake_parse_arguments(PARSE_ARGV 2 ARG "" "" "LIBRARIES;DEPENDS") add_executable("${test_name}" ${file_name} ${ARG_DEPENDS}) target_link_libraries("${test_name}" PRIVATE mtime::mtime ${ARG_LIBRARIES}) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 42e3a931e7e890b1cf6f66faca238d74012186ae..bff707f6a9029347145435117cc149d187214556 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -29,10 +29,10 @@ add_library( mtime_timedelta.c mtime_utilities.c orbit.c - vsop87.c) + vsop87.c +) -add_library( - ${PROJECT_NAME}::mtime ALIAS mtime) +add_library(${PROJECT_NAME}::mtime ALIAS mtime) set(Fortran_MODULE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/mod") set_target_properties( @@ -41,7 +41,8 @@ set_target_properties( Fortran_MODULE_DIRECTORY "${Fortran_MODULE_DIRECTORY}" C_STANDARD 99 C_STANDARD_REQUIRED ON - EXPORT_NAME ${PROJECT_NAME}::mtime) + EXPORT_NAME ${PROJECT_NAME}::mtime +) target_include_directories( mtime @@ -51,9 +52,12 @@ target_include_directories( $<INSTALL_INTERFACE:$<$<COMPILE_LANGUAGE:Fortran>:${CMAKE_INSTALL_INCLUDEDIR}>> # Path to the C headers: $<BUILD_INTERFACE:$<$<COMPILE_LANGUAGE:C>:${PROJECT_SOURCE_DIR}/include>> - $<INSTALL_INTERFACE:$<$<COMPILE_LANGUAGE:C>:${CMAKE_INSTALL_INCLUDEDIR}>>) + $<INSTALL_INTERFACE:$<$<COMPILE_LANGUAGE:C>:${CMAKE_INSTALL_INCLUDEDIR}>> +) install(TARGETS mtime EXPORT "${PROJECT_NAME}-targets") -install(DIRECTORY "${Fortran_MODULE_DIRECTORY}/" - "${PROJECT_SOURCE_DIR}/include/" TYPE INCLUDE) +install( + DIRECTORY "${Fortran_MODULE_DIRECTORY}/" "${PROJECT_SOURCE_DIR}/include/" + TYPE INCLUDE +) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 1afe09f21472fd31ca4ff6368a9a051745132d70..ab6466ef12d9c68765d4df3aeeca5831a6d7d916 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -7,15 +7,18 @@ find_path( Check_INCLUDE_DIRS NAMES check.h HINTS ${Check_DIR} ENV Check_DIR - PATH_SUFFIXES include src) + PATH_SUFFIXES include src +) find_library( Check_LIBRARIES check HINTS ${Check_DIR} ENV Check_DIR - PATH_SUFFIXES lib lib64) + PATH_SUFFIXES lib lib64 +) find_library( Subunit_LIBRARIES subunit HINTS ${Check_DIR} ENV Check_DIR - PATH_SUFFIXES lib lib64) + PATH_SUFFIXES lib lib64 +) if(Check_INCLUDE_DIRS) message(STATUS "Found check.h in ${Check_INCLUDE_DIRS}") @@ -29,13 +32,13 @@ else() message(WARNING "libcheck not found") endif() -add_library( - Check::check UNKNOWN IMPORTED) +add_library(Check::check UNKNOWN IMPORTED) set_target_properties( Check::check PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${Check_INCLUDE_DIRS}" IMPORTED_LINK_INTERFACE_LANGUAGES "C" - IMPORTED_LOCATION "${Check_LIBRARIES}") + IMPORTED_LOCATION "${Check_LIBRARIES}" +) add_library( mtime_check @@ -44,7 +47,8 @@ add_library( mtime_datetime_test.c mtime_julianDay_test.c mtime_time_test.c - mtime_timedelta_test.c) + mtime_timedelta_test.c +) target_include_directories(mtime_check PUBLIC ${PROJECT_BINARY_DIR})