diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 3b06200f221..20913a31934 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -118,3 +118,8 @@ repos: - python - tex - xml + - repo: https://github.com/BlankSpruce/gersemi-pre-commit + rev: 0.27.7 + hooks: + - id: gersemi + files: (^CMakeLists\.txt$|\.cmake$) diff --git a/CMakeLists.txt b/CMakeLists.txt index 62d49823b47..974ee1fc8ae 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,88 +25,95 @@ set(CMAKE_MODULE_PATH include(get_versions) get_versions("include/VERSION" GRASS_VERSION_MAJOR GRASS_VERSION_MINOR - GRASS_VERSION_RELEASE GRASS_VERSION_SUFFIX GRASS_VERSION_DATE) + GRASS_VERSION_RELEASE GRASS_VERSION_SUFFIX GRASS_VERSION_DATE +) set(GRASS_VERSION_NUMBER - ${GRASS_VERSION_MAJOR}.${GRASS_VERSION_MINOR}.${GRASS_VERSION_RELEASE}${GRASS_VERSION_SUFFIX}) -set(GRASS_VERSION_STRING ${GRASS_VERSION_MAJOR}.${GRASS_VERSION_MINOR}.${GRASS_VERSION_RELEASE}) + ${GRASS_VERSION_MAJOR}.${GRASS_VERSION_MINOR}.${GRASS_VERSION_RELEASE}${GRASS_VERSION_SUFFIX} +) +set(GRASS_VERSION_STRING + ${GRASS_VERSION_MAJOR}.${GRASS_VERSION_MINOR}.${GRASS_VERSION_RELEASE} +) message(STATUS "GRASS_VERSION_NUMBER = '${GRASS_VERSION_NUMBER}'") set(GRASS_VERSION_UPDATE_PKG "0.2") -project(GRASS VERSION ${GRASS_VERSION_STRING} - HOMEPAGE_URL https://grass.osgeo.org) +project( + GRASS + VERSION ${GRASS_VERSION_STRING} + HOMEPAGE_URL https://grass.osgeo.org +) string(TOLOWER ${PROJECT_NAME} PROJECT_NAME_LOWER) set(BUILD_SHARED_LIBS ON) # message(FATAL_ERROR "VCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET}") if(MSVC) - if(BUILD_SHARED_LIBS) - set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) - endif() - set_property(GLOBAL PROPERTY USE_FOLDERS ON) + if(BUILD_SHARED_LIBS) + set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) + endif() + set_property(GLOBAL PROPERTY USE_FOLDERS ON) endif() if(NOT CMAKE_CXX_STANDARD) - set(CMAKE_CXX_STANDARD 11) - set(CMAKE_CXX_STANDARD_REQUIRED ON) + set(CMAKE_CXX_STANDARD 11) + set(CMAKE_CXX_STANDARD_REQUIRED ON) endif() if(NOT CMAKE_C_STANDARD) - set(CMAKE_C_STANDARD 11) - set(CMAKE_C_STANDARD_REQUIRED ON) + set(CMAKE_C_STANDARD 11) + set(CMAKE_C_STANDARD_REQUIRED ON) endif() set(x11_default_option_enabled ON) set(nls_default_option_enabled ON) if(WIN32) - set(x11_default_option_enabled OFF) - set(nls_default_option_enabled OFF) + set(x11_default_option_enabled OFF) + set(nls_default_option_enabled OFF) elseif(APPLE) - set(x11_default_option_enabled OFF) + set(x11_default_option_enabled OFF) endif() set(lfs_default_option_enabled ON) # Configure CCache if available if(NOT MSVC) - option(USE_CCACHE "Use ccache" ON) - if(USE_CCACHE) - find_program(CCACHE_FOUND ccache) - if(CCACHE_FOUND) - set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache) - set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache) - message(STATUS "ccache found") - endif(CCACHE_FOUND) - endif(USE_CCACHE) + option(USE_CCACHE "Use ccache" ON) + if(USE_CCACHE) + find_program(CCACHE_FOUND ccache) + if(CCACHE_FOUND) + set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache) + set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache) + message(STATUS "ccache found") + endif(CCACHE_FOUND) + endif(USE_CCACHE) endif(NOT MSVC) if(USE_ALTERNATE_LINKER) - include("cmake/modules/linker.cmake") + include("cmake/modules/linker.cmake") endif() if(CMAKE_BUILD_TYPE) - set(grass_build_type "${CMAKE_BUILD_TYPE}") - if(MSVC) - set(find_library_suffix "") - else() - string(TOLOWER "${grass_build_type}" grass_build_type_lc) - set(find_library_suffix "_RELEASE") - if(grass_build_type_lc STREQUAL "debug") - set(find_library_suffix "_DEBUG") + set(grass_build_type "${CMAKE_BUILD_TYPE}") + if(MSVC) + set(find_library_suffix "") + else() + string(TOLOWER "${grass_build_type}" grass_build_type_lc) + set(find_library_suffix "_RELEASE") + if(grass_build_type_lc STREQUAL "debug") + set(find_library_suffix "_DEBUG") + endif() endif() - endif() else() - set(find_library_suffix "") - if(MSVC) - set(CMAKE_BUILD_TYPE "DEBUG") - endif() + set(find_library_suffix "") + if(MSVC) + set(CMAKE_BUILD_TYPE "DEBUG") + endif() endif() # For install tree (first do install tree) set(LD_LIBRARY_PATH_VAR "LD_LIBRARY_PATH") if(APPLE) - set(LD_LIBRARY_PATH_VAR "LD_RUN_PATH") + set(LD_LIBRARY_PATH_VAR "LD_RUN_PATH") elseif(WIN32) - set(LD_LIBRARY_PATH_VAR "PATH") + set(LD_LIBRARY_PATH_VAR "PATH") endif() # Graphics options @@ -145,8 +152,11 @@ option(WITH_PDAL "Build with PDAL support" ON) option(WITH_LIBLAS "Build with libLAS support" OFF) # Other options -option(WITH_LARGEFILES "Build with large file support" - ${lfs_default_option_enabled}) +option( + WITH_LARGEFILES + "Build with large file support" + ${lfs_default_option_enabled} +) option(WITH_DOCS "Build documentation" ON) option(WITH_GUI "Build GUI" ON) option(WITH_FHS "Install with FHS" OFF) @@ -162,21 +172,25 @@ include(GRASSInstallDirs) # Setup build locations. if(MSVC) - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE} ${OUTDIR}/${GRASS_INSTALL_LIBDIR}) + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE} + ${OUTDIR}/${GRASS_INSTALL_LIBDIR} + ) elseif(NOT CMAKE_LIBRARY_OUTPUT_DIRECTORY) - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTDIR}/${GRASS_INSTALL_LIBDIR}) + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTDIR}/${GRASS_INSTALL_LIBDIR}) endif() if(MSVC) - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE} ${OUTDIR}/${GRASS_INSTALL_LIBDIR}) + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE} + ${OUTDIR}/${GRASS_INSTALL_LIBDIR} + ) elseif(NOT CMAKE_ARCHIVE_OUTPUT_DIRECTORY) - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${OUTDIR}/${GRASS_INSTALL_LIBDIR}) + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${OUTDIR}/${GRASS_INSTALL_LIBDIR}) endif() if(APPLE) - if(POLICY CMP0042) - cmake_policy(SET CMP0042 NEW) - endif() - set(CMAKE_MACOSX_RPATH TRUE) + if(POLICY CMP0042) + cmake_policy(SET CMP0042 NEW) + endif() + set(CMAKE_MACOSX_RPATH TRUE) endif() set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${GRASS_INSTALL_LIBDIR}") @@ -184,20 +198,46 @@ set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) # TODO: a proper fix to this workaround if(WITH_FHS) - file(CREATE_LINK ${OUTDIR}/${GRASS_INSTALL_DEMODIR} - ${RUNTIME_GISBASE}/demolocation SYMBOLIC) - file(CREATE_LINK ${OUTDIR}/${GRASS_INSTALL_FONTSDIR} ${RUNTIME_GISBASE}/fonts - SYMBOLIC) - file(CREATE_LINK ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/colors - ${RUNTIME_GISBASE}/etc/colors SYMBOLIC) - file(CREATE_LINK ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/colors.desc - ${RUNTIME_GISBASE}/etc/colors.desc SYMBOLIC) - file(CREATE_LINK ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/element_list - ${RUNTIME_GISBASE}/etc/element_list SYMBOLIC) - file(CREATE_LINK ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/renamed_options - ${RUNTIME_GISBASE}/etc/renamed_options SYMBOLIC) - file(CREATE_LINK ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/VERSIONNUMBER - ${RUNTIME_GISBASE}/etc/VERSIONNUMBER SYMBOLIC) + file( + CREATE_LINK + ${OUTDIR}/${GRASS_INSTALL_DEMODIR} + ${RUNTIME_GISBASE}/demolocation + SYMBOLIC + ) + file( + CREATE_LINK ${OUTDIR}/${GRASS_INSTALL_FONTSDIR} ${RUNTIME_GISBASE}/fonts + SYMBOLIC + ) + file( + CREATE_LINK + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/colors + ${RUNTIME_GISBASE}/etc/colors + SYMBOLIC + ) + file( + CREATE_LINK + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/colors.desc + ${RUNTIME_GISBASE}/etc/colors.desc + SYMBOLIC + ) + file( + CREATE_LINK + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/element_list + ${RUNTIME_GISBASE}/etc/element_list + SYMBOLIC + ) + file( + CREATE_LINK + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/renamed_options + ${RUNTIME_GISBASE}/etc/renamed_options + SYMBOLIC + ) + file( + CREATE_LINK + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/VERSIONNUMBER + ${RUNTIME_GISBASE}/etc/VERSIONNUMBER + SYMBOLIC + ) endif() include(set_compiler_flags) @@ -225,31 +265,53 @@ set(HTML2MAN ${CMAKE_BINARY_DIR}/utils/g.html2man.py) set(env_path "$ENV{PATH}") if(WIN32) - set(sep "\\\;") - string(REPLACE ";" "${sep}" env_path "${env_path}") - set(env_pythonpath "$ENV{PYTHONPATH}") - string(REPLACE ";" "${sep}" env_pythonpath "${env_pythonpath}") - set(grass_env_command - ${CMAKE_COMMAND} -E env "PATH=${BIN_DIR}${sep}${SCRIPTS_DIR}${sep}${env_path}${sep}${LIB_DIR}" - "PYTHONPATH=${ETC_PYTHON_DIR}${sep}${GUI_WXPYTHON_DIR}${sep}${env_pythonpath}" - "GRASS_PYTHON=${PYTHON_EXECUTABLE}" "GISBASE=${RUN_GISBASE_NATIVE}" "GISRC=${GISRC}" "LC_ALL=C" "LANG=C" - "ARCH=${BUILD_ARCH}" "ARCH_DISTDIR=${RUN_GISBASE_NATIVE}" - "LANGUAGE=C" "MODULE_TOPDIR=${MODULE_TOPDIR}" "HTMLDIR=${DOC_DIR}" - "LC_ALL=C" "LANG=C" - "LANGUAGE=C" - "VERSION_NUMBER=\"${GRASS_VERSION_NUMBER}\"" - "VERSION_DATE=\"${GRASS_VERSION_DATE}\"") + set(sep "\\\;") + string(REPLACE ";" "${sep}" env_path "${env_path}") + set(env_pythonpath "$ENV{PYTHONPATH}") + string(REPLACE ";" "${sep}" env_pythonpath "${env_pythonpath}") + set(grass_env_command + ${CMAKE_COMMAND} + -E + env + "PATH=${BIN_DIR}${sep}${SCRIPTS_DIR}${sep}${env_path}${sep}${LIB_DIR}" + "PYTHONPATH=${ETC_PYTHON_DIR}${sep}${GUI_WXPYTHON_DIR}${sep}${env_pythonpath}" + "GRASS_PYTHON=${PYTHON_EXECUTABLE}" + "GISBASE=${RUN_GISBASE_NATIVE}" + "GISRC=${GISRC}" + "LC_ALL=C" + "LANG=C" + "ARCH=${BUILD_ARCH}" + "ARCH_DISTDIR=${RUN_GISBASE_NATIVE}" + "LANGUAGE=C" + "MODULE_TOPDIR=${MODULE_TOPDIR}" + "HTMLDIR=${DOC_DIR}" + "LC_ALL=C" + "LANG=C" + "LANGUAGE=C" + "VERSION_NUMBER=\"${GRASS_VERSION_NUMBER}\"" + "VERSION_DATE=\"${GRASS_VERSION_DATE}\"" + ) else() - set(sep ":") - set(grass_env_command - ${CMAKE_COMMAND} -E env "PATH=${BIN_DIR}${sep}${SCRIPTS_DIR}${sep}${env_path}" - "PYTHONPATH=${ETC_PYTHON_DIR}${sep}${GUI_WXPYTHON_DIR}${sep}$ENV{PYTHONPATH}" - "LD_LIBRARY_PATH=${LIB_DIR}${sep}$ENV{LD_LIBRARY_PATH}" - "GISBASE=${RUN_GISBASE_NATIVE}" "GISRC=${GISRC}" "LC_ALL=C" "LANG=C" - "ARCH=${BUILD_ARCH}" "ARCH_DISTDIR=${RUN_GISBASE_NATIVE}" - "LANGUAGE=C" "MODULE_TOPDIR=${MODULE_TOPDIR}" "HTMLDIR=${DOC_DIR}" - "VERSION_NUMBER=\"${GRASS_VERSION_NUMBER}\"" - "VERSION_DATE=\"${GRASS_VERSION_DATE}\"") + set(sep ":") + set(grass_env_command + ${CMAKE_COMMAND} + -E + env + "PATH=${BIN_DIR}${sep}${SCRIPTS_DIR}${sep}${env_path}" + "PYTHONPATH=${ETC_PYTHON_DIR}${sep}${GUI_WXPYTHON_DIR}${sep}$ENV{PYTHONPATH}" + "LD_LIBRARY_PATH=${LIB_DIR}${sep}$ENV{LD_LIBRARY_PATH}" + "GISBASE=${RUN_GISBASE_NATIVE}" + "GISRC=${GISRC}" + "LC_ALL=C" + "LANG=C" + "ARCH=${BUILD_ARCH}" + "ARCH_DISTDIR=${RUN_GISBASE_NATIVE}" + "LANGUAGE=C" + "MODULE_TOPDIR=${MODULE_TOPDIR}" + "HTMLDIR=${DOC_DIR}" + "VERSION_NUMBER=\"${GRASS_VERSION_NUMBER}\"" + "VERSION_DATE=\"${GRASS_VERSION_DATE}\"" + ) endif() set(NO_HTML_DESCR_TARGETS "g.parser;ximgview;test.raster3d.lib") @@ -260,7 +322,7 @@ add_subdirectory(include) include_directories("${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}") if(MSVC) - include_directories("${CMAKE_SOURCE_DIR}/msvc") + include_directories("${CMAKE_SOURCE_DIR}/msvc") endif() add_subdirectory(lib) @@ -279,41 +341,55 @@ set(ALL_SUBDIRS raster3d scripts temporal - vector) + vector +) foreach(d ${ALL_SUBDIRS}) - add_subdirectory(${d}) + add_subdirectory(${d}) endforeach() if(WITH_GUI) - add_subdirectory(gui) + add_subdirectory(gui) endif() add_custom_target( - ALL_MODULES - DEPENDS ${modules_list} - COMMENT "Building all modules.") + ALL_MODULES + DEPENDS ${modules_list} + COMMENT "Building all modules." +) set_target_properties(ALL_MODULES PROPERTIES FOLDER Misc) if(WITH_DOCS) - add_subdirectory(doc) - add_subdirectory(man) - install(DIRECTORY ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/ DESTINATION ${GRASS_INSTALL_DOCDIR}) - install(DIRECTORY ${OUTDIR}/${GRASS_INSTALL_MANDIR}/ DESTINATION ${GRASS_INSTALL_MANDIR}) + add_subdirectory(doc) + add_subdirectory(man) + install( + DIRECTORY ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/ + DESTINATION ${GRASS_INSTALL_DOCDIR} + ) + install( + DIRECTORY ${OUTDIR}/${GRASS_INSTALL_MANDIR}/ + DESTINATION ${GRASS_INSTALL_MANDIR} + ) endif() add_custom_target( - r_colors_thumbnails ALL - COMMAND ${CMAKE_COMMAND} -E make_directory - ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/colortables - COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} ${THUMBNAILS_PY} - ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/colortables - BYPRODUCTS ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/colortables - COMMENT "Creating thumbnails" - DEPENDS ALL_MODULES) + r_colors_thumbnails + ALL + COMMAND + ${CMAKE_COMMAND} -E make_directory + ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/colortables + COMMAND + ${grass_env_command} ${PYTHON_EXECUTABLE} ${THUMBNAILS_PY} + ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/colortables + BYPRODUCTS ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/colortables + COMMENT "Creating thumbnails" + DEPENDS ALL_MODULES +) set_target_properties(r_colors_thumbnails PROPERTIES FOLDER Misc) -install(DIRECTORY ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/colortables - DESTINATION ${GRASS_INSTALL_DOCDIR}) +install( + DIRECTORY ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/colortables + DESTINATION ${GRASS_INSTALL_DOCDIR} +) set(misc_files AUTHORS @@ -324,28 +400,37 @@ set(misc_files GPL.TXT INSTALL.md REQUIREMENTS.md - translators.csv) + translators.csv +) install(FILES ${misc_files} DESTINATION ${GRASS_INSTALL_MISCDIR}) if(WITH_NLS) - add_subdirectory(locale) + add_subdirectory(locale) endif() # TODO: To be discussed - add_subdirectory(testsuite) - add_subdirectory(macosx) if(WITH_X11) - build_program_in_subdir(visualization/ximgview DEPENDS grass_gis X11::X11) + build_program_in_subdir(visualization/ximgview DEPENDS grass_gis X11::X11) endif() add_subdirectory(cmake) include(CMakePackageConfigHelpers) -configure_package_config_file(GRASSConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/GRASSConfig.cmake - INSTALL_DESTINATION ${GRASS_INSTALL_CMAKECONFDIR}/GRASS) -write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/GRASSConfigVersion.cmake - VERSION ${GRASS_VERSION_STRING} - COMPATIBILITY ExactVersion) -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/GRASSConfig.cmake - ${CMAKE_CURRENT_BINARY_DIR}/GRASSConfigVersion.cmake - DESTINATION ${GRASS_INSTALL_CMAKECONFDIR}/GRASS) +configure_package_config_file( + GRASSConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/GRASSConfig.cmake + INSTALL_DESTINATION ${GRASS_INSTALL_CMAKECONFDIR}/GRASS +) +write_basic_package_version_file( + ${CMAKE_CURRENT_BINARY_DIR}/GRASSConfigVersion.cmake + VERSION ${GRASS_VERSION_STRING} + COMPATIBILITY ExactVersion +) +install( + FILES + ${CMAKE_CURRENT_BINARY_DIR}/GRASSConfig.cmake + ${CMAKE_CURRENT_BINARY_DIR}/GRASSConfigVersion.cmake + DESTINATION ${GRASS_INSTALL_CMAKECONFDIR}/GRASS +) set_property(GLOBAL PROPERTY USE_FOLDERS YES) diff --git a/cmake/ctypesgen.cmake b/cmake/ctypesgen.cmake index b61e47392f7..76426f0ba2c 100644 --- a/cmake/ctypesgen.cmake +++ b/cmake/ctypesgen.cmake @@ -6,10 +6,17 @@ COPYRIGHT: (c) 2020-2025 by the GRASS Development Team SPDX-License-Identifier: GPL-2.0-or-later #]] -foreach(req OUT_FILE HDRS LIBS CTYPESGEN_PY COMPILER) - if(NOT DEFINED ${req} OR "${${req}}" STREQUAL "") - message(FATAL_ERROR "ctypesgen.cmake: you must set ${req}") - endif() +foreach( + req + OUT_FILE + HDRS + LIBS + CTYPESGEN_PY + COMPILER +) + if(NOT DEFINED ${req} OR "${${req}}" STREQUAL "") + message(FATAL_ERROR "ctypesgen.cmake: you must set ${req}") + endif() endforeach() set(ENV{GISRC} @@ -23,11 +30,11 @@ set(ENV{PYTHONPATH} "${OUTDIR}/${GRASS_INSTALL_GUIDIR}/wxpython:${OUTDIR}/${GRASS_INSTALL_PYDIR}:$ENV{PYTHONPATH}" ) if(NOT MSVC) - set(_d - "${OUTDIR}/${GRASS_INSTALL_LIBDIR}:${OUTDIR}/${GRASS_INSTALL_BINDIR}:${OUTDIR}/${GRASS_INSTALL_SCRIPTDIR}" - ) - set(ENV{${LD_LIBRARY_PATH_VAR}} "${_d}:$ENV{${LD_LIBRARY_PATH_VAR}}") - unset(_d) + set(_d + "${OUTDIR}/${GRASS_INSTALL_LIBDIR}:${OUTDIR}/${GRASS_INSTALL_BINDIR}:${OUTDIR}/${GRASS_INSTALL_SCRIPTDIR}" + ) + set(ENV{${LD_LIBRARY_PATH_VAR}} "${_d}:$ENV{${LD_LIBRARY_PATH_VAR}}") + unset(_d) endif() set(ENV{LC_ALL} C) @@ -35,39 +42,41 @@ set(CTYPESFLAGS "${COMPILER} -E ${C_FLAGS}") set(LIBRARIES) foreach(LIB ${LIBS}) - list(APPEND LIBRARIES "-l${LIB}") + list(APPEND LIBRARIES "-l${LIB}") endforeach() set(INC_HEADERS) foreach(INCHDR ${INCHDRS}) - list(APPEND INC_HEADERS "-I${INCHDR}") + list(APPEND INC_HEADERS "-I${INCHDR}") endforeach() set(DEFINES) if(MSVC) - # ?? + # ?? elseif(APPLE) - # ?? + # ?? else() - list(APPEND DEFINES "__GLIBC_HAVE_LONG_LONG") + list(APPEND DEFINES "__GLIBC_HAVE_LONG_LONG") endif() list(TRANSFORM DEFINES PREPEND "-D") set(HEADERS) foreach(HDR ${HDRS}) - list(APPEND HEADERS "${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass/${HDR}") + list(APPEND HEADERS "${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass/${HDR}") endforeach() message(STATUS "Generating ${OUT_FILE}") execute_process( - COMMAND - ${PYTHON_EXECUTABLE} ${CTYPESGEN_PY} --cpp ${CTYPESFLAGS} - --no-embed-preamble --strip-build-path ${RUNTIME_GISBASE} ${INC_HEADERS} - ${LIBRARIES} ${DEFINES} -o ${OUT_FILE} ${HEADERS} - OUTPUT_VARIABLE ctypesgen_OV - ERROR_VARIABLE ctypesgen_EV - RESULT_VARIABLE ctypesgen_RV COMMAND_ECHO STDOUT) + COMMAND + ${PYTHON_EXECUTABLE} ${CTYPESGEN_PY} --cpp ${CTYPESFLAGS} + --no-embed-preamble --strip-build-path ${RUNTIME_GISBASE} ${INC_HEADERS} + ${LIBRARIES} ${DEFINES} -o ${OUT_FILE} ${HEADERS} + OUTPUT_VARIABLE ctypesgen_OV + ERROR_VARIABLE ctypesgen_EV + RESULT_VARIABLE ctypesgen_RV + COMMAND_ECHO STDOUT +) if(ctypesgen_RV) - message(FATAL_ERROR "${CTYPESGEN_PY}: ${ctypesgen_EV} \n ${ctypesgen_OV}") + message(FATAL_ERROR "${CTYPESGEN_PY}: ${ctypesgen_EV} \n ${ctypesgen_OV}") endif() diff --git a/cmake/find_scripts/CMakeLists.txt b/cmake/find_scripts/CMakeLists.txt index 512583d4169..639043a6a64 100644 --- a/cmake/find_scripts/CMakeLists.txt +++ b/cmake/find_scripts/CMakeLists.txt @@ -1,16 +1,16 @@ install( - FILES - FindCairo.cmake - FindCBLAS.cmake - FindFFTW.cmake - FindGEOS.cmake - FindLAPACKE.cmake - FindLibLAS.cmake - FindMySQL.cmake - FindNetCDF.cmake - FindPCRE.cmake - FindPROJ.cmake - FindReadline.cmake - Findzstd.cmake - DESTINATION - ${GRASS_INSTALL_ETCDIR}/cmake) + FILES + FindCairo.cmake + FindCBLAS.cmake + FindFFTW.cmake + FindGEOS.cmake + FindLAPACKE.cmake + FindLibLAS.cmake + FindMySQL.cmake + FindNetCDF.cmake + FindPCRE.cmake + FindPROJ.cmake + FindReadline.cmake + Findzstd.cmake + DESTINATION ${GRASS_INSTALL_ETCDIR}/cmake +) diff --git a/cmake/find_scripts/FindCBLAS.cmake b/cmake/find_scripts/FindCBLAS.cmake index e525006c19a..3a7f74de9cc 100644 --- a/cmake/find_scripts/FindCBLAS.cmake +++ b/cmake/find_scripts/FindCBLAS.cmake @@ -129,20 +129,26 @@ endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args( - CBLAS - REQUIRED_VARS CBLAS_FOUND CBLAS_LIBRARIES CBLAS_INCLUDEDIR HAVE_CBLAS_DGEMM - VERSION_VAR CBLAS_VERSION) + CBLAS + REQUIRED_VARS CBLAS_FOUND CBLAS_LIBRARIES CBLAS_INCLUDEDIR HAVE_CBLAS_DGEMM + VERSION_VAR CBLAS_VERSION +) mark_as_advanced(CBLAS_LIBRARIES CBLAS_INCLUDEDIR) message(STATUS "Using CBLAS package: ${CBLAS_PKGCONFIG}") if(CBLAS_FOUND AND NOT TARGET CBLAS::CBLAS) - add_library(CBLAS::CBLAS INTERFACE IMPORTED) - set_target_properties( - CBLAS::CBLAS PROPERTIES INTERFACE_LINK_LIBRARIES "${CBLAS_LIBRARIES}" - INTERFACE_INCLUDE_DIRECTORIES "${CBLAS_INCLUDEDIR}") - if(CBLAS_LINKER_FLAGS) - set_target_properties(CBLAS::CBLAS PROPERTIES INTERFACE_LINK_OPTIONS - "${CBLAS_LINKER_FLAGS}") - endif() + add_library(CBLAS::CBLAS INTERFACE IMPORTED) + set_target_properties( + CBLAS::CBLAS + PROPERTIES + INTERFACE_LINK_LIBRARIES "${CBLAS_LIBRARIES}" + INTERFACE_INCLUDE_DIRECTORIES "${CBLAS_INCLUDEDIR}" + ) + if(CBLAS_LINKER_FLAGS) + set_target_properties( + CBLAS::CBLAS + PROPERTIES INTERFACE_LINK_OPTIONS "${CBLAS_LINKER_FLAGS}" + ) + endif() endif() diff --git a/cmake/find_scripts/FindCairo.cmake b/cmake/find_scripts/FindCairo.cmake index 0e5959dddc0..f5ebb06a094 100644 --- a/cmake/find_scripts/FindCairo.cmake +++ b/cmake/find_scripts/FindCairo.cmake @@ -38,60 +38,79 @@ set(_include_dirs) set(_link_libraries) set(_library_dirs) if(PkgConfig_FOUND) - set(_modules ft fc pdf ps svg) - if(WITH_X11) - list(APPEND _modules xlib xlib-xrender) - endif() - foreach(_module ${_modules}) - pkg_check_modules(PC_cairo-${_module} cairo-${_module} QUIET) - list(APPEND _include_dirs ${PC_cairo-${_module}_INCLUDE_DIRS}) - list(APPEND _link_libraries ${PC_cairo-${_module}_LIBRARIES}) - list(APPEND _library_dirs ${PC_cairo-${_module}_LIBRARY_DIRS}) - endforeach() + set(_modules + ft + fc + pdf + ps + svg + ) + if(WITH_X11) + list(APPEND _modules xlib xlib-xrender) + endif() + foreach(_module ${_modules}) + pkg_check_modules(PC_cairo-${_module} cairo-${_module} QUIET) + list(APPEND _include_dirs ${PC_cairo-${_module}_INCLUDE_DIRS}) + list(APPEND _link_libraries ${PC_cairo-${_module}_LIBRARIES}) + list(APPEND _library_dirs ${PC_cairo-${_module}_LIBRARY_DIRS}) + endforeach() endif() find_path( - Cairo_INCLUDE_DIR - NAMES cairo.h - HINTS ${PC_CAIRO_INCLUDEDIR} ${PC_CAIRO_INCLUDE_DIRS} - PATH_SUFFIXES cairo) + Cairo_INCLUDE_DIR + NAMES cairo.h + HINTS ${PC_CAIRO_INCLUDEDIR} ${PC_CAIRO_INCLUDE_DIRS} + PATH_SUFFIXES cairo +) find_library( - Cairo_LIBRARY_RELEASE - NAMES cairo - HINTS ${PC_CAIRO_LIBDIR} ${PC_CAIRO_LIBRARY_DIRS}) + Cairo_LIBRARY_RELEASE + NAMES cairo + HINTS ${PC_CAIRO_LIBDIR} ${PC_CAIRO_LIBRARY_DIRS} +) find_library( - Cairo_LIBRARY_DEBUG - NAMES cairod - HINTS ${PC_CAIRO_LIBDIR} ${PC_CAIRO_LIBRARY_DIRS}) + Cairo_LIBRARY_DEBUG + NAMES cairod + HINTS ${PC_CAIRO_LIBDIR} ${PC_CAIRO_LIBRARY_DIRS} +) set(Cairo_LIBRARY) if(Cairo_LIBRARY_DEBUG) - set(Cairo_LIBRARY ${Cairo_LIBRARY_DEBUG}) + set(Cairo_LIBRARY ${Cairo_LIBRARY_DEBUG}) elseif(Cairo_LIBRARY_RELEASE) - set(Cairo_LIBRARY ${Cairo_LIBRARY_RELEASE}) + set(Cairo_LIBRARY ${Cairo_LIBRARY_RELEASE}) endif() if(Cairo_INCLUDE_DIR) - if(EXISTS "${Cairo_INCLUDE_DIR}/cairo-version.h") - file(READ "${Cairo_INCLUDE_DIR}/cairo-version.h" Cairo_VERSION_CONTENT) - - string(REGEX MATCH "#define +CAIRO_VERSION_MAJOR +([0-9]+)" _dummy - "${Cairo_VERSION_CONTENT}") - set(Cairo_VERSION_MAJOR "${CMAKE_MATCH_1}") - - string(REGEX MATCH "#define +CAIRO_VERSION_MINOR +([0-9]+)" _dummy - "${Cairo_VERSION_CONTENT}") - set(Cairo_VERSION_MINOR "${CMAKE_MATCH_1}") - - string(REGEX MATCH "#define +CAIRO_VERSION_MICRO +([0-9]+)" _dummy - "${Cairo_VERSION_CONTENT}") - set(Cairo_VERSION_MICRO "${CMAKE_MATCH_1}") - - set(Cairo_VERSION - "${Cairo_VERSION_MAJOR}.${Cairo_VERSION_MINOR}.${Cairo_VERSION_MICRO}") - endif() + if(EXISTS "${Cairo_INCLUDE_DIR}/cairo-version.h") + file(READ "${Cairo_INCLUDE_DIR}/cairo-version.h" Cairo_VERSION_CONTENT) + + string( + REGEX MATCH "#define +CAIRO_VERSION_MAJOR +([0-9]+)" + _dummy + "${Cairo_VERSION_CONTENT}" + ) + set(Cairo_VERSION_MAJOR "${CMAKE_MATCH_1}") + + string( + REGEX MATCH "#define +CAIRO_VERSION_MINOR +([0-9]+)" + _dummy + "${Cairo_VERSION_CONTENT}" + ) + set(Cairo_VERSION_MINOR "${CMAKE_MATCH_1}") + + string( + REGEX MATCH "#define +CAIRO_VERSION_MICRO +([0-9]+)" + _dummy + "${Cairo_VERSION_CONTENT}" + ) + set(Cairo_VERSION_MICRO "${CMAKE_MATCH_1}") + + set(Cairo_VERSION + "${Cairo_VERSION_MAJOR}.${Cairo_VERSION_MINOR}.${Cairo_VERSION_MICRO}" + ) + endif() endif() list(REMOVE_DUPLICATES _library_dirs) @@ -100,23 +119,30 @@ list(REMOVE_DUPLICATES Cairo_INCLUDE_DIRS) set(Cairo_LIBRARIES ${Cairo_LIBRARY} ${_link_libraries}) list(REMOVE_DUPLICATES Cairo_LIBRARIES) -mark_as_advanced(Cairo_INCLUDE_DIRS Cairo_LIBRARY Cairo_LIBRARY_RELEASE - Cairo_LIBRARY_DEBUG) +mark_as_advanced( + Cairo_INCLUDE_DIRS + Cairo_LIBRARY + Cairo_LIBRARY_RELEASE + Cairo_LIBRARY_DEBUG +) include(FindPackageHandleStandardArgs) find_package_handle_standard_args( - Cairo - REQUIRED_VARS Cairo_INCLUDE_DIR Cairo_LIBRARY - VERSION_VAR Cairo_VERSION) + Cairo + REQUIRED_VARS Cairo_INCLUDE_DIR Cairo_LIBRARY + VERSION_VAR Cairo_VERSION +) if(Cairo_FOUND AND NOT TARGET Cairo::Cairo) - add_library(Cairo::Cairo UNKNOWN IMPORTED) - set_target_properties( - Cairo::Cairo - PROPERTIES IMPORTED_LOCATION "${Cairo_LIBRARY}" - INTERFACE_INCLUDE_DIRECTORIES "${Cairo_INCLUDE_DIR}" - INTERFACE_LINK_LIBRARIES "${Cairo_LIBRARIES}" - INTERFACE_LINK_DIRECTORIES "${_library_dirs}") + add_library(Cairo::Cairo UNKNOWN IMPORTED) + set_target_properties( + Cairo::Cairo + PROPERTIES + IMPORTED_LOCATION "${Cairo_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${Cairo_INCLUDE_DIR}" + INTERFACE_LINK_LIBRARIES "${Cairo_LIBRARIES}" + INTERFACE_LINK_DIRECTORIES "${_library_dirs}" + ) endif() unset(_include_dirs) @@ -125,6 +151,10 @@ unset(_library_dirs) set(CMAKE_REQUIRED_INCLUDES ${Cairo_INCLUDE_DIRS}) include(CheckSymbolExists) -check_symbol_exists(CAIRO_HAS_XLIB_XRENDER_SURFACE "cairo.h" CAIRO_HAS_XLIB_XRENDER_SURFACE) +check_symbol_exists( + CAIRO_HAS_XLIB_XRENDER_SURFACE + "cairo.h" + CAIRO_HAS_XLIB_XRENDER_SURFACE +) mark_as_advanced(CAIRO_HAS_XLIB_XRENDER_SURFACE) unset(CMAKE_REQUIRED_INCLUDES) diff --git a/cmake/find_scripts/FindFFTW-egpbos.cmake b/cmake/find_scripts/FindFFTW-egpbos.cmake index 1861b54c19d..81b9da74106 100644 --- a/cmake/find_scripts/FindFFTW-egpbos.cmake +++ b/cmake/find_scripts/FindFFTW-egpbos.cmake @@ -38,29 +38,28 @@ # TODO (maybe): extend with ExternalProject download + build option # TODO: put on conda-forge - -if( NOT FFTW_ROOT AND DEFINED ENV{FFTWDIR} ) - set( FFTW_ROOT $ENV{FFTWDIR} ) +if(NOT FFTW_ROOT AND DEFINED ENV{FFTWDIR}) + set(FFTW_ROOT $ENV{FFTWDIR}) endif() # Check if we can use PkgConfig find_package(PkgConfig) #Determine from PKG -if( PKG_CONFIG_FOUND AND NOT FFTW_ROOT ) - pkg_check_modules( PKG_FFTW QUIET "fftw3" ) +if(PKG_CONFIG_FOUND AND NOT FFTW_ROOT) + pkg_check_modules(PKG_FFTW QUIET "fftw3") endif() #Check whether to search static or dynamic libs -set( CMAKE_FIND_LIBRARY_SUFFIXES_SAV ${CMAKE_FIND_LIBRARY_SUFFIXES} ) +set(CMAKE_FIND_LIBRARY_SUFFIXES_SAV ${CMAKE_FIND_LIBRARY_SUFFIXES}) -if( ${FFTW_USE_STATIC_LIBS} ) - set( CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX} ) +if(${FFTW_USE_STATIC_LIBS}) + set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX}) else() - set( CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_SAV} ) + set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_SAV}) endif() -if( FFTW_ROOT ) +if(FFTW_ROOT) # find libs find_library( @@ -69,7 +68,7 @@ if( FFTW_ROOT ) PATHS ${FFTW_ROOT} PATH_SUFFIXES "lib" "lib64" NO_DEFAULT_PATH - ) + ) find_library( FFTW_DOUBLE_THREADS_LIB @@ -77,7 +76,7 @@ if( FFTW_ROOT ) PATHS ${FFTW_ROOT} PATH_SUFFIXES "lib" "lib64" NO_DEFAULT_PATH - ) + ) find_library( FFTW_DOUBLE_OPENMP_LIB @@ -85,7 +84,7 @@ if( FFTW_ROOT ) PATHS ${FFTW_ROOT} PATH_SUFFIXES "lib" "lib64" NO_DEFAULT_PATH - ) + ) find_library( FFTW_DOUBLE_MPI_LIB @@ -93,7 +92,7 @@ if( FFTW_ROOT ) PATHS ${FFTW_ROOT} PATH_SUFFIXES "lib" "lib64" NO_DEFAULT_PATH - ) + ) find_library( FFTW_FLOAT_LIB @@ -101,7 +100,7 @@ if( FFTW_ROOT ) PATHS ${FFTW_ROOT} PATH_SUFFIXES "lib" "lib64" NO_DEFAULT_PATH - ) + ) find_library( FFTW_FLOAT_THREADS_LIB @@ -109,7 +108,7 @@ if( FFTW_ROOT ) PATHS ${FFTW_ROOT} PATH_SUFFIXES "lib" "lib64" NO_DEFAULT_PATH - ) + ) find_library( FFTW_FLOAT_OPENMP_LIB @@ -117,7 +116,7 @@ if( FFTW_ROOT ) PATHS ${FFTW_ROOT} PATH_SUFFIXES "lib" "lib64" NO_DEFAULT_PATH - ) + ) find_library( FFTW_FLOAT_MPI_LIB @@ -125,7 +124,7 @@ if( FFTW_ROOT ) PATHS ${FFTW_ROOT} PATH_SUFFIXES "lib" "lib64" NO_DEFAULT_PATH - ) + ) find_library( FFTW_LONGDOUBLE_LIB @@ -133,7 +132,7 @@ if( FFTW_ROOT ) PATHS ${FFTW_ROOT} PATH_SUFFIXES "lib" "lib64" NO_DEFAULT_PATH - ) + ) find_library( FFTW_LONGDOUBLE_THREADS_LIB @@ -141,7 +140,7 @@ if( FFTW_ROOT ) PATHS ${FFTW_ROOT} PATH_SUFFIXES "lib" "lib64" NO_DEFAULT_PATH - ) + ) find_library( FFTW_LONGDOUBLE_OPENMP_LIB @@ -149,7 +148,7 @@ if( FFTW_ROOT ) PATHS ${FFTW_ROOT} PATH_SUFFIXES "lib" "lib64" NO_DEFAULT_PATH - ) + ) find_library( FFTW_LONGDOUBLE_MPI_LIB @@ -157,15 +156,16 @@ if( FFTW_ROOT ) PATHS ${FFTW_ROOT} PATH_SUFFIXES "lib" "lib64" NO_DEFAULT_PATH - ) + ) #find includes - find_path(FFTW_INCLUDE_DIRS + find_path( + FFTW_INCLUDE_DIRS NAMES "fftw3.h" PATHS ${FFTW_ROOT} PATH_SUFFIXES "include" NO_DEFAULT_PATH - ) + ) else() @@ -173,235 +173,262 @@ else() FFTW_DOUBLE_LIB NAMES "fftw3" PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} - ) + ) find_library( FFTW_DOUBLE_THREADS_LIB NAMES "fftw3_threads" PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} - ) + ) find_library( FFTW_DOUBLE_OPENMP_LIB NAMES "fftw3_omp" PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} - ) + ) find_library( FFTW_DOUBLE_MPI_LIB NAMES "fftw3_mpi" PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} - ) + ) find_library( FFTW_FLOAT_LIB NAMES "fftw3f" PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} - ) + ) find_library( FFTW_FLOAT_THREADS_LIB NAMES "fftw3f_threads" PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} - ) + ) find_library( FFTW_FLOAT_OPENMP_LIB NAMES "fftw3f_omp" PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} - ) + ) find_library( FFTW_FLOAT_MPI_LIB NAMES "fftw3f_mpi" PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} - ) + ) find_library( FFTW_LONGDOUBLE_LIB NAMES "fftw3l" PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} - ) + ) find_library( FFTW_LONGDOUBLE_THREADS_LIB NAMES "fftw3l_threads" PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} - ) + ) - find_library(FFTW_LONGDOUBLE_OPENMP_LIB + find_library( + FFTW_LONGDOUBLE_OPENMP_LIB NAMES "fftw3l_omp" PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} - ) + ) - find_library(FFTW_LONGDOUBLE_MPI_LIB + find_library( + FFTW_LONGDOUBLE_MPI_LIB NAMES "fftw3l_mpi" PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} - ) + ) - find_path(FFTW_INCLUDE_DIRS + find_path( + FFTW_INCLUDE_DIRS NAMES "fftw3.h" PATHS ${PKG_FFTW_INCLUDE_DIRS} ${INCLUDE_INSTALL_DIR} - ) - -endif( FFTW_ROOT ) + ) +endif(FFTW_ROOT) #--------------------------------------- components -if (FFTW_DOUBLE_LIB) +if(FFTW_DOUBLE_LIB) set(FFTW_DOUBLE_LIB_FOUND TRUE) set(FFTW_LIBRARIES ${FFTW_LIBRARIES} ${FFTW_DOUBLE_LIB}) add_library(FFTW::Double INTERFACE IMPORTED) - set_target_properties(FFTW::Double - PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" - INTERFACE_LINK_LIBRARIES "${FFTW_DOUBLE_LIB}" - ) + set_target_properties( + FFTW::Double + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${FFTW_DOUBLE_LIB}" + ) else() set(FFTW_DOUBLE_LIB_FOUND FALSE) endif() -if (FFTW_FLOAT_LIB) +if(FFTW_FLOAT_LIB) set(FFTW_FLOAT_LIB_FOUND TRUE) set(FFTW_LIBRARIES ${FFTW_LIBRARIES} ${FFTW_FLOAT_LIB}) add_library(FFTW::Float INTERFACE IMPORTED) - set_target_properties(FFTW::Float - PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" - INTERFACE_LINK_LIBRARIES "${FFTW_FLOAT_LIB}" - ) + set_target_properties( + FFTW::Float + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${FFTW_FLOAT_LIB}" + ) else() set(FFTW_FLOAT_LIB_FOUND FALSE) endif() -if (FFTW_LONGDOUBLE_LIB) +if(FFTW_LONGDOUBLE_LIB) set(FFTW_LONGDOUBLE_LIB_FOUND TRUE) set(FFTW_LIBRARIES ${FFTW_LIBRARIES} ${FFTW_LONGDOUBLE_LIB}) add_library(FFTW::LongDouble INTERFACE IMPORTED) - set_target_properties(FFTW::LongDouble - PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" - INTERFACE_LINK_LIBRARIES "${FFTW_LONGDOUBLE_LIB}" - ) + set_target_properties( + FFTW::LongDouble + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${FFTW_LONGDOUBLE_LIB}" + ) else() set(FFTW_LONGDOUBLE_LIB_FOUND FALSE) endif() -if (FFTW_DOUBLE_THREADS_LIB) +if(FFTW_DOUBLE_THREADS_LIB) set(FFTW_DOUBLE_THREADS_LIB_FOUND TRUE) set(FFTW_LIBRARIES ${FFTW_LIBRARIES} ${FFTW_DOUBLE_THREADS_LIB}) add_library(FFTW::DoubleThreads INTERFACE IMPORTED) - set_target_properties(FFTW::DoubleThreads - PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" - INTERFACE_LINK_LIBRARIES "${FFTW_DOUBLE_THREADS_LIB}" - ) + set_target_properties( + FFTW::DoubleThreads + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${FFTW_DOUBLE_THREADS_LIB}" + ) else() set(FFTW_DOUBLE_THREADS_LIB_FOUND FALSE) endif() -if (FFTW_FLOAT_THREADS_LIB) +if(FFTW_FLOAT_THREADS_LIB) set(FFTW_FLOAT_THREADS_LIB_FOUND TRUE) set(FFTW_LIBRARIES ${FFTW_LIBRARIES} ${FFTW_FLOAT_THREADS_LIB}) add_library(FFTW::FloatThreads INTERFACE IMPORTED) - set_target_properties(FFTW::FloatThreads - PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" - INTERFACE_LINK_LIBRARIES "${FFTW_FLOAT_THREADS_LIB}" - ) + set_target_properties( + FFTW::FloatThreads + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${FFTW_FLOAT_THREADS_LIB}" + ) else() set(FFTW_FLOAT_THREADS_LIB_FOUND FALSE) endif() -if (FFTW_LONGDOUBLE_THREADS_LIB) +if(FFTW_LONGDOUBLE_THREADS_LIB) set(FFTW_LONGDOUBLE_THREADS_LIB_FOUND TRUE) set(FFTW_LIBRARIES ${FFTW_LIBRARIES} ${FFTW_LONGDOUBLE_THREADS_LIB}) add_library(FFTW::LongDoubleThreads INTERFACE IMPORTED) - set_target_properties(FFTW::LongDoubleThreads - PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" - INTERFACE_LINK_LIBRARIES "${FFTW_LONGDOUBLE_THREADS_LIB}" - ) + set_target_properties( + FFTW::LongDoubleThreads + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${FFTW_LONGDOUBLE_THREADS_LIB}" + ) else() set(FFTW_LONGDOUBLE_THREADS_LIB_FOUND FALSE) endif() -if (FFTW_DOUBLE_OPENMP_LIB) +if(FFTW_DOUBLE_OPENMP_LIB) set(FFTW_DOUBLE_OPENMP_LIB_FOUND TRUE) set(FFTW_LIBRARIES ${FFTW_LIBRARIES} ${FFTW_DOUBLE_OPENMP_LIB}) add_library(FFTW::DoubleOpenMP INTERFACE IMPORTED) - set_target_properties(FFTW::DoubleOpenMP - PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" - INTERFACE_LINK_LIBRARIES "${FFTW_DOUBLE_OPENMP_LIB}" - ) + set_target_properties( + FFTW::DoubleOpenMP + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${FFTW_DOUBLE_OPENMP_LIB}" + ) else() set(FFTW_DOUBLE_OPENMP_LIB_FOUND FALSE) endif() -if (FFTW_FLOAT_OPENMP_LIB) +if(FFTW_FLOAT_OPENMP_LIB) set(FFTW_FLOAT_OPENMP_LIB_FOUND TRUE) set(FFTW_LIBRARIES ${FFTW_LIBRARIES} ${FFTW_FLOAT_OPENMP_LIB}) add_library(FFTW::FloatOpenMP INTERFACE IMPORTED) - set_target_properties(FFTW::FloatOpenMP - PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" - INTERFACE_LINK_LIBRARIES "${FFTW_FLOAT_OPENMP_LIB}" - ) + set_target_properties( + FFTW::FloatOpenMP + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${FFTW_FLOAT_OPENMP_LIB}" + ) else() set(FFTW_FLOAT_OPENMP_LIB_FOUND FALSE) endif() -if (FFTW_LONGDOUBLE_OPENMP_LIB) +if(FFTW_LONGDOUBLE_OPENMP_LIB) set(FFTW_LONGDOUBLE_OPENMP_LIB_FOUND TRUE) set(FFTW_LIBRARIES ${FFTW_LIBRARIES} ${FFTW_LONGDOUBLE_OPENMP_LIB}) add_library(FFTW::LongDoubleOpenMP INTERFACE IMPORTED) - set_target_properties(FFTW::LongDoubleOpenMP - PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" - INTERFACE_LINK_LIBRARIES "${FFTW_LONGDOUBLE_OPENMP_LIB}" - ) + set_target_properties( + FFTW::LongDoubleOpenMP + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${FFTW_LONGDOUBLE_OPENMP_LIB}" + ) else() set(FFTW_LONGDOUBLE_OPENMP_LIB_FOUND FALSE) endif() -if (FFTW_DOUBLE_MPI_LIB) +if(FFTW_DOUBLE_MPI_LIB) set(FFTW_DOUBLE_MPI_LIB_FOUND TRUE) set(FFTW_LIBRARIES ${FFTW_LIBRARIES} ${FFTW_DOUBLE_MPI_LIB}) add_library(FFTW::DoubleMPI INTERFACE IMPORTED) - set_target_properties(FFTW::DoubleMPI - PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" - INTERFACE_LINK_LIBRARIES "${FFTW_DOUBLE_MPI_LIB}" - ) + set_target_properties( + FFTW::DoubleMPI + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${FFTW_DOUBLE_MPI_LIB}" + ) else() set(FFTW_DOUBLE_MPI_LIB_FOUND FALSE) endif() -if (FFTW_FLOAT_MPI_LIB) +if(FFTW_FLOAT_MPI_LIB) set(FFTW_FLOAT_MPI_LIB_FOUND TRUE) set(FFTW_LIBRARIES ${FFTW_LIBRARIES} ${FFTW_FLOAT_MPI_LIB}) add_library(FFTW::FloatMPI INTERFACE IMPORTED) - set_target_properties(FFTW::FloatMPI - PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" - INTERFACE_LINK_LIBRARIES "${FFTW_FLOAT_MPI_LIB}" - ) + set_target_properties( + FFTW::FloatMPI + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${FFTW_FLOAT_MPI_LIB}" + ) else() set(FFTW_FLOAT_MPI_LIB_FOUND FALSE) endif() -if (FFTW_LONGDOUBLE_MPI_LIB) +if(FFTW_LONGDOUBLE_MPI_LIB) set(FFTW_LONGDOUBLE_MPI_LIB_FOUND TRUE) set(FFTW_LIBRARIES ${FFTW_LIBRARIES} ${FFTW_LONGDOUBLE_MPI_LIB}) add_library(FFTW::LongDoubleMPI INTERFACE IMPORTED) - set_target_properties(FFTW::LongDoubleMPI - PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" - INTERFACE_LINK_LIBRARIES "${FFTW_LONGDOUBLE_MPI_LIB}" - ) + set_target_properties( + FFTW::LongDoubleMPI + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${FFTW_LONGDOUBLE_MPI_LIB}" + ) else() set(FFTW_LONGDOUBLE_MPI_LIB_FOUND FALSE) endif() #--------------------------------------- end components -set( CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_SAV} ) +set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_SAV}) include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(FFTW +find_package_handle_standard_args( + FFTW REQUIRED_VARS FFTW_INCLUDE_DIRS HANDLE_COMPONENTS - ) +) mark_as_advanced( FFTW_INCLUDE_DIRS @@ -418,4 +445,4 @@ mark_as_advanced( FFTW_FLOAT_MPI_LIB FFTW_DOUBLE_MPI_LIB FFTW_LONGDOUBLE_MPI_LIB - ) +) diff --git a/cmake/find_scripts/FindFFTW-eigen.cmake b/cmake/find_scripts/FindFFTW-eigen.cmake index e0415e3d944..48be167ba02 100644 --- a/cmake/find_scripts/FindFFTW-eigen.cmake +++ b/cmake/find_scripts/FindFFTW-eigen.cmake @@ -17,8 +17,8 @@ # #If environment variable FFTWDIR is specified, it has same effect as FFTW_ROOT -if( NOT FFTW_ROOT AND ENV{FFTWDIR} ) - set( FFTW_ROOT $ENV{FFTWDIR} ) +if(NOT FFTW_ROOT AND ENV{FFTWDIR}) + set(FFTW_ROOT $ENV{FFTWDIR}) endif() # Check if we can use PkgConfig @@ -26,94 +26,96 @@ include(CMakeFindDependencyMacro) find_dependency(PkgConfig) #Determine from PKG -if( PKG_CONFIG_FOUND AND NOT FFTW_ROOT ) - pkg_check_modules( PKG_FFTW QUIET "fftw3" ) +if(PKG_CONFIG_FOUND AND NOT FFTW_ROOT) + pkg_check_modules(PKG_FFTW QUIET "fftw3") endif() #Check whether to search static or dynamic libs -set( CMAKE_FIND_LIBRARY_SUFFIXES_SAV ${CMAKE_FIND_LIBRARY_SUFFIXES} ) +set(CMAKE_FIND_LIBRARY_SUFFIXES_SAV ${CMAKE_FIND_LIBRARY_SUFFIXES}) -if( ${FFTW_USE_STATIC_LIBS} ) - set( CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX} ) +if(${FFTW_USE_STATIC_LIBS}) + set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX}) else() - set( CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_SHARED_LIBRARY_SUFFIX} ) + set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_SHARED_LIBRARY_SUFFIX}) endif() -if( FFTW_ROOT ) - - #find libs - find_library( - FFTW_LIB - NAMES "fftw3" - PATHS ${FFTW_ROOT} - PATH_SUFFIXES "lib" "lib64" - NO_DEFAULT_PATH - ) - - find_library( - FFTWF_LIB - NAMES "fftw3f" - PATHS ${FFTW_ROOT} - PATH_SUFFIXES "lib" "lib64" - NO_DEFAULT_PATH - ) - - find_library( - FFTWL_LIB - NAMES "fftw3l" - PATHS ${FFTW_ROOT} - PATH_SUFFIXES "lib" "lib64" - NO_DEFAULT_PATH - ) - - #find includes - find_path( - FFTW_INCLUDES - NAMES "fftw3.h" - PATHS ${FFTW_ROOT} - PATH_SUFFIXES "include" - NO_DEFAULT_PATH - ) +if(FFTW_ROOT) + #find libs + find_library( + FFTW_LIB + NAMES "fftw3" + PATHS ${FFTW_ROOT} + PATH_SUFFIXES "lib" "lib64" + NO_DEFAULT_PATH + ) + + find_library( + FFTWF_LIB + NAMES "fftw3f" + PATHS ${FFTW_ROOT} + PATH_SUFFIXES "lib" "lib64" + NO_DEFAULT_PATH + ) + + find_library( + FFTWL_LIB + NAMES "fftw3l" + PATHS ${FFTW_ROOT} + PATH_SUFFIXES "lib" "lib64" + NO_DEFAULT_PATH + ) + + #find includes + find_path( + FFTW_INCLUDES + NAMES "fftw3.h" + PATHS ${FFTW_ROOT} + PATH_SUFFIXES "include" + NO_DEFAULT_PATH + ) else() - find_library( - FFTW_LIB - NAMES "fftw3" - PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} - ) - - find_library( - FFTWF_LIB - NAMES "fftw3f" - PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} - ) - - - find_library( - FFTWL_LIB - NAMES "fftw3l" - PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} - ) - - find_path( - FFTW_INCLUDES - NAMES "fftw3.h" - PATHS ${PKG_FFTW_INCLUDE_DIRS} ${INCLUDE_INSTALL_DIR} - ) - + find_library( + FFTW_LIB + NAMES "fftw3" + PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} + ) + + find_library( + FFTWF_LIB + NAMES "fftw3f" + PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} + ) + + find_library( + FFTWL_LIB + NAMES "fftw3l" + PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} + ) + + find_path( + FFTW_INCLUDES + NAMES "fftw3.h" + PATHS ${PKG_FFTW_INCLUDE_DIRS} ${INCLUDE_INSTALL_DIR} + ) endif() set(FFTW_LIBRARIES ${FFTW_LIB} ${FFTWF_LIB}) if(FFTWL_LIB) - set(FFTW_LIBRARIES ${FFTW_LIBRARIES} ${FFTWL_LIB}) + set(FFTW_LIBRARIES ${FFTW_LIBRARIES} ${FFTWL_LIB}) endif() -set( CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_SAV} ) +set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_SAV}) include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(FFTW DEFAULT_MSG - FFTW_INCLUDES FFTW_LIBRARIES) +find_package_handle_standard_args(FFTW DEFAULT_MSG FFTW_INCLUDES FFTW_LIBRARIES) -mark_as_advanced(FFTW_INCLUDES FFTW_LIBRARIES FFTW_LIB FFTWF_LIB FFTWL_LIB) +mark_as_advanced( + FFTW_INCLUDES + FFTW_LIBRARIES + FFTW_LIB + FFTWF_LIB + FFTWL_LIB +) diff --git a/cmake/find_scripts/FindFFTW.cmake b/cmake/find_scripts/FindFFTW.cmake index f9c92a4c33d..e3b93bffa87 100644 --- a/cmake/find_scripts/FindFFTW.cmake +++ b/cmake/find_scripts/FindFFTW.cmake @@ -1,20 +1,20 @@ find_path(FFTW_INCLUDE_DIR fftw3.h) if(FFTW_INCLUDE_DIR) - set(HAVE_FFTW3_H 1) - message(STATUS "Found fftw3.h in ${FFTW_INCLUDE_DIR}") + set(HAVE_FFTW3_H 1) + message(STATUS "Found fftw3.h in ${FFTW_INCLUDE_DIR}") else() - find_path(FFTW_INCLUDE_DIR fftw.h) - if(FFTW_INCLUDE_DIR) - set(HAVE_FFTW_H 1) - message(STATUS "Found fftw.h in ${FFTW_INCLUDE_DIR}") - endif() + find_path(FFTW_INCLUDE_DIR fftw.h) + if(FFTW_INCLUDE_DIR) + set(HAVE_FFTW_H 1) + message(STATUS "Found fftw.h in ${FFTW_INCLUDE_DIR}") + endif() endif() find_path(DFFTW_INCLUDE_DIR dfftw.h) if(DFFTW_INCLUDE_DIR) - set(HAVE_DFFTW_H 1) - message(STATUS "Found dfftw.h in ${FFTW_INCLUDE_DIR}") + set(HAVE_DFFTW_H 1) + message(STATUS "Found dfftw.h in ${FFTW_INCLUDE_DIR}") endif() # fftw double lib @@ -23,11 +23,11 @@ find_library(FFTWD_THREADS_LIB fftw3_threads) # threads support set(FFTW_LIBRARIES) if(FFTWD_LIB) - set(FFTWD_FOUND 1) - set(FFTW_LIBRARIES ${FFTWD_LIB}) - if(FFTWD_THREADS_LIB) - set(FFTW_LIBRARIES "${FFTW_LIBRARIES};${FFTWD_THREADS_LIB}") - endif() + set(FFTWD_FOUND 1) + set(FFTW_LIBRARIES ${FFTWD_LIB}) + if(FFTWD_THREADS_LIB) + set(FFTW_LIBRARIES "${FFTW_LIBRARIES};${FFTWD_THREADS_LIB}") + endif() endif() # Single Precision @@ -35,25 +35,26 @@ find_library(FFTWF_LIB fftw3f) find_library(FFTWF_THREADS_LIB fftw3f_threads) # threads support if(FFTWF_LIB) - set(FFTWF_FOUND 1) - set(FFTW_LIBRARIES "${FFTW_LIBRARIES};${FFTWF_LIB}") - if(FFTWF_THREADS_LIB) - set(FFTW_LIBRARIES "${FFTW_LIBRARIES};${FFTWF_THREADS_LIB}") - endif() + set(FFTWF_FOUND 1) + set(FFTW_LIBRARIES "${FFTW_LIBRARIES};${FFTWF_LIB}") + if(FFTWF_THREADS_LIB) + set(FFTW_LIBRARIES "${FFTW_LIBRARIES};${FFTWF_THREADS_LIB}") + endif() endif() if(NOT FFTWD_FOUND AND NOT FFTWF_FOUND) - set(FFTW_FOUND FALSE) + set(FFTW_FOUND FALSE) endif() mark_as_advanced( - FFTW_LIBRARIES - FFTW_INCLUDE_DIR - DFFTW_INCLUDE_DIR - FFTWF_LIB - FFTWF_THREADS_LIB - FFTWD_LIB - FFTWD_THREADS_LIB) + FFTW_LIBRARIES + FFTW_INCLUDE_DIR + DFFTW_INCLUDE_DIR + FFTWF_LIB + FFTWF_THREADS_LIB + FFTWD_LIB + FFTWD_THREADS_LIB +) # copy HAVE_ to parent scope so that we can use in include/CMakeLists.txt and # rest @@ -61,5 +62,7 @@ set(HAVE_FFTW3_H ${HAVE_FFTW3_H}) set(HAVE_FFTW_H ${HAVE_FFTW_H}) set(HAVE_DFFTW_H ${HAVE_DFFTW_H}) include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake) -find_package_handle_standard_args(FFTW REQUIRED_VARS FFTW_LIBRARIES - FFTW_INCLUDE_DIR) +find_package_handle_standard_args( + FFTW + REQUIRED_VARS FFTW_LIBRARIES FFTW_INCLUDE_DIR +) diff --git a/cmake/find_scripts/FindGEOS.cmake b/cmake/find_scripts/FindGEOS.cmake index 6783b034432..ff24e65347c 100644 --- a/cmake/find_scripts/FindGEOS.cmake +++ b/cmake/find_scripts/FindGEOS.cmake @@ -17,27 +17,42 @@ find_package(GEOS CONFIG) if(NOT GEOS_FOUND) + if(WIN32) + if(MINGW) + find_path( + GEOS_INCLUDE_DIR + geos_c.h + "$ENV{LIB_DIR}/include" + /usr/local/include + /usr/include + c:/msys/local/include + ) + find_library( + GEOS_LIBRARY + NAMES geos_c + PATHS + "$ENV{LIB_DIR}/lib" + /usr/local/lib + /usr/lib + c:/msys/local/lib + ) + endif(MINGW) + + if(MSVC) + find_path( + GEOS_INCLUDE_DIR + geos_c.h + $ENV{LIB_DIR}/include + $ENV{INCLUDE} + ) + find_library( + GEOS_LIBRARY + NAMES geos_c_i geos_c + PATHS "$ENV{LIB_DIR}/lib" $ENV{LIB} + ) + endif(MSVC) - if(WIN32) - - if(MINGW) - find_path(GEOS_INCLUDE_DIR geos_c.h "$ENV{LIB_DIR}/include" - /usr/local/include /usr/include c:/msys/local/include) - find_library( - GEOS_LIBRARY - NAMES geos_c - PATHS "$ENV{LIB_DIR}/lib" /usr/local/lib /usr/lib c:/msys/local/lib) - endif(MINGW) - - if(MSVC) - find_path(GEOS_INCLUDE_DIR geos_c.h $ENV{LIB_DIR}/include $ENV{INCLUDE}) - find_library( - GEOS_LIBRARY - NAMES geos_c_i geos_c - PATHS "$ENV{LIB_DIR}/lib" $ENV{LIB}) - endif(MSVC) - - #[[ + #[[ elseif(APPLE AND QGIS_MAC_DEPS_DIR) find_path(GEOS_INCLUDE_DIR geos_c.h "$ENV{LIB_DIR}/include") @@ -46,200 +61,273 @@ if(NOT GEOS_FOUND) NAMES geos_c PATHS "$ENV{LIB_DIR}/lib") #]] - else(WIN32) - - if(UNIX) - # try to use framework on mac want clean framework path, not unix - # compatibility path - if(APPLE) - if(CMAKE_FIND_FRAMEWORK MATCHES "FIRST" - OR CMAKE_FRAMEWORK_PATH MATCHES "ONLY" - OR NOT CMAKE_FIND_FRAMEWORK) - set(CMAKE_FIND_FRAMEWORK_save - ${CMAKE_FIND_FRAMEWORK} - CACHE STRING "" FORCE) - set(CMAKE_FIND_FRAMEWORK - "ONLY" - CACHE STRING "" FORCE) - find_library(GEOS_LIBRARY GEOS) - if(GEOS_LIBRARY) - # they're all the same in a framework - set(GEOS_INCLUDE_DIR - ${GEOS_LIBRARY}/Headers - CACHE PATH "Path to a file.") - # set GEOS_CONFIG to make later test happy, not used here, may not - # exist - set(GEOS_CONFIG - ${GEOS_LIBRARY}/unix/bin/geos-config - CACHE FILEPATH "Path to a program.") - # version in info.plist - get_version_plist(${GEOS_LIBRARY}/Resources/Info.plist GEOS_VERSION) - if(NOT GEOS_VERSION) - message( - FATAL_ERROR "Could not determine GEOS version from framework.") - endif(NOT GEOS_VERSION) - string(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\1" - GEOS_VERSION_MAJOR "${GEOS_VERSION}") - string(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\2" - GEOS_VERSION_MINOR "${GEOS_VERSION}") - if(GEOS_VERSION_MAJOR LESS 3) - message( - FATAL_ERROR - "GEOS version is too old (${GEOS_VERSION}). Use 3.0.0 or higher." - ) - endif(GEOS_VERSION_MAJOR LESS 3) - endif(GEOS_LIBRARY) - set(CMAKE_FIND_FRAMEWORK - ${CMAKE_FIND_FRAMEWORK_save} - CACHE STRING "" FORCE) - endif() - endif(APPLE) - - if(CYGWIN) - find_library( - GEOS_LIBRARY - NAMES geos_c - PATHS /usr/lib /usr/local/lib) - endif(CYGWIN) - - if(NOT GEOS_INCLUDE_DIR - OR NOT GEOS_LIBRARY - OR NOT GEOS_CONFIG) - # didn't find OS X framework, and was not set by user - set(GEOS_CONFIG_PREFER_PATH - "$ENV{GEOS_HOME}/bin" - CACHE STRING "preferred path to GEOS (geos-config)") - find_program(GEOS_CONFIG geos-config ${GEOS_CONFIG_PREFER_PATH} - $ENV{LIB_DIR}/bin /usr/local/bin/ /usr/bin/) - # MESSAGE("DBG GEOS_CONFIG ${GEOS_CONFIG}") - - if(GEOS_CONFIG) - - execute_process( - COMMAND ${GEOS_CONFIG} --version - OUTPUT_STRIP_TRAILING_WHITESPACE - OUTPUT_VARIABLE GEOS_VERSION) - string(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\1" - GEOS_VERSION_MAJOR "${GEOS_VERSION}") - string(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\2" - GEOS_VERSION_MINOR "${GEOS_VERSION}") - - if(GEOS_VERSION_MAJOR LESS 3 OR (GEOS_VERSION_MAJOR EQUAL 3 - AND GEOS_VERSION_MINOR LESS 9)) - message( - FATAL_ERROR - "GEOS version is too old (${GEOS_VERSION}). Use 3.9.0 or higher." - ) - endif(GEOS_VERSION_MAJOR LESS 3 OR (GEOS_VERSION_MAJOR EQUAL 3 - AND GEOS_VERSION_MINOR LESS 9)) - - # set INCLUDE_DIR to prefix+include - execute_process( - COMMAND ${GEOS_CONFIG} --prefix - OUTPUT_STRIP_TRAILING_WHITESPACE - OUTPUT_VARIABLE GEOS_PREFIX) - - find_path(GEOS_INCLUDE_DIR geos_c.h ${GEOS_PREFIX}/include - /usr/local/include /usr/include) - - # extract link dirs for rpath - execute_process( - COMMAND ${GEOS_CONFIG} --libs - OUTPUT_STRIP_TRAILING_WHITESPACE - OUTPUT_VARIABLE GEOS_CONFIG_LIBS) - - # split off the link dirs (for rpath) use regular expression to match - # wildcard equivalent "-L*" with is a space or a - # semicolon - string(REGEX MATCHALL "[-][L]([^ ;])+" - GEOS_LINK_DIRECTORIES_WITH_PREFIX "${GEOS_CONFIG_LIBS}") - # MESSAGE("DBG - # GEOS_LINK_DIRECTORIES_WITH_PREFIX=${GEOS_LINK_DIRECTORIES_WITH_PREFIX}") - - # remove prefix -L because we need the pure directory for - # LINK_DIRECTORIES - - if(GEOS_LINK_DIRECTORIES_WITH_PREFIX) - string(REGEX REPLACE "[-][L]" "" GEOS_LINK_DIRECTORIES - ${GEOS_LINK_DIRECTORIES_WITH_PREFIX}) - endif(GEOS_LINK_DIRECTORIES_WITH_PREFIX) - - # XXX - mloskot: geos-config --libs does not return -lgeos_c, so set - # it manually split off the name use regular expression to match - # wildcard equivalent "-l*" with is a space or a - # semicolon STRING(REGEX MATCHALL "[-][l]([^ ;])+" - # GEOS_LIB_NAME_WITH_PREFIX "${GEOS_CONFIG_LIBS}" ) MESSAGE("DBG - # GEOS_CONFIG_LIBS=${GEOS_CONFIG_LIBS}") MESSAGE("DBG - # GEOS_LIB_NAME_WITH_PREFIX=${GEOS_LIB_NAME_WITH_PREFIX}") - set(GEOS_LIB_NAME_WITH_PREFIX - -lgeos_c - CACHE STRING INTERNAL) - - # remove prefix -l because we need the pure name - - if(GEOS_LIB_NAME_WITH_PREFIX) - string(REGEX REPLACE "[-][l]" "" GEOS_LIB_NAME - ${GEOS_LIB_NAME_WITH_PREFIX}) - endif(GEOS_LIB_NAME_WITH_PREFIX) - # MESSAGE("DBG GEOS_LIB_NAME=${GEOS_LIB_NAME}") - - if(APPLE) - if(NOT GEOS_LIBRARY) - # work around empty GEOS_LIBRARY left by framework check while - # still preserving user setting if given ***FIXME*** need to - # improve framework check so below not needed - set(GEOS_LIBRARY - ${GEOS_LINK_DIRECTORIES}/lib${GEOS_LIB_NAME}.dylib - CACHE STRING INTERNAL FORCE) - endif(NOT GEOS_LIBRARY) - else(APPLE) - find_library( - GEOS_LIBRARY - NAMES ${GEOS_LIB_NAME} - PATHS ${GEOS_LIB_DIRECTORIES}/lib) - endif(APPLE) - # MESSAGE("DBG GEOS_LIBRARY=${GEOS_LIBRARY}") - - else(GEOS_CONFIG) - message( - "FindGEOS.cmake: geos-config not found. Please set it manually. GEOS_CONFIG=${GEOS_CONFIG}" - ) - endif(GEOS_CONFIG) - endif( - NOT GEOS_INCLUDE_DIR - OR NOT GEOS_LIBRARY - OR NOT GEOS_CONFIG) - endif(UNIX) - endif(WIN32) - - if(GEOS_INCLUDE_DIR AND NOT GEOS_VERSION) - file(READ ${GEOS_INCLUDE_DIR}/geos_c.h VERSIONFILE) - string(REGEX MATCH "#define GEOS_VERSION \"[0-9]+\\.[0-9]+\\.[0-9]+" - GEOS_VERSION ${VERSIONFILE}) - string(REGEX MATCH "[0-9]+\\.[0-9]\\.[0-9]+" GEOS_VERSION ${GEOS_VERSION}) - endif(GEOS_INCLUDE_DIR AND NOT GEOS_VERSION) - - if(GEOS_INCLUDE_DIR AND GEOS_LIBRARY) - set(GEOS_FOUND TRUE) - endif(GEOS_INCLUDE_DIR AND GEOS_LIBRARY) - - if(GEOS_FOUND) - - add_library(GEOS::geos_c UNKNOWN IMPORTED) - target_link_libraries(GEOS::geos_c INTERFACE ${GEOS_LIBRARY}) - target_include_directories(GEOS::geos_c INTERFACE ${GEOS_INCLUDE_DIR}) - set_target_properties(GEOS::geos_c PROPERTIES IMPORTED_LOCATION - ${GEOS_LIBRARY}) - - if(NOT GEOS_FIND_QUIETLY) - message(STATUS "Found GEOS: ${GEOS_LIBRARY} (${GEOS_VERSION})") - endif(NOT GEOS_FIND_QUIETLY) - - else(GEOS_FOUND) - - message(GEOS_INCLUDE_DIR=${GEOS_INCLUDE_DIR}) - message(GEOS_LIBRARY=${GEOS_LIBRARY}) - message(FATAL_ERROR "Could not find GEOS") - - endif(GEOS_FOUND) + else(WIN32) + + if(UNIX) + # try to use framework on mac want clean framework path, not unix + # compatibility path + if(APPLE) + if( + CMAKE_FIND_FRAMEWORK MATCHES "FIRST" + OR CMAKE_FRAMEWORK_PATH MATCHES "ONLY" + OR NOT CMAKE_FIND_FRAMEWORK + ) + set(CMAKE_FIND_FRAMEWORK_save + ${CMAKE_FIND_FRAMEWORK} + CACHE STRING + "" + FORCE + ) + set(CMAKE_FIND_FRAMEWORK "ONLY" CACHE STRING "" FORCE) + find_library(GEOS_LIBRARY GEOS) + if(GEOS_LIBRARY) + # they're all the same in a framework + set(GEOS_INCLUDE_DIR + ${GEOS_LIBRARY}/Headers + CACHE PATH + "Path to a file." + ) + # set GEOS_CONFIG to make later test happy, not used here, may not + # exist + set(GEOS_CONFIG + ${GEOS_LIBRARY}/unix/bin/geos-config + CACHE FILEPATH + "Path to a program." + ) + # version in info.plist + get_version_plist(${GEOS_LIBRARY}/Resources/Info.plist GEOS_VERSION) + if(NOT GEOS_VERSION) + message( + FATAL_ERROR + "Could not determine GEOS version from framework." + ) + endif(NOT GEOS_VERSION) + string( + REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" + "\\1" + GEOS_VERSION_MAJOR + "${GEOS_VERSION}" + ) + string( + REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" + "\\2" + GEOS_VERSION_MINOR + "${GEOS_VERSION}" + ) + if(GEOS_VERSION_MAJOR LESS 3) + message( + FATAL_ERROR + "GEOS version is too old (${GEOS_VERSION}). Use 3.0.0 or higher." + ) + endif(GEOS_VERSION_MAJOR LESS 3) + endif(GEOS_LIBRARY) + set(CMAKE_FIND_FRAMEWORK + ${CMAKE_FIND_FRAMEWORK_save} + CACHE STRING + "" + FORCE + ) + endif() + endif(APPLE) + + if(CYGWIN) + find_library( + GEOS_LIBRARY + NAMES geos_c + PATHS /usr/lib /usr/local/lib + ) + endif(CYGWIN) + + if(NOT GEOS_INCLUDE_DIR OR NOT GEOS_LIBRARY OR NOT GEOS_CONFIG) + # didn't find OS X framework, and was not set by user + set(GEOS_CONFIG_PREFER_PATH + "$ENV{GEOS_HOME}/bin" + CACHE STRING + "preferred path to GEOS (geos-config)" + ) + find_program( + GEOS_CONFIG + geos-config + ${GEOS_CONFIG_PREFER_PATH} + $ENV{LIB_DIR}/bin + /usr/local/bin/ + /usr/bin/ + ) + # MESSAGE("DBG GEOS_CONFIG ${GEOS_CONFIG}") + + if(GEOS_CONFIG) + execute_process( + COMMAND ${GEOS_CONFIG} --version + OUTPUT_STRIP_TRAILING_WHITESPACE + OUTPUT_VARIABLE GEOS_VERSION + ) + string( + REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" + "\\1" + GEOS_VERSION_MAJOR + "${GEOS_VERSION}" + ) + string( + REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" + "\\2" + GEOS_VERSION_MINOR + "${GEOS_VERSION}" + ) + + if( + GEOS_VERSION_MAJOR LESS 3 + OR ( + GEOS_VERSION_MAJOR EQUAL 3 + AND GEOS_VERSION_MINOR LESS 9 + ) + ) + message( + FATAL_ERROR + "GEOS version is too old (${GEOS_VERSION}). Use 3.9.0 or higher." + ) + endif( + GEOS_VERSION_MAJOR LESS 3 + OR ( + GEOS_VERSION_MAJOR EQUAL 3 + AND GEOS_VERSION_MINOR LESS 9 + ) + ) + + # set INCLUDE_DIR to prefix+include + execute_process( + COMMAND ${GEOS_CONFIG} --prefix + OUTPUT_STRIP_TRAILING_WHITESPACE + OUTPUT_VARIABLE GEOS_PREFIX + ) + + find_path( + GEOS_INCLUDE_DIR + geos_c.h + ${GEOS_PREFIX}/include + /usr/local/include + /usr/include + ) + + # extract link dirs for rpath + execute_process( + COMMAND ${GEOS_CONFIG} --libs + OUTPUT_STRIP_TRAILING_WHITESPACE + OUTPUT_VARIABLE GEOS_CONFIG_LIBS + ) + + # split off the link dirs (for rpath) use regular expression to match + # wildcard equivalent "-L*" with is a space or a + # semicolon + string( + REGEX MATCHALL "[-][L]([^ ;])+" + GEOS_LINK_DIRECTORIES_WITH_PREFIX + "${GEOS_CONFIG_LIBS}" + ) + # MESSAGE("DBG + # GEOS_LINK_DIRECTORIES_WITH_PREFIX=${GEOS_LINK_DIRECTORIES_WITH_PREFIX}") + + # remove prefix -L because we need the pure directory for + # LINK_DIRECTORIES + + if(GEOS_LINK_DIRECTORIES_WITH_PREFIX) + string( + REGEX REPLACE "[-][L]" + "" + GEOS_LINK_DIRECTORIES + ${GEOS_LINK_DIRECTORIES_WITH_PREFIX} + ) + endif(GEOS_LINK_DIRECTORIES_WITH_PREFIX) + + # XXX - mloskot: geos-config --libs does not return -lgeos_c, so set + # it manually split off the name use regular expression to match + # wildcard equivalent "-l*" with is a space or a + # semicolon STRING(REGEX MATCHALL "[-][l]([^ ;])+" + # GEOS_LIB_NAME_WITH_PREFIX "${GEOS_CONFIG_LIBS}" ) MESSAGE("DBG + # GEOS_CONFIG_LIBS=${GEOS_CONFIG_LIBS}") MESSAGE("DBG + # GEOS_LIB_NAME_WITH_PREFIX=${GEOS_LIB_NAME_WITH_PREFIX}") + set(GEOS_LIB_NAME_WITH_PREFIX + -lgeos_c + CACHE STRING + INTERNAL + ) + + # remove prefix -l because we need the pure name + + if(GEOS_LIB_NAME_WITH_PREFIX) + string( + REGEX REPLACE "[-][l]" + "" + GEOS_LIB_NAME + ${GEOS_LIB_NAME_WITH_PREFIX} + ) + endif(GEOS_LIB_NAME_WITH_PREFIX) + # MESSAGE("DBG GEOS_LIB_NAME=${GEOS_LIB_NAME}") + + if(APPLE) + if(NOT GEOS_LIBRARY) + # work around empty GEOS_LIBRARY left by framework check while + # still preserving user setting if given ***FIXME*** need to + # improve framework check so below not needed + set(GEOS_LIBRARY + ${GEOS_LINK_DIRECTORIES}/lib${GEOS_LIB_NAME}.dylib + CACHE STRING + INTERNAL + FORCE + ) + endif(NOT GEOS_LIBRARY) + else(APPLE) + find_library( + GEOS_LIBRARY + NAMES ${GEOS_LIB_NAME} + PATHS ${GEOS_LIB_DIRECTORIES}/lib + ) + endif(APPLE) + # MESSAGE("DBG GEOS_LIBRARY=${GEOS_LIBRARY}") + + else(GEOS_CONFIG) + message( + "FindGEOS.cmake: geos-config not found. Please set it manually. GEOS_CONFIG=${GEOS_CONFIG}" + ) + endif(GEOS_CONFIG) + endif(NOT GEOS_INCLUDE_DIR OR NOT GEOS_LIBRARY OR NOT GEOS_CONFIG) + endif(UNIX) + endif(WIN32) + + if(GEOS_INCLUDE_DIR AND NOT GEOS_VERSION) + file(READ ${GEOS_INCLUDE_DIR}/geos_c.h VERSIONFILE) + string( + REGEX MATCH "#define GEOS_VERSION \"[0-9]+\\.[0-9]+\\.[0-9]+" + GEOS_VERSION + ${VERSIONFILE} + ) + string( + REGEX MATCH "[0-9]+\\.[0-9]\\.[0-9]+" + GEOS_VERSION + ${GEOS_VERSION} + ) + endif(GEOS_INCLUDE_DIR AND NOT GEOS_VERSION) + + if(GEOS_INCLUDE_DIR AND GEOS_LIBRARY) + set(GEOS_FOUND TRUE) + endif(GEOS_INCLUDE_DIR AND GEOS_LIBRARY) + + if(GEOS_FOUND) + add_library(GEOS::geos_c UNKNOWN IMPORTED) + target_link_libraries(GEOS::geos_c INTERFACE ${GEOS_LIBRARY}) + target_include_directories(GEOS::geos_c INTERFACE ${GEOS_INCLUDE_DIR}) + set_target_properties( + GEOS::geos_c + PROPERTIES IMPORTED_LOCATION ${GEOS_LIBRARY} + ) + + if(NOT GEOS_FIND_QUIETLY) + message(STATUS "Found GEOS: ${GEOS_LIBRARY} (${GEOS_VERSION})") + endif(NOT GEOS_FIND_QUIETLY) + + else(GEOS_FOUND) + + message(GEOS_INCLUDE_DIR=${GEOS_INCLUDE_DIR}) + message(GEOS_LIBRARY=${GEOS_LIBRARY}) + message(FATAL_ERROR "Could not find GEOS") + endif(GEOS_FOUND) endif() diff --git a/cmake/find_scripts/FindLAPACKE.cmake b/cmake/find_scripts/FindLAPACKE.cmake index 97bd897aef6..7817f0b6b1b 100644 --- a/cmake/find_scripts/FindLAPACKE.cmake +++ b/cmake/find_scripts/FindLAPACKE.cmake @@ -133,22 +133,30 @@ endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args( - LAPACKE - REQUIRED_VARS LAPACKE_FOUND LAPACKE_LIBRARIES LAPACKE_INCLUDEDIR - HAVE_LAPACKE_DGESV - VERSION_VAR LAPACKE_VERSION) + LAPACKE + REQUIRED_VARS + LAPACKE_FOUND + LAPACKE_LIBRARIES + LAPACKE_INCLUDEDIR + HAVE_LAPACKE_DGESV + VERSION_VAR LAPACKE_VERSION +) mark_as_advanced(LAPACKE_LIBRARIES LAPACKE_INCLUDEDIR) message(STATUS "Using LAPACKE package: ${LAPACKE_PKGCONFIG}") if(LAPACKE_FOUND AND NOT TARGET LAPACKE::LAPACKE) - add_library(LAPACKE::LAPACKE INTERFACE IMPORTED) - set_target_properties( - LAPACKE::LAPACKE - PROPERTIES INTERFACE_LINK_LIBRARIES "${LAPACKE_LIBRARIES}" - INTERFACE_INCLUDE_DIRECTORIES "${LAPACKE_INCLUDEDIR}") - if(LAPACKE_LINKER_FLAGS) - set_target_properties(LAPACKE::LAPACKE PROPERTIES INTERFACE_LINK_OPTIONS - "${LAPACKE_LINKER_FLAGS}") - endif() + add_library(LAPACKE::LAPACKE INTERFACE IMPORTED) + set_target_properties( + LAPACKE::LAPACKE + PROPERTIES + INTERFACE_LINK_LIBRARIES "${LAPACKE_LIBRARIES}" + INTERFACE_INCLUDE_DIRECTORIES "${LAPACKE_INCLUDEDIR}" + ) + if(LAPACKE_LINKER_FLAGS) + set_target_properties( + LAPACKE::LAPACKE + PROPERTIES INTERFACE_LINK_OPTIONS "${LAPACKE_LINKER_FLAGS}" + ) + endif() endif() diff --git a/cmake/find_scripts/FindLibLAS.cmake b/cmake/find_scripts/FindLibLAS.cmake index c3c5b07c242..175cfcb6283 100644 --- a/cmake/find_scripts/FindLibLAS.cmake +++ b/cmake/find_scripts/FindLibLAS.cmake @@ -1,40 +1,53 @@ find_path( - LibLAS_INCLUDE_DIR - NAMES liblas.h - PATH_SUFFIXES capi - PATH_SUFFIXES liblas/capi - DOC "path to liblas.h") + LibLAS_INCLUDE_DIR + NAMES liblas.h + PATH_SUFFIXES capi + PATH_SUFFIXES liblas/capi + DOC "path to liblas.h" +) find_library( - LibLAS_C_LIBRARY - NAMES liblas_c las_c las - # Help the user find it if we cannot. - DOC "path liblas_c library") + LibLAS_C_LIBRARY + NAMES liblas_c las_c las + # Help the user find it if we cannot. + DOC "path liblas_c library" +) if(LibLAS_INCLUDE_DIR) - unset(las_version_CONTENTS) - file(READ "${LibLAS_INCLUDE_DIR}/las_version.h" las_version_CONTENTS) + unset(las_version_CONTENTS) + file(READ "${LibLAS_INCLUDE_DIR}/las_version.h" las_version_CONTENTS) - string(REGEX MATCH "#define +LIBLAS_VERSION_MAJOR +([0-9]+)" _dummy - "${las_version_CONTENTS}") - set(LibLAS_VERSION_MAJOR "${CMAKE_MATCH_1}") - string(REGEX MATCH "#define +LIBLAS_VERSION_MINOR +([0-9])" _dummy - "${las_version_CONTENTS}") - set(LibLAS_VERSION_MINOR "${CMAKE_MATCH_1}") - string(REGEX MATCH "#define +LIBLAS_VERSION_REV +([0-9])" _dummy - "${las_version_CONTENTS}") - set(LIBLAS_VERSION_REV "${CMAKE_MATCH_1}") + string( + REGEX MATCH "#define +LIBLAS_VERSION_MAJOR +([0-9]+)" + _dummy + "${las_version_CONTENTS}" + ) + set(LibLAS_VERSION_MAJOR "${CMAKE_MATCH_1}") + string( + REGEX MATCH "#define +LIBLAS_VERSION_MINOR +([0-9])" + _dummy + "${las_version_CONTENTS}" + ) + set(LibLAS_VERSION_MINOR "${CMAKE_MATCH_1}") + string( + REGEX MATCH "#define +LIBLAS_VERSION_REV +([0-9])" + _dummy + "${las_version_CONTENTS}" + ) + set(LIBLAS_VERSION_REV "${CMAKE_MATCH_1}") - set(LibLAS_VERSION_STRING - "${LibLAS_VERSION_MAJOR}.${LibLAS_VERSION_MINOR}.${LIBLAS_VERSION_REV}") + set(LibLAS_VERSION_STRING + "${LibLAS_VERSION_MAJOR}.${LibLAS_VERSION_MINOR}.${LIBLAS_VERSION_REV}" + ) endif() # message(FATAL_ERROR "LibLAS_LIBRARY=${LibLAS_LIBRARY}") if(LibLAS_INCLUDE_DIR AND LibLAS_C_LIBRARY) - set(LibLAS_FOUND TRUE) + set(LibLAS_FOUND TRUE) endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args( - LibLAS - REQUIRED_VARS LibLAS_C_LIBRARY LibLAS_INCLUDE_DIR - VERSION_VAR LibLAS_VERSION_STRING) + LibLAS + REQUIRED_VARS LibLAS_C_LIBRARY LibLAS_INCLUDE_DIR + VERSION_VAR LibLAS_VERSION_STRING +) diff --git a/cmake/find_scripts/FindLibSVM.cmake b/cmake/find_scripts/FindLibSVM.cmake index 1f426883b0e..3a901a616d0 100644 --- a/cmake/find_scripts/FindLibSVM.cmake +++ b/cmake/find_scripts/FindLibSVM.cmake @@ -49,105 +49,121 @@ #============================================================================= # set LIBSVM_INCLUDE_DIR -find_path ( LIBSVM_INCLUDE_DIR - NAMES - svm.h - PATH_SUFFIXES - libsvm - libsvm-2.0/libsvm - DOC - "LibSVM include directory" +find_path( + LIBSVM_INCLUDE_DIR + NAMES svm.h + PATH_SUFFIXES libsvm libsvm-2.0/libsvm + DOC "LibSVM include directory" ) # set LIBSVM_INCLUDE_DIRS -if ( LIBSVM_INCLUDE_DIR ) - set ( LIBSVM_INCLUDE_DIRS ${LIBSVM_INCLUDE_DIR} ) -endif () +if(LIBSVM_INCLUDE_DIR) + set(LIBSVM_INCLUDE_DIRS ${LIBSVM_INCLUDE_DIR}) +endif() # version -set ( _VERSION_FILE ${LIBSVM_INCLUDE_DIR}/svm.h ) -if ( EXISTS ${_VERSION_FILE} ) - # LIBSVM_VERSION_STRING macro defined in svm.h since version 2.8.9 - file ( STRINGS ${_VERSION_FILE} _VERSION_STRING REGEX ".*define[ ]+LIBSVM_VERSION[ ]+[0-9]+.*" ) - if ( _VERSION_STRING ) - string ( REGEX REPLACE ".*LIBSVM_VERSION[ ]+([0-9]+)" "\\1" _VERSION_NUMBER "${_VERSION_STRING}" ) - math ( EXPR LIBSVM_MAJOR_VERSION "${_VERSION_NUMBER} / 100" ) - math ( EXPR LIBSVM_MINOR_VERSION "(${_VERSION_NUMBER} % 100 ) / 10" ) - math ( EXPR LIBSVM_PATCH_VERSION "${_VERSION_NUMBER} % 10" ) - set ( LIBSVM_VERSION_STRING "${LIBSVM_MAJOR_VERSION}.${LIBSVM_MINOR_VERSION}.${LIBSVM_PATCH_VERSION}" ) - endif () -endif () +set(_VERSION_FILE ${LIBSVM_INCLUDE_DIR}/svm.h) +if(EXISTS ${_VERSION_FILE}) + # LIBSVM_VERSION_STRING macro defined in svm.h since version 2.8.9 + file( + STRINGS ${_VERSION_FILE} + _VERSION_STRING + REGEX ".*define[ ]+LIBSVM_VERSION[ ]+[0-9]+.*" + ) + if(_VERSION_STRING) + string( + REGEX REPLACE ".*LIBSVM_VERSION[ ]+([0-9]+)" + "\\1" + _VERSION_NUMBER + "${_VERSION_STRING}" + ) + math(EXPR LIBSVM_MAJOR_VERSION "${_VERSION_NUMBER} / 100") + math(EXPR LIBSVM_MINOR_VERSION "(${_VERSION_NUMBER} % 100 ) / 10") + math(EXPR LIBSVM_PATCH_VERSION "${_VERSION_NUMBER} % 10") + set(LIBSVM_VERSION_STRING + "${LIBSVM_MAJOR_VERSION}.${LIBSVM_MINOR_VERSION}.${LIBSVM_PATCH_VERSION}" + ) + endif() +endif() # check version -set ( _LIBSVM_VERSION_MATCH TRUE ) -if ( LibSVM_FIND_VERSION AND LIBSVM_VERSION_STRING ) - if ( LibSVM_FIND_VERSION_EXACT ) - if ( NOT ${LibSVM_FIND_VERSION} VERSION_EQUAL ${LIBSVM_VERSION_STRING} ) - set ( _LIBSVM_VERSION_MATCH FALSE ) - endif () - else () - if ( ${LibSVM_FIND_VERSION} VERSION_GREATER ${LIBSVM_VERSION_STRING} ) - set ( _LIBSVM_VERSION_MATCH FALSE ) - endif () - endif () -endif () +set(_LIBSVM_VERSION_MATCH TRUE) +if(LibSVM_FIND_VERSION AND LIBSVM_VERSION_STRING) + if(LibSVM_FIND_VERSION_EXACT) + if(NOT ${LibSVM_FIND_VERSION} VERSION_EQUAL ${LIBSVM_VERSION_STRING}) + set(_LIBSVM_VERSION_MATCH FALSE) + endif() + else() + if(${LibSVM_FIND_VERSION} VERSION_GREATER ${LIBSVM_VERSION_STRING}) + set(_LIBSVM_VERSION_MATCH FALSE) + endif() + endif() +endif() # set LIBSVM_LIBRARY -find_library ( LIBSVM_LIBRARY - NAMES - svm - libsvm - DOC - "LibSVM library location" -) +find_library(LIBSVM_LIBRARY NAMES svm libsvm DOC "LibSVM library location") # set LIBSVM_LIBRARIES -set ( LIBSVM_LIBRARIES ${LIBSVM_LIBRARY} ) +set(LIBSVM_LIBRARIES ${LIBSVM_LIBRARY}) # link with math library on unix -if ( UNIX ) - find_library(M_LIB m) - mark_as_advanced(M_LIB) - list (APPEND LIBSVM_LIBRARIES ${M_LIB} ) -endif () +if(UNIX) + find_library(M_LIB m) + mark_as_advanced(M_LIB) + list(APPEND LIBSVM_LIBRARIES ${M_LIB}) +endif() # try to guess root dir from include dir -if ( LIBSVM_INCLUDE_DIR ) - string ( REGEX REPLACE "(.*)/include.*" "\\1" LIBSVM_ROOT_DIR ${LIBSVM_INCLUDE_DIR} ) -# try to guess root dir from library dir -elseif ( LIBSVM_LIBRARY ) - string ( REGEX REPLACE "(.*)/lib[/|32|64].*" "\\1" LIBSVM_ROOT_DIR ${LIBSVM_LIBRARY} ) -endif () - +if(LIBSVM_INCLUDE_DIR) + string( + REGEX REPLACE "(.*)/include.*" + "\\1" + LIBSVM_ROOT_DIR + ${LIBSVM_INCLUDE_DIR} + ) + # try to guess root dir from library dir +elseif(LIBSVM_LIBRARY) + string( + REGEX REPLACE "(.*)/lib[/|32|64].*" + "\\1" + LIBSVM_ROOT_DIR + ${LIBSVM_LIBRARY} + ) +endif() # handle REQUIRED and QUIET options -include ( FindPackageHandleStandardArgs ) -find_package_handle_standard_args(LibSVM - REQUIRED_VARS LIBSVM_LIBRARY - _LIBSVM_VERSION_MATCH - LIBSVM_INCLUDE_DIR - LIBSVM_INCLUDE_DIRS - LIBSVM_LIBRARIES - LIBSVM_ROOT_DIR - VERSION_VAR LIBSVM_VERSION_STRING) +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args( + LibSVM + REQUIRED_VARS + LIBSVM_LIBRARY + _LIBSVM_VERSION_MATCH + LIBSVM_INCLUDE_DIR + LIBSVM_INCLUDE_DIRS + LIBSVM_LIBRARIES + LIBSVM_ROOT_DIR + VERSION_VAR LIBSVM_VERSION_STRING +) -mark_as_advanced ( - LIBSVM_LIBRARY - LIBSVM_LIBRARIES - LIBSVM_INCLUDE_DIR - LIBSVM_INCLUDE_DIRS - LIBSVM_ROOT_DIR - LIBSVM_VERSION_STRING - LIBSVM_MAJOR_VERSION - LIBSVM_MINOR_VERSION - LIBSVM_PATCH_VERSION +mark_as_advanced( + LIBSVM_LIBRARY + LIBSVM_LIBRARIES + LIBSVM_INCLUDE_DIR + LIBSVM_INCLUDE_DIRS + LIBSVM_ROOT_DIR + LIBSVM_VERSION_STRING + LIBSVM_MAJOR_VERSION + LIBSVM_MINOR_VERSION + LIBSVM_PATCH_VERSION ) # create imported target LibSVM::LibSVM if(LIBSVM_FOUND AND NOT TARGET LibSVM::LibSVM) - add_library(LibSVM::LibSVM INTERFACE IMPORTED) - set_target_properties( - LibSVM::LibSVM - PROPERTIES INTERFACE_LINK_LIBRARIES "${LIBSVM_LIBRARY}" - INTERFACE_INCLUDE_DIRECTORIES "${LIBSVM_INCLUDE_DIR}") + add_library(LibSVM::LibSVM INTERFACE IMPORTED) + set_target_properties( + LibSVM::LibSVM + PROPERTIES + INTERFACE_LINK_LIBRARIES "${LIBSVM_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${LIBSVM_INCLUDE_DIR}" + ) endif() diff --git a/cmake/find_scripts/FindMySQL.cmake b/cmake/find_scripts/FindMySQL.cmake index 59f36a07726..d89be1cf089 100644 --- a/cmake/find_scripts/FindMySQL.cmake +++ b/cmake/find_scripts/FindMySQL.cmake @@ -1,16 +1,18 @@ execute_process( - COMMAND mysql_config --cflags - OUTPUT_VARIABLE MySQL_INCLUDE_DIRS - OUTPUT_STRIP_TRAILING_WHITESPACE) + COMMAND mysql_config --cflags + OUTPUT_VARIABLE MySQL_INCLUDE_DIRS + OUTPUT_STRIP_TRAILING_WHITESPACE +) execute_process( - COMMAND mysql_config --libs - OUTPUT_VARIABLE MySQL_LIBRARY - OUTPUT_STRIP_TRAILING_WHITESPACE) + COMMAND mysql_config --libs + OUTPUT_VARIABLE MySQL_LIBRARY + OUTPUT_STRIP_TRAILING_WHITESPACE +) if(MySQL_INCLUDE_DIRS AND MySQL_LIBRARY) - string(REGEX REPLACE "(^| +)-I" " " _dummy ${MySQL_INCLUDE_DIRS}) - string(STRIP ${_dummy} _dummy) - string(REPLACE " " ";" MySQL_INCLUDE_DIRS ${_dummy}) - message(STATUS "Found MySQL: ${MySQL_LIBRARY}") - set(MySQL_FOUND TRUE) + string(REGEX REPLACE "(^| +)-I" " " _dummy ${MySQL_INCLUDE_DIRS}) + string(STRIP ${_dummy} _dummy) + string(REPLACE " " ";" MySQL_INCLUDE_DIRS ${_dummy}) + message(STATUS "Found MySQL: ${MySQL_LIBRARY}") + set(MySQL_FOUND TRUE) endif() diff --git a/cmake/find_scripts/FindNetCDF.cmake b/cmake/find_scripts/FindNetCDF.cmake index f19c22e7d45..9963d02d6d7 100644 --- a/cmake/find_scripts/FindNetCDF.cmake +++ b/cmake/find_scripts/FindNetCDF.cmake @@ -40,19 +40,21 @@ find_package(PkgConfig QUIET) pkg_check_modules(PC_NetCDF netcdf QUIET) find_path( - NetCDF_INCLUDEDIR - NAMES netcdf.h - HINTS ${PC_NetCDF_INCLUDEDIR} ${PC_NetCDF_INCLUDE_DIRS} - DOC "path to netcdf.h") + NetCDF_INCLUDEDIR + NAMES netcdf.h + HINTS ${PC_NetCDF_INCLUDEDIR} ${PC_NetCDF_INCLUDE_DIRS} + DOC "path to netcdf.h" +) find_library( - NetCDF_LIBRARY - NAMES netcdf - HINTS ${PC_NetCDF_LIBDIR} ${PC_NetCDF_LIBRARY_DIRS} - DOC "path netcdf library") + NetCDF_LIBRARY + NAMES netcdf + HINTS ${PC_NetCDF_LIBDIR} ${PC_NetCDF_LIBRARY_DIRS} + DOC "path netcdf library" +) if(NetCDF_INCLUDE_DIR AND NetCDF_LIBRARY) - set(NetCDF_FOUND TRUE) + set(NetCDF_FOUND TRUE) endif() set(NetCDF_VERSION ${PC_NetCDF_VERSION}) @@ -60,14 +62,17 @@ set(NetCDF_INCLUDE_DIRS ${NetCDF_INCLUDEDIR}) include(FindPackageHandleStandardArgs) find_package_handle_standard_args( - NetCDF - REQUIRED_VARS NetCDF_LIBRARY NetCDF_INCLUDEDIR - VERSION_VAR NetCDF_VERSION) + NetCDF + REQUIRED_VARS NetCDF_LIBRARY NetCDF_INCLUDEDIR + VERSION_VAR NetCDF_VERSION +) if(NetCDF_FOUND) - add_library(NetCDF::NetCDF UNKNOWN IMPORTED) - set_target_properties( - NetCDF::NetCDF - PROPERTIES IMPORTED_LOCATION "${NetCDF_LIBRARY}" - INTERFACE_INCLUDE_DIRECTORIES "${NetCDF_INCLUDEDIR}") + add_library(NetCDF::NetCDF UNKNOWN IMPORTED) + set_target_properties( + NetCDF::NetCDF + PROPERTIES + IMPORTED_LOCATION "${NetCDF_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${NetCDF_INCLUDEDIR}" + ) endif() diff --git a/cmake/find_scripts/FindPCRE.cmake b/cmake/find_scripts/FindPCRE.cmake index 002f7af4a6d..1f5dd787566 100644 --- a/cmake/find_scripts/FindPCRE.cmake +++ b/cmake/find_scripts/FindPCRE.cmake @@ -3,19 +3,19 @@ find_path(PCRE_INCLUDE_DIR NAMES pcre.h) find_library(PCRE_LIBRARY_RELEASE NAMES pcre) find_library(PCRE_LIBRARY_DEBUG NAMES pcred) if(PCRE_LIBRARY_DEBUG) - set(PCRE_LIBRARY ${PCRE_LIBRARY_DEBUG}) + set(PCRE_LIBRARY ${PCRE_LIBRARY_DEBUG}) elseif(PCRE_LIBRARY_RELEASE) - set(PCRE_LIBRARY ${PCRE_LIBRARY_RELEASE}) + set(PCRE_LIBRARY ${PCRE_LIBRARY_RELEASE}) endif() set(PCRE_FOUND FALSE) if(PCRE_INCLUDE_DIR AND PCRE_LIBRARY) - set(PCRE_FOUND TRUE) + set(PCRE_FOUND TRUE) endif() if(PCRE_FOUND) - set(PCRE_LIBRARIES ${PCRE_LIBRARY}) - set(PCRE_INCLUDE_DIRS ${PCRE_INCLUDE_DIR}) + set(PCRE_LIBRARIES ${PCRE_LIBRARY}) + set(PCRE_INCLUDE_DIRS ${PCRE_INCLUDE_DIR}) endif() mark_as_advanced(PCRE_LIBRARY) @@ -23,5 +23,9 @@ mark_as_advanced(PCRE_LIBRARY_DEBUG) mark_as_advanced(PCRE_LIBRARY_RELEASE) mark_as_advanced(PCRE_INCLUDE_DIR) include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(PCRE DEFAULT_MSG PCRE_LIBRARY - PCRE_INCLUDE_DIR) +find_package_handle_standard_args( + PCRE + DEFAULT_MSG + PCRE_LIBRARY + PCRE_INCLUDE_DIR +) diff --git a/cmake/find_scripts/FindPROJ.cmake b/cmake/find_scripts/FindPROJ.cmake index 84e8b4e193f..73800182146 100644 --- a/cmake/find_scripts/FindPROJ.cmake +++ b/cmake/find_scripts/FindPROJ.cmake @@ -29,82 +29,111 @@ Copyright (c) 2025 Nicklas Larsson (find_package Config Mode addition) find_package(PROJ QUIET CONFIG) if(PROJ_FOUND AND TARGET PROJ::proj) - message("-- Found PROJ: ${PROJ_DIR} (found version \"${PROJ_VERSION}\")") - return() + message("-- Found PROJ: ${PROJ_DIR} (found version \"${PROJ_VERSION}\")") + return() endif() if(NOT PROJ_INCLUDE_DIR) - find_path( - PROJ_INCLUDE_DIR proj.h - PATHS ${PROJ_ROOT}/include - DOC "Path to PROJ library include directory") + find_path( + PROJ_INCLUDE_DIR + proj.h + PATHS ${PROJ_ROOT}/include + DOC "Path to PROJ library include directory" + ) endif() set(PROJ_NAMES ${PROJ_NAMES} proj proj_i) set(PROJ_NAMES_DEBUG ${PROJ_NAMES_DEBUG} projd proj_d) if(NOT PROJ_LIBRARY) - find_library(PROJ_LIBRARY_RELEASE NAMES ${PROJ_NAMES}) - find_library(PROJ_LIBRARY_DEBUG NAMES ${PROJ_NAMES_DEBUG}) - include(SelectLibraryConfigurations) - select_library_configurations(PROJ) - mark_as_advanced(PROJ_LIBRARY_RELEASE PROJ_LIBRARY_DEBUG) + find_library(PROJ_LIBRARY_RELEASE NAMES ${PROJ_NAMES}) + find_library(PROJ_LIBRARY_DEBUG NAMES ${PROJ_NAMES_DEBUG}) + include(SelectLibraryConfigurations) + select_library_configurations(PROJ) + mark_as_advanced(PROJ_LIBRARY_RELEASE PROJ_LIBRARY_DEBUG) endif() unset(PROJ_NAMES) unset(PROJ_NAMES_DEBUG) if(PROJ_INCLUDE_DIR) - file(READ "${PROJ_INCLUDE_DIR}/proj.h" PROJ_H_CONTENTS) - string(REGEX REPLACE "^.*PROJ_VERSION_MAJOR +([0-9]+).*$" "\\1" - PROJ_VERSION_MAJOR "${PROJ_H_CONTENTS}") - string(REGEX REPLACE "^.*PROJ_VERSION_MINOR +([0-9]+).*$" "\\1" - PROJ_VERSION_MINOR "${PROJ_H_CONTENTS}") - string(REGEX REPLACE "^.*PROJ_VERSION_PATCH +([0-9]+).*$" "\\1" - PROJ_VERSION_PATCH "${PROJ_H_CONTENTS}") - unset(PROJ_H_CONTENTS) - set(PROJ_VERSION_STRING - "${PROJ_VERSION_MAJOR}.${PROJ_VERSION_MINOR}.${PROJ_VERSION_PATCH}") + file(READ "${PROJ_INCLUDE_DIR}/proj.h" PROJ_H_CONTENTS) + string( + REGEX REPLACE "^.*PROJ_VERSION_MAJOR +([0-9]+).*$" + "\\1" + PROJ_VERSION_MAJOR + "${PROJ_H_CONTENTS}" + ) + string( + REGEX REPLACE "^.*PROJ_VERSION_MINOR +([0-9]+).*$" + "\\1" + PROJ_VERSION_MINOR + "${PROJ_H_CONTENTS}" + ) + string( + REGEX REPLACE "^.*PROJ_VERSION_PATCH +([0-9]+).*$" + "\\1" + PROJ_VERSION_PATCH + "${PROJ_H_CONTENTS}" + ) + unset(PROJ_H_CONTENTS) + set(PROJ_VERSION_STRING + "${PROJ_VERSION_MAJOR}.${PROJ_VERSION_MINOR}.${PROJ_VERSION_PATCH}" + ) endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args( - PROJ - REQUIRED_VARS PROJ_LIBRARY PROJ_INCLUDE_DIR - VERSION_VAR PROJ_VERSION_STRING) + PROJ + REQUIRED_VARS PROJ_LIBRARY PROJ_INCLUDE_DIR + VERSION_VAR PROJ_VERSION_STRING +) mark_as_advanced(PROJ_INCLUDE_DIR PROJ_LIBRARY) if(PROJ_FOUND) - set(PROJ_LIBRARIES "${PROJ_LIBRARY}") - set(PROJ_INCLUDE_DIRS "${PROJ_INCLUDE_DIR}") - if(NOT TARGET PROJ::proj) - add_library(PROJ::proj UNKNOWN IMPORTED) - set_target_properties( - PROJ::proj PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${PROJ_INCLUDE_DIR}" - IMPORTED_LINK_INTERFACE_LANGUAGES "C") - if(EXISTS "${PROJ_LIBRARY}") - set_target_properties( - PROJ::proj PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "C" - IMPORTED_LOCATION "${PROJ_LIBRARY}") + set(PROJ_LIBRARIES "${PROJ_LIBRARY}") + set(PROJ_INCLUDE_DIRS "${PROJ_INCLUDE_DIR}") + if(NOT TARGET PROJ::proj) + add_library(PROJ::proj UNKNOWN IMPORTED) + set_target_properties( + PROJ::proj + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${PROJ_INCLUDE_DIR}" + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + ) + if(EXISTS "${PROJ_LIBRARY}") + set_target_properties( + PROJ::proj + PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "${PROJ_LIBRARY}" + ) + endif() + if(EXISTS "${PROJ_LIBRARY_RELEASE}") + set_property( + TARGET PROJ::proj + APPEND + PROPERTY IMPORTED_CONFIGURATIONS RELEASE + ) + set_target_properties( + PROJ::proj + PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C" + IMPORTED_LOCATION_RELEASE "${PROJ_LIBRARY_RELEASE}" + ) + endif() + if(EXISTS "${PROJ_LIBRARY_DEBUG}") + set_property( + TARGET PROJ::proj + APPEND + PROPERTY IMPORTED_CONFIGURATIONS DEBUG + ) + set_target_properties( + PROJ::proj + PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C" + IMPORTED_LOCATION_DEBUG "${PROJ_LIBRARY_DEBUG}" + ) + endif() endif() - if(EXISTS "${PROJ_LIBRARY_RELEASE}") - set_property( - TARGET PROJ::proj - APPEND - PROPERTY IMPORTED_CONFIGURATIONS RELEASE) - set_target_properties( - PROJ::proj - PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C" - IMPORTED_LOCATION_RELEASE "${PROJ_LIBRARY_RELEASE}") - endif() - if(EXISTS "${PROJ_LIBRARY_DEBUG}") - set_property( - TARGET PROJ::proj - APPEND - PROPERTY IMPORTED_CONFIGURATIONS DEBUG) - set_target_properties( - PROJ::proj PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C" - IMPORTED_LOCATION_DEBUG "${PROJ_LIBRARY_DEBUG}") - endif() - endif() endif() diff --git a/cmake/find_scripts/FindReadline.cmake b/cmake/find_scripts/FindReadline.cmake index 4297e26073e..02c7d39cb73 100644 --- a/cmake/find_scripts/FindReadline.cmake +++ b/cmake/find_scripts/FindReadline.cmake @@ -71,111 +71,131 @@ Example of use: set(_Readline_REQUIRED_VARS Readline_INCLUDE_DIR Readline_LIBRARY) foreach(component ${Readline_FIND_COMPONENTS}) - string(TOUPPER ${component} _COMPONENT) - set(Readline_USE_${_COMPONENT} 1) - list(APPEND _Readline_REQUIRED_VARS ${component}_INCLUDE_DIR - ${component}_LIBRARY) + string(TOUPPER ${component} _COMPONENT) + set(Readline_USE_${_COMPONENT} 1) + list( + APPEND _Readline_REQUIRED_VARS + ${component}_INCLUDE_DIR + ${component}_LIBRARY + ) endforeach() find_package(PkgConfig) if(PKG_CONFIG_FOUND) - pkg_check_modules(PC_Readline QUIET "readline") - find_path( - Readline_INCLUDE_DIR - NAMES readline/readline.h - HINTS ${PC_Readline_INCLUDEDIR} ${PC_Readline_INCLUDE_DIRS}) - find_library( - Readline_LIBRARY - NAMES readline - HINTS ${PC_Readline_LIBDIR} ${PC_Readline_LIBRARY_DIRS}) - set(Readline_FOUND ${PC_Readline_FOUND}) - set(Readline_VERSION ${PC_Readline_VERSION}) - - if(Readline_USE_HISTORY) - pkg_check_modules(PC_History QUIET "history") + pkg_check_modules(PC_Readline QUIET "readline") find_path( - History_INCLUDE_DIR - NAMES readline/history.h - HINTS ${PC_History_INCLUDEDIR} ${PC_History_INCLUDE_DIRS}) + Readline_INCLUDE_DIR + NAMES readline/readline.h + HINTS ${PC_Readline_INCLUDEDIR} ${PC_Readline_INCLUDE_DIRS} + ) find_library( - History_LIBRARY - NAMES history - HINTS ${PC_History_LIBDIR} ${PC_History_LIBRARY_DIRS}) - set(History_FOUND ${PC_History_FOUND}) - set(History_VERSION ${PC_History_VERSION}) - endif() + Readline_LIBRARY + NAMES readline + HINTS ${PC_Readline_LIBDIR} ${PC_Readline_LIBRARY_DIRS} + ) + set(Readline_FOUND ${PC_Readline_FOUND}) + set(Readline_VERSION ${PC_Readline_VERSION}) + + if(Readline_USE_HISTORY) + pkg_check_modules(PC_History QUIET "history") + find_path( + History_INCLUDE_DIR + NAMES readline/history.h + HINTS ${PC_History_INCLUDEDIR} ${PC_History_INCLUDE_DIRS} + ) + find_library( + History_LIBRARY + NAMES history + HINTS ${PC_History_LIBDIR} ${PC_History_LIBRARY_DIRS} + ) + set(History_FOUND ${PC_History_FOUND}) + set(History_VERSION ${PC_History_VERSION}) + endif() endif() if(NOT Readline_FOUND) - find_path(Readline_ROOT_DIR NAMES include/readline/readline.h) - find_path( - Readline_INCLUDE_DIR - NAMES readline/readline.h - HINTS ${Readline_ROOT_DIR}/include) - find_library( - Readline_LIBRARY - NAMES readline - HINTS ${Readline_ROOT_DIR}/lib) - if(Readline_INCLUDE_DIR AND Readline_LIBRARY) - set(Readline_FOUND TRUE) - if(EXISTS "${Readline_INCLUDE_DIR}/readline/readline.h") - file(STRINGS "${Readline_INCLUDE_DIR}/readline/readline.h" - version_major_str REGEX "^#define[\t ]+RL_VERSION_MAJOR[\t ]+[0-9]+") - string(REGEX REPLACE "^#define[\t ]+RL_VERSION_MAJOR[\t ]+([0-9]+)" "\\1" - version_major "${version_major_str}") - file(STRINGS "${Readline_INCLUDE_DIR}/readline/readline.h" - version_minor_str REGEX "^#define[\t ]+RL_VERSION_MINOR[\t ]+[0-9]+") - string(REGEX REPLACE "^#define[\t ]+RL_VERSION_MINOR[\t ]+([0-9]+)" "\\1" - version_minor "${version_minor_str}") - set(Readline_VERSION "${version_major}.${version_minor}") + find_path(Readline_ROOT_DIR NAMES include/readline/readline.h) + find_path( + Readline_INCLUDE_DIR + NAMES readline/readline.h + HINTS ${Readline_ROOT_DIR}/include + ) + find_library(Readline_LIBRARY NAMES readline HINTS ${Readline_ROOT_DIR}/lib) + if(Readline_INCLUDE_DIR AND Readline_LIBRARY) + set(Readline_FOUND TRUE) + if(EXISTS "${Readline_INCLUDE_DIR}/readline/readline.h") + file( + STRINGS "${Readline_INCLUDE_DIR}/readline/readline.h" + version_major_str + REGEX "^#define[\t ]+RL_VERSION_MAJOR[\t ]+[0-9]+" + ) + string( + REGEX REPLACE "^#define[\t ]+RL_VERSION_MAJOR[\t ]+([0-9]+)" + "\\1" + version_major + "${version_major_str}" + ) + file( + STRINGS "${Readline_INCLUDE_DIR}/readline/readline.h" + version_minor_str + REGEX "^#define[\t ]+RL_VERSION_MINOR[\t ]+[0-9]+" + ) + string( + REGEX REPLACE "^#define[\t ]+RL_VERSION_MINOR[\t ]+([0-9]+)" + "\\1" + version_minor + "${version_minor_str}" + ) + set(Readline_VERSION "${version_major}.${version_minor}") + endif() endif() - endif() endif() if(Readline_USE_HISTORY AND NOT History_FOUND) - find_path(History_ROOT_DIR NAMES include/readline/history.h) - find_path( - History_INCLUDE_DIR - NAMES readline/history.h - HINTS ${History_ROOT_DIR}/include) - find_library( - History_LIBRARY - NAMES history - HINTS ${History_ROOT_DIR}/lib) - if(History_INCLUDE_DIR AND History_LIBRARY) - set(History_FOUND TRUE) - endif() + find_path(History_ROOT_DIR NAMES include/readline/history.h) + find_path( + History_INCLUDE_DIR + NAMES readline/history.h + HINTS ${History_ROOT_DIR}/include + ) + find_library(History_LIBRARY NAMES history HINTS ${History_ROOT_DIR}/lib) + if(History_INCLUDE_DIR AND History_LIBRARY) + set(History_FOUND TRUE) + endif() endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args( - Readline - REQUIRED_VARS ${_Readline_REQUIRED_VARS} - VERSION_VAR Readline_VERSION) + Readline + REQUIRED_VARS ${_Readline_REQUIRED_VARS} + VERSION_VAR Readline_VERSION +) mark_as_advanced(${_Readline_REQUIRED_VARS}) unset(_Readline_REQUIRED_VARS) if(Readline_FOUND AND NOT TARGET Readline::Readline) - set(Readline_LIBRARIES ${Readline_LIBRARY}) - set(Readline_INCLUDE_DIRS ${Readline_INCLUDE_DIR}) - add_library(Readline::Readline UNKNOWN IMPORTED) - set_target_properties( - Readline::Readline - PROPERTIES IMPORTED_LOCATION "${Readline_LIBRARY}" - INTERFACE_INCLUDE_DIRECTORIES "${Readline_INCLUDE_DIR}") + set(Readline_LIBRARIES ${Readline_LIBRARY}) + set(Readline_INCLUDE_DIRS ${Readline_INCLUDE_DIR}) + add_library(Readline::Readline UNKNOWN IMPORTED) + set_target_properties( + Readline::Readline + PROPERTIES + IMPORTED_LOCATION "${Readline_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${Readline_INCLUDE_DIR}" + ) endif() mark_as_advanced(History_INCLUDE_DIR History_LIBRARY) -if(Readline_USE_HISTORY - AND History_FOUND - AND NOT TARGET Readline::History) - set(History_LIBRARIES ${History_LIBRARY}) - set(History_INCLUDE_DIRS ${History_INCLUDE_DIR}) - - add_library(Readline::History UNKNOWN IMPORTED) - set_target_properties( - Readline::History - PROPERTIES IMPORTED_LOCATION "${History_LIBRARY}" - INTERFACE_INCLUDE_DIRECTORIES "${History_INCLUDE_DIR}") +if(Readline_USE_HISTORY AND History_FOUND AND NOT TARGET Readline::History) + set(History_LIBRARIES ${History_LIBRARY}) + set(History_INCLUDE_DIRS ${History_INCLUDE_DIR}) + + add_library(Readline::History UNKNOWN IMPORTED) + set_target_properties( + Readline::History + PROPERTIES + IMPORTED_LOCATION "${History_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${History_INCLUDE_DIR}" + ) endif() diff --git a/cmake/find_scripts/Findzstd.cmake b/cmake/find_scripts/Findzstd.cmake index 2b2d4428a66..c7ff4ba4de8 100644 --- a/cmake/find_scripts/Findzstd.cmake +++ b/cmake/find_scripts/Findzstd.cmake @@ -1,22 +1,16 @@ find_package(PkgConfig) if(PKG_CONFIG_FOUND) - pkg_check_modules(zstd QUIET "libzstd") - set(zstd_LIBRARIES ${zstd_LINK_LIBRARIES}) + pkg_check_modules(zstd QUIET "libzstd") + set(zstd_LIBRARIES ${zstd_LINK_LIBRARIES}) else() - find_path(zstd_ROOT_DIR NAMES include/zstd.h) - find_path( - zstd_INCLUDE_DIRS - NAMES zstd.h - HINTS ${zstd_ROOT_DIR}/include) - find_library( - zstd_LIBRARIES - NAMES zstd - HINTS ${zstd_ROOT_DIR}/lib) - if(zstd_INCLUDE_DIRS AND zstd_LIBRARIES) - set(zstd_FOUND TRUE) - endif() + find_path(zstd_ROOT_DIR NAMES include/zstd.h) + find_path(zstd_INCLUDE_DIRS NAMES zstd.h HINTS ${zstd_ROOT_DIR}/include) + find_library(zstd_LIBRARIES NAMES zstd HINTS ${zstd_ROOT_DIR}/lib) + if(zstd_INCLUDE_DIRS AND zstd_LIBRARIES) + set(zstd_FOUND TRUE) + endif() endif() if(zstd_FOUND) - message(STATUS "Found zstd: ${zstd_LIBRARIES}") + message(STATUS "Found zstd: ${zstd_LIBRARIES}") endif() diff --git a/cmake/locale_strings.cmake b/cmake/locale_strings.cmake index d24b4af2727..e04e489f222 100644 --- a/cmake/locale_strings.cmake +++ b/cmake/locale_strings.cmake @@ -29,20 +29,21 @@ file(TO_NATIVE_PATH "${PYDIR}" ETC_PYTHON_DIR) file(TO_NATIVE_PATH "${GUIDIR}/wxpython" GUI_WXPYTHON_DIR) if(WIN32) - set(sep "\;") - set(env_path "") + set(sep "\;") + set(env_path "") else() - set(sep ":") - set(env_path ":$ENV{PATH}") + set(sep ":") + set(env_path ":$ENV{PATH}") endif() set(ENV{GISBASE} "${GISBASE_NATIVE}") set(ENV{GISRC} ${GISRC}) set(ENV{PATH} "${BIN_DIR}${sep}${SCRIPTS_DIR}${env_path}") set(ENV{PYTHONPATH} - "${ETC_PYTHON_DIR}${sep}${GUI_WXPYTHON_DIR}${sep}$ENV{PYTHONPATH}") + "${ETC_PYTHON_DIR}${sep}${GUI_WXPYTHON_DIR}${sep}$ENV{PYTHONPATH}" +) if(NOT MSVC) - set(ENV{LD_LIBRARY_PATH} "${LIB_DIR}${sep}$ENV{LD_LIBRARY_PATH}") + set(ENV{LD_LIBRARY_PATH} "${LIB_DIR}${sep}$ENV{LD_LIBRARY_PATH}") endif() set(ENV{LC_ALL} C) set(ENV{LANG} C) @@ -51,27 +52,31 @@ set(ENV{MODULE_TOPDIR} ${MODULE_TOPDIR}) set(SCRIPT_EXT "") if(WIN32) - set(SCRIPT_EXT ".py") + set(SCRIPT_EXT ".py") endif() if(WIN32) - set(PGM_NAME ${G_NAME}) - configure_file(${SOURCE_DIR}/cmake/windows_launch.bat.in - ${SCRIPTDIR}/${G_NAME}.bat @ONLY) + set(PGM_NAME ${G_NAME}) + configure_file( + ${SOURCE_DIR}/cmake/windows_launch.bat.in + ${SCRIPTDIR}/${G_NAME}.bat + @ONLY + ) endif(WIN32) execute_process( - COMMAND ${BINARY_DIR}/g.parser -t ${SCRIPTDIR}/${G_NAME}${SCRIPT_EXT} - OUTPUT_VARIABLE run_g_parser_OV - ERROR_VARIABLE run_g_parser_EV - RESULT_VARIABLE run_g_parser_RV) + COMMAND ${BINARY_DIR}/g.parser -t ${SCRIPTDIR}/${G_NAME}${SCRIPT_EXT} + OUTPUT_VARIABLE run_g_parser_OV + ERROR_VARIABLE run_g_parser_EV + RESULT_VARIABLE run_g_parser_RV +) string(REGEX REPLACE "\n" ";" varname "${run_g_parser_OV}") set(output_to_write) foreach(line ${varname}) - string(REPLACE "\"" "\\\"" line "${line}") - set(line "_(\"${line}\")") - list(APPEND output_to_write "${line}") + string(REPLACE "\"" "\\\"" line "${line}") + set(line "_(\"${line}\")") + list(APPEND output_to_write "${line}") endforeach() string(REGEX REPLACE ";" "\n" output_to_write "${output_to_write}") diff --git a/cmake/modules/CMakeLists.txt b/cmake/modules/CMakeLists.txt index f75ac3e6140..995fd63ef55 100644 --- a/cmake/modules/CMakeLists.txt +++ b/cmake/modules/CMakeLists.txt @@ -1,5 +1 @@ -install( - FILES - build_addon.cmake - DESTINATION - ${GRASS_INSTALL_ETCDIR}/cmake) +install(FILES build_addon.cmake DESTINATION ${GRASS_INSTALL_ETCDIR}/cmake) diff --git a/cmake/modules/CheckDependentLibraries.cmake b/cmake/modules/CheckDependentLibraries.cmake index 9de0b65328d..c703b63b3cf 100644 --- a/cmake/modules/CheckDependentLibraries.cmake +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -15,11 +15,11 @@ find_package(FLEX REQUIRED) find_package(BISON REQUIRED) if(UNIX) - find_library(MATH_LIBRARY m) - add_library(LIBM INTERFACE IMPORTED GLOBAL) - set_property(TARGET LIBM PROPERTY INTERFACE_LINK_LIBRARIES ${MATH_LIBRARY}) - mark_as_advanced(M_LIBRARY) - set(LIBM LIBM) + find_library(MATH_LIBRARY m) + add_library(LIBM INTERFACE IMPORTED GLOBAL) + set_property(TARGET LIBM PROPERTY INTERFACE_LINK_LIBRARIES ${MATH_LIBRARY}) + mark_as_advanced(M_LIBRARY) + set(LIBM LIBM) endif() find_package(PROJ 9.0.0 REQUIRED) @@ -31,44 +31,66 @@ find_package(ZLIB REQUIRED) # Optional dependencies if(MSVC) - find_package(PCRE REQUIRED) - if(PCRE_FOUND) - add_library(PCRE INTERFACE IMPORTED GLOBAL) - set_property(TARGET PCRE PROPERTY INTERFACE_LINK_LIBRARIES - ${PCRE_LIBRARY${find_library_suffix}}) - set_property(TARGET PCRE PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${PCRE_INCLUDE_DIR}) - endif() + find_package(PCRE REQUIRED) + if(PCRE_FOUND) + add_library(PCRE INTERFACE IMPORTED GLOBAL) + set_property( + TARGET PCRE + PROPERTY + INTERFACE_LINK_LIBRARIES ${PCRE_LIBRARY${find_library_suffix}} + ) + set_property( + TARGET PCRE + PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PCRE_INCLUDE_DIR} + ) + endif() endif() find_package(Iconv) # FreeBSD specific iconv configuration if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") - if(Iconv_FOUND) - # LIBICONV_PLUG makes libiconv iconv.h act like libc iconv.h - add_compile_definitions(LIBICONV_PLUG) - - # Use CMAKE_PREFIX_PATH to locate iconv (typically /usr/local on FreeBSD) - if(NOT Iconv_INCLUDE_DIR AND CMAKE_PREFIX_PATH) - find_path(Iconv_INCLUDE_DIR iconv.h HINTS ${CMAKE_PREFIX_PATH}/include) - endif() - if(NOT Iconv_LIBRARY AND CMAKE_PREFIX_PATH) - find_library(Iconv_LIBRARY NAMES iconv libiconv HINTS ${CMAKE_PREFIX_PATH}/lib) + if(Iconv_FOUND) + # LIBICONV_PLUG makes libiconv iconv.h act like libc iconv.h + add_compile_definitions(LIBICONV_PLUG) + + # Use CMAKE_PREFIX_PATH to locate iconv (typically /usr/local on FreeBSD) + if(NOT Iconv_INCLUDE_DIR AND CMAKE_PREFIX_PATH) + find_path( + Iconv_INCLUDE_DIR + iconv.h + HINTS ${CMAKE_PREFIX_PATH}/include + ) + endif() + if(NOT Iconv_LIBRARY AND CMAKE_PREFIX_PATH) + find_library( + Iconv_LIBRARY + NAMES iconv libiconv + HINTS ${CMAKE_PREFIX_PATH}/lib + ) + endif() + + # Ensure iconv target has correct properties + if(TARGET Iconv::Iconv) + if(Iconv_INCLUDE_DIR) + set_property( + TARGET Iconv::Iconv + PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${Iconv_INCLUDE_DIR} + ) + endif() + if(Iconv_LIBRARY) + set_property( + TARGET Iconv::Iconv + PROPERTY INTERFACE_LINK_LIBRARIES ${Iconv_LIBRARY} + ) + endif() + endif() + + message( + STATUS + "FreeBSD: Using iconv from ${Iconv_LIBRARY} with LIBICONV_PLUG" + ) endif() - - # Ensure iconv target has correct properties - if(TARGET Iconv::Iconv) - if(Iconv_INCLUDE_DIR) - set_property(TARGET Iconv::Iconv PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${Iconv_INCLUDE_DIR}) - endif() - if(Iconv_LIBRARY) - set_property(TARGET Iconv::Iconv PROPERTY INTERFACE_LINK_LIBRARIES ${Iconv_LIBRARY}) - endif() - endif() - - message(STATUS "FreeBSD: Using iconv from ${Iconv_LIBRARY} with LIBICONV_PLUG") - endif() endif() set(THREADS_PREFER_PTHREAD_FLAG ON) @@ -77,63 +99,65 @@ find_package(Threads) # Graphics options if(WITH_X11) - find_package(X11 REQUIRED) + find_package(X11 REQUIRED) endif() if(WITH_OPENGL) - set(OPENGL_X11) - set(OPENGL_WINDOWS) - set(OPENGL_AQUA) - set(OPENGL_AGL) - set(HAVE_PIXMAPS) - - # TODO: this mirrors configure.ac, remove this macro after 8.5 release - set(OPENGL_FBO 1) - - if(APPLE) - set(OPENGL_AQUA 1) - - find_package(OpenGL REQUIRED COMPONENTS OpenGL) - - # We're aware of the deprecation of macOS OpenGL, no need to remind us - target_compile_options(OpenGL::GL INTERFACE -DGL_SILENCE_DEPRECATION=1) - - find_library(AGL_FRAMEWORK AGL) - set(CMAKE_REQUIRED_LIBRARIES ${AGL_FRAMEWORK}) - check_include_file(AGL/agl.h HAVE_AGL_H) - check_symbol_exists(aglSwapBuffers AGL/agl.h HAVE_AGLSWAPBUFFERS) - unset(CMAKE_REQUIRED_LIBRARIES) - if(AGL_FRAMEWORK AND HAVE_AGL_H AND HAVE_AGLSWAPBUFFERS) - set_property( - TARGET OpenGL::GL - APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${AGL_FRAMEWORK}) - set(OPENGL_AGL 1) + set(OPENGL_X11) + set(OPENGL_WINDOWS) + set(OPENGL_AQUA) + set(OPENGL_AGL) + set(HAVE_PIXMAPS) + + # TODO: this mirrors configure.ac, remove this macro after 8.5 release + set(OPENGL_FBO 1) + + if(APPLE) + set(OPENGL_AQUA 1) + + find_package(OpenGL REQUIRED COMPONENTS OpenGL) + + # We're aware of the deprecation of macOS OpenGL, no need to remind us + target_compile_options(OpenGL::GL INTERFACE -DGL_SILENCE_DEPRECATION=1) + + find_library(AGL_FRAMEWORK AGL) + set(CMAKE_REQUIRED_LIBRARIES ${AGL_FRAMEWORK}) + check_include_file(AGL/agl.h HAVE_AGL_H) + check_symbol_exists(aglSwapBuffers AGL/agl.h HAVE_AGLSWAPBUFFERS) + unset(CMAKE_REQUIRED_LIBRARIES) + if(AGL_FRAMEWORK AND HAVE_AGL_H AND HAVE_AGLSWAPBUFFERS) + set_property( + TARGET OpenGL::GL + APPEND + PROPERTY INTERFACE_LINK_LIBRARIES ${AGL_FRAMEWORK} + ) + set(OPENGL_AGL 1) + endif() + elseif(WIN32) + set(OPENGL_WINDOWS 1) + + find_package(OpenGL REQUIRED COMPONENTS OpenGL) + else() + set(OPENGL_X11 1) + + find_package(OpenGL REQUIRED COMPONENTS OpenGL GLX) + + # probably not necessary, but to be sure + set(CMAKE_REQUIRED_LIBRARIES ${OPENGL_LIBRARIES}) + set(CMAKE_REQUIRED_INCLUDES ${OPENGL_INCLUDE_DIR}) + check_symbol_exists(glXCreateGLXPixmap GL/glx.h HAVE_PIXMAPS) + unset(CMAKE_REQUIRED_LIBRARIES) + unset(CMAKE_REQUIRED_INCLUDES) endif() - elseif(WIN32) - set(OPENGL_WINDOWS 1) - - find_package(OpenGL REQUIRED COMPONENTS OpenGL) - else() - set(OPENGL_X11 1) - - find_package(OpenGL REQUIRED COMPONENTS OpenGL GLX) - - # probably not necessary, but to be sure - set(CMAKE_REQUIRED_LIBRARIES ${OPENGL_LIBRARIES}) - set(CMAKE_REQUIRED_INCLUDES ${OPENGL_INCLUDE_DIR}) - check_symbol_exists(glXCreateGLXPixmap GL/glx.h HAVE_PIXMAPS) - unset(CMAKE_REQUIRED_LIBRARIES) - unset(CMAKE_REQUIRED_INCLUDES) - endif() endif() if(WITH_CAIRO) - find_package(Fontconfig REQUIRED) - find_package(Cairo REQUIRED) + find_package(Fontconfig REQUIRED) + find_package(Cairo REQUIRED) endif() if(WITH_LIBPNG) - find_package(PNG REQUIRED) + find_package(PNG REQUIRED) endif() # Data storage options @@ -146,78 +170,96 @@ if(WITH_SQLITE) endif() if(WITH_POSTGRES) - if(NOT PostgreSQL_ADDITIONAL_VERSIONS) - set(PostgreSQL_ADDITIONAL_VERSIONS "17" "16" "15" "14" "13") - endif() - find_package(PostgreSQL REQUIRED) + if(NOT PostgreSQL_ADDITIONAL_VERSIONS) + set(PostgreSQL_ADDITIONAL_VERSIONS + "17" + "16" + "15" + "14" + "13" + ) + endif() + find_package(PostgreSQL REQUIRED) endif() if(WITH_MYSQL) - find_package(MySQL REQUIRED) - if(MySQL_FOUND) - add_library(MYSQL INTERFACE IMPORTED GLOBAL) - set_property(TARGET MYSQL PROPERTY INTERFACE_LINK_LIBRARIES - ${MySQL_LIBRARY}) - set_property(TARGET MYSQL PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${MySQL_INCLUDE_DIRS}) - endif() + find_package(MySQL REQUIRED) + if(MySQL_FOUND) + add_library(MYSQL INTERFACE IMPORTED GLOBAL) + set_property( + TARGET MYSQL + PROPERTY INTERFACE_LINK_LIBRARIES ${MySQL_LIBRARY} + ) + set_property( + TARGET MYSQL + PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${MySQL_INCLUDE_DIRS} + ) + endif() endif() if(WITH_ODBC) - find_package(ODBC REQUIRED) + find_package(ODBC REQUIRED) endif() if(WITH_ZSTD) - find_package(zstd REQUIRED) - if(zstd_FOUND) - add_library(ZSTD INTERFACE IMPORTED GLOBAL) - set_property(TARGET ZSTD PROPERTY INTERFACE_LINK_LIBRARIES - ${zstd_LIBRARIES}) - set_property(TARGET ZSTD PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${zstd_INCLUDE_DIRS}) - endif() + find_package(zstd REQUIRED) + if(zstd_FOUND) + add_library(ZSTD INTERFACE IMPORTED GLOBAL) + set_property( + TARGET ZSTD + PROPERTY INTERFACE_LINK_LIBRARIES ${zstd_LIBRARIES} + ) + set_property( + TARGET ZSTD + PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${zstd_INCLUDE_DIRS} + ) + endif() endif() if(WITH_BZLIB) - find_package(BZip2 REQUIRED) + find_package(BZip2 REQUIRED) endif() # Command-line options if(WITH_READLINE) - find_package(Readline REQUIRED COMPONENTS History) + find_package(Readline REQUIRED COMPONENTS History) endif() # Language options if(WITH_FREETYPE) - find_package(Freetype REQUIRED) + find_package(Freetype REQUIRED) endif() if(WITH_NLS) - find_package(Gettext REQUIRED) - if(GETTEXT_FOUND) - set(MSGFMT ${GETTEXT_MSGFMT_EXECUTABLE}) - set(MSGMERGE ${GETTEXT_MSGMERGE_EXECUTABLE}) - endif() - find_package(Intl REQUIRED) + find_package(Gettext REQUIRED) + if(GETTEXT_FOUND) + set(MSGFMT ${GETTEXT_MSGFMT_EXECUTABLE}) + set(MSGMERGE ${GETTEXT_MSGMERGE_EXECUTABLE}) + endif() + find_package(Intl REQUIRED) endif() # Computing options if(WITH_FFTW) - find_package(FFTW REQUIRED) - if(FFTW_FOUND) - add_library(FFTW INTERFACE IMPORTED GLOBAL) - set_property(TARGET FFTW PROPERTY INTERFACE_LINK_LIBRARIES - ${FFTW_LIBRARIES}) - set_property(TARGET FFTW PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${FFTW_INCLUDE_DIR}) - endif() + find_package(FFTW REQUIRED) + if(FFTW_FOUND) + add_library(FFTW INTERFACE IMPORTED GLOBAL) + set_property( + TARGET FFTW + PROPERTY INTERFACE_LINK_LIBRARIES ${FFTW_LIBRARIES} + ) + set_property( + TARGET FFTW + PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${FFTW_INCLUDE_DIR} + ) + endif() endif() if(WITH_CBLAS) - if(NOT CBLAS_PREFER_PKGCONFIG) - set(CBLAS_PREFER_PKGCONFIG ON) - endif() - find_package(CBLAS REQUIRED) + if(NOT CBLAS_PREFER_PKGCONFIG) + set(CBLAS_PREFER_PKGCONFIG ON) + endif() + find_package(CBLAS REQUIRED) endif() if(WITH_LAPACKE) @@ -231,65 +273,73 @@ if(WITH_LAPACKE) endif() if(WITH_OPENMP) - if(MSVC AND CMAKE_VERSION VERSION_GREATER_EQUAL "3.30") - # for min/max reduction - # get rid of warning D9025: overriding '/openmp' with '/openmp:llvm' - set(OpenMP_RUNTIME_MSVC "llvm") - endif() - find_package(OpenMP REQUIRED) - if(OpenMP_FOUND AND MSVC AND CMAKE_VERSION VERSION_LESS "3.30") - # CMake < 3.30 doesn't support OpenMP_RUNTIME_MSVC - # for min/max reduction - target_compile_options(OpenMP::OpenMP_C PRIVATE -openmp:llvm) - endif() + if(MSVC AND CMAKE_VERSION VERSION_GREATER_EQUAL "3.30") + # for min/max reduction + # get rid of warning D9025: overriding '/openmp' with '/openmp:llvm' + set(OpenMP_RUNTIME_MSVC "llvm") + endif() + find_package(OpenMP REQUIRED) + if(OpenMP_FOUND AND MSVC AND CMAKE_VERSION VERSION_LESS "3.30") + # CMake < 3.30 doesn't support OpenMP_RUNTIME_MSVC + # for min/max reduction + target_compile_options(OpenMP::OpenMP_C PRIVATE -openmp:llvm) + endif() endif() if(WITH_LIBSVM) - find_package(LibSVM REQUIRED) + find_package(LibSVM REQUIRED) endif() # Data format options if(WITH_TIFF) - find_package(TIFF REQUIRED) + find_package(TIFF REQUIRED) endif() if(WITH_NETCDF) - find_package(NetCDF REQUIRED) + find_package(NetCDF REQUIRED) endif() if(WITH_GEOS) - find_package(GEOS REQUIRED) - message(STATUS "Found GEOS: ${GEOS_DIR} (found version \"${GEOS_VERSION}\")") + find_package(GEOS REQUIRED) + message( + STATUS + "Found GEOS: ${GEOS_DIR} (found version \"${GEOS_VERSION}\")" + ) endif() if(WITH_PDAL) - find_package(PDAL REQUIRED CONFIG) - set(PDAL pdalcpp) - if(NOT TARGET pdalcpp - AND TARGET pdal_base - AND TARGET pdal_util) - # Workaround for PDAL <2.6 - set(PDAL pdal_base pdal_util) - endif() - message(STATUS "Found PDAL: ${PDAL_DIR} (found version \"${PDAL_VERSION}\")") + find_package(PDAL REQUIRED CONFIG) + set(PDAL pdalcpp) + if(NOT TARGET pdalcpp AND TARGET pdal_base AND TARGET pdal_util) + # Workaround for PDAL <2.6 + set(PDAL pdal_base pdal_util) + endif() + message( + STATUS + "Found PDAL: ${PDAL_DIR} (found version \"${PDAL_VERSION}\")" + ) endif() if(WITH_LIBLAS) - find_package(LibLAS REQUIRED) - if(LibLAS_FOUND) - add_library(LIBLAS INTERFACE IMPORTED GLOBAL) - set_property(TARGET LIBLAS PROPERTY INTERFACE_LINK_LIBRARIES - ${LibLAS_C_LIBRARY}) - set_property(TARGET LIBLAS PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${LibLAS_INCLUDE_DIR}) - endif() + find_package(LibLAS REQUIRED) + if(LibLAS_FOUND) + add_library(LIBLAS INTERFACE IMPORTED GLOBAL) + set_property( + TARGET LIBLAS + PROPERTY INTERFACE_LINK_LIBRARIES ${LibLAS_C_LIBRARY} + ) + set_property( + TARGET LIBLAS + PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${LibLAS_INCLUDE_DIR} + ) + endif() endif() find_package(Python3 REQUIRED) if(Python3_FOUND) - set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE}) - set(PYTHON_SITEARCH ${Python3_SITEARCH}) - #[[ + set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE}) + set(PYTHON_SITEARCH ${Python3_SITEARCH}) + #[[ find_package(PythonLibs REQUIRED) find_package(Numpy) #]] @@ -322,5 +372,5 @@ check_target(GEOS::geos_c HAVE_GEOS) check_target(LibSVM::LibSVM HAVE_SVM_H) if(MSVC) - check_target(PCRE HAVE_PCRE_H) + check_target(PCRE HAVE_PCRE_H) endif() diff --git a/cmake/modules/Configure.cmake b/cmake/modules/Configure.cmake index 01952f37dbf..c08e5d9df20 100644 --- a/cmake/modules/Configure.cmake +++ b/cmake/modules/Configure.cmake @@ -6,10 +6,10 @@ check_include_file(limits.h HAVE_LIMITS_H) check_include_file(termio.h HAVE_TERMIO_H) check_include_file(termios.h HAVE_TERMIOS_H) if(NOT MSVC) - check_include_file(unistd.h HAVE_UNISTD_H) + check_include_file(unistd.h HAVE_UNISTD_H) else() - # unistd.h in stocked in thirdparty/msvc/ # codespell:ignore thirdparty - set(HAVE_UNISTD_H 1) + # unistd.h in stocked in thirdparty/msvc/ # codespell:ignore thirdparty + set(HAVE_UNISTD_H 1) endif() check_include_file(values.h HAVE_VALUES_H) check_include_file(sys/ioctl.h HAVE_SYS_IOCTL_H) @@ -26,21 +26,21 @@ check_include_file(cblas.h HAVE_CBLAS_H) check_include_file(cblas-atlas.h HAVE_CBLAS_ATLAS_H) if(MSVC) - set(HAVE_PTHREAD_H 0) - set(HAVE_REGEX_H 0) - set(HAVE_LIBINTL_H 0) - set(HAVE_LANGINFO_H 0) - set(HAVE_DBM_H 0) + set(HAVE_PTHREAD_H 0) + set(HAVE_REGEX_H 0) + set(HAVE_LIBINTL_H 0) + set(HAVE_LANGINFO_H 0) + set(HAVE_DBM_H 0) else() - check_include_file(pthread.h HAVE_PTHREAD_H) - check_include_file(regex.h HAVE_REGEX_H) + check_include_file(pthread.h HAVE_PTHREAD_H) + check_include_file(regex.h HAVE_REGEX_H) - set(CMAKE_REQUIRED_INCLUDES ${Intl_INCLUDE_DIR}) - check_include_file(libintl.h HAVE_LIBINTL_H) - unset(CMAKE_REQUIRED_INCLUDES) + set(CMAKE_REQUIRED_INCLUDES ${Intl_INCLUDE_DIR}) + check_include_file(libintl.h HAVE_LIBINTL_H) + unset(CMAKE_REQUIRED_INCLUDES) - check_include_file(langinfo.h HAVE_LANGINFO_H) - check_include_file(dbm.h HAVE_DBM_H) + check_include_file(langinfo.h HAVE_LANGINFO_H) + check_include_file(dbm.h HAVE_DBM_H) endif() # # # set(CMAKE_REQUIRED_INCLUDES "${FFTW_INCLUDE_DIR}") check_target(ICONV @@ -63,18 +63,18 @@ endif() set(USE_G_SOCKS 0) if(WITH_LARGEFILES) - set(HAVE_LARGEFILES 1) + set(HAVE_LARGEFILES 1) else() - set(HAVE_LARGEFILES 0) + set(HAVE_LARGEFILES 0) endif() if(MSVC) - set(GID_TYPE int) - set(UID_TYPE int) - set(UID_TYPE int) - set(RETSIGTYPE "void") + set(GID_TYPE int) + set(UID_TYPE int) + set(UID_TYPE int) + set(RETSIGTYPE "void") else() - set(RETSIGTYPE "int") + set(RETSIGTYPE "int") endif() # #######################TODO######################## @@ -82,11 +82,11 @@ endif() set(USE_NLS 0) if(WITH_NLS) - set(USE_NLS 1) + set(USE_NLS 1) endif() if(MSVC) - set(PID_TYPE int) + set(PID_TYPE int) endif() set(_OE_SOCKETS 0) @@ -96,35 +96,36 @@ set(_REENTRANT 0) set(X_DISPLAY_MISSING 1) if(TARGET X11::X11) - set(X_DISPLAY_MISSING 0) + set(X_DISPLAY_MISSING 0) endif() # used in config.cmake.in set(STATIC_BUILD 0) if(NOT BUILD_SHARED_LIBS) - set(STATIC_BUILD 1) + set(STATIC_BUILD 1) endif() # used in config.cmake.in set(GDEBUG 0) if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") - set(GDEBUG 1) + set(GDEBUG 1) endif() set(CMAKE_REQUIRED_FLAGS ${CMAKE_C_FLAGS}) check_c_source_compiles( - " + " int main(int argc, char *argv[]) { long long int x; return 0; } " - HAVE_LONG_LONG_INT) + HAVE_LONG_LONG_INT +) check_c_source_compiles( - " + " #include #include #include @@ -132,7 +133,8 @@ int main() { struct tm *tp; ; return 0; } " - TIME_WITH_SYS_TIME) + TIME_WITH_SYS_TIME +) check_symbol_exists(gethostname "unistd.h" HAVE_GETHOSTNAME) check_symbol_exists(gettimeofday "sys/time.h" HAVE_GETTIMEOFDAY) @@ -153,26 +155,26 @@ check_symbol_exists(nanosleep "time.h" HAVE_NANOSLEEP) check_symbol_exists(fseeko "stdio.h" HAVE_FSEEKO) function(check_symbol_definitions) - cmake_parse_arguments(PARSE_ARGV 0 ARG "" "SYMBOL" "INCLUDES;DEFINITIONS") + cmake_parse_arguments(PARSE_ARGV 0 ARG "" "SYMBOL" "INCLUDES;DEFINITIONS") - string(TOUPPER "HAVE_${ARG_SYMBOL}" var_name) + string(TOUPPER "HAVE_${ARG_SYMBOL}" var_name) - # First try with a simple check - check_symbol_exists("${ARG_SYMBOL}" "${ARG_INCLUDES}" "${var_name}") - - if($CACHE{${var_name}}) - return() - endif() - - # Otherwise, start trying alternatives - foreach(def IN LISTS ARG_DEFINITIONS) - unset(${var_name} CACHE) - set(CMAKE_REQUIRED_DEFINITIONS "-D${def}") + # First try with a simple check check_symbol_exists("${ARG_SYMBOL}" "${ARG_INCLUDES}" "${var_name}") + if($CACHE{${var_name}}) - return() + return() endif() - endforeach() + + # Otherwise, start trying alternatives + foreach(def IN LISTS ARG_DEFINITIONS) + unset(${var_name} CACHE) + set(CMAKE_REQUIRED_DEFINITIONS "-D${def}") + check_symbol_exists("${ARG_SYMBOL}" "${ARG_INCLUDES}" "${var_name}") + if($CACHE{${var_name}}) + return() + endif() + endforeach() endfunction() check_symbol_definitions( @@ -182,4 +184,5 @@ check_symbol_definitions( stdio.h DEFINITIONS _GNU_SOURCE - _BSD_SOURCE) + _BSD_SOURCE +) diff --git a/cmake/modules/DevelUtils.cmake b/cmake/modules/DevelUtils.cmake index 766af2ae5e5..400e57c8dbb 100644 --- a/cmake/modules/DevelUtils.cmake +++ b/cmake/modules/DevelUtils.cmake @@ -2,10 +2,18 @@ # Get all properties that cmake supports if(NOT CMAKE_PROPERTY_LIST) - execute_process(COMMAND cmake --help-property-list OUTPUT_VARIABLE CMAKE_PROPERTY_LIST) + execute_process( + COMMAND cmake --help-property-list + OUTPUT_VARIABLE CMAKE_PROPERTY_LIST + ) # Convert command output into a CMake list - string(REGEX REPLACE ";" "\\\\;" CMAKE_PROPERTY_LIST "${CMAKE_PROPERTY_LIST}") + string( + REGEX REPLACE ";" + "\\\\;" + CMAKE_PROPERTY_LIST + "${CMAKE_PROPERTY_LIST}" + ) string(REGEX REPLACE "\n" ";" CMAKE_PROPERTY_LIST "${CMAKE_PROPERTY_LIST}") list(REMOVE_DUPLICATES CMAKE_PROPERTY_LIST) endif() @@ -16,14 +24,18 @@ endfunction() function(print_target_properties target) if(NOT TARGET ${target}) - message(STATUS "There is no target named '${target}'") - return() + message(STATUS "There is no target named '${target}'") + return() endif() foreach(property ${CMAKE_PROPERTY_LIST}) string(REPLACE "" "${CMAKE_BUILD_TYPE}" property ${property}) - if(property STREQUAL "LOCATION" OR property MATCHES "^LOCATION_" OR property MATCHES "_LOCATION$") + if( + property STREQUAL "LOCATION" + OR property MATCHES "^LOCATION_" + OR property MATCHES "_LOCATION$" + ) continue() endif() diff --git a/cmake/modules/GRASSInstallDirs.cmake b/cmake/modules/GRASSInstallDirs.cmake index 0d21253164a..26292c32269 100644 --- a/cmake/modules/GRASSInstallDirs.cmake +++ b/cmake/modules/GRASSInstallDirs.cmake @@ -1,57 +1,63 @@ include(GNUInstallDirs) if(WITH_FHS) - message("FHS file structure") - set(GISBASE_DIR "${CMAKE_INSTALL_LIBEXECDIR}/${PROJECT_NAME_LOWER}") - set(GRASS_INSTALL_BINDIR "${GISBASE_DIR}/bin") - set(GRASS_INSTALL_LIBDIR "${CMAKE_INSTALL_LIBDIR}") - set(GRASS_INSTALL_SCRIPTDIR "${GISBASE_DIR}/bin") - set(GRASS_INSTALL_SHAREDIR - "${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME_LOWER}") - set(GRASS_INSTALL_ETCDIR "${GRASS_INSTALL_SHAREDIR}/etc") - set(GRASS_INSTALL_ETCBINDIR "${GISBASE_DIR}/etc") - set(GRASS_INSTALL_PYDIR "${PYTHON_SITEARCH}") - set(GRASS_INSTALL_GUIDIR "${GRASS_INSTALL_PYDIR}/${PROJECT_NAME_LOWER}/gui") - set(GRASS_INSTALL_GUISCRIPTDIR "${GRASS_INSTALL_SCRIPTDIR}") - set(GRASS_INSTALL_DRIVERDIR "${GISBASE_DIR}/driver") - set(GRASS_INSTALL_FONTSDIR "${GRASS_INSTALL_SHAREDIR}/fonts") - set(GRASS_INSTALL_UTILSDIR "${GISBASE_DIR}/utils") - set(GRASS_INSTALL_INCLUDEDIR "${CMAKE_INSTALL_INCLUDEDIR}") - set(GRASS_INSTALL_DOCDIR - "${CMAKE_INSTALL_DATAROOTDIR}/doc/${PROJECT_NAME_LOWER}-doc") - set(GRASS_INSTALL_DEVDOCDIR - "${CMAKE_INSTALL_DATAROOTDIR}/doc/${PROJECT_NAME_LOWER}-dev-doc") - set(GRASS_INSTALL_MANDIR "${CMAKE_INSTALL_MANDIR}/man1") - set(GRASS_INSTALL_MKDOCSDIR - "${CMAKE_INSTALL_DATAROOTDIR}/doc/${PROJECT_NAME_LOWER}-mkdocs") - set(GRASS_INSTALL_DEMODIR "${GRASS_INSTALL_SHAREDIR}/demolocation") - set(GRASS_INSTALL_MISCDIR "${GRASS_INSTALL_SHAREDIR}") - set(GRASS_INSTALL_MAKEFILEDIR "${GISBASE_DIR}/Make") - set(GRASS_INSTALL_LOCALEDIR "${CMAKE_INSTALL_LOCALEDIR}") + message("FHS file structure") + set(GISBASE_DIR "${CMAKE_INSTALL_LIBEXECDIR}/${PROJECT_NAME_LOWER}") + set(GRASS_INSTALL_BINDIR "${GISBASE_DIR}/bin") + set(GRASS_INSTALL_LIBDIR "${CMAKE_INSTALL_LIBDIR}") + set(GRASS_INSTALL_SCRIPTDIR "${GISBASE_DIR}/bin") + set(GRASS_INSTALL_SHAREDIR + "${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME_LOWER}" + ) + set(GRASS_INSTALL_ETCDIR "${GRASS_INSTALL_SHAREDIR}/etc") + set(GRASS_INSTALL_ETCBINDIR "${GISBASE_DIR}/etc") + set(GRASS_INSTALL_PYDIR "${PYTHON_SITEARCH}") + set(GRASS_INSTALL_GUIDIR "${GRASS_INSTALL_PYDIR}/${PROJECT_NAME_LOWER}/gui") + set(GRASS_INSTALL_GUISCRIPTDIR "${GRASS_INSTALL_SCRIPTDIR}") + set(GRASS_INSTALL_DRIVERDIR "${GISBASE_DIR}/driver") + set(GRASS_INSTALL_FONTSDIR "${GRASS_INSTALL_SHAREDIR}/fonts") + set(GRASS_INSTALL_UTILSDIR "${GISBASE_DIR}/utils") + set(GRASS_INSTALL_INCLUDEDIR "${CMAKE_INSTALL_INCLUDEDIR}") + set(GRASS_INSTALL_DOCDIR + "${CMAKE_INSTALL_DATAROOTDIR}/doc/${PROJECT_NAME_LOWER}-doc" + ) + set(GRASS_INSTALL_DEVDOCDIR + "${CMAKE_INSTALL_DATAROOTDIR}/doc/${PROJECT_NAME_LOWER}-dev-doc" + ) + set(GRASS_INSTALL_MANDIR "${CMAKE_INSTALL_MANDIR}/man1") + set(GRASS_INSTALL_MKDOCSDIR + "${CMAKE_INSTALL_DATAROOTDIR}/doc/${PROJECT_NAME_LOWER}-mkdocs" + ) + set(GRASS_INSTALL_DEMODIR "${GRASS_INSTALL_SHAREDIR}/demolocation") + set(GRASS_INSTALL_MISCDIR "${GRASS_INSTALL_SHAREDIR}") + set(GRASS_INSTALL_MAKEFILEDIR "${GISBASE_DIR}/Make") + set(GRASS_INSTALL_LOCALEDIR "${CMAKE_INSTALL_LOCALEDIR}") else() - message("Legacy file structure") - set(GISBASE_DIR "${CMAKE_INSTALL_LIBDIR}/grass${GRASS_VERSION_MAJOR}${GRASS_VERSION_MINOR}") - set(GRASS_INSTALL_BINDIR "${GISBASE_DIR}/bin") - set(GRASS_INSTALL_LIBDIR "${GISBASE_DIR}/lib") - set(GRASS_INSTALL_SCRIPTDIR "${GISBASE_DIR}/scripts") - set(GRASS_INSTALL_SHAREDIR "${GISBASE_DIR}/share") - set(GRASS_INSTALL_ETCDIR "${GISBASE_DIR}/etc") - set(GRASS_INSTALL_ETCBINDIR "${GISBASE_DIR}/etc") - set(GRASS_INSTALL_PYDIR "${GISBASE_DIR}/etc/python") - set(GRASS_INSTALL_GUIDIR "${GISBASE_DIR}/gui") - set(GRASS_INSTALL_GUISCRIPTDIR "${GRASS_INSTALL_GUIDIR}/scripts") - set(GRASS_INSTALL_DRIVERDIR "${GISBASE_DIR}/driver") - set(GRASS_INSTALL_FONTSDIR "${GISBASE_DIR}/fonts") - set(GRASS_INSTALL_UTILSDIR "${GISBASE_DIR}/utils") - set(GRASS_INSTALL_INCLUDEDIR "${GISBASE_DIR}/include") - set(GRASS_INSTALL_DOCDIR "${GISBASE_DIR}/docs/html") - set(GRASS_INSTALL_DEVDOCDIR "${GISBASE_DIR}/html") - set(GRASS_INSTALL_MANDIR "${GISBASE_DIR}/docs/man/man1") - set(GRASS_INSTALL_MKDOCSDIR "${GISBASE_DIR}/docs/mkdocs") - set(GRASS_INSTALL_DEMODIR "${GISBASE_DIR}/demolocation") - set(GRASS_INSTALL_MISCDIR "${GISBASE_DIR}") - set(GRASS_INSTALL_MAKEFILEDIR "${GISBASE_DIR}/Make") - set(GRASS_INSTALL_LOCALEDIR "${GISBASE_DIR}/locale") + message("Legacy file structure") + set(GISBASE_DIR + "${CMAKE_INSTALL_LIBDIR}/grass${GRASS_VERSION_MAJOR}${GRASS_VERSION_MINOR}" + ) + set(GRASS_INSTALL_BINDIR "${GISBASE_DIR}/bin") + set(GRASS_INSTALL_LIBDIR "${GISBASE_DIR}/lib") + set(GRASS_INSTALL_SCRIPTDIR "${GISBASE_DIR}/scripts") + set(GRASS_INSTALL_SHAREDIR "${GISBASE_DIR}/share") + set(GRASS_INSTALL_ETCDIR "${GISBASE_DIR}/etc") + set(GRASS_INSTALL_ETCBINDIR "${GISBASE_DIR}/etc") + set(GRASS_INSTALL_PYDIR "${GISBASE_DIR}/etc/python") + set(GRASS_INSTALL_GUIDIR "${GISBASE_DIR}/gui") + set(GRASS_INSTALL_GUISCRIPTDIR "${GRASS_INSTALL_GUIDIR}/scripts") + set(GRASS_INSTALL_DRIVERDIR "${GISBASE_DIR}/driver") + set(GRASS_INSTALL_FONTSDIR "${GISBASE_DIR}/fonts") + set(GRASS_INSTALL_UTILSDIR "${GISBASE_DIR}/utils") + set(GRASS_INSTALL_INCLUDEDIR "${GISBASE_DIR}/include") + set(GRASS_INSTALL_DOCDIR "${GISBASE_DIR}/docs/html") + set(GRASS_INSTALL_DEVDOCDIR "${GISBASE_DIR}/html") + set(GRASS_INSTALL_MANDIR "${GISBASE_DIR}/docs/man/man1") + set(GRASS_INSTALL_MKDOCSDIR "${GISBASE_DIR}/docs/mkdocs") + set(GRASS_INSTALL_DEMODIR "${GISBASE_DIR}/demolocation") + set(GRASS_INSTALL_MISCDIR "${GISBASE_DIR}") + set(GRASS_INSTALL_MAKEFILEDIR "${GISBASE_DIR}/Make") + set(GRASS_INSTALL_LOCALEDIR "${GISBASE_DIR}/locale") endif() set(GRASS_INSTALL_CMAKECONFDIR "${CMAKE_INSTALL_LIBDIR}/cmake") @@ -88,14 +94,29 @@ set(RUNTIME_GISBASE "${OUTDIR}/${GISBASE_DIR}") set(GISRC_NAME ".grassrc${GRASS_VERSION_MAJOR}${GRASS_VERSION_MINOR}") if(WITH_FHS) - file(TO_NATIVE_PATH "${GRASS_INSTALL_PYDIR}" GRASS_INSTALL_PYDIR_PATH) - file(TO_NATIVE_PATH "${OUTDIR}/${GRASS_INSTALL_PYDIR}" GRASS_INSTALL_PYDIR_RUNTIME_PATH) + file(TO_NATIVE_PATH "${GRASS_INSTALL_PYDIR}" GRASS_INSTALL_PYDIR_PATH) + file( + TO_NATIVE_PATH + "${OUTDIR}/${GRASS_INSTALL_PYDIR}" + GRASS_INSTALL_PYDIR_RUNTIME_PATH + ) else() - file(TO_NATIVE_PATH "${CMAKE_INSTALL_PREFIX}/${GRASS_INSTALL_PYDIR}" GRASS_INSTALL_PYDIR_PATH) - file(TO_NATIVE_PATH "${OUTDIR}/${GRASS_INSTALL_PYDIR}" GRASS_INSTALL_PYDIR_RUNTIME_PATH) + file( + TO_NATIVE_PATH + "${CMAKE_INSTALL_PREFIX}/${GRASS_INSTALL_PYDIR}" + GRASS_INSTALL_PYDIR_PATH + ) + file( + TO_NATIVE_PATH + "${OUTDIR}/${GRASS_INSTALL_PYDIR}" + GRASS_INSTALL_PYDIR_RUNTIME_PATH + ) endif() message(STATUS "GRASS_INSTALL_PYDIR_PATH ${GRASS_INSTALL_PYDIR_PATH}") -message(STATUS "GRASS_INSTALL_PYDIR_RUNTIME_PATH ${GRASS_INSTALL_PYDIR_RUNTIME_PATH}") +message( + STATUS + "GRASS_INSTALL_PYDIR_RUNTIME_PATH ${GRASS_INSTALL_PYDIR_RUNTIME_PATH}" +) file(TO_NATIVE_PATH "${CMAKE_SOURCE_DIR}" MODULE_TOPDIR) file(TO_NATIVE_PATH "${RUNTIME_GISBASE}" RUN_GISBASE_NATIVE) @@ -106,8 +127,11 @@ file(TO_NATIVE_PATH "${OUTDIR}/${GRASS_INSTALL_DOCDIR}" DOC_DIR) file(TO_NATIVE_PATH "${OUTDIR}/${GRASS_INSTALL_DEMODIR}/${GISRC_NAME}" GISRC) file(TO_NATIVE_PATH "${OUTDIR}/${GRASS_INSTALL_PYDIR}" ETC_PYTHON_DIR) -file(TO_NATIVE_PATH "${OUTDIR}/${GRASS_INSTALL_GUIDIR}/wxpython" - GUI_WXPYTHON_DIR) +file( + TO_NATIVE_PATH + "${OUTDIR}/${GRASS_INSTALL_GUIDIR}/wxpython" + GUI_WXPYTHON_DIR +) message(STATUS "GISBASE ${GISBASE}") message(STATUS "GISBASE_NATIVE ${RUN_GISBASE_NATIVE}") diff --git a/cmake/modules/build_addon.cmake b/cmake/modules/build_addon.cmake index 21425c8fdb5..eef2191f231 100644 --- a/cmake/modules/build_addon.cmake +++ b/cmake/modules/build_addon.cmake @@ -45,16 +45,16 @@ Build GRASS Addon set(CMAKE_DISABLE_IN_SOURCE_BUILD ON) if(WIN32) - set(null_device nul) - set(search_command findstr /r /v) - set(html_search_str "\" .\"") - set(sep "\;") - string(REPLACE ";" "${sep}" env_path "${env_path}") + set(null_device nul) + set(search_command findstr /r /v) + set(html_search_str "\" .\"") + set(sep "\;") + string(REPLACE ";" "${sep}" env_path "${env_path}") else() - set(null_device /dev/null) - set(search_command grep -v) - set(html_search_str "'\|\|.'") - set(sep ":") + set(null_device /dev/null) + set(search_command grep -v) + set(html_search_str "'\|\|.'") + set(sep ":") endif() set(GRASSAddon_BinDIR bin) @@ -71,287 +71,357 @@ file(MAKE_DIRECTORY "${OUTDIR}/${GRASSAddon_LibDIR}") file(MAKE_DIRECTORY "${OUTDIR}/${GRASSAddon_ScriptDIR}") function(add_files_to_etc_dir dir) - cmake_parse_arguments(PARSE_ARGV 1 G "" "" "FILES") - file(MAKE_DIRECTORY ${OUTDIR}/${GRASSAddon_ETCDIR}/${dir}) - file(COPY ${G_FILES} DESTINATION ${OUTDIR}/${GRASSAddon_ETCDIR}/${dir}) - install(FILES ${G_FILES} DESTINATION ${GRASSAddon_ETCDIR}/${dir}) + cmake_parse_arguments(PARSE_ARGV 1 G "" "" "FILES") + file(MAKE_DIRECTORY ${OUTDIR}/${GRASSAddon_ETCDIR}/${dir}) + file(COPY ${G_FILES} DESTINATION ${OUTDIR}/${GRASSAddon_ETCDIR}/${dir}) + install(FILES ${G_FILES} DESTINATION ${GRASSAddon_ETCDIR}/${dir}) endfunction() function(build_addon name) - cmake_parse_arguments(PARSE_ARGV 1 G "NO_DOCS;IS_SCRIPT" "SRC_DIR;PYTHONPATH" - "SOURCES;ADDONS;DEPENDS;DOCFILES;GRASSLIBS") - set(_src_dir ${CMAKE_CURRENT_SOURCE_DIR}) - set(G_NAME ${name}) - find_package(GRASS REQUIRED) - - set(MKHTML_PY ${GRASS_UTILS_DIR}/mkhtml.py) - if(NOT EXISTS ${MKHTML_PY}) - message(FATAL_ERROR "NO MKHTML_PY FOUND") - endif() - - if(G_ADDONS) - set(_pythonpath - "PYTHONPATH=${OUTDIR}/${GRASSAddon_ETCDIR}/${G_NAME}:$ENV{PYTHONPATH}") - - if(NOT G_NO_DOCS) - set(_tmp_html_file ${CMAKE_CURRENT_BINARY_DIR}/${G_NAME}.tmp.html) - set(_out_html_file ${OUTDIR}/${GRASSAddon_DocDIR}/${G_NAME}.html) - add_custom_command( - OUTPUT ${_out_html_file} - COMMAND - ${_pythonpath} ${CMAKE_COMMAND} -E copy ${_src_dir}/${G_NAME}.html - ${CMAKE_CURRENT_BINARY_DIR}/${G_NAME}.html - COMMAND ${_pythonpath} MODULE_TOPDIR=$ENV{GISBASE} ${PYTHON_EXECUTABLE} - ${MKHTML_PY} ${G_NAME} > ${_out_html_file} - COMMAND ${CMAKE_COMMAND} -E remove ${_tmp_html_file} - ${CMAKE_CURRENT_BINARY_DIR}/${G_NAME}.html - COMMENT - "Creating ${OUT_HTML_FILE} ${OUTDIR}/${GRASSAddon_ETCDIR}/${G_NAME} ${CMAKE_COMMAND}" - ) - - add_custom_target(${G_NAME}-docs ALL DEPENDS ${_out_html_file}) - - install(FILES ${_out_html_file} DESTINATION ${GRASSAddon_DocDIR}) - endif() - foreach(addon IN ITEMS ${G_ADDONS}) - add_subdirectory(${addon}) - endforeach() - return() - endif() - - set(_py_files ${G_SOURCES}) - list(FILTER _py_files INCLUDE REGEX ".*\.py$") - list(LENGTH _py_files _n_py_files) - if(_n_py_files) - set(_is_script ON) - else() - set(_is_script OFF) - endif() - unset(_py_files) - unset(_n_py_files) - - if(_is_script) - set(install_dest ${GRASSAddon_ScriptDIR}) - set(PYTHON_EXECUTABLE $ENV{PYTHON_EXECUTABLE}) - _build_addon( - NAME - ${G_NAME} - ${ARGN} - SRC_DIR - ${_src_dir} - IS_SCRIPT - PYTHONPATH - ${_pythonpath}) - else() - _set_thirdparty_include_paths() - set(install_dest "${GRASSAddon_BinDIR}") - _build_addon(NAME ${G_NAME} ${ARGN} SRC_DIR ${_src_dir}) - endif() -endfunction() - -function(_build_addon) - cmake_parse_arguments(G "NO_DOCS;IS_SCRIPT" "NAME;SRC_DIR;PYTHONPATH" - "SOURCES;DEPENDS;OPTIONAL_DEPENDS;GRASSLIBS;DOCFILES" ${ARGN}) - - find_package(GRASS REQUIRED) - - if(G_IS_SCRIPT) - set(SRC_SCRIPT_FILE ${G_NAME}.py) - set(_execute ${PYTHON_EXECUTABLE}) - list(FIND G_SOURCES "${SRC_SCRIPT_FILE}" has_script_file) - if(has_script_file LESS "0" OR NOT EXISTS ${G_SRC_DIR}/${SRC_SCRIPT_FILE}) - message(FATAL_ERROR "${SRC_SCRIPT_FILE} does not exists") - endif() - - list(TRANSFORM G_SOURCES PREPEND "${G_SRC_DIR}/") - - set(SCRIPT_EXT "") - if(WIN32) - set(SCRIPT_EXT ".py") + cmake_parse_arguments( + PARSE_ARGV 1 + G + "NO_DOCS;IS_SCRIPT" + "SRC_DIR;PYTHONPATH" + "SOURCES;ADDONS;DEPENDS;DOCFILES;GRASSLIBS" + ) + set(_src_dir ${CMAKE_CURRENT_SOURCE_DIR}) + set(G_NAME ${name}) + find_package(GRASS REQUIRED) + + set(MKHTML_PY ${GRASS_UTILS_DIR}/mkhtml.py) + if(NOT EXISTS ${MKHTML_PY}) + message(FATAL_ERROR "NO MKHTML_PY FOUND") endif() - configure_file( - ${G_SRC_DIR}/${G_NAME}.py - ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_NAME}${SCRIPT_EXT} COPYONLY) - file( - COPY ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_NAME}${SCRIPT_EXT} - DESTINATION ${OUTDIR}/${GRASSAddon_ScriptDIR} - FILE_PERMISSIONS - OWNER_READ - OWNER_WRITE - OWNER_EXECUTE - GROUP_READ - GROUP_EXECUTE - WORLD_READ - WORLD_EXECUTE) - - add_custom_target(${G_NAME} ALL) - target_sources(${G_NAME} PRIVATE ${G_SRC_DIR}/${G_NAME}.py) - - if(WIN32) - install(PROGRAMS ${OUTDIR}/${GRASSAddon_ScriptDIR}/${G_NAME}.bat - DESTINATION ${GRASSAddon_ScriptDIR}) + if(G_ADDONS) + set(_pythonpath + "PYTHONPATH=${OUTDIR}/${GRASSAddon_ETCDIR}/${G_NAME}:$ENV{PYTHONPATH}" + ) + + if(NOT G_NO_DOCS) + set(_tmp_html_file ${CMAKE_CURRENT_BINARY_DIR}/${G_NAME}.tmp.html) + set(_out_html_file ${OUTDIR}/${GRASSAddon_DocDIR}/${G_NAME}.html) + add_custom_command( + OUTPUT ${_out_html_file} + COMMAND + ${_pythonpath} ${CMAKE_COMMAND} -E copy + ${_src_dir}/${G_NAME}.html + ${CMAKE_CURRENT_BINARY_DIR}/${G_NAME}.html + COMMAND + ${_pythonpath} MODULE_TOPDIR=$ENV{GISBASE} + ${PYTHON_EXECUTABLE} ${MKHTML_PY} ${G_NAME} > + ${_out_html_file} + COMMAND + ${CMAKE_COMMAND} -E remove ${_tmp_html_file} + ${CMAKE_CURRENT_BINARY_DIR}/${G_NAME}.html + COMMENT + "Creating ${OUT_HTML_FILE} ${OUTDIR}/${GRASSAddon_ETCDIR}/${G_NAME} ${CMAKE_COMMAND}" + ) + + add_custom_target(${G_NAME}-docs ALL DEPENDS ${_out_html_file}) + + install(FILES ${_out_html_file} DESTINATION ${GRASSAddon_DocDIR}) + endif() + foreach(addon IN ITEMS ${G_ADDONS}) + add_subdirectory(${addon}) + endforeach() + return() endif() - install(PROGRAMS ${OUTDIR}/${GRASSAddon_ScriptDIR}/${G_NAME}${SCRIPT_EXT} - DESTINATION ${GRASSAddon_ScriptDIR}) - - else() - find_package(GRASS REQUIRED COMPONENTS ${G_GRASSLIBS}) - - set(CMAKE_INSTALL_RPATH $ENV{GISBASE}/lib) - - list(TRANSFORM G_GRASSLIBS PREPEND "GRASS::") - - set(G_RUNTIME_OUTPUT_DIR "${OUTDIR}/${GRASSAddon_BinDIR}") - if(MSVC) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY $<1:${G_RUNTIME_OUTPUT_DIR}>) - elseif(NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${G_RUNTIME_OUTPUT_DIR}) + set(_py_files ${G_SOURCES}) + list(FILTER _py_files INCLUDE REGEX ".*\.py$") + list(LENGTH _py_files _n_py_files) + if(_n_py_files) + set(_is_script ON) + else() + set(_is_script OFF) endif() - - add_compile_definitions(PACKAGE="grassmods") - - add_executable(${G_NAME} ${G_SOURCES}) - add_dependencies(${G_NAME} ${G_GRASSLIBS} ${G_DEPENDS}) - - foreach(G_DEPEND ${G_DEPENDS}) - if(NOT TARGET ${G_DEPEND}) - message(FATAL_ERROR "${G_DEPEND} not a target") - endif() - add_dependencies(${G_NAME} ${G_DEPEND}) - endforeach() - - set(opt_depends) - foreach(optional_dep ${G_OPTIONAL_DEPENDS}) - if(TARGET ${optional_dep}) - add_dependencies(${G_NAME} ${optional_dep}) - list(APPEND opt_depends ${optional_dep}) - else() - message(WARNING "${optional_dep} not a target") - endif() - endforeach() - - target_link_libraries(${G_NAME} ${G_GRASSLIBS} ${G_DEPENDS} ${opt_depends}) - - install(TARGETS ${G_NAME} DESTINATION ${install_dest}) - endif() - - if(NOT G_NO_DOCS) - list(TRANSFORM G_DOCFILES PREPEND "${G_SRC_DIR}/") - - set(html_doc ${G_DOCFILES}) - set(md_doc ${G_DOCFILES}) - set(img_files ${G_DOCFILES}) - - list(FILTER html_doc INCLUDE REGEX "${G_NAME}.html$") - list(FILTER md_doc INCLUDE REGEX "${G_NAME}.md$") - list(FILTER img_files INCLUDE REGEX ".*\.(jpg|png)$") - - if(img_files) - set(copy_images_command ${CMAKE_COMMAND} -E copy ${img_files} - ${OUTDIR}/${GRASSAddon_DocDIR}) - install(FILES ${img_files} DESTINATION ${GRASSAddon_DocDIR}) + unset(_py_files) + unset(_n_py_files) + + if(_is_script) + set(install_dest ${GRASSAddon_ScriptDIR}) + set(PYTHON_EXECUTABLE $ENV{PYTHON_EXECUTABLE}) + _build_addon( + NAME + ${G_NAME} + ${ARGN} + SRC_DIR + ${_src_dir} + IS_SCRIPT + PYTHONPATH + ${_pythonpath} + ) + else() + _set_thirdparty_include_paths() + set(install_dest "${GRASSAddon_BinDIR}") + _build_addon(NAME ${G_NAME} ${ARGN} SRC_DIR ${_src_dir}) endif() +endfunction() - set(_tmp_html_file ${CMAKE_CURRENT_BINARY_DIR}/${G_NAME}.tmp.html) - set(_out_html_file ${OUTDIR}/${GRASSAddon_DocDIR}/${G_NAME}.html) +function(_build_addon) + cmake_parse_arguments( + G + "NO_DOCS;IS_SCRIPT" + "NAME;SRC_DIR;PYTHONPATH" + "SOURCES;DEPENDS;OPTIONAL_DEPENDS;GRASSLIBS;DOCFILES" + ${ARGN} + ) + + find_package(GRASS REQUIRED) + + if(G_IS_SCRIPT) + set(SRC_SCRIPT_FILE ${G_NAME}.py) + set(_execute ${PYTHON_EXECUTABLE}) + list(FIND G_SOURCES "${SRC_SCRIPT_FILE}" has_script_file) + if( + has_script_file LESS "0" + OR NOT EXISTS ${G_SRC_DIR}/${SRC_SCRIPT_FILE} + ) + message(FATAL_ERROR "${SRC_SCRIPT_FILE} does not exists") + endif() + + list(TRANSFORM G_SOURCES PREPEND "${G_SRC_DIR}/") + + set(SCRIPT_EXT "") + if(WIN32) + set(SCRIPT_EXT ".py") + endif() + + configure_file( + ${G_SRC_DIR}/${G_NAME}.py + ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_NAME}${SCRIPT_EXT} + COPYONLY + ) + file( + COPY ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_NAME}${SCRIPT_EXT} + DESTINATION ${OUTDIR}/${GRASSAddon_ScriptDIR} + FILE_PERMISSIONS + OWNER_READ + OWNER_WRITE + OWNER_EXECUTE + GROUP_READ + GROUP_EXECUTE + WORLD_READ + WORLD_EXECUTE + ) + + add_custom_target(${G_NAME} ALL) + target_sources(${G_NAME} PRIVATE ${G_SRC_DIR}/${G_NAME}.py) + + if(WIN32) + install( + PROGRAMS ${OUTDIR}/${GRASSAddon_ScriptDIR}/${G_NAME}.bat + DESTINATION ${GRASSAddon_ScriptDIR} + ) + endif() + + install( + PROGRAMS ${OUTDIR}/${GRASSAddon_ScriptDIR}/${G_NAME}${SCRIPT_EXT} + DESTINATION ${GRASSAddon_ScriptDIR} + ) - if(EXISTS ${html_doc}) - install(FILES ${_out_html_file} DESTINATION ${GRASSAddon_DocDIR}) else() - message( - FATAL_ERROR - "${html_doc} does not exists. ${G_SRC_DIR} \n ${OUTDIR}/${GRASSAddon_DocDIR}| ${G_NAME}" - ) + find_package(GRASS REQUIRED COMPONENTS ${G_GRASSLIBS}) + + set(CMAKE_INSTALL_RPATH $ENV{GISBASE}/lib) + + list(TRANSFORM G_GRASSLIBS PREPEND "GRASS::") + + set(G_RUNTIME_OUTPUT_DIR "${OUTDIR}/${GRASSAddon_BinDIR}") + if(MSVC) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY $<1:${G_RUNTIME_OUTPUT_DIR}>) + elseif(NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${G_RUNTIME_OUTPUT_DIR}) + endif() + + add_compile_definitions(PACKAGE="grassmods") + + add_executable(${G_NAME} ${G_SOURCES}) + add_dependencies(${G_NAME} ${G_GRASSLIBS} ${G_DEPENDS}) + + foreach(G_DEPEND ${G_DEPENDS}) + if(NOT TARGET ${G_DEPEND}) + message(FATAL_ERROR "${G_DEPEND} not a target") + endif() + add_dependencies(${G_NAME} ${G_DEPEND}) + endforeach() + + set(opt_depends) + foreach(optional_dep ${G_OPTIONAL_DEPENDS}) + if(TARGET ${optional_dep}) + add_dependencies(${G_NAME} ${optional_dep}) + list(APPEND opt_depends ${optional_dep}) + else() + message(WARNING "${optional_dep} not a target") + endif() + endforeach() + + target_link_libraries( + ${G_NAME} + ${G_GRASSLIBS} + ${G_DEPENDS} + ${opt_depends} + ) + + install(TARGETS ${G_NAME} DESTINATION ${install_dest}) endif() - add_custom_command( - OUTPUT ${_out_html_file} - COMMAND ${CMAKE_COMMAND} -E copy ${G_SRC_DIR}/${G_NAME}.html - ${CMAKE_CURRENT_BINARY_DIR}/${G_NAME}.html - COMMAND - ${G_PYTHONPATH} GISBASE=$ENV{GISBASE} GISRC=$ENV{GISRC} - VERSION_NUMBER=${GRASS_VERSION_STRING} - VERSION_DATE=${GRASS_VERSION_DATE} - ${_execute} ${OUTDIR}/${install_dest}/${G_NAME}${SCRIPT_EXT} - --html-description < ${null_device} | ${search_command} - ${html_search_str} > ${_tmp_html_file} - COMMAND MODULE_TOPDIR=$ENV{GISBASE} SOURCE_URL=${SOURCE_URL} - VERSION_NUMBER=${GRASS_VERSION_STRING} ${PYTHON_EXECUTABLE} - ${MKHTML_PY} ${G_NAME} > ${_out_html_file} - COMMAND ${copy_images_command} - COMMAND ${CMAKE_COMMAND} -E remove ${_tmp_html_file} - ${CMAKE_CURRENT_BINARY_DIR}/${G_NAME}.html - COMMENT "Creating ${OUT_HTML_FILE}") - - add_custom_target(${G_NAME}-docs ALL DEPENDS ${G_NAME} ${_out_html_file}) - target_sources(${G_NAME}-docs PRIVATE ${html_doc} ${md_doc} ${img_files}) - - install(FILES ${_out_html_file} DESTINATION ${GRASSAddon_DocDIR}) - endif() + if(NOT G_NO_DOCS) + list(TRANSFORM G_DOCFILES PREPEND "${G_SRC_DIR}/") + + set(html_doc ${G_DOCFILES}) + set(md_doc ${G_DOCFILES}) + set(img_files ${G_DOCFILES}) + + list(FILTER html_doc INCLUDE REGEX "${G_NAME}.html$") + list(FILTER md_doc INCLUDE REGEX "${G_NAME}.md$") + list(FILTER img_files INCLUDE REGEX ".*\.(jpg|png)$") + + if(img_files) + set(copy_images_command + ${CMAKE_COMMAND} + -E + copy + ${img_files} + ${OUTDIR}/${GRASSAddon_DocDIR} + ) + install(FILES ${img_files} DESTINATION ${GRASSAddon_DocDIR}) + endif() + + set(_tmp_html_file ${CMAKE_CURRENT_BINARY_DIR}/${G_NAME}.tmp.html) + set(_out_html_file ${OUTDIR}/${GRASSAddon_DocDIR}/${G_NAME}.html) + + if(EXISTS ${html_doc}) + install(FILES ${_out_html_file} DESTINATION ${GRASSAddon_DocDIR}) + else() + message( + FATAL_ERROR + "${html_doc} does not exists. ${G_SRC_DIR} \n ${OUTDIR}/${GRASSAddon_DocDIR}| ${G_NAME}" + ) + endif() + + add_custom_command( + OUTPUT ${_out_html_file} + COMMAND + ${CMAKE_COMMAND} -E copy ${G_SRC_DIR}/${G_NAME}.html + ${CMAKE_CURRENT_BINARY_DIR}/${G_NAME}.html + COMMAND + ${G_PYTHONPATH} GISBASE=$ENV{GISBASE} GISRC=$ENV{GISRC} + VERSION_NUMBER=${GRASS_VERSION_STRING} + VERSION_DATE=${GRASS_VERSION_DATE} ${_execute} + ${OUTDIR}/${install_dest}/${G_NAME}${SCRIPT_EXT} + --html-description < ${null_device} | ${search_command} + ${html_search_str} > ${_tmp_html_file} + COMMAND + MODULE_TOPDIR=$ENV{GISBASE} SOURCE_URL=${SOURCE_URL} + VERSION_NUMBER=${GRASS_VERSION_STRING} ${PYTHON_EXECUTABLE} + ${MKHTML_PY} ${G_NAME} > ${_out_html_file} + COMMAND ${copy_images_command} + COMMAND + ${CMAKE_COMMAND} -E remove ${_tmp_html_file} + ${CMAKE_CURRENT_BINARY_DIR}/${G_NAME}.html + COMMENT "Creating ${OUT_HTML_FILE}" + ) + + add_custom_target( + ${G_NAME}-docs + ALL + DEPENDS ${G_NAME} ${_out_html_file} + ) + target_sources( + ${G_NAME}-docs + PRIVATE ${html_doc} ${md_doc} ${img_files} + ) + + install(FILES ${_out_html_file} DESTINATION ${GRASSAddon_DocDIR}) + endif() endfunction() # Set Third-party API include paths exposed by GRASS API macro(_set_thirdparty_include_paths) - if(NOT TARGET GDAL::GDAL) - find_package(GDAL) - if(NOT GDAL_FOUND) - add_library(GDAL::GDAL INTERFACE) - set_target_properties(GDAL::GDAL PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES ${GRASS_GDAL_INCLUDE_DIR}) + if(NOT TARGET GDAL::GDAL) + find_package(GDAL) + if(NOT GDAL_FOUND) + add_library(GDAL::GDAL INTERFACE) + set_target_properties( + GDAL::GDAL + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES ${GRASS_GDAL_INCLUDE_DIR} + ) + endif() endif() - endif() - if(NOT TARGET PROJ::proj) - find_package(PROJ QUIET) - if(NOT PROJ_FOUND) - add_library(PROJ::proj INTERFACE) - set_target_properties(PROJ::proj PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES ${GRASS_PROJ_INCLUDE_DIRS}) + if(NOT TARGET PROJ::proj) + find_package(PROJ QUIET) + if(NOT PROJ_FOUND) + add_library(PROJ::proj INTERFACE) + set_target_properties( + PROJ::proj + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES ${GRASS_PROJ_INCLUDE_DIRS} + ) + endif() endif() - endif() - if(NOT TARGET ZLIB::ZLIB) - find_package(ZLIB) - if(NOT ZLIB_FOUND) - add_library(ZLIB::ZLIB INTERFACE) - set_target_properties(ZLIB::ZLIB PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES ${GRASS_ZLIB_INCLUDE_DIR}) + if(NOT TARGET ZLIB::ZLIB) + find_package(ZLIB) + if(NOT ZLIB_FOUND) + add_library(ZLIB::ZLIB INTERFACE) + set_target_properties( + ZLIB::ZLIB + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES ${GRASS_ZLIB_INCLUDE_DIR} + ) + endif() endif() - endif() - if(GRASS_WITH_POSTGRES) - if(NOT TARGET PostgreSQL::PostgreSQL) - if(NOT PostgreSQL_ADDITIONAL_VERSIONS) - set(PostgreSQL_ADDITIONAL_VERSIONS "18" "17" "16" "15" "14" "13") - endif() - find_package(PostgreSQL) - if(NOT PostgreSQL_FOUND) - add_library(PostgreSQL::PostgreSQL INTERFACE) - set_target_properties(PostgreSQL::PostgreSQL PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES ${GRASS_PostgreSQL_INCLUDE_DIR}) - endif() + if(GRASS_WITH_POSTGRES) + if(NOT TARGET PostgreSQL::PostgreSQL) + if(NOT PostgreSQL_ADDITIONAL_VERSIONS) + set(PostgreSQL_ADDITIONAL_VERSIONS + "18" + "17" + "16" + "15" + "14" + "13" + ) + endif() + find_package(PostgreSQL) + if(NOT PostgreSQL_FOUND) + add_library(PostgreSQL::PostgreSQL INTERFACE) + set_target_properties( + PostgreSQL::PostgreSQL + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES + ${GRASS_PostgreSQL_INCLUDE_DIR} + ) + endif() + endif() endif() - endif() endmacro() macro(find_OpenMP) - if(MSVC AND CMAKE_VERSION VERSION_GREATER_EQUAL "3.30") - set(OpenMP_RUNTIME_MSVC "llvm") - endif() - find_package(OpenMP) - if(OpenMP_FOUND AND MSVC AND CMAKE_VERSION VERSION_LESS "3.30") - add_compile_options(-openmp:llvm) - endif() + if(MSVC AND CMAKE_VERSION VERSION_GREATER_EQUAL "3.30") + set(OpenMP_RUNTIME_MSVC "llvm") + endif() + find_package(OpenMP) + if(OpenMP_FOUND AND MSVC AND CMAKE_VERSION VERSION_LESS "3.30") + add_compile_options(-openmp:llvm) + endif() endmacro() macro(find_M) - if(UNIX AND NOT TARGET LIBM) - find_library(MATH_LIBRARY m) - add_library(LIBM INTERFACE IMPORTED GLOBAL) - if(MATH_LIBRARY) - set_property(TARGET LIBM PROPERTY INTERFACE_LINK_LIBRARIES ${MATH_LIBRARY}) - else() - # Fallback: allow the linker to resolve -lm by name. - set_property(TARGET LIBM PROPERTY INTERFACE_LINK_LIBRARIES m) + if(UNIX AND NOT TARGET LIBM) + find_library(MATH_LIBRARY m) + add_library(LIBM INTERFACE IMPORTED GLOBAL) + if(MATH_LIBRARY) + set_property( + TARGET LIBM + PROPERTY INTERFACE_LINK_LIBRARIES ${MATH_LIBRARY} + ) + else() + # Fallback: allow the linker to resolve -lm by name. + set_property(TARGET LIBM PROPERTY INTERFACE_LINK_LIBRARIES m) + endif() endif() - endif() endmacro() diff --git a/cmake/modules/build_gui_in_subdir.cmake b/cmake/modules/build_gui_in_subdir.cmake index 40ffc971c53..5bbdfe8d127 100644 --- a/cmake/modules/build_gui_in_subdir.cmake +++ b/cmake/modules/build_gui_in_subdir.cmake @@ -7,111 +7,139 @@ SPDX-License-Identifier: GPL-2.0-or-later #]] function(build_gui_in_subdir dir_name) - set(G_NAME ${dir_name}) - set(G_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${G_NAME}) - set(G_TARGET_NAME g.gui.${G_NAME}) - - set(HTML_FILE_NAME ${G_TARGET_NAME}) - - file(GLOB PYTHON_FILES "${G_SRC_DIR}/*.py") - if(NOT PYTHON_FILES) - message(FATAL_ERROR "[${G_TARGET_NAME}]: No PYTHON_FILES found.") - endif() - - set(SRC_SCRIPT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/${G_NAME}/${G_TARGET_NAME}.py) - - if(NOT EXISTS ${SRC_SCRIPT_FILE}) - message(FATAL_ERROR "${SRC_SCRIPT_FILE} does not exists") - endif() - - set(SCRIPT_EXT "") - if(WIN32) - set(SCRIPT_EXT ".py") - set(PGM_NAME ${G_TARGET_NAME}) - configure_file(${CMAKE_SOURCE_DIR}/cmake/windows_launch.bat.in - ${OUTDIR}/${GRASS_INSTALL_SCRIPTDIR}/${G_TARGET_NAME}.bat @ONLY) - endif() - set(GUI_STAMP_FILE ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_NAME}.stamp) - - add_custom_command( - OUTPUT ${GUI_STAMP_FILE} - COMMAND ${CMAKE_COMMAND} -E make_directory - "${OUTDIR}/${GRASS_INSTALL_GUIDIR}/wxpython/${G_NAME}" - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PYTHON_FILES} - "${OUTDIR}/${GRASS_INSTALL_GUIDIR}/wxpython/${G_NAME}" - COMMAND ${CMAKE_COMMAND} -E touch ${GUI_STAMP_FILE}) + set(G_NAME ${dir_name}) + set(G_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${G_NAME}) + set(G_TARGET_NAME g.gui.${G_NAME}) - set(OUT_SCRIPT_FILE - "${OUTDIR}/${GRASS_INSTALL_SCRIPTDIR}/${G_TARGET_NAME}${SCRIPT_EXT}") + set(HTML_FILE_NAME ${G_TARGET_NAME}) - if(UNIX) - add_custom_command( - OUTPUT ${OUT_SCRIPT_FILE} - COMMAND ${CMAKE_COMMAND} -E copy ${SRC_SCRIPT_FILE} ${OUT_SCRIPT_FILE} - COMMAND /bin/chmod 755 ${OUT_SCRIPT_FILE} - DEPENDS g.parser ${SRC_SCRIPT_FILE}) - else() - add_custom_command( - OUTPUT ${OUT_SCRIPT_FILE} - COMMAND ${CMAKE_COMMAND} -E copy ${SRC_SCRIPT_FILE} ${OUT_SCRIPT_FILE} - DEPENDS g.parser ${SRC_SCRIPT_FILE}) - endif() - - if(WITH_DOCS) - - file(GLOB IMG_FILES ${G_SRC_DIR}/*.png ${G_SRC_DIR}/*.jpg) - if(IMG_FILES) - set(copy_images_command ${CMAKE_COMMAND} -E copy ${IMG_FILES} - "${OUTDIR}/${GRASS_INSTALL_DOCDIR}") - install(FILES ${IMG_FILES} DESTINATION ${GRASS_INSTALL_DOCDIR}) + file(GLOB PYTHON_FILES "${G_SRC_DIR}/*.py") + if(NOT PYTHON_FILES) + message(FATAL_ERROR "[${G_TARGET_NAME}]: No PYTHON_FILES found.") endif() - set(HTML_FILE ${G_SRC_DIR}/${G_TARGET_NAME}.html) - if(EXISTS ${HTML_FILE}) - install(FILES ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/${G_TARGET_NAME}.html - DESTINATION ${GRASS_INSTALL_DOCDIR}) - else() - set(HTML_FILE) - file(GLOB html_files ${G_SRC_DIR}/*.html) - if(html_files) - message( - FATAL_ERROR - "${html_file} does not exists. ${G_SRC_DIR} \n ${RUNTIME_GISBASE}/scripts| ${G_TARGET_NAME}" - ) - endif() + set(SRC_SCRIPT_FILE + ${CMAKE_CURRENT_SOURCE_DIR}/${G_NAME}/${G_TARGET_NAME}.py + ) + + if(NOT EXISTS ${SRC_SCRIPT_FILE}) + message(FATAL_ERROR "${SRC_SCRIPT_FILE} does not exists") endif() - set(out_html_file ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/${G_TARGET_NAME}.html) + set(SCRIPT_EXT "") + if(WIN32) + set(SCRIPT_EXT ".py") + set(PGM_NAME ${G_TARGET_NAME}) + configure_file( + ${CMAKE_SOURCE_DIR}/cmake/windows_launch.bat.in + ${OUTDIR}/${GRASS_INSTALL_SCRIPTDIR}/${G_TARGET_NAME}.bat + @ONLY + ) + endif() + set(GUI_STAMP_FILE ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_NAME}.stamp) - generate_docs(${G_NAME} - OUTPUT ${out_html_file} - GUI_TARGET_NAME ${G_TARGET_NAME} - SOURCEDIR ${G_SRC_DIR} - DEPENDS ${OUT_SCRIPT_FILE} GUI_WXPYTHON LIB_PYTHON) + add_custom_command( + OUTPUT ${GUI_STAMP_FILE} + COMMAND + ${CMAKE_COMMAND} -E make_directory + "${OUTDIR}/${GRASS_INSTALL_GUIDIR}/wxpython/${G_NAME}" + COMMAND + ${CMAKE_COMMAND} -E copy_if_different ${PYTHON_FILES} + "${OUTDIR}/${GRASS_INSTALL_GUIDIR}/wxpython/${G_NAME}" + COMMAND ${CMAKE_COMMAND} -E touch ${GUI_STAMP_FILE} + ) + + set(OUT_SCRIPT_FILE + "${OUTDIR}/${GRASS_INSTALL_SCRIPTDIR}/${G_TARGET_NAME}${SCRIPT_EXT}" + ) + + if(UNIX) + add_custom_command( + OUTPUT ${OUT_SCRIPT_FILE} + COMMAND + ${CMAKE_COMMAND} -E copy ${SRC_SCRIPT_FILE} ${OUT_SCRIPT_FILE} + COMMAND /bin/chmod 755 ${OUT_SCRIPT_FILE} + DEPENDS g.parser ${SRC_SCRIPT_FILE} + ) + else() + add_custom_command( + OUTPUT ${OUT_SCRIPT_FILE} + COMMAND + ${CMAKE_COMMAND} -E copy ${SRC_SCRIPT_FILE} ${OUT_SCRIPT_FILE} + DEPENDS g.parser ${SRC_SCRIPT_FILE} + ) + endif() - endif() # WITH_DOCS + if(WITH_DOCS) + file(GLOB IMG_FILES ${G_SRC_DIR}/*.png ${G_SRC_DIR}/*.jpg) + if(IMG_FILES) + set(copy_images_command + ${CMAKE_COMMAND} + -E + copy + ${IMG_FILES} + "${OUTDIR}/${GRASS_INSTALL_DOCDIR}" + ) + install(FILES ${IMG_FILES} DESTINATION ${GRASS_INSTALL_DOCDIR}) + endif() + + set(HTML_FILE ${G_SRC_DIR}/${G_TARGET_NAME}.html) + if(EXISTS ${HTML_FILE}) + install( + FILES ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/${G_TARGET_NAME}.html + DESTINATION ${GRASS_INSTALL_DOCDIR} + ) + else() + set(HTML_FILE) + file(GLOB html_files ${G_SRC_DIR}/*.html) + if(html_files) + message( + FATAL_ERROR + "${html_file} does not exists. ${G_SRC_DIR} \n ${RUNTIME_GISBASE}/scripts| ${G_TARGET_NAME}" + ) + endif() + endif() + + set(out_html_file + ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/${G_TARGET_NAME}.html + ) - add_custom_target( - ${G_TARGET_NAME} DEPENDS ${GUI_STAMP_FILE} ${OUT_SCRIPT_FILE} - ${out_html_file}) + generate_docs(${G_NAME} + OUTPUT ${out_html_file} + GUI_TARGET_NAME ${G_TARGET_NAME} + SOURCEDIR ${G_SRC_DIR} + DEPENDS ${OUT_SCRIPT_FILE} GUI_WXPYTHON LIB_PYTHON + ) + endif() # WITH_DOCS - set(modules_list - "${G_TARGET_NAME};${modules_list}" - CACHE INTERNAL "list of modules") + add_custom_target( + ${G_TARGET_NAME} + DEPENDS ${GUI_STAMP_FILE} ${OUT_SCRIPT_FILE} ${out_html_file} + ) - set_target_properties(${G_TARGET_NAME} PROPERTIES FOLDER "Tools/GUI") + set(modules_list + "${G_TARGET_NAME};${modules_list}" + CACHE INTERNAL + "list of modules" + ) - if(WIN32) - install(PROGRAMS ${OUTDIR}/${GRASS_INSTALL_SCRIPTDIR}/${G_TARGET_NAME}.bat - DESTINATION ${GRASS_INSTALL_SCRIPTDIR}) - endif() + set_target_properties(${G_TARGET_NAME} PROPERTIES FOLDER "Tools/GUI") - install( - DIRECTORY "${OUTDIR}/${GRASS_INSTALL_GUIDIR}/wxpython/${G_NAME}" - DESTINATION "${GRASS_INSTALL_GUIDIR}/wxpython") + if(WIN32) + install( + PROGRAMS ${OUTDIR}/${GRASS_INSTALL_SCRIPTDIR}/${G_TARGET_NAME}.bat + DESTINATION ${GRASS_INSTALL_SCRIPTDIR} + ) + endif() - install( - PROGRAMS ${OUTDIR}/${GRASS_INSTALL_SCRIPTDIR}/${G_TARGET_NAME}${SCRIPT_EXT} - DESTINATION ${GRASS_INSTALL_SCRIPTDIR}) + install( + DIRECTORY "${OUTDIR}/${GRASS_INSTALL_GUIDIR}/wxpython/${G_NAME}" + DESTINATION "${GRASS_INSTALL_GUIDIR}/wxpython" + ) + install( + PROGRAMS + ${OUTDIR}/${GRASS_INSTALL_SCRIPTDIR}/${G_TARGET_NAME}${SCRIPT_EXT} + DESTINATION ${GRASS_INSTALL_SCRIPTDIR} + ) endfunction() diff --git a/cmake/modules/build_library_in_subdir.cmake b/cmake/modules/build_library_in_subdir.cmake index 4ac3869efe0..6e25af7948e 100644 --- a/cmake/modules/build_library_in_subdir.cmake +++ b/cmake/modules/build_library_in_subdir.cmake @@ -7,13 +7,14 @@ SPDX-License-Identifier: GPL-2.0-or-later #]] macro(build_library_in_subdir dir_name) - set(extra_args ${ARGN}) - if("NAME" IN_LIST extra_args) - build_module(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${dir_name} ${ARGN}) - else() - get_filename_component(g_name ${dir_name} NAME) - # message("dir_name=${dir_name} |g_name= ${g_name}") - build_module(NAME grass_${g_name} SRC_DIR - ${CMAKE_CURRENT_SOURCE_DIR}/${dir_name} ${ARGN}) - endif() + set(extra_args ${ARGN}) + if("NAME" IN_LIST extra_args) + build_module(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${dir_name} ${ARGN}) + else() + get_filename_component(g_name ${dir_name} NAME) + # message("dir_name=${dir_name} |g_name= ${g_name}") + build_module(NAME grass_${g_name} SRC_DIR + ${CMAKE_CURRENT_SOURCE_DIR}/${dir_name} ${ARGN} + ) + endif() endmacro() diff --git a/cmake/modules/build_module.cmake b/cmake/modules/build_module.cmake index d38228fc432..4213b11fb23 100644 --- a/cmake/modules/build_module.cmake +++ b/cmake/modules/build_module.cmake @@ -10,291 +10,325 @@ SPDX-License-Identifier: GPL-2.0-or-later include(GenerateExportHeader) function(build_module) - cmake_parse_arguments( - G - "EXE;NO_DOCS" - "NAME;SRC_DIR;SRC_REGEX;RUNTIME_OUTPUT_DIR;PACKAGE;HTML_FILE_NAME" - "SOURCES;INCLUDES;DEPENDS;OPTIONAL_DEPENDS;PRIMARY_DEPENDS;DEFS;HEADERS;TEST_SOURCES" - ${ARGN}) - - if(NOT G_NAME) - message(FATAL_ERROR "G_NAME empty") - endif() - - foreach(PRIMARY_DEPEND ${G_PRIMARY_DEPENDS}) - if(NOT TARGET ${PRIMARY_DEPEND}) - message( - STATUS "${G_NAME} disabled because ${PRIMARY_DEPEND} is not available") - return() - else() - list(APPEND G_DEPENDS ${PRIMARY_DEPEND}) + cmake_parse_arguments( + G + "EXE;NO_DOCS" + "NAME;SRC_DIR;SRC_REGEX;RUNTIME_OUTPUT_DIR;PACKAGE;HTML_FILE_NAME" + "SOURCES;INCLUDES;DEPENDS;OPTIONAL_DEPENDS;PRIMARY_DEPENDS;DEFS;HEADERS;TEST_SOURCES" + ${ARGN} + ) + + if(NOT G_NAME) + message(FATAL_ERROR "G_NAME empty") endif() - endforeach() - - if(NOT G_SRC_REGEX) - set(G_SRC_REGEX "*.[ch]") - endif() - if(NOT G_SRC_DIR) - set(G_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}) - endif() - set(html_file "${G_SRC_DIR}/${G_NAME}.html") + foreach(PRIMARY_DEPEND ${G_PRIMARY_DEPENDS}) + if(NOT TARGET ${PRIMARY_DEPEND}) + message( + STATUS + "${G_NAME} disabled because ${PRIMARY_DEPEND} is not available" + ) + return() + else() + list(APPEND G_DEPENDS ${PRIMARY_DEPEND}) + endif() + endforeach() - foreach(G_HEADER ${G_HEADERS}) - if(EXISTS "${G_SRC_DIR}/${G_HEADER}") - file(COPY ${G_SRC_DIR}/${G_HEADER} - DESTINATION "${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass") - else() - file( - GLOB header_list_from_glob - LIST_DIRECTORIES false - "${G_SRC_DIR}/${G_HEADER}") - if(NOT header_list_from_glob) - message( - FATAL_ERROR - "MUST copy '${G_SRC_DIR}/${G_HEADER}' to ${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass" - ) - endif() - foreach(header_I ${header_list_from_glob}) - file(COPY ${header_I} - DESTINATION "${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass") - endforeach() + if(NOT G_SRC_REGEX) + set(G_SRC_REGEX "*.[ch]") endif() - endforeach() - - if(NOT G_SOURCES) - file(GLOB ${G_NAME}_SRCS "${G_SRC_DIR}/${G_SRC_REGEX}") - else() - set(${G_NAME}_SRCS ${G_SOURCES}) - endif() - set(RUN_HTML_DESCR TRUE) - # Auto set if to run RUN_HTML_DESCR - if(G_EXE) - set(RUN_HTML_DESCR TRUE) - if(G_RUNTIME_OUTPUT_DIR) - set(RUN_HTML_DESCR FALSE) + if(NOT G_SRC_DIR) + set(G_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}) endif() - # g.parser and some others does not have --html-description. - if(${G_NAME} IN_LIST NO_HTML_DESCR_TARGETS) - set(RUN_HTML_DESCR FALSE) + set(html_file "${G_SRC_DIR}/${G_NAME}.html") + + foreach(G_HEADER ${G_HEADERS}) + if(EXISTS "${G_SRC_DIR}/${G_HEADER}") + file( + COPY ${G_SRC_DIR}/${G_HEADER} + DESTINATION "${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass" + ) + else() + file( + GLOB header_list_from_glob + LIST_DIRECTORIES false + "${G_SRC_DIR}/${G_HEADER}" + ) + if(NOT header_list_from_glob) + message( + FATAL_ERROR + "MUST copy '${G_SRC_DIR}/${G_HEADER}' to ${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass" + ) + endif() + foreach(header_I ${header_list_from_glob}) + file( + COPY ${header_I} + DESTINATION "${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass" + ) + endforeach() + endif() + endforeach() + + if(NOT G_SOURCES) + file(GLOB ${G_NAME}_SRCS "${G_SRC_DIR}/${G_SRC_REGEX}") + else() + set(${G_NAME}_SRCS ${G_SOURCES}) endif() - else() - set(RUN_HTML_DESCR FALSE) - endif() - set(install_dest "") - if(NOT G_RUNTIME_OUTPUT_DIR) + set(RUN_HTML_DESCR TRUE) + # Auto set if to run RUN_HTML_DESCR if(G_EXE) - set(G_RUNTIME_OUTPUT_DIR "${OUTDIR}/${GRASS_INSTALL_BINDIR}") - set(install_dest "${GRASS_INSTALL_BINDIR}") + set(RUN_HTML_DESCR TRUE) + if(G_RUNTIME_OUTPUT_DIR) + set(RUN_HTML_DESCR FALSE) + endif() + # g.parser and some others does not have --html-description. + if(${G_NAME} IN_LIST NO_HTML_DESCR_TARGETS) + set(RUN_HTML_DESCR FALSE) + endif() else() - set(G_RUNTIME_OUTPUT_DIR "${OUTDIR}/${GRASS_INSTALL_LIBDIR}") - set(install_dest "${GRASS_INSTALL_LIBDIR}") + set(RUN_HTML_DESCR FALSE) endif() - else() - set(install_dest "${G_RUNTIME_OUTPUT_DIR}") - set(G_RUNTIME_OUTPUT_DIR "${OUTDIR}/${install_dest}") - endif() - - if(MSVC) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY $<1:${G_RUNTIME_OUTPUT_DIR}>) - elseif(NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${G_RUNTIME_OUTPUT_DIR}) - endif() - - if(G_EXE) - add_executable(${G_NAME} ${${G_NAME}_SRCS}) - if("${G_NAME}" MATCHES "^v[\.]") - set_target_properties(${G_NAME} PROPERTIES FOLDER Tools/Vector) - elseif("${G_NAME}" MATCHES "^r[\.]") - set_target_properties(${G_NAME} PROPERTIES FOLDER Tools/Raster) - elseif("${G_NAME}" MATCHES "^d[\.]") - set_target_properties(${G_NAME} PROPERTIES FOLDER Tools/Display) - elseif("${G_NAME}" MATCHES "^db[\.]") - set_target_properties(${G_NAME} PROPERTIES FOLDER Tools/Database) - elseif("${G_NAME}" MATCHES "^g[\.]") - set_target_properties(${G_NAME} PROPERTIES FOLDER Tools/General) - elseif("${G_NAME}" MATCHES "^i[\.]") - set_target_properties(${G_NAME} PROPERTIES FOLDER Tools/Imagery) - elseif("${G_NAME}" MATCHES "^m[\.]") - set_target_properties(${G_NAME} PROPERTIES FOLDER Tools/Miscellaneous) - elseif("${G_NAME}" MATCHES "^ps[\.]") - set_target_properties(${G_NAME} PROPERTIES FOLDER Tools/PostScript) - elseif("${G_NAME}" MATCHES "^r3[\.]") - set_target_properties(${G_NAME} PROPERTIES FOLDER "Tools/Raster 3D") - elseif("${G_NAME}" MATCHES "^t[\.]") - set_target_properties(${G_NAME} PROPERTIES FOLDER Tools/Temporal) + + set(install_dest "") + if(NOT G_RUNTIME_OUTPUT_DIR) + if(G_EXE) + set(G_RUNTIME_OUTPUT_DIR "${OUTDIR}/${GRASS_INSTALL_BINDIR}") + set(install_dest "${GRASS_INSTALL_BINDIR}") + else() + set(G_RUNTIME_OUTPUT_DIR "${OUTDIR}/${GRASS_INSTALL_LIBDIR}") + set(install_dest "${GRASS_INSTALL_LIBDIR}") + endif() else() - set_target_properties(${G_NAME} PROPERTIES FOLDER Binaries) + set(install_dest "${G_RUNTIME_OUTPUT_DIR}") + set(G_RUNTIME_OUTPUT_DIR "${OUTDIR}/${install_dest}") endif() - set(default_html_file_name ${G_NAME}) - set(PGM_NAME ${G_NAME}) - if(WIN32) - set(PGM_NAME ${G_NAME}.exe) + + if(MSVC) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY $<1:${G_RUNTIME_OUTPUT_DIR}>) + elseif(NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${G_RUNTIME_OUTPUT_DIR}) endif() - set(modules_list - "${G_NAME};${modules_list}" - CACHE INTERNAL "list of modules") - - else() - string(REPLACE "grass_" "" _libname ${G_NAME}) - add_library(${G_NAME} ${${G_NAME}_SRCS}) - set_target_properties( - ${G_NAME} - PROPERTIES FOLDER "GRASS Libraries" - VERSION ${GRASS_VERSION_NUMBER} - SOVERSION ${GRASS_VERSION_MAJOR} - EXPORT_NAME ${_libname}) - - add_library(GRASS::${_libname} ALIAS ${G_NAME}) - - # TODO: check when and where the export header files are needed - set(export_file_name - "${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/export/${G_NAME}_export.h") - # Default is to use library target name without grass_ prefix - string(REPLACE "grass_" "" default_html_file_name ${G_NAME}) - set(PGM_NAME ${default_html_file_name}) - - generate_export_header(${G_NAME} STATIC_DEFINE "STATIC_BUILD" - EXPORT_FILE_NAME ${export_file_name}) - add_dependencies(${G_NAME} python_doc_utils) - endif() - - if(G_HTML_FILE_NAME) - set(HTML_FILE_NAME ${G_HTML_FILE_NAME}) - else() - set(HTML_FILE_NAME ${default_html_file_name}) - endif() - - get_property(MODULE_LIST GLOBAL PROPERTY MODULE_LIST) - set_property(GLOBAL PROPERTY MODULE_LIST "${MODULE_LIST};${G_NAME}") - - add_dependencies(${G_NAME} INCLUDE_HEADERS) - - foreach(G_OPTIONAL_DEPEND ${G_OPTIONAL_DEPENDS}) - if(TARGET ${G_OPTIONAL_DEPEND}) - add_dependencies(${G_NAME} ${G_OPTIONAL_DEPEND}) + if(G_EXE) + add_executable(${G_NAME} ${${G_NAME}_SRCS}) + if("${G_NAME}" MATCHES "^v[\.]") + set_target_properties(${G_NAME} PROPERTIES FOLDER Tools/Vector) + elseif("${G_NAME}" MATCHES "^r[\.]") + set_target_properties(${G_NAME} PROPERTIES FOLDER Tools/Raster) + elseif("${G_NAME}" MATCHES "^d[\.]") + set_target_properties(${G_NAME} PROPERTIES FOLDER Tools/Display) + elseif("${G_NAME}" MATCHES "^db[\.]") + set_target_properties(${G_NAME} PROPERTIES FOLDER Tools/Database) + elseif("${G_NAME}" MATCHES "^g[\.]") + set_target_properties(${G_NAME} PROPERTIES FOLDER Tools/General) + elseif("${G_NAME}" MATCHES "^i[\.]") + set_target_properties(${G_NAME} PROPERTIES FOLDER Tools/Imagery) + elseif("${G_NAME}" MATCHES "^m[\.]") + set_target_properties( + ${G_NAME} + PROPERTIES FOLDER Tools/Miscellaneous + ) + elseif("${G_NAME}" MATCHES "^ps[\.]") + set_target_properties(${G_NAME} PROPERTIES FOLDER Tools/PostScript) + elseif("${G_NAME}" MATCHES "^r3[\.]") + set_target_properties(${G_NAME} PROPERTIES FOLDER "Tools/Raster 3D") + elseif("${G_NAME}" MATCHES "^t[\.]") + set_target_properties(${G_NAME} PROPERTIES FOLDER Tools/Temporal) + else() + set_target_properties(${G_NAME} PROPERTIES FOLDER Binaries) + endif() + set(default_html_file_name ${G_NAME}) + set(PGM_NAME ${G_NAME}) + if(WIN32) + set(PGM_NAME ${G_NAME}.exe) + endif() + + set(modules_list + "${G_NAME};${modules_list}" + CACHE INTERNAL + "list of modules" + ) + + else() + string(REPLACE "grass_" "" _libname ${G_NAME}) + add_library(${G_NAME} ${${G_NAME}_SRCS}) + set_target_properties( + ${G_NAME} + PROPERTIES + FOLDER "GRASS Libraries" + VERSION ${GRASS_VERSION_NUMBER} + SOVERSION ${GRASS_VERSION_MAJOR} + EXPORT_NAME ${_libname} + ) + + add_library(GRASS::${_libname} ALIAS ${G_NAME}) + + # TODO: check when and where the export header files are needed + set(export_file_name + "${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/export/${G_NAME}_export.h" + ) + # Default is to use library target name without grass_ prefix + string(REPLACE "grass_" "" default_html_file_name ${G_NAME}) + set(PGM_NAME ${default_html_file_name}) + + generate_export_header( + ${G_NAME} + STATIC_DEFINE "STATIC_BUILD" + EXPORT_FILE_NAME ${export_file_name} + ) + add_dependencies(${G_NAME} python_doc_utils) endif() - endforeach() - foreach(G_DEPEND ${G_DEPENDS}) - if(NOT TARGET ${G_DEPEND}) - message(FATAL_ERROR "${G_DEPEND} not a target") - break() + + if(G_HTML_FILE_NAME) + set(HTML_FILE_NAME ${G_HTML_FILE_NAME}) + else() + set(HTML_FILE_NAME ${default_html_file_name}) endif() - add_dependencies(${G_NAME} ${G_DEPEND}) + get_property(MODULE_LIST GLOBAL PROPERTY MODULE_LIST) + set_property(GLOBAL PROPERTY MODULE_LIST "${MODULE_LIST};${G_NAME}") - set(${G_NAME}_INCLUDE_DIRS) - list(APPEND ${G_NAME}_INCLUDE_DIRS "${G_SRC_DIR}") - foreach(G_INCLUDE ${G_INCLUDES}) - list(APPEND ${G_NAME}_INCLUDE_DIRS "${G_INCLUDE}") - endforeach() + add_dependencies(${G_NAME} INCLUDE_HEADERS) - if(${G_NAME}_INCLUDE_DIRS) - list(REMOVE_DUPLICATES ${G_NAME}_INCLUDE_DIRS) - endif() - target_include_directories( - ${G_NAME} PUBLIC "$") - endforeach() + foreach(G_OPTIONAL_DEPEND ${G_OPTIONAL_DEPENDS}) + if(TARGET ${G_OPTIONAL_DEPEND}) + add_dependencies(${G_NAME} ${G_OPTIONAL_DEPEND}) + endif() + endforeach() + foreach(G_DEPEND ${G_DEPENDS}) + if(NOT TARGET ${G_DEPEND}) + message(FATAL_ERROR "${G_DEPEND} not a target") + break() + endif() + + add_dependencies(${G_NAME} ${G_DEPEND}) + + set(${G_NAME}_INCLUDE_DIRS) + list(APPEND ${G_NAME}_INCLUDE_DIRS "${G_SRC_DIR}") + foreach(G_INCLUDE ${G_INCLUDES}) + list(APPEND ${G_NAME}_INCLUDE_DIRS "${G_INCLUDE}") + endforeach() + + if(${G_NAME}_INCLUDE_DIRS) + list(REMOVE_DUPLICATES ${G_NAME}_INCLUDE_DIRS) + endif() + target_include_directories( + ${G_NAME} + PUBLIC "$" + ) + endforeach() - foreach(G_DEF ${G_DEFS}) - target_compile_definitions(${G_NAME} PUBLIC "${G_DEF}") - endforeach() + foreach(G_DEF ${G_DEFS}) + target_compile_definitions(${G_NAME} PUBLIC "${G_DEF}") + endforeach() - set(package_define) - if(NOT G_PACKAGE) - if(G_EXE) - set(package_define "grassmods") + set(package_define) + if(NOT G_PACKAGE) + if(G_EXE) + set(package_define "grassmods") + else() + set(package_define "grasslibs") + endif() else() - set(package_define "grasslibs") + if(NOT G_PACKAGE STREQUAL "NONE") + set(package_define ${G_PACKAGE}) + endif() endif() - else() - if(NOT G_PACKAGE STREQUAL "NONE") - set(package_define ${G_PACKAGE}) - endif() - endif() - - target_compile_definitions(${G_NAME} - PRIVATE "-DPACKAGE=\"${package_define}\"") - - foreach(dep ${G_DEPENDS} ${G_OPTIONAL_DEPENDS}) - if(TARGET ${dep}) - get_target_property(interface_def ${dep} INTERFACE_COMPILE_DEFINITIONS) - if(interface_def) - target_compile_definitions(${G_NAME} PRIVATE "${interface_def}") - endif() - target_link_libraries(${G_NAME} PRIVATE ${dep}) + + target_compile_definitions( + ${G_NAME} + PRIVATE "-DPACKAGE=\"${package_define}\"" + ) + + foreach(dep ${G_DEPENDS} ${G_OPTIONAL_DEPENDS}) + if(TARGET ${dep}) + get_target_property( + interface_def + ${dep} + INTERFACE_COMPILE_DEFINITIONS + ) + if(interface_def) + target_compile_definitions(${G_NAME} PRIVATE "${interface_def}") + endif() + target_link_libraries(${G_NAME} PRIVATE ${dep}) + endif() + endforeach() + + set(G_HTML_FILE_NAME "${HTML_FILE_NAME}.html") + set(html_file_search ${G_SRC_DIR}/${G_HTML_FILE_NAME}) + if(NOT G_NO_DOCS AND NOT EXISTS ${html_file_search}) + set(G_NO_DOCS YES) endif() - endforeach() - set(G_HTML_FILE_NAME "${HTML_FILE_NAME}.html") - set(html_file_search ${G_SRC_DIR}/${G_HTML_FILE_NAME}) - if(NOT G_NO_DOCS AND NOT EXISTS ${html_file_search}) - set(G_NO_DOCS YES) - endif() + if(WITH_DOCS AND NOT G_NO_DOCS) + set(html_file) + if(EXISTS ${html_file_search}) + set(html_file ${html_file_search}) + endif() - if(WITH_DOCS AND NOT G_NO_DOCS) + if(NOT html_file) + return() + endif() - set(html_file) - if(EXISTS ${html_file_search}) - set(html_file ${html_file_search}) - endif() + get_filename_component(HTML_FILE_NAME ${html_file} NAME) + get_filename_component(PGM_SOURCE_DIR ${html_file} PATH) - if(NOT html_file) - return() - endif() + string(REPLACE ".html" "" PGM_NAME "${HTML_FILE_NAME}") - get_filename_component(HTML_FILE_NAME ${html_file} NAME) - get_filename_component(PGM_SOURCE_DIR ${html_file} PATH) + if(RUN_HTML_DESCR) + set(HTML_DESCR "HTML_DESCR") + endif() - string(REPLACE ".html" "" PGM_NAME "${HTML_FILE_NAME}") + generate_docs(${PGM_NAME} + TARGET ${G_NAME} + SOURCEDIR ${PGM_SOURCE_DIR} + ${HTML_DESCR} + ) + endif() # WITH_DOCS + + foreach(test_SOURCE ${G_TEST_SOURCES}) + add_test( + NAME ${G_NAME}-test + COMMAND + ${grass_env_command} ${PYTHON_EXECUTABLE} + ${G_SRC_DIR}/testsuite/${test_SOURCE} + ) + message("[build_module] ADDING TEST ${G_NAME}-test") + endforeach() + + if(NOT G_EXE) + string(REPLACE "grass_" "" _libname ${G_NAME}) + install( + TARGETS ${G_NAME} + EXPORT ${_libname}Targets + LIBRARY DESTINATION ${GRASS_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${GRASS_INSTALL_LIBDIR} + RUNTIME DESTINATION ${GRASS_INSTALL_BINDIR} + INCLUDES DESTINATION ${GRASS_INSTALL_INCLUDEDIR} + ) - if(RUN_HTML_DESCR) - set(HTML_DESCR "HTML_DESCR") + install( + EXPORT ${_libname}Targets + FILE GRASS_${_libname}Targets.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GRASS + NAMESPACE GRASS:: + EXPORT_LINK_INTERFACE_LIBRARIES + ) + else() + install(TARGETS ${G_NAME} DESTINATION ${install_dest}) endif() - generate_docs(${PGM_NAME} - TARGET ${G_NAME} - SOURCEDIR ${PGM_SOURCE_DIR} - ${HTML_DESCR}) - - endif() # WITH_DOCS - - foreach(test_SOURCE ${G_TEST_SOURCES}) - add_test(NAME ${G_NAME}-test - COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} - ${G_SRC_DIR}/testsuite/${test_SOURCE}) - message("[build_module] ADDING TEST ${G_NAME}-test") - endforeach() - - if(NOT G_EXE) - string(REPLACE "grass_" "" _libname ${G_NAME}) - install( - TARGETS ${G_NAME} - EXPORT ${_libname}Targets - LIBRARY DESTINATION ${GRASS_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${GRASS_INSTALL_LIBDIR} - RUNTIME DESTINATION ${GRASS_INSTALL_BINDIR} - INCLUDES - DESTINATION ${GRASS_INSTALL_INCLUDEDIR}) - - install( - EXPORT ${_libname}Targets - FILE GRASS_${_libname}Targets.cmake - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GRASS - NAMESPACE GRASS:: - EXPORT_LINK_INTERFACE_LIBRARIES) - else() - install(TARGETS ${G_NAME} DESTINATION ${install_dest}) - endif() - - set(_headers ${G_HEADERS}) - list(TRANSFORM _headers PREPEND "${G_SRC_DIR}/") - file(GLOB _docs_files - LIST_DIRECTORIES FALSE - ${G_SRC_DIR}/*.html ${G_SRC_DIR}/*.md - ${G_SRC_DIR}/*.png ${G_SRC_DIR}/*.jpg) - target_sources(${G_NAME} PRIVATE ${_headers} ${_docs_files}) + set(_headers ${G_HEADERS}) + list(TRANSFORM _headers PREPEND "${G_SRC_DIR}/") + file( + GLOB _docs_files + LIST_DIRECTORIES FALSE + ${G_SRC_DIR}/*.html + ${G_SRC_DIR}/*.md + ${G_SRC_DIR}/*.png + ${G_SRC_DIR}/*.jpg + ) + target_sources(${G_NAME} PRIVATE ${_headers} ${_docs_files}) endfunction() diff --git a/cmake/modules/build_program.cmake b/cmake/modules/build_program.cmake index f4301fc135c..ba308ad2e54 100644 --- a/cmake/modules/build_program.cmake +++ b/cmake/modules/build_program.cmake @@ -7,5 +7,5 @@ SPDX-License-Identifier: GPL-2.0-or-later #]] macro(build_program) - build_module(${ARGN} EXE) + build_module(${ARGN} EXE) endmacro() diff --git a/cmake/modules/build_program_in_subdir.cmake b/cmake/modules/build_program_in_subdir.cmake index f2c78f258b9..f77bb3f8bdb 100644 --- a/cmake/modules/build_program_in_subdir.cmake +++ b/cmake/modules/build_program_in_subdir.cmake @@ -8,13 +8,14 @@ SPDX-License-Identifier: GPL-2.0-or-later #]] macro(build_program_in_subdir dir_name) - set(extra_args ${ARGN}) - if("NAME" IN_LIST extra_args) - # message("dir_name=${dir_name} ${extra_args}") - build_program(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${dir_name} ${ARGN}) - else() - get_filename_component(pgm_name ${dir_name} NAME) - build_program(NAME ${pgm_name} SRC_DIR - ${CMAKE_CURRENT_SOURCE_DIR}/${dir_name} ${ARGN}) - endif() + set(extra_args ${ARGN}) + if("NAME" IN_LIST extra_args) + # message("dir_name=${dir_name} ${extra_args}") + build_program(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${dir_name} ${ARGN}) + else() + get_filename_component(pgm_name ${dir_name} NAME) + build_program(NAME ${pgm_name} SRC_DIR + ${CMAKE_CURRENT_SOURCE_DIR}/${dir_name} ${ARGN} + ) + endif() endmacro() diff --git a/cmake/modules/build_script_in_subdir.cmake b/cmake/modules/build_script_in_subdir.cmake index ad7b672c9d7..b60619eb092 100644 --- a/cmake/modules/build_script_in_subdir.cmake +++ b/cmake/modules/build_script_in_subdir.cmake @@ -7,140 +7,151 @@ SPDX-License-Identifier: GPL-2.0-or-later #]] function(build_script_in_subdir dir_name) + cmake_parse_arguments(G "PLAIN_PY;NO_DOCS" "DEST_DIR" "" ${ARGN}) - cmake_parse_arguments( - G - "PLAIN_PY;NO_DOCS" - "DEST_DIR" - "" - ${ARGN}) - - if(NOT G_DEST_DIR) - set(G_DEST_DIR ${GRASS_INSTALL_SCRIPTDIR}) - endif() - - set(G_NAME ${dir_name}) - - if(G_PLAIN_PY) - set(G_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}) - else() - set(G_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${G_NAME}) - endif() - - file(GLOB PYTHON_FILES "${G_SRC_DIR}/*.py") - if(NOT PYTHON_FILES) - message(FATAL_ERROR "[${G_NAME}]: No PYTHON_FILES found.") - endif() - - set(SRC_SCRIPT_FILE ${G_SRC_DIR}/${G_NAME}.py) - - if(NOT EXISTS ${SRC_SCRIPT_FILE}) - message(FATAL_ERROR "${SRC_SCRIPT_FILE} does not exists") - return() - endif() - - set(script_ext "") - if(WIN32) - set(script_ext ".py") - endif() - - configure_file( - ${G_SRC_DIR}/${G_NAME}.py - ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_NAME}${script_ext} COPYONLY) - file( - COPY ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_NAME}${script_ext} - DESTINATION ${OUTDIR}/${G_DEST_DIR} - FILE_PERMISSIONS - OWNER_READ - OWNER_WRITE - OWNER_EXECUTE - GROUP_READ - GROUP_EXECUTE - WORLD_READ - WORLD_EXECUTE) - - set(TRANSLATE_C_FILE - ${CMAKE_SOURCE_DIR}/locale/scriptstrings/${G_NAME}_to_translate.c) - - add_custom_command( - OUTPUT ${TRANSLATE_C_FILE} - COMMAND - ${CMAKE_COMMAND} -DG_NAME=${G_NAME} -DSOURCE_DIR=${CMAKE_SOURCE_DIR} - -DOUTPUT_FILE=${TRANSLATE_C_FILE} -DGISBASE_DIR="${RUNTIME_GISBASE}" - -DBINARY_DIR="${OUTDIR}/${GRASS_INSTALL_BINDIR}" - -DLIBDIR="${OUTDIR}/${GRASS_INSTALL_LIBDIR}" - -DSCRIPTDIR="${OUTDIR}/${G_DEST_DIR}" - -DETCDIR="${OUTDIR}/${GRASS_INSTALL_ETCDIR}" - -DPYDIR="${OUTDIR}/${GRASS_INSTALL_PYDIR}" -DGISRC="${GISRC}" - -DGUIDIR="${OUTDIR}/${GRASS_INSTALL_GUIDIR}" -P - ${CMAKE_SOURCE_DIR}/cmake/locale_strings.cmake - DEPENDS g.parser) - - set(OUT_HTML_FILE "") - - if(WITH_DOCS AND NOT G_NO_DOCS) - - file(GLOB IMG_FILES ${G_SRC_DIR}/*.png ${G_SRC_DIR}/*.jpg) - if(IMG_FILES) - set(copy_images_command ${CMAKE_COMMAND} -E copy ${IMG_FILES} - ${OUTDIR}/${GRASS_INSTALL_DOCDIR}) - install(FILES ${IMG_FILES} DESTINATION ${GRASS_INSTALL_DOCDIR}) + if(NOT G_DEST_DIR) + set(G_DEST_DIR ${GRASS_INSTALL_SCRIPTDIR}) endif() - set(OUT_HTML_FILE ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/${G_NAME}.html) - - generate_docs(${G_NAME} - OUTPUT ${OUT_HTML_FILE} - SOURCEDIR ${G_SRC_DIR} - DEST_DIR ${G_DEST_DIR} - DEPENDS ${TRANSLATE_C_FILE} LIB_PYTHON) - - endif() # WITH_DOCS - - add_custom_target(${G_NAME} DEPENDS ${TRANSLATE_C_FILE} ${OUT_HTML_FILE}) - - set(modules_list - "${G_NAME};${modules_list}" - CACHE INTERNAL "list of modules") - - if("${G_NAME}" MATCHES "^v[\.]") - set_target_properties(${G_NAME} PROPERTIES FOLDER "Tools/Vector") - elseif("${G_NAME}" MATCHES "^r[\.]") - set_target_properties(${G_NAME} PROPERTIES FOLDER "Tools/Raster") - elseif("${G_NAME}" MATCHES "^d[\.]") - set_target_properties(${G_NAME} PROPERTIES FOLDER "Tools/Display") - elseif("${G_NAME}" MATCHES "^db[\.]") - set_target_properties(${G_NAME} PROPERTIES FOLDER "Tools/Database") - elseif("${G_NAME}" MATCHES "^g[\.]") - set_target_properties(${G_NAME} PROPERTIES FOLDER "Tools/General") - elseif("${G_NAME}" MATCHES "^i[\.]") - set_target_properties(${G_NAME} PROPERTIES FOLDER "Tools/Imagery") - elseif("${G_NAME}" MATCHES "^m[\.]") - set_target_properties(${G_NAME} PROPERTIES FOLDER "Tools/Miscellaneous") - elseif("${G_NAME}" MATCHES "^ps[\.]") - set_target_properties(${G_NAME} PROPERTIES FOLDER "Tools/PostScript") - elseif("${G_NAME}" MATCHES "^r3[\.]") - set_target_properties(${G_NAME} PROPERTIES FOLDER "Tools/Raster 3D") - elseif("${G_NAME}" MATCHES "^t[\.]") - set_target_properties(${G_NAME} PROPERTIES FOLDER "Tools/Temporal") - else() - set_target_properties(${G_NAME} PROPERTIES FOLDER "Binaries") - endif() - - if(WIN32) - install(PROGRAMS ${OUTDIR}/${G_DEST_DIR}/${G_NAME}.bat - DESTINATION ${G_DEST_DIR}) - endif() - - install(PROGRAMS ${OUTDIR}/${G_DEST_DIR}/${G_NAME}${script_ext} - DESTINATION ${G_DEST_DIR}) - - file(GLOB _files - LIST_DIRECTORIES FALSE - ${G_SRC_DIR}/*.py - ${G_SRC_DIR}/*.html ${G_SRC_DIR}/*.md - ${G_SRC_DIR}/*.png ${G_SRC_DIR}/*.jpg) - target_sources(${G_NAME} PRIVATE ${_files}) + set(G_NAME ${dir_name}) + if(G_PLAIN_PY) + set(G_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}) + else() + set(G_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${G_NAME}) + endif() + + file(GLOB PYTHON_FILES "${G_SRC_DIR}/*.py") + if(NOT PYTHON_FILES) + message(FATAL_ERROR "[${G_NAME}]: No PYTHON_FILES found.") + endif() + + set(SRC_SCRIPT_FILE ${G_SRC_DIR}/${G_NAME}.py) + + if(NOT EXISTS ${SRC_SCRIPT_FILE}) + message(FATAL_ERROR "${SRC_SCRIPT_FILE} does not exists") + return() + endif() + + set(script_ext "") + if(WIN32) + set(script_ext ".py") + endif() + + configure_file( + ${G_SRC_DIR}/${G_NAME}.py + ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_NAME}${script_ext} + COPYONLY + ) + file( + COPY ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_NAME}${script_ext} + DESTINATION ${OUTDIR}/${G_DEST_DIR} + FILE_PERMISSIONS + OWNER_READ + OWNER_WRITE + OWNER_EXECUTE + GROUP_READ + GROUP_EXECUTE + WORLD_READ + WORLD_EXECUTE + ) + + set(TRANSLATE_C_FILE + ${CMAKE_SOURCE_DIR}/locale/scriptstrings/${G_NAME}_to_translate.c + ) + + add_custom_command( + OUTPUT ${TRANSLATE_C_FILE} + COMMAND + ${CMAKE_COMMAND} -DG_NAME=${G_NAME} -DSOURCE_DIR=${CMAKE_SOURCE_DIR} + -DOUTPUT_FILE=${TRANSLATE_C_FILE} -DGISBASE_DIR="${RUNTIME_GISBASE}" + -DBINARY_DIR="${OUTDIR}/${GRASS_INSTALL_BINDIR}" + -DLIBDIR="${OUTDIR}/${GRASS_INSTALL_LIBDIR}" + -DSCRIPTDIR="${OUTDIR}/${G_DEST_DIR}" + -DETCDIR="${OUTDIR}/${GRASS_INSTALL_ETCDIR}" + -DPYDIR="${OUTDIR}/${GRASS_INSTALL_PYDIR}" -DGISRC="${GISRC}" + -DGUIDIR="${OUTDIR}/${GRASS_INSTALL_GUIDIR}" -P + ${CMAKE_SOURCE_DIR}/cmake/locale_strings.cmake + DEPENDS g.parser + ) + + set(OUT_HTML_FILE "") + + if(WITH_DOCS AND NOT G_NO_DOCS) + file(GLOB IMG_FILES ${G_SRC_DIR}/*.png ${G_SRC_DIR}/*.jpg) + if(IMG_FILES) + set(copy_images_command + ${CMAKE_COMMAND} + -E + copy + ${IMG_FILES} + ${OUTDIR}/${GRASS_INSTALL_DOCDIR} + ) + install(FILES ${IMG_FILES} DESTINATION ${GRASS_INSTALL_DOCDIR}) + endif() + + set(OUT_HTML_FILE ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/${G_NAME}.html) + + generate_docs(${G_NAME} + OUTPUT ${OUT_HTML_FILE} + SOURCEDIR ${G_SRC_DIR} + DEST_DIR ${G_DEST_DIR} + DEPENDS ${TRANSLATE_C_FILE} LIB_PYTHON + ) + endif() # WITH_DOCS + + add_custom_target(${G_NAME} DEPENDS ${TRANSLATE_C_FILE} ${OUT_HTML_FILE}) + + set(modules_list + "${G_NAME};${modules_list}" + CACHE INTERNAL + "list of modules" + ) + + if("${G_NAME}" MATCHES "^v[\.]") + set_target_properties(${G_NAME} PROPERTIES FOLDER "Tools/Vector") + elseif("${G_NAME}" MATCHES "^r[\.]") + set_target_properties(${G_NAME} PROPERTIES FOLDER "Tools/Raster") + elseif("${G_NAME}" MATCHES "^d[\.]") + set_target_properties(${G_NAME} PROPERTIES FOLDER "Tools/Display") + elseif("${G_NAME}" MATCHES "^db[\.]") + set_target_properties(${G_NAME} PROPERTIES FOLDER "Tools/Database") + elseif("${G_NAME}" MATCHES "^g[\.]") + set_target_properties(${G_NAME} PROPERTIES FOLDER "Tools/General") + elseif("${G_NAME}" MATCHES "^i[\.]") + set_target_properties(${G_NAME} PROPERTIES FOLDER "Tools/Imagery") + elseif("${G_NAME}" MATCHES "^m[\.]") + set_target_properties(${G_NAME} PROPERTIES FOLDER "Tools/Miscellaneous") + elseif("${G_NAME}" MATCHES "^ps[\.]") + set_target_properties(${G_NAME} PROPERTIES FOLDER "Tools/PostScript") + elseif("${G_NAME}" MATCHES "^r3[\.]") + set_target_properties(${G_NAME} PROPERTIES FOLDER "Tools/Raster 3D") + elseif("${G_NAME}" MATCHES "^t[\.]") + set_target_properties(${G_NAME} PROPERTIES FOLDER "Tools/Temporal") + else() + set_target_properties(${G_NAME} PROPERTIES FOLDER "Binaries") + endif() + + if(WIN32) + install( + PROGRAMS ${OUTDIR}/${G_DEST_DIR}/${G_NAME}.bat + DESTINATION ${G_DEST_DIR} + ) + endif() + install( + PROGRAMS ${OUTDIR}/${G_DEST_DIR}/${G_NAME}${script_ext} + DESTINATION ${G_DEST_DIR} + ) + + file( + GLOB _files + LIST_DIRECTORIES FALSE + ${G_SRC_DIR}/*.py + ${G_SRC_DIR}/*.html + ${G_SRC_DIR}/*.md + ${G_SRC_DIR}/*.png + ${G_SRC_DIR}/*.jpg + ) + target_sources(${G_NAME} PRIVATE ${_files}) endfunction() diff --git a/cmake/modules/check_target.cmake b/cmake/modules/check_target.cmake index 1d03d29382f..33e7166a0a2 100644 --- a/cmake/modules/check_target.cmake +++ b/cmake/modules/check_target.cmake @@ -1,8 +1,8 @@ macro(check_target target_name have_define_var) - set(${have_define_var} 0) - if(TARGET ${target_name}) - # message(STATUS "${target_name} package found. Setting ${have_define_var} - # to 1") - set(${have_define_var} 1) - endif() + set(${have_define_var} 0) + if(TARGET ${target_name}) + # message(STATUS "${target_name} package found. Setting ${have_define_var} + # to 1") + set(${have_define_var} 1) + endif() endmacro() diff --git a/cmake/modules/copy_python_files_in_subdir.cmake b/cmake/modules/copy_python_files_in_subdir.cmake index 9d689b69c79..e50c0481e7d 100644 --- a/cmake/modules/copy_python_files_in_subdir.cmake +++ b/cmake/modules/copy_python_files_in_subdir.cmake @@ -9,43 +9,57 @@ SPDX-License-Identifier: GPL-2.0-or-later #]] function(copy_python_files_in_subdir dir_name dst_prefix) - cmake_parse_arguments(G "PRE_BUILD;PRE_LINK;POST_BUILD" "TARGET" "EXCLUDE" ${ARGN}) + cmake_parse_arguments( + G + "PRE_BUILD;PRE_LINK;POST_BUILD" + "TARGET" + "EXCLUDE" + ${ARGN} + ) - file(GLOB PY_FILES "${CMAKE_CURRENT_SOURCE_DIR}/${dir_name}/*.py") - foreach(exclude_file ${G_EXCLUDE}) - list(FILTER PY_FILES EXCLUDE REGEX ".*/${exclude_file}") - endforeach() + file(GLOB PY_FILES "${CMAKE_CURRENT_SOURCE_DIR}/${dir_name}/*.py") + foreach(exclude_file ${G_EXCLUDE}) + list(FILTER PY_FILES EXCLUDE REGEX ".*/${exclude_file}") + endforeach() - if(DEFINED G_TARGET) - if(${G_PRE_BUILD}) - set(BUILD PRE_BUILD) - elseif(${G_PRE_LINK}) - set(BUILD PRE_LINK) + if(DEFINED G_TARGET) + if(${G_PRE_BUILD}) + set(BUILD PRE_BUILD) + elseif(${G_PRE_LINK}) + set(BUILD PRE_LINK) + else() + set(BUILD POST_BUILD) + endif() + add_custom_command( + TARGET ${G_TARGET} + ${BUILD} + COMMAND + ${CMAKE_COMMAND} -E make_directory + "${OUTDIR}/${dst_prefix}/${dir_name}" + COMMAND + ${CMAKE_COMMAND} -E copy ${PY_FILES} + "${OUTDIR}/${dst_prefix}/${dir_name}" + ) + set(py_files_out) + foreach(pyfile ${PY_FILES}) + get_filename_component(py_file_name ${pyfile} NAME) + list( + APPEND py_files_out + "${OUTDIR}/${dst_prefix}/${dir_name}/${py_file_name}" + ) + endforeach() + install(PROGRAMS ${py_files_out} DESTINATION ${dst_prefix}/${dir_name}) else() - set(BUILD POST_BUILD) + string(REPLACE "/" "_" targ_name ${dir_name}) + add_custom_target( + python_${targ_name} + COMMAND + ${CMAKE_COMMAND} -E make_directory + "${OUTDIR}/${dst_prefix}/${dir_name}" + COMMAND + ${CMAKE_COMMAND} -E copy ${PY_FILES} + "${OUTDIR}/${dst_prefix}/${dir_name}" + ) + set_target_properties(python_${targ_name} PROPERTIES FOLDER Python/API) endif() - add_custom_command( - TARGET ${G_TARGET} - ${BUILD} - COMMAND ${CMAKE_COMMAND} -E make_directory - "${OUTDIR}/${dst_prefix}/${dir_name}" - COMMAND ${CMAKE_COMMAND} -E copy ${PY_FILES} - "${OUTDIR}/${dst_prefix}/${dir_name}") - set(py_files_out) - foreach(pyfile ${PY_FILES}) - get_filename_component(py_file_name ${pyfile} NAME) - list(APPEND py_files_out - "${OUTDIR}/${dst_prefix}/${dir_name}/${py_file_name}") - endforeach() - install(PROGRAMS ${py_files_out} DESTINATION ${dst_prefix}/${dir_name}) - else() - string(REPLACE "/" "_" targ_name ${dir_name}) - add_custom_target( - python_${targ_name} - COMMAND ${CMAKE_COMMAND} -E make_directory - "${OUTDIR}/${dst_prefix}/${dir_name}" - COMMAND ${CMAKE_COMMAND} -E copy ${PY_FILES} - "${OUTDIR}/${dst_prefix}/${dir_name}") - set_target_properties(python_${targ_name} PROPERTIES FOLDER Python/API) - endif() endfunction() diff --git a/cmake/modules/generate_docs.cmake b/cmake/modules/generate_docs.cmake index 090305554ef..4ddf641d04f 100644 --- a/cmake/modules/generate_docs.cmake +++ b/cmake/modules/generate_docs.cmake @@ -45,140 +45,169 @@ Generate documentation #]=======================================================================] macro(generate_docs_list) - cmake_parse_arguments(D "" "TARGET" "DOC_FILES;IMG_FILES" ${ARGN}) - - if(NOT D_TARGET OR NOT D_DOC_FILES) - message(FATAL_ERROR "TARGET >${D_TARGET}< or DOC_FILES >${D_DOC_FILES}< in not set") - endif() - - foreach(doc_file ${D_DOC_FILES}) - generate_docs(${doc_file} TARGET ${D_TARGET} SOURCEDIR ${CMAKE_CURRENT_SOURCE_DIR} IMG_NO) - endforeach() - - if(D_IMG_FILES) - add_custom_command( - TARGET ${D_TARGET} - PRE_BUILD - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${D_IMG_FILES} ${OUTDIR}/${GRASS_INSTALL_DOCDIR}) - install(FILES ${D_IMG_FILES} DESTINATION ${GRASS_INSTALL_DOCDIR}) - endif() + cmake_parse_arguments(D "" "TARGET" "DOC_FILES;IMG_FILES" ${ARGN}) + + if(NOT D_TARGET OR NOT D_DOC_FILES) + message( + FATAL_ERROR + "TARGET >${D_TARGET}< or DOC_FILES >${D_DOC_FILES}< in not set" + ) + endif() + + foreach(doc_file ${D_DOC_FILES}) + generate_docs(${doc_file} TARGET ${D_TARGET} SOURCEDIR ${CMAKE_CURRENT_SOURCE_DIR} IMG_NO) + endforeach() + + if(D_IMG_FILES) + add_custom_command( + TARGET ${D_TARGET} + PRE_BUILD + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMAND + ${CMAKE_COMMAND} -E copy_if_different ${D_IMG_FILES} + ${OUTDIR}/${GRASS_INSTALL_DOCDIR} + ) + install(FILES ${D_IMG_FILES} DESTINATION ${GRASS_INSTALL_DOCDIR}) + endif() endmacro() function(generate_docs name) - cmake_parse_arguments(PARSE_ARGV 1 D - "IMG_NO;HTML_DESCR" - "SOURCEDIR;TARGET;OUTPUT;DEST_DIR;GUI_TARGET_NAME" - "IMG_FILES;DEPENDS") - - if(NOT D_TARGET AND NOT D_OUTPUT) - message(FATAL_ERROR "TARGET or OUTPUT in not set") - endif() - - set(sourcedir "${D_SOURCEDIR}") - if(NOT D_SOURCEDIR) - set(sourcedir "${CMAKE_CURRENT_SOURCE_DIR}") - endif() - - if(D_GUI_TARGET_NAME) - set(html_file_name ${D_GUI_TARGET_NAME}.html) - set(tmp_html_name ${D_GUI_TARGET_NAME}.tmp.html) - set(man_file_name ${D_GUI_TARGET_NAME}.1) - else() - set(html_file_name ${name}.html) - set(tmp_html_name ${name}.tmp.html) - set(man_file_name ${name}.1) - endif() - set(source_html "${sourcedir}/${html_file_name}") - set(html_file "${CMAKE_CURRENT_BINARY_DIR}/${html_file_name}") - set(tmp_html_file "${CMAKE_CURRENT_BINARY_DIR}/${tmp_html_name}") - set(out_html_file "${OUTDIR}/${GRASS_INSTALL_DOCDIR}/${html_file_name}") - set(out_man_file "${OUTDIR}/${GRASS_INSTALL_MANDIR}/${man_file_name}") - - if(WIN32) - set(ext ".exe") - set(py ".py") - set(null_device nul) - set(search_cmd findstr /r /v) - set(html_search_str "\" .\"") - else() - set(ext "") - set(py "") - set(null_device /dev/null) - set(search_cmd grep -v) - set(html_search_str "'\|\|.'") - endif() - - if(D_HTML_DESCR) - set(html_descr_command - ${grass_env_command} - ${name}${ext} --html-description < ${null_device} | - ${search_cmd} ${html_search_str}) - else() - set(html_descr_command ${CMAKE_COMMAND} -E echo) - endif() - - if(NOT D_IMG_FILES) - file(GLOB D_IMG_FILES - LIST_DIRECTORIES FALSE - ${sourcedir}/*.png ${sourcedir}/*.jpg) - endif() - if(D_IMG_FILES AND NOT D_IMG_NO) - set(copy_images_command ${CMAKE_COMMAND} -E copy_if_different ${D_IMG_FILES} - ${OUTDIR}/${GRASS_INSTALL_DOCDIR}) - install(FILES ${D_IMG_FILES} DESTINATION ${GRASS_INSTALL_DOCDIR}) - endif() - - set(mkhtml_cmd ${grass_env_command} ${PYTHON_EXECUTABLE} ${MKHTML_PY}) - set(html2man_cmd ${grass_env_command} ${PYTHON_EXECUTABLE} ${HTML2MAN}) - - if(D_TARGET) - add_custom_command( - TARGET ${D_TARGET} - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${source_html} ${html_file} - COMMAND ${html_descr_command} > ${tmp_html_file} - COMMAND ${mkhtml_cmd} ${name} > ${out_html_file} - COMMAND ${html2man_cmd} ${out_html_file} ${out_man_file} - COMMAND ${copy_images_command} - COMMAND ${CMAKE_COMMAND} -E remove ${html_file} - COMMENT "Creating ${name}.[html|1]") - elseif(D_GUI_TARGET_NAME) - set(gui_html_file ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/wxGUI.${name}.html) - set(gui_man_file ${OUTDIR}/${GRASS_INSTALL_MANDIR}/wxGUI.${name}.1) - set(py_script_file ${OUTDIR}/${GRASS_INSTALL_SCRIPTDIR}/${D_GUI_TARGET_NAME}${py}) - - add_custom_command( - OUTPUT ${out_html_file} - COMMAND ${CMAKE_COMMAND} -E copy ${source_html} ${html_file} - COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} ${py_script_file} - --html-description < ${null_device} | ${search_cmd} - ${html_search_str} > ${tmp_html_file} - COMMAND ${mkhtml_cmd} ${D_GUI_TARGET_NAME} > ${out_html_file} - COMMAND ${html2man_cmd} ${out_html_file} ${out_man_file} - COMMAND ${copy_images_command} - COMMAND ${CMAKE_COMMAND} -E remove ${tmp_html_file} - COMMAND ${mkhtml_cmd} ${D_GUI_TARGET_NAME} > ${gui_html_file} - COMMAND ${html2man_cmd} ${gui_html_file} ${gui_man_file} - COMMAND ${CMAKE_COMMAND} -E remove ${html_file} - COMMENT "Creating ${out_html_file} and ${gui_html_file}" - DEPENDS ${D_DEPENDS}) - else() - set(out_html_file "${D_OUTPUT}") - set(py_script_file "${OUTDIR}/${D_DEST_DIR}/${name}${py}") - - add_custom_command( - OUTPUT ${out_html_file} - COMMAND ${CMAKE_COMMAND} -E copy ${source_html} ${html_file} - COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} ${py_script_file} - --html-description < ${null_device} | ${search_cmd} - ${html_search_str} > ${tmp_html_file} - COMMAND ${mkhtml_cmd} ${name} > ${out_html_file} - COMMAND ${html2man_cmd} ${out_html_file} ${out_man_file} - COMMAND ${copy_images_command} - COMMAND ${CMAKE_COMMAND} -E remove ${tmp_html_file} ${html_file} - COMMENT "Creating ${OUT_HTML_FILE}" - DEPENDS ${D_DEPENDS}) - endif() - + cmake_parse_arguments( + PARSE_ARGV 1 + D + "IMG_NO;HTML_DESCR" + "SOURCEDIR;TARGET;OUTPUT;DEST_DIR;GUI_TARGET_NAME" + "IMG_FILES;DEPENDS" + ) + + if(NOT D_TARGET AND NOT D_OUTPUT) + message(FATAL_ERROR "TARGET or OUTPUT in not set") + endif() + + set(sourcedir "${D_SOURCEDIR}") + if(NOT D_SOURCEDIR) + set(sourcedir "${CMAKE_CURRENT_SOURCE_DIR}") + endif() + + if(D_GUI_TARGET_NAME) + set(html_file_name ${D_GUI_TARGET_NAME}.html) + set(tmp_html_name ${D_GUI_TARGET_NAME}.tmp.html) + set(man_file_name ${D_GUI_TARGET_NAME}.1) + else() + set(html_file_name ${name}.html) + set(tmp_html_name ${name}.tmp.html) + set(man_file_name ${name}.1) + endif() + set(source_html "${sourcedir}/${html_file_name}") + set(html_file "${CMAKE_CURRENT_BINARY_DIR}/${html_file_name}") + set(tmp_html_file "${CMAKE_CURRENT_BINARY_DIR}/${tmp_html_name}") + set(out_html_file "${OUTDIR}/${GRASS_INSTALL_DOCDIR}/${html_file_name}") + set(out_man_file "${OUTDIR}/${GRASS_INSTALL_MANDIR}/${man_file_name}") + + if(WIN32) + set(ext ".exe") + set(py ".py") + set(null_device nul) + set(search_cmd findstr /r /v) + set(html_search_str "\" .\"") + else() + set(ext "") + set(py "") + set(null_device /dev/null) + set(search_cmd grep -v) + set(html_search_str "'\|\|.'") + endif() + + if(D_HTML_DESCR) + set(html_descr_command + ${grass_env_command} + ${name}${ext} + --html-description + < + ${null_device} + | + ${search_cmd} + ${html_search_str} + ) + else() + set(html_descr_command ${CMAKE_COMMAND} -E echo) + endif() + + if(NOT D_IMG_FILES) + file( + GLOB D_IMG_FILES + LIST_DIRECTORIES FALSE + ${sourcedir}/*.png + ${sourcedir}/*.jpg + ) + endif() + if(D_IMG_FILES AND NOT D_IMG_NO) + set(copy_images_command + ${CMAKE_COMMAND} + -E + copy_if_different + ${D_IMG_FILES} + ${OUTDIR}/${GRASS_INSTALL_DOCDIR} + ) + install(FILES ${D_IMG_FILES} DESTINATION ${GRASS_INSTALL_DOCDIR}) + endif() + + set(mkhtml_cmd ${grass_env_command} ${PYTHON_EXECUTABLE} ${MKHTML_PY}) + set(html2man_cmd ${grass_env_command} ${PYTHON_EXECUTABLE} ${HTML2MAN}) + + if(D_TARGET) + add_custom_command( + TARGET ${D_TARGET} + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy ${source_html} ${html_file} + COMMAND ${html_descr_command} > ${tmp_html_file} + COMMAND ${mkhtml_cmd} ${name} > ${out_html_file} + COMMAND ${html2man_cmd} ${out_html_file} ${out_man_file} + COMMAND ${copy_images_command} + COMMAND ${CMAKE_COMMAND} -E remove ${html_file} + COMMENT "Creating ${name}.[html|1]" + ) + elseif(D_GUI_TARGET_NAME) + set(gui_html_file ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/wxGUI.${name}.html) + set(gui_man_file ${OUTDIR}/${GRASS_INSTALL_MANDIR}/wxGUI.${name}.1) + set(py_script_file + ${OUTDIR}/${GRASS_INSTALL_SCRIPTDIR}/${D_GUI_TARGET_NAME}${py} + ) + + add_custom_command( + OUTPUT ${out_html_file} + COMMAND ${CMAKE_COMMAND} -E copy ${source_html} ${html_file} + COMMAND + ${grass_env_command} ${PYTHON_EXECUTABLE} ${py_script_file} + --html-description < ${null_device} | ${search_cmd} + ${html_search_str} > ${tmp_html_file} + COMMAND ${mkhtml_cmd} ${D_GUI_TARGET_NAME} > ${out_html_file} + COMMAND ${html2man_cmd} ${out_html_file} ${out_man_file} + COMMAND ${copy_images_command} + COMMAND ${CMAKE_COMMAND} -E remove ${tmp_html_file} + COMMAND ${mkhtml_cmd} ${D_GUI_TARGET_NAME} > ${gui_html_file} + COMMAND ${html2man_cmd} ${gui_html_file} ${gui_man_file} + COMMAND ${CMAKE_COMMAND} -E remove ${html_file} + COMMENT "Creating ${out_html_file} and ${gui_html_file}" + DEPENDS ${D_DEPENDS} + ) + else() + set(out_html_file "${D_OUTPUT}") + set(py_script_file "${OUTDIR}/${D_DEST_DIR}/${name}${py}") + + add_custom_command( + OUTPUT ${out_html_file} + COMMAND ${CMAKE_COMMAND} -E copy ${source_html} ${html_file} + COMMAND + ${grass_env_command} ${PYTHON_EXECUTABLE} ${py_script_file} + --html-description < ${null_device} | ${search_cmd} + ${html_search_str} > ${tmp_html_file} + COMMAND ${mkhtml_cmd} ${name} > ${out_html_file} + COMMAND ${html2man_cmd} ${out_html_file} ${out_man_file} + COMMAND ${copy_images_command} + COMMAND ${CMAKE_COMMAND} -E remove ${tmp_html_file} ${html_file} + COMMENT "Creating ${OUT_HTML_FILE}" + DEPENDS ${D_DEPENDS} + ) + endif() endfunction() diff --git a/cmake/modules/get_host_arch.cmake b/cmake/modules/get_host_arch.cmake index ff12c2539f8..6845e4ca764 100644 --- a/cmake/modules/get_host_arch.cmake +++ b/cmake/modules/get_host_arch.cmake @@ -7,38 +7,39 @@ SPDX-License-Identifier: GPL-2.0-or-later #]] function(get_host_arch var_arch) - set(host_arch_value "x86_64") # default value - - if(WIN32) - if(MSVC) - execute_process( - COMMAND ${CMAKE_C_COMPILER} - ERROR_VARIABLE ev - OUTPUT_VARIABLE ov - OUTPUT_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) - - if("${ev}" MATCHES "x86") - set(${host_arch_value} "x86") - else() - set(${host_arch_value} "x86_64") - endif() - - elseif(MINGW) - - else() - message(FATAL_ERROR "compiler/platform is not supported") - endif() # if(MSVC) - - elseif(UNIX) - execute_process( - COMMAND uname -m - ERROR_VARIABLE ev - OUTPUT_VARIABLE ov - OUTPUT_STRIP_TRAILING_WHITESPACE) - set(${host_arch_value} "${ov}") - endif() - - set(${var_arch} - ${host_arch_value} - PARENT_SCOPE) + set(host_arch_value "x86_64") # default value + + if(WIN32) + if(MSVC) + execute_process( + COMMAND ${CMAKE_C_COMPILER} + ERROR_VARIABLE ev + OUTPUT_VARIABLE ov + OUTPUT_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + if("${ev}" MATCHES "x86") + set(${host_arch_value} "x86") + else() + set(${host_arch_value} "x86_64") + endif() + + elseif(MINGW) + + else() + message(FATAL_ERROR "compiler/platform is not supported") + endif() # if(MSVC) + + elseif(UNIX) + execute_process( + COMMAND uname -m + ERROR_VARIABLE ev + OUTPUT_VARIABLE ov + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + set(${host_arch_value} "${ov}") + endif() + + set(${var_arch} ${host_arch_value} PARENT_SCOPE) endfunction() diff --git a/cmake/modules/get_versions.cmake b/cmake/modules/get_versions.cmake index 5ddd4063c4d..8c8d173e1c2 100644 --- a/cmake/modules/get_versions.cmake +++ b/cmake/modules/get_versions.cmake @@ -6,45 +6,48 @@ COPYRIGHT: (C) 2020 by the GRASS Development Team SPDX-License-Identifier: GPL-2.0-or-later #]] -function(get_versions file_path var_major var_minor var_release var_suffix var_date) - set(version_major 0) - set(version_minor 0) - set(version_release 0) - set(version_suffix "") - set(version_date 00000000) - file(STRINGS "${file_path}" grass_version_strings) - list(LENGTH grass_version_strings grass_version_file_length) +function( + get_versions + file_path + var_major + var_minor + var_release + var_suffix + var_date +) + set(version_major 0) + set(version_minor 0) + set(version_release 0) + set(version_suffix "") + set(version_date 00000000) + file(STRINGS "${file_path}" grass_version_strings) + list(LENGTH grass_version_strings grass_version_file_length) - if(grass_version_file_length LESS 3) - message(FATAL_ERROR "include/VERSION is not a valid file") - endif() + if(grass_version_file_length LESS 3) + message(FATAL_ERROR "include/VERSION is not a valid file") + endif() - list(GET grass_version_strings 0 version_major) - list(GET grass_version_strings 1 version_minor) + list(GET grass_version_strings 0 version_major) + list(GET grass_version_strings 1 version_minor) - if(grass_version_file_length GREATER 2) - list(GET grass_version_strings 2 version_release) - string(REGEX REPLACE "(^[0-9]+)(.*)" "\\2" version_suffix ${version_release}) - string(REGEX MATCH "^[0-9]+" version_release ${version_release}) - endif() + if(grass_version_file_length GREATER 2) + list(GET grass_version_strings 2 version_release) + string( + REGEX REPLACE "(^[0-9]+)(.*)" + "\\2" + version_suffix + ${version_release} + ) + string(REGEX MATCH "^[0-9]+" version_release ${version_release}) + endif() - if(grass_version_file_length GREATER 3) - list(GET grass_version_strings 3 version_date) - endif() + if(grass_version_file_length GREATER 3) + list(GET grass_version_strings 3 version_date) + endif() - set(${var_major} - ${version_major} - PARENT_SCOPE) - set(${var_minor} - ${version_minor} - PARENT_SCOPE) - set(${var_release} - ${version_release} - PARENT_SCOPE) - set(${var_suffix} - ${version_suffix} - PARENT_SCOPE) - set(${var_date} - ${version_date} - PARENT_SCOPE) + set(${var_major} ${version_major} PARENT_SCOPE) + set(${var_minor} ${version_minor} PARENT_SCOPE) + set(${var_release} ${version_release} PARENT_SCOPE) + set(${var_suffix} ${version_suffix} PARENT_SCOPE) + set(${var_date} ${version_date} PARENT_SCOPE) endfunction() diff --git a/cmake/modules/linker.cmake b/cmake/modules/linker.cmake index a94f0e11f77..5230481397d 100644 --- a/cmake/modules/linker.cmake +++ b/cmake/modules/linker.cmake @@ -1,52 +1,62 @@ macro(set_alternate_linker linker) - if(NOT "${USE_ALTERNATE_LINKER}" STREQUAL - "${USE_ALTERNATE_LINKER_OLD_CACHED}") - unset(LINKER_EXECUTABLE CACHE) - endif() - find_program(LINKER_EXECUTABLE ld.${USE_ALTERNATE_LINKER} - ${USE_ALTERNATE_LINKER}) - if(LINKER_EXECUTABLE) - if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - if("${CMAKE_CXX_COMPILER_VERSION}" VERSION_GREATER_EQUAL 12.0.0) - add_link_options("--ld-path=${LINKER_EXECUTABLE}") - else() - add_link_options("-fuse-ld=${LINKER_EXECUTABLE}") - endif() - elseif( - "${linker}" STREQUAL "mold" - AND "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" - AND "${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS 12.1.0) - # GCC before 12.1.0: -fuse-ld does not accept mold as a valid argument, so - # you need to use -B option instead. - get_filename_component(_dir ${LINKER_EXECUTABLE} DIRECTORY) - get_filename_component(_dir ${_dir} DIRECTORY) - if(EXISTS "${_dir}/libexec/mold/ld") - add_link_options(-B "${_dir}/libexec/mold") - else() - message(FATAL_ERROR "Cannot find ${_dir}/libexec/mold/ld") - endif() + if( + NOT "${USE_ALTERNATE_LINKER}" STREQUAL "${USE_ALTERNATE_LINKER_OLD_CACHED}" + ) + unset(LINKER_EXECUTABLE CACHE) + endif() + find_program( + LINKER_EXECUTABLE + ld.${USE_ALTERNATE_LINKER} + ${USE_ALTERNATE_LINKER} + ) + if(LINKER_EXECUTABLE) + if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + if("${CMAKE_CXX_COMPILER_VERSION}" VERSION_GREATER_EQUAL 12.0.0) + add_link_options("--ld-path=${LINKER_EXECUTABLE}") + else() + add_link_options("-fuse-ld=${LINKER_EXECUTABLE}") + endif() + elseif( + "${linker}" STREQUAL "mold" + AND "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" + AND "${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS 12.1.0 + ) + # GCC before 12.1.0: -fuse-ld does not accept mold as a valid argument, so + # you need to use -B option instead. + get_filename_component(_dir ${LINKER_EXECUTABLE} DIRECTORY) + get_filename_component(_dir ${_dir} DIRECTORY) + if(EXISTS "${_dir}/libexec/mold/ld") + add_link_options(-B "${_dir}/libexec/mold") + else() + message(FATAL_ERROR "Cannot find ${_dir}/libexec/mold/ld") + endif() + else() + add_link_options("-fuse-ld=${USE_ALTERNATE_LINKER}") + endif() + message(STATUS "Using alternative linker: ${LINKER_EXECUTABLE}") else() - add_link_options("-fuse-ld=${USE_ALTERNATE_LINKER}") + message( + FATAL_ERROR + "Cannot find alternative linker ${USE_ALTERNATE_LINKER}" + ) endif() - message(STATUS "Using alternative linker: ${LINKER_EXECUTABLE}") - else() - message( - FATAL_ERROR "Cannot find alternative linker ${USE_ALTERNATE_LINKER}") - endif() endmacro() -if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" - STREQUAL "GNU") - set(USE_ALTERNATE_LINKER - "" - CACHE - STRING +if( + "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" + OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" +) + set(USE_ALTERNATE_LINKER + "" + CACHE STRING "Use alternate linker. Leave empty for system default; potential alternatives are 'gold', 'lld', 'bfd', 'mold'" - ) - if(NOT "${USE_ALTERNATE_LINKER}" STREQUAL "") - set_alternate_linker(${USE_ALTERNATE_LINKER}) - endif() - set(USE_ALTERNATE_LINKER_OLD_CACHED - ${USE_ALTERNATE_LINKER} - CACHE INTERNAL "Previous value of USE_ALTERNATE_LINKER") + ) + if(NOT "${USE_ALTERNATE_LINKER}" STREQUAL "") + set_alternate_linker(${USE_ALTERNATE_LINKER}) + endif() + set(USE_ALTERNATE_LINKER_OLD_CACHED + ${USE_ALTERNATE_LINKER} + CACHE INTERNAL + "Previous value of USE_ALTERNATE_LINKER" + ) endif() diff --git a/cmake/modules/repo_status.cmake b/cmake/modules/repo_status.cmake index 86b2d6a534c..8f9cb842755 100644 --- a/cmake/modules/repo_status.cmake +++ b/cmake/modules/repo_status.cmake @@ -7,74 +7,67 @@ SPDX-License-Identifier: GPL-2.0-or-later #]] function(repo_status repo_dir) - set(time_format "%Y-%m-%dT%H:%M:%S+00:00") - set(GRASS_VERSION_GIT - "exported" - PARENT_SCOPE) - set(GRASS_HEADERS_GIT_HASH - ${GRASS_VERSION_NUMBER} - PARENT_SCOPE) - string(TIMESTAMP GRASS_HEADERS_GIT_DATE ${time_format} UTC) - set(GRASS_HEADERS_GIT_DATE - ${GRASS_HEADERS_GIT_DATE} - PARENT_SCOPE) + set(time_format "%Y-%m-%dT%H:%M:%S+00:00") + set(GRASS_VERSION_GIT "exported" PARENT_SCOPE) + set(GRASS_HEADERS_GIT_HASH ${GRASS_VERSION_NUMBER} PARENT_SCOPE) + string(TIMESTAMP GRASS_HEADERS_GIT_DATE ${time_format} UTC) + set(GRASS_HEADERS_GIT_DATE ${GRASS_HEADERS_GIT_DATE} PARENT_SCOPE) - if(NOT EXISTS "${repo_dir}/.git") - return() - endif() - find_package(Git) - if(NOT GIT_FOUND) - return() - endif() + if(NOT EXISTS "${repo_dir}/.git") + return() + endif() + find_package(Git) + if(NOT GIT_FOUND) + return() + endif() - execute_process( - COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_VARIABLE git_rev_OV - ERROR_VARIABLE git_rev_EV - RESULT_VARIABLE git_rev_RV) + execute_process( + COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE git_rev_OV + ERROR_VARIABLE git_rev_EV + RESULT_VARIABLE git_rev_RV + ) - if(git_rev_RV) - message(FATAL_ERROR "Error running git ${git_rev_EV}") - else() - string(STRIP ${git_rev_OV} GRASS_VERSION_GIT) - set(GRASS_VERSION_GIT - "${GRASS_VERSION_GIT}" - PARENT_SCOPE) - endif() + if(git_rev_RV) + message(FATAL_ERROR "Error running git ${git_rev_EV}") + else() + string(STRIP ${git_rev_OV} GRASS_VERSION_GIT) + set(GRASS_VERSION_GIT "${GRASS_VERSION_GIT}" PARENT_SCOPE) + endif() - execute_process( - COMMAND ${GIT_EXECUTABLE} log -1 --pretty=format:%h -- + execute_process( + COMMAND + ${GIT_EXECUTABLE} log -1 --pretty=format:%h -- "${CMAKE_SOURCE_DIR}/include" - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_VARIABLE git_hash_OV - ERROR_VARIABLE git_hash_EV - RESULT_VARIABLE git_hash_RV) + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE git_hash_OV + ERROR_VARIABLE git_hash_EV + RESULT_VARIABLE git_hash_RV + ) - if(git_hash_RV) - message(FATAL_ERROR "Error running git ${git_hash_EV}") - else() - string(STRIP ${git_hash_OV} GRASS_HEADERS_GIT_HASH) - set(GRASS_HEADERS_GIT_HASH - "${GRASS_HEADERS_GIT_HASH}" - PARENT_SCOPE) - endif() + if(git_hash_RV) + message(FATAL_ERROR "Error running git ${git_hash_EV}") + else() + string(STRIP ${git_hash_OV} GRASS_HEADERS_GIT_HASH) + set(GRASS_HEADERS_GIT_HASH "${GRASS_HEADERS_GIT_HASH}" PARENT_SCOPE) + endif() - execute_process( - COMMAND ${GIT_EXECUTABLE} log -1 --pretty=format:%ct -- + execute_process( + COMMAND + ${GIT_EXECUTABLE} log -1 --pretty=format:%ct -- "${CMAKE_SOURCE_DIR}/include" - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_VARIABLE git_date_OV - ERROR_VARIABLE git_date_EV - RESULT_VARIABLE git_date_RV) + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE git_date_OV + ERROR_VARIABLE git_date_EV + RESULT_VARIABLE git_date_RV + ) - if(git_date_RV) - message(FATAL_ERROR "Error running git ${git_date_EV}") - else() - set(ENV{SOURCE_DATE_EPOCH} ${git_date_OV}) - string(TIMESTAMP GRASS_HEADERS_GIT_DATE ${time_format} UTC) - set(GRASS_HEADERS_GIT_DATE - "${GRASS_HEADERS_GIT_DATE}" - PARENT_SCOPE) - endif() + if(git_date_RV) + message(FATAL_ERROR "Error running git ${git_date_EV}") + else() + set(ENV{SOURCE_DATE_EPOCH} ${git_date_OV}) + string(TIMESTAMP GRASS_HEADERS_GIT_DATE ${time_format} UTC) + set(GRASS_HEADERS_GIT_DATE "${GRASS_HEADERS_GIT_DATE}" PARENT_SCOPE) + endif() endfunction() diff --git a/cmake/modules/set_compiler_flags.cmake b/cmake/modules/set_compiler_flags.cmake index 986b405dd2d..44637102a56 100644 --- a/cmake/modules/set_compiler_flags.cmake +++ b/cmake/modules/set_compiler_flags.cmake @@ -1,14 +1,14 @@ macro(set_compiler_flags) - if(MSVC) - set(GRASS_C_FLAGS - "/D_CRT_SECURE_NO_WARNINGS /DNOMINMAX /DGRASS_CMAKE_BUILD=1") - set(GRASS_CXX_FLAGS "${GRASS_C_FLAGS}") - else() - set(GRASS_C_FLAGS "-DGRASS_CMAKE_BUILD=1") - set(GRASS_CXX_FLAGS "${GRASS_C_FLAGS}") - endif() - - set(CMAKE_CXX_FLAGS "${GRASS_CXX_FLAGS} ${CMAKE_CXX_FLAGS}") - set(CMAKE_C_FLAGS "${GRASS_C_FLAGS} ${CMAKE_C_FLAGS}") + if(MSVC) + set(GRASS_C_FLAGS + "/D_CRT_SECURE_NO_WARNINGS /DNOMINMAX /DGRASS_CMAKE_BUILD=1" + ) + set(GRASS_CXX_FLAGS "${GRASS_C_FLAGS}") + else() + set(GRASS_C_FLAGS "-DGRASS_CMAKE_BUILD=1") + set(GRASS_CXX_FLAGS "${GRASS_C_FLAGS}") + endif() + set(CMAKE_CXX_FLAGS "${GRASS_CXX_FLAGS} ${CMAKE_CXX_FLAGS}") + set(CMAKE_C_FLAGS "${GRASS_C_FLAGS} ${CMAKE_C_FLAGS}") endmacro() diff --git a/db/CMakeLists.txt b/db/CMakeLists.txt index c3a89cf46e7..2c487509ee8 100644 --- a/db/CMakeLists.txt +++ b/db/CMakeLists.txt @@ -10,65 +10,80 @@ set(database_modules_list db.execute db.login db.select - db.tables) + db.tables +) add_custom_target( - ALL_DATABASE_MODULES ALL - DEPENDS ${db_modules_list} - COMMENT "All database modules are built.") + ALL_DATABASE_MODULES + ALL + DEPENDS ${db_modules_list} + COMMENT "All database modules are built." +) set_target_properties(ALL_DATABASE_MODULES PROPERTIES FOLDER Misc) if(WITH_DOCS) - generate_docs(databaseintro TARGET ALL_DATABASE_MODULES) + generate_docs(databaseintro TARGET ALL_DATABASE_MODULES) endif() set(db_drivers grass_gis) add_subdirectory(drivers) build_program_in_subdir(db.columns DEPENDS grass_gis grass_dbmibase - grass_dbmiclient grass_dbmidriver grass_parson) + grass_dbmiclient grass_dbmidriver grass_parson +) add_dependencies(db.columns ${db_drivers}) build_program_in_subdir(db.createdb DEPENDS grass_gis grass_dbmibase - grass_dbmiclient grass_dbmidriver) + grass_dbmiclient grass_dbmidriver +) add_dependencies(db.createdb ${db_drivers}) build_program_in_subdir(db.describe DEPENDS grass_gis grass_dbmibase - grass_dbmiclient grass_dbmidriver grass_parson) + grass_dbmiclient grass_dbmidriver grass_parson +) add_dependencies(db.describe ${db_drivers}) build_program_in_subdir(db.connect DEPENDS grass_gis grass_dbmibase - grass_dbmiclient grass_dbmidriver grass_parson) + grass_dbmiclient grass_dbmidriver grass_parson +) add_dependencies(db.connect ${db_drivers}) build_program_in_subdir(db.copy DEPENDS grass_gis grass_dbmibase - grass_dbmiclient grass_dbmidriver) + grass_dbmiclient grass_dbmidriver +) add_dependencies(db.copy ${db_drivers}) build_program_in_subdir(db.execute DEPENDS grass_gis grass_dbmibase - grass_dbmiclient grass_dbmidriver) + grass_dbmiclient grass_dbmidriver +) add_dependencies(db.execute ${db_drivers}) build_program_in_subdir(db.drivers DEPENDS grass_gis grass_dbmibase - grass_dbmiclient grass_dbmidriver) + grass_dbmiclient grass_dbmidriver +) add_dependencies(db.drivers ${db_drivers}) build_program_in_subdir(db.databases DEPENDS grass_gis grass_dbmibase - grass_dbmiclient grass_dbmidriver) + grass_dbmiclient grass_dbmidriver +) add_dependencies(db.databases ${db_drivers}) build_program_in_subdir(db.dropdb DEPENDS grass_gis grass_dbmibase - grass_dbmiclient grass_dbmidriver) + grass_dbmiclient grass_dbmidriver +) add_dependencies(db.dropdb ${db_drivers}) build_program_in_subdir(db.login DEPENDS grass_gis grass_dbmibase - grass_dbmiclient grass_dbmidriver) + grass_dbmiclient grass_dbmidriver +) add_dependencies(db.login ${db_drivers}) build_program_in_subdir(db.select DEPENDS grass_gis grass_dbmibase - grass_dbmiclient grass_dbmidriver grass_parson) + grass_dbmiclient grass_dbmidriver grass_parson +) add_dependencies(db.select ${db_drivers}) build_program_in_subdir(db.tables DEPENDS grass_gis grass_dbmibase - grass_dbmiclient grass_dbmidriver) + grass_dbmiclient grass_dbmidriver +) add_dependencies(db.tables ${db_drivers}) diff --git a/db/drivers/CMakeLists.txt b/db/drivers/CMakeLists.txt index ac9ac4dfc5d..61b0e793200 100644 --- a/db/drivers/CMakeLists.txt +++ b/db/drivers/CMakeLists.txt @@ -13,7 +13,8 @@ set(dbf_SRCS dbf/main.c dbf/select.c dbf/str.c - dbf/table.c) + dbf/table.c +) set(mysql_SRCS mysql/create_table.c @@ -29,12 +30,13 @@ set(mysql_SRCS mysql/main.c mysql/parse.c mysql/replace.c - mysql/select.c) + mysql/select.c +) set(db_drivers) set(grass_dbstubs_DEFS) if(MSVC) - set(grass_dbstubs_DEFS "-DDB_DRIVER_C=1") + set(grass_dbstubs_DEFS "-DDB_DRIVER_C=1") endif() build_program_in_subdir( dbf @@ -52,7 +54,8 @@ build_program_in_subdir( HTML_FILE_NAME grass-dbf RUNTIME_OUTPUT_DIR - "${GRASS_INSTALL_DRIVERDIR}/db") + "${GRASS_INSTALL_DRIVERDIR}/db" +) list(APPEND db_drivers dbf) @@ -71,7 +74,8 @@ build_program_in_subdir( HTML_FILE_NAME grass-ogr RUNTIME_OUTPUT_DIR - "${GRASS_INSTALL_DRIVERDIR}/db") + "${GRASS_INSTALL_DRIVERDIR}/db" +) list(APPEND db_drivers ogr) @@ -90,9 +94,10 @@ build_program_in_subdir( HTML_FILE_NAME grass-odbc RUNTIME_OUTPUT_DIR - "${GRASS_INSTALL_DRIVERDIR}/db") + "${GRASS_INSTALL_DRIVERDIR}/db" +) if(TARGET ODBC) - list(APPEND db_drivers odbc) + list(APPEND db_drivers odbc) endif() build_program_in_subdir( @@ -110,7 +115,8 @@ build_program_in_subdir( HTML_FILE_NAME grass-sqlite RUNTIME_OUTPUT_DIR - "${GRASS_INSTALL_DRIVERDIR}/db") + "${GRASS_INSTALL_DRIVERDIR}/db" +) if(TARGET SQLite3::SQLite3) list(APPEND db_drivers sqlite) @@ -133,10 +139,11 @@ build_program_in_subdir( HTML_FILE_NAME grass-pg RUNTIME_OUTPUT_DIR - "${GRASS_INSTALL_DRIVERDIR}/db") + "${GRASS_INSTALL_DRIVERDIR}/db" +) if(TARGET PostgreSQL::PostgreSQL) - list(APPEND db_drivers pg) + list(APPEND db_drivers pg) endif() build_program_in_subdir( @@ -156,18 +163,18 @@ build_program_in_subdir( HTML_FILE_NAME grass-mysql RUNTIME_OUTPUT_DIR - "${GRASS_INSTALL_DRIVERDIR}/db") + "${GRASS_INSTALL_DRIVERDIR}/db" +) if(TARGET MYSQL) - list(APPEND db_drivers mysql) + list(APPEND db_drivers mysql) - if(WITH_DOCS) - generate_docs(grass-mesql - TARGET mysql - SOURCEDIR ${CMAKE_CURRENT_SOURCE_DIR}/mysql) - endif() + if(WITH_DOCS) + generate_docs(grass-mesql + TARGET mysql + SOURCEDIR ${CMAKE_CURRENT_SOURCE_DIR}/mysql + ) + endif() endif() -set(db_drivers - ${db_drivers} - PARENT_SCOPE) +set(db_drivers ${db_drivers} PARENT_SCOPE) diff --git a/demolocation/CMakeLists.txt b/demolocation/CMakeLists.txt index d70c8654a04..f333de197fb 100644 --- a/demolocation/CMakeLists.txt +++ b/demolocation/CMakeLists.txt @@ -6,7 +6,8 @@ set(_srcfiles PROJ_UNITS PROJ_SRID PROJ_EPSG - MYNAME) + MYNAME +) set(_vectfiles dbln coor @@ -14,34 +15,46 @@ set(_vectfiles head cidx sidx - hist) + hist +) set(_sqlitefiles sqlite/sqlite.db) set(_sqlitemaps country_boundaries) list(TRANSFORM _vectfiles REPLACE "(.+)" "vector/${_sqlitemaps}/\\1") set(_src ${_srcfiles} ${_sqlitefiles} ${_vectfiles}) list(TRANSFORM _src PREPEND "PERMANENT/") -set(_srcdirs PERMANENT PERMANENT/vector PERMANENT/sqlite - PERMANENT/vector/${_sqlitemaps}) +set(_srcdirs + PERMANENT + PERMANENT/vector + PERMANENT/sqlite + PERMANENT/vector/${_sqlitemaps} +) set(_srcdirs_out ${_srcdirs}) list(TRANSFORM _srcdirs_out PREPEND "${OUTDIR}/${GRASS_INSTALL_DEMODIR}/") file(MAKE_DIRECTORY ${_srcdirs_out}) foreach(_s ${_src}) - get_filename_component(_s_dir ${_s} DIRECTORY) - file(COPY ${_s} DESTINATION ${OUTDIR}/${GRASS_INSTALL_DEMODIR}/${_s_dir}) - install(FILES ${OUTDIR}/${GRASS_INSTALL_DEMODIR}/${_s} - DESTINATION ${GRASS_INSTALL_DEMODIR}/${_s_dir}) + get_filename_component(_s_dir ${_s} DIRECTORY) + file(COPY ${_s} DESTINATION ${OUTDIR}/${GRASS_INSTALL_DEMODIR}/${_s_dir}) + install( + FILES ${OUTDIR}/${GRASS_INSTALL_DEMODIR}/${_s} + DESTINATION ${GRASS_INSTALL_DEMODIR}/${_s_dir} + ) endforeach() set(GISDBASE ${RUNTIME_GISBASE}) configure_file(${CMAKE_SOURCE_DIR}/demolocation/grassrc.tmpl "${GISRC}" @ONLY) set(GISDBASE ${GISBASE}) -configure_file(${CMAKE_SOURCE_DIR}/demolocation/grassrc.tmpl - "${CMAKE_CURRENT_BINARY_DIR}/${GISRC_NAME}" @ONLY) -install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${GISRC_NAME}" - DESTINATION "${GRASS_INSTALL_DEMODIR}") +configure_file( + ${CMAKE_SOURCE_DIR}/demolocation/grassrc.tmpl + "${CMAKE_CURRENT_BINARY_DIR}/${GISRC_NAME}" + @ONLY +) +install( + FILES "${CMAKE_CURRENT_BINARY_DIR}/${GISRC_NAME}" + DESTINATION "${GRASS_INSTALL_DEMODIR}" +) unset(GISDBASE) unset(_srcfiles) unset(_vectfiles) diff --git a/display/CMakeLists.txt b/display/CMakeLists.txt index 524c4bf2ab6..2fd840f7887 100644 --- a/display/CMakeLists.txt +++ b/display/CMakeLists.txt @@ -30,57 +30,74 @@ set(display_modules_list d.vect d.vect.chart d.vect.thematic - d.where) + d.where +) if(MSVC) - list(REMOVE_ITEM display_modules_list d.font d.mon) + list(REMOVE_ITEM display_modules_list d.font d.mon) endif() add_custom_target( - ALL_DISPLAY_MODULES ALL - DEPENDS ${display_modules_list} - COMMENT "All display modules are built.") + ALL_DISPLAY_MODULES + ALL + DEPENDS ${display_modules_list} + COMMENT "All display modules are built." +) set_target_properties(ALL_DISPLAY_MODULES PROPERTIES FOLDER Misc) if(WITH_DOCS) - generate_docs(displaydrivers TARGET ALL_DISPLAY_MODULES) + generate_docs(displaydrivers TARGET ALL_DISPLAY_MODULES) endif() build_program_in_subdir(d.barscale DEPENDS grass_symb grass_display grass_gis) -file(GLOB d_barscale_png - ${CMAKE_CURRENT_SOURCE_DIR}/d.barscale/thumbnails/*.png) +file( + GLOB d_barscale_png + ${CMAKE_CURRENT_SOURCE_DIR}/d.barscale/thumbnails/*.png +) add_custom_command( - TARGET d.barscale - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory - ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/barscales - COMMAND ${CMAKE_COMMAND} -E copy ${d_barscale_png} - ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/barscales - BYPRODUCTS ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/barscales) -install(DIRECTORY ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/barscales - DESTINATION ${GRASS_INSTALL_DOCDIR}) + TARGET d.barscale + POST_BUILD + COMMAND + ${CMAKE_COMMAND} -E make_directory + ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/barscales + COMMAND + ${CMAKE_COMMAND} -E copy ${d_barscale_png} + ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/barscales + BYPRODUCTS ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/barscales +) +install( + DIRECTORY ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/barscales + DESTINATION ${GRASS_INSTALL_DOCDIR} +) build_program_in_subdir(d.colorlist DEPENDS grass_gis grass_display - grass_raster) + grass_raster +) build_program_in_subdir(d.colortable DEPENDS grass_gis grass_display - grass_raster ${LIBM}) + grass_raster ${LIBM} +) build_program_in_subdir(d.erase DEPENDS grass_gis grass_display) if(NOT MSVC) - build_program_in_subdir(d.font DEPENDS grass_gis grass_display grass_raster) - # libgen.h does not exists on windows msvc - build_program_in_subdir(d.mon DEPENDS grass_gis grass_display) - copy_python_files_in_subdir(d.mon ${GRASS_INSTALL_ETCBINDIR} TARGET d.mon - POST_BUILD) + build_program_in_subdir(d.font DEPENDS grass_gis grass_display grass_raster) + # libgen.h does not exists on windows msvc + build_program_in_subdir(d.mon DEPENDS grass_gis grass_display) + copy_python_files_in_subdir(d.mon ${GRASS_INSTALL_ETCBINDIR} TARGET d.mon + POST_BUILD + ) endif() build_program_in_subdir(d.fontlist DEPENDS grass_gis grass_display grass_raster) build_program_in_subdir(d.geodesic DEPENDS grass_gis grass_display) build_program_in_subdir(d.graph DEPENDS grass_gis grass_symb grass_display) if(WITH_DOCS) - file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/d.graph/grass_logo.txt - DESTINATION ${OUTDIR}/${GRASS_INSTALL_DOCDIR}) - install(FILES ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/grass_logo.txt - DESTINATION ${GRASS_INSTALL_DOCDIR}) + file( + COPY ${CMAKE_CURRENT_SOURCE_DIR}/d.graph/grass_logo.txt + DESTINATION ${OUTDIR}/${GRASS_INSTALL_DOCDIR} + ) + install( + FILES ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/grass_logo.txt + DESTINATION ${GRASS_INSTALL_DOCDIR} + ) endif() build_program_in_subdir( d.grid @@ -89,10 +106,12 @@ build_program_in_subdir( grass_symb grass_gproj grass_display - ${LIBM}) + ${LIBM} +) build_program_in_subdir(d.his DEPENDS grass_gis grass_display grass_raster) build_program_in_subdir(d.histogram DEPENDS grass_gis grass_display - grass_raster ${LIBM}) + grass_raster ${LIBM} +) build_program_in_subdir(d.info DEPENDS grass_gis grass_display) build_program_in_subdir(d.labels DEPENDS grass_gis grass_display ${LIBM}) build_program_in_subdir( @@ -102,28 +121,40 @@ build_program_in_subdir( grass_display grass_raster grass_raster3d - ${LIBM}) + ${LIBM} +) build_program_in_subdir(d.legend.vect DEPENDS grass_gis grass_display - grass_symb ${LIBM}) + grass_symb ${LIBM} +) build_program_in_subdir(d.linegraph DEPENDS grass_gis grass_display grass_symb - grass_raster) + grass_raster +) build_program_in_subdir(d.northarrow DEPENDS grass_gis grass_display grass_symb - ${LIBM}) + ${LIBM} +) if(WITH_DOCS) - file(MAKE_DIRECTORY ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/northarrows) - file(GLOB d_northarrow_png - ${CMAKE_CURRENT_SOURCE_DIR}/d.northarrow/thumbnails/*.png) - file(COPY ${d_northarrow_png} - DESTINATION ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/northarrows) - install(DIRECTORY ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/northarrows - DESTINATION ${GRASS_INSTALL_DOCDIR}) + file(MAKE_DIRECTORY ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/northarrows) + file( + GLOB d_northarrow_png + ${CMAKE_CURRENT_SOURCE_DIR}/d.northarrow/thumbnails/*.png + ) + file( + COPY ${d_northarrow_png} + DESTINATION ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/northarrows + ) + install( + DIRECTORY ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/northarrows + DESTINATION ${GRASS_INSTALL_DOCDIR} + ) endif() build_program_in_subdir(d.path DEPENDS grass_gis grass_display grass_vector) build_program_in_subdir(d.profile DEPENDS grass_gis grass_display grass_raster - ${LIBM}) + ${LIBM} +) build_program_in_subdir(d.rast DEPENDS grass_gis grass_display grass_raster) build_program_in_subdir(d.rast.arrow DEPENDS grass_gis grass_raster - grass_display ${LIBM}) + grass_display ${LIBM} +) build_program_in_subdir(d.rast.num DEPENDS grass_gis grass_display grass_raster) build_program_in_subdir(d.redraw DEPENDS grass_gis grass_display) build_program_in_subdir(d.rgb DEPENDS grass_gis grass_display grass_raster) @@ -141,7 +172,8 @@ build_program_in_subdir( grass_raster grass_symb grass_vector - ${LIBM}) + ${LIBM} +) build_program_in_subdir( d.vect.chart DEPENDS @@ -152,7 +184,8 @@ build_program_in_subdir( grass_gis grass_symb grass_vector - ${LIBM}) + ${LIBM} +) build_program_in_subdir( d.vect.thematic DEPENDS @@ -163,5 +196,6 @@ build_program_in_subdir( grass_display grass_gis grass_symb - grass_vector) + grass_vector +) build_program_in_subdir(d.where DEPENDS grass_gis grass_display grass_gproj) diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 6f92ed6b68c..b062389bfea 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -1,41 +1,46 @@ -set(doc_files - grass_database - projectionintro) +set(doc_files grass_database projectionintro) set(img_files - create_new_project_gui.png - gi_3dview.jpg - gi_addons.jpg - gi_c.jpg - gi_cartography.jpg - gi_database.jpg - gi_display.jpg - gi_gallery.jpg - gi_general.jpg - gi_gui.jpg - gi_imagery.jpg - gi_miscellaneous.jpg - gi_python.jpg - gi_raster.jpg - gi_raster3d.jpg - gi_temporal.jpg - gi_vector.jpg - grass_arch.png - grass_database.png - jupyter_3d_map.png - jupyter_interactive_map.png - jupyter_map.png - jupyter_series_map.png - jupyter_timeseries_map.png - project.png) + create_new_project_gui.png + gi_3dview.jpg + gi_addons.jpg + gi_c.jpg + gi_cartography.jpg + gi_database.jpg + gi_display.jpg + gi_gallery.jpg + gi_general.jpg + gi_gui.jpg + gi_imagery.jpg + gi_miscellaneous.jpg + gi_python.jpg + gi_raster.jpg + gi_raster3d.jpg + gi_temporal.jpg + gi_vector.jpg + grass_arch.png + grass_database.png + jupyter_3d_map.png + jupyter_interactive_map.png + jupyter_map.png + jupyter_series_map.png + jupyter_timeseries_map.png + project.png +) -add_custom_target(ADD_DOC_DOCS ALL COMMENT "Generate doc/html docs." DEPENDS LIB_PYTHON) +add_custom_target( + ADD_DOC_DOCS + ALL + COMMENT "Generate doc/html docs." + DEPENDS LIB_PYTHON +) set_target_properties(ADD_DOC_DOCS PROPERTIES FOLDER Docs) generate_docs_list( TARGET ADD_DOC_DOCS DOC_FILES ${doc_files} - IMG_FILES ${img_files}) + IMG_FILES ${img_files} +) unset(doc_files) unset(img_files) diff --git a/general/CMakeLists.txt b/general/CMakeLists.txt index 5bd4e8175ee..52b5c344a6a 100644 --- a/general/CMakeLists.txt +++ b/general/CMakeLists.txt @@ -9,17 +9,22 @@ build_program_in_subdir(g.mapset DEPENDS grass_gis grass_parson) build_program_in_subdir(g.mapsets DEPENDS grass_gis grass_parson) build_program_in_subdir(g.message DEPENDS grass_gis) build_program_in_subdir(g.mkfontcap DEPENDS grass_gis PRIMARY_DEPENDS - Freetype::Freetype) + Freetype::Freetype +) add_dependencies(g.mkfontcap fonts) # TODO(FHS): revert GRASS_INSTALL_ETCBINDIR to GRASS_INSTALL_ETCDIR add_custom_command( - TARGET g.mkfontcap - POST_BUILD - COMMAND ${grass_env_command} ${OUTDIR}/${GRASS_INSTALL_BINDIR}/g.mkfontcap -s - > ${OUTDIR}/${GRASS_INSTALL_ETCBINDIR}/fontcap) -install(FILES ${OUTDIR}/${GRASS_INSTALL_ETCBINDIR}/fontcap - DESTINATION ${GRASS_INSTALL_ETCBINDIR}) + TARGET g.mkfontcap + POST_BUILD + COMMAND + ${grass_env_command} ${OUTDIR}/${GRASS_INSTALL_BINDIR}/g.mkfontcap -s > + ${OUTDIR}/${GRASS_INSTALL_ETCBINDIR}/fontcap +) +install( + FILES ${OUTDIR}/${GRASS_INSTALL_ETCBINDIR}/fontcap + DESTINATION ${GRASS_INSTALL_ETCBINDIR} +) build_program_in_subdir(g.parser DEPENDS grass_gis) build_program_in_subdir(g.pnmcomp DEPENDS grass_gis) build_program_in_subdir(g.ppmtopng DEPENDS grass_gis PRIMARY_DEPENDS PNG::PNG) @@ -31,7 +36,8 @@ build_program_in_subdir( grass_parson PROJ::proj OPTIONAL_DEPENDS - GDAL::GDAL) + GDAL::GDAL +) build_program_in_subdir( g.region @@ -44,7 +50,8 @@ build_program_in_subdir( grass_gmath grass_parson PROJ::proj - ${LIBM}) + ${LIBM} +) build_program_in_subdir(g.rename DEPENDS grass_gis grass_manage grass_raster) build_program_in_subdir(g.tempfile DEPENDS grass_gis) @@ -63,21 +70,21 @@ build_program_in_subdir( "-DGRASS_VERSION_NUMBER=\"${GRASS_VERSION_NUMBER}\"" "-DGRASS_VERSION_GIT=\"${GRASS_VERSION_GIT}\"" "-DGRASS_VERSION_UPDATE_PKG=${GRASS_VERSION_UPDATE_PKG}" - "-DARCH=\"${BUILD_ARCH}\"") + "-DARCH=\"${BUILD_ARCH}\"" +) -if(WITH_CAIRO - AND WITH_X11 - AND CAIRO_HAS_XLIB_XRENDER_SURFACE) - if(NOT MSVC) - build_program_in_subdir( - g.cairocomp - DEPENDS - grass_gis - Fontconfig::Fontconfig - X11::X11 - PRIMARY_DEPENDS - Cairo::Cairo) - endif() +if(WITH_CAIRO AND WITH_X11 AND CAIRO_HAS_XLIB_XRENDER_SURFACE) + if(NOT MSVC) + build_program_in_subdir( + g.cairocomp + DEPENDS + grass_gis + Fontconfig::Fontconfig + X11::X11 + PRIMARY_DEPENDS + Cairo::Cairo + ) + endif() endif() add_subdirectory(manage/lister) @@ -90,7 +97,8 @@ build_program_in_subdir( grass_raster grass_raster3d grass_vector - grass_parson) + grass_parson +) add_dependencies(g.list cell vector) build_program_in_subdir(g.remove DEPENDS grass_gis grass_manage grass_raster) diff --git a/general/manage/lister/CMakeLists.txt b/general/manage/lister/CMakeLists.txt index b167af6082a..f0339426703 100644 --- a/general/manage/lister/CMakeLists.txt +++ b/general/manage/lister/CMakeLists.txt @@ -10,7 +10,8 @@ build_program( grass_raster RUNTIME_OUTPUT_DIR "${GRASS_INSTALL_ETCDIR}/lister" - NO_DOCS) + NO_DOCS +) build_program( NAME @@ -24,4 +25,5 @@ build_program( grass_raster RUNTIME_OUTPUT_DIR "${GRASS_INSTALL_ETCDIR}/lister" - NO_DOCS) + NO_DOCS +) diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt index b63ac3ad1ce..21cbbd58eac 100644 --- a/gui/CMakeLists.txt +++ b/gui/CMakeLists.txt @@ -6,15 +6,20 @@ add_subdirectory(scripts) add_subdirectory(wxpython) add_custom_target( - grass_interface_dtd ALL - COMMAND ${CMAKE_COMMAND} -E make_directory - "${OUTDIR}/${GRASS_INSTALL_GUIDIR}/xml" - COMMAND - ${CMAKE_COMMAND} -E copy - "${CMAKE_CURRENT_SOURCE_DIR}/xml/grass-interface.dtd" - ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/xml) + grass_interface_dtd + ALL + COMMAND + ${CMAKE_COMMAND} -E make_directory + "${OUTDIR}/${GRASS_INSTALL_GUIDIR}/xml" + COMMAND + ${CMAKE_COMMAND} -E copy + "${CMAKE_CURRENT_SOURCE_DIR}/xml/grass-interface.dtd" + ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/xml +) add_dependencies(grass_interface_dtd GUI_WXPYTHON) set_target_properties(grass_interface_dtd PROPERTIES FOLDER GUI) -install(FILES ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/xml/grass-interface.dtd - DESTINATION ${GRASS_INSTALL_GUIDIR}/xml) +install( + FILES ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/xml/grass-interface.dtd + DESTINATION ${GRASS_INSTALL_GUIDIR}/xml +) diff --git a/gui/icons/CMakeLists.txt b/gui/icons/CMakeLists.txt index f700ab334c5..cc2919bbaca 100644 --- a/gui/icons/CMakeLists.txt +++ b/gui/icons/CMakeLists.txt @@ -3,51 +3,74 @@ file(GLOB GRASS_ICONS "grass/*.png") file(GLOB FLAGS_ICONS "flags/*.png") add_custom_target( - make_gui_icons_dirs - COMMAND ${CMAKE_COMMAND} -E make_directory - ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/icons/grass - COMMAND ${CMAKE_COMMAND} -E make_directory - ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/icons/flags - COMMAND ${CMAKE_COMMAND} -E make_directory - ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/icons - COMMAND ${CMAKE_COMMAND} -E make_directory - ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/images/symbols) + make_gui_icons_dirs + COMMAND + ${CMAKE_COMMAND} -E make_directory + ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/icons/grass + COMMAND + ${CMAKE_COMMAND} -E make_directory + ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/icons/flags + COMMAND + ${CMAKE_COMMAND} -E make_directory + ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/icons + COMMAND + ${CMAKE_COMMAND} -E make_directory + ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/images/symbols +) set_target_properties(make_gui_icons_dirs PROPERTIES FOLDER GUI) set(output_icons) foreach(ICON ${GUI_ICONS}) - get_filename_component(FILE_NAME ${ICON} NAME) - add_custom_command( - OUTPUT ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/icons/${FILE_NAME} - COMMAND ${CMAKE_COMMAND} -E copy ${ICON} - ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/icons) - list(APPEND output_icons ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/icons/${FILE_NAME}) + get_filename_component(FILE_NAME ${ICON} NAME) + add_custom_command( + OUTPUT ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/icons/${FILE_NAME} + COMMAND + ${CMAKE_COMMAND} -E copy ${ICON} + ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/icons + ) + list( + APPEND output_icons + ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/icons/${FILE_NAME} + ) endforeach() foreach(ICON ${GRASS_ICONS}) - get_filename_component(FILE_NAME ${ICON} NAME) - add_custom_command( - OUTPUT ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/icons/grass/${FILE_NAME} - COMMAND ${CMAKE_COMMAND} -E copy ${ICON} - ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/icons/grass) - list(APPEND output_icons - ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/icons/grass/${FILE_NAME}) + get_filename_component(FILE_NAME ${ICON} NAME) + add_custom_command( + OUTPUT ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/icons/grass/${FILE_NAME} + COMMAND + ${CMAKE_COMMAND} -E copy ${ICON} + ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/icons/grass + ) + list( + APPEND output_icons + ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/icons/grass/${FILE_NAME} + ) - add_custom_command( - OUTPUT ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/icons/${FILE_NAME} - COMMAND ${CMAKE_COMMAND} -E copy ${ICON} - ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/icons) - list(APPEND output_icons ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/icons/${FILE_NAME}) + add_custom_command( + OUTPUT ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/icons/${FILE_NAME} + COMMAND + ${CMAKE_COMMAND} -E copy ${ICON} + ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/icons + ) + list( + APPEND output_icons + ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/icons/${FILE_NAME} + ) endforeach() foreach(ICON ${FLAGS_ICONS}) - get_filename_component(FILE_NAME ${ICON} NAME) - add_custom_command( - OUTPUT ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/icons/flags/${FILE_NAME} - COMMAND ${CMAKE_COMMAND} -E copy ${ICON} - ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/icons/flags) - list(APPEND output_icons - ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/icons/flags/${FILE_NAME}) + get_filename_component(FILE_NAME ${ICON} NAME) + add_custom_command( + OUTPUT ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/icons/flags/${FILE_NAME} + COMMAND + ${CMAKE_COMMAND} -E copy ${ICON} + ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/icons/flags + ) + list( + APPEND output_icons + ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/icons/flags/${FILE_NAME} + ) endforeach() add_custom_target(gui_icons DEPENDS make_gui_icons_dirs ${output_icons}) @@ -59,30 +82,38 @@ install(FILES ${FLAGS_ICONS} DESTINATION ${GRASS_INSTALL_GUIDIR}/icons/flags) install(FILES ${GRASS_ICONS} DESTINATION ${GRASS_INSTALL_DOCDIR}/icons) install(FILES grass.desktop DESTINATION ${GRASS_INSTALL_SHAREDIR}/applications) foreach( - icon_type - 8 - 16 - 22 - 24 - 32 - 36 - 40 - 42 - 48 - 64 - 72 - 80 - 96 - 128 - 192) - set(icon_size "${icon_type}x${icon_type}") - install( - FILES grass-${icon_size}.png RENAME grass.png - DESTINATION ${GRASS_INSTALL_SHAREDIR}/icons/hicolor/${icon_size}/apps) + icon_type + 8 + 16 + 22 + 24 + 32 + 36 + 40 + 42 + 48 + 64 + 72 + 80 + 96 + 128 + 192 +) + set(icon_size "${icon_type}x${icon_type}") + install( + FILES grass-${icon_size}.png + RENAME grass.png + DESTINATION ${GRASS_INSTALL_SHAREDIR}/icons/hicolor/${icon_size}/apps + ) endforeach() -install(FILES grass.svg - DESTINATION ${GRASS_INSTALL_SHAREDIR}/icons/hicolor/scalable/apps) +install( + FILES grass.svg + DESTINATION ${GRASS_INSTALL_SHAREDIR}/icons/hicolor/scalable/apps +) -install(FILES grass.appdata.xml RENAME org.osgeo.grass.appdata.xml - DESTINATION ${GRASS_INSTALL_SHAREDIR}/metainfo) +install( + FILES grass.appdata.xml + RENAME org.osgeo.grass.appdata.xml + DESTINATION ${GRASS_INSTALL_SHAREDIR}/metainfo +) diff --git a/gui/images/CMakeLists.txt b/gui/images/CMakeLists.txt index 49f2640d0cb..1dc6d696c79 100644 --- a/gui/images/CMakeLists.txt +++ b/gui/images/CMakeLists.txt @@ -2,41 +2,60 @@ file(GLOB GUI_IMAGES "*.png") set(output_images) foreach(IMG ${GUI_IMAGES}) - get_filename_component(FILE_NAME ${IMG} NAME) - add_custom_command( - OUTPUT ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/images/${FILE_NAME} - COMMAND ${CMAKE_COMMAND} -E copy ${IMG} - ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/images) - list(APPEND output_images - ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/images/${FILE_NAME}) + get_filename_component(FILE_NAME ${IMG} NAME) + add_custom_command( + OUTPUT ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/images/${FILE_NAME} + COMMAND + ${CMAKE_COMMAND} -E copy ${IMG} + ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/images + ) + list( + APPEND output_images + ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/images/${FILE_NAME} + ) endforeach() if(CMAKE_VERSION VERSION_LESS 3.17) - set(RM remove) + set(RM remove) else() - set(RM rm) + set(RM rm) endif() add_custom_target( - gui_images - COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/symbols - ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/images/symbols - COMMAND ${CMAKE_COMMAND} -E ${RM} - ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/images/symbols/README - DEPENDS gui_icons ${output_images}) + gui_images + COMMAND + ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/symbols + ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/images/symbols + COMMAND + ${CMAKE_COMMAND} -E ${RM} + ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/images/symbols/README + DEPENDS gui_icons ${output_images} +) set_target_properties(gui_images PROPERTIES FOLDER GUI) install(FILES ${GUI_IMAGES} DESTINATION ${GRASS_INSTALL_GUIDIR}/images) -install(DIRECTORY symbols/basic - DESTINATION ${GRASS_INSTALL_GUIDIR}/images/symbols) -install(DIRECTORY symbols/demo - DESTINATION ${GRASS_INSTALL_GUIDIR}/images/symbols) -install(DIRECTORY symbols/extra - DESTINATION ${GRASS_INSTALL_GUIDIR}/images/symbols) -install(DIRECTORY symbols/geology - DESTINATION ${GRASS_INSTALL_GUIDIR}/images/symbols) -install(DIRECTORY symbols/legend - DESTINATION ${GRASS_INSTALL_GUIDIR}/images/symbols) -install(DIRECTORY symbols/n_arrows - DESTINATION ${GRASS_INSTALL_GUIDIR}/images/symbols) +install( + DIRECTORY symbols/basic + DESTINATION ${GRASS_INSTALL_GUIDIR}/images/symbols +) +install( + DIRECTORY symbols/demo + DESTINATION ${GRASS_INSTALL_GUIDIR}/images/symbols +) +install( + DIRECTORY symbols/extra + DESTINATION ${GRASS_INSTALL_GUIDIR}/images/symbols +) +install( + DIRECTORY symbols/geology + DESTINATION ${GRASS_INSTALL_GUIDIR}/images/symbols +) +install( + DIRECTORY symbols/legend + DESTINATION ${GRASS_INSTALL_GUIDIR}/images/symbols +) +install( + DIRECTORY symbols/n_arrows + DESTINATION ${GRASS_INSTALL_GUIDIR}/images/symbols +) diff --git a/gui/scripts/CMakeLists.txt b/gui/scripts/CMakeLists.txt index 7cadce3af5c..66c5200c13a 100644 --- a/gui/scripts/CMakeLists.txt +++ b/gui/scripts/CMakeLists.txt @@ -5,6 +5,7 @@ TODO: maybe add /scripts/windows_launch.bat, see Makefile set(gui_scripts d.rast3d d.wms) foreach(script_file ${gui_scripts}) - build_script_in_subdir(${script_file} PLAIN_PY NO_DOCS DEST_DIR - ${GRASS_INSTALL_GUISCRIPTDIR}) + build_script_in_subdir(${script_file} PLAIN_PY NO_DOCS DEST_DIR + ${GRASS_INSTALL_GUISCRIPTDIR} + ) endforeach() diff --git a/gui/wxpython/CMakeLists.txt b/gui/wxpython/CMakeLists.txt index d0a8e91fc3c..879e4607e23 100644 --- a/gui/wxpython/CMakeLists.txt +++ b/gui/wxpython/CMakeLists.txt @@ -15,20 +15,25 @@ set(gui_lib_DIRS startup vnet web_services - wxplot) + wxplot +) set(gui_lib_targets) foreach(gui_lib_DIR ${gui_lib_DIRS}) - copy_python_files_in_subdir(${gui_lib_DIR} ${WXPYTHON_DIR}) - list(APPEND gui_lib_targets python_${gui_lib_DIR}) - install(DIRECTORY "${OUTDIR}/${WXPYTHON_DIR}/${gui_lib_DIR}" - DESTINATION "${WXPYTHON_DIR}") + copy_python_files_in_subdir(${gui_lib_DIR} ${WXPYTHON_DIR}) + list(APPEND gui_lib_targets python_${gui_lib_DIR}) + install( + DIRECTORY "${OUTDIR}/${WXPYTHON_DIR}/${gui_lib_DIR}" + DESTINATION "${WXPYTHON_DIR}" + ) endforeach() add_custom_target( - GUI_WXPYTHON - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/wxgui.py - ${OUTDIR}/${WXPYTHON_DIR} - DEPENDS ${gui_lib_targets} LIB_PYTHON) + GUI_WXPYTHON + COMMAND + ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/wxgui.py + ${OUTDIR}/${WXPYTHON_DIR} + DEPENDS ${gui_lib_targets} LIB_PYTHON +) set_target_properties(GUI_WXPYTHON PROPERTIES FOLDER GUI) @@ -47,109 +52,129 @@ set(gui_DIRS timeline tplot rdigit - vdigit) + vdigit +) set(g_gui_targets) foreach(gui_DIR ${gui_DIRS}) - build_gui_in_subdir(${gui_DIR}) - list(APPEND g_gui_targets "g.gui.${gui_DIR}") + build_gui_in_subdir(${gui_DIR}) + list(APPEND g_gui_targets "g.gui.${gui_DIR}") endforeach() if(WITH_DOCS) - add_subdirectory(docs) + add_subdirectory(docs) endif() -install(FILES README.md ${OUTDIR}/${WXPYTHON_DIR}/wxgui.py - DESTINATION ${WXPYTHON_DIR}) +install( + FILES README.md ${OUTDIR}/${WXPYTHON_DIR}/wxgui.py + DESTINATION ${WXPYTHON_DIR} +) add_custom_target( - copy_wxpython_xml - COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/xml - ${OUTDIR}/${WXPYTHON_DIR}/xml) + copy_wxpython_xml + COMMAND + ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/xml + ${OUTDIR}/${WXPYTHON_DIR}/xml +) add_dependencies(copy_wxpython_xml GUI_WXPYTHON) set_target_properties(copy_wxpython_xml PROPERTIES FOLDER GUI) add_custom_target( - compile_python_files - COMMAND ${PYTHON_EXECUTABLE} -m compileall - ${OUTDIR}/${GRASS_INSTALL_SCRIPTDIR} - COMMAND ${PYTHON_EXECUTABLE} -m compileall ${OUTDIR}/${WXPYTHON_DIR}) + compile_python_files + COMMAND + ${PYTHON_EXECUTABLE} -m compileall ${OUTDIR}/${GRASS_INSTALL_SCRIPTDIR} + COMMAND ${PYTHON_EXECUTABLE} -m compileall ${OUTDIR}/${WXPYTHON_DIR} +) add_dependencies(compile_python_files ALL_MODULES) set_target_properties(compile_python_files PROPERTIES FOLDER GUI) add_custom_command( - OUTPUT "${OUTDIR}/${WXPYTHON_DIR}/xml/module_items.xml" - COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/tools" - COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/tools/build_modules_xml.py tools - COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} tools/build_modules_xml.py > - "${OUTDIR}/${WXPYTHON_DIR}/xml/module_items.xml" - COMMENT "Generating interface description for all modules...") - -add_custom_target(build_modules_items_xml - DEPENDS "${OUTDIR}/${WXPYTHON_DIR}/xml/module_items.xml") - -add_dependencies(build_modules_items_xml copy_wxpython_xml grass_interface_dtd - compile_python_files ${g_gui_targets}) + OUTPUT "${OUTDIR}/${WXPYTHON_DIR}/xml/module_items.xml" + COMMAND + ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/tools" + COMMAND + ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/tools/build_modules_xml.py tools + COMMAND + ${grass_env_command} ${PYTHON_EXECUTABLE} tools/build_modules_xml.py > + "${OUTDIR}/${WXPYTHON_DIR}/xml/module_items.xml" + COMMENT "Generating interface description for all modules..." +) + +add_custom_target( + build_modules_items_xml + DEPENDS "${OUTDIR}/${WXPYTHON_DIR}/xml/module_items.xml" +) + +add_dependencies( + build_modules_items_xml + copy_wxpython_xml + grass_interface_dtd + compile_python_files + ${g_gui_targets} +) set_target_properties(build_modules_items_xml PROPERTIES FOLDER GUI) # TODO(FHS): remove this if condition if(NOT WITH_FHS) - -add_custom_target( - build_xml_menudata - COMMAND - ${grass_env_command} ${PYTHON_EXECUTABLE} - ${CMAKE_CURRENT_SOURCE_DIR}/core/toolboxes.py > - ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/menudata.xml - COMMAND - ${grass_env_command} ${PYTHON_EXECUTABLE} - ${CMAKE_CURRENT_SOURCE_DIR}/core/toolboxes.py "validate" - ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/menudata.xml - COMMAND - ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/menudata.xml - ${OUTDIR}/${WXPYTHON_DIR}/xml - DEPENDS build_modules_items_xml) - -set_target_properties(build_xml_menudata PROPERTIES FOLDER GUI) - -add_custom_target( - build_module_tree_menudata - COMMAND - ${grass_env_command} ${PYTHON_EXECUTABLE} - ${CMAKE_CURRENT_SOURCE_DIR}/core/toolboxes.py "module_tree" > - ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/module_tree_menudata.xml - COMMAND - ${grass_env_command} ${PYTHON_EXECUTABLE} - ${CMAKE_CURRENT_SOURCE_DIR}/core/toolboxes.py "validate" - ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/module_tree_menudata.xml - COMMAND - ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/module_tree_menudata.xml - ${OUTDIR}/${WXPYTHON_DIR}/xml - DEPENDS build_xml_menudata) - -set_target_properties(build_module_tree_menudata PROPERTIES FOLDER GUI) - -add_custom_target( - build_menustrings ALL - COMMAND - ${grass_env_command} ${PYTHON_EXECUTABLE} - ${CMAKE_CURRENT_SOURCE_DIR}/core/menutree.py "manager" >> - ${CMAKE_CURRENT_SOURCE_DIR}/menustrings.py - COMMAND - ${grass_env_command} ${PYTHON_EXECUTABLE} - ${CMAKE_CURRENT_SOURCE_DIR}/core/menutree.py "module_tree" >> - ${CMAKE_CURRENT_SOURCE_DIR}/menustrings.py - COMMAND - ${grass_env_command} ${PYTHON_EXECUTABLE} - ${CMAKE_CURRENT_SOURCE_DIR}/core/menutree.py "psmap" >> - ${CMAKE_CURRENT_SOURCE_DIR}/menustrings.py - DEPENDS build_module_tree_menudata gui_images) - -set_target_properties(build_menustrings PROPERTIES FOLDER GUI) - + add_custom_target( + build_xml_menudata + COMMAND + ${grass_env_command} ${PYTHON_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/core/toolboxes.py > + ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/menudata.xml + COMMAND + ${grass_env_command} ${PYTHON_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/core/toolboxes.py "validate" + ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/menudata.xml + COMMAND + ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/menudata.xml + ${OUTDIR}/${WXPYTHON_DIR}/xml + DEPENDS build_modules_items_xml + ) + + set_target_properties(build_xml_menudata PROPERTIES FOLDER GUI) + + add_custom_target( + build_module_tree_menudata + COMMAND + ${grass_env_command} ${PYTHON_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/core/toolboxes.py "module_tree" > + ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/module_tree_menudata.xml + COMMAND + ${grass_env_command} ${PYTHON_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/core/toolboxes.py "validate" + ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/module_tree_menudata.xml + COMMAND + ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/module_tree_menudata.xml + ${OUTDIR}/${WXPYTHON_DIR}/xml + DEPENDS build_xml_menudata + ) + + set_target_properties(build_module_tree_menudata PROPERTIES FOLDER GUI) + + add_custom_target( + build_menustrings + ALL + COMMAND + ${grass_env_command} ${PYTHON_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/core/menutree.py "manager" >> + ${CMAKE_CURRENT_SOURCE_DIR}/menustrings.py + COMMAND + ${grass_env_command} ${PYTHON_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/core/menutree.py "module_tree" >> + ${CMAKE_CURRENT_SOURCE_DIR}/menustrings.py + COMMAND + ${grass_env_command} ${PYTHON_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/core/menutree.py "psmap" >> + ${CMAKE_CURRENT_SOURCE_DIR}/menustrings.py + DEPENDS build_module_tree_menudata gui_images + ) + + set_target_properties(build_menustrings PROPERTIES FOLDER GUI) endif() # NOT WITH_FHS install(DIRECTORY "${OUTDIR}/${WXPYTHON_DIR}/xml" DESTINATION "${WXPYTHON_DIR}") diff --git a/gui/wxpython/docs/CMakeLists.txt b/gui/wxpython/docs/CMakeLists.txt index a34534fd5c4..4467b8ebd9d 100644 --- a/gui/wxpython/docs/CMakeLists.txt +++ b/gui/wxpython/docs/CMakeLists.txt @@ -5,7 +5,8 @@ set(doc_files wxGUI.modules wxGUI.nviz wxGUI.toolboxes - wxGUI.vnet) + wxGUI.vnet +) set(img_files wxGUI_iscatt.jpg @@ -25,7 +26,8 @@ set(img_files wxGUI_nviz_tools_view.jpg wxGUI_nviz_tools_volume.jpg wxGUI_toolboxes.jpg - wxGUI_vnet.jpg) + wxGUI_vnet.jpg +) add_custom_target(wxpython_docs DEPENDS grass_gis LIB_PYTHON) add_dependencies(GUI_WXPYTHON wxpython_docs) @@ -34,7 +36,8 @@ set_target_properties(wxpython_docs PROPERTIES FOLDER GUI) generate_docs_list( TARGET wxpython_docs DOC_FILES ${doc_files} - IMG_FILES ${img_files}) + IMG_FILES ${img_files} +) unset(doc_files) unset(img_files) diff --git a/imagery/CMakeLists.txt b/imagery/CMakeLists.txt index 364cc29ece8..e16ad969c2c 100644 --- a/imagery/CMakeLists.txt +++ b/imagery/CMakeLists.txt @@ -34,53 +34,64 @@ set(imagery_modules_list i.smap i.target i.topo.corr - i.vi) + i.vi +) if(WITH_FFTW) - list(APPEND imagery_modules_list i.zc) + list(APPEND imagery_modules_list i.zc) endif() if(WITH_LIBSVM) - build_program_in_subdir( - i.svm.predict - DEPENDS - grass_imagery - grass_raster - grass_gis - LibSVM::LibSVM) - - build_program_in_subdir( - i.svm.train - DEPENDS - grass_imagery - grass_raster - grass_vector - grass_gis - LibSVM::LibSVM) + build_program_in_subdir( + i.svm.predict + DEPENDS + grass_imagery + grass_raster + grass_gis + LibSVM::LibSVM + ) + + build_program_in_subdir( + i.svm.train + DEPENDS + grass_imagery + grass_raster + grass_vector + grass_gis + LibSVM::LibSVM + ) list(APPEND imagery_modules_list i.svm.predict i.svm.train) endif() add_custom_target( - ALL_IMAGERY_MODULES ALL - DEPENDS ${imagery_modules_list} - COMMENT "All imagery modules are built.") + ALL_IMAGERY_MODULES + ALL + DEPENDS ${imagery_modules_list} + COMMENT "All imagery modules are built." +) set_target_properties(ALL_IMAGERY_MODULES PROPERTIES FOLDER Misc) if(WITH_DOCS) - generate_docs(imageryintro TARGET ALL_IMAGERY_MODULES) - - file(COPY ${CMAKE_SOURCE_DIR}/lib/imagery/band_references_scheme.png - DESTINATION ${OUTDIR}/${GRASS_INSTALL_DOCDIR}) - install(FILES ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/band_references_scheme.png - DESTINATION ${GRASS_INSTALL_DOCDIR}) + generate_docs(imageryintro TARGET ALL_IMAGERY_MODULES) + + file( + COPY ${CMAKE_SOURCE_DIR}/lib/imagery/band_references_scheme.png + DESTINATION ${OUTDIR}/${GRASS_INSTALL_DOCDIR} + ) + install( + FILES ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/band_references_scheme.png + DESTINATION ${GRASS_INSTALL_DOCDIR} + ) endif() build_program_in_subdir(i.albedo DEPENDS grass_imagery grass_raster - grass_vector grass_gis) + grass_vector grass_gis +) build_program_in_subdir(i.aster.toar DEPENDS grass_imagery grass_raster - grass_vector grass_gis ${LIBM}) + grass_vector grass_gis ${LIBM} +) build_program_in_subdir( i.atcorr @@ -92,10 +103,12 @@ build_program_in_subdir( grass_btree2 ${LIBM} SRC_REGEX - "*.cpp") + "*.cpp" +) build_program_in_subdir(i.biomass DEPENDS grass_imagery grass_raster - grass_vector grass_gis ${LIBM}) + grass_vector grass_gis ${LIBM} +) build_program_in_subdir( i.cca DEPENDS @@ -104,7 +117,8 @@ build_program_in_subdir( grass_vector grass_gis grass_gmath - ${LIBM}) + ${LIBM} +) build_program_in_subdir( i.cluster DEPENDS @@ -112,29 +126,40 @@ build_program_in_subdir( grass_raster grass_vector grass_gis - grass_cluster) + grass_cluster +) build_program_in_subdir(i.eb.evapfr DEPENDS grass_imagery grass_raster - grass_vector grass_gis ${LIBM}) + grass_vector grass_gis ${LIBM} +) build_program_in_subdir(i.eb.eta DEPENDS grass_imagery grass_raster - grass_vector grass_gis ${LIBM}) + grass_vector grass_gis ${LIBM} +) build_program_in_subdir(i.eb.hsebal01 DEPENDS grass_imagery grass_raster - grass_vector grass_gis ${LIBM}) + grass_vector grass_gis ${LIBM} +) build_program_in_subdir(i.eb.netrad DEPENDS grass_imagery grass_raster - grass_vector grass_gis ${LIBM}) + grass_vector grass_gis ${LIBM} +) build_program_in_subdir(i.eb.soilheatflux DEPENDS grass_imagery grass_raster - grass_vector grass_gis ${LIBM}) + grass_vector grass_gis ${LIBM} +) build_program_in_subdir(i.evapo.mh DEPENDS grass_imagery grass_raster - grass_vector grass_gis ${LIBM}) + grass_vector grass_gis ${LIBM} +) build_program_in_subdir(i.evapo.pm DEPENDS grass_imagery grass_raster - grass_vector grass_gis ${LIBM}) + grass_vector grass_gis ${LIBM} +) build_program_in_subdir(i.evapo.pt DEPENDS grass_imagery grass_raster - grass_vector grass_gis ${LIBM}) + grass_vector grass_gis ${LIBM} +) build_program_in_subdir(i.evapo.time DEPENDS grass_imagery grass_raster - grass_vector grass_gis) + grass_vector grass_gis +) build_program_in_subdir(i.emissivity DEPENDS grass_imagery grass_raster - grass_vector grass_gis ${LIBM}) + grass_vector grass_gis ${LIBM} +) build_program_in_subdir( i.find DEPENDS @@ -146,10 +171,12 @@ build_program_in_subdir( "grassmods" RUNTIME_OUTPUT_DIR ${GRASS_INSTALL_ETCDIR} - NO_DOC) + NO_DOC +) build_program_in_subdir(i.gensig DEPENDS grass_imagery grass_raster - grass_vector grass_gis ${LIBM}) + grass_vector grass_gis ${LIBM} +) build_program_in_subdir( i.gensigset @@ -159,28 +186,36 @@ build_program_in_subdir( grass_vector grass_gis grass_gmath - ${LIBM}) + ${LIBM} +) build_program_in_subdir(i.group DEPENDS grass_imagery grass_raster grass_vector - grass_gis grass_parson) + grass_gis grass_parson +) build_program_in_subdir(i.his.rgb DEPENDS grass_imagery grass_raster - grass_vector grass_gis) + grass_vector grass_gis +) build_program_in_subdir(i.landsat.toar DEPENDS grass_imagery grass_raster - grass_vector grass_gis ${LIBM}) + grass_vector grass_gis ${LIBM} +) build_program_in_subdir(i.maxlik DEPENDS grass_imagery grass_raster - grass_vector grass_gis ${LIBM}) + grass_vector grass_gis ${LIBM} +) build_program_in_subdir(i.modis.qc DEPENDS grass_imagery grass_raster - grass_vector grass_gis) + grass_vector grass_gis +) build_program_in_subdir(i.rectify DEPENDS grass_imagery grass_raster - grass_vector grass_gis ${LIBM}) + grass_vector grass_gis ${LIBM} +) build_program_in_subdir(i.rgb.his DEPENDS grass_imagery grass_raster - grass_vector grass_gis) + grass_vector grass_gis +) build_program_in_subdir( i.segment @@ -190,7 +225,8 @@ build_program_in_subdir( grass_vector grass_gis grass_segment - ${LIBM}) + ${LIBM} +) build_program_in_subdir(i.signatures DEPENDS grass_imagery grass_gis) @@ -202,13 +238,16 @@ build_program_in_subdir( grass_vector grass_gis grass_gmath - ${LIBM}) + ${LIBM} +) build_program_in_subdir(i.target DEPENDS grass_imagery grass_raster - grass_vector grass_gis) + grass_vector grass_gis +) build_program_in_subdir(i.topo.corr DEPENDS grass_imagery grass_raster - grass_vector grass_gis ${LIBM}) + grass_vector grass_gis ${LIBM} +) build_program_in_subdir( i.pca @@ -218,22 +257,25 @@ build_program_in_subdir( grass_vector grass_gis grass_gmath - ${LIBM}) + ${LIBM} +) build_program_in_subdir(i.vi DEPENDS grass_imagery grass_raster grass_vector - grass_gis ${LIBM}) + grass_gis ${LIBM} +) if(WITH_FFTW) - build_program_in_subdir( - i.zc - DEPENDS - grass_imagery - grass_raster - grass_vector - grass_gis - grass_gmath) + build_program_in_subdir( + i.zc + DEPENDS + grass_imagery + grass_raster + grass_vector + grass_gis + grass_gmath + ) else() - message(STATUS "i.zc disabled because FFTW is not available") + message(STATUS "i.zc disabled because FFTW is not available") endif() build_program_in_subdir( @@ -244,7 +286,8 @@ build_program_in_subdir( grass_gmath grass_gis PRIMARY_DEPENDS - FFTW) + FFTW +) build_program_in_subdir( i.ifft @@ -254,7 +297,8 @@ build_program_in_subdir( grass_gmath grass_btree2 PRIMARY_DEPENDS - FFTW) + FFTW +) build_program_in_subdir(i.landsat.acca DEPENDS grass_raster grass_gis ${LIBM}) diff --git a/imagery/i.ortho.photo/CMakeLists.txt b/imagery/i.ortho.photo/CMakeLists.txt index 2a37e970a1b..ba2e145b840 100644 --- a/imagery/i.ortho.photo/CMakeLists.txt +++ b/imagery/i.ortho.photo/CMakeLists.txt @@ -6,13 +6,16 @@ build_library_in_subdir( ${LIBM} grass_gis grass_imagery - grass_gmath) + grass_gmath +) build_program_in_subdir(i.ortho.camera DEPENDS grass_iortho grass_imagery - grass_gis grass_gmath) + grass_gis grass_gmath +) build_program_in_subdir(i.ortho.elev DEPENDS grass_iortho grass_imagery - grass_gis grass_gmath) + grass_gis grass_gmath +) build_program_in_subdir( i.ortho.init @@ -21,10 +24,12 @@ build_program_in_subdir( grass_imagery grass_gis grass_gmath - grass_raster) + grass_raster +) build_program_in_subdir(i.ortho.photo DEPENDS grass_iortho grass_imagery - grass_gis) + grass_gis +) build_program_in_subdir( i.ortho.rectify @@ -34,10 +39,13 @@ build_program_in_subdir( grass_gis grass_gmath grass_raster - ${LIBM}) + ${LIBM} +) build_program_in_subdir(i.ortho.target DEPENDS grass_iortho grass_imagery - grass_gis) + grass_gis +) build_program_in_subdir(i.ortho.transform DEPENDS grass_iortho grass_imagery - grass_gis grass_gmath ${LIBM}) + grass_gis grass_gmath ${LIBM} +) diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt index dc1d6c02beb..bd6ae3c5af7 100644 --- a/include/CMakeLists.txt +++ b/include/CMakeLists.txt @@ -1,151 +1,168 @@ set(SRCHS - arraystats.h - bitmap.h - btree.h - calc.h - cdhc.h - cluster.h - colors.h - datetime.h - dbmi.h - display.h - fontcap.h - form.h - gis.h - glocale.h - gmath.h - gprojects.h - imagery.h - la.h - linkm.h - manage.h - neta.h - nviz.h - ogsf.h - ortholib.h - raster.h - raster3d.h - rbtree.h - rowio.h - segment.h - spawn.h - sqlp.h - stats.h - symbol.h - temporal.h - vector.h - vedit.h - defs/arraystats.h - defs/bitmap.h - defs/btree.h - defs/calc.h - defs/cdhc.h - defs/cluster.h - defs/colors.h - defs/datetime.h - defs/dbmi.h - defs/devlib.h - defs/dig_atts.h - defs/display.h - defs/form.h - defs/gis.h - defs/glocale.h - defs/gmath.h - defs/gprojects.h - defs/imagery.h - defs/la.h - defs/linkm.h - defs/manage.h - defs/neta.h - defs/nviz.h - defs/ogsf.h - defs/ortholib.h - defs/Paintlib.h - defs/raster.h - defs/raster3d.h - defs/rbtree.h - defs/rowio.h - defs/segment.h - defs/spawn.h - defs/sqlp.h - defs/stats.h - defs/symbol.h - defs/vector.h - defs/vedit.h - iostream/ami_config.h - iostream/ami_sort_impl.h - iostream/ami_sort.h - iostream/ami_stream.h - iostream/ami.h - iostream/embuffer.h - iostream/empq_adaptive_impl.h - iostream/empq_adaptive.h - iostream/empq_impl.h - iostream/empq.h - iostream/imbuffer.h - iostream/mem_stream.h - iostream/minmaxheap.h - iostream/mm_utils.h - iostream/mm.h - iostream/pqheap.h - iostream/queue.h - iostream/quicksort.h - iostream/replacementHeap.h - iostream/replacementHeapBlock.h - iostream/rtimer.h - vect/dig_defines.h - vect/dig_externs.h - vect/dig_macros.h - vect/dig_structs.h - vect/digit.h) + arraystats.h + bitmap.h + btree.h + calc.h + cdhc.h + cluster.h + colors.h + datetime.h + dbmi.h + display.h + fontcap.h + form.h + gis.h + glocale.h + gmath.h + gprojects.h + imagery.h + la.h + linkm.h + manage.h + neta.h + nviz.h + ogsf.h + ortholib.h + raster.h + raster3d.h + rbtree.h + rowio.h + segment.h + spawn.h + sqlp.h + stats.h + symbol.h + temporal.h + vector.h + vedit.h + defs/arraystats.h + defs/bitmap.h + defs/btree.h + defs/calc.h + defs/cdhc.h + defs/cluster.h + defs/colors.h + defs/datetime.h + defs/dbmi.h + defs/devlib.h + defs/dig_atts.h + defs/display.h + defs/form.h + defs/gis.h + defs/glocale.h + defs/gmath.h + defs/gprojects.h + defs/imagery.h + defs/la.h + defs/linkm.h + defs/manage.h + defs/neta.h + defs/nviz.h + defs/ogsf.h + defs/ortholib.h + defs/Paintlib.h + defs/raster.h + defs/raster3d.h + defs/rbtree.h + defs/rowio.h + defs/segment.h + defs/spawn.h + defs/sqlp.h + defs/stats.h + defs/symbol.h + defs/vector.h + defs/vedit.h + iostream/ami_config.h + iostream/ami_sort_impl.h + iostream/ami_sort.h + iostream/ami_stream.h + iostream/ami.h + iostream/embuffer.h + iostream/empq_adaptive_impl.h + iostream/empq_adaptive.h + iostream/empq_impl.h + iostream/empq.h + iostream/imbuffer.h + iostream/mem_stream.h + iostream/minmaxheap.h + iostream/mm_utils.h + iostream/mm.h + iostream/pqheap.h + iostream/queue.h + iostream/quicksort.h + iostream/replacementHeap.h + iostream/replacementHeapBlock.h + iostream/rtimer.h + vect/dig_defines.h + vect/dig_externs.h + vect/dig_macros.h + vect/dig_structs.h + vect/digit.h +) list(TRANSFORM SRCHS PREPEND "${CMAKE_CURRENT_SOURCE_DIR}/grass/") set(include_depends) foreach(srch ${SRCHS}) - get_filename_component(srch_DIR ${srch} DIRECTORY) - get_filename_component(srch_NAME ${srch} NAME) - string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" dsth_DIR "${srch_DIR}") - set(output_dir ${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/${dsth_DIR}) - add_custom_command( - OUTPUT ${output_dir}/${srch_NAME} - COMMAND ${CMAKE_COMMAND} -E make_directory ${output_dir} - COMMAND ${CMAKE_COMMAND} -E copy ${srch} ${output_dir} - COMMENT "Copy ${srch} to ${output_dir}/${srch_NAME}") - list(APPEND include_depends ${output_dir}/${srch_NAME}) + get_filename_component(srch_DIR ${srch} DIRECTORY) + get_filename_component(srch_NAME ${srch} NAME) + string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" dsth_DIR "${srch_DIR}") + set(output_dir ${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/${dsth_DIR}) + add_custom_command( + OUTPUT ${output_dir}/${srch_NAME} + COMMAND ${CMAKE_COMMAND} -E make_directory ${output_dir} + COMMAND ${CMAKE_COMMAND} -E copy ${srch} ${output_dir} + COMMENT "Copy ${srch} to ${output_dir}/${srch_NAME}" + ) + list(APPEND include_depends ${output_dir}/${srch_NAME}) endforeach() add_custom_target(INCLUDE_HEADERS DEPENDS ${include_depends} LIB_PYTHON) -target_sources(INCLUDE_HEADERS PRIVATE ${SRCHS} config.h.cmake.in grass/version.h.in) +target_sources( + INCLUDE_HEADERS + PRIVATE ${SRCHS} config.h.cmake.in grass/version.h.in +) set_target_properties(INCLUDE_HEADERS PROPERTIES FOLDER "GRASS Libraries") -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/grass/version.h.in - "${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass/version.h") +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/grass/version.h.in + "${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass/version.h" +) message(STATUS "Creating ${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass/config.h") -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake.in - "${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass/config.h") +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake.in + "${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass/config.h" +) # TODO: this presently skips empty lines, but should be included file(WRITE ${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass/copying.h "") file(STRINGS ${CMAKE_SOURCE_DIR}/COPYING copying_lines) foreach(copying_line ${copying_lines}) - file(APPEND ${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass/copying.h - "\"${copying_line} \\n\"\n") + file( + APPEND ${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass/copying.h + "\"${copying_line} \\n\"\n" + ) endforeach() # TODO: this presently skips empty lines, but should be included file(WRITE ${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass/citing.h "") file(STRINGS ${CMAKE_SOURCE_DIR}/CITING citing_lines) foreach(citing_line ${citing_lines}) - file(APPEND ${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass/citing.h - "\"${citing_line}\\n\"\n") + file( + APPEND ${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass/citing.h + "\"${citing_line}\\n\"\n" + ) endforeach() # TODO file(READ ${CMAKE_SOURCE_DIR}/config.status config_status_header) -file(WRITE ${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass/confparms.h - "\"/* */\\n\"") +file( + WRITE ${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass/confparms.h + "\"/* */\\n\"" +) -install(DIRECTORY ${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/ - DESTINATION ${GRASS_INSTALL_INCLUDEDIR}) +install( + DIRECTORY ${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/ + DESTINATION ${GRASS_INSTALL_INCLUDEDIR} +) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 3478b1d4534..eef29734a61 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -1,6 +1,6 @@ set(use_math_DEFS "") if(MSVC) - set(use_math_DEFS "-D_USE_MATH_DEFINES=1") + set(use_math_DEFS "-D_USE_MATH_DEFINES=1") endif() build_library_in_subdir(datetime) @@ -15,7 +15,8 @@ build_library_in_subdir( grass_gis OPTIONAL_DEPENDS Freetype::Freetype - Iconv::Iconv) + Iconv::Iconv +) add_subdirectory(proj) @@ -32,21 +33,24 @@ build_library_in_subdir( grass_gproj grass_parson OPTIONAL_DEPENDS - OpenMP::OpenMP_C) + OpenMP::OpenMP_C +) if(TARGET LAPACKE) - target_link_libraries(grass_raster PRIVATE LAPACKE) + target_link_libraries(grass_raster PRIVATE LAPACKE) endif() if(CMAKE_SYSTEM_NAME MATCHES "Linux") - find_library(DL_LIBRARY dl) - mark_as_advanced(DL_LIBRARY) - target_link_libraries(grass_raster PRIVATE ${DL_LIBRARY}) + find_library(DL_LIBRARY dl) + mark_as_advanced(DL_LIBRARY) + target_link_libraries(grass_raster PRIVATE ${DL_LIBRARY}) endif() configure_file( - external/ccmath/ccmath.h - ${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass/ccmath_grass.h COPYONLY) + external/ccmath/ccmath.h + ${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass/ccmath_grass.h + COPYONLY +) build_library_in_subdir(external/ccmath) build_library_in_subdir(external/shapelib NAME grass_shape HEADERS "shapefil.h") @@ -62,13 +66,14 @@ build_library_in_subdir( CBLAS::CBLAS FFTW LAPACKE::LAPACKE - OpenMP::OpenMP_C) + OpenMP::OpenMP_C +) build_library_in_subdir(linkm) file(GLOB pngdriver_SRCS "./pngdriver/*.c") if(NOT WITH_LIBPNG) - list(FILTER pngdriver_SRCS EXCLUDE REGEX [[./pngdriver/.*_png\.c$]]) + list(FILTER pngdriver_SRCS EXCLUDE REGEX [[./pngdriver/.*_png\.c$]]) endif() build_library_in_subdir( pngdriver @@ -78,7 +83,8 @@ build_library_in_subdir( grass_driver grass_gis OPTIONAL_DEPENDS - PNG::PNG) + PNG::PNG +) build_library_in_subdir( psdriver @@ -86,15 +92,20 @@ build_library_in_subdir( grass_driver grass_gis INCLUDES - "${CMAKE_CURRENT_SOURCE_DIR}/driver") + "${CMAKE_CURRENT_SOURCE_DIR}/driver" +) add_custom_command( - TARGET grass_psdriver - POST_BUILD - COMMAND - ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/psdriver/psdriver.ps - ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/psdriver.ps) -install(FILES ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/psdriver.ps - DESTINATION ${GRASS_INSTALL_ETCDIR}) + TARGET grass_psdriver + POST_BUILD + COMMAND + ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/psdriver/psdriver.ps + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/psdriver.ps +) +install( + FILES ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/psdriver.ps + DESTINATION ${GRASS_INSTALL_ETCDIR} +) build_library_in_subdir( htmldriver @@ -102,40 +113,50 @@ build_library_in_subdir( grass_gis grass_driver INCLUDES - "${CMAKE_CURRENT_SOURCE_DIR}/driver") + "${CMAKE_CURRENT_SOURCE_DIR}/driver" +) set(_grass_display_DEFS) -set(_grass_display_DEPENDS grass_driver grass_raster grass_htmldriver - grass_pngdriver grass_psdriver grass_gis) +set(_grass_display_DEPENDS + grass_driver + grass_raster + grass_htmldriver + grass_pngdriver + grass_psdriver + grass_gis +) if(WITH_CAIRO) - set(_cairodriver_DEPENDS - Cairo::Cairo - Fontconfig::Fontconfig - Freetype::Freetype - grass_gis - grass_driver - OPTIONAL_DEPENDS - Iconv::Iconv) - if(WITH_X11) - list(PREPEND _cairodriver_DEPENDS X11::X11) - endif() - build_library_in_subdir(cairodriver DEPENDS ${_cairodriver_DEPENDS}) - - set(_grass_display_DEFS "-DUSE_CAIRO") - list(APPEND _grass_display_DEPENDS grass_cairodriver) + set(_cairodriver_DEPENDS + Cairo::Cairo + Fontconfig::Fontconfig + Freetype::Freetype + grass_gis + grass_driver + OPTIONAL_DEPENDS + Iconv::Iconv + ) + if(WITH_X11) + list(PREPEND _cairodriver_DEPENDS X11::X11) + endif() + build_library_in_subdir(cairodriver DEPENDS ${_cairodriver_DEPENDS}) + + set(_grass_display_DEFS "-DUSE_CAIRO") + list(APPEND _grass_display_DEPENDS grass_cairodriver) endif() build_library_in_subdir(bitmap SOURCES "./bitmap/bitmap.c" "./bitmap/sparse.c" - DEPENDS grass_linkm) + DEPENDS grass_linkm +) build_library_in_subdir(btree) build_library_in_subdir(btree2 HEADERS "kdtree.h" DEPENDS grass_gis) build_library_in_subdir(display DEFS ${_grass_display_DEFS} DEPENDS - ${_grass_display_DEPENDS}) + ${_grass_display_DEPENDS} +) add_subdirectory(db) @@ -150,7 +171,7 @@ build_library_in_subdir(cluster DEPENDS grass_imagery grass_gis grass_raster) build_library_in_subdir(rowio DEPENDS grass_gis) build_library_in_subdir(segment DEPENDS grass_gis) # added DEPENDS grass_gis - # for uninstd.h +# for uninstd.h add_subdirectory(rst) @@ -167,7 +188,8 @@ build_library_in_subdir( grass_segment GDAL::GDAL HEADERS - "lidar.h") + "lidar.h" +) build_library_in_subdir( raster3d @@ -176,7 +198,8 @@ build_library_in_subdir( DEPENDS ${LIBM} grass_raster - grass_gis) + grass_gis +) build_program_in_subdir( raster3d/test @@ -188,7 +211,8 @@ build_program_in_subdir( grass_interpfl grass_raster grass_raster3d - GDAL::GDAL) + GDAL::GDAL +) build_library_in_subdir( gpde @@ -204,20 +228,24 @@ build_library_in_subdir( grass_gmath ${LIBM} OPTIONAL_DEPENDS - OpenMP::OpenMP_C) + OpenMP::OpenMP_C +) build_library_in_subdir(dspf DEPENDS grass_gis) build_library_in_subdir(symbol NAME grass_symb DEPENDS grass_gis ${LIBM}) add_custom_command( - TARGET grass_symb - POST_BUILD - COMMAND - ${CMAKE_COMMAND} -E copy_directory - ${CMAKE_CURRENT_SOURCE_DIR}/symbol/symbol - ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/symbol) -install(DIRECTORY ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/symbol - DESTINATION ${GRASS_INSTALL_ETCDIR}) + TARGET grass_symb + POST_BUILD + COMMAND + ${CMAKE_COMMAND} -E copy_directory + ${CMAKE_CURRENT_SOURCE_DIR}/symbol/symbol + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/symbol +) +install( + DIRECTORY ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/symbol + DESTINATION ${GRASS_INSTALL_ETCDIR} +) add_subdirectory(init) @@ -228,34 +256,36 @@ build_library_in_subdir(stats DEPENDS grass_gis grass_raster ${LIBM}) build_library_in_subdir(arraystats DEPENDS grass_gis ${LIBM}) if(WITH_OPENGL) - build_library_in_subdir( - ogsf - DEPENDS - grass_bitmap - grass_dbmibase - grass_dbmiclient - grass_dbmidriver - grass_gis - grass_raster - grass_raster3d - grass_vector - GDAL::GDAL - OpenGL::GL - OpenGL::GLU - TIFF::TIFF) - - build_library_in_subdir( - nviz - DEPENDS - grass_display - grass_raster - grass_vector - grass_bitmap - grass_ogsf - grass_gis - OpenGL::GL - OPTIONAL_DEPENDS - X11::X11) + build_library_in_subdir( + ogsf + DEPENDS + grass_bitmap + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_raster + grass_raster3d + grass_vector + GDAL::GDAL + OpenGL::GL + OpenGL::GLU + TIFF::TIFF + ) + + build_library_in_subdir( + nviz + DEPENDS + grass_display + grass_raster + grass_vector + grass_bitmap + grass_ogsf + grass_gis + OpenGL::GL + OPTIONAL_DEPENDS + X11::X11 + ) endif() add_subdirectory(temporal) @@ -263,9 +293,12 @@ add_subdirectory(temporal) build_library_in_subdir(iostream SRC_REGEX "*.cpp" DEPENDS grass_gis) build_library_in_subdir(manage DEPENDS grass_gis grass_raster grass_vector - grass_raster3d GDAL::GDAL) + grass_raster3d GDAL::GDAL +) file(COPY manage/element_list DESTINATION ${OUTDIR}/${GRASS_INSTALL_ETCDIR}) -install(FILES ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/element_list - DESTINATION ${GRASS_INSTALL_ETCDIR}) +install( + FILES ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/element_list + DESTINATION ${GRASS_INSTALL_ETCDIR} +) build_library_in_subdir(calc DEPENDS grass_raster grass_gis ${LIBM}) diff --git a/lib/db/CMakeLists.txt b/lib/db/CMakeLists.txt index 25bf7a0f241..36e7f2ce007 100644 --- a/lib/db/CMakeLists.txt +++ b/lib/db/CMakeLists.txt @@ -1,7 +1,10 @@ file(GLOB dbmibase_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/dbmi_base/*.c") if(MSVC) - set(dbmibase_INCLUDES "${CMAKE_CURRENT_SOURCE_DIR}/dbmi_base" "${CMAKE_SOURCE_DIR}/msvc") - list(APPEND dbmibase_SRCS "${CMAKE_SOURCE_DIR}/msvc/dirent.c") + set(dbmibase_INCLUDES + "${CMAKE_CURRENT_SOURCE_DIR}/dbmi_base" + "${CMAKE_SOURCE_DIR}/msvc" + ) + list(APPEND dbmibase_SRCS "${CMAKE_SOURCE_DIR}/msvc/dirent.c") endif() build_library_in_subdir( @@ -15,7 +18,8 @@ build_library_in_subdir( DEPENDS grass_gis HEADERS - "dbstubs.h") + "dbstubs.h" +) build_library_in_subdir( dbmi_client @@ -25,10 +29,12 @@ build_library_in_subdir( grass_dbmibase grass_gis INCLUDES - "${CMAKE_CURRENT_SOURCE_DIR}/dbmi_base") + "${CMAKE_CURRENT_SOURCE_DIR}/dbmi_base" +) build_library_in_subdir(stubs NAME grass_dbstubs DEPENDS grass_gis - grass_dbmibase) + grass_dbmibase +) build_library_in_subdir( dbmi_driver @@ -39,6 +45,7 @@ build_library_in_subdir( grass_dbstubs grass_gis INCLUDES - "${CMAKE_CURRENT_SOURCE_DIR}/dbmi_base") + "${CMAKE_CURRENT_SOURCE_DIR}/dbmi_base" +) add_subdirectory(sqlp) diff --git a/lib/db/sqlp/CMakeLists.txt b/lib/db/sqlp/CMakeLists.txt index ce4fcc0f2bd..3f89588d310 100644 --- a/lib/db/sqlp/CMakeLists.txt +++ b/lib/db/sqlp/CMakeLists.txt @@ -7,7 +7,12 @@ add_flex_bison_dependency(sqlp.yy.c sqlp.tab.c) set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/sqlp.yy.c GENERATED) set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/sqlp.tab.c GENERATED) -set(sqlp_SRCS alloc.c print.c sql.c ${CMAKE_CURRENT_BINARY_DIR}/sqlp.tab.c - ${CMAKE_CURRENT_BINARY_DIR}/sqlp.yy.c) +set(sqlp_SRCS + alloc.c + print.c + sql.c + ${CMAKE_CURRENT_BINARY_DIR}/sqlp.tab.c + ${CMAKE_CURRENT_BINARY_DIR}/sqlp.yy.c +) build_module(NAME grass_sqlp SOURCES "${sqlp_SRCS}" HTML_FILE_NAME sql) diff --git a/lib/fonts/CMakeLists.txt b/lib/fonts/CMakeLists.txt index 8c8faec2313..1abfeeae86b 100644 --- a/lib/fonts/CMakeLists.txt +++ b/lib/fonts/CMakeLists.txt @@ -21,24 +21,29 @@ set(font_files romans.hmp romant.hmp scriptc.hmp - scripts.hmp) + scripts.hmp +) list(TRANSFORM font_files PREPEND fonts/) add_custom_target(fonts) add_custom_command( - TARGET fonts - PRE_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory ${OUTDIR}/${GRASS_INSTALL_FONTSDIR} - BYPRODUCTS ${OUTDIR}/${GRASS_INSTALL_FONTSDIR}) + TARGET fonts + PRE_BUILD + COMMAND + ${CMAKE_COMMAND} -E make_directory ${OUTDIR}/${GRASS_INSTALL_FONTSDIR} + BYPRODUCTS ${OUTDIR}/${GRASS_INSTALL_FONTSDIR} +) set_target_properties(fonts PROPERTIES FOLDER Misc) foreach(font_file ${font_files}) - add_custom_command( - TARGET fonts - PRE_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${font_file} - ${OUTDIR}/${GRASS_INSTALL_FONTSDIR}) + add_custom_command( + TARGET fonts + PRE_BUILD + COMMAND + ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${font_file} + ${OUTDIR}/${GRASS_INSTALL_FONTSDIR} + ) endforeach() install(FILES ${font_files} DESTINATION ${GRASS_INSTALL_FONTSDIR}) diff --git a/lib/gis/CMakeLists.txt b/lib/gis/CMakeLists.txt index 95edc7f709f..00a0a5a6d5c 100644 --- a/lib/gis/CMakeLists.txt +++ b/lib/gis/CMakeLists.txt @@ -1,14 +1,17 @@ file(GLOB gislib_SRCS "*.c") if(NOT WIN32) - list(FILTER gislib_SRCS EXCLUDE REGEX [[.*/fmode\.c$]]) + list(FILTER gislib_SRCS EXCLUDE REGEX [[.*/fmode\.c$]]) endif() set(grass_gis_DEFS "-DGRASS_VERSION_DATE=\"${GRASS_VERSION_DATE}\"") if(MSVC) - set(grass_gis_DEFS "${grass_gis_DEFS};-D_USE_MATH_DEFINES=1") - set(gislib_INCLUDES "${PROJECT_SOURCE_DIR}/msvc") - list(APPEND gislib_SRCS "${PROJECT_SOURCE_DIR}/msvc/dirent.c;${PROJECT_SOURCE_DIR}/msvc/fcntl.c") + set(grass_gis_DEFS "${grass_gis_DEFS};-D_USE_MATH_DEFINES=1") + set(gislib_INCLUDES "${PROJECT_SOURCE_DIR}/msvc") + list( + APPEND gislib_SRCS + "${PROJECT_SOURCE_DIR}/msvc/dirent.c;${PROJECT_SOURCE_DIR}/msvc/fcntl.c" + ) endif() build_module( @@ -31,41 +34,55 @@ build_module( OpenMP::OpenMP_C ZSTD DEFS - "${grass_gis_DEFS}") + "${grass_gis_DEFS}" +) add_custom_command( - TARGET grass_gis - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory - ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/proj - COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/colors - ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/colors - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/ellipse.table - ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/proj - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/datum.table - ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/proj - COMMAND - ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/datumtransform.table - ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/proj - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/FIPS.code - ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/proj - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/state27 - ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/proj - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/state83 - ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/proj - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/projections - ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/proj - COMMAND - ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/ellipse.table.solar.system - ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/proj - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/colors.desc - ${OUTDIR}/${GRASS_INSTALL_ETCDIR} - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/renamed_options - ${OUTDIR}/${GRASS_INSTALL_ETCDIR}) + TARGET grass_gis + POST_BUILD + COMMAND + ${CMAKE_COMMAND} -E make_directory + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/proj + COMMAND + ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/colors + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/colors + COMMAND + ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/ellipse.table + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/proj + COMMAND + ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/datum.table + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/proj + COMMAND + ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/datumtransform.table + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/proj + COMMAND + ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/FIPS.code + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/proj + COMMAND + ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/state27 + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/proj + COMMAND + ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/state83 + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/proj + COMMAND + ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/projections + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/proj + COMMAND + ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/ellipse.table.solar.system + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/proj + COMMAND + ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/colors.desc + ${OUTDIR}/${GRASS_INSTALL_ETCDIR} + COMMAND + ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/renamed_options + ${OUTDIR}/${GRASS_INSTALL_ETCDIR} +) install(DIRECTORY colors DESTINATION ${GRASS_INSTALL_ETCDIR}) install( - FILES ellipse.table + FILES + ellipse.table ellipse.table.solar.system datum.table datumtransform.table @@ -73,16 +90,19 @@ install( state27 state83 projections - DESTINATION ${GRASS_INSTALL_ETCDIR}/proj) + DESTINATION ${GRASS_INSTALL_ETCDIR}/proj +) install(FILES colors.desc renamed_options DESTINATION ${GRASS_INSTALL_ETCDIR}) -target_include_directories(grass_gis - INTERFACE $) +target_include_directories( + grass_gis + INTERFACE $ +) if(UNIX) - target_link_libraries(grass_gis PRIVATE ${LIBM}) + target_link_libraries(grass_gis PRIVATE ${LIBM}) endif() if(MSVC) - target_link_libraries(grass_gis PRIVATE PCRE) + target_link_libraries(grass_gis PRIVATE PCRE) endif() diff --git a/lib/init/CMakeLists.txt b/lib/init/CMakeLists.txt index d596b4ff6a2..899114bdbbb 100644 --- a/lib/init/CMakeLists.txt +++ b/lib/init/CMakeLists.txt @@ -4,40 +4,39 @@ add_custom_target(ADD_INIT_DOCS ALL COMMENT "Generate init docs.") set_target_properties(ADD_INIT_DOCS PROPERTIES FOLDER Docs) if(WITH_DOCS) - - generate_docs_list( - TARGET ADD_INIT_DOCS - DOC_FILES - grass - helptext - variables - IMG_FILES - grass_start.png - grassdb.png - help_project_structure.png - location-add.png - location-download.png - location.png - mapset.png - raster-import.png - vector-import.png) - + generate_docs_list( + TARGET ADD_INIT_DOCS + DOC_FILES + grass + helptext + variables + IMG_FILES + grass_start.png + grassdb.png + help_project_structure.png + location-add.png + location-download.png + location.png + mapset.png + raster-import.png + vector-import.png + ) endif() # START_UP is the variable used in grass.py, grass.sh.in and grass.bat.in set(START_UP ${PROJECT_NAME_LOWER}) if(WIN32) - set(START_UP "${START_UP}.py") - set(script_file_name "grass.bat") - set(script_input_file_name ${script_file_name}.in) + set(START_UP "${START_UP}.py") + set(script_file_name "grass.bat") + set(script_input_file_name ${script_file_name}.in) else() - set(script_file_name "grass") - set(script_input_file_name ${script_file_name}.sh.in) + set(script_file_name "grass") + set(script_input_file_name ${script_file_name}.sh.in) endif() find_path(gdal_share_dir "gdal" PATH_SUFFIXES share) if(NOT gdal_share_dir) - message(FATAL_ERROR "Cannot find share/gdal") + message(FATAL_ERROR "Cannot find share/gdal") endif() mark_as_advanced(gdal_share_dir) @@ -56,8 +55,10 @@ set(GRASS_PYDIR ${GRASS_INSTALL_PYDIR_PATH}) configure_file(grass.py ${CMAKE_CURRENT_BINARY_DIR}/${START_UP} @ONLY) unset(GRASS_PYDIR) -install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${START_UP} - DESTINATION ${CMAKE_INSTALL_BINDIR}) +install( + PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${START_UP} + DESTINATION ${CMAKE_INSTALL_BINDIR} +) file(TO_NATIVE_PATH "${OUTDIR}/${GISBASE_DIR}" gisbase_init_dir) @@ -82,7 +83,8 @@ build_program( "grasslibs" RUNTIME_OUTPUT_DIR ${GRASS_INSTALL_ETCBINDIR} - NO_DOCS) + NO_DOCS +) build_program( NAME @@ -93,7 +95,8 @@ build_program( "grasslibs" RUNTIME_OUTPUT_DIR ${GRASS_INSTALL_ETCBINDIR} - NO_DOCS) + NO_DOCS +) build_program( NAME @@ -106,7 +109,8 @@ build_program( "grasslibs" RUNTIME_OUTPUT_DIR ${GRASS_INSTALL_ETCBINDIR} - NO_DOCS) + NO_DOCS +) build_program( NAME @@ -120,32 +124,42 @@ build_program( "grasslibs" RUNTIME_OUTPUT_DIR ${GRASS_INSTALL_ETCBINDIR} - NO_DOCS) + NO_DOCS +) if(MINGW) - build_program( - NAME - winlocale - SOURCES - winlocale.c - RUNTIME_OUTPUT_DIR - ${GRASS_INSTALL_ETCBINDIR} - NO_DOCS) + build_program( + NAME + winlocale + SOURCES + winlocale.c + RUNTIME_OUTPUT_DIR + ${GRASS_INSTALL_ETCBINDIR} + NO_DOCS + ) endif() set(VERSIONNUMBER_CONTENTS "${GRASS_VERSION_NUMBER}") if(GRASS_VERSION_GIT) - list(APPEND VERSIONNUMBER_CONTENTS - "${VERSIONNUMBER_CONTENTS} ${GRASS_VERSION_GIT}") + list( + APPEND VERSIONNUMBER_CONTENTS + "${VERSIONNUMBER_CONTENTS} ${GRASS_VERSION_GIT}" + ) endif() -file(WRITE ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/VERSIONNUMBER - "${VERSIONNUMBER_CONTENTS}") +file( + WRITE ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/VERSIONNUMBER + "${VERSIONNUMBER_CONTENTS}" +) -install(FILES ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/VERSIONNUMBER - DESTINATION ${GRASS_INSTALL_ETCDIR}) +install( + FILES ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/VERSIONNUMBER + DESTINATION ${GRASS_INSTALL_ETCDIR} +) configure_file(license.txt "${OUTDIR}/${GRASS_INSTALL_ETCDIR}/license" @ONLY) -install(FILES ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/license - DESTINATION ${GRASS_INSTALL_ETCDIR}) +install( + FILES ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/license + DESTINATION ${GRASS_INSTALL_ETCDIR} +) diff --git a/lib/proj/CMakeLists.txt b/lib/proj/CMakeLists.txt index c6f49096a66..ab154cf425b 100644 --- a/lib/proj/CMakeLists.txt +++ b/lib/proj/CMakeLists.txt @@ -1,9 +1,17 @@ -install(FILES desc.table parms.table units.table - DESTINATION ${GRASS_INSTALL_ETCDIR}/proj) +install( + FILES desc.table parms.table units.table + DESTINATION ${GRASS_INSTALL_ETCDIR}/proj +) -set(grass_gproj_SOURCES convert.c datum.c do_proj.c ellipse.c get_proj.c) +set(grass_gproj_SOURCES + convert.c + datum.c + do_proj.c + ellipse.c + get_proj.c +) if(MINGW) - list(APPEND grass_gproj_SOURCES "ftol.c") + list(APPEND grass_gproj_SOURCES "ftol.c") endif() build_module( @@ -17,8 +25,12 @@ build_module( SOURCES "${grass_gproj_SOURCES}" INCLUDES - "${CMAKE_CURRENT_SOURCE_DIR}/../driver") + "${CMAKE_CURRENT_SOURCE_DIR}/../driver" +) -target_include_directories(grass_gproj - INTERFACE $ - $) +target_include_directories( + grass_gproj + INTERFACE + $ + $ +) diff --git a/lib/rst/CMakeLists.txt b/lib/rst/CMakeLists.txt index 3f9a45b2d47..2032a089cbf 100644 --- a/lib/rst/CMakeLists.txt +++ b/lib/rst/CMakeLists.txt @@ -5,7 +5,8 @@ build_library_in_subdir( DEPENDS grass_gis HEADERS - "dataquad.h") + "dataquad.h" +) build_library_in_subdir( qtree @@ -14,7 +15,8 @@ build_library_in_subdir( DEPENDS grass_gis HEADERS - "qtree.h") + "qtree.h" +) build_library_in_subdir( interp_float @@ -35,11 +37,17 @@ build_library_in_subdir( OPTIONAL_DEPENDS OpenMP::OpenMP_C HEADERS - "interpf.h") + "interpf.h" +) -target_include_directories(grass_interpfl - INTERFACE $) +target_include_directories( + grass_interpfl + INTERFACE $ +) if(TARGET PostgreSQL::PostgreSQL) - target_include_directories(grass_interpfl - INTERFACE $) + target_include_directories( + grass_interpfl + INTERFACE + $ + ) endif() diff --git a/lib/temporal/CMakeLists.txt b/lib/temporal/CMakeLists.txt index 7f9f5054963..a80203e2eef 100644 --- a/lib/temporal/CMakeLists.txt +++ b/lib/temporal/CMakeLists.txt @@ -1,6 +1,6 @@ file(GLOB SQLFILES "SQL/*.sql") foreach(sqlfile ${SQLFILES}) - install(FILES "${sqlfile}" DESTINATION ${GRASS_INSTALL_ETCDIR}/sql) + install(FILES "${sqlfile}" DESTINATION ${GRASS_INSTALL_ETCDIR}/sql) endforeach() build_library_in_subdir( lib @@ -9,4 +9,5 @@ build_library_in_subdir( DEPENDS grass_gis grass_dbmibase - grass_datetime) + grass_datetime +) diff --git a/lib/vector/CMakeLists.txt b/lib/vector/CMakeLists.txt index a655e69655e..fbc1983352d 100644 --- a/lib/vector/CMakeLists.txt +++ b/lib/vector/CMakeLists.txt @@ -21,18 +21,24 @@ build_library_in_subdir( grass_raster grass_rtree OPTIONAL_DEPENDS - GEOS::geos_c) + GEOS::geos_c +) -target_include_directories(grass_vector - INTERFACE $) +target_include_directories( + grass_vector + INTERFACE $ +) if(TARGET PostgreSQL::PostgreSQL) - target_link_libraries(grass_vector PRIVATE PostgreSQL::PostgreSQL) - target_include_directories(grass_vector - INTERFACE $) + target_link_libraries(grass_vector PRIVATE PostgreSQL::PostgreSQL) + target_include_directories( + grass_vector + INTERFACE + $ + ) endif() if(TARGET LAPACKE) - target_link_libraries(grass_vector PRIVATE LAPACKE) + target_link_libraries(grass_vector PRIVATE LAPACKE) endif() build_library_in_subdir( @@ -45,7 +51,8 @@ build_library_in_subdir( grass_dbmibase grass_dbmiclient grass_dbmidriver - GDAL::GDAL) + GDAL::GDAL +) build_library_in_subdir( neta @@ -58,8 +65,9 @@ build_library_in_subdir( grass_gis grass_dgl grass_vector - GDAL::GDAL) + GDAL::GDAL +) if(WITH_DOCS) - generate_docs(vectorascii TARGET grass_vector) + generate_docs(vectorascii TARGET grass_vector) endif() diff --git a/lib/vector/dglib/CMakeLists.txt b/lib/vector/dglib/CMakeLists.txt index a55e79824c6..6ca04135ce9 100644 --- a/lib/vector/dglib/CMakeLists.txt +++ b/lib/vector/dglib/CMakeLists.txt @@ -28,10 +28,13 @@ set(DGL_headers helpers.h tavl.h tree.h - type.h) + type.h +) foreach(DGL_header ${DGL_headers}) - file(COPY ${DGL_header} - DESTINATION ${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass/dgl) + file( + COPY ${DGL_header} + DESTINATION ${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass/dgl + ) endforeach() # file(COPY dgl.h DESTINATION ${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass) @@ -43,6 +46,7 @@ set(graphlib_SRCS heap.c helpers.c tavl.c - tree.c) + tree.c +) build_module(NAME grass_dgl SOURCES "${graphlib_SRCS}" HEADERS "dgl.h") diff --git a/lib/vector/diglib/CMakeLists.txt b/lib/vector/diglib/CMakeLists.txt index f2bbae3090e..049d252eda9 100644 --- a/lib/vector/diglib/CMakeLists.txt +++ b/lib/vector/diglib/CMakeLists.txt @@ -24,7 +24,8 @@ set(dig2_SRCS poly.c portable.c spindex_rw.c - type.c) + type.c +) build_module( NAME grass_dig2 @@ -35,9 +36,13 @@ build_module( grass_gis grass_rtree GDAL::GDAL - ${LIBM}) + ${LIBM} +) if(TARGET PostgreSQL::PostgreSQL) - target_include_directories(grass_dig2 - PUBLIC $) + target_include_directories( + grass_dig2 + PUBLIC + $ + ) endif() diff --git a/locale/CMakeLists.txt b/locale/CMakeLists.txt index 12f37fa9568..e67dd8da22a 100644 --- a/locale/CMakeLists.txt +++ b/locale/CMakeLists.txt @@ -4,96 +4,96 @@ #]===========================================================================] set(po_file_names - grasslibs_ar.po - grasslibs_bn.po - grasslibs_cs.po - grasslibs_de.po - grasslibs_el.po - grasslibs_es.po - grasslibs_fi.po - grasslibs_fr.po - grasslibs_hu.po - grasslibs_id_ID.po - grasslibs_it.po - grasslibs_ja.po - grasslibs_ko.po - grasslibs_lv.po - grasslibs_ml.po - grasslibs_pl.po - grasslibs_pt_BR.po - grasslibs_pt.po - grasslibs_ro.po - grasslibs_ru.po - grasslibs_si.po - grasslibs_sl.po - grasslibs_sv.po - grasslibs_ta.po - grasslibs_th.po - grasslibs_tr.po - grasslibs_uk.po - grasslibs_vi.po - grasslibs_zh_CN.po - grasslibs_zh.po - grassmods_ar.po - grassmods_bn.po - grassmods_cs.po - grassmods_de.po - grassmods_el.po - grassmods_es.po - grassmods_fi.po - grassmods_fr.po - grassmods_hu.po - grassmods_id_ID.po - grassmods_it.po - grassmods_ja.po - grassmods_ko.po - grassmods_lv.po - grassmods_ml.po - grassmods_pl.po - grassmods_pt_BR.po - grassmods_pt.po - grassmods_ro.po - grassmods_ru.po - grassmods_si.po - grassmods_sl.po - grassmods_sv.po - grassmods_ta.po - grassmods_th.po - grassmods_tr.po - grassmods_uk.po - grassmods_vi.po - grassmods_zh_CN.po - grassmods_zh.po - grasswxpy_ar.po - grasswxpy_bn.po - grasswxpy_cs.po - grasswxpy_de.po - grasswxpy_el.po - grasswxpy_es.po - grasswxpy_fi.po - grasswxpy_fr.po - grasswxpy_hu.po - grasswxpy_id_ID.po - grasswxpy_it.po - grasswxpy_ja.po - grasswxpy_ko.po - grasswxpy_lv.po - grasswxpy_ml.po - grasswxpy_pl.po - grasswxpy_pt_BR.po - grasswxpy_pt.po - grasswxpy_ro.po - grasswxpy_ru.po - grasswxpy_si.po - grasswxpy_sl.po - grasswxpy_sv.po - grasswxpy_ta.po - grasswxpy_th.po - grasswxpy_tr.po - grasswxpy_uk.po - grasswxpy_vi.po - grasswxpy_zh_CN.po - grasswxpy_zh.po + grasslibs_ar.po + grasslibs_bn.po + grasslibs_cs.po + grasslibs_de.po + grasslibs_el.po + grasslibs_es.po + grasslibs_fi.po + grasslibs_fr.po + grasslibs_hu.po + grasslibs_id_ID.po + grasslibs_it.po + grasslibs_ja.po + grasslibs_ko.po + grasslibs_lv.po + grasslibs_ml.po + grasslibs_pl.po + grasslibs_pt_BR.po + grasslibs_pt.po + grasslibs_ro.po + grasslibs_ru.po + grasslibs_si.po + grasslibs_sl.po + grasslibs_sv.po + grasslibs_ta.po + grasslibs_th.po + grasslibs_tr.po + grasslibs_uk.po + grasslibs_vi.po + grasslibs_zh_CN.po + grasslibs_zh.po + grassmods_ar.po + grassmods_bn.po + grassmods_cs.po + grassmods_de.po + grassmods_el.po + grassmods_es.po + grassmods_fi.po + grassmods_fr.po + grassmods_hu.po + grassmods_id_ID.po + grassmods_it.po + grassmods_ja.po + grassmods_ko.po + grassmods_lv.po + grassmods_ml.po + grassmods_pl.po + grassmods_pt_BR.po + grassmods_pt.po + grassmods_ro.po + grassmods_ru.po + grassmods_si.po + grassmods_sl.po + grassmods_sv.po + grassmods_ta.po + grassmods_th.po + grassmods_tr.po + grassmods_uk.po + grassmods_vi.po + grassmods_zh_CN.po + grassmods_zh.po + grasswxpy_ar.po + grasswxpy_bn.po + grasswxpy_cs.po + grasswxpy_de.po + grasswxpy_el.po + grasswxpy_es.po + grasswxpy_fi.po + grasswxpy_fr.po + grasswxpy_hu.po + grasswxpy_id_ID.po + grasswxpy_it.po + grasswxpy_ja.po + grasswxpy_ko.po + grasswxpy_lv.po + grasswxpy_ml.po + grasswxpy_pl.po + grasswxpy_pt_BR.po + grasswxpy_pt.po + grasswxpy_ro.po + grasswxpy_ru.po + grasswxpy_si.po + grasswxpy_sl.po + grasswxpy_sv.po + grasswxpy_ta.po + grasswxpy_th.po + grasswxpy_tr.po + grasswxpy_uk.po + grasswxpy_vi.po + grasswxpy_zh_CN.po + grasswxpy_zh.po ) set(po_files ${po_file_names}) @@ -104,80 +104,106 @@ list(TRANSFORM generate_mo_file_targets PREPEND "generate_mo_files_") add_custom_target(generate_mo_files_dir ALL COMMENT "Create locale directory") set_target_properties(generate_mo_files_dir PROPERTIES FOLDER Locale) add_custom_command( - TARGET generate_mo_files_dir - PRE_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory - ${OUTDIR}/${GRASS_INSTALL_LOCALEDIR} - BYPRODUCTS ${OUTDIR}/${GRASS_INSTALL_LOCALEDIR}) + TARGET generate_mo_files_dir + PRE_BUILD + COMMAND + ${CMAKE_COMMAND} -E make_directory ${OUTDIR}/${GRASS_INSTALL_LOCALEDIR} + BYPRODUCTS ${OUTDIR}/${GRASS_INSTALL_LOCALEDIR} +) set(_locales) foreach(_locale ${po_files}) - get_filename_component(_loc ${_locale} NAME) - list(APPEND _locales ${_loc}) + get_filename_component(_loc ${_locale} NAME) + list(APPEND _locales ${_loc}) endforeach() list(TRANSFORM _locales REPLACE "^[^_]+_(.*)\.po$" "\\1") list(REMOVE_DUPLICATES _locales) foreach(_locale ${_locales}) - add_custom_target( - generate_mo_files_dir_${_locale} - DEPENDS generate_mo_files_dir - COMMENT "Create locale specific directories") - add_custom_target(${_locale}_LC_MESSAGES_dir ALL - COMMENT "Create locale (${_locale}) LC_MESSAGES directory") - add_custom_command( - TARGET ${_locale}_LC_MESSAGES_dir - PRE_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory + add_custom_target( + generate_mo_files_dir_${_locale} + DEPENDS generate_mo_files_dir + COMMENT "Create locale specific directories" + ) + add_custom_target( + ${_locale}_LC_MESSAGES_dir + ALL + COMMENT "Create locale (${_locale}) LC_MESSAGES directory" + ) + add_custom_command( + TARGET ${_locale}_LC_MESSAGES_dir + PRE_BUILD + COMMAND + ${CMAKE_COMMAND} -E make_directory ${OUTDIR}/${GRASS_INSTALL_LOCALEDIR}/${_locale}/LC_MESSAGES - BYPRODUCTS ${OUTDIR}/${GRASS_INSTALL_LOCALEDIR}/${_locale}/LC_MESSAGES) + BYPRODUCTS ${OUTDIR}/${GRASS_INSTALL_LOCALEDIR}/${_locale}/LC_MESSAGES + ) - set_target_properties(${_locale}_LC_MESSAGES_dir PROPERTIES FOLDER Locale) - set_target_properties(generate_mo_files_dir_${_locale} PROPERTIES FOLDER - Locale) + set_target_properties(${_locale}_LC_MESSAGES_dir PROPERTIES FOLDER Locale) + set_target_properties( + generate_mo_files_dir_${_locale} + PROPERTIES FOLDER Locale + ) endforeach() unset(_locales) foreach(po_file ${po_files}) - get_filename_component(po_file_name ${po_file} NAME) - string(REGEX REPLACE "^([^_]+)_(.*)\.po$" "\\2" _locale ${po_file_name}) - string(REGEX REPLACE "^([^_]+)_(.*)\.po$" "\\2/LC_MESSAGES/\\1.mo" mo_file - ${po_file_name}) - get_filename_component(mo_dir ${mo_file} DIRECTORY) + get_filename_component(po_file_name ${po_file} NAME) + string(REGEX REPLACE "^([^_]+)_(.*)\.po$" "\\2" _locale ${po_file_name}) + string( + REGEX REPLACE "^([^_]+)_(.*)\.po$" + "\\2/LC_MESSAGES/\\1.mo" + mo_file + ${po_file_name} + ) + get_filename_component(mo_dir ${mo_file} DIRECTORY) - add_custom_target( - generate_mo_files_${po_file_name} ALL - DEPENDS ${_locale}_LC_MESSAGES_dir - COMMENT "Generate mo files") - set_target_properties(generate_mo_files_${po_file_name} PROPERTIES FOLDER - Locale) - add_custom_command( - TARGET generate_mo_files_${po_file_name} - POST_BUILD - COMMAND ${MSGFMT} --statistics -o + add_custom_target( + generate_mo_files_${po_file_name} + ALL + DEPENDS ${_locale}_LC_MESSAGES_dir + COMMENT "Generate mo files" + ) + set_target_properties( + generate_mo_files_${po_file_name} + PROPERTIES FOLDER Locale + ) + add_custom_command( + TARGET generate_mo_files_${po_file_name} + POST_BUILD + COMMAND + ${MSGFMT} --statistics -o ${OUTDIR}/${GRASS_INSTALL_LOCALEDIR}/${mo_file} ${po_file} - BYPRODUCTS ${OUTDIR}/${GRASS_INSTALL_LOCALEDIR}/${mo_file}) + BYPRODUCTS ${OUTDIR}/${GRASS_INSTALL_LOCALEDIR}/${mo_file} + ) endforeach() -add_custom_target(translation_statistics ALL - DEPENDS ${generate_mo_file_targets} - COMMENT "Create translation statistics") +add_custom_target( + translation_statistics + ALL + DEPENDS ${generate_mo_file_targets} + COMMENT "Create translation statistics" +) add_custom_command( - TARGET translation_statistics - PRE_BUILD - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} - ${CMAKE_CURRENT_SOURCE_DIR}/grass_po_stats.py - BYPRODUCTS ${OUTDIR}/${GRASS_INSTALL_MISCDIR}/translation_status.json) + TARGET translation_statistics + PRE_BUILD + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMAND + ${grass_env_command} ${PYTHON_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/grass_po_stats.py + BYPRODUCTS ${OUTDIR}/${GRASS_INSTALL_MISCDIR}/translation_status.json +) set_target_properties(translation_statistics PROPERTIES FOLDER Locale) -install(DIRECTORY ${OUTDIR}/${GRASS_INSTALL_LOCALEDIR}/ - DESTINATION ${GRASS_INSTALL_LOCALEDIR}) +install( + DIRECTORY ${OUTDIR}/${GRASS_INSTALL_LOCALEDIR}/ + DESTINATION ${GRASS_INSTALL_LOCALEDIR} +) # TODO(FHS): remove this if condition if(NOT WITH_FHS) - -install(FILES ${OUTDIR}/${GRASS_INSTALL_MISCDIR}/translation_status.json - DESTINATION ${GRASS_INSTALL_MISCDIR}) - + install( + FILES ${OUTDIR}/${GRASS_INSTALL_MISCDIR}/translation_status.json + DESTINATION ${GRASS_INSTALL_MISCDIR} + ) endif() # NOT WITH_FHS diff --git a/man/CMakeLists.txt b/man/CMakeLists.txt index 14e843499f3..7aa7634a1a0 100644 --- a/man/CMakeLists.txt +++ b/man/CMakeLists.txt @@ -6,113 +6,132 @@ set(data_files ${CMAKE_CURRENT_SOURCE_DIR}/grass_logo.png ${CMAKE_CURRENT_SOURCE_DIR}/hamburger_menu_close.svg ${CMAKE_CURRENT_SOURCE_DIR}/parser_standard_options.css - ${CMAKE_CURRENT_SOURCE_DIR}/parser_standard_options.js) + ${CMAKE_CURRENT_SOURCE_DIR}/parser_standard_options.js +) install(FILES ${data_files} DESTINATION ${GRASS_INSTALL_DOCDIR}) # TODO(FHS): remove this if condition if(NOT WITH_FHS) + string(TIMESTAMP YEAR %Y) + add_custom_target( + build_full_index + COMMAND + ${grass_env_command} ${PYTHON_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/build_full_index.py ${YEAR} + BYPRODUCTS ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/full_index.html + DEPENDS ALL_MODULES LIB_PYTHON GUI_WXPYTHON + COMMENT "man generation: build full index" + ) + set_target_properties(build_full_index PROPERTIES FOLDER Man) -string(TIMESTAMP YEAR %Y) -add_custom_target( - build_full_index - COMMAND - ${grass_env_command} ${PYTHON_EXECUTABLE} - ${CMAKE_CURRENT_SOURCE_DIR}/build_full_index.py - ${YEAR} - BYPRODUCTS ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/full_index.html - DEPENDS ALL_MODULES LIB_PYTHON GUI_WXPYTHON - COMMENT "man generation: build full index") -set_target_properties(build_full_index PROPERTIES FOLDER Man) + add_custom_command( + TARGET build_full_index + PRE_BUILD + COMMAND + ${CMAKE_COMMAND} -E copy ${data_files} + ${OUTDIR}/${GRASS_INSTALL_DOCDIR} + COMMENT "copying man files" + ) -add_custom_command( - TARGET build_full_index - PRE_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${data_files} - ${OUTDIR}/${GRASS_INSTALL_DOCDIR} - COMMENT "copying man files") + add_custom_target( + build_index + COMMAND + ${grass_env_command} ${PYTHON_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/build_index.py + ${OUTDIR}/${GRASS_INSTALL_DOCDIR} + BYPRODUCTS ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/index.html + DEPENDS build_full_index + COMMENT "man generation: build index" + ) + set_target_properties(build_index PROPERTIES FOLDER Man) -add_custom_target( - build_index - COMMAND - ${grass_env_command} ${PYTHON_EXECUTABLE} - ${CMAKE_CURRENT_SOURCE_DIR}/build_index.py ${OUTDIR}/${GRASS_INSTALL_DOCDIR} - BYPRODUCTS ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/index.html - DEPENDS build_full_index - COMMENT "man generation: build index") -set_target_properties(build_index PROPERTIES FOLDER Man) + set(target_names + build_topics + build_keywords + build_graphical_index + build_manual_gallery + ) + foreach(target_name ${target_names}) + add_custom_target( + ${target_name} + COMMAND + ${grass_env_command} ${PYTHON_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/${target_name}.py + DEPENDS build_index + COMMENT "man generation: ${target_name}" + ) + set_target_properties(${target_name} PROPERTIES FOLDER Man) + endforeach() -set(target_names build_topics build_keywords build_graphical_index - build_manual_gallery) -foreach(target_name ${target_names}) - add_custom_target( - ${target_name} - COMMAND - ${grass_env_command} ${PYTHON_EXECUTABLE} - ${CMAKE_CURRENT_SOURCE_DIR}/${target_name}.py - DEPENDS build_index - COMMENT "man generation: ${target_name}") - set_target_properties(${target_name} PROPERTIES FOLDER Man) -endforeach() + add_custom_target( + build_class_graphical + COMMAND + ${grass_env_command} ${PYTHON_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/build_class_graphical.py html + ${OUTDIR}/${GRASS_INSTALL_DOCDIR} + DEPENDS build_index + COMMENT "man generation: build_class_graphical" + ) + set_target_properties(build_class_graphical PROPERTIES FOLDER Man) -add_custom_target( - build_class_graphical - COMMAND - ${grass_env_command} ${PYTHON_EXECUTABLE} - ${CMAKE_CURRENT_SOURCE_DIR}/build_class_graphical.py - html - ${OUTDIR}/${GRASS_INSTALL_DOCDIR} - DEPENDS build_index - COMMENT "man generation: build_class_graphical") -set_target_properties(build_class_graphical PROPERTIES FOLDER Man) + add_custom_target( + build_pso + COMMAND + ${grass_env_command} ${PYTHON_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/parser_standard_options.py -t + "${CMAKE_SOURCE_DIR}/lib/gis/parser_standard_options.c" -f "grass" + -o "${OUTDIR}/${GRASS_INSTALL_DOCDIR}/parser_standard_options.html" + -p "id='opts_table' class='scroolTable'" + DEPENDS ${target_names} + COMMENT "man generation: parser standard options" + ) + set_target_properties(build_pso PROPERTIES FOLDER Man) -add_custom_target( - build_pso - COMMAND - ${grass_env_command} ${PYTHON_EXECUTABLE} - ${CMAKE_CURRENT_SOURCE_DIR}/parser_standard_options.py -t - "${CMAKE_SOURCE_DIR}/lib/gis/parser_standard_options.c" -f "grass" -o - "${OUTDIR}/${GRASS_INSTALL_DOCDIR}/parser_standard_options.html" -p - "id='opts_table' class='scroolTable'" - DEPENDS ${target_names} - COMMENT "man generation: parser standard options") -set_target_properties(build_pso PROPERTIES FOLDER Man) - -set(categories - d:display - db:database - g:general - i:imagery - m:miscellaneous - ps:postscript - r:raster - r3:raster3d - t:temporal - v:vector) -set(category_targets "") -foreach(category ${categories}) - string(REPLACE ":" ";" category_list ${category}) - list(GET category_list 0 prefix) - list(GET category_list 1 class_name) - list(APPEND category_targets build_class_${class_name}) - add_custom_target( - build_class_${class_name} - COMMAND - ${grass_env_command} ${PYTHON_EXECUTABLE} - ${CMAKE_CURRENT_SOURCE_DIR}/build_class.py ${prefix} ${class_name} - ${OUTDIR}/${GRASS_INSTALL_DOCDIR} - DEPENDS build_pso - COMMENT "man generation: build class ${class_name}") - set_target_properties(build_class_${class_name} PROPERTIES FOLDER Man) -endforeach() - -# TODO: this shouldn't depend on GUI_WXPYTHON -add_custom_target( - build_check ALL - COMMAND - ${grass_env_command} ${PYTHON_EXECUTABLE} - ${CMAKE_CURRENT_SOURCE_DIR}/build_check.py ${OUTDIR}/${GRASS_INSTALL_DOCDIR} - DEPENDS ${category_targets} build_class_graphical ALL_MODULES LIB_PYTHON GUI_WXPYTHON - COMMENT "man generation: check output") -set_target_properties(build_check PROPERTIES FOLDER Man) + set(categories + d:display + db:database + g:general + i:imagery + m:miscellaneous + ps:postscript + r:raster + r3:raster3d + t:temporal + v:vector + ) + set(category_targets "") + foreach(category ${categories}) + string(REPLACE ":" ";" category_list ${category}) + list(GET category_list 0 prefix) + list(GET category_list 1 class_name) + list(APPEND category_targets build_class_${class_name}) + add_custom_target( + build_class_${class_name} + COMMAND + ${grass_env_command} ${PYTHON_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/build_class.py ${prefix} + ${class_name} ${OUTDIR}/${GRASS_INSTALL_DOCDIR} + DEPENDS build_pso + COMMENT "man generation: build class ${class_name}" + ) + set_target_properties(build_class_${class_name} PROPERTIES FOLDER Man) + endforeach() + # TODO: this shouldn't depend on GUI_WXPYTHON + add_custom_target( + build_check + ALL + COMMAND + ${grass_env_command} ${PYTHON_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/build_check.py + ${OUTDIR}/${GRASS_INSTALL_DOCDIR} + DEPENDS + ${category_targets} + build_class_graphical + ALL_MODULES + LIB_PYTHON + GUI_WXPYTHON + COMMENT "man generation: check output" + ) + set_target_properties(build_check PROPERTIES FOLDER Man) endif() # NOT WITH_FHS diff --git a/misc/CMakeLists.txt b/misc/CMakeLists.txt index de968ef5eeb..6a8cbf01922 100644 --- a/misc/CMakeLists.txt +++ b/misc/CMakeLists.txt @@ -3,20 +3,23 @@ build_program_in_subdir(m.cogo DEPENDS grass_gis ${LIBM}) build_program_in_subdir(m.measure DEPENDS grass_gis grass_parson) build_program_in_subdir(m.transform DEPENDS grass_gis grass_imagery - grass_raster grass_vector ${LIBM}) + grass_raster grass_vector ${LIBM} +) if(TARGET grass_ogsf) - build_program_in_subdir( - m.nviz.image - DEPENDS - grass_gis - grass_ogsf - grass_nviz - grass_vector - grass_dbmibase - grass_dbmiclient - grass_dbmidriver) + build_program_in_subdir( + m.nviz.image + DEPENDS + grass_gis + grass_ogsf + grass_nviz + grass_vector + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + ) - build_program_in_subdir(m.nviz.script DEPENDS grass_display grass_raster - grass_gis ${LIBM}) + build_program_in_subdir(m.nviz.script DEPENDS grass_display grass_raster + grass_gis ${LIBM} + ) endif(TARGET grass_ogsf) diff --git a/ps/CMakeLists.txt b/ps/CMakeLists.txt index a4bd5e47f25..c16f1df6a9d 100644 --- a/ps/CMakeLists.txt +++ b/ps/CMakeLists.txt @@ -11,25 +11,32 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver grass_symb - ${LIBM}) + ${LIBM} +) add_custom_command( - TARGET ps.map - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory - ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/paint/decorations - COMMAND ${CMAKE_COMMAND} -E make_directory - ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/paint/patterns - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/ps.map/prolog.ps - ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/paint - COMMAND - ${CMAKE_COMMAND} -E copy_directory - ${CMAKE_CURRENT_SOURCE_DIR}/ps.map/decorations - ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/paint/decorations - COMMAND - ${CMAKE_COMMAND} -E copy_directory - ${CMAKE_CURRENT_SOURCE_DIR}/ps.map/patterns - ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/paint/patterns) + TARGET ps.map + POST_BUILD + COMMAND + ${CMAKE_COMMAND} -E make_directory + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/paint/decorations + COMMAND + ${CMAKE_COMMAND} -E make_directory + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/paint/patterns + COMMAND + ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/ps.map/prolog.ps + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/paint + COMMAND + ${CMAKE_COMMAND} -E copy_directory + ${CMAKE_CURRENT_SOURCE_DIR}/ps.map/decorations + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/paint/decorations + COMMAND + ${CMAKE_COMMAND} -E copy_directory + ${CMAKE_CURRENT_SOURCE_DIR}/ps.map/patterns + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/paint/patterns +) -install(DIRECTORY ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/paint - DESTINATION ${GRASS_INSTALL_ETCDIR}) +install( + DIRECTORY ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/paint + DESTINATION ${GRASS_INSTALL_ETCDIR} +) diff --git a/python/grass/CMakeLists.txt b/python/grass/CMakeLists.txt index b089cb76160..2d8f494b098 100644 --- a/python/grass/CMakeLists.txt +++ b/python/grass/CMakeLists.txt @@ -23,12 +23,13 @@ set(PYDIRS temporal temporal/ply tools - utils) + utils +) set(PYDIR_GRASS ${GRASS_INSTALL_PYDIR}/grass) foreach(pydir ${PYDIRS}) - copy_python_files_in_subdir(${pydir} ${PYDIR_GRASS}) + copy_python_files_in_subdir(${pydir} ${PYDIR_GRASS}) endforeach() copy_python_files_in_subdir(app ${PYDIR_GRASS} EXCLUDE resource_paths.py) @@ -38,13 +39,16 @@ file(TO_NATIVE_PATH ${CMAKE_BINARY_DIR}/bin BINARY_DIR) set(CONFIG_PROJSHARE) get_filename_component(PROJ_INSTALL_PREFIX ${PROJ_INCLUDE_DIRS} PATH) if(DEFINED ENV{PROJSHARE}) - message(WARNING "External PROJ directory not specified; default will be used") - set(CONFIG_PROJSHARE "$ENV{PROJSHARE}") + message( + WARNING + "External PROJ directory not specified; default will be used" + ) + set(CONFIG_PROJSHARE "$ENV{PROJSHARE}") else() - set(CONFIG_PROJSHARE "${PROJ_INSTALL_PREFIX}/share/proj") - if(EXISTS ${CONFIG_PROJSHARE}/epsg) - message(STATUS "PROJ directory ${CONFIG_PROJSHARE}") - endif() + set(CONFIG_PROJSHARE "${PROJ_INSTALL_PREFIX}/share/proj") + if(EXISTS ${CONFIG_PROJSHARE}/epsg) + message(STATUS "PROJ directory ${CONFIG_PROJSHARE}") + endif() endif() file(TO_NATIVE_PATH "${PROJ_INSTALL_PREFIX}/share/proj" PROJ_LIB) file(TO_NATIVE_PATH ${CONFIG_PROJSHARE} GRASS_PROJSHARE) @@ -53,10 +57,18 @@ file(TO_NATIVE_PATH ${CONFIG_PROJSHARE} GRASS_PROJSHARE) set(GRASS_PREFIX ${OUTDIR}) set(GISBASE_INSTALL_PATH ${GISBASE_DIR}) set(START_UP ${PROJECT_NAME_LOWER}) -configure_file(app/resource_paths.py ${OUTDIR}/${PYDIR_GRASS}/app/resource_paths.py @ONLY) +configure_file( + app/resource_paths.py + ${OUTDIR}/${PYDIR_GRASS}/app/resource_paths.py + @ONLY +) set(GRASS_PREFIX ${CMAKE_INSTALL_PREFIX}) -configure_file(app/resource_paths.py ${CMAKE_CURRENT_BINARY_DIR}/resource_paths.py @ONLY) +configure_file( + app/resource_paths.py + ${CMAKE_CURRENT_BINARY_DIR}/resource_paths.py + @ONLY +) unset(GISBASE_INSTALL_PATH) unset(GRASS_PREFIX) unset(START_UP) @@ -65,14 +77,16 @@ set(pydir_targets ${PYDIRS} app) list(TRANSFORM pydir_targets REPLACE "/" "_") list(TRANSFORM pydir_targets PREPEND "python_") -add_custom_target( - LIB_PYTHON - VERBATIM - DEPENDS ${pydir_targets}) +add_custom_target(LIB_PYTHON VERBATIM DEPENDS ${pydir_targets}) set_target_properties(LIB_PYTHON PROPERTIES FOLDER Misc) -install(DIRECTORY ${OUTDIR}/${PYDIR_GRASS} DESTINATION ${GRASS_INSTALL_PYDIR} - PATTERN "*/resource_paths.py" EXCLUDE) -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/resource_paths.py - DESTINATION ${GRASS_INSTALL_PYDIR}/grass/app) +install( + DIRECTORY ${OUTDIR}/${PYDIR_GRASS} + DESTINATION ${GRASS_INSTALL_PYDIR} + PATTERN "*/resource_paths.py" EXCLUDE +) +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/resource_paths.py + DESTINATION ${GRASS_INSTALL_PYDIR}/grass/app +) diff --git a/python/grass/pygrass/CMakeLists.txt b/python/grass/pygrass/CMakeLists.txt index da001607086..fccac9c65b1 100644 --- a/python/grass/pygrass/CMakeLists.txt +++ b/python/grass/pygrass/CMakeLists.txt @@ -1,9 +1,11 @@ -execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory - etc/python/grass/pygrass/) +execute_process( + COMMAND ${CMAKE_COMMAND} -E make_directory etc/python/grass/pygrass/ +) copy_python_file(${CMAKE_CURRENT_SOURCE_DIR}/errors.py etc/python/grass/pygrass) copy_python_file(${CMAKE_CURRENT_SOURCE_DIR}/utils.py etc/python/grass/pygrass) copy_python_file(${CMAKE_CURRENT_SOURCE_DIR}/orderdict.py - etc/python/grass/pygrass) + etc/python/grass/pygrass +) build_pymodule_in_subdir(messages etc/python/grass/pygrass) diff --git a/python/libgrass_interface_generator/CMakeLists.txt b/python/libgrass_interface_generator/CMakeLists.txt index 0db0ec012a4..1de09f0fa00 100644 --- a/python/libgrass_interface_generator/CMakeLists.txt +++ b/python/libgrass_interface_generator/CMakeLists.txt @@ -21,10 +21,11 @@ set(MODULES vedit segment rowio - temporal) + temporal +) if(TARGET grass_ogsf) - list(APPEND MODULES ogsf nviz) + list(APPEND MODULES ogsf nviz) endif() set(date_HDRS datetime.h defs/datetime.h) @@ -36,8 +37,13 @@ set(raster_HDRS raster.h defs/raster.h) set(gmath_HDRS gmath.h defs/gmath.h) set(proj_HDRS gprojects.h defs/gprojects.h) set(proj_LIBS grass_gproj) -set(vector_HDRS vector.h defs/vector.h vect/dig_structs.h vect/dig_defines.h - vect/dig_externs.h) +set(vector_HDRS + vector.h + defs/vector.h + vect/dig_structs.h + vect/dig_defines.h + vect/dig_externs.h +) set(display_HDRS display.h defs/display.h) set(dbmi_HDRS dbmi.h defs/dbmi.h) set(dbmi_LIBS grass_dbmibase grass_dbmiclient) @@ -60,74 +66,85 @@ set(vedit_INCHDRS ${PostgreSQL_INCLUDE_DIRS} ${GDAL_INCLUDE_DIRS}) set(_c_flags ${CMAKE_C_FLAGS}) if(MSVC) - string(APPEND _c_flags " -I${CMAKE_SOURCE_DIR}/msvc") + string(APPEND _c_flags " -I${CMAKE_SOURCE_DIR}/msvc") elseif(APPLE AND CMAKE_OSX_SYSROOT) - string(APPEND _c_flags " --sysroot ${CMAKE_OSX_SYSROOT}") - message("_c_flags") + string(APPEND _c_flags " --sysroot ${CMAKE_OSX_SYSROOT}") + message("_c_flags") endif() foreach(module ${MODULES}) - if(NOT ${module}_LIBS) - set(${module}_LIBS grass_${module}) - endif() - - if(NOT ${module}_HDRS) - message(FATAL_ERROR "${module}_HDRS is not set") - endif() - - if(NOT ${module}_INCHDRS) - set(${module}_INCHDRS) - endif() - list(INSERT ${module}_INCHDRS 0 ${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}) - if(CMAKE_INSTALL_INCLUDEDIR) - list(INSERT ${module}_INCHDRS 0 - ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}) - endif() - if(CMAKE_PREFIX_PATH) - list(INSERT ${module}_INCHDRS 0 ${CMAKE_PREFIX_PATH}) - endif() - list(REMOVE_DUPLICATES ${module}_INCHDRS) - - if(NOT ${module}_TARGET_NAME) - list(GET ${module}_LIBS 0 first_lib) - set(${module}_TARGET_NAME ${first_lib}_py) - endif() - - if(NOT ${module}_TARGET_NAME) - message(FATAL_ERROR "${${module}_TARGET_NAME} is not set") - endif() - - set(output_file "${OUTDIR}/${GRASS_INSTALL_PYDIR}/grass/lib/${module}.py") - add_custom_command( - OUTPUT ${output_file} - DEPENDS ${${module}_LIBS} - COMMAND - ${CMAKE_COMMAND} -DCTYPESGEN_PY=${CMAKE_CURRENT_SOURCE_DIR}/run.py - -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE} -DCOMPILER=${CMAKE_C_COMPILER} - "-DHDRS=${${module}_HDRS}" "-DLIBS=${${module}_LIBS}" -DOUTDIR=${OUTDIR} - "-DINCHDRS=${${module}_INCHDRS}" -DC_FLAGS=${_c_flags} - -DGRASS_INSTALL_INCLUDEDIR=${GRASS_INSTALL_INCLUDEDIR} - -DGRASS_INSTALL_SCRIPTDIR=${GRASS_INSTALL_SCRIPTDIR} - -DGRASS_INSTALL_DEMODIR=${GRASS_INSTALL_DEMODIR} - -DGRASS_INSTALL_LIBDIR=${GRASS_INSTALL_LIBDIR} - -DRUNTIME_GISBASE=${RUNTIME_GISBASE} -DOUT_FILE=${output_file} - -DMSVC=${MSVC} -DAPPLE=${APPLE} - -DGRASS_VERSION_NUMBER=${GRASS_VERSION_NUMBER} - -DGRASS_VERSION_MAJOR=${GRASS_VERSION_MAJOR} - -DGRASS_VERSION_MINOR=${GRASS_VERSION_MINOR} -P - ${CMAKE_SOURCE_DIR}/cmake/ctypesgen.cmake - COMMENT "Generating ${output_file}" - VERBATIM) - - add_custom_target(${${module}_TARGET_NAME} ALL DEPENDS ${output_file}) - set_target_properties(${${module}_TARGET_NAME} PROPERTIES FOLDER "Python/GRASS Libraries Interface") - install(FILES ${output_file} DESTINATION ${GRASS_INSTALL_PYDIR}/grass/lib) - + if(NOT ${module}_LIBS) + set(${module}_LIBS grass_${module}) + endif() + + if(NOT ${module}_HDRS) + message(FATAL_ERROR "${module}_HDRS is not set") + endif() + + if(NOT ${module}_INCHDRS) + set(${module}_INCHDRS) + endif() + list(INSERT ${module}_INCHDRS 0 ${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}) + if(CMAKE_INSTALL_INCLUDEDIR) + list( + INSERT ${module}_INCHDRS + 0 + ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR} + ) + endif() + if(CMAKE_PREFIX_PATH) + list(INSERT ${module}_INCHDRS 0 ${CMAKE_PREFIX_PATH}) + endif() + list(REMOVE_DUPLICATES ${module}_INCHDRS) + + if(NOT ${module}_TARGET_NAME) + list(GET ${module}_LIBS 0 first_lib) + set(${module}_TARGET_NAME ${first_lib}_py) + endif() + + if(NOT ${module}_TARGET_NAME) + message(FATAL_ERROR "${${module}_TARGET_NAME} is not set") + endif() + + set(output_file "${OUTDIR}/${GRASS_INSTALL_PYDIR}/grass/lib/${module}.py") + add_custom_command( + OUTPUT ${output_file} + DEPENDS ${${module}_LIBS} + COMMAND + ${CMAKE_COMMAND} -DCTYPESGEN_PY=${CMAKE_CURRENT_SOURCE_DIR}/run.py + -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE} + -DCOMPILER=${CMAKE_C_COMPILER} "-DHDRS=${${module}_HDRS}" + "-DLIBS=${${module}_LIBS}" -DOUTDIR=${OUTDIR} + "-DINCHDRS=${${module}_INCHDRS}" -DC_FLAGS=${_c_flags} + -DGRASS_INSTALL_INCLUDEDIR=${GRASS_INSTALL_INCLUDEDIR} + -DGRASS_INSTALL_SCRIPTDIR=${GRASS_INSTALL_SCRIPTDIR} + -DGRASS_INSTALL_DEMODIR=${GRASS_INSTALL_DEMODIR} + -DGRASS_INSTALL_LIBDIR=${GRASS_INSTALL_LIBDIR} + -DRUNTIME_GISBASE=${RUNTIME_GISBASE} -DOUT_FILE=${output_file} + -DMSVC=${MSVC} -DAPPLE=${APPLE} + -DGRASS_VERSION_NUMBER=${GRASS_VERSION_NUMBER} + -DGRASS_VERSION_MAJOR=${GRASS_VERSION_MAJOR} + -DGRASS_VERSION_MINOR=${GRASS_VERSION_MINOR} -P + ${CMAKE_SOURCE_DIR}/cmake/ctypesgen.cmake + COMMENT "Generating ${output_file}" + VERBATIM + ) + + add_custom_target(${${module}_TARGET_NAME} ALL DEPENDS ${output_file}) + set_target_properties( + ${${module}_TARGET_NAME} + PROPERTIES FOLDER "Python/GRASS Libraries Interface" + ) + install(FILES ${output_file} DESTINATION ${GRASS_INSTALL_PYDIR}/grass/lib) endforeach() -file(COPY_FILE libgrass__init__.py - ${OUTDIR}/${GRASS_INSTALL_PYDIR}/grass/lib/__init__.py) -install(FILES ${OUTDIR}/${GRASS_INSTALL_PYDIR}/grass/lib/__init__.py - DESTINATION ${GRASS_INSTALL_PYDIR}/grass/lib) +file( + COPY_FILE libgrass__init__.py + ${OUTDIR}/${GRASS_INSTALL_PYDIR}/grass/lib/__init__.py +) +install( + FILES ${OUTDIR}/${GRASS_INSTALL_PYDIR}/grass/lib/__init__.py + DESTINATION ${GRASS_INSTALL_PYDIR}/grass/lib +) unset(_c_flags) diff --git a/raster/CMakeLists.txt b/raster/CMakeLists.txt index ff92138b765..85c67eef41e 100644 --- a/raster/CMakeLists.txt +++ b/raster/CMakeLists.txt @@ -128,35 +128,39 @@ set(raster_modules_list r.water.outlet r.watershed r.what - r.what.color) + r.what.color +) if(WITH_LIBPNG) - list(APPEND raster_modules_list r.in.png r.out.png) + list(APPEND raster_modules_list r.in.png r.out.png) endif() if(WITH_FFTW) - list(APPEND raster_modules_list r.surf.fractal) + list(APPEND raster_modules_list r.surf.fractal) endif() if(MSVC) - list(REMOVE_ITEM raster_modules_list r.in.xyz) + list(REMOVE_ITEM raster_modules_list r.in.xyz) endif() add_custom_target( - ALL_RASTER_MODULES ALL - DEPENDS ${raster_modules_list} - COMMENT "All raster modules are built.") + ALL_RASTER_MODULES + ALL + DEPENDS ${raster_modules_list} + COMMENT "All raster modules are built." +) set_target_properties(ALL_RASTER_MODULES PROPERTIES FOLDER Misc) if(WITH_DOCS) - generate_docs(rasterintro TARGET ALL_RASTER_MODULES) + generate_docs(rasterintro TARGET ALL_RASTER_MODULES) endif() build_program_in_subdir(r.basins.fill DEPENDS grass_gis grass_raster) build_program_in_subdir(r.buildvrt DEPENDS grass_gis grass_raster grass_gmath - ${LIBM}) + ${LIBM} +) build_program_in_subdir(r.buffer DEPENDS grass_gis grass_raster) @@ -168,7 +172,8 @@ build_program_in_subdir( grass_vector grass_bitmap grass_dig2 - ${LIBM}) + ${LIBM} +) build_program_in_subdir(r.category DEPENDS grass_gis grass_raster grass_parson) @@ -195,7 +200,8 @@ build_program_in_subdir( grass_dbmibase grass_dbmiclient grass_dbmidriver - ${LIBM}) + ${LIBM} +) build_program_in_subdir( r.cost @@ -204,12 +210,14 @@ build_program_in_subdir( grass_raster grass_segment grass_vector - ${LIBM}) + ${LIBM} +) build_program_in_subdir(r.covar DEPENDS grass_gis grass_raster ${LIBM}) build_program_in_subdir(r.cross DEPENDS grass_gis grass_raster grass_btree - grass_btree2) + grass_btree2 +) build_program_in_subdir(r.describe DEPENDS grass_gis grass_raster grass_parson) @@ -225,10 +233,12 @@ build_program_in_subdir( ${LIBM} PRIMARY_DEPENDS PROJ::proj - GDAL::GDAL) + GDAL::GDAL +) build_program_in_subdir(r.external.out DEPENDS grass_gis grass_raster grass_gproj - PRIMARY_DEPENDS GDAL::GDAL) + PRIMARY_DEPENDS GDAL::GDAL +) build_program_in_subdir(r.fill.dir DEPENDS grass_gis grass_raster) @@ -242,15 +252,18 @@ build_program_in_subdir( grass_segment grass_vector grass_bitmap - ${LIBM}) + ${LIBM} +) build_program_in_subdir(r.geomorphon DEPENDS grass_gis grass_raster grass_gmath grass_parson - ${LIBM}) + ${LIBM} +) build_program_in_subdir(r.grow.distance DEPENDS grass_gis grass_raster ${LIBM}) build_program_in_subdir(r.gwflow DEPENDS grass_gis grass_raster grass_gpde - grass_gmath) + grass_gmath +) build_program_in_subdir(r.his DEPENDS grass_gis grass_raster grass_gproj) @@ -261,7 +274,8 @@ build_program_in_subdir( grass_raster grass_gproj grass_parson - ${LIBM}) + ${LIBM} +) build_program_in_subdir(r.in.ascii DEPENDS grass_gis grass_raster) @@ -277,29 +291,31 @@ build_program_in_subdir( ${LIBM} PRIMARY_DEPENDS PROJ::proj - GDAL::GDAL) + GDAL::GDAL +) build_program_in_subdir(r.in.gridatb DEPENDS grass_gis grass_raster) build_program_in_subdir(r.in.mat DEPENDS grass_gis grass_raster) if(WITH_PDAL) - file(GLOB r_in_pdal_SOURCES "r.in.pdal/*.c" "r.in.pdal/*.cpp") - build_program_in_subdir( - r.in.pdal - SOURCES - "${r_in_pdal_SOURCES}" - DEPENDS - grass_gis - grass_raster - grass_vector - grass_gmath - grass_segment - grass_gproj - ${LIBM} - PRIMARY_DEPENDS - ${PDAL}) - list(APPEND raster_modules_list r.in.pdal) + file(GLOB r_in_pdal_SOURCES "r.in.pdal/*.c" "r.in.pdal/*.cpp") + build_program_in_subdir( + r.in.pdal + SOURCES + "${r_in_pdal_SOURCES}" + DEPENDS + grass_gis + grass_raster + grass_vector + grass_gmath + grass_segment + grass_gproj + ${LIBM} + PRIMARY_DEPENDS + ${PDAL} + ) + list(APPEND raster_modules_list r.in.pdal) endif() build_program_in_subdir( @@ -309,12 +325,13 @@ build_program_in_subdir( grass_raster ${LIBM} PRIMARY_DEPENDS - PNG::PNG) + PNG::PNG +) build_program_in_subdir(r.in.poly DEPENDS grass_gis grass_raster) if(NOT MSVC) - build_program_in_subdir(r.in.xyz DEPENDS grass_gis grass_raster ${LIBM}) + build_program_in_subdir(r.in.xyz DEPENDS grass_gis grass_raster ${LIBM}) endif() build_program_in_subdir( r.info @@ -324,7 +341,8 @@ build_program_in_subdir( grass_gis ${LIBM} grass_raster - grass_parson) + grass_parson +) build_program_in_subdir(r.kappa DEPENDS grass_gis grass_raster grass_parson ${LIBM}) @@ -333,7 +351,8 @@ build_program_in_subdir(r.latlong DEPENDS grass_gis grass_raster grass_gproj) build_program_in_subdir(r.lake DEPENDS grass_gis grass_raster) build_program_in_subdir(r.mask.status DEPENDS grass_gis grass_manage - grass_parson grass_raster) + grass_parson grass_raster +) build_program_in_subdir( r.mfilter @@ -342,7 +361,8 @@ build_program_in_subdir( grass_raster grass_rowio OPTIONAL_DEPENDS - OpenMP::OpenMP_C) + OpenMP::OpenMP_C +) build_program_in_subdir(r.mode DEPENDS grass_gis grass_raster) @@ -354,12 +374,14 @@ build_program_in_subdir( grass_stats ${LIBM} OPTIONAL_DEPENDS - OpenMP::OpenMP_C) + OpenMP::OpenMP_C +) build_program_in_subdir(r.null DEPENDS grass_gis grass_raster) build_program_in_subdir(r.object.geometry DEPENDS grass_gis grass_raster - grass_parson ${LIBM}) + grass_parson ${LIBM} +) build_program_in_subdir(r.out.ascii DEPENDS grass_gis grass_raster) @@ -376,12 +398,14 @@ build_program_in_subdir( ${LIBM} PROJ::proj PRIMARY_DEPENDS - GDAL::GDAL) + GDAL::GDAL +) set_source_files_properties( - r.out.gdal/main.c - PROPERTIES COMPILE_DEFINITIONS - "GRASS_VERSION_NUMBER=\"${GRASS_VERSION_NUMBER}\"") + r.out.gdal/main.c + PROPERTIES + COMPILE_DEFINITIONS "GRASS_VERSION_NUMBER=\"${GRASS_VERSION_NUMBER}\"" +) build_program_in_subdir(r.out.gridatb DEPENDS grass_gis grass_raster) @@ -390,7 +414,8 @@ build_program_in_subdir(r.out.mat DEPENDS grass_gis grass_raster) build_program_in_subdir(r.out.mpeg DEPENDS grass_gis grass_raster) build_program_in_subdir(r.out.png DEPENDS grass_gis grass_raster - PRIMARY_DEPENDS PNG::PNG) + PRIMARY_DEPENDS PNG::PNG +) build_program_in_subdir(r.out.pov DEPENDS grass_gis grass_raster) @@ -411,16 +436,20 @@ build_program_in_subdir( grass_interpfl grass_interpdata grass_qtree - ${LIBM}) + ${LIBM} +) build_program_in_subdir(r.patch DEPENDS grass_gis grass_raster OPTIONAL_DEPENDS - OpenMP::OpenMP_C) + OpenMP::OpenMP_C +) build_program_in_subdir(r.path DEPENDS grass_gis grass_raster grass_vector - ${LIBM}) + ${LIBM} +) build_program_in_subdir(r.profile DEPENDS grass_gis grass_raster grass_parson - ${LIBM}) + ${LIBM} +) build_program_in_subdir( r.proj @@ -431,7 +460,8 @@ build_program_in_subdir( grass_parson ${LIBM} OPTIONAL_DEPENDS - OpenMP::OpenMP_C) + OpenMP::OpenMP_C +) build_program_in_subdir(r.quant DEPENDS grass_gis grass_raster) @@ -446,7 +476,8 @@ build_program_in_subdir( grass_dbmibase grass_dbmiclient grass_dbmidriver - ${LIBM}) + ${LIBM} +) build_program_in_subdir(r.random.cells DEPENDS grass_gis grass_raster ${LIBM}) @@ -459,10 +490,12 @@ build_program_in_subdir(r.recode DEPENDS grass_gis grass_raster) build_program_in_subdir(r.region DEPENDS grass_gis grass_raster grass_vector) build_program_in_subdir(r.regression.line DEPENDS grass_gis grass_raster grass_parson - ${LIBM}) + ${LIBM} +) build_program_in_subdir(r.regression.multi DEPENDS grass_gis grass_raster grass_parson - ${LIBM}) + ${LIBM} +) build_program_in_subdir(r.report DEPENDS grass_gis grass_raster grass_parson) @@ -475,7 +508,8 @@ build_program_in_subdir( grass_vector grass_segment grass_lidar - ${LIBM}) + ${LIBM} +) build_program_in_subdir( r.resamp.filter @@ -484,7 +518,8 @@ build_program_in_subdir( grass_raster ${LIBM} OPTIONAL_DEPENDS - OpenMP::OpenMP_C) + OpenMP::OpenMP_C +) build_program_in_subdir( r.resamp.interp @@ -493,7 +528,8 @@ build_program_in_subdir( grass_raster ${LIBM} OPTIONAL_DEPENDS - OpenMP::OpenMP_C) + OpenMP::OpenMP_C +) build_program_in_subdir( r.resamp.rst @@ -503,10 +539,12 @@ build_program_in_subdir( grass_gmath grass_interpfl grass_interpdata - grass_qtree) + grass_qtree +) build_program_in_subdir(r.resamp.stats DEPENDS grass_gis grass_raster - grass_stats ${LIBM}) + grass_stats ${LIBM} +) build_program_in_subdir(r.resample DEPENDS grass_gis grass_raster) @@ -523,7 +561,8 @@ build_program_in_subdir( grass_raster grass_stats OPTIONAL_DEPENDS - OpenMP::OpenMP_C) + OpenMP::OpenMP_C +) build_program_in_subdir( r.series.accumulate @@ -532,10 +571,12 @@ build_program_in_subdir( grass_raster grass_stats OPTIONAL_DEPENDS - OpenMP::OpenMP_C) + OpenMP::OpenMP_C +) build_program_in_subdir(r.series.interp DEPENDS grass_gis grass_raster - grass_stats) + grass_stats +) build_program_in_subdir(r.relief DEPENDS grass_gis grass_raster ${LIBM}) @@ -548,7 +589,8 @@ build_program_in_subdir( grass_raster ${LIBM} OPTIONAL_DEPENDS - OpenMP::OpenMP_C) + OpenMP::OpenMP_C +) build_program_in_subdir( r.smooth.edgepreserve @@ -558,7 +600,8 @@ build_program_in_subdir( grass_rowio ${LIBM} OPTIONAL_DEPENDS - OpenMP::OpenMP_C) + OpenMP::OpenMP_C +) build_program_in_subdir( r.solute.transport @@ -567,12 +610,14 @@ build_program_in_subdir( grass_raster grass_gmath grass_gpde - ${LIBM}) + ${LIBM} +) add_subdirectory(r.spread) build_program_in_subdir(r.spreadpath DEPENDS grass_gis grass_raster - grass_segment) + grass_segment +) build_program_in_subdir(r.statistics DEPENDS grass_gis grass_raster ${LIBM}) @@ -592,7 +637,8 @@ build_program_in_subdir( grass_dbmibase grass_dbmiclient grass_dbmidriver - ${LIBM}) + ${LIBM} +) build_program_in_subdir( r.sun @@ -603,13 +649,16 @@ build_program_in_subdir( grass_gproj ${LIBM} OPTIONAL_DEPENDS - OpenMP::OpenMP_C) + OpenMP::OpenMP_C +) build_program_in_subdir(r.sunhours DEPENDS grass_gis grass_raster grass_gproj - ${LIBM}) + ${LIBM} +) build_program_in_subdir(r.sunmask DEPENDS grass_gis grass_raster grass_gproj - ${LIBM}) + ${LIBM} +) build_program_in_subdir(r.support DEPENDS grass_gis grass_raster) @@ -620,10 +669,11 @@ build_program_in_subdir(r.surf.area DEPENDS grass_gis grass_raster ${LIBM}) build_program_in_subdir(r.surf.contour DEPENDS grass_gis grass_raster) if(WITH_FFTW) - build_program_in_subdir(r.surf.fractal DEPENDS grass_gis grass_raster - grass_gmath ${LIBM}) + build_program_in_subdir(r.surf.fractal DEPENDS grass_gis grass_raster + grass_gmath ${LIBM} + ) else() - message(STATUS "r.surf.fractal disabled because FFTW is not available") + message(STATUS "r.surf.fractal disabled because FFTW is not available") endif() build_program_in_subdir(r.surf.gauss DEPENDS grass_gis grass_raster grass_gmath) @@ -631,12 +681,13 @@ build_program_in_subdir(r.surf.gauss DEPENDS grass_gis grass_raster grass_gmath) build_program_in_subdir(r.surf.idw DEPENDS grass_gis grass_raster ${LIBM}) build_program_in_subdir(r.surf.random DEPENDS grass_gis grass_raster - grass_gmath) + grass_gmath +) if(MSVC) - set(USER_NAME $ENV{USERNAME}) + set(USER_NAME $ENV{USERNAME}) else() - set(USER_NAME $ENV{USER}) + set(USER_NAME $ENV{USER}) endif() build_program_in_subdir(r.texture DEPENDS grass_gis grass_raster ${LIBM}) @@ -648,10 +699,12 @@ build_program_in_subdir(r.tile DEPENDS grass_gis grass_raster) build_program_in_subdir(r.timestamp DEPENDS grass_gis grass_raster) build_program_in_subdir(r.to.rast3 DEPENDS grass_gis grass_raster - grass_raster3d) + grass_raster3d +) build_program_in_subdir(r.to.rast3elev DEPENDS grass_gis grass_raster - grass_raster3d) + grass_raster3d +) build_program_in_subdir( r.to.vect @@ -661,7 +714,8 @@ build_program_in_subdir( grass_vector grass_dbmibase grass_dbmiclient - grass_dbmidriver) + grass_dbmidriver +) build_program_in_subdir(r.topidx DEPENDS grass_gis grass_raster ${LIBM}) @@ -684,7 +738,8 @@ build_program_in_subdir( grass_dbmibase grass_dbmiclient grass_dbmidriver - grass_parson) + grass_parson +) build_program_in_subdir( r.walk @@ -693,12 +748,14 @@ build_program_in_subdir( grass_raster grass_segment grass_vector - ${LIBM}) + ${LIBM} +) build_program_in_subdir(r.water.outlet DEPENDS grass_gis grass_raster) build_program_in_subdir(r.what DEPENDS grass_gis grass_raster grass_vector - grass_parson) + grass_parson +) build_program_in_subdir(r.what.color DEPENDS grass_gis grass_raster grass_parson) @@ -713,7 +770,8 @@ build_program_in_subdir( grass_segment PRIMARY_DEPENDS LIBLAS - ${LIBM}) + ${LIBM} +) add_subdirectory(r.li) @@ -729,7 +787,8 @@ build_program_in_subdir( SRC_REGEX "*.cpp" DEFS - "-DUSER=${USER_NAME}") + "-DUSER=${USER_NAME}" +) build_program_in_subdir( r.terraflow @@ -741,6 +800,7 @@ build_program_in_subdir( SRC_REGEX "*.cpp" DEFS - "-DUSER=${USER_NAME};-DNODATA_FIX;-DELEV_FLOAT") + "-DUSER=${USER_NAME};-DNODATA_FIX;-DELEV_FLOAT" +) add_subdirectory(r.watershed) diff --git a/raster/r.colors.out/CMakeLists.txt b/raster/r.colors.out/CMakeLists.txt index 9e3d0a593d7..53437c7ab64 100644 --- a/raster/r.colors.out/CMakeLists.txt +++ b/raster/r.colors.out/CMakeLists.txt @@ -6,7 +6,8 @@ build_program( DEPENDS grass_gis grass_raster - grass_parson) + grass_parson +) build_program( NAME @@ -17,4 +18,5 @@ build_program( grass_gis grass_raster grass_raster3d - grass_parson) + grass_parson +) diff --git a/raster/r.colors/CMakeLists.txt b/raster/r.colors/CMakeLists.txt index c810b7e9efd..a3d581a8d15 100644 --- a/raster/r.colors/CMakeLists.txt +++ b/raster/r.colors/CMakeLists.txt @@ -10,7 +10,8 @@ build_program( grass_gis grass_raster grass_raster3d - ${LIBM}) + ${LIBM} +) build_program( NAME @@ -21,4 +22,5 @@ build_program( grass_gis grass_raster grass_raster3d - ${LIBM}) + ${LIBM} +) diff --git a/raster/r.li/CMakeLists.txt b/raster/r.li/CMakeLists.txt index 29b388f8498..5a08fb568cb 100644 --- a/raster/r.li/CMakeLists.txt +++ b/raster/r.li/CMakeLists.txt @@ -14,7 +14,8 @@ set(SUBDIRS1 r.li.richness r.li.shannon r.li.shape - r.li.simpson) + r.li.simpson +) # r.li.setup build_library_in_subdir( @@ -25,12 +26,13 @@ build_library_in_subdir( grass_gis grass_raster HTML_FILE_NAME - "r.li.daemon") + "r.li.daemon" +) if(WITH_DOCS) - generate_docs(r.li TARGET grass_rli) + generate_docs(r.li TARGET grass_rli) endif() foreach(SUBDIR ${SUBDIRS1}) - build_program_in_subdir(${SUBDIR} DEPENDS grass_gis grass_rli grass_raster ${LIBM}) + build_program_in_subdir(${SUBDIR} DEPENDS grass_gis grass_rli grass_raster ${LIBM}) endforeach() diff --git a/raster/r.mapcalc/CMakeLists.txt b/raster/r.mapcalc/CMakeLists.txt index 85956b130ec..eed9e0785d6 100644 --- a/raster/r.mapcalc/CMakeLists.txt +++ b/raster/r.mapcalc/CMakeLists.txt @@ -12,10 +12,23 @@ set(r_mapcalc_common_SRCS main.c xrowcol.c ${CMAKE_CURRENT_BINARY_DIR}/mapcalc.tab.c - ${CMAKE_CURRENT_BINARY_DIR}/mapcalc.yy.c) + ${CMAKE_CURRENT_BINARY_DIR}/mapcalc.yy.c +) -set(r_mapcalc_SRCS ${r_mapcalc_common_SRCS} map.c xarea.c xcoor.c xres.c) -set(r3_mapcalc_SRCS ${r_mapcalc_common_SRCS} map3.c xarea.c xcoor3.c xres3.c) +set(r_mapcalc_SRCS + ${r_mapcalc_common_SRCS} + map.c + xarea.c + xcoor.c + xres.c +) +set(r3_mapcalc_SRCS + ${r_mapcalc_common_SRCS} + map3.c + xarea.c + xcoor3.c + xres3.c +) build_program( NAME @@ -31,7 +44,8 @@ build_program( Readline::Readline Readline::History Threads::Threads - OpenMP::OpenMP_C) + OpenMP::OpenMP_C +) build_program( NAME @@ -47,7 +61,8 @@ build_program( OPTIONAL_DEPENDS Readline::Readline Readline::History - Threads::Threads) + Threads::Threads +) # mapcalc.yy.c is attached to both targets, work around this with build # dependency chain diff --git a/raster/r.sim/CMakeLists.txt b/raster/r.sim/CMakeLists.txt index 3d41ee24213..69b713fee98 100644 --- a/raster/r.sim/CMakeLists.txt +++ b/raster/r.sim/CMakeLists.txt @@ -12,7 +12,8 @@ build_library_in_subdir( OPTIONAL_DEPENDS OpenMP::OpenMP_C HEADERS - "simlib.h") + "simlib.h" +) build_program_in_subdir( r.sim.water @@ -25,7 +26,8 @@ build_program_in_subdir( OPTIONAL_DEPENDS OpenMP::OpenMP_C INCLUDES - "${CMAKE_CURRENT_SOURCE_DIR}/../simlib") + "${CMAKE_CURRENT_SOURCE_DIR}/../simlib" +) build_program_in_subdir( r.sim.sediment @@ -38,4 +40,5 @@ build_program_in_subdir( OPTIONAL_DEPENDS OpenMP::OpenMP_C INCLUDES - "${CMAKE_CURRENT_SOURCE_DIR}/../simlib") + "${CMAKE_CURRENT_SOURCE_DIR}/../simlib" +) diff --git a/raster/r.spread/CMakeLists.txt b/raster/r.spread/CMakeLists.txt index 3187fe6be15..500648cb7c3 100644 --- a/raster/r.spread/CMakeLists.txt +++ b/raster/r.spread/CMakeLists.txt @@ -12,7 +12,8 @@ set(r_spread_SRCS replaceHa.c select_linksB.c spot.c - spread.c) + spread.c +) build_program( NAME @@ -23,4 +24,5 @@ build_program( grass_gis grass_raster grass_display - ${LIBM}) + ${LIBM} +) diff --git a/raster/r.univar/CMakeLists.txt b/raster/r.univar/CMakeLists.txt index af08f5edca5..d86d6250862 100644 --- a/raster/r.univar/CMakeLists.txt +++ b/raster/r.univar/CMakeLists.txt @@ -12,7 +12,8 @@ build_program( grass_parson ${LIBM} OPTIONAL_DEPENDS - OpenMP::OpenMP_C) + OpenMP::OpenMP_C +) build_program( NAME @@ -26,4 +27,5 @@ build_program( grass_parson ${LIBM} OPTIONAL_DEPENDS - OpenMP::OpenMP_C) + OpenMP::OpenMP_C +) diff --git a/raster/r.watershed/CMakeLists.txt b/raster/r.watershed/CMakeLists.txt index c99dcc96815..e738a168097 100644 --- a/raster/r.watershed/CMakeLists.txt +++ b/raster/r.watershed/CMakeLists.txt @@ -8,7 +8,8 @@ build_program_in_subdir( ${LIBM} RUNTIME_OUTPUT_DIR ${GRASS_INSTALL_ETCBINDIR}/r.watershed - NO_DOCS) + NO_DOCS +) build_program_in_subdir( seg @@ -20,6 +21,7 @@ build_program_in_subdir( ${LIBM} RUNTIME_OUTPUT_DIR ${GRASS_INSTALL_ETCBINDIR}/r.watershed - NO_DOCS) + NO_DOCS +) build_program_in_subdir(front NAME r.watershed DEPENDS grass_gis grass_raster) diff --git a/raster3d/CMakeLists.txt b/raster3d/CMakeLists.txt index d63d1cc56b6..4bd99aa0d72 100644 --- a/raster3d/CMakeLists.txt +++ b/raster3d/CMakeLists.txt @@ -21,35 +21,41 @@ set(raster3d_modules_list r3.stats r3.support r3.timestamp - r3.to.rast) + r3.to.rast +) if(MSVC) - list(REMOVE_ITEM raster3d_modules_list r3.in.v5d r3.out.v5d) + list(REMOVE_ITEM raster3d_modules_list r3.in.v5d r3.out.v5d) endif() add_custom_target( - ALL_RASTER3D_MODULES ALL - DEPENDS ${raster3d_modules_list} - COMMENT "All temporal modules are built.") + ALL_RASTER3D_MODULES + ALL + DEPENDS ${raster3d_modules_list} + COMMENT "All temporal modules are built." +) set_target_properties(ALL_RASTER3D_MODULES PROPERTIES FOLDER Misc) if(WITH_DOCS) - generate_docs(raster3dintro TARGET ALL_RASTER3D_MODULES) + generate_docs(raster3dintro TARGET ALL_RASTER3D_MODULES) endif() build_program_in_subdir(r3.cross.rast DEPENDS grass_gis grass_raster - grass_raster3d) + grass_raster3d +) add_subdirectory(r3.flow) build_program_in_subdir(r3.gradient DEPENDS grass_gis grass_raster3d ${LIBM}) build_program_in_subdir(r3.gwflow DEPENDS grass_gis grass_gmath grass_raster3d - grass_gpde) + grass_gpde +) build_program_in_subdir(r3.in.ascii DEPENDS grass_gis grass_gmath grass_raster - grass_raster3d) + grass_raster3d +) build_program_in_subdir(r3.in.bin DEPENDS grass_gis grass_raster grass_raster3d) @@ -60,14 +66,15 @@ build_program_in_subdir(r3.mask DEPENDS grass_gis grass_raster3d) build_program_in_subdir(r3.null DEPENDS grass_gis grass_raster3d) build_program_in_subdir(r3.neighbors DEPENDS grass_gis grass_raster3d - grass_stats grass_raster) + grass_stats grass_raster +) build_program_in_subdir(r3.out.ascii DEPENDS grass_gis grass_raster3d) build_program_in_subdir(r3.out.bin DEPENDS grass_gis grass_raster3d) if(NOT MSVC) - build_program_in_subdir(r3.out.v5d DEPENDS grass_gis grass_raster3d ${LIBM}) + build_program_in_subdir(r3.out.v5d DEPENDS grass_gis grass_raster3d ${LIBM}) endif() build_program_in_subdir(r3.retile DEPENDS grass_gis grass_raster grass_raster3d) @@ -75,18 +82,22 @@ build_program_in_subdir(r3.retile DEPENDS grass_gis grass_raster grass_raster3d) build_program_in_subdir(r3.stats DEPENDS grass_gis grass_raster3d) build_program_in_subdir(r3.support DEPENDS grass_gis grass_raster - grass_raster3d) + grass_raster3d +) build_program_in_subdir(r3.timestamp DEPENDS grass_gis grass_raster3d) build_program_in_subdir(r3.to.rast DEPENDS grass_gis grass_raster - grass_raster3d) + grass_raster3d +) build_program_in_subdir(r3.out.vtk DEPENDS grass_gis grass_raster - grass_raster3d) + grass_raster3d +) build_program_in_subdir(r3.mkdspf DEPENDS grass_gis grass_raster3d grass_gpde - grass_dspf ${LIBM}) + grass_dspf ${LIBM} +) build_program_in_subdir( r3.in.lidar @@ -98,7 +109,8 @@ build_program_in_subdir( grass_segment ${LIBM} PRIMARY_DEPENDS - LIBLAS) + LIBLAS +) build_program_in_subdir( r3.out.netcdf @@ -110,9 +122,10 @@ build_program_in_subdir( PRIMARY_DEPENDS NetCDF::NetCDF OPTIONAL_DEPENDS - PROJ::proj) + PROJ::proj +) # mode_t is not available on msvc. Discuss if(NOT MSVC) - build_program_in_subdir(r3.in.v5d DEPENDS grass_gis grass_raster3d ${LIBM}) + build_program_in_subdir(r3.in.v5d DEPENDS grass_gis grass_raster3d ${LIBM}) endif() diff --git a/raster3d/r3.flow/CMakeLists.txt b/raster3d/r3.flow/CMakeLists.txt index d19ad025e25..de188cc5656 100644 --- a/raster3d/r3.flow/CMakeLists.txt +++ b/raster3d/r3.flow/CMakeLists.txt @@ -1,4 +1,10 @@ -set(r3_flow_SRCS main.c flowline.c integrate.c interpolate.c voxel_traversal.c) +set(r3_flow_SRCS + main.c + flowline.c + integrate.c + interpolate.c + voxel_traversal.c +) build_program( NAME @@ -13,10 +19,16 @@ build_program( grass_raster grass_raster3d grass_vector - ${LIBM}) + ${LIBM} +) -set(test_r3flow_SRCS test_main.c flowline.c integrate.c interpolate.c - voxel_traversal.c) +set(test_r3flow_SRCS + test_main.c + flowline.c + integrate.c + interpolate.c + voxel_traversal.c +) build_program( NAME @@ -31,4 +43,5 @@ build_program( grass_dbmiclient grass_dbmidriver grass_vector - ${LIBM}) + ${LIBM} +) diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt index 22fd18a10e2..49f44f492eb 100644 --- a/scripts/CMakeLists.txt +++ b/scripts/CMakeLists.txt @@ -80,76 +80,98 @@ set(script_DIRS v.unpack v.what.strds v.what.vect - wxpyimgview) + wxpyimgview +) foreach(script_DIR ${script_DIRS}) - build_script_in_subdir(${script_DIR}) + build_script_in_subdir(${script_DIR}) endforeach() add_custom_command( - TARGET d.polar - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory - ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/d.polar - COMMAND - ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/d.polar/ps_defs.eps - ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/d.polar) -install(DIRECTORY ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/d.polar - DESTINATION ${GRASS_INSTALL_ETCDIR}) + TARGET d.polar + POST_BUILD + COMMAND + ${CMAKE_COMMAND} -E make_directory + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/d.polar + COMMAND + ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/d.polar/ps_defs.eps + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/d.polar +) +install( + DIRECTORY ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/d.polar + DESTINATION ${GRASS_INSTALL_ETCDIR} +) add_custom_command( - TARGET db.test - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory - ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/db.test - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/db.test/test1 - ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/db.test) -install(DIRECTORY ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/db.test - DESTINATION ${GRASS_INSTALL_ETCDIR}) + TARGET db.test + POST_BUILD + COMMAND + ${CMAKE_COMMAND} -E make_directory + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/db.test + COMMAND + ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/db.test/test1 + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/db.test +) +install( + DIRECTORY ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/db.test + DESTINATION ${GRASS_INSTALL_ETCDIR} +) add_custom_command( - TARGET i.band.library - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory - ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/i.band.library - COMMAND - ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/i.band.library/landsat.json - ${CMAKE_CURRENT_SOURCE_DIR}/i.band.library/sentinel.json - ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/i.band.library) -install(DIRECTORY ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/i.band.library - DESTINATION ${GRASS_INSTALL_ETCDIR}) + TARGET i.band.library + POST_BUILD + COMMAND + ${CMAKE_COMMAND} -E make_directory + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/i.band.library + COMMAND + ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/i.band.library/landsat.json + ${CMAKE_CURRENT_SOURCE_DIR}/i.band.library/sentinel.json + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/i.band.library +) +install( + DIRECTORY ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/i.band.library + DESTINATION ${GRASS_INSTALL_ETCDIR} +) # TODO: Create CMakeLists.txt in scripts/r.in.wms and scripts/wxpyimgview # respectively, and put the following there. -file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms - DESTINATION ${OUTDIR}/${GRASS_INSTALL_ETCBINDIR}) +file( + COPY ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms + DESTINATION ${OUTDIR}/${GRASS_INSTALL_ETCBINDIR} +) -file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/wxpyimgview/wxpyimgview_gui.py - DESTINATION ${OUTDIR}/${GRASS_INSTALL_ETCBINDIR}) +file( + COPY ${CMAKE_CURRENT_SOURCE_DIR}/wxpyimgview/wxpyimgview_gui.py + DESTINATION ${OUTDIR}/${GRASS_INSTALL_ETCBINDIR} +) add_custom_target( - r.in.wms_files - COMMAND ${CMAKE_COMMAND} -E make_directory - ${OUTDIR}/${GRASS_INSTALL_ETCBINDIR}/r.in.wms - COMMAND - ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms/wms_base.py - ${OUTDIR}/${GRASS_INSTALL_ETCBINDIR}/r.in.wms - COMMAND - ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms/wms_cap_parsers.py - ${OUTDIR}/${GRASS_INSTALL_ETCBINDIR}/r.in.wms - COMMAND - ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms/wms_drv.py - ${OUTDIR}/${GRASS_INSTALL_ETCBINDIR}/r.in.wms - COMMAND - ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms/wms_gdal_drv.py - ${OUTDIR}/${GRASS_INSTALL_ETCBINDIR}/r.in.wms - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms/srs.py - ${OUTDIR}/${GRASS_INSTALL_ETCBINDIR}/r.in.wms - DEPENDS v.to.lines) + r.in.wms_files + COMMAND + ${CMAKE_COMMAND} -E make_directory + ${OUTDIR}/${GRASS_INSTALL_ETCBINDIR}/r.in.wms + COMMAND + ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms/wms_base.py + ${OUTDIR}/${GRASS_INSTALL_ETCBINDIR}/r.in.wms + COMMAND + ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms/wms_cap_parsers.py + ${OUTDIR}/${GRASS_INSTALL_ETCBINDIR}/r.in.wms + COMMAND + ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms/wms_drv.py + ${OUTDIR}/${GRASS_INSTALL_ETCBINDIR}/r.in.wms + COMMAND + ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms/wms_gdal_drv.py + ${OUTDIR}/${GRASS_INSTALL_ETCBINDIR}/r.in.wms + COMMAND + ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms/srs.py + ${OUTDIR}/${GRASS_INSTALL_ETCBINDIR}/r.in.wms + DEPENDS v.to.lines +) add_dependencies(r.in.wms r.in.wms_files) set_target_properties(r.in.wms_files PROPERTIES FOLDER "Tools/Raster") diff --git a/scripts/g.extension/testsuite/data/sample_modules/r.plus.example/CMakeLists.txt b/scripts/g.extension/testsuite/data/sample_modules/r.plus.example/CMakeLists.txt index 8f6baa5e09c..7f82174c430 100644 --- a/scripts/g.extension/testsuite/data/sample_modules/r.plus.example/CMakeLists.txt +++ b/scripts/g.extension/testsuite/data/sample_modules/r.plus.example/CMakeLists.txt @@ -10,4 +10,5 @@ build_addon( r.plus.example.py DOCFILES r.plus.example.html - r.plus.example.md) + r.plus.example.md +) diff --git a/temporal/CMakeLists.txt b/temporal/CMakeLists.txt index 8013228cb86..cf977a9478d 100644 --- a/temporal/CMakeLists.txt +++ b/temporal/CMakeLists.txt @@ -48,23 +48,26 @@ set(temporal_script_modules_list t.vect.list t.vect.observe.strds t.vect.univar - t.vect.what.strds) + t.vect.what.strds +) set(temporal_modules_list t.connect) add_custom_target( - ALL_TEMPORAL_MODULES ALL - DEPENDS ${temporal_script_modules_list} ${temporal_modules_list} - COMMENT "All temporal modules are built.") + ALL_TEMPORAL_MODULES + ALL + DEPENDS ${temporal_script_modules_list} ${temporal_modules_list} + COMMENT "All temporal modules are built." +) set_target_properties(ALL_TEMPORAL_MODULES PROPERTIES FOLDER Misc) if(WITH_DOCS) - generate_docs(temporalintro TARGET ALL_TEMPORAL_MODULES) + generate_docs(temporalintro TARGET ALL_TEMPORAL_MODULES) endif() build_program_in_subdir(t.connect DEPENDS grass_gis grass_temporal grass_parson) foreach(temporal_DIR ${temporal_script_modules_list}) - build_script_in_subdir(${temporal_DIR}) + build_script_in_subdir(${temporal_DIR}) endforeach() diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt index 7e0126e8d39..5c5ea87e8d3 100644 --- a/utils/CMakeLists.txt +++ b/utils/CMakeLists.txt @@ -1,26 +1,37 @@ # Copy utility script files, fix file permissions set(py_files - g.html2man/g.html2man.py - g.html2man/ggroff.py - g.html2man/ghtml.py - generate_last_commit_file.py - mkdocs.py - mkhtml.py - mkmarkdown.py - thumbnails.py) + g.html2man/g.html2man.py + g.html2man/ggroff.py + g.html2man/ghtml.py + generate_last_commit_file.py + mkdocs.py + mkhtml.py + mkmarkdown.py + thumbnails.py +) foreach(py_file ${py_files}) - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${py_file} ${CMAKE_CURRENT_BINARY_DIR} COPYONLY) - cmake_path(GET py_file FILENAME pyfile) - file(CHMOD ${CMAKE_CURRENT_BINARY_DIR}/${pyfile} - FILE_PERMISSIONS - OWNER_READ OWNER_WRITE OWNER_EXECUTE - GROUP_READ GROUP_EXECUTE - WORLD_READ WORLD_EXECUTE) + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/${py_file} + ${CMAKE_CURRENT_BINARY_DIR} + COPYONLY + ) + cmake_path(GET py_file FILENAME pyfile) + file( + CHMOD ${CMAKE_CURRENT_BINARY_DIR}/${pyfile} + FILE_PERMISSIONS + OWNER_READ + OWNER_WRITE + OWNER_EXECUTE + GROUP_READ + GROUP_EXECUTE + WORLD_READ + WORLD_EXECUTE + ) endforeach() set(current_time_s_ms_SRCS "timer/main.c") if(MSVC) - list(APPEND current_time_s_ms_SRCS "../msvc/sys/gettimeofday.c") + list(APPEND current_time_s_ms_SRCS "../msvc/sys/gettimeofday.c") endif() build_program_in_subdir( timer @@ -32,7 +43,8 @@ build_program_in_subdir( "${current_time_s_ms_SRCS}" RUNTIME_OUTPUT_DIR ${GRASS_INSTALL_ETCBINDIR} - NO_DOCS) + NO_DOCS +) build_program( NAME @@ -43,47 +55,49 @@ build_program( ${GRASS_INSTALL_UTILSDIR} PACKAGE "NONE" - NO_DOCS) + NO_DOCS +) add_dependencies(g.echo python_doc_utils) add_custom_target( - python_doc_utils - COMMAND - ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_BINARY_DIR}/g.html2man.py - ${OUTDIR}/${GRASS_INSTALL_UTILSDIR} - COMMAND - ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/generate_last_commit_file.py - ${OUTDIR}/${GRASS_INSTALL_UTILSDIR} - COMMAND - ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/g.html2man.py - ${OUTDIR}/${GRASS_INSTALL_UTILSDIR} - COMMAND - ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/ggroff.py - ${OUTDIR}/${GRASS_INSTALL_UTILSDIR} - COMMAND - ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/ghtml.py - ${OUTDIR}/${GRASS_INSTALL_UTILSDIR} - COMMAND - ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/mkhtml.py - ${OUTDIR}/${GRASS_INSTALL_UTILSDIR} - COMMAND - ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/mkdocs.py - ${OUTDIR}/${GRASS_INSTALL_UTILSDIR} - COMMAND - ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/mkmarkdown.py - ${OUTDIR}/${GRASS_INSTALL_UTILSDIR}) + python_doc_utils + COMMAND + ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/g.html2man.py + ${OUTDIR}/${GRASS_INSTALL_UTILSDIR} + COMMAND + ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_BINARY_DIR}/generate_last_commit_file.py + ${OUTDIR}/${GRASS_INSTALL_UTILSDIR} + COMMAND + ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/g.html2man.py + ${OUTDIR}/${GRASS_INSTALL_UTILSDIR} + COMMAND + ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/ggroff.py + ${OUTDIR}/${GRASS_INSTALL_UTILSDIR} + COMMAND + ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/ghtml.py + ${OUTDIR}/${GRASS_INSTALL_UTILSDIR} + COMMAND + ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/mkhtml.py + ${OUTDIR}/${GRASS_INSTALL_UTILSDIR} + COMMAND + ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/mkdocs.py + ${OUTDIR}/${GRASS_INSTALL_UTILSDIR} + COMMAND + ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/mkmarkdown.py + ${OUTDIR}/${GRASS_INSTALL_UTILSDIR} +) set_target_properties(python_doc_utils PROPERTIES FOLDER Docs) install( - PROGRAMS - ${OUTDIR}/${GRASS_INSTALL_UTILSDIR}/g.html2man.py - ${OUTDIR}/${GRASS_INSTALL_UTILSDIR}/generate_last_commit_file.py - ${OUTDIR}/${GRASS_INSTALL_UTILSDIR}/ggroff.py - ${OUTDIR}/${GRASS_INSTALL_UTILSDIR}/ghtml.py - ${OUTDIR}/${GRASS_INSTALL_UTILSDIR}/mkdocs.py - ${OUTDIR}/${GRASS_INSTALL_UTILSDIR}/mkhtml.py - ${OUTDIR}/${GRASS_INSTALL_UTILSDIR}/mkmarkdown.py - DESTINATION - ${GRASS_INSTALL_UTILSDIR}) + PROGRAMS + ${OUTDIR}/${GRASS_INSTALL_UTILSDIR}/g.html2man.py + ${OUTDIR}/${GRASS_INSTALL_UTILSDIR}/generate_last_commit_file.py + ${OUTDIR}/${GRASS_INSTALL_UTILSDIR}/ggroff.py + ${OUTDIR}/${GRASS_INSTALL_UTILSDIR}/ghtml.py + ${OUTDIR}/${GRASS_INSTALL_UTILSDIR}/mkdocs.py + ${OUTDIR}/${GRASS_INSTALL_UTILSDIR}/mkhtml.py + ${OUTDIR}/${GRASS_INSTALL_UTILSDIR}/mkmarkdown.py + DESTINATION ${GRASS_INSTALL_UTILSDIR} +) diff --git a/vector/CMakeLists.txt b/vector/CMakeLists.txt index 60ce7dee6b0..4b2939499c1 100644 --- a/vector/CMakeLists.txt +++ b/vector/CMakeLists.txt @@ -99,24 +99,28 @@ set(vector_modules_list v.voronoi v.what v.what.rast - v.what.rast3) + v.what.rast3 +) if(WITH_GEOS) - list(APPEND vector_modules_list v.buffer) + list(APPEND vector_modules_list v.buffer) endif() add_custom_target( - ALL_VECTOR_MODULES ALL - DEPENDS ${vector_modules_list} - COMMENT "All vector modules are built.") + ALL_VECTOR_MODULES + ALL + DEPENDS ${vector_modules_list} + COMMENT "All vector modules are built." +) set_target_properties(ALL_VECTOR_MODULES PROPERTIES FOLDER Misc) if(WITH_DOCS) - generate_docs(vectorintro TARGET ALL_VECTOR_MODULES) - generate_docs(lrs - TARGET ALL_VECTOR_MODULES - SOURCEDIR "${CMAKE_CURRENT_SOURCE_DIR}/v.lrs") + generate_docs(vectorintro TARGET ALL_VECTOR_MODULES) + generate_docs(lrs + TARGET ALL_VECTOR_MODULES + SOURCEDIR "${CMAKE_CURRENT_SOURCE_DIR}/v.lrs" + ) endif() # build v.buffer only with GEOS following @@ -131,7 +135,8 @@ build_program_in_subdir( grass_vector ${LIBM} PRIMARY_DEPENDS - GEOS::geos_c) + GEOS::geos_c +) build_program_in_subdir(v.build DEPENDS grass_gis grass_vector) @@ -148,12 +153,14 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_vector - grass_parson) + grass_parson +) build_program_in_subdir(v.clean DEPENDS grass_gis grass_vector ${LIBM}) build_program_in_subdir(v.cluster DEPENDS grass_btree2 grass_gis grass_vector - ${LIBM}) + ${LIBM} +) build_program_in_subdir( v.colors @@ -164,7 +171,8 @@ build_program_in_subdir( grass_gis grass_raster grass_raster3d - grass_vector) + grass_vector +) build_program_in_subdir( v.colors.out @@ -174,7 +182,8 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_raster - grass_vector) + grass_vector +) build_program_in_subdir( v.db.connect @@ -184,7 +193,8 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_vector - grass_parson) + grass_parson +) build_program_in_subdir( v.db.select @@ -194,7 +204,8 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_vector - grass_parson) + grass_parson +) build_program_in_subdir( v.decimate @@ -204,7 +215,8 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_raster - grass_vector) + grass_vector +) build_program_in_subdir(v.delaunay DEPENDS grass_gis grass_vector) @@ -218,7 +230,8 @@ build_program_in_subdir( grass_gmath grass_vector grass_parson - ${LIBM}) + ${LIBM} +) build_program_in_subdir(v.drape DEPENDS grass_gis grass_raster grass_vector) @@ -230,7 +243,8 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_vector - grass_vedit) + grass_vedit +) build_program_in_subdir( v.extract @@ -241,7 +255,8 @@ build_program_in_subdir( grass_gis grass_gmath grass_vector - ${LIBM}) + ${LIBM} +) build_program_in_subdir( v.extrude @@ -251,7 +266,8 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_raster - grass_vector) + grass_vector +) build_program_in_subdir( v.fill.holes @@ -260,7 +276,8 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver grass_gis - grass_vector) + grass_vector +) build_program_in_subdir( v.generalize @@ -272,7 +289,8 @@ build_program_in_subdir( grass_dig2 grass_gis grass_vector - ${LIBM}) + ${LIBM} +) build_program_in_subdir(v.hull DEPENDS grass_gis grass_vector) @@ -285,7 +303,8 @@ build_program_in_subdir( grass_dig2 grass_gis grass_vector - grass_parson) + grass_parson +) build_program_in_subdir( v.in.ascii @@ -294,7 +313,8 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver grass_gis - grass_vector) + grass_vector +) build_program_in_subdir( v.in.db @@ -304,7 +324,8 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_vector - ${LIBM}) + ${LIBM} +) build_program_in_subdir( v.in.dxf @@ -314,22 +335,24 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_vector - ${LIBM}) + ${LIBM} +) if(WITH_PDAL) -file(GLOB v_in_pdal_SOURCES "v.in.pdal/*.c" "v.in.pdal/main.cpp") - build_program_in_subdir( - v.in.pdal - SOURCES - "${v_in_pdal_SOURCES}" - DEPENDS - grass_gis - grass_gproj - grass_vector - ${LIBM} - PRIMARY_DEPENDS - ${PDAL}) - list(APPEND vector_modules_list v.in.pdal) + file(GLOB v_in_pdal_SOURCES "v.in.pdal/*.c" "v.in.pdal/main.cpp") + build_program_in_subdir( + v.in.pdal + SOURCES + "${v_in_pdal_SOURCES}" + DEPENDS + grass_gis + grass_gproj + grass_vector + ${LIBM} + PRIMARY_DEPENDS + ${PDAL} + ) + list(APPEND vector_modules_list v.in.pdal) endif() build_program_in_subdir( @@ -340,7 +363,8 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_raster - grass_vector) + grass_vector +) build_program_in_subdir( v.kcv @@ -350,7 +374,8 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_vector - ${LIBM}) + ${LIBM} +) build_program_in_subdir( v.kernel @@ -359,7 +384,8 @@ build_program_in_subdir( grass_gmath grass_raster grass_vector - ${LIBM}) + ${LIBM} +) build_program_in_subdir( v.label @@ -369,7 +395,8 @@ build_program_in_subdir( grass_dbmidriver grass_display grass_gis - grass_vector) + grass_vector +) build_program_in_subdir( v.label.sa @@ -383,10 +410,12 @@ build_program_in_subdir( grass_vector ${LIBM} PRIMARY_DEPENDS - Freetype::Freetype) + Freetype::Freetype +) build_program_in_subdir(v.proj DEPENDS grass_gis grass_gproj grass_vector - ${LIBM}) + ${LIBM} +) build_program_in_subdir( v.profile @@ -397,7 +426,8 @@ build_program_in_subdir( grass_vector grass_parson OPTIONAL_DEPENDS - GEOS::geos_c) + GEOS::geos_c +) add_subdirectory(v.lrs) @@ -409,7 +439,8 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_vector - ${LIBM}) + ${LIBM} +) build_program_in_subdir( v.neighbors @@ -421,7 +452,8 @@ build_program_in_subdir( grass_raster grass_stats grass_vector - ${LIBM}) + ${LIBM} +) build_program_in_subdir( v.net @@ -431,7 +463,8 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_vector - ${LIBM}) + ${LIBM} +) build_program_in_subdir( v.net.alloc @@ -441,7 +474,8 @@ build_program_in_subdir( grass_dbmidriver grass_dgl grass_gis - grass_vector) + grass_vector +) build_program_in_subdir( v.net.allpairs @@ -451,7 +485,8 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_neta - grass_vector) + grass_vector +) build_program_in_subdir(v.net.bridge DEPENDS grass_gis grass_neta grass_vector) @@ -464,7 +499,8 @@ build_program_in_subdir( grass_dgl grass_gis grass_neta - grass_vector) + grass_vector +) build_program_in_subdir( v.net.components @@ -474,10 +510,12 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_neta - grass_vector) + grass_vector +) build_program_in_subdir(v.net.connectivity DEPENDS grass_gis grass_neta - grass_vector) + grass_vector +) build_program_in_subdir( v.net.distance @@ -488,7 +526,8 @@ build_program_in_subdir( grass_dgl grass_gis grass_neta - grass_vector) + grass_vector +) build_program_in_subdir( v.net.flow @@ -498,7 +537,8 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_neta - grass_vector) + grass_vector +) build_program_in_subdir( v.net.iso @@ -508,7 +548,8 @@ build_program_in_subdir( grass_dbmidriver grass_dgl grass_gis - grass_vector) + grass_vector +) build_program_in_subdir( v.net.path @@ -517,13 +558,16 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver grass_gis - grass_vector) + grass_vector +) build_program_in_subdir(v.net.salesman DEPENDS grass_gis grass_neta - grass_vector) + grass_vector +) build_program_in_subdir(v.net.spanningtree DEPENDS grass_gis grass_neta - grass_vector) + grass_vector +) build_program_in_subdir(v.net.steiner DEPENDS grass_gis grass_neta grass_vector) @@ -535,10 +579,12 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_neta - grass_vector) + grass_vector +) build_program_in_subdir(v.net.visibility DEPENDS grass_dgl grass_gis - grass_vector) + grass_vector +) build_program_in_subdir( v.normal @@ -549,7 +595,8 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_vector - ${LIBM}) + ${LIBM} +) build_program_in_subdir(v.out.ascii DEPENDS grass_gis grass_vector) @@ -564,7 +611,8 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver grass_gis - grass_vector) + grass_vector +) build_program_in_subdir( v.out.vtk @@ -573,7 +621,8 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver grass_gis - grass_vector) + grass_vector +) build_program_in_subdir( v.outlier @@ -585,7 +634,8 @@ build_program_in_subdir( grass_gmath grass_lidar grass_vector - ${LIBM}) + ${LIBM} +) build_program_in_subdir( v.overlay @@ -594,7 +644,8 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver grass_gis - grass_vector) + grass_vector +) build_program_in_subdir(v.parallel DEPENDS grass_gis grass_vector) @@ -606,7 +657,8 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_vector - ${LIBM}) + ${LIBM} +) build_program_in_subdir( v.perturb @@ -616,7 +668,8 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_vector - ${LIBM}) + ${LIBM} +) build_program_in_subdir(v.split DEPENDS grass_gis grass_vector ${LIBM}) @@ -629,7 +682,8 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver grass_gis - grass_vector) + grass_vector +) build_program_in_subdir( v.reclass @@ -638,7 +692,8 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver grass_gis - grass_vector) + grass_vector +) build_program_in_subdir( v.rectify @@ -647,7 +702,8 @@ build_program_in_subdir( grass_gmath grass_imagery grass_vector - ${LIBM}) + ${LIBM} +) build_program_in_subdir( v.sample @@ -657,7 +713,8 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_raster - grass_vector) + grass_vector +) build_program_in_subdir(v.segment DEPENDS grass_gis grass_vector ${LIBM}) @@ -670,7 +727,8 @@ build_program_in_subdir( grass_gis grass_vector OPTIONAL_DEPENDS - GEOS::geos_c) + GEOS::geos_c +) build_program_in_subdir(v.support DEPENDS grass_gis grass_vector) @@ -687,7 +745,8 @@ build_program_in_subdir( grass_raster grass_segment grass_vector - ${LIBM}) + ${LIBM} +) build_program_in_subdir( v.surf.idw @@ -698,7 +757,8 @@ build_program_in_subdir( grass_gis grass_raster grass_vector - ${LIBM}) + ${LIBM} +) build_program_in_subdir( v.surf.rst @@ -715,7 +775,8 @@ build_program_in_subdir( grass_raster ${LIBM} OPTIONAL_DEPENDS - OpenMP::OpenMP_C) + OpenMP::OpenMP_C +) build_program_in_subdir( v.transform @@ -725,7 +786,8 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_vector - ${LIBM}) + ${LIBM} +) build_program_in_subdir(v.timestamp DEPENDS grass_gis grass_vector) @@ -736,7 +798,8 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver grass_gis - grass_vector) + grass_vector +) build_program_in_subdir( v.to.db @@ -747,7 +810,8 @@ build_program_in_subdir( grass_gis grass_parson grass_vector - ${LIBM}) + ${LIBM} +) build_program_in_subdir( v.to.points @@ -757,7 +821,8 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_vector - ${LIBM}) + ${LIBM} +) build_program_in_subdir( v.to.rast @@ -768,7 +833,8 @@ build_program_in_subdir( grass_gis grass_raster grass_vector - ${LIBM}) + ${LIBM} +) build_program_in_subdir( v.to.rast3 @@ -779,7 +845,8 @@ build_program_in_subdir( grass_gis grass_raster3d grass_vector - ${LIBM}) + ${LIBM} +) build_program_in_subdir(v.type DEPENDS grass_gis grass_vector) @@ -789,7 +856,7 @@ build_program_in_subdir(v.type DEPENDS grass_gis grass_vector) # https://developercommunity.visualstudio.com/t/NAN-is-no-longer-compile-time-constant-i/10688907#T-N10849410 set(ucrt_noisy_nan_DEFS "") if(WIN32) - set(ucrt_noisy_nan_DEFS "-D_UCRT_NOISY_NAN") + set(ucrt_noisy_nan_DEFS "-D_UCRT_NOISY_NAN") endif() build_program_in_subdir( @@ -803,7 +870,8 @@ build_program_in_subdir( grass_gis grass_vector grass_parson - ${LIBM}) + ${LIBM} +) build_program_in_subdir( v.voronoi @@ -814,7 +882,8 @@ build_program_in_subdir( grass_dig2 grass_gis grass_vector - ${LIBM}) + ${LIBM} +) build_program_in_subdir( v.what @@ -824,7 +893,8 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_vector - grass_parson) + grass_parson +) build_program_in_subdir( v.what.rast @@ -835,7 +905,8 @@ build_program_in_subdir( grass_gis grass_raster grass_vector - grass_parson) + grass_parson +) build_program_in_subdir( v.what.rast3 @@ -845,7 +916,8 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_raster3d - grass_vector) + grass_vector +) build_program_in_subdir( v.vect.stats @@ -856,7 +928,8 @@ build_program_in_subdir( grass_gis grass_stats grass_vector - grass_parson) + grass_parson +) build_program_in_subdir( v.vol.rst @@ -869,7 +942,8 @@ build_program_in_subdir( grass_raster grass_raster3d grass_vector - ${LIBM}) + ${LIBM} +) build_program_in_subdir( v.out.ogr @@ -882,7 +956,8 @@ build_program_in_subdir( grass_vector PRIMARY_DEPENDS PROJ::proj - GDAL::GDAL) + GDAL::GDAL +) build_program_in_subdir( v.in.ogr @@ -896,7 +971,8 @@ build_program_in_subdir( ${LIBM} PRIMARY_DEPENDS PROJ::proj - GDAL::GDAL) + GDAL::GDAL +) build_program_in_subdir( v.external @@ -912,10 +988,12 @@ build_program_in_subdir( PROJ::proj GDAL::GDAL OPTIONAL_DEPENDS - PostgreSQL::PostgreSQL) + PostgreSQL::PostgreSQL +) build_program_in_subdir(v.external.out DEPENDS grass_gis grass_vector - PRIMARY_DEPENDS GDAL::GDAL) + PRIMARY_DEPENDS GDAL::GDAL +) build_program_in_subdir( v.in.lidar @@ -928,7 +1006,8 @@ build_program_in_subdir( grass_vector ${LIBM} PRIMARY_DEPENDS - LIBLAS) + LIBLAS +) build_program_in_subdir( v.lidar.correction @@ -942,7 +1021,8 @@ build_program_in_subdir( grass_vector ${LIBM} PRIMARY_DEPENDS - LIBLAS) + LIBLAS +) build_program_in_subdir( v.lidar.edgedetection @@ -956,7 +1036,8 @@ build_program_in_subdir( grass_vector ${LIBM} PRIMARY_DEPENDS - LIBLAS) + LIBLAS +) build_program_in_subdir( v.lidar.growing @@ -969,7 +1050,8 @@ build_program_in_subdir( grass_raster grass_vector PRIMARY_DEPENDS - LIBLAS) + LIBLAS +) build_program_in_subdir( v.out.lidar @@ -983,7 +1065,8 @@ build_program_in_subdir( grass_vector ${LIBM} PRIMARY_DEPENDS - LIBLAS) + LIBLAS +) build_program_in_subdir( v.out.postgis @@ -994,4 +1077,5 @@ build_program_in_subdir( grass_gis grass_vector PRIMARY_DEPENDS - PostgreSQL::PostgreSQL) + PostgreSQL::PostgreSQL +) diff --git a/vector/v.lrs/CMakeLists.txt b/vector/v.lrs/CMakeLists.txt index bcfbc44f01f..accebdcfe37 100644 --- a/vector/v.lrs/CMakeLists.txt +++ b/vector/v.lrs/CMakeLists.txt @@ -8,7 +8,8 @@ build_library_in_subdir( grass_dbmiclient grass_dbmidriver HEADERS - "lrs.h") + "lrs.h" +) add_dependencies(grass_lrs db.drivers) build_program_in_subdir( v.lrs.create @@ -20,7 +21,8 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver GDAL::GDAL - ${LIBM}) + ${LIBM} +) build_program_in_subdir( v.lrs.segment @@ -32,7 +34,8 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver GDAL::GDAL - ${LIBM}) + ${LIBM} +) build_program_in_subdir( v.lrs.label @@ -44,7 +47,8 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver GDAL::GDAL - ${LIBM}) + ${LIBM} +) build_program_in_subdir( v.lrs.where @@ -55,4 +59,5 @@ build_program_in_subdir( grass_dbmibase grass_dbmiclient grass_dbmidriver - GDAL::GDAL) + GDAL::GDAL +)