From 2d0e741ea8b76cb8efac0b7eb62f1ed066c521d3 Mon Sep 17 00:00:00 2001 From: Rashad Kanavath Date: Sun, 11 Jun 2017 21:52:19 +0200 Subject: [PATCH 001/253] parent 464ffca1e1fbb98107593ee60c43a8449e567eed author Rashad Kanavath 1497210739 +0200 committer Markus Neteler 1669989265 +0100 parent 464ffca1e1fbb98107593ee60c43a8449e567eed author Rashad Kanavath 1497210739 +0200 committer Markus Neteler 1669989193 +0100 parent 464ffca1e1fbb98107593ee60c43a8449e567eed author Rashad Kanavath 1497210739 +0200 committer Markus Neteler 1669989189 +0100 parent 464ffca1e1fbb98107593ee60c43a8449e567eed author Rashad Kanavath 1497210739 +0200 committer Markus Neteler 1669989180 +0100 parent 464ffca1e1fbb98107593ee60c43a8449e567eed author Rashad Kanavath 1497210739 +0200 committer Markus Neteler 1669988019 +0100 parent 464ffca1e1fbb98107593ee60c43a8449e567eed author Rashad Kanavath 1497210739 +0200 committer Markus Neteler 1669987997 +0100 parent 464ffca1e1fbb98107593ee60c43a8449e567eed author Rashad Kanavath 1497210739 +0200 committer Markus Neteler 1669987899 +0100 parent 464ffca1e1fbb98107593ee60c43a8449e567eed author Rashad Kanavath 1497210739 +0200 committer Markus Neteler 1669986420 +0100 parent 464ffca1e1fbb98107593ee60c43a8449e567eed author Rashad Kanavath 1497210739 +0200 committer Markus Neteler 1669986410 +0100 parent 464ffca1e1fbb98107593ee60c43a8449e567eed author Rashad Kanavath 1497210739 +0200 committer Markus Neteler 1669985337 +0100 parent 464ffca1e1fbb98107593ee60c43a8449e567eed author Rashad Kanavath 1497210739 +0200 committer Markus Neteler 1669984062 +0100 parent 464ffca1e1fbb98107593ee60c43a8449e567eed author Rashad Kanavath 1497210739 +0200 committer Markus Neteler 1669984050 +0100 parent 464ffca1e1fbb98107593ee60c43a8449e567eed author Rashad Kanavath 1497210739 +0200 committer Markus Neteler 1669984037 +0100 parent 464ffca1e1fbb98107593ee60c43a8449e567eed author Rashad Kanavath 1497210739 +0200 committer Markus Neteler 1669984013 +0100 inital work on grass cmake build wip: cmake fixes add find iconv script fix blas error wrong target added link with dl lib on linux disable some modules (wip) search whatever is fftw's inlcude dir driver lib depends on iconv fftw in required package build fftw modules add python libs test with py3 install sqlfiles to etc/sql install lock, clean_temp, echo to ./etc/ install libs link with dl lib cleanup cmake code fix python script & lib install dirs fixed gisbase for grass startup script install modules to bin add PNG as dependency to r.out.png install __init__.py wrong install dir for python api install with rpath to avoid LD_LIBRARY_PATH whitespace fixes MSVC: check for _WIN32 to use msvc and mingw32 MSVC: disable some programs temporarily update cmake scripts to manage thirdparty libs disable X11 on windows update generation of config.h fix list of cmake depends msvc compile fixes use INIFINITY rather than gcc only division by zero ignore visual studio, cmake files use INFINITY rather than divide by zero use _WIN32 for mingw32 and msvc add ssize_t for msvc msvc add _USE_MATH_DEFINES an d export dll keep check for long long int in cache include driver/init.c when building display drivers use _WIN32 to build msvc and mingw32 update cmake for lib/db link with libm only on unix msvc: skip chmod on windows msvc use INFINITY rather than diivide by zero add msvc specific headers: unistd.h, dirent.h grass moved to git... So follow that in cmake. fix check for HAVE_LONG_LONG include math.h only on msvc. To be discussed void* arithmetic (GCC extension) is not allowed in msvc disable d.mon, d.font on msvc. TBD missing O_ACCMODE on msvc Add unistd.h on windows Source copied from http://stackoverflow.com/a/826027 dbmi_base: add dirent.h and dirent.c for msvc use macro INFINITY rather than GCC divide by zero MSVC: fix missing strings.h use math defines on msvc update find package of fftw added required defines into parent scope update setting of HAVE_* defines. 1/n use cmake target check if possible add odbc target on windows update values in generated config.h reorganize cmake option defaults, cmake flags, macros cmake c and cxx flags include _CRT_SECURE_NO_WARNINGS to avoid a lot msdn warnings check_target macro is a helper to reduce number of lines in include/CMakeLists.txt simlib: min, max are already available Find which C standard library does not provide them And if there is one, see if grass support that compiler/platform combination To be discussed CMake: reorganize cmake functions, macros, find_scripts (Like a Pro) make_script_in_dir is renamed to build_script_in_subdir I still don't the naming of macro is clear. One without knowledge of CMake, AutoMake or any other build scripting experience must be able to deduct what is the macro/functions. Even if there will be a header comment with 'PURPOSE' field. fix define used in lib/rst/interp_float fix tools/timer build add gettimeofday windowss implemenation from postgresql CMake: reorganize cmake functions (2) MSVC: copy UINT64CONST(x) from postgresql WIP: disable pyc generation with g.parser on msvc fix ccmath complex struct for msvc take out GCC'sim and stick to C standard copy external/ccmath/ccmath.h to include/grass/ccmath_grass.h CMake: enable cmake export all symbols on for shared libs CMake: build lib/python on MSVC fix ctypesgen.cmake reorg cmake functions used by python add new cmake function to copy_python_files and compile MSVC: include sys/time.h if available or time.h CMake: remove debug trace CMake: minor cleanup CMake: make gui/images CMake: fix run_grass of locale_strings and ctypesgen CMake: link with postgres is optional gid_t, uid_t, pid_t exists on *nix use find_library_suffix to switch between debug and rest avoid touch .stamp files and depend on generated pyc file CMake: update definiition of HAVE_PROJ_H include winsock.h only on msvc CMake: remove annoying logs for fix TODO for g.version CMake: depend on pyc file not on a new .stamp file CMake: fix syntax error CMake: fix sqlite include dir variable CMake: detect version of proj4 before activating defines MSVC: avoid pulling min max on windows CMake: update list of enabled modules TODO r.watershed, fix cmake proj4 library varname Revert "simlib: min, max are already available" This reverts commit ab2b96127e66198f32b6799342b1fae6365f9fc3. CMake: update proj library variables (remove suffix 4) use macro INFINITY MSVC: fix gisinit initialized flag export initialized using dllexport when building. export macros has been generated by CMake's GenerateExportHeader. cmake calls this for all libraries in build_module function. There is a change in initialized variable decl on msvc and rest of compilers. This point has to be discussed with other devs MSVC: fix min, max macro stuff update TODO, list of modules not built by cmake CMake: update find scripts to find debug then release update list of options. WITH_PYTHON addded to build python bindings (default is OFF) CMake: zlib is check with cmake target demolocation is configured in lib/init/CMakeLists.txt CMake: generate grass.py and grass.sh scripts (build tree) CMake: fix startup script generation (install tree) fix generation of startup scripts fix g.list building 1/2 MSVC: missing regex, use PCRE (wip) lib/init: fix startup script on linux fix input configure_file activate building g.remove on msvc add cmake messages for lib/init/ include sys/time.h if not on msvc. As we don't include grass/config.h we cannot simply check against HAVE_SYS_TIME_H install proj data files geotiff_csv only required in windows check this with devs wip: add compile defs via interface library fix g.version, grass_gproj with proj6 create startup shell scripts in bin fix startup script MSVC: configure run_grass.bat, run_python.bat generate html docs fix copy_python_file (used in gui/wxpython, lib/python) build all gui/wxpython modules wrapper scripts to build html docs skip html-description for g.parser update msvc target properties fix install directory for running from binary tree install tools for buildtree and installtree fix build docs using cmake POST_BUILD update mkhtml.py for cmake copy header to binary directory using add_custom_command install extra files in lib/gis using post_build add copy_header as depdendency to grass_datetime first install tools directory find cairo debug and then release libs add POST_BUILD target for documentation only if WITH_DOCS build gui/wxpython, fix html description generation MSVC: uninitialized variable CMake: update to work with autoconf and cmake CMake: install et copy gui/images gui/icons CMake: fix grass version date CMake: fix building gui (python files, docs, html) fix dist include dir name build docs only if requested fix typo fix cmake syntax errors cmake linux fixes check for _WIN32 define to work with msvc fix newline at end of file WIP: update helper cmake scripts update copy_header target use gisbase as dist directory for build tree cmake: fix build for db/drivers ignore __pycache__ directory when scanning for .py files wip: use a gisbase as dist directory WIP: temporary fix for find_library output variable CMake: move wxpython cmake codes to gui/wxpython raise ScriptError wip wip build docs minor cleanup install html docs for driver db update building html docs (wip) add missing dependencies for v.lrs update building python modules (wip) use target property to check if running python script (docs) cleanup cmake helper functions (exe, libs, python, docs) copy strings.h and unistd.h on msvc python files (target) depend only grass.script if building docs fix build docs for windows and linux (wip) seperate list of g.gui.* modules try to make generic build docs (wip) build docs html for not win32 (wip) fix cmake syntax error update pgm extension for running html description remove temp files after docs are finished CMake: fix IN_LIST syntax ficx cmake syntax error fix again linux html description for python with a main script wip: include from config build is breaking msvc msvc: disable db drivers (wip) add test.raster3d.lib into NO_HTML_DESCR_TARGETS CMake: missing endif() x extension on running html descr copy r.in.wms directory to etc/ fix building py modules add grass dll directory to path windows grass.bat debug linux build failures cmake missing endif set main script file only for those selected modules cmake: fix python docs for linux and windows create scripts directory in gisbase cmake debug message add missing include add cmake find scripts for liblas, netcdf, postgresql update proj4 detection to support 4.x, 5.x , 6.x versions update cmake functions to build grass modules add proj4 version defines (support 5.x+) add options for v.in.dwg and liblas modules activate build of modules deactivated detecting of new 3rdd party libraries fix i.landsat.acca on msvc add dll export macro for iostream, dspf, calc fix r.terraflow on msvc use _WIN32 rather than __MINGW32__ for msvc use infinity macro to build on msvc missing include on msvc copy VERSIONUMBER and license to gisbase/etc support for multiple proj4 version update building lib/python (except ctypes) use INFINITY macro to work with msvc fix building gui/wxpython/xml use approach with cmake env command for cross platform build void* arithmetic is not allowed in msvc To be discussed copy __init__.py for python/grass/ fix wrong cmake varible used copy init py to etc/python/grass/ db/drviers: odbc, sqlite, dbf, ogr, postgresql check for PQCmdTuples in postgresql add defines to be posix conformat on msvc bring in testing using ctest (wip) improve proj4 detection Signed-off-by: Rashad Kanavath keep proj4 version string in cache (very useful later) find optional packages quietly use PRIMARY_DEPENDS option in build_module generate wxpython menu xml stuff after building all executables ogsf and nviz depends on grass_raster update gui/wxpython build add missing modules to build missing v.clip install html file is exists cmake cleanup reorder dependencies of gui/wxpython modules avoid breakage in autconf build missing file copy fix mkhtml doc building, exe, lib, python, gui fix find scripts on windows fix always out of date for custom targets fix missing optional dependds to grass gis library fix missing math.h include wrong path used under cmake binary directory keep autoconf build conflict with cmake .bat files must be in scripts/ fix installation of gui/images, gui/icons Revert "install html file is exists" This reverts commit 9e83f6f4a9ae4e164ceaf8b23cfb207081c14763. Apply suggestions from code review trivial changes (comment style) applied moved tools/ -> utils/ sync to main sync to main fix indentation remove trailing white space remove trailing white space revert C related INFINITY/NAN changes (taken care of in #2681) --- .gitignore | 2 + CMakeLists.txt | 224 ++++++++ cmake/copy_g_gui_module.cmake | 35 ++ cmake/ctypesgen.cmake | 61 +++ cmake/find_scripts/FindCairo.cmake | 122 +++++ cmake/find_scripts/FindFFTW.cmake | 66 +++ cmake/find_scripts/FindFontConfig.cmake | 35 ++ cmake/find_scripts/FindGDAL.cmake | 23 + cmake/find_scripts/FindGEOS.cmake | 57 ++ cmake/find_scripts/FindIconv.cmake | 58 ++ cmake/find_scripts/FindLibLAS.cmake | 35 ++ cmake/find_scripts/FindNetCDF.cmake | 14 + cmake/find_scripts/FindPCRE.cmake | 32 ++ cmake/find_scripts/FindPROJ.cmake | 57 ++ cmake/find_scripts/FindPostgreSQL.cmake | 126 +++++ cmake/find_scripts/FindSQLite.cmake | 8 + cmake/locale_strings.cmake | 82 +++ cmake/modules/build_gui_in_subdir.cmake | 107 ++++ cmake/modules/build_library_in_subdir.cmake | 16 + cmake/modules/build_module.cmake | 271 +++++++++ cmake/modules/build_program.cmake | 8 + cmake/modules/build_program_in_subdir.cmake | 17 + cmake/modules/build_script_in_subdir.cmake | 97 ++++ cmake/modules/check_target.cmake | 7 + .../modules/copy_python_files_in_subdir.cmake | 15 + cmake/modules/get_host_arch.cmake | 39 ++ cmake/modules/get_versions.cmake | 34 ++ cmake/modules/repo_status.cmake | 36 ++ cmake/modules/set_compiler_flags.cmake | 13 + cmake/tests/have_pbuffer.c | 18 + cmake/tests/have_pixmaps.c | 20 + cmake/tests/have_pqcmdtuples.c | 8 + cmake/windows_launch.bat.in | 2 + db/CMakeLists.txt | 41 ++ db/drivers/CMakeLists.txt | 67 +++ db/drivers/odbc/odbc.h | 2 +- demolocation/grassrc.cmake.in | 4 + display/CMakeLists.txt | 27 + doc/CMakeLists.txt | 0 general/CMakeLists.txt | 44 ++ general/g.region/printwindow.c | 2 +- general/manage/lister/CMakeLists.txt | 9 + gui/CMakeLists.txt | 12 + gui/icons/CMakeLists.txt | 52 ++ gui/images/CMakeLists.txt | 26 + gui/wxpython/CMakeLists.txt | 77 +++ gui/wxpython/docs/CMakeLists.txt | 13 + imagery/CMakeLists.txt | 103 ++++ imagery/i.ortho.photo/CMakeLists.txt | 17 + include/CMakeLists.txt | 285 ++++++++++ include/config.h.cmake.in | 317 +++++++++++ include/grass/calc.h | 12 +- include/grass/defs/gis.h | 23 +- include/grass/iostream/mm.h | 11 +- include/grass/iostream/rtimer.h | 5 +- lib/CMakeLists.txt | 163 ++++++ lib/cairodriver/graph.c | 4 +- lib/cairodriver/text.c | 3 + lib/calc/calc.c | 4 +- lib/db/CMakeLists.txt | 28 + lib/db/dbmi_base/dbmscap.c | 10 +- lib/db/dbmi_base/dirent.c | 2 + lib/db/dbmi_base/login.c | 3 +- lib/db/dbmi_base/msvc/dirent.c | 113 ++++ lib/db/dbmi_base/msvc/dirent.h | 50 ++ lib/db/dbmi_client/start.c | 6 +- lib/db/sqlp/CMakeLists.txt | 17 + lib/dspf/viz.h | 8 +- lib/external/ccmath/ccmath.h | 15 +- lib/fonts/CMakeLists.txt | 1 + lib/gis/CMakeLists.txt | 68 +++ lib/gis/gisinit.c | 18 +- lib/gis/ls_filter.c | 103 +++- lib/gis/mapset_msc.c | 2 +- lib/gis/parser_interface.c | 3 +- lib/gis/paths.c | 10 +- lib/gis/popen.c | 2 +- lib/gis/sleep.c | 6 +- lib/gis/spawn.c | 18 +- lib/gis/user_config.c | 6 +- lib/gis/whoami.c | 7 +- lib/imagery/iscatt_core.c | 1 - lib/init/CMakeLists.txt | 171 ++++++ lib/init/clean_temp.c | 5 +- lib/init/env.sh | 10 + lib/init/grass.bat.in | 29 + lib/init/grass.sh.in | 6 + lib/init/license.txt.in | 11 + lib/init/lock.c | 4 +- lib/init/run.c | 2 +- lib/iostream/rtimer.cpp | 6 + lib/manage/sighold.c | 2 +- lib/pngdriver/graph_close.c | 4 +- lib/pngdriver/graph_set.c | 8 +- lib/pngdriver/pngdriver.h | 4 +- lib/proj/CMakeLists.txt | 14 + lib/raster/close.c | 4 +- lib/raster3d/close.c | 4 +- lib/raster3d/mask.c | 6 +- lib/raster3d/test/test_raster3d_lib.h | 5 +- lib/raster3d/test/test_tools.c | 3 + lib/rst/CMakeLists.txt | 21 + lib/rst/interp_float/point2d.c | 4 +- lib/temporal/CMakeLists.txt | 5 + lib/vector/CMakeLists.txt | 23 + lib/vector/Vlib/box.c | 12 +- lib/vector/dglib/CMakeLists.txt | 56 ++ lib/vector/diglib/CMakeLists.txt | 8 + lib/vector/neta/CMakeLists.txt | 24 + lib/vector/vedit/CMakeLists.txt | 21 + man/CMakeLists.txt | 5 + misc/CMakeLists.txt | 23 + msvc/strings.h | 5 + msvc/unistd.h | 58 ++ python/grass/CMakeLists.txt | 42 ++ python/grass/pygrass/CMakeLists.txt | 24 + .../CMakeLists.txt | 85 +++ raster/CMakeLists.txt | 514 ++++++++++++++++++ raster/r.colors.out/CMakeLists.txt | 16 + raster/r.colors/CMakeLists.txt | 12 + raster/r.in.bin/main.c | 2 +- raster/r.in.lidar/info.c | 5 +- raster/r.in.lidar/point_binning.c | 20 +- raster/r.li/CMakeLists.txt | 27 + raster/r.li/r.li.daemon/daemon.c | 2 +- raster/r.li/r.li.daemon/worker.c | 2 +- raster/r.li/r.li.padrange/padrange.c | 78 +-- raster/r.mapcalc/CMakeLists.txt | 22 + raster/r.out.gdal/main.c | 4 +- raster/r.series.accumulate/main.c | 3 +- raster/r.sim/CMakeLists.txt | 15 + raster/r.sim/simlib/waterglobs.h | 4 + raster/r.spread/CMakeLists.txt | 8 + raster/r.terraflow/common.cpp | 2 +- raster/r.terraflow/direction.h | 2 +- raster/r.terraflow/filldepr.cpp | 5 +- raster/r.terraflow/flow.cpp | 22 +- raster/r.terraflow/main.cpp | 4 +- raster/r.terraflow/stats.cpp | 4 +- raster/r.to.vect/lines_io.c | 2 +- raster/r.to.vect/util.c | 2 +- raster/r.univar/CMakeLists.txt | 15 + raster/r.univar/r.univar_main.c | 4 +- raster/r.univar/r3.univar_main.c | 4 +- raster/r.viewshed/statusstructure.cpp | 4 +- raster/r.watershed/CMakeLists.txt | 11 + raster3d/CMakeLists.txt | 97 ++++ raster3d/r3.flow/CMakeLists.txt | 14 + raster3d/r3.in.lidar/info.c | 2 +- scripts/CMakeLists.txt | 102 ++++ temporal/CMakeLists.txt | 56 ++ thirdparty/CMakeLists.txt | 180 ++++++ utils/CMakeLists.txt | 24 + utils/timer/main.c | 7 +- vector/CMakeLists.txt | 212 ++++++++ vector/v.cluster/main.c | 4 +- vector/v.distance/distance.c | 2 +- vector/v.lrs/CMakeLists.txt | 19 + 158 files changed, 5641 insertions(+), 172 deletions(-) create mode 100644 CMakeLists.txt create mode 100644 cmake/copy_g_gui_module.cmake create mode 100644 cmake/ctypesgen.cmake create mode 100644 cmake/find_scripts/FindCairo.cmake create mode 100644 cmake/find_scripts/FindFFTW.cmake create mode 100644 cmake/find_scripts/FindFontConfig.cmake create mode 100644 cmake/find_scripts/FindGDAL.cmake create mode 100644 cmake/find_scripts/FindGEOS.cmake create mode 100644 cmake/find_scripts/FindIconv.cmake create mode 100644 cmake/find_scripts/FindLibLAS.cmake create mode 100644 cmake/find_scripts/FindNetCDF.cmake create mode 100644 cmake/find_scripts/FindPCRE.cmake create mode 100644 cmake/find_scripts/FindPROJ.cmake create mode 100644 cmake/find_scripts/FindPostgreSQL.cmake create mode 100644 cmake/find_scripts/FindSQLite.cmake create mode 100644 cmake/locale_strings.cmake create mode 100644 cmake/modules/build_gui_in_subdir.cmake create mode 100644 cmake/modules/build_library_in_subdir.cmake create mode 100644 cmake/modules/build_module.cmake create mode 100644 cmake/modules/build_program.cmake create mode 100644 cmake/modules/build_program_in_subdir.cmake create mode 100644 cmake/modules/build_script_in_subdir.cmake create mode 100644 cmake/modules/check_target.cmake create mode 100644 cmake/modules/copy_python_files_in_subdir.cmake create mode 100644 cmake/modules/get_host_arch.cmake create mode 100644 cmake/modules/get_versions.cmake create mode 100644 cmake/modules/repo_status.cmake create mode 100644 cmake/modules/set_compiler_flags.cmake create mode 100644 cmake/tests/have_pbuffer.c create mode 100644 cmake/tests/have_pixmaps.c create mode 100644 cmake/tests/have_pqcmdtuples.c create mode 100644 cmake/windows_launch.bat.in create mode 100644 db/CMakeLists.txt create mode 100644 db/drivers/CMakeLists.txt create mode 100644 demolocation/grassrc.cmake.in create mode 100644 display/CMakeLists.txt create mode 100644 doc/CMakeLists.txt create mode 100644 general/CMakeLists.txt create mode 100644 general/manage/lister/CMakeLists.txt create mode 100644 gui/CMakeLists.txt create mode 100644 gui/icons/CMakeLists.txt create mode 100644 gui/images/CMakeLists.txt create mode 100644 gui/wxpython/CMakeLists.txt create mode 100644 gui/wxpython/docs/CMakeLists.txt create mode 100644 imagery/CMakeLists.txt create mode 100644 imagery/i.ortho.photo/CMakeLists.txt create mode 100644 include/CMakeLists.txt create mode 100644 include/config.h.cmake.in create mode 100644 lib/CMakeLists.txt create mode 100644 lib/db/CMakeLists.txt create mode 100644 lib/db/dbmi_base/msvc/dirent.c create mode 100644 lib/db/dbmi_base/msvc/dirent.h create mode 100644 lib/db/sqlp/CMakeLists.txt create mode 100644 lib/fonts/CMakeLists.txt create mode 100644 lib/gis/CMakeLists.txt create mode 100644 lib/init/CMakeLists.txt create mode 100644 lib/init/env.sh create mode 100644 lib/init/grass.bat.in create mode 100644 lib/init/grass.sh.in create mode 100644 lib/init/license.txt.in create mode 100644 lib/proj/CMakeLists.txt create mode 100644 lib/rst/CMakeLists.txt create mode 100644 lib/temporal/CMakeLists.txt create mode 100644 lib/vector/CMakeLists.txt create mode 100644 lib/vector/dglib/CMakeLists.txt create mode 100644 lib/vector/diglib/CMakeLists.txt create mode 100644 lib/vector/neta/CMakeLists.txt create mode 100644 lib/vector/vedit/CMakeLists.txt create mode 100644 man/CMakeLists.txt create mode 100644 misc/CMakeLists.txt create mode 100644 msvc/strings.h create mode 100644 msvc/unistd.h create mode 100644 python/grass/CMakeLists.txt create mode 100644 python/grass/pygrass/CMakeLists.txt create mode 100644 python/libgrass_interface_generator/CMakeLists.txt create mode 100644 raster/CMakeLists.txt create mode 100644 raster/r.colors.out/CMakeLists.txt create mode 100644 raster/r.colors/CMakeLists.txt create mode 100644 raster/r.li/CMakeLists.txt create mode 100644 raster/r.mapcalc/CMakeLists.txt create mode 100644 raster/r.sim/CMakeLists.txt create mode 100644 raster/r.spread/CMakeLists.txt create mode 100644 raster/r.univar/CMakeLists.txt create mode 100644 raster/r.watershed/CMakeLists.txt create mode 100644 raster3d/CMakeLists.txt create mode 100644 raster3d/r3.flow/CMakeLists.txt create mode 100644 scripts/CMakeLists.txt create mode 100644 temporal/CMakeLists.txt create mode 100644 thirdparty/CMakeLists.txt create mode 100644 utils/CMakeLists.txt create mode 100644 vector/CMakeLists.txt create mode 100644 vector/v.lrs/CMakeLists.txt diff --git a/.gitignore b/.gitignore index 2087a1bf7d1..28343eaa267 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,8 @@ OBJ.* locale/scriptstrings/* bin.*/* dist.*/* +.vs/* +CMakeSettings.json config.log config.status* error.log diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000000..41b17b44ca8 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,224 @@ +# AUTHOR(S): Rashad Kanavath +# PURPOSE: Grass root that adds options to activate/deactivate 3rd party libraries +# COPYRIGHT: (C) 2020 by the GRASS Development Team +# This program is free software under the GPL (>=v2) +# Read the file COPYING that comes with GRASS for details. + +cmake_minimum_required(VERSION 3.3) +set(CMAKE_DISABLE_IN_SOURCE_BUILD ON) + +#if(DEFINED ENV{VCPKG_DEFAULT_TRIPLET} AND NOT DEFINED VCPKG_TARGET_TRIPLET) +# set(VCPKG_TARGET_TRIPLET "$ENV{VCPKG_DEFAULT_TRIPLET}" CACHE STRING "") +#endif() + +project(GRASSGIS) + +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) +endif() + +set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/find_scripts;${CMAKE_SOURCE_DIR}/cmake/modules;${CMAKE_MODULE_PATH}") + +set(default_option_enabled ON) +if(WIN32) + set(default_option_enabled OFF) +endif() + +if(CMAKE_BUILD_TYPE) +set( grass_build_type "${CMAKE_BUILD_TYPE}" ) +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() +else() +set(find_library_suffix "") +endif() + +option(WITH_CAIRO "Build with cairo support ." ON) +option(WITH_X11 "Build with X11 support ." ${default_option_enabled}) +option(WITH_OPENGL "Build with opengl support ." ON) +option(WITH_SQLITE "enable sqlite support" ON) +option(WITH_POSTGRES "enable postgres support" ON) +option(WITH_NLS "enable nls support" ${default_option_enabled}) +option(WITH_BZLIB "enable bzlib support" ON) +option(WITH_BLAS "enable blas support" ON) +option(WITH_LAPACK "enable lapack support" ON) +option(WITH_LIBLAS "enable libLAS support" ON) +option(WITH_OPENDWG "enable v.in.dwg" OFF) + +option(WITH_PYTHON "Build python bindings" ON) +option(WITH_LARGEFILES "enable largefile support" ${default_option_enabled}) +option(WITH_DOCS "Build documentation" ON) +if(APPLE) + if(POLICY CMP0042) + cmake_policy(SET CMP0042 NEW) + endif() + set(CMAKE_MACOSX_RPATH TRUE) +endif() + +set(CMAKE_SKIP_BUILD_RPATH FALSE) +set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) +set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") +set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) +list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir) +if("${isSystemDir}" STREQUAL "-1") + set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") +endif("${isSystemDir}" STREQUAL "-1") + +include(get_host_arch) +get_host_arch(BUILD_ARCH) + +include(get_versions) +get_versions("include/VERSION" + GRASS_VERSION_MAJOR + GRASS_VERSION_MINOR + GRASS_VERSION_RELEASE + GRASS_VERSION_DATE) + +set(GRASS_VERSION_NUMBER ${GRASS_VERSION_MAJOR}.${GRASS_VERSION_MINOR}.${GRASS_VERSION_RELEASE}) +message(STATUS "GRASS_VERSION_NUMBER = '${GRASS_VERSION_NUMBER}'") +set(GRASS_VERSION_UPDATE_PKG "0.2") + +include(set_compiler_flags) +set_compiler_flags() + +include(repo_status) +repo_status("${CMAKE_CURRENT_LIST_DIR}" GRASS_VERSION_GIT) + +enable_testing() + +# Setup build locations. +if(NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) +endif() +if(NOT CMAKE_LIBRARY_OUTPUT_DIRECTORY) + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +endif() +if(NOT CMAKE_ARCHIVE_OUTPUT_DIRECTORY) + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +endif() + +include(build_module) +include(build_program) +include(build_program_in_subdir) +include(build_library_in_subdir) +include(copy_python_files_in_subdir) +include(build_script_in_subdir) +include(build_gui_in_subdir) +include(check_target) + +add_subdirectory(thirdparty) +set(MKHTML_PY ${CMAKE_BINARY_DIR}/tools/mkhtml.py) + +set(GISBASE ${CMAKE_BINARY_DIR}/gisbase) +file(TO_NATIVE_PATH "${GISBASE}" GISBASE_NATIVE) +file(TO_NATIVE_PATH "${CMAKE_BINARY_DIR}/bin" BINARY_DIR) +file(TO_NATIVE_PATH "${CMAKE_BINARY_DIR}/lib" LIB_DIR) +file(TO_NATIVE_PATH "${CMAKE_SOURCE_DIR}" MODULE_TOPDIR) +file(TO_NATIVE_PATH "${GISBASE}/scripts" SCRIPTS_DIR) +file(TO_NATIVE_PATH "${GISBASE}/etc/config/rc" GISRC) +file(TO_NATIVE_PATH "${GISBASE}/etc/python" ETC_PYTHON_DIR) +file(TO_NATIVE_PATH "${GISBASE}/gui/wxpython" GUI_WXPYTHON_DIR) +if(WIN32) +set(sep "\;") +set(env_path "") +else() +set(sep ":") +set(env_path ":$ENV{PATH}") +endif() + + +set(grass_env_command ${CMAKE_COMMAND} -E env + "PATH=${BINARY_DIR}${sep}${SCRIPTS_DIR}${env_path}" + "PYTHONPATH=${ETC_PYTHON_DIR}${sep}${GUI_WXPYTHON_DIR}${sep}$ENV{PYTHONPATH}" + "LD_LIBRARY_PATH=${LIB_DIR}${sep}$ENV{LD_LIBRARY_PATH}" + "GISBASE=${GISBASE_NATIVE}" + "GISRC=${GISRC}" + "LC_ALL=C" + "LANG=C" + "LANGUAGE=C" + "MODULE_TOPDIR=${MODULE_TOPDIR}" + "VERSION_NUMBER=\"${GRASS_VERSION_NUMBER}\"" + "VERSION_DATE=\"${GRASS_VERSION_DATE}\"") + + + +set(NO_HTML_DESCR_TARGETS "g.parser;ximgview;test.raster3d.lib") +add_subdirectory(include) + +include_directories("${CMAKE_BINARY_DIR}/include") +if(MSVC) + include_directories("${CMAKE_SOURCE_DIR}/msvc") +endif() + +execute_process( + COMMAND ${CMAKE_COMMAND} -E echo "Creating directories in ${GISBASE}" + COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/bin/ + COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/scripts/ + COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/demolocation/ + COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/etc/config/ + COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/driver/db/ + COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/tools/ + COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/lib/ + COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/etc/lister/ + COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/etc/python/grass/lib + COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/gui/wxpython/xml/ + COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/gui/icons/ + COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/gui/images/ + COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/docs/html/ + ) + +add_subdirectory(lib) +add_subdirectory(tools) +set(modules_list) + + +set(ALL_SUBDIRS + general + db + display + imagery + misc + raster + raster3d + scripts + vector + temporal + # ps +) + +foreach(d ${ALL_SUBDIRS}) + add_subdirectory(${d}) +endforeach() +add_custom_target(ALL_MODULES + COMMAND ${CMAKE_COMMAND} -E echo "Building all modules" + DEPENDS ${modules_list}) + +###message(FATAL_ERROR "modules_list=${modules_list}") + +if(WITH_PYTHON) + add_subdirectory(gui) +endif() + +if(WITH_DOCS) + add_subdirectory(doc) + add_subdirectory(man) +endif() # WITH_DOCS + + +####add_subdirectory(locale) + +# TODO: To be discussed +# add_subdirectory(testsuite) +# add_subdirectory(macosx) + +if(WITH_X11) + build_program_in_subdir(visualization/ximgview DEPENDS grass_gis X11) +endif() diff --git a/cmake/copy_g_gui_module.cmake b/cmake/copy_g_gui_module.cmake new file mode 100644 index 00000000000..46246dc4ca0 --- /dev/null +++ b/cmake/copy_g_gui_module.cmake @@ -0,0 +1,35 @@ +# AUTHOR(S): Rashad Kanavath +# PURPOSE: Copy g.gui script plus .bat file if on windows +# COPYRIGHT: (C) 2020 by the GRASS Development Team +# This program is free software under the GPL (>=v2) +# Read the file COPYING that comes with GRASS for details. +# -DSOURCE_DIR +# -DGISBASE +# -DG_NAME +# -DSRC_SCRIPT_FILE +# -DBINARY_DIR + +set(SCRIPT_EXT "") +if(WIN32) + set(SCRIPT_EXT ".py") +endif() + +if(WIN32) + set(PGM_NAME ${G_NAME}) + configure_file( + ${SOURCE_DIR}/cmake/windows_launch.bat.in + ${GISBASE}/scripts/${G_NAME}.bat @ONLY) +endif(WIN32) + +set(TMP_SCRIPT_FILE ${BINARY_DIR}/CMakeFiles/${G_NAME}${SCRIPT_EXT}) +configure_file(${SRC_SCRIPT_FILE} ${TMP_SCRIPT_FILE} COPYONLY) +file( + COPY ${TMP_SCRIPT_FILE} + DESTINATION ${GISBASE}/scripts/ + FILE_PERMISSIONS + OWNER_READ OWNER_WRITE OWNER_EXECUTE + GROUP_READ GROUP_EXECUTE + WORLD_READ WORLD_EXECUTE) + + +file(REMOVE ${TMP_SCRIPT_FILE}) diff --git a/cmake/ctypesgen.cmake b/cmake/ctypesgen.cmake new file mode 100644 index 00000000000..af9c06aef2a --- /dev/null +++ b/cmake/ctypesgen.cmake @@ -0,0 +1,61 @@ +# AUTHOR(S): Rashad Kanavath +# PURPOSE: Cmake building of lib/python/ctypes (TODO) +# COPYRIGHT: (C) 2020 by the GRASS Development Team +# This program is free software under the GPL (>=v2) +# Read the file COPYING that comes with GRASS for details. + +set(ENV{GISRC} "${BIN_DIR}/demolocation/.grassrc${GRASS_VERSION_MAJOR}${GRASS_VERSION_MINOR}") +set(ENV{GISBASE} "${BIN_DIR}") +set(ENV{PATH} "${BIN_DIR}/bin:${BIN_DIR}/scripts:$ENV{PATH}") +set(ENV{PYTHONPATH} "${BIN_DIR}/gui/wxpython:${BIN_DIR}/etc/python:$ENV{PYTHONPATH}") +if(NOT MSVC) + set(ENV{LD_LIBRARY_PATH} "${BIN_DIR}/lib:$ENV{LD_LIBRARY_PATH}") +endif() +set(ENV{LC_ALL} C) + +set(LIBRARIES) +foreach(LIB ${LIBS}) + if(WIN32) + list(APPEND LIBRARIES "--library=${BIN_DIR}/bin/${LIB}.dll") + elseif(APPLE) + list(APPEND LIBRARIES "--library=${BIN_DIR}/lib/lib${LIB}.so") + else() + #This can be linux or unix + list(APPEND LIBRARIES "--library=${BIN_DIR}/lib/lib${LIB}.so") + endif() +endforeach() + +set(HEADERS) +foreach(HDR ${HDRS}) + list(APPEND HEADERS "${BIN_DIR}/include/grass/${HDR}") +endforeach() + +foreach(req OUT_FILE HDRS LIBS CTYPESGEN_PY COMPILER ) + if(NOT DEFINED ${req} OR "${${req}}" STREQUAL "") + message(FATAL_ERROR "you must set ${req}") + endif() +endforeach() + +if(MSVC) + set(CTYPESFLAGS "${COMPILER} -E -DPACKAGE=\"grasslibs\"") +else() + set(CTYPESFLAGS "${COMPILER} -E -DPACKAGE=\"grasslibs\" -D__GLIBC_HAVE_LONG_LONG") +endif() + +message(STATUS "Running ${PYTHON_EXECUTABLE} ${CTYPESGEN_PY} --cpp=${CTYPESFLAGS} --includedir=\"${BIN_DIR}/include\" --runtime-libdir=\"${BIN_DIR}/lib\" ${HEADERS} ${LIBRARIES} --output=${OUT_FILE}") +execute_process( + COMMAND ${PYTHON_EXECUTABLE} ${CTYPESGEN_PY} + --cpp=${CTYPESFLAGS} + --includedir="${BIN_DIR}/include" + --runtime-libdir="${BIN_DIR}/lib" + ${HEADERS} + ${LIBRARIES} + --output=${OUT_FILE} + OUTPUT_VARIABLE ctypesgen_OV + ERROR_VARIABLE ctypesgen_EV + RESULT_VARIABLE ctypesgen_RV + ) + +if( ctypesgen_RV ) + message(FATAL_ERROR "ctypesgen.py: ${ctypesgen_EV} \n ${ctypesgen_OV}") +endif() diff --git a/cmake/find_scripts/FindCairo.cmake b/cmake/find_scripts/FindCairo.cmake new file mode 100644 index 00000000000..92a22db9a25 --- /dev/null +++ b/cmake/find_scripts/FindCairo.cmake @@ -0,0 +1,122 @@ +# - Try to find Cairo +# Once done, this will define +# +# CAIRO_FOUND - system has Cairo +# CAIRO_INCLUDE_DIRS - the Cairo include directories +# CAIRO_LIBRARIES - link these to use Cairo +# +# Copyright (C) 2012 Raphael Kubo da Costa +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND ITS CONTRIBUTORS ``AS +# IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ITS +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +FIND_PACKAGE(PkgConfig QUIET) +PKG_CHECK_MODULES(PC_CAIRO cairo QUIET) # FIXME: After we require CMake 2.8.2 we can pass QUIET to this call. + + +FIND_PATH(CAIRO_INCLUDE_DIRS + 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} +) + +FIND_LIBRARY(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}) +elseif(CAIRO_LIBRARY_RELEASE) + set( CAIRO_LIBRARY ${CAIRO_LIBRARY_RELEASE}) +endif() + + +IF (CAIRO_INCLUDE_DIRS) + IF (EXISTS "${CAIRO_INCLUDE_DIRS}/cairo-version.h") + FILE(READ "${CAIRO_INCLUDE_DIRS}/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 () + +# FIXME: Should not be needed anymore once we start depending on CMake 2.8.3 +SET(VERSION_OK TRUE) +IF (Cairo_FIND_VERSION) + IF (Cairo_FIND_VERSION_EXACT) + IF ("${Cairo_FIND_VERSION}" VERSION_EQUAL "${CAIRO_VERSION}") + # FIXME: Use IF (NOT ...) with CMake 2.8.2+ to get rid of the ELSE block + ELSE () + SET(VERSION_OK FALSE) + ENDIF () + ELSE () + IF ("${Cairo_FIND_VERSION}" VERSION_GREATER "${CAIRO_VERSION}") + SET(VERSION_OK FALSE) + ENDIF () + ENDIF () +ENDIF () + +find_path(FONTCONFIG_INCLUDE_DIR fontconfig/fontconfig.h) + +if(FONTCONFIG_INCLUDE_DIR) + set(CAIRO_INCLUDE_DIRS ${CAIRO_INCLUDE_DIRS} ${FONTCONFIG_INCLUDE_DIR} ) +else() + message(STATUS "fontconfig/fontconfig.h was not found. \n I had to unset(CAIRO_INCLUDE_DIRS) to make find_package() fail \n ") + unset(CAIRO_INCLUDE_DIRS CACHE) +endif() + +find_library(FONTCONFIG_LIBRARY NAMES fontconfig) +if(FONTCONFIG_LIBRARY) + set(CAIRO_LIBRARIES ${CAIRO_LIBRARY} ${FONTCONFIG_LIBRARY} ) +else() + message(STATUS "fontconfig library file was not found. \n I had to unset(CAIRO_LIBRARIES) to make find_package() fail \n ") + unset(CAIRO_LIBRARIES CACHE) +endif() + +MARK_AS_ADVANCED( + CAIRO_INCLUDE_DIRS + CAIRO_LIBRARY + CAIRO_LIBRARY_RELEASE + CAIRO_LIBRARY_DEBUG + FONTCONFIG_LIBRARY + FONTCONFIG_INCLUDE_DIR + ) + +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Cairo DEFAULT_MSG CAIRO_INCLUDE_DIRS CAIRO_LIBRARIES VERSION_OK) diff --git a/cmake/find_scripts/FindFFTW.cmake b/cmake/find_scripts/FindFFTW.cmake new file mode 100644 index 00000000000..33fe91dcd30 --- /dev/null +++ b/cmake/find_scripts/FindFFTW.cmake @@ -0,0 +1,66 @@ +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}") +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() +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}") +endif() + +#fftw double lib +find_library(FFTWD_LIB fftw3 ) +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() +endif() + +#Single Precision +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() +endif() + +if(NOT FFTWD_FOUND AND NOT FFTWF_FOUND ) + 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 +) + + +#copy HAVE_ to parent scope so that we can use in include/CMakeLists.txt and rest +set(HAVE_FFTW3_H ${HAVE_FFTW3_H} PARENT_SCOPE) +set(HAVE_FFTW_H ${HAVE_FFTW_H} PARENT_SCOPE) +set(HAVE_DFFTW_H ${HAVE_DFFTW_H} PARENT_SCOPE) +include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(FFTW + REQUIRED_VARS FFTW_LIBRARIES FFTW_INCLUDE_DIR) diff --git a/cmake/find_scripts/FindFontConfig.cmake b/cmake/find_scripts/FindFontConfig.cmake new file mode 100644 index 00000000000..540aef0d2af --- /dev/null +++ b/cmake/find_scripts/FindFontConfig.cmake @@ -0,0 +1,35 @@ +# - Find FontConfig library +# Find the FontConfig includes and library +# This module defines +# FONTCONFIG_INCLUDE_DIR, where to find fontconfig.h +# FONTCONFIG_LIBRARIES, libraries to link against to use the FontConfig API. +# FONTCONFIG_FOUND, If false, do not try to use FontConfig. + +#============================================================================= +# Copyright 2012 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of VTK, substitute the full +# License text for the above reference.) + +find_path(FONTCONFIG_INCLUDE_DIR fontconfig/fontconfig.h) + +find_library(FONTCONFIG_LIBRARY NAMES fontconfig) + +# handle the QUIETLY and REQUIRED arguments and set FONTCONFIG_FOUND to TRUE if +# all listed variables are TRUE +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(FontConfig DEFAULT_MSG + FONTCONFIG_LIBRARY FONTCONFIG_INCLUDE_DIR) + +if(FONTCONFIG_FOUND) + set( FONTCONFIG_LIBRARIES ${FONTCONFIG_LIBRARY} ) +endif() + +mark_as_advanced(FONTCONFIG_INCLUDE_DIR FONTCONFIG_LIBRARY FONTCONFIG_LIBRARIES) diff --git a/cmake/find_scripts/FindGDAL.cmake b/cmake/find_scripts/FindGDAL.cmake new file mode 100644 index 00000000000..698f4916819 --- /dev/null +++ b/cmake/find_scripts/FindGDAL.cmake @@ -0,0 +1,23 @@ +find_path(GDAL_INCLUDE_DIR gdal.h PATH_SUFFIXES gdal) + +find_library(GDAL_LIBRARY_RELEASE NAMES gdal_i gdal) +find_library(GDAL_LIBRARY_DEBUG NAMES gdald) +set(GDAL_FOUND FALSE) + +set(GDAL_LIBRARY) +if(GDAL_LIBRARY_DEBUG) + set( GDAL_LIBRARY ${GDAL_LIBRARY_DEBUG} CACHE FILEPATH "doc" ) +elseif(GDAL_LIBRARY_RELEASE) + set( GDAL_LIBRARY ${GDAL_LIBRARY_RELEASE} CACHE FILEPATH "doc" ) +endif() + +mark_as_advanced(GDAL_LIBRARY_RELEASE) +mark_as_advanced(GDAL_LIBRARY_DEBUG) +mark_as_advanced(GDAL_LIBRARY) +mark_as_advanced(GDAL_INCLUDE_DIR) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args( GDAL DEFAULT_MSG + GDAL_LIBRARY + GDAL_INCLUDE_DIR ) + diff --git a/cmake/find_scripts/FindGEOS.cmake b/cmake/find_scripts/FindGEOS.cmake new file mode 100644 index 00000000000..6b7544b612e --- /dev/null +++ b/cmake/find_scripts/FindGEOS.cmake @@ -0,0 +1,57 @@ +#--- +# File: FindGEOS.cmake +# +# Find the native GEOS(Geometry Engine - Open Source) includes and libraries. +# +# This module defines: +# +# GEOS_INCLUDE_DIR, where to find geos.h, etc. +# GEOS_LIBRARY, libraries to link against to use GEOS. Currently there are +# two looked for, geos and geos_c libraries. +# GEOS_FOUND, True if found, false if one of the above are not found. +# +# For ossim, typically geos will be system installed which should be found; +# or found in the ossim 3rd party dependencies directory from a geos build +# and install. If the latter it will rely on CMAKE_INCLUDE_PATH and +# CMAKE_LIBRARY_PATH having the path to the party dependencies directory. +# +# NOTE: +# This script is specialized for ossim, e.g. looking in /usr/local/ossim. +# +# $Id$ +#--- + +#--- +# Find include path: +# Note: Ubuntu 14.04+ did not have geos.h (not included in any ossim src). +# Instead looking for Geometry.h +#--- + +find_path( GEOS_INCLUDE_DIR geos_c.h) + +# Find GEOS C library: +find_library( GEOS_C_LIBRARY_RELEASE NAMES geos_c ) +find_library( GEOS_C_LIBRARY_DEBUG NAMES geos_cd ) +set(GEOS_FOUND FALSE) + +set(GEOS_C_LIBRARY) +if(GEOS_C_LIBRARY_DEBUG) + set(GEOS_C_LIBRARY ${GEOS_C_LIBRARY_DEBUG}) +elseif(GEOS_C_LIBRARY_RELEASE) + set(GEOS_C_LIBRARY ${GEOS_C_LIBRARY_RELEASE}) +endif() + +MARK_AS_ADVANCED( + GEOS_INCLUDE_DIR + GEOS_C_LIBRARY + GEOS_C_LIBRARY_RELEASE + GEOS_C_LIBRARY_DEBUG) + +#--- +# This function sets GEOS_FOUND if variables are valid. +#--- +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args( GEOS DEFAULT_MSG + GEOS_C_LIBRARY + GEOS_INCLUDE_DIR ) + diff --git a/cmake/find_scripts/FindIconv.cmake b/cmake/find_scripts/FindIconv.cmake new file mode 100644 index 00000000000..4da368207e4 --- /dev/null +++ b/cmake/find_scripts/FindIconv.cmake @@ -0,0 +1,58 @@ +# - Try to find Iconv +# Once done this will define +# +# ICONV_FOUND - system has Iconv +# ICONV_INCLUDE_DIR - the Iconv include directory +# ICONV_LIBRARIES - Link these to use Iconv +# ICONV_SECOND_ARGUMENT_IS_CONST - the second argument for iconv() is const +# +include(CheckCXXSourceCompiles) + +IF (ICONV_INCLUDE_DIR AND ICONV_LIBRARIES) + # Already in cache, be silent + SET(ICONV_FIND_QUIETLY TRUE) +ENDIF (ICONV_INCLUDE_DIR AND ICONV_LIBRARIES) + +FIND_PATH(ICONV_INCLUDE_DIR iconv.h) + +FIND_LIBRARY(ICONV_LIBRARIES NAMES iconv libiconv libiconv-2 c) + +IF(ICONV_INCLUDE_DIR AND ICONV_LIBRARIES) + SET(ICONV_FOUND TRUE) +ENDIF(ICONV_INCLUDE_DIR AND ICONV_LIBRARIES) + +set(CMAKE_REQUIRED_INCLUDES ${ICONV_INCLUDE_DIR}) +set(CMAKE_REQUIRED_LIBRARIES ${ICONV_LIBRARIES}) +IF(ICONV_FOUND) + check_cxx_source_compiles(" + #include + int main(){ + iconv_t conv = 0; + const char* in = 0; + size_t ilen = 0; + char* out = 0; + size_t olen = 0; + iconv(conv, &in, &ilen, &out, &olen); + return 0; + } +" ICONV_SECOND_ARGUMENT_IS_CONST ) +ENDIF(ICONV_FOUND) +set(CMAKE_REQUIRED_INCLUDES) +set(CMAKE_REQUIRED_LIBRARIES) + +IF(ICONV_FOUND) + IF(NOT ICONV_FIND_QUIETLY) + MESSAGE(STATUS "Found Iconv: ${ICONV_LIBRARIES}") + ENDIF(NOT ICONV_FIND_QUIETLY) +ELSE(ICONV_FOUND) + IF(Iconv_FIND_REQUIRED) + MESSAGE(FATAL_ERROR "Could not find Iconv") + ENDIF(Iconv_FIND_REQUIRED) +ENDIF(ICONV_FOUND) + +MARK_AS_ADVANCED( + ICONV_INCLUDE_DIR + ICONV_LIBRARIES + ICONV_SECOND_ARGUMENT_IS_CONST +) + diff --git a/cmake/find_scripts/FindLibLAS.cmake b/cmake/find_scripts/FindLibLAS.cmake new file mode 100644 index 00000000000..ccf40b6552b --- /dev/null +++ b/cmake/find_scripts/FindLibLAS.cmake @@ -0,0 +1,35 @@ +find_path(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") + +if (LibLAS_INCLUDE_DIR) + 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}") + + 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) +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args( + LibLAS + REQUIRED_VARS LibLAS_C_LIBRARY LibLAS_INCLUDE_DIR + VERSION_VAR LibLAS_VERSION_STRING) diff --git a/cmake/find_scripts/FindNetCDF.cmake b/cmake/find_scripts/FindNetCDF.cmake new file mode 100644 index 00000000000..794726c96a7 --- /dev/null +++ b/cmake/find_scripts/FindNetCDF.cmake @@ -0,0 +1,14 @@ +find_path(NetCDF_INCLUDE_DIR + NAMES netcdf.h + DOC "path to netcdf.h") + +find_library(NetCDF_LIBRARY + NAMES netcdf + DOC "path netcdf library") + +if(NetCDF_INCLUDE_DIR AND NetCDF_LIBRARY) + set(NetCDF_FOUND TRUE) +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(NetCDF REQUIRED_VARS NetCDF_LIBRARY NetCDF_INCLUDE_DIR) diff --git a/cmake/find_scripts/FindPCRE.cmake b/cmake/find_scripts/FindPCRE.cmake new file mode 100644 index 00000000000..fb329d930d0 --- /dev/null +++ b/cmake/find_scripts/FindPCRE.cmake @@ -0,0 +1,32 @@ + +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}) +elseif(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) +endif() + +if(PCRE_FOUND) + set(PCRE_LIBRARIES ${PCRE_LIBRARY}) + set(PCRE_INCLUDE_DIRS ${PCRE_INCLUDE_DIR}) +endif() + +mark_as_advanced(PCRE_LIBRARY) +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) + + diff --git a/cmake/find_scripts/FindPROJ.cmake b/cmake/find_scripts/FindPROJ.cmake new file mode 100644 index 00000000000..0c63cf8cbcc --- /dev/null +++ b/cmake/find_scripts/FindPROJ.cmake @@ -0,0 +1,57 @@ +############################################################################### +# CMake module to search for PROJ library +# +# On success, the macro sets the following variables: +# PROJ_FOUND = if the library found +# PROJ_LIBRARY = full path to the library +# PROJ_INCLUDE_DIR = where to find the library headers +# also defined, but not for general use are +# PROJ_LIBRARY, where to find the PROJ.4 library. +# +# Copyright (c) 2009 Mateusz Loskot +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. +# +############################################################################### + +FIND_PATH(PROJ_INCLUDE_DIR proj_api.h DOC "Path to PROJ.4 include directory") + +if(EXISTS "${PROJ_INCLUDE_DIR}/proj_api.h") + file(READ "${PROJ_INCLUDE_DIR}/proj_api.h" proj_h_header) + string(REGEX MATCH "#define +PJ_VERSION +([0-9]+)" _dummy "${proj_h_header}") + set(PROJ_VERSION_STRING "${CMAKE_MATCH_1}" CACHE INTERNAL "PROJ.4 version string") +endif() +FIND_LIBRARY(PROJ_LIBRARY_RELEASE + NAMES proj proj_i + DOC "Path to PROJ library file") + +FIND_LIBRARY(PROJ_LIBRARY_DEBUG + NAMES projd + DOC "Path to PROJ debug library file") + +set(PROJ_LIBRARY) +if(PROJ_LIBRARY_DEBUG) + set( PROJ_LIBRARY ${PROJ_LIBRARY_DEBUG}) +elseif(PROJ_LIBRARY_RELEASE) + set( PROJ_LIBRARY ${PROJ_LIBRARY_RELEASE}) +endif() + +if(PROJ_INCLUDE_DIR AND PROJ_LIBRARY) +set(PROJ_FOUND TRUE) +endif() + +MARK_AS_ADVANCED( + PROJ_INCLUDE_DIR + PROJ_LIBRARY + PROJ_LIBRARY_DEBUG + PROJ_LIBRARY_RELEASE +) + +# Handle the QUIETLY and REQUIRED arguments and set SPATIALINDEX_FOUND to TRUE +# if all listed variables are TRUE +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(PROJ + FOUND_VAR PROJ_FOUND + REQUIRED_VARS PROJ_LIBRARY PROJ_INCLUDE_DIR PROJ_VERSION_STRING + VERSION_VAR PROJ_VERSION_STRING) diff --git a/cmake/find_scripts/FindPostgreSQL.cmake b/cmake/find_scripts/FindPostgreSQL.cmake new file mode 100644 index 00000000000..3c048cd6c72 --- /dev/null +++ b/cmake/find_scripts/FindPostgreSQL.cmake @@ -0,0 +1,126 @@ +#]=======================================================================] + +# ---------------------------------------------------------------------------- +# History: +# This module is derived from the module originally found in the VTK source tree. +# +# ---------------------------------------------------------------------------- +# Note: +# PostgreSQL_ADDITIONAL_VERSIONS is a variable that can be used to set the +# version number of the implementation of PostgreSQL. +# In Windows the default installation of PostgreSQL uses that as part of the path. +# E.g C:\Program Files\PostgreSQL\8.4. +# Currently, the following version numbers are known to this module: +# "11" "10" "9.6" "9.5" "9.4" "9.3" "9.2" "9.1" "9.0" "8.4" "8.3" "8.2" "8.1" "8.0" +# +# To use this variable just do something like this: +# set(PostgreSQL_ADDITIONAL_VERSIONS "9.2" "8.4.4") +# before calling find_package(PostgreSQL) in your CMakeLists.txt file. +# This will mean that the versions you set here will be found first in the order +# specified before the default ones are searched. +# +# ---------------------------------------------------------------------------- +# You may need to manually set: +# PostgreSQL_INCLUDE_DIR - the path to where the PostgreSQL include files are. +# PostgreSQL_LIBRARY_DIR - The path to where the PostgreSQL library files are. +# If FindPostgreSQL.cmake cannot find the include files or the library files. +# +# ---------------------------------------------------------------------------- +# The following variables are set if PostgreSQL is found: +# PostgreSQL_FOUND - Set to true when PostgreSQL is found. +# PostgreSQL_INCLUDE_DIRS - Include directories for PostgreSQL +# PostgreSQL_LIBRARY_DIRS - Link directories for PostgreSQL libraries +# PostgreSQL_LIBRARIES - The PostgreSQL libraries. +# +# The ``PostgreSQL::PostgreSQL`` imported target is also created. +# +# ---------------------------------------------------------------------------- +# If you have installed PostgreSQL in a non-standard location. +# (Please note that in the following comments, it is assumed that +# points to the root directory of the include directory of PostgreSQL.) +# Then you have three options. +# 1) After CMake runs, set PostgreSQL_INCLUDE_DIR to /include and +# PostgreSQL_LIBRARY_DIR to wherever the library pq (or libpq in windows) is +# 2) Use CMAKE_INCLUDE_PATH to set a path to /PostgreSQL<-version>. This will allow find_path() +# to locate PostgreSQL_INCLUDE_DIR by utilizing the PATH_SUFFIXES option. e.g. In your CMakeLists.txt file +# set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "/include") +# 3) Set an environment variable called ${PostgreSQL_ROOT} that points to the root of where you have +# installed PostgreSQL, e.g. . +# +# ---------------------------------------------------------------------------- +find_path(PostgreSQL_INCLUDE_DIR + NAMES libpq-fe.h + PATH_SUFFIXES + pgsql + postgresql + include + + # Help the user find it if we cannot. + DOC "path to libpq-fe.h" +) + +find_path(PostgreSQL_TYPE_INCLUDE_DIR + NAMES catalog/pg_type.h + PATH_SUFFIXES + postgresql + pgsql/server + postgresql/server + postgresql/9.5/server + include/server + + # Help the user find it if we cannot. + DOC "path to postgresql header catalog/pg_type.h" +) + +find_library(PostgreSQL_LIBRARY + NAMES libpqd pqd libpq pq + # Help the user find it if we cannot. + DOC "The ${PostgreSQL_LIBRARY_DIR_MESSAGE}") + +get_filename_component(PostgreSQL_LIBRARY_DIR ${PostgreSQL_LIBRARY} PATH) + +if (PostgreSQL_INCLUDE_DIR) + # Some platforms include multiple pg_config.hs for multi-lib configurations + # This is a temporary workaround. A better solution would be to compile + # a dummy c file and extract the value of the symbol. + file(GLOB _PG_CONFIG_HEADERS "${PostgreSQL_INCLUDE_DIR}/pg_config*.h") + foreach(_PG_CONFIG_HEADER ${_PG_CONFIG_HEADERS}) + if(EXISTS "${_PG_CONFIG_HEADER}") + file(STRINGS "${_PG_CONFIG_HEADER}" pgsql_version_str + REGEX "^#define[\t ]+PG_VERSION_NUM[\t ]+.*") + if(pgsql_version_str) + string(REGEX REPLACE "^#define[\t ]+PG_VERSION_NUM[\t ]+([0-9]*).*" + "\\1" _PostgreSQL_VERSION_NUM "${pgsql_version_str}") + break() + endif() + endif() + endforeach() + if (_PostgreSQL_VERSION_NUM) + math(EXPR _PostgreSQL_major_version "${_PostgreSQL_VERSION_NUM} / 10000") + math(EXPR _PostgreSQL_minor_version "${_PostgreSQL_VERSION_NUM} % 10000") + set(PostgreSQL_VERSION_STRING "${_PostgreSQL_major_version}.${_PostgreSQL_minor_version}") + unset(_PostgreSQL_major_version) + unset(_PostgreSQL_minor_version) + else () + foreach(_PG_CONFIG_HEADER ${_PG_CONFIG_HEADERS}) + if(EXISTS "${_PG_CONFIG_HEADER}") + file(STRINGS "${_PG_CONFIG_HEADER}" pgsql_version_str + REGEX "^#define[\t ]+PG_VERSION[\t ]+\".*\"") + if(pgsql_version_str) + string(REGEX REPLACE "^#define[\t ]+PG_VERSION[\t ]+\"([^\"]*)\".*" + "\\1" PostgreSQL_VERSION_STRING "${pgsql_version_str}") + break() + endif() + endif() + endforeach() + endif () + unset(_PostgreSQL_VERSION_NUM) + unset(pgsql_version_str) +endif() + +# Did we find anything? +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(PostgreSQL + REQUIRED_VARS PostgreSQL_LIBRARY PostgreSQL_INCLUDE_DIR PostgreSQL_TYPE_INCLUDE_DIR + VERSION_VAR PostgreSQL_VERSION_STRING) +set(PostgreSQL_FOUND ${POSTGRESQL_FOUND}) diff --git a/cmake/find_scripts/FindSQLite.cmake b/cmake/find_scripts/FindSQLite.cmake new file mode 100644 index 00000000000..c49858c4ef7 --- /dev/null +++ b/cmake/find_scripts/FindSQLite.cmake @@ -0,0 +1,8 @@ +find_path(SQLITE_INCLUDE_DIR sqlite3.h) +find_library(SQLITE_LIBRARY NAMES sqlite3 ) + +mark_as_advanced(SQLITE_LIBRARY) +mark_as_advanced(SQLITE_INCLUDE_DIR) + +include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(SQLITE REQUIRED_VARS SQLITE_LIBRARY SQLITE_INCLUDE_DIR) diff --git a/cmake/locale_strings.cmake b/cmake/locale_strings.cmake new file mode 100644 index 00000000000..79a42843ee9 --- /dev/null +++ b/cmake/locale_strings.cmake @@ -0,0 +1,82 @@ +# AUTHOR(S): Rashad Kanavath +# PURPOSE: create translation strings for grass scripts +# environment. TODO use custom_command POST_BUILD directly +# COPYRIGHT: (C) 2020 by the GRASS Development Team +# This program is free software under the GPL (>=v2) +# Read the file COPYING that comes with GRASS for details. +#-DBINARY_DIR= +#-DG_NAME= +#-DSRC_SCRIPT_FILE= +#-DOUTPUT_FILE= +#-DSOURCE_DIR= + +set(GISBASE ${BINARY_DIR}/gisbase) +file(TO_NATIVE_PATH "${GISBASE}" GISBASE_NATIVE) +file(TO_NATIVE_PATH "${GISBASE}/etc/config/rc" GISRC) +file(TO_NATIVE_PATH "${BINARY_DIR}/bin" BINARY_DIR) +file(TO_NATIVE_PATH "${BINARY_DIR}/lib" LIB_DIR) +file(TO_NATIVE_PATH "${SOURCE_DIR}" MODULE_TOPDIR) +file(TO_NATIVE_PATH "${GISBASE}/scripts" SCRIPTS_DIR) +file(TO_NATIVE_PATH "${GISBASE}/etc/python" ETC_PYTHON_DIR) +file(TO_NATIVE_PATH "${GISBASE}/gui/wxpython" GUI_WXPYTHON_DIR) + +if(WIN32) + set(sep "\;") + set(env_path "") +else() + set(sep ":") + set(env_path ":$ENV{PATH}") +endif() + +set(ENV{GISBASE} "${GISBASE_NATIVE}") +set(ENV{GISRC} ${GISRC}) +set(ENV{PATH} "${BINARY_DIR}${sep}${SCRIPTS_DIR}${env_path}") +set(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}") +endif() +set(ENV{LC_ALL} C) +set(ENV{LANG} C) +set(ENV{LANGUAGE} C) +set(ENV{MODULE_TOPDIR} ${MODULE_TOPDIR}) + +set(SCRIPT_EXT "") +if(WIN32) + set(SCRIPT_EXT ".py") +endif() + +if(WIN32) + set(PGM_NAME ${G_NAME}) + configure_file( + ${SOURCE_DIR}/cmake/windows_launch.bat.in + ${GISBASE}/scripts/${G_NAME}.bat @ONLY) +endif(WIN32) + +set(TMP_SCRIPT_FILE ${BINARY_DIR}/CMakeFiles/${G_NAME}${SCRIPT_EXT}) +configure_file(${SRC_SCRIPT_FILE} ${TMP_SCRIPT_FILE} COPYONLY) +file( + COPY ${TMP_SCRIPT_FILE} + DESTINATION ${GISBASE}/scripts/ + FILE_PERMISSIONS + OWNER_READ OWNER_WRITE OWNER_EXECUTE + GROUP_READ GROUP_EXECUTE + WORLD_READ WORLD_EXECUTE) + + +execute_process(COMMAND + ${BINARY_DIR}/bin/g.parser -t ${GISBASE}/scripts/${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}") +endforeach() + +string(REGEX REPLACE ";" "\n" output_to_write "${output_to_write}") +file(WRITE "${OUTPUT_FILE}" "${output_to_write}\n") +file(REMOVE ${TMP_SCRIPT_FILE}) diff --git a/cmake/modules/build_gui_in_subdir.cmake b/cmake/modules/build_gui_in_subdir.cmake new file mode 100644 index 00000000000..0a7a767cd57 --- /dev/null +++ b/cmake/modules/build_gui_in_subdir.cmake @@ -0,0 +1,107 @@ +# AUTHOR(S): Rashad Kanavath +# PURPOSE: build_gui_in_subdir is the cmake function that builds g.gui.* modules +# COPYRIGHT: (C) 2020 by the GRASS Development Team +# This program is free software under the GPL (>=v2) +# Read the file COPYING that comes with GRASS for details. + +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") + 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 ${GISBASE}/gui/wxpython/${G_NAME}/ + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PYTHON_FILES} ${GISBASE}/gui/wxpython/${G_NAME}/ + COMMAND ${CMAKE_COMMAND} -E touch ${GUI_STAMP_FILE}) + + set(OUT_SCRIPT_FILE ${GISBASE}/scripts/${G_TARGET_NAME}${SCRIPT_EXT}) + ADD_CUSTOM_COMMAND(OUTPUT ${OUT_SCRIPT_FILE} + COMMAND ${CMAKE_COMMAND} + -DSOURCE_DIR=${CMAKE_SOURCE_DIR} + -DBINARY_DIR=${CMAKE_BINARY_DIR} + -DSRC_SCRIPT_FILE=${SRC_SCRIPT_FILE} + -DG_NAME=${G_TARGET_NAME} + -DGISBASE=${GISBASE} + -P ${CMAKE_SOURCE_DIR}/cmake/copy_g_gui_module.cmake + DEPENDS g.parser ${SRC_SCRIPT_FILE}) + + + if(WITH_DOCS) + + file(GLOB IMG_FILES ${G_SRC_DIR}/*.png ${G_SRC_DIR}/*.jpg) + set(copy_images_command ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_TARGET_NAME}) + if(IMG_FILES) + set(copy_images_command ${CMAKE_COMMAND} -E copy ${IMG_FILES} ${GISBASE}/docs/html/) + endif() + + set(HTML_FILE ${G_SRC_DIR}/${G_TARGET_NAME}.html) + if(EXISTS ${HTML_FILE}) + install(FILES ${GISBASE}/docs/html/${G_TARGET_NAME}.html DESTINATION docs/html) + 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 ${GISBASE}/scripts| ${G_TARGET_NAME}") + endif() + endif() + + set(TMP_HTML_FILE ${G_SRC_DIR}/${G_TARGET_NAME}.tmp.html) + set(OUT_HTML_FILE ${GISBASE}/docs/html/${G_TARGET_NAME}.html) + set(GUI_HTML_FILE ${GISBASE}/docs/html/wxGUI.${G_NAME}.html) + + ADD_CUSTOM_COMMAND(OUTPUT ${OUT_HTML_FILE} + COMMAND ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRC_DIR} + ${PYTHON_EXECUTABLE} ${G_TARGET_NAME}.py "--html-description" > ${TMP_HTML_FILE} + COMMAND ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRC_DIR} + ${PYTHON_EXECUTABLE} ${MKHTML_PY} ${G_TARGET_NAME} ${GRASS_VERSION_DATE} > ${OUT_HTML_FILE} + COMMENT "Creating ${OUT_HTML_FILE}" + COMMAND ${copy_images_command} + COMMAND ${CMAKE_COMMAND} -E remove ${TMP_HTML_FILE} + COMMAND ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRC_DIR} + ${PYTHON_EXECUTABLE} ${MKHTML_PY} ${G_TARGET_NAME} ${GRASS_VERSION_DATE} > ${GUI_HTML_FILE} + COMMENT "Creating ${GUI_HTML_FILE}" + DEPENDS ${OUT_SCRIPT_FILE} GUI_WXPYTHON LIB_PYTHON + ) + + install(FILES ${OUT_HTML_FILE} DESTINATION docs/html/) + + endif() #WITH_DOCS + + + ADD_CUSTOM_TARGET(${G_TARGET_NAME} + DEPENDS ${GUI_STAMP_FILE} ${OUT_SCRIPT_FILE} ${OUT_HTML_FILE}) + + + set(modules_list "${G_TARGET_NAME};${modules_list}" CACHE INTERNAL "list of modules") + + set_target_properties (${G_TARGET_NAME} PROPERTIES FOLDER gui) + + + if(WIN32) + install(PROGRAMS ${GISBASE}/scripts/${G_TARGET_NAME}.bat DESTINATION scripts) + endif() + + install(PROGRAMS ${GISBASE}/scripts/${G_TARGET_NAME}${SCRIPT_EXT} DESTINATION scripts) + + +endfunction() diff --git a/cmake/modules/build_library_in_subdir.cmake b/cmake/modules/build_library_in_subdir.cmake new file mode 100644 index 00000000000..44415bea900 --- /dev/null +++ b/cmake/modules/build_library_in_subdir.cmake @@ -0,0 +1,16 @@ +# AUTHOR(S): Rashad Kanavath +# PURPOSE: This is the macro to make grass libraries through build_module function. +# COPYRIGHT: (C) 2020 by the GRASS Development Team +# This program is free software under the GPL (>=v2) +# Read the file COPYING that comes with GRASS for details. + +macro(build_library_in_subdir dir_name) + set (extra_args ${ARGN}) + if ("NAME" IN_LIST extra_args) + build_module(SRCDIR ${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} SRCDIR ${CMAKE_CURRENT_SOURCE_DIR}/${dir_name} ${ARGN}) + endif() +endmacro() \ No newline at end of file diff --git a/cmake/modules/build_module.cmake b/cmake/modules/build_module.cmake new file mode 100644 index 00000000000..0110a94b471 --- /dev/null +++ b/cmake/modules/build_module.cmake @@ -0,0 +1,271 @@ + +# AUTHOR(S): Rashad Kanavath +# PURPOSE: This is the main function that builds all grass libraries (prefixed with grass_) +# and grass exeuctables. This cmake function is tailored to meet requirement of grass gnu make rules +# COPYRIGHT: (C) 2020 by the GRASS Development Team +# This program is free software under the GPL (>=v2) +# Read the file COPYING that comes with GRASS for details. + +include(GenerateExportHeader) +function(build_module) + cmake_parse_arguments(G + "EXE" + "NAME;SRCDIR;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}) + endif() + endforeach() + + if(NOT G_SRC_REGEX) + set(G_SRC_REGEX "*.c") + endif() + + if(NOT G_SRCDIR) + set(G_SRCDIR ${CMAKE_CURRENT_SOURCE_DIR}) + endif() + set(html_file "${G_SRCDIR}/${G_NAME}.html") + + foreach(G_HEADER ${G_HEADERS}) + if( EXISTS "${G_SRCDIR}/${G_HEADER}" ) + file(COPY ${G_SRCDIR}/${G_HEADER} DESTINATION "${CMAKE_BINARY_DIR}/include/grass") + else() + file(GLOB header_list_from_glob LIST_DIRECTORIES false "${G_SRCDIR}/${G_HEADER}") + if(NOT header_list_from_glob) + message(FATAL_ERROR "MUST copy '${G_SRCDIR}/${G_HEADER}' to ${CMAKE_BINARY_DIR}/include/grass") + endif() + foreach(header_I ${header_list_from_glob}) + file(COPY ${header_I} DESTINATION "${CMAKE_BINARY_DIR}/include/grass") + endforeach() + endif() + endforeach() + + if(NOT G_SOURCES) + file(GLOB ${G_NAME}_SRCS "${G_SRCDIR}/${G_SRC_REGEX}") + else() + set(${G_NAME}_SRCS ${G_SOURCES}) + endif() + + if(G_EXE) + add_executable(${G_NAME} ${${G_NAME}_SRCS}) + if("${G_NAME}" MATCHES "^v.*") + set_target_properties (${G_NAME} PROPERTIES FOLDER vector) + elseif("${G_NAME}" MATCHES "^r.*") + set_target_properties (${G_NAME} PROPERTIES FOLDER raster) + else() + set_target_properties (${G_NAME} PROPERTIES FOLDER bin) + 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() + add_library(${G_NAME} ${${G_NAME}_SRCS}) + set_target_properties (${G_NAME} PROPERTIES FOLDER lib) + set_target_properties(${G_NAME} PROPERTIES OUTPUT_NAME ${G_NAME}.${GRASS_VERSION_NUMBER}) + set(export_file_name "${CMAKE_BINARY_DIR}/include/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}) + 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} copy_header) + + 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_SRCDIR}") + 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 ${${G_NAME}_INCLUDE_DIRS}) + 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") + else() + set(package_define "grasslibs") + 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() + endif() + target_link_libraries(${G_NAME} ${dep}) + endforeach() + + 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) + 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(RUN_HTML_DESCR FALSE) + endif() + + set(install_dest "") + if(NOT G_RUNTIME_OUTPUT_DIR) + if(G_EXE) + set(G_RUNTIME_OUTPUT_DIR "${GISBASE}/bin") + set(install_dest "bin") + else() + set(G_RUNTIME_OUTPUT_DIR "${GISBASE}/lib") + set(install_dest "lib") + endif() + else() + set(install_dest "${G_RUNTIME_OUTPUT_DIR}") + set(G_RUNTIME_OUTPUT_DIR "${GISBASE}/${install_dest}") + endif() + + # To use this property later in build_docs + set(PGM_EXT "") + if(WIN32) + if(G_EXE) + set(PGM_EXT ".exe") + endif() + endif() + + + if(WITH_DOCS) + + set(G_HTML_FILE_NAME "${HTML_FILE_NAME}.html") + + set(html_file ${G_SRCDIR}/${G_HTML_FILE_NAME}) + set(HTML_FILE) + set(no_docs_list "grass_sqlp;echo;clean_temp;lock;run") + + if(EXISTS ${html_file}) + set(HTML_FILE ${html_file}) + install(FILES ${GISBASE}/docs/html/${G_HTML_FILE_NAME} DESTINATION docs/html) + else() + file(GLOB html_files ${G_SRCDIR}/*.html) + if(html_files) + if(NOT ${target_name} IN_LIST no_docs_list) + message(FATAL_ERROR "${html_file} does not exists. ${G_SRCDIR} \n ${G_RUNTIME_OUTPUT_DIR} | ${target_name}") + endif() + endif() + endif() + + + if(NOT HTML_FILE) + add_custom_command(TARGET ${G_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy $ ${G_RUNTIME_OUTPUT_DIR} + ) + return() + endif() +##message("HTML_FILE=${HTML_FILE}") + +get_filename_component(HTML_FILE_NAME ${HTML_FILE} NAME) +get_filename_component(PGM_SOURCE_DIR ${HTML_FILE} PATH) + +string(REPLACE ".html" "" PGM_NAME "${HTML_FILE_NAME}" ) +string(REPLACE ".html" ".tmp.html" TMP_HTML_NAME ${HTML_FILE_NAME}) +set(TMP_HTML_FILE ${G_SRCDIR}/${TMP_HTML_NAME}) +set(OUT_HTML_FILE ${GISBASE}/docs/html/${HTML_FILE_NAME}) + +set(PGM_EXT "") +if(WIN32) + set(PGM_EXT ".exe") +endif() + +set(html_descr_argument "--html-description") +if(RUN_HTML_DESCR) +set(html_descr_command ${G_NAME}${PGM_EXT} "--html-description") +else() + set(html_descr_command ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_NAME}) +endif() + +file(GLOB IMG_FILES ${G_SRCDIR}/*.png ${G_SRCDIR}/*.jpg) +set(copy_images_command ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_NAME}) +if(IMG_FILES) + set(copy_images_command ${CMAKE_COMMAND} -E copy ${IMG_FILES} ${GISBASE}/docs/html/) +endif() + +add_custom_command(TARGET ${G_NAME} POST_BUILD + COMMAND ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRCDIR} + ${html_descr_command} > ${TMP_HTML_FILE} + COMMAND ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRCDIR} + ${PYTHON_EXECUTABLE} ${MKHTML_PY} ${PGM_NAME} > ${OUT_HTML_FILE} + COMMAND ${CMAKE_COMMAND} -E copy $ ${G_RUNTIME_OUTPUT_DIR} + COMMAND ${copy_images_command} + COMMAND ${CMAKE_COMMAND} -E remove ${TMP_HTML_FILE} + COMMENT "Creating ${OUT_HTML_FILE}") + +endif() # WITH_DOCS + +foreach(test_SOURCE ${G_TEST_SOURCES}) + add_test(NAME ${G_NAME}-test + COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} + ${G_SRCDIR}/testsuite/${test_SOURCE}) + message("[build_module] ADDING TEST ${G_NAME}-test") +endforeach() + + install(TARGETS ${G_NAME} DESTINATION ${install_dest}) + +endfunction() diff --git a/cmake/modules/build_program.cmake b/cmake/modules/build_program.cmake new file mode 100644 index 00000000000..31c381ab55f --- /dev/null +++ b/cmake/modules/build_program.cmake @@ -0,0 +1,8 @@ +# AUTHOR(S): Rashad Kanavath +# PURPOSE: Shortcut macro to call build_module with EXE argument set +# COPYRIGHT: (C) 2020 by the GRASS Development Team +# This program is free software under the GPL (>=v2) +# Read the file COPYING that comes with GRASS for details. +macro(build_program) + build_module(${ARGN} EXE) +endmacro() \ No newline at end of file diff --git a/cmake/modules/build_program_in_subdir.cmake b/cmake/modules/build_program_in_subdir.cmake new file mode 100644 index 00000000000..3da2baa6ac1 --- /dev/null +++ b/cmake/modules/build_program_in_subdir.cmake @@ -0,0 +1,17 @@ +# AUTHOR(S): Rashad Kanavath +# PURPOSE: CMake macro to build a grass executable (program) under sub directory +# which is passed as argument to macro +# COPYRIGHT: (C) 2000 by the GRASS Development Team +# This program is free software under the GPL (>=v2) +# Read the file COPYING that comes with GRASS for details. + +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(SRCDIR ${CMAKE_CURRENT_SOURCE_DIR}/${dir_name} ${ARGN} ) + else() + get_filename_component(pgm_name ${dir_name} NAME) + build_program(NAME ${pgm_name} SRCDIR ${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 new file mode 100644 index 00000000000..07c85897e61 --- /dev/null +++ b/cmake/modules/build_script_in_subdir.cmake @@ -0,0 +1,97 @@ +# AUTHOR(S): Rashad Kanavath +# PURPOSE: A CMake function that builds grass python script modules +# COPYRIGHT: (C) 2020 by the GRASS Development Team +# This program is free software under the GPL (>=v2) +# Read the file COPYING that comes with GRASS for details. + +function(build_script_in_subdir dir_name) + #build_py_module(NAME ${dir_name}) + set(G_NAME ${dir_name}) + + set(G_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${G_NAME}) + + 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() + + set(TRANSLATE_C_FILE + ${CMAKE_SOURCE_DIR}/locale/scriptstrings/${G_NAME}_to_translate.c) + + ADD_CUSTOM_COMMAND(OUTPUT ${TRANSLATE_C_FILE} + COMMAND ${CMAKE_COMMAND} + -DBINARY_DIR=${CMAKE_BINARY_DIR} + -DG_NAME=${G_NAME} + -DSRC_SCRIPT_FILE=${SRC_SCRIPT_FILE} + -DSOURCE_DIR=${CMAKE_SOURCE_DIR} + -DOUTPUT_FILE=${TRANSLATE_C_FILE} + -P ${CMAKE_SOURCE_DIR}/cmake/locale_strings.cmake + DEPENDS g.parser) + + set(HTML_FILE_NAME ${G_NAME}) + set(OUT_HTML_FILE "") + + if(WITH_DOCS) + + file(GLOB IMG_FILES ${G_SRC_DIR}/*.png ${G_SRC_DIR}/*.jpg) + set(copy_images_command ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_NAME}) + if(IMG_FILES) + set(copy_images_command ${CMAKE_COMMAND} -E copy ${IMG_FILES} ${GISBASE}/docs/html/) + endif() + + set(HTML_FILE ${G_SRC_DIR}/${G_NAME}.html) + if(EXISTS ${HTML_FILE}) + install(FILES ${GISBASE}/docs/html/${G_NAME}.html DESTINATION docs/html) + 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 ${GISBASE}/scripts| ${G_NAME}") + endif() + endif() + + set(TMP_HTML_FILE ${G_SRC_DIR}/${G_NAME}.tmp.html) + set(OUT_HTML_FILE ${GISBASE}/docs/html/${G_NAME}.html) + + + ADD_CUSTOM_COMMAND(OUTPUT ${OUT_HTML_FILE} + COMMAND ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRC_DIR} + ${PYTHON_EXECUTABLE} ${G_NAME}.py "--html-description" > ${TMP_HTML_FILE} + COMMAND ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRC_DIR} + ${PYTHON_EXECUTABLE} ${MKHTML_PY} ${G_NAME} > ${OUT_HTML_FILE} + COMMAND ${copy_images_command} + COMMAND ${CMAKE_COMMAND} -E remove ${TMP_HTML_FILE} + COMMENT "Creating ${OUT_HTML_FILE}" + DEPENDS ${TRANSLATE_C_FILE} LIB_PYTHON) + + install(FILES ${OUT_HTML_FILE} DESTINATION docs/html/) + + 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") + + set_target_properties (${G_NAME} PROPERTIES FOLDER scripts) + + if(WIN32) + install(PROGRAMS ${GISBASE}/scripts/${G_NAME}.bat DESTINATION scripts) + endif() + + install(PROGRAMS ${GISBASE}/scripts/${G_NAME}${SCRIPT_EXT} DESTINATION scripts) + +endfunction() diff --git a/cmake/modules/check_target.cmake b/cmake/modules/check_target.cmake new file mode 100644 index 00000000000..ca6d3f855ef --- /dev/null +++ b/cmake/modules/check_target.cmake @@ -0,0 +1,7 @@ +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() +endmacro() diff --git a/cmake/modules/copy_python_files_in_subdir.cmake b/cmake/modules/copy_python_files_in_subdir.cmake new file mode 100644 index 00000000000..62cee3f5816 --- /dev/null +++ b/cmake/modules/copy_python_files_in_subdir.cmake @@ -0,0 +1,15 @@ +# AUTHOR(S): Rashad Kanavath +# PURPOSE: Simply copy python file in given subdirectory +# Destination will be relative to GISBASE directory set in root CMakeLists.txt +# COPYRIGHT: (C) 2020 by the GRASS Development Team +# This program is free software under the GPL (>=v2) +# Read the file COPYING that comes with GRASS for details. +function(copy_python_files_in_subdir dir_name dst_prefix) +file(GLOB PY_FILES "${CMAKE_CURRENT_SOURCE_DIR}/${dir_name}/*.py") + string(REPLACE "/" "_" targ_name ${dir_name}) +add_custom_target(python_${targ_name} + COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/${dst_prefix}/${dir_name}/ + COMMAND ${CMAKE_COMMAND} -E copy ${PY_FILES} ${GISBASE}/${dst_prefix}/${dir_name}/ + ) + set_target_properties (python_${targ_name} PROPERTIES FOLDER lib/python) +endfunction() diff --git a/cmake/modules/get_host_arch.cmake b/cmake/modules/get_host_arch.cmake new file mode 100644 index 00000000000..52a1fe21c6b --- /dev/null +++ b/cmake/modules/get_host_arch.cmake @@ -0,0 +1,39 @@ +# AUTHOR(S): Rashad Kanavath +# PURPOSE: Get host system architecuture +# COPYRIGHT: (C) 2020 by the GRASS Development Team +# This program is free software under the GPL (>=v2) +# Read the file COPYING that comes with GRASS for details. +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) +endfunction() diff --git a/cmake/modules/get_versions.cmake b/cmake/modules/get_versions.cmake new file mode 100644 index 00000000000..5578440c2ed --- /dev/null +++ b/cmake/modules/get_versions.cmake @@ -0,0 +1,34 @@ +# AUTHOR(S): Rashad Kanavath +# PURPOSE: Read major, minor patch, date from given version file +# COPYRIGHT: (C) 2020 by the GRASS Development Team +# This program is free software under the GPL (>=v2) +# Read the file COPYING that comes with GRASS for details. +function(get_versions file_path var_major var_minor var_release var_date) + +set(version_major 0) +set(version_minor 0) +set(version_release 0) +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() + +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) +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_date} ${version_date} PARENT_SCOPE) +endfunction() \ No newline at end of file diff --git a/cmake/modules/repo_status.cmake b/cmake/modules/repo_status.cmake new file mode 100644 index 00000000000..ca13362fe45 --- /dev/null +++ b/cmake/modules/repo_status.cmake @@ -0,0 +1,36 @@ +# AUTHOR(S): Rashad Kanavath +# PURPOSE: Read git status of grass repository if building from git clone +# COPYRIGHT: (C) 2020 by the GRASS Development Team +# This program is free software under the GPL (>=v2) +# Read the file COPYING that comes with GRASS for details. +function(repo_status repo_dir version_git_var) + +if(NOT EXISTS "${repo_dir}/.git") + message(STATUS ".git directory not found. GRASS_VERSION_GIT is set to 'exported'") + set(GRASS_VERSION_GIT "exported") + return() +endif() +find_package(Git) +if(NOT GIT_FOUND) + message(WARNING "git not found. GRASS_VERSION_GIT is set to 'exported'") + set(GRASS_VERSION_GIT "exported") + 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 + ) + + if(git_rev_RV ) + message(FATAL_ERROR "Error running git ${git_rev_EV}") + else() + string(STRIP ${git_rev_OV} GRASS_VERSION_GIT) + endif() + + set(${version_git_var} "${GRASS_VERSION_GIT}" PARENT_SCOPE) + +endfunction() #repo_status \ No newline at end of file diff --git a/cmake/modules/set_compiler_flags.cmake b/cmake/modules/set_compiler_flags.cmake new file mode 100644 index 00000000000..871f9f6bb2e --- /dev/null +++ b/cmake/modules/set_compiler_flags.cmake @@ -0,0 +1,13 @@ +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}") + +endmacro() \ No newline at end of file diff --git a/cmake/tests/have_pbuffer.c b/cmake/tests/have_pbuffer.c new file mode 100644 index 00000000000..ebc7244acb9 --- /dev/null +++ b/cmake/tests/have_pbuffer.c @@ -0,0 +1,18 @@ +#include +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char glXCreatePbuffer(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_glXCreatePbuffer) || defined (__stub___glXCreatePbuffer) +choke me +#else +glXCreatePbuffer(); +#endif +; return 0; } + diff --git a/cmake/tests/have_pixmaps.c b/cmake/tests/have_pixmaps.c new file mode 100644 index 00000000000..88b501bde46 --- /dev/null +++ b/cmake/tests/have_pixmaps.c @@ -0,0 +1,20 @@ +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char glXCreateGLXPixmap(); below. */ +#include +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char glXCreateGLXPixmap(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_glXCreateGLXPixmap) || defined (__stub___glXCreateGLXPixmap) +choke me +#else +glXCreateGLXPixmap(); +#endif + +; return 0; } diff --git a/cmake/tests/have_pqcmdtuples.c b/cmake/tests/have_pqcmdtuples.c new file mode 100644 index 00000000000..fcd05fe8d22 --- /dev/null +++ b/cmake/tests/have_pqcmdtuples.c @@ -0,0 +1,8 @@ +#include +int main() { + PGresult* res = NULL; + PGconn* conn = PQconnectdb(NULL); + res = PQexec(conn, NULL); + PQcmdTuples(res); + return 0; +} diff --git a/cmake/windows_launch.bat.in b/cmake/windows_launch.bat.in new file mode 100644 index 00000000000..aa03bb369bf --- /dev/null +++ b/cmake/windows_launch.bat.in @@ -0,0 +1,2 @@ +@echo off +"%GRASS_PYTHON%" "%GISBASE%\scripts\@PGM_NAME@.py" %* \ No newline at end of file diff --git a/db/CMakeLists.txt b/db/CMakeLists.txt new file mode 100644 index 00000000000..999a28566fb --- /dev/null +++ b/db/CMakeLists.txt @@ -0,0 +1,41 @@ + +set(db_drivers grass_gis) +add_subdirectory(drivers) + +build_program_in_subdir(db.columns DEPENDS grass_dbmiclient) +add_dependencies(db.columns ${db_drivers}) + +build_program_in_subdir(db.createdb DEPENDS grass_dbmiclient) +add_dependencies(db.createdb ${db_drivers}) + +build_program_in_subdir(db.describe DEPENDS grass_dbmiclient) +add_dependencies(db.describe ${db_drivers}) + +build_program_in_subdir(db.connect DEPENDS grass_dbmiclient) +add_dependencies(db.connect ${db_drivers}) + +build_program_in_subdir(db.copy DEPENDS grass_dbmiclient) +add_dependencies(db.copy ${db_drivers}) + +build_program_in_subdir(db.execute DEPENDS grass_dbmiclient) +add_dependencies(db.execute ${db_drivers}) + +build_program_in_subdir(db.drivers DEPENDS grass_dbmiclient) +add_dependencies(db.drivers ${db_drivers}) + +build_program_in_subdir(db.databases DEPENDS grass_dbmiclient) +add_dependencies(db.databases ${db_drivers}) + +build_program_in_subdir(db.dropdb DEPENDS grass_dbmiclient) +add_dependencies(db.dropdb ${db_drivers}) + +build_program_in_subdir(db.login DEPENDS grass_dbmiclient) +add_dependencies(db.login ${db_drivers}) + +build_program_in_subdir(db.select DEPENDS grass_dbmiclient) +add_dependencies(db.select ${db_drivers}) + +build_program_in_subdir(db.tables DEPENDS grass_dbmiclient) +add_dependencies(db.tables ${db_drivers}) + +#TODO: PGM = databaseintro diff --git a/db/drivers/CMakeLists.txt b/db/drivers/CMakeLists.txt new file mode 100644 index 00000000000..22ddb1dfa52 --- /dev/null +++ b/db/drivers/CMakeLists.txt @@ -0,0 +1,67 @@ +set(dbf_SRCS dbf/column.c dbf/create_table.c + dbf/cursor.c dbf/db.c dbf/dbfexe.c dbf/describe.c + dbf/driver.c dbf/error.c dbf/execute.c dbf/fetch.c + dbf/listtab.c dbf/main.c dbf/select.c dbf/str.c dbf/table.c) + +set(db_drivers) +set(grass_dbstubs_DEFS) +if(MSVC) +set(grass_dbstubs_DEFS "-DDB_DRIVER_C=1") +endif() +build_program_in_subdir(dbf + SOURCES ${dbf_SRCS} + DEPENDS grass_gis grass_dbmidriver grass_shape grass_sqlp + DEFS "${grass_dbstubs_DEFS}" + HTML_FILE_NAME grass-dbf + RUNTIME_OUTPUT_DIR "driver/db/") + +list(APPEND db_drivers dbf) + +build_program_in_subdir(ogr + DEPENDS grass_gis grass_dbmidriver grass_sqlp GDAL + DEFS "${grass_dbstubs_DEFS}" + HTML_FILE_NAME grass-ogr + RUNTIME_OUTPUT_DIR "driver/db/") + +list(APPEND db_drivers ogr) + +build_program_in_subdir(odbc + DEPENDS grass_gis grass_dbmidriver grass_sqlp + DEFS "${grass_dbstubs_DEFS}" + PRIMARY_DEPENDS ODBC + HTML_FILE_NAME grass-odbc + RUNTIME_OUTPUT_DIR "driver/db/") +if(TARGET ODBC) + list(APPEND db_drivers odbc) +endif() + +build_program_in_subdir(sqlite + DEPENDS grass_gis grass_dbmidriver grass_sqlp + DEFS "${grass_dbstubs_DEFS}" + PRIMARY_DEPENDS SQLITE + HTML_FILE_NAME grass-sqlite + RUNTIME_OUTPUT_DIR "driver/db/") + +if(TARGET SQLITE) + list(APPEND db_drivers sqlite) +endif() + +build_program_in_subdir(postgres + DEPENDS grass_gis grass_dbmidriver grass_sqlp + DEFS "${grass_dbstubs_DEFS}" + PRIMARY_DEPENDS POSTGRES + HTML_FILE_NAME grass-pg + RUNTIME_OUTPUT_DIR "driver/db/") + +if(TARGET POSTGRES) + list(APPEND db_drivers postgres) +endif() + + +if(MYSQL_LIB) + ##add_subdirectory(mysql) + #list(APPEND db_drivers "mysql") +endif() + + +set(db_drivers ${db_drivers} PARENT_SCOPE) diff --git a/db/drivers/odbc/odbc.h b/db/drivers/odbc/odbc.h index 4cd376ee64e..1e14184c2b2 100644 --- a/db/drivers/odbc/odbc.h +++ b/db/drivers/odbc/odbc.h @@ -1,7 +1,7 @@ #ifndef _ODBC_H_ #define _ODBC_H_ -#ifdef __MINGW32__ +#ifdef _WIN32 #include #endif diff --git a/demolocation/grassrc.cmake.in b/demolocation/grassrc.cmake.in new file mode 100644 index 00000000000..7b46331e401 --- /dev/null +++ b/demolocation/grassrc.cmake.in @@ -0,0 +1,4 @@ +GISDBASE: @gisbase_init_dir@ +LOCATION_NAME: demolocation +MAPSET: PERMANENT +GUI: text diff --git a/display/CMakeLists.txt b/display/CMakeLists.txt new file mode 100644 index 00000000000..fd16882eb2c --- /dev/null +++ b/display/CMakeLists.txt @@ -0,0 +1,27 @@ +build_program_in_subdir(d.barscale DEPENDS grass_sym grass_display grass_gis ) +build_program_in_subdir(d.colorlist DEPENDS grass_gis grass_display) +build_program_in_subdir(d.colortable DEPENDS grass_gis grass_display) +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) +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_sym grass_display) +build_program_in_subdir(d.grid DEPENDS grass_gis grass_sym grass_gproj grass_display) +build_program_in_subdir(d.his DEPENDS grass_gis grass_display) +build_program_in_subdir(d.histogram DEPENDS grass_gis grass_display) +build_program_in_subdir(d.info DEPENDS grass_gis grass_display) +build_program_in_subdir(d.labels DEPENDS grass_gis grass_display) +build_program_in_subdir(d.legend DEPENDS grass_gis grass_display grass_raster3d) +build_program_in_subdir(d.legend.vect DEPENDS grass_gis grass_display grass_sym) +build_program_in_subdir(d.linegraph DEPENDS grass_gis grass_display grass_sym) +build_program_in_subdir(d.northarrow DEPENDS grass_gis grass_display grass_sym) +build_program_in_subdir(d.path DEPENDS grass_gis grass_display grass_vector) +build_program_in_subdir(d.profile DEPENDS grass_gis grass_display) +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) +build_program_in_subdir(d.rast.num DEPENDS grass_gis grass_display grass_raster) +build_program_in_subdir(d.where DEPENDS grass_gis grass_display grass_gproj) diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/general/CMakeLists.txt b/general/CMakeLists.txt new file mode 100644 index 00000000000..1905254fd26 --- /dev/null +++ b/general/CMakeLists.txt @@ -0,0 +1,44 @@ + +build_program_in_subdir(g.access DEPENDS grass_gis ) +build_program_in_subdir(g.copy DEPENDS grass_manage ) +build_program_in_subdir(g.dirseps DEPENDS grass_gis ) +build_program_in_subdir(g.filename DEPENDS grass_gis ) +build_program_in_subdir(g.findetc DEPENDS grass_gis ) +build_program_in_subdir(g.findfile DEPENDS grass_manage ) +build_program_in_subdir(g.gisenv DEPENDS grass_gis ) +build_program_in_subdir(g.mapset DEPENDS grass_gis ) +build_program_in_subdir(g.mapsets DEPENDS grass_gis ) +build_program_in_subdir(g.message DEPENDS grass_gis ) +build_program_in_subdir(g.mkfontcap DEPENDS grass_gis FREETYPE ) +build_program_in_subdir(g.parser DEPENDS grass_gis FREETYPE) +build_program_in_subdir(g.pnmcomp DEPENDS grass_gis ) +build_program_in_subdir(g.ppmtopng DEPENDS grass_gis LIBPNG) +build_program_in_subdir(g.proj DEPENDS grass_gis grass_gproj GDAL ) +build_program_in_subdir(g.region DEPENDS grass_gis grass_gproj + grass_vector grass_raster3d grass_gmath) + +build_program_in_subdir(g.rename DEPENDS grass_manage grass_raster ) +build_program_in_subdir(g.tempfile DEPENDS grass_gis ) + +build_program_in_subdir(g.version + DEPENDS grass_gis PROJ GEOS GDAL SQLITE + DEFS "-DGRASS_VERSION_NUMBER=\"${GRASS_VERSION_NUMBER}\"" + "-DGRASS_VERSION_GIT=\"${GRASS_VERSION_GIT}\"" + "-DGRASS_VERSION_UPDATE_PKG=${GRASS_VERSION_UPDATE_PKG}" + "-DARCH=\"${BUILD_ARCH}\"" + ) + +if(WITH_CAIRO) + if(NOT MSVC) + build_program_in_subdir(g.cairocomp DEPENDS grass_gis CAIRO grass_cairodriver) + endif() +endif() + +add_subdirectory(manage/lister) + +build_program_in_subdir(g.list DEPENDS grass_manage) +add_dependencies(g.list cell vector) + +build_program_in_subdir(g.remove DEPENDS grass_manage grass_raster) + +build_program_in_subdir(g.gui DEPENDS grass_raster) diff --git a/general/g.region/printwindow.c b/general/g.region/printwindow.c index c36600864ff..c0519631c25 100644 --- a/general/g.region/printwindow.c +++ b/general/g.region/printwindow.c @@ -598,7 +598,7 @@ void print_window(struct Cell_head *window, int print_flag, int flat_flag, double convergence; if (G_projection() == PROJECTION_XY) - convergence = NAN; + convergence = INFINITY; else if (G_projection() == PROJECTION_LL) convergence = 0.0; else { diff --git a/general/manage/lister/CMakeLists.txt b/general/manage/lister/CMakeLists.txt new file mode 100644 index 00000000000..38f31daf1e9 --- /dev/null +++ b/general/manage/lister/CMakeLists.txt @@ -0,0 +1,9 @@ +build_program(NAME cell +SOURCES "cell.c" +DEPENDS grass_vector grass_dbmibase grass_gis grass_raster +RUNTIME_OUTPUT_DIR etc/lister) + +build_program(NAME vector +SOURCES "vector.c" +DEPENDS grass_vector grass_dbmibase grass_gis grass_raster +RUNTIME_OUTPUT_DIR etc/lister) diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt new file mode 100644 index 00000000000..04d60dd4d9f --- /dev/null +++ b/gui/CMakeLists.txt @@ -0,0 +1,12 @@ + + +add_subdirectory(icons) +add_subdirectory(images) + + + +#add_subdirectory(scripts) + +add_subdirectory(wxpython) + +install(FILES xml/grass-interface.dtd DESTINATION gui/xml) diff --git a/gui/icons/CMakeLists.txt b/gui/icons/CMakeLists.txt new file mode 100644 index 00000000000..9072ecfbb44 --- /dev/null +++ b/gui/icons/CMakeLists.txt @@ -0,0 +1,52 @@ +file(GLOB GUI_ICONS "*.ico" "*.png") +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 ${GISBASE}/gui/icons/grass + COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/gui/icons/flags + COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/docs/html/icons + COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/gui/images/symbols + ) + +set(output_icons) +foreach(ICON ${GUI_ICONS}) + get_filename_component(FILE_NAME ${ICON} NAME) + add_custom_command(OUTPUT ${GISBASE}/gui/icons/${FILE_NAME} + COMMAND ${CMAKE_COMMAND} -E copy ${ICON} ${GISBASE}/gui/icons/) + list(APPEND output_icons ${GISBASE}/gui/icons/${FILE_NAME}) +endforeach() + +foreach(ICON ${GRASS_ICONS}) + get_filename_component(FILE_NAME ${ICON} NAME) + add_custom_command(OUTPUT ${GISBASE}/gui/icons/grass/${FILE_NAME} + COMMAND ${CMAKE_COMMAND} -E copy ${ICON} ${GISBASE}/gui/icons/grass/ + COMMAND ${CMAKE_COMMAND} -E copy ${ICON} ${GISBASE}/docs/html/icons/) + list(APPEND output_icons ${GISBASE}/gui/icons/grass/${FILE_NAME}) + list(APPEND output_icons ${GISBASE}/docs/html/icons/${FILE_NAME}) +endforeach() + +foreach(ICON ${FLAGS_ICONS}) + get_filename_component(FILE_NAME ${ICON} NAME) + add_custom_command(OUTPUT ${GISBASE}/gui/icons/flags/${FILE_NAME} + COMMAND ${CMAKE_COMMAND} -E copy ${ICON} ${GISBASE}/gui/icons/flags/) + list(APPEND output_icons ${GISBASE}/gui/icons/flags/${FILE_NAME}) +endforeach() + +add_custom_target(gui_icons DEPENDS make_gui_icons_dirs ${output_icons}) + +install(FILES ${GUI_ICONS} DESTINATION gui/icons) +install(FILES ${GRASS_ICONS} DESTINATION gui/icons/grass) +install(FILES ${FLAGS_ICONS} DESTINATION gui/icons/flags) +install(FILES ${GRASS_ICONS} DESTINATION docs/html/icons) +install(FILES grass.desktop DESTINATION share/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 DESTINATION share/icons/hicolor/${icon_size}/apps) +endforeach() + +install(FILES grass.svg + DESTINATION share/icons/hicolor/scalable/apps + RENAME grass${GRASS_VERSION_MAJOR}${GRASS_VERSION_MINOR}.svg) + +install(FILES grass.appdata.xml DESTINATION share/appdata) diff --git a/gui/images/CMakeLists.txt b/gui/images/CMakeLists.txt new file mode 100644 index 00000000000..263c9ef1ad4 --- /dev/null +++ b/gui/images/CMakeLists.txt @@ -0,0 +1,26 @@ +file(GLOB GUI_IMAGES "*.png") + +set(output_images) +foreach(IMG ${GUI_IMAGES}) + get_filename_component(FILE_NAME ${IMG} NAME) + add_custom_command(OUTPUT ${GISBASE}/gui/images/${FILE_NAME} + COMMAND ${CMAKE_COMMAND} -E copy ${IMG} ${GISBASE}/gui/images/) + list(APPEND output_images ${GISBASE}/gui/images/${FILE_NAME}) +endforeach() + +add_custom_target(gui_images + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/symbols/basic/ ${GISBASE}/gui/images/symbols/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/symbols/demo/ ${GISBASE}/gui/images/symbols/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/symbols/extra/ ${GISBASE}/gui/images/symbols/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/symbols/geology/ ${GISBASE}/gui/images/symbols/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/symbols/legend/ ${GISBASE}/gui/images/symbols/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/symbols/n_arrows/ ${GISBASE}/gui/images/symbols/ + DEPENDS gui_icons ${output_images}) + +install(FILES ${GUI_IMAGES} DESTINATION gui/images/) +install(DIRECTORY basic DESTINATION gui/images/symbols/) +install(DIRECTORY demo DESTINATION gui/images/symbols/) +install(DIRECTORY extra DESTINATION gui/images/symbols/) +install(DIRECTORY geology DESTINATION gui/images/symbols/) +install(DIRECTORY legend DESTINATION gui/images/symbols/) +install(DIRECTORY n_arrows DESTINATION gui/images/symbols/) diff --git a/gui/wxpython/CMakeLists.txt b/gui/wxpython/CMakeLists.txt new file mode 100644 index 00000000000..ef69efa6076 --- /dev/null +++ b/gui/wxpython/CMakeLists.txt @@ -0,0 +1,77 @@ + +# missing docs + + +set(WXPYTHON_DIR ${GISBASE}/gui/wxpython) +set(gui_lib_DIRS core gui_core icons iscatt lmgr location_wizard +mapdisp mapwin modules nviz rdigit startup tools vnet web_services wxplot) + +set(gui_lib_targets) +foreach(gui_lib_DIR ${gui_lib_DIRS}) + copy_python_files_in_subdir(${gui_lib_DIR} gui/wxpython) + list(APPEND gui_lib_targets python_${gui_lib_DIR}) +endforeach() +add_custom_target(GUI_WXPYTHON + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/gis_set.py ${WXPYTHON_DIR}/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/gis_set_error.py ${WXPYTHON_DIR}/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/wxgui.py ${WXPYTHON_DIR}/ + DEPENDS ${gui_lib_targets}) + +set(gui_DIRS animation datacatalog dbmgr gcp gmodeler +iclass image2target mapswipe photo2image psmap rlisetup timeline tplot 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}") +endforeach() + + +add_subdirectory(docs) + +install(FILES README DESTINATION gui/wxpython) + + ### copy all python files gui/ lib/python + ### compile all python files + ### so below target depends on MODULD_LIST + +add_custom_target(copy_wxpython_xml + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/xml ${WXPYTHON_DIR}/xml/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../xml/grass-interface.dtd ${GISBASE}/gui/ + DEPENDS GUI_WXPYTHON) + +add_custom_target(compile_python_files + COMMAND ${PYTHON_EXECUTABLE} -m compileall ${GISBASE}/scripts + COMMAND ${PYTHON_EXECUTABLE} -m compileall ${WXPYTHON_DIR} + DEPENDS ALL_MODULES) + +add_custom_target(build_modules_items_xml + COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/tools/build_modules_xml.py > ${WXPYTHON_DIR}/xml/module_items.xml + DEPENDS copy_wxpython_xml compile_python_files ${g_gui_targets} + COMMENT "Generating interface description for all modules..." + VERBATIM) + +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 ${WXPYTHON_DIR}/xml/ + DEPENDS build_modules_items_xml) + +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 ${WXPYTHON_DIR}/xml/ + DEPENDS build_xml_menudata) + +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) diff --git a/gui/wxpython/docs/CMakeLists.txt b/gui/wxpython/docs/CMakeLists.txt new file mode 100644 index 00000000000..a04446a98ba --- /dev/null +++ b/gui/wxpython/docs/CMakeLists.txt @@ -0,0 +1,13 @@ + +set(wxpython_html_files) + +ADD_CUSTOM_COMMAND(OUTPUT ${GISBASE}/docs/html/wxGUI.components.html + COMMAND ${grass_env_command} + ${PYTHON_EXECUTABLE} ${MKHTML_PY} wxGUI.components ${GRASS_VERSION_DATE} > ${GISBASE}/docs/html/wxGUI.components.html + COMMENT "Creating ${GISBASE}/docs/html/wxGUI.components.html" + DEPENDS GUI_WXPYTHON LIB_PYTHON + ) + +list(APPEND wxpython_html_files ${GISBASE}/docs/html/wxGUI.components.html) + +ADD_CUSTOM_TARGET(wxpython_docs DEPENDS ${wxpython_html_files}) diff --git a/imagery/CMakeLists.txt b/imagery/CMakeLists.txt new file mode 100644 index 00000000000..8e2050fd238 --- /dev/null +++ b/imagery/CMakeLists.txt @@ -0,0 +1,103 @@ +build_program_in_subdir(i.albedo DEPENDS grass_imagery grass_raster grass_vector grass_gis ) +build_program_in_subdir(i.aster.toar DEPENDS grass_imagery grass_raster grass_vector grass_gis ) + +build_program_in_subdir(i.atcorr + DEPENDS grass_imagery grass_raster grass_vector grass_gis SRC_REGEX "*.cpp") + +build_program_in_subdir(i.biomass DEPENDS grass_imagery grass_raster grass_vector grass_gis ) +build_program_in_subdir(i.cca DEPENDS grass_imagery grass_raster grass_vector grass_gis ) +build_program_in_subdir(i.cluster DEPENDS grass_imagery grass_raster grass_vector grass_gis grass_cluster) + +build_program_in_subdir(i.eb.evapfr DEPENDS grass_imagery grass_raster grass_vector grass_gis) +build_program_in_subdir(i.eb.eta DEPENDS grass_imagery grass_raster grass_vector grass_gis) +build_program_in_subdir(i.eb.hsebal01 DEPENDS grass_imagery grass_raster grass_vector grass_gis) +build_program_in_subdir(i.eb.netrad DEPENDS grass_imagery grass_raster grass_vector grass_gis) +build_program_in_subdir(i.eb.soilheatflux DEPENDS grass_imagery grass_raster grass_vector grass_gis) + +build_program_in_subdir(i.evapo.mh DEPENDS grass_imagery grass_raster grass_vector grass_gis) +build_program_in_subdir(i.evapo.pm DEPENDS grass_imagery grass_raster grass_vector grass_gis) +build_program_in_subdir(i.evapo.pt DEPENDS grass_imagery grass_raster grass_vector grass_gis) +build_program_in_subdir(i.evapo.time DEPENDS grass_imagery grass_raster grass_vector grass_gis) +build_program_in_subdir(i.emissivity DEPENDS grass_imagery grass_raster grass_vector grass_gis) +build_program_in_subdir(i.find + DEPENDS grass_imagery grass_raster grass_vector grass_gis + PACKAGE "grassmods" + RUNTIME_OUTPUT_DIR etc) + +build_program_in_subdir(i.gensig DEPENDS grass_imagery grass_raster grass_vector grass_gis) + +build_program_in_subdir( + i.gensigset + DEPENDS grass_imagery grass_raster grass_vector grass_gis) + +build_program_in_subdir( + i.group + DEPENDS grass_imagery grass_raster grass_vector grass_gis) + +build_program_in_subdir( + i.his.rgb + DEPENDS grass_imagery grass_raster grass_vector grass_gis) + +build_program_in_subdir( + i.landsat.toar + DEPENDS grass_imagery grass_raster grass_vector grass_gis) + +build_program_in_subdir( + i.maxlik + DEPENDS grass_imagery grass_raster grass_vector grass_gis) + +build_program_in_subdir( + i.modis.qc + DEPENDS grass_imagery grass_raster grass_vector grass_gis) + +build_program_in_subdir( + i.rectify + DEPENDS grass_imagery grass_raster grass_vector grass_gis) + +build_program_in_subdir( + i.rgb.his + DEPENDS grass_imagery grass_raster grass_vector grass_gis) + +build_program_in_subdir( + i.segment + DEPENDS grass_imagery grass_raster grass_vector grass_gis grass_segment) + +build_program_in_subdir( + i.smap + DEPENDS grass_imagery grass_raster grass_vector grass_gis) + +build_program_in_subdir( + i.target + DEPENDS grass_imagery grass_raster grass_vector grass_gis) + +build_program_in_subdir( + i.topo.corr + DEPENDS grass_imagery grass_raster grass_vector grass_gis) + +build_program_in_subdir( + i.pca + DEPENDS grass_imagery grass_raster grass_vector grass_gis) + +build_program_in_subdir( + i.vi + DEPENDS grass_imagery grass_raster grass_vector grass_gis) + +build_program_in_subdir( + i.zc + DEPENDS grass_imagery grass_raster grass_vector grass_gis) + +build_program_in_subdir( + i.fft + DEPENDS grass_imagery grass_raster grass_gmath grass_gis + PRIMARY_DEPENDS FFTW) + +build_program_in_subdir( + i.ifft + DEPENDS grass_gis grass_raster grass_gmath grass_btree2 + PRIMARY_DEPENDS FFTW) + +build_program_in_subdir( + i.landsat.acca + DEPENDS grass_raster grass_gis) + +add_subdirectory(i.ortho.photo) diff --git a/imagery/i.ortho.photo/CMakeLists.txt b/imagery/i.ortho.photo/CMakeLists.txt new file mode 100644 index 00000000000..c442548d498 --- /dev/null +++ b/imagery/i.ortho.photo/CMakeLists.txt @@ -0,0 +1,17 @@ +build_library_in_subdir(lib + NAME grass_iortho + DEPENDS grass_gis grass_imagery grass_gmath) + +build_program_in_subdir(i.ortho.camera DEPENDS grass_iortho) + +build_program_in_subdir(i.ortho.elev DEPENDS grass_iortho) + +build_program_in_subdir(i.ortho.init DEPENDS grass_iortho) + +build_program_in_subdir(i.ortho.photo DEPENDS grass_iortho) + +build_program_in_subdir(i.ortho.rectify DEPENDS grass_iortho) + +build_program_in_subdir(i.ortho.target DEPENDS grass_iortho) + +build_program_in_subdir(i.ortho.transform DEPENDS grass_iortho) diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt new file mode 100644 index 00000000000..b9d398a81d9 --- /dev/null +++ b/include/CMakeLists.txt @@ -0,0 +1,285 @@ +include(CheckIncludeFile) +include(CheckFunctionExists) #TODO: use CheckSymbolExists +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) +else() + # unistd.h in stocked in thirdparty/msvc/ + set(HAVE_UNISTD_H 1) +endif() +check_include_file(values.h HAVE_VALUES_H) +check_include_file(sys/ioctl.h HAVE_SYS_IOCTL_H) +check_include_file(sys/mtio.h HAVE_SYS_MTIO_H) +check_include_file(sys/resource.h HAVE_SYS_RESOURCE_H) +check_include_file(sys/time.h HAVE_SYS_TIME_H) +check_include_file(time.h HAVE_TIME_H) +check_include_file(sys/timeb.h HAVE_SYS_TIMEB_H) +check_include_file(sys/types.h HAVE_SYS_TYPES_H) +check_include_file(sys/utsname.h HAVE_SYS_UTSNAME_H) +check_include_file(g2c.h HAVE_G2C_H) +check_include_file(f2c.h HAVE_F2C_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) +else() + check_include_file(pthread.h HAVE_PTHREAD_H) + check_include_file(regex.h HAVE_REGEX_H) + check_include_file(libintl.h HAVE_LIBINTL_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 HAVE_ICONV_H) +check_target(BZIP2 HAVE_BZLIB_H) +check_target(ZLIB HAVE_ZLIB_H) +check_target(LIBJPEG HAVE_JPEGLIB_H) +check_target(LIBPNG HAVE_PNG_H) +check_target(TIFF HAVE_TIFFIO_H) +check_target(GEOS HAVE_GEOS) +check_target(GDAL HAVE_GDAL) +check_target(GDAL HAVE_OGR) +check_target(SQLITE HAVE_SQLITE) + +#TODO: check with more version of proj + +if(PROJ_VERSION_STRING GREATER 599 AND PROJ_VERSION_STRING LESS 700) + message(STATUS "Using PROJ.4 API version 6.x") + set(PROJMAJOR 6) + check_target(PROJ HAVE_PROJ_H) +elseif(PROJ_VERSION_STRING GREATER 499 AND PROJ_VERSION_STRING LESS 600) + check_target(PROJ HAVE_PROJ_H) + message(STATUS "Using PROJ.4 API version 5.x") + set(PROJMAJOR 5) +elseif(PROJ_VERSION_STRING GREATER 399 AND PROJ_VERSION_STRING LESS 500) + set(USE_PROJ4API 1) + message(STATUS "Using PROJ.4 API version 4.x") + set(PROJMAJOR 4) +endif() + +check_target(BLAS HAVE_LIBBLAS) +check_target(BLAS HAVE_CBLAS_H) + +check_target(LAPACK HAVE_LIBLAPACK) +check_target(LAPACK HAVE_CLAPACK_H) + +check_target(FREETYPE HAVE_FT2BUILD_H) +check_target(POSTGRES HAVE_POSTGRES) +check_target(ODBC HAVE_SQL_H) + +if(TARGET POSTGRES) + try_compile(HAVE_PQCMDTUPLES + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_SOURCE_DIR}/cmake/tests/have_pqcmdtuples.c + CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:PATH=${PostgreSQL_INCLUDE_DIR}" + "-w" + "-DLINK_LIBRARIES:STRING=${PostgreSQL_LIBRARY}" + OUTPUT_VARIABLE COMPILE_HAVE_PQCMDTUPLES) + if(NOT COMPILE_HAVE_PQCMDTUPLES) + message("Performing Test HAVE_PQCMDTUPLES - Failed\n COMPILE_OUTPUT:${COMPILE_HAVE_PQCMDTUPLES}\n") + else() + message(STATUS "Performing Test HAVE_PQCMDTUPLES - Success") + set(HAVE_PQCMDTUPLES 1) + endif() +endif() + +if(MSVC) +check_target(PCRE HAVE_PCRE_H) +endif() + +check_target(POSTGRES HAVE_LIBPQ_FE_H) + +# Whether or not we are using G_socks for display communications +set(USE_G_SOCKS 0) + +if(WITH_LARGEFILES) + set(HAVE_LARGEFILES 1) +else() + set(HAVE_LARGEFILES 0) +endif() + +if(MSVC) + set(GID_TYPE int) + set(UID_TYPE int) + set(UID_TYPE int) + set(RETSIGTYPE "void") +else() + set(RETSIGTYPE "int") +endif() + +########################TODO######################## +#no target ATLAS in thirdpary/CMakeLists.txt +check_target(ATLAS HAVE_LIBATLAS) + +set(USE_NLS 0) +if(WITH_NLS) + set(USE_NLS 1) +endif() +set(HAVE_READLINE_READLINE_H 0) + +if(MSVC) +set(PID_TYPE int) +endif() + +set(_OE_SOCKETS 0) +set(USE_DELTA_FOR_TZ 0) +set(_REENTRANT 0) +########################TODO######################## + +set(X_DISPLAY_MISSING 1) +if(TARGET X11) + set(X_DISPLAY_MISSING 0) +endif() + +#used in config.cmake.in +set(STATIC_BUILD 0) +if(NOT BUILD_SHARED_LIBS) + set(STATIC_BUILD 1) +endif() + +#used in config.cmake.in +set(GDEBUG 0) +if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug" ) + set(GDEBUG 1) +endif() + +include(CheckCSourceCompiles) + +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) + +CHECK_C_SOURCE_COMPILES(" +#include +#include +#include +int main() { +struct tm *tp; +; return 0; } +" +TIME_WITH_SYS_TIME) + +CHECK_FUNCTION_EXISTS(ftime HAVE_FTIME) +CHECK_FUNCTION_EXISTS(gethostname HAVE_GETHOSTNAME) +CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY) +CHECK_FUNCTION_EXISTS(lseek HAVE_LSEEK) +CHECK_FUNCTION_EXISTS(time HAVE_TIME) +CHECK_FUNCTION_EXISTS(uname HAVE_UNAME) +CHECK_FUNCTION_EXISTS(seteuid HAVE_SETEUID) +CHECK_FUNCTION_EXISTS(setpriority HAVE_SETPRIORITY) +CHECK_FUNCTION_EXISTS(setreuid HAVE_SETREUID) +CHECK_FUNCTION_EXISTS(setruid HAVE_SETRUID) +CHECK_FUNCTION_EXISTS(setpgrp SETPGRP_VOID) +CHECK_FUNCTION_EXISTS(drand48 HAVE_DRAND48) +CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP) +CHECK_FUNCTION_EXISTS(asprintf HAVE_ASPRINTF) +CHECK_FUNCTION_EXISTS(putenv HAVE_PUTENV) +CHECK_FUNCTION_EXISTS(setenv HAVE_SETENV) +CHECK_FUNCTION_EXISTS(socket HAVE_SOCKET) + +set(HAVE_PBUFFERS 0) +set(HAVE_PIXMAPS 0) +if(WITH_OPENGL) +try_compile(HAVE_PBUFFERS ${CMAKE_CURRENT_BINARY_DIR} +${CMAKE_SOURCE_DIR}/cmake/tests/have_pbuffer.c +CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:PATH=${OPENGL_INCLUDE_DIR}" + "-w" + "-DLINK_LIBRARIES:STRING=${OPENGL_LIBRARIES}" +OUTPUT_VARIABLE COMPILE_HAVE_PBUFFERS +) +if(NOT COMPILE_HAVE_PBUFFERS) + message(FATAL_ERROR "Performing Test HAVE_PBUFFERS - Failed\n COMPILE_OUTPUT:${COMPILE_HAVE_PBUFFERS}\n") +else() + message(STATUS "Performing Test HAVE_PBUFFERS - Success") + set(HAVE_PBUFFERS 1) +endif() + + +try_compile(HAVE_PIXMAPS ${CMAKE_CURRENT_BINARY_DIR} +${CMAKE_SOURCE_DIR}/cmake/tests/have_pixmaps.c +CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:PATH=${OPENGL_INCLUDE_DIR}" + "-w" + "-DLINK_LIBRARIES:STRING=${OPENGL_LIBRARIES}" + OUTPUT_VARIABLE COMPILE_HAVE_PIXMAPS + ) + +if(NOT COMPILE_HAVE_PIXMAPS) + message(FATAL_ERROR "Performing Test HAVE_PIXMAPS - Failed\n COMPILE_OUTPUT:${COMPILE_HAVE_PIXMAPS}\n") +else() + message(STATUS "Performing Test HAVE_PIXMAPS - Success") + set(HAVE_PIXMAPS 1) +endif() + +endif(WITH_OPENGL) + +CHECK_FUNCTION_EXISTS(fseeko HAVE_FSEEKO) + + +set(OPENGL_X11 0) +set(OPENGL_AQUA 0) +set(OPENGL_WINDOWS 0) +if(WITH_OPENGL) + if(APPLE) + set(OPENGL_AQUA 1) + elseif(WIN32) + set(OPENGL_WINDOWS 1) + else() + set(OPENGL_X11 1) + endif() +endif() + +file(GLOB_RECURSE SRCHS "*.h") + set(include_depends) +foreach(srch ${SRCHS}) + get_filename_component(srch_PATH ${srch} PATH) + get_filename_component(srch_NAME ${srch} NAME) + STRING(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "" dsth_PATH "${srch_PATH}") + set(output_dir ${CMAKE_BINARY_DIR}/include/grass${dsth_PATH}) + + 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 ${CMAKE_BINARY_DIR}/include/grass${dsth_PATH}/${srch_NAME}" + ) + list(APPEND include_depends ${output_dir}/${srch_NAME} ) +endforeach() + +add_custom_target(copy_header DEPENDS ${include_depends} LIB_PYTHON) + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/version.h.in + "${CMAKE_CURRENT_BINARY_DIR}/grass/version.h") + +message(STATUS "Creating ${CMAKE_CURRENT_BINARY_DIR}/grass/config.h") + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake.in + "${CMAKE_CURRENT_BINARY_DIR}/grass/config.h") + +file(WRITE ${CMAKE_BINARY_DIR}/include/grass/copying.h "") +file(STRINGS ${CMAKE_SOURCE_DIR}/COPYING copying_lines) +foreach(copying_line ${copying_lines}) + file(APPEND ${CMAKE_BINARY_DIR}/include/grass/copying.h "\"${copying_line} \\n\"\n" ) +endforeach() + +file(WRITE ${CMAKE_BINARY_DIR}/include/grass/citing.h "") +file(STRINGS ${CMAKE_SOURCE_DIR}/CITING citing_lines) +foreach(citing_line ${citing_lines}) + file(APPEND ${CMAKE_BINARY_DIR}/include/grass/citing.h "\"${citing_line}\\n\"\n" ) +endforeach() + +#TODO +#file(READ ${CMAKE_SOURCE_DIR}/config.status config_status_header) +file(WRITE ${CMAKE_BINARY_DIR}/include/grass/confparms.h "\"/* */\\n\"" ) diff --git a/include/config.h.cmake.in b/include/config.h.cmake.in new file mode 100644 index 00000000000..b695dfd6389 --- /dev/null +++ b/include/config.h.cmake.in @@ -0,0 +1,317 @@ +/* + #Generated by cmake from include/config.h.cmake.in + * config.h.cmake.in + */ + +#ifndef _config_h +#define _config_h + +#cmakedefine GDEBUG ${GDEBUG} + +/* define _OE_SOCKETS flag (OS/390 sys/socket.h) */ +#cmakedefine _OE_SOCKETS ${_OE_SOCKETS} + +/* define _REENTRANT flag (for SunOS) */ +#cmakedefine _REENTRANT ${_REENTRANT} + +/* define USE_DELTA_FOR_TZ (for AIX) */ +#cmakedefine USE_DELTA_FOR_TZ ${USE_DELTA_FOR_TZ} + +/* define for Windows static build */ +#cmakedefine STATIC_BUILD ${STATIC_BUILD} + +/* define if limits.h exists */ +#cmakedefine HAVE_LIMITS_H ${HAVE_LIMITS_H} + +/* define if termio.h exists */ +#cmakedefine HAVE_TERMIO_H ${HAVE_TERMIO_H} + +/* define if termios.h exists */ +#cmakedefine HAVE_TERMIOS_H ${HAVE_TERMIOS_H} + +/* define if unistd.h exists */ +#cmakedefine HAVE_UNISTD_H ${HAVE_UNISTD_H} + +/* define if values.h exists */ +#cmakedefine HAVE_VALUES_H ${HAVE_VALUES_H} + +/* define if zlib.h exists */ +#cmakedefine HAVE_ZLIB_H ${HAVE_ZLIB_H} + +/* define if bzlib.h exists */ +#cmakedefine HAVE_BZLIB_H ${HAVE_BZLIB_H} + +/* define if sys/ioctl.h exists */ +#cmakedefine HAVE_SYS_IOCTL_H ${HAVE_SYS_IOCTL_H} + +/* define if sys/mtio.h exists */ +#cmakedefine HAVE_SYS_MTIO_H ${HAVE_SYS_MTIO_H} + +/* define if sys/resource.h exists */ +#cmakedefine HAVE_SYS_RESOURCE_H ${HAVE_SYS_RESOURCE_H} + +/* define if sys/time.h exists */ +#cmakedefine HAVE_SYS_TIME_H ${HAVE_SYS_TIME_H} + +/* define if time.h and sys/time.h can be included together */ +#cmakedefine TIME_WITH_SYS_TIME ${TIME_WITH_SYS_TIME} + +/* define if sys/timeb.h exists */ +#cmakedefine HAVE_SYS_TIMEB_H ${HAVE_SYS_TIMEB_H} + +/* define if sys/types.h exists */ +#cmakedefine HAVE_SYS_TYPES_H ${HAVE_SYS_TYPES_H} + +/* define if sys/utsname.h exists */ +#cmakedefine HAVE_SYS_UTSNAME_H ${HAVE_SYS_UTSNAME_H} + +/* define if g2c.h exists */ +#cmakedefine HAVE_G2C_H ${HAVE_G2C_H} + +/* define if f2c.h exists */ +#cmakedefine HAVE_F2C_H ${HAVE_F2C_H} + +/* define if cblas.h exists */ +#cmakedefine HAVE_CBLAS_H ${HAVE_CBLAS_H} + +/* define if clapack.h exists */ +#cmakedefine HAVE_CLAPACK_H ${HAVE_CLAPACK_H} + +/* define if "long long" is available */ +#cmakedefine HAVE_LONG_LONG_INT ${HAVE_LONG_LONG_INT} + +/* Define the return type of signal handlers */ +#define RETSIGTYPE ${RETSIGTYPE} + +/* define if ftime() exists */ +#cmakedefine HAVE_FTIME ${HAVE_FTIME} + +/* define if gethostname() exists */ +#cmakedefine HAVE_GETHOSTNAME ${HAVE_GETHOSTNAME} + +/* define if gettimeofday() exists */ +#cmakedefine HAVE_GETTIMEOFDAY ${HAVE_GETTIMEOFDAY} + +/* define if lseek() exists */ +#cmakedefine HAVE_LSEEK ${HAVE_LSEEK} + +/* define if time() exists */ +#cmakedefine HAVE_TIME ${HAVE_TIME} + +/* define if uname() exists */ +#cmakedefine HAVE_UNAME ${HAVE_UNAME} + +/* define if seteuid() exists */ +#cmakedefine HAVE_SETEUID ${HAVE_SETEUID} + +/* define if setpriority() exists */ +#cmakedefine HAVE_SETPRIORITY ${HAVE_SETPRIORITY} + +/* define if setreuid() exists */ +#cmakedefine HAVE_SETREUID ${HAVE_SETREUID} + +/* define if setruid() exists */ +#cmakedefine SETPGRP_VOID ${SETPGRP_VOID} + +/* define if setpgrp() takes no argument */ +#cmakedefine SETPGRP_VOID ${SETPGRP_VOID} + +/* define if drand48() exists */ +#cmakedefine HAVE_DRAND48 ${HAVE_DRAND48} + +/* define if nanosleep() exists */ +#cmakedefine HAVE_NANOSLEEP ${HAVE_NANOSLEEP} + +/* define if asprintf() exists */ +#cmakedefine HAVE_ASPRINTF ${HAVE_ASPRINTF} + +/* define if postgres is to be used */ +#cmakedefine HAVE_POSTGRES ${HAVE_POSTGRES} + +/* define if SQLite is to be used */ +#cmakedefine HAVE_SQLITE ${HAVE_SQLITE} + +/* define if GDAL is to be used */ +#cmakedefine HAVE_GDAL ${HAVE_GDAL} + +/* define if OGR is to be used */ +#cmakedefine HAVE_OGR ${HAVE_OGR} + +/* define if GEOS is to be used */ +#cmakedefine HAVE_GEOS ${HAVE_GEOS} + +/* define if postgres client header exists */ +#cmakedefine HAVE_LIBPQ_FE_H ${HAVE_LIBPQ_FE_H} + +/* define if PQcmdTuples in lpq */ +#cmakedefine HAVE_PQCMDTUPLES ${HAVE_PQCMDTUPLES} + +/* define if ODBC exists */ +#cmakedefine HAVE_SQL_H ${HAVE_SQL_H} + +/* define if tiffio.h exists */ +#cmakedefine HAVE_TIFFIO_H ${HAVE_TIFFIO_H} + +/* define if png.h exists */ +#cmakedefine HAVE_PNG_H ${HAVE_PNG_H} + +/* define if jpeglib.h exists */ +#cmakedefine HAVE_JPEGLIB_H ${HAVE_JPEGLIB_H} + +/* define if proj.h exists */ +#cmakedefine PROJMAJOR ${PROJMAJOR} +#cmakedefine HAVE_PROJ_H ${HAVE_PROJ_H} + +/* define if fftw3.h exists */ +#cmakedefine HAVE_FFTW3_H ${HAVE_FFTW3_H} + +/* define if fftw.h exists */ +#cmakedefine HAVE_FFTW_H ${HAVE_FFTW_H} + +/* define if dfftw.h exists */ +#cmakedefine HAVE_DFFTW_H ${HAVE_DFFTW_H} + +/* define if BLAS exists */ +#cmakedefine HAVE_LIBBLAS ${HAVE_LIBBLAS} + +/* define if LAPACK exists */ +#cmakedefine HAVE_LIBLAPACK ${HAVE_LIBLAPACK} + +/* define if ATLAS exists */ +#cmakedefine HAVE_LIBATLAS ${HAVE_LIBATLAS} + +/* define if dbm.h exists */ +#cmakedefine HAVE_DBM_H ${HAVE_DBM_H} + +/* define if readline exists */ +#cmakedefine HAVE_READLINE_READLINE_H ${HAVE_READLINE_READLINE_H} + +/* define if ft2build.h exists */ +#cmakedefine HAVE_FT2BUILD_H ${HAVE_FT2BUILD_H} + +/* Whether or not we are using G_socks for display communications */ +#cmakedefine USE_G_SOCKS ${USE_G_SOCKS} + +/* define if X is disabled or unavailable */ +#cmakedefine X_DISPLAY_MISSING ${X_DISPLAY_MISSING} + +/* define if libintl.h exists */ +#cmakedefine HAVE_LIBINTL_H ${HAVE_LIBINTL_H} + +/* define if iconv.h exists */ +#cmakedefine HAVE_ICONV_H ${HAVE_ICONV_H} + +/* define if NLS requested */ +#cmakedefine USE_NLS ${USE_NLS} + +/* define if putenv() exists */ +#cmakedefine HAVE_PUTENV ${HAVE_PUTENV} + +/* define if setenv() exists */ +#cmakedefine HAVE_SETENV ${HAVE_SETENV} + +/* define if socket() exists */ +#cmakedefine HAVE_SOCKET ${HAVE_SOCKET} + +/* define if glXCreatePbuffer exists */ +#cmakedefine HAVE_PBUFFERS ${HAVE_PBUFFERS} + +/* define if glXCreateGLXPixmap exists */ +#cmakedefine HAVE_PIXMAPS ${HAVE_PIXMAPS} + +/* define if OpenGL uses X11 */ +#cmakedefine OPENGL_X11 ${OPENGL_X11} + +/* define if OpenGL uses Aqua (MacOS X) */ +#cmakedefine OPENGL_AQUA ${OPENGL_AQUA} + +/* define if OpenGL uses Windows */ +#cmakedefine OPENGL_WINDOWS ${OPENGL_WINDOWS} + +/* define if regex.h exists */ +#cmakedefine HAVE_REGEX_H ${HAVE_REGEX_H} + +/* define if pcre.h exists */ +#cmakedefine HAVE_PCRE_H ${HAVE_PCRE_H} + +/* define if pthread.h exists */ +#cmakedefine HAVE_PTHREAD_H ${HAVE_PTHREAD_H} + +/* define if fseeko() exists */ +#cmakedefine HAVE_FSEEKO ${HAVE_FSEEKO} + +/* + * configuration information solely dependent on the above + * nothing below this point should need changing + */ + +#if defined(HAVE_VALUES_H) && !defined(HAVE_LIMITS_H) +#define INT_MIN -MAXINT +#endif + +/* + * Defines needed to get large file support - from cdrtools-2.01 + */ + +#define HAVE_LARGEFILES ${HAVE_LARGEFILES} + +/* define if langinfo.h exists */ +#cmakedefine HAVE_LANGINFO_H ${HAVE_LANGINFO_H} + +#if defined(__MINGW32__) && (!defined(_FILE_OFFSET_BITS) || (_FILE_OFFSET_BITS != 64)) +/* add/remove as needed */ +/* redefine off_t */ +#include +#define off_t off64_t +/* fseeko and ftello are safe because not defined by MINGW */ +#define HAVE_FSEEKO +#define fseeko fseeko64 +#define ftello ftello64 +/* redefine lseek */ +#include +#define lseek lseek64 +/* redefine stat and fstat */ +/* use _stati64 compatible with MSVCRT < 6.1 */ +#include +#define stat _stati64 +#define fstat _fstati64 + +#endif /* MINGW32 LFS */ + +#ifdef _MSC_VER +#define strncasecmp _strnicmp +#define strcasecmp _stricmp +#define fdopen _fdopen +#define open _open +#define read _read +#define write _write +#define close _close +#define unlink _unlink +#define getpid _getpid +#define creat _creat + +/* define gid_t type */ +typedef @GID_TYPE@ gid_t; + +/* define uid_t type */ +typedef @UID_TYPE@ uid_t; + +/* define pid_t type */ +typedef @PID_TYPE@ pid_t; + +#ifndef S_ISDIR +#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) +#endif + +#include +typedef SSIZE_T ssize_t; + +/* open for reading, writing, or both (not in fcntl.h) */ +#define O_ACCMODE (_O_RDONLY | _O_WRONLY | _O_RDWR) + +#endif //_MSC_VER + +/* To include export.h generated by cmake */ + +#define GRASS_CMAKE_BUILD 1 +#endif /* _config_h */ diff --git a/include/grass/calc.h b/include/grass/calc.h index 9b22a847160..ab89ef3155c 100644 --- a/include/grass/calc.h +++ b/include/grass/calc.h @@ -31,12 +31,18 @@ typedef struct func_desc { #define SET_NULL_F(x) (Rast_set_f_null_value((x), 1)) #define SET_NULL_D(x) (Rast_set_d_null_value((x), 1)) -extern volatile int floating_point_exception; -extern volatile int floating_point_exception_occurred; +#ifdef GRASS_CMAKE_BUILD +#include +#else +#define GRASS_CALC_EXPORT +#endif + +extern GRASS_CALC_EXPORT volatile int floating_point_exception; +extern GRASS_CALC_EXPORT volatile int floating_point_exception_occurred; extern int columns; -extern func_desc calc_func_descs[]; +extern GRASS_CALC_EXPORT func_desc calc_func_descs[]; #include diff --git a/include/grass/defs/gis.h b/include/grass/defs/gis.h index dc5ad2499f0..f6a2c911ec9 100644 --- a/include/grass/defs/gis.h +++ b/include/grass/defs/gis.h @@ -72,6 +72,27 @@ #define RELDIR "?" #endif +/* GDAL < 2.3 does not define HAVE_LONG_LONG when compiled with + * Visual Studio as for OSGeo4W, even though long long is available, + * and GIntBig falls back to long which is on Windows always 4 bytes. + * This patch ensures that GIntBig is defined as long long (8 bytes) + * if GDAL is compiled with Visual Studio and GRASS is compiled with + * MinGW. This patch must be applied before other GDAL/OGR headers are + * included, as done by gprojects.h and vector.h */ +#ifndef _MSC_VER +#if defined(__MINGW32__) && HAVE_GDAL +#include +#if GDAL_VERSION_NUM < 2030000 +#include +/* HAVE_LONG_LONG_INT comes from GRASS + * HAVE_LONG_LONG comes from GDAL */ +#if HAVE_LONG_LONG_INT && !defined(HAVE_LONG_LONG) +#define HAVE_LONG_LONG 1 +#endif +#endif +#endif +#endif /* _MSC_VER */ + /* adj_cellhd.c */ void G_adjust_Cell_head(struct Cell_head *, int, int); void G_adjust_Cell_head3(struct Cell_head *, int, int, int); @@ -485,7 +506,7 @@ void G_ls(const char *, FILE *); void G_ls_format(char **, int, int, FILE *); /* ls_filter.c */ -#ifdef HAVE_REGEX_H +#if defined(HAVE_REGEX_H) || defined(HAVE_PCRE_H) void *G_ls_regex_filter(const char *, int, int, int); void *G_ls_glob_filter(const char *, int, int); void G_free_ls_filter(void *); diff --git a/include/grass/iostream/mm.h b/include/grass/iostream/mm.h index 38b1feb9377..dfe0fd9f68c 100644 --- a/include/grass/iostream/mm.h +++ b/include/grass/iostream/mm.h @@ -79,9 +79,16 @@ enum MM_stream_usage { MM_STREAM_USAGE_MAXIMUM }; + +#ifdef GRASS_CMAKE_BUILD +#include +#else +#define GRASS_IOSTREAM_EXPORT +#endif + // Declarations of a very simple memory manager designed to work with // BTEs that rely on the underlying OS to manage physical memory. -class MM_register { +class GRASS_IOSTREAM_EXPORT MM_register { private: // The number of instances of this class and descendents that exist. static int instances; @@ -155,6 +162,6 @@ class mm_register_init { static mm_register_init source_file_mm_register_init; // Here is the single memory management object (defined in mm.C). -extern MM_register MM_manager; +extern GRASS_IOSTREAM_EXPORT MM_register MM_manager; #endif // _MM_H diff --git a/include/grass/iostream/rtimer.h b/include/grass/iostream/rtimer.h index 547dbeca5ec..9bda4ac9193 100644 --- a/include/grass/iostream/rtimer.h +++ b/include/grass/iostream/rtimer.h @@ -36,13 +36,14 @@ #ifndef RTIMER_H #define RTIMER_H -#ifdef __MINGW32__ +#ifdef _WIN32 #include #include #include +#ifdef __MINGW32__ #include - +#endif typedef struct { time_t tv1, tv2; } Rtimer; diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt new file mode 100644 index 00000000000..841cb55b549 --- /dev/null +++ b/lib/CMakeLists.txt @@ -0,0 +1,163 @@ + +set(use_math_DEFS "") +if(MSVC) + set(use_math_DEFS "-D_USE_MATH_DEFINES=1") +endif() + +build_library_in_subdir(datetime) + +add_subdirectory(gis) + +build_library_in_subdir(driver + DEFS "${use_math_DEFS}" + DEPENDS grass_gis FREETYPE ICONV ZLIB) + +add_subdirectory(proj) + +file(GLOB raster_SRCS "./raster/*.c") +list(APPEND raster_SRCS "./gis/gisinit.c") +build_library_in_subdir(raster + DEFS "-DGDAL_DYNAMIC=1;-DGDAL_LINK=1" + SOURCES ${raster_SRCS} + DEPENDS GDAL PROJ grass_gproj) + +if(CMAKE_SYSTEM_NAME MATCHES "Linux") + find_library(DL_LIBRARY dl) + mark_as_advanced(DL_LIBRARY) + target_link_libraries(grass_raster ${DL_LIBRARY}) +endif() + +configure_file(external/ccmath/ccmath.h + ${CMAKE_BINARY_DIR}/include/grass/ccmath_grass.h + COPYONLY) +build_library_in_subdir(external/ccmath) + +build_library_in_subdir(external/shapelib NAME grass_shape + HEADERS "shapefil.h") + +build_library_in_subdir(gmath + DEPENDS grass_ccmath grass_gis + DEFS "${use_math_DEFS}" + OPTIONAL_DEPENDS FFTW) + +build_library_in_subdir(linkm) + +file(GLOB pngdriver_SRCS "./pngdriver/*.c") +list(APPEND pngdriver_SRCS "./driver/init.c") +build_library_in_subdir(pngdriver + SOURCES ${pngdriver_SRCS} + DEPENDS grass_driver LIBPNG ZLIB + INCLUDES "./driver") + +file(GLOB psdriver_SRCS "./psdriver/*.c") +list(APPEND psdriver_SRCS "./driver/init.c") +build_library_in_subdir(psdriver + SOURCES ${psdriver_SRCS} + DEPENDS grass_driver + INCLUDES "./driver") + +file(GLOB htmldriver_SRCS "./htmldriver/*.c") +list(APPEND htmldriver_SRCS "./driver/init.c") +build_library_in_subdir(htmldriver + SOURCES ${htmldriver_SRCS} + DEPENDS grass_driver + INCLUDES "./driver") + +set(_grass_display_DEFS) + +set(_grass_display_DEPENDS + grass_driver grass_raster + grass_htmldriver grass_pngdriver grass_psdriver) + +if(WITH_CAIRO) + + set(_cairodriver_DEPENDS CAIRO FREETYPE grass_driver) + if(WITH_X11) + list(APPEND _cairodriver_DEPENDS X11) + endif() + + file(GLOB cairodriver_SRCS "./cairodriver/*.c") + list(APPEND cairodriver_SRCS "./driver/init.c") + build_library_in_subdir(cairodriver + DEPENDS ${_cairodriver_DEPENDS} + SOURCES ${cairodriver_SRCS}) + + 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) + +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}) + +add_subdirectory(db) + +add_subdirectory(fonts) + +add_subdirectory(vector) + +build_library_in_subdir(imagery DEPENDS GDAL GEOS grass_vector) + +build_library_in_subdir(cluster DEPENDS grass_imagery) + +build_library_in_subdir(rowio DEPENDS grass_gis) + +build_library_in_subdir(segment DEPENDS grass_gis) #addeed DEPENDS grass_gis for uninstd.h + +add_subdirectory(rst) + +build_library_in_subdir(lidar +DEPENDS GDAL GEOS grass_vector grass_raster grass_dbmibase grass_segment +HEADERS "lidar.h") + +build_library_in_subdir(raster3d DEPENDS grass_raster) + +build_program_in_subdir(raster3d/test + NAME test.raster3d.lib + DEPENDS grass_gis grass_raster3d grass_raster) + +build_library_in_subdir(gpde HEADERS "N_*.h" + DEPENDS grass_gis grass_raster3d grass_gmath) + +build_library_in_subdir(dspf DEPENDS grass_gis) + +build_library_in_subdir(symbol NAME grass_sym DEPENDS grass_raster) + +add_subdirectory(init) + +build_library_in_subdir(cdhc DEPENDS grass_raster) + +build_library_in_subdir(stats DEPENDS grass_raster) + +build_library_in_subdir(arraystats DEPENDS grass_gis) + +if(WITH_OPENGL) + build_library_in_subdir(ogsf + DEPENDS grass_raster grass_raster3d OPENGL TIFF) + + build_library_in_subdir(nviz + DEPENDS grass_display grass_raster grass_vector grass_bitmap OPENGL TIFF) +endif() + +add_subdirectory(temporal) + +if(WITH_PYTHON) + add_subdirectory(python) +endif() + +build_library_in_subdir(iostream SRC_REGEX "*.cpp" DEPENDS grass_gis) + +build_library_in_subdir(manage DEPENDS grass_raster grass_vector grass_raster3d ) +file(COPY manage/element_list DESTINATION ${GISBASE}/etc) +install(FILES ${GISBASE}/etc/element_list DESTINATION etc) + +build_library_in_subdir(calc +DEPENDS grass_raster) diff --git a/lib/cairodriver/graph.c b/lib/cairodriver/graph.c index 529cc65d347..db2fa62e45f 100644 --- a/lib/cairodriver/graph.c +++ b/lib/cairodriver/graph.c @@ -29,7 +29,7 @@ #endif #include -#ifndef __MINGW32__ +#ifndef _WIN32 #include #include #include @@ -389,7 +389,7 @@ static int ends_with(const char *string, const char *suffix) static void map_file(void) { -#ifndef __MINGW32__ +#ifndef _WIN32 size_t size = HEADER_SIZE + ca.width * ca.height * sizeof(unsigned int); void *ptr; int fd; diff --git a/lib/cairodriver/text.c b/lib/cairodriver/text.c index 49c8e80cd93..12f22172071 100644 --- a/lib/cairodriver/text.c +++ b/lib/cairodriver/text.c @@ -11,6 +11,9 @@ \author Lars Ahlzen (original contributor) \author Glynn Clements */ +#if defined(_MSC_VER) +#include +#endif #include #include "cairodriver.h" diff --git a/lib/calc/calc.c b/lib/calc/calc.c index 4894d4e14da..031a97150e5 100644 --- a/lib/calc/calc.c +++ b/lib/calc/calc.c @@ -20,7 +20,7 @@ static void handle_fpe(int n UNUSED) void pre_exec(void) { -#ifndef __MINGW32__ +#ifndef _WIN32 #ifdef SIGFPE struct sigaction act; @@ -37,7 +37,7 @@ void pre_exec(void) void post_exec(void) { -#ifndef __MINGW32__ +#ifndef _WIN32 #ifdef SIGFPE struct sigaction act; diff --git a/lib/db/CMakeLists.txt b/lib/db/CMakeLists.txt new file mode 100644 index 00000000000..2796781e8e7 --- /dev/null +++ b/lib/db/CMakeLists.txt @@ -0,0 +1,28 @@ + +file(GLOB dbmibase_SRCS "./dbmi_base/*.c") +if(MSVC) + set(dbmibase_INCLUDES "./dbmi_base" "./dbmi_base/msvc") + list(APPEND dbmibase_SRCS "./dbmi_base/msvc/dirent.c") +endif() + +build_library_in_subdir(dbmi_base NAME grass_dbmibase + INCLUDES ${dbmibase_INCLUDES} + SOURCES ${dbmibase_SRCS} + DEPENDS grass_gis + HEADERS "dbstubs.h") + +build_library_in_subdir(dbmi_client NAME grass_dbmiclient + DEPENDS grass_dbmibase + INCLUDES "./dbmi_base" + ) + +build_library_in_subdir(stubs NAME grass_dstubs + DEPENDS grass_dbmibase + ) + +build_library_in_subdir(dbmi_driver NAME grass_dbmidriver + DEPENDS grass_dstubs + INCLUDES "./dbmi_base" + ) + +add_subdirectory(sqlp) diff --git a/lib/db/dbmi_base/dbmscap.c b/lib/db/dbmi_base/dbmscap.c index 25f1e0a1eec..51aa438c653 100644 --- a/lib/db/dbmi_base/dbmscap.c +++ b/lib/db/dbmi_base/dbmscap.c @@ -156,7 +156,7 @@ dbDbmscap *db_read_dbmscap(void) /* START OF NEW CODE FOR SEARCH IN $(GISBASE)/driver/db/ */ /* opend db drivers directory */ -#ifdef __MINGW32__ +#ifdef _WIN32 dirpath = G_malloc(strlen("\\driver\\db\\") + strlen(G_gisbase()) + 1); sprintf(dirpath, "%s\\driver\\db\\", G_gisbase()); G_convert_dirseps_to_host(dirpath); @@ -179,7 +179,7 @@ dbDbmscap *db_read_dbmscap(void) if ((strcmp(ent->d_name, ".") == 0) || (strcmp(ent->d_name, "..") == 0)) continue; -#ifdef __MINGW32__ +#ifdef _WIN32 /* skip manifest files on Windows */ if (strstr(ent->d_name, ".manifest")) continue; @@ -188,9 +188,9 @@ dbDbmscap *db_read_dbmscap(void) /* Remove '.exe' from name (windows extension) */ name = G_str_replace(ent->d_name, ".exe", ""); -#ifdef __MINGW32__ - dirpath = G_malloc(strlen("\\driver\\db\\") + strlen(G_gisbase()) + - strlen(ent->d_name) + 1); +#ifdef _WIN32 + dirpath = G_malloc(strlen("\\driver\\db\\") + + strlen(G_gisbase()) + strlen(ent->d_name) + 1); sprintf(dirpath, "%s\\driver\\db\\%s", G_gisbase(), ent->d_name); G_convert_dirseps_to_host(dirpath); #else diff --git a/lib/db/dbmi_base/dirent.c b/lib/db/dbmi_base/dirent.c index 1823ba64726..708795bd4da 100644 --- a/lib/db/dbmi_base/dirent.c +++ b/lib/db/dbmi_base/dirent.c @@ -22,6 +22,7 @@ /* NOTE: these should come from or from */ #ifndef R_OK +#if !defined(HAVE_UNISTD_H) #define R_OK 4 #endif #ifndef W_OK @@ -30,6 +31,7 @@ #ifndef X_OK #define X_OK 1 #endif +#endif static int cmp_dirent(const void *, const void *); static int get_perm(char *); diff --git a/lib/db/dbmi_base/login.c b/lib/db/dbmi_base/login.c index 9c865233d2c..fd8a00d43d8 100644 --- a/lib/db/dbmi_base/login.c +++ b/lib/db/dbmi_base/login.c @@ -167,8 +167,9 @@ static int write_file(LOGIN *login) /* fchmod is not available on Windows */ /* fchmod ( fileno(fd), S_IRUSR | S_IWUSR ); */ + #ifndef _MSC_VER chmod(file, S_IRUSR | S_IWUSR); - + #endif for (i = 0; i < login->n; i++) { fprintf(fd, "%s|%s", login->data[i].driver, login->data[i].database); if (login->data[i].user) { diff --git a/lib/db/dbmi_base/msvc/dirent.c b/lib/db/dbmi_base/msvc/dirent.c new file mode 100644 index 00000000000..a5466566ecc --- /dev/null +++ b/lib/db/dbmi_base/msvc/dirent.c @@ -0,0 +1,113 @@ + +#include +#include +#include + +typedef ptrdiff_t handle_type; /* C99's intptr_t not sufficiently portable */ + +struct DIR +{ + handle_type handle; /* -1 for failed rewind */ + struct _finddata_t info; + struct dirent result; /* d_name null iff first time */ + char* name; /* null-terminated char string */ +}; + +DIR* opendir(const char* name) +{ + DIR* dir = 0; + + if (name && name[0]) + { + size_t base_length = strlen(name); + const char* all = /* search pattern must end with suitable wildcard */ + strchr("/\\", name[base_length - 1]) ? "*" : "/*"; + + if ((dir = (DIR*)malloc(sizeof * dir)) != 0 && + (dir->name = (char*)malloc(base_length + strlen(all) + 1)) != 0) + { + strcat(strcpy(dir->name, name), all); + + if ((dir->handle = + (handle_type)_findfirst(dir->name, &dir->info)) != -1) + { + dir->result.d_name = 0; + } + else /* rollback */ + { + free(dir->name); + free(dir); + dir = 0; + } + } + else /* rollback */ + { + free(dir); + dir = 0; + errno = ENOMEM; + } + } + else + { + errno = EINVAL; + } + + return dir; +} + +int closedir(DIR* dir) +{ + int result = -1; + + if (dir) + { + if (dir->handle != -1) + { + result = _findclose(dir->handle); + } + + free(dir->name); + free(dir); + } + + if (result == -1) /* map all errors to EBADF */ + { + errno = EBADF; + } + + return result; +} + +struct dirent* readdir(DIR* dir) +{ + struct dirent* result = 0; + + if (dir && dir->handle != -1) + { + if (!dir->result.d_name || _findnext(dir->handle, &dir->info) != -1) + { + result = &dir->result; + result->d_name = dir->info.name; + } + } + else + { + errno = EBADF; + } + + return result; +} + +void rewinddir(DIR* dir) +{ + if (dir && dir->handle != -1) + { + _findclose(dir->handle); + dir->handle = (handle_type)_findfirst(dir->name, &dir->info); + dir->result.d_name = 0; + } + else + { + errno = EBADF; + } +} diff --git a/lib/db/dbmi_base/msvc/dirent.h b/lib/db/dbmi_base/msvc/dirent.h new file mode 100644 index 00000000000..a02a0d828a7 --- /dev/null +++ b/lib/db/dbmi_base/msvc/dirent.h @@ -0,0 +1,50 @@ +#ifndef DIRENT_INCLUDED +#define DIRENT_INCLUDED + +/* + + Declaration of POSIX directory browsing functions and types for Win32. + + Author: Kevlin Henney (kevlin@acm.org, kevlin@curbralan.com) + History: Created March 1997. Updated June 2003. + Rights: See end of file. + +*/ + +#ifdef __cplusplus +extern "C" +{ +#endif + +typedef struct DIR DIR; + +struct dirent +{ + char *d_name; +}; + +DIR *opendir(const char *); +int closedir(DIR *); +struct dirent *readdir(DIR *); +void rewinddir(DIR *); + +/* + + Copyright Kevlin Henney, 1997, 2003. All rights reserved. + + Permission to use, copy, modify, and distribute this software and its + documentation for any purpose is hereby granted without fee, provided + that this copyright and permissions notice appear in all copies and + derivatives. + + This software is supplied "as is" without express or implied warranty. + + But that said, if there are any problems please get in touch. + +*/ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/lib/db/dbmi_client/start.c b/lib/db/dbmi_client/start.c index bc801685593..9017f31d4cc 100644 --- a/lib/db/dbmi_client/start.c +++ b/lib/db/dbmi_client/start.c @@ -16,7 +16,7 @@ #include #include -#ifdef __MINGW32__ +#ifdef _WIN32 #include #include #include @@ -30,7 +30,7 @@ static void close_on_exec(int fd) { -#ifndef __MINGW32__ +#ifndef _WIN32 int flags = fcntl(fd, F_GETFD); fcntl(fd, F_SETFD, flags | FD_CLOEXEC); @@ -136,7 +136,7 @@ dbDriver *db_start_driver(const char *name) /* run the driver as a child process and create pipes to its stdin, stdout */ -#ifdef __MINGW32__ +#ifdef _WIN32 #define pipe(fds) _pipe(fds, 250000, _O_BINARY | _O_NOINHERIT) #endif diff --git a/lib/db/sqlp/CMakeLists.txt b/lib/db/sqlp/CMakeLists.txt new file mode 100644 index 00000000000..9fe5ca0f183 --- /dev/null +++ b/lib/db/sqlp/CMakeLists.txt @@ -0,0 +1,17 @@ + +FLEX_TARGET(sqlp.yy.c sqlp.l ${CMAKE_CURRENT_BINARY_DIR}/sqlp.yy.c) + +BISON_TARGET(sqlp.tab.c sqlp.y ${CMAKE_CURRENT_BINARY_DIR}/sqlp.tab.c ) + +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 + ) + +build_module(NAME grass_sqlp SOURCES "${sqlp_SRCS}" ) diff --git a/lib/dspf/viz.h b/lib/dspf/viz.h index 92abb658908..8fc8b6cf819 100644 --- a/lib/dspf/viz.h +++ b/lib/dspf/viz.h @@ -90,5 +90,9 @@ int print_head_info(file_info *); /* struct_copy.c */ int struct_copy(char *, char *, int); - -extern CELL_ENTRY cell_table[]; +#ifdef GRASS_CMAKE_BUILD +#include +#else +#define GRASS_DSPF_EXPORT +#endif +extern GRASS_DSPF_EXPORT CELL_ENTRY cell_table[]; diff --git a/lib/external/ccmath/ccmath.h b/lib/external/ccmath/ccmath.h index 5774271c2d9..74aac8634f3 100644 --- a/lib/external/ccmath/ccmath.h +++ b/lib/external/ccmath/ccmath.h @@ -32,13 +32,22 @@ #define NULL ((void *)0 #endif -/* Complex Types */ - + /* Complex Types */ #ifndef CPX -struct complex { +#ifndef _MSC_VER +struct complex +{ double re, im; }; typedef struct complex Cpx; +#else +/* _MSVC has complex struct and cannot be used */ +struct gcomplex +{ + double re, im; +}; +typedef struct gcomplex Cpx; +#endif /* _MSC_VER */ #define CPX 1 #endif diff --git a/lib/fonts/CMakeLists.txt b/lib/fonts/CMakeLists.txt new file mode 100644 index 00000000000..f9bf1abc130 --- /dev/null +++ b/lib/fonts/CMakeLists.txt @@ -0,0 +1 @@ +#TODO diff --git a/lib/gis/CMakeLists.txt b/lib/gis/CMakeLists.txt new file mode 100644 index 00000000000..22ae1df8fb9 --- /dev/null +++ b/lib/gis/CMakeLists.txt @@ -0,0 +1,68 @@ +set(gislib_SRCS + adj_cellhd.c + copy_dir.c + get_ellipse.c ll_scan.c open_misc.c proj3.c units.c + alloc.c copy_file.c get_projinfo.c locale.c overwrite.c put_window.c user_config.c + area.c counter.c get_window.c location.c pager.c putenv.c verbose.c + area_ellipse.c date.c getl.c lrand48.c parser.c radii.c view.c + area_poly1.c datum.c gisbase.c ls.c parser_dependencies.c rd_cellhd.c whoami.c + area_poly2.c debug.c gisdbase.c ls_filter.c parser_help.c remove.c win32_pipes.c + area_sphere.c distance.c gisinit.c lz4.c parser_html.c rename.c wind_2_box.c + ascii_chk.c done_msg.c handler.c mach_name.c parser_interface.c rhumbline.c wind_format.c + asprintf.c endian.c home.c make_loc.c parser_rest.c rotate.c wind_in.c + basename.c env.c ilist.c make_mapset.c parser_script.c seek.c wind_limits.c + bres_line.c error.c intersect.c mapcase.c parser_standard_options.c set_window.c wind_overlap.c + clicker.c file_name.c is.c mapset.c parser_wps.c short_way.c wind_scan.c + cmprbzip.c find_etc.c key_value1.c mapset_msc.c paths.c sleep.c window_map.c + cmprlz4.c find_file.c key_value2.c mapset_nme.c percent.c snprintf.c worker.c + cmprrle.c find_rast.c key_value3.c mkstemp.c plot.c spawn.c wr_cellhd.c + cmprzlib.c find_rast3d.c key_value4.c myname.c pole_in_poly.c strings.c writ_zeros.c + color_rules.c find_vect.c legal_name.c named_colr.c popen.c tempfile.c xdr.c + color_str.c compress.c line_dist.c nl_to_spaces.c progrm_nme.c timestamp.c zero.c + commas.c geodesic.c list.c nme_in_mps.c proj1.c token.c zone.c + geodist.c ll_format.c open.c proj2.c trim_dec.c parser_json.c cmprzstd.c + compress.c band_reference.c + ) + +if(MINGW) + list(APPEND gislib_SRCS "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") +endif() + +build_module(NAME grass_gis SOURCES "${gislib_SRCS}" + DEPENDS grass_datetime ZLIB + OPTIONAL_DEPENDS PTHREAD BZIP2 ICONV POSTGRES + DEFS "${grass_gis_DEFS}" + ) + +add_custom_command(TARGET grass_gis POST_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/etc/proj + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/colors ${GISBASE}/etc/colors/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/ellipse.table ${GISBASE}/etc/proj/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/datum.table ${GISBASE}/etc/proj/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/datumtransform.table ${GISBASE}/etc/proj/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/FIPS.code ${GISBASE}/etc/proj/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/state27 ${GISBASE}/etc/proj/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/state83 ${GISBASE}/etc/proj/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/projections ${GISBASE}/etc/proj/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/ellipse.table.solar.system ${GISBASE}/etc/proj/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/colors.desc ${GISBASE}/etc/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/renamed_options ${GISBASE}/etc/ + ) + install(DIRECTORY colors DESTINATION etc/colors) + install(FILES ellipse.table ellipse.table.solar.system + datum.table datumtransform.table + FIPS.code state27 state83 projections DESTINATION etc/proj) + install(FILES colors.desc renamed_options DESTINATION etc) + +if(UNIX) + target_link_libraries(grass_gis LIBM) +endif() + +if(MSVC) +target_link_libraries(grass_gis PCRE) +endif() diff --git a/lib/gis/gisinit.c b/lib/gis/gisinit.c index 8a7d04f0093..04bf7e354c6 100644 --- a/lib/gis/gisinit.c +++ b/lib/gis/gisinit.c @@ -26,9 +26,25 @@ #include "G.h" #include "gis_local_proto.h" +#ifdef GRASS_CMAKE_BUILD +#include +#else +#define GRASS_GIS_EXPORT +#endif struct G__ G__; -static int initialized = 0; /** Is set when engine is initialized */ +/** initialized is set to 1 when engine is initialized */ +/* GRASS_GIS_EXPORT static int initialized on windows msvc throws below error. +"Error C2201 'initialized': must have external linkage in order to be exported/imported" +So we do an ifndef on msvc. without GRASS_GIS_EXPORT it will be exported in DLL. +*/ +#ifndef _MSC_VER +static int initialized = 0; +#else +GRASS_GIS_EXPORT int initialized; +#endif + + static int gisinit(void); /*! diff --git a/lib/gis/ls_filter.c b/lib/gis/ls_filter.c index 30d98490567..98ff19437cf 100644 --- a/lib/gis/ls_filter.c +++ b/lib/gis/ls_filter.c @@ -13,10 +13,13 @@ #include #include - #ifdef HAVE_REGEX_H - #include +#endif + +#ifdef HAVE_PCRE_H +#include +#endif struct buffer { char *buf; @@ -143,14 +146,41 @@ static int wc2regex(struct buffer *buf, const char *pat) static int re_filter(const char *filename, void *closure) { +#ifdef HAVE_REGEX_H regex_t *regex = closure; return filename[0] != '.' && regexec(regex, filename, 0, NULL, 0) == 0; +#endif +#ifdef HAVE_PCRE_H + const char *pcreErrorStr; + pcre_extra *pcreExtra; + int pcreExecRet; + pcre *pcre_regex = closure; + + /* Optimize the regex */ + pcreExtra = pcre_study(pcre_regex, 0, &pcreErrorStr); + pcreExecRet = pcre_exec(pcre_regex, pcreExtra, filename, strlen(filename), /* length of string */ + 0, /* Start looking at this point */ + 0, /* OPTIONS */ + NULL, 0); /* Length of subStrVec */ + + /* Optimize the regex */ + pcreExtra = pcre_study(pcre_regex, 0, &pcreErrorStr); + pcreExecRet = pcre_exec(pcre_regex, pcreExtra, filename, strlen(filename), /* length of string */ + 0, /* Start looking at this point */ + 0, /* OPTIONS */ + NULL, 0); /* Length of subStrVec */ + + return filename[0] != '.' && pcreExecRet == 0; +#endif + + } void *G_ls_regex_filter(const char *pat, int exclude, int extended, int ignorecase) { +#ifdef HAVE_REGEX_H regex_t *regex = G_malloc(sizeof(regex_t)); if (regcomp(regex, pat, @@ -166,12 +196,58 @@ void *G_ls_regex_filter(const char *pat, int exclude, int extended, G_set_ls_filter(re_filter, regex); return regex; +#endif + +#ifdef HAVE_PCRE_H + pcre *pcre_regex; + const char *pcreErrorStr; + int pcreErrorOffset; + + /* First, the regex string must be compiled */ + pcre_regex = pcre_compile(pat, 0, &pcreErrorStr, &pcreErrorOffset, NULL); + /* + if (regcomp(regex, pat, REG_NOSUB | + (extended ? REG_EXTENDED : 0) | + (ignorecase ? REG_ICASE : 0)) != 0) { + pcre_free(pcre_regex); + return NULL; + } + */ + if (exclude) + G_set_ls_exclude_filter(re_filter, pcre_regex); + else + G_set_ls_filter(re_filter, pcre_regex); + + /* First, the regex string must be compiled */ + pcre_regex = pcre_compile(pat, 0, &pcreErrorStr, &pcreErrorOffset, NULL); + /* + if (regcomp(regex, pat, REG_NOSUB | + (extended ? REG_EXTENDED : 0) | + (ignorecase ? REG_ICASE : 0)) != 0) { + pcre_free(pcre_regex); + return NULL; + } + */ + if (exclude) + G_set_ls_exclude_filter(re_filter, pcre_regex); + else + G_set_ls_filter(re_filter, pcre_regex); + + return pcre_regex; +#endif + } void *G_ls_glob_filter(const char *pat, int exclude, int ignorecase) { struct buffer buf; + +#ifdef HAVE_REGEX_H regex_t *regex; +#endif +#ifdef HAVE_PCRE_H + pcre *pcre_regex; +#endif init(&buf); @@ -179,21 +255,36 @@ void *G_ls_glob_filter(const char *pat, int exclude, int ignorecase) fini(&buf); return NULL; } - +#ifdef HAVE_REGEX_H regex = G_ls_regex_filter(buf.buf, exclude, 1, ignorecase); +#endif +#ifdef HAVE_PCRE_H + pcre_regex = G_ls_regex_filter(buf.buf, exclude, 1, ignorecase); +#endif fini(&buf); +#ifdef HAVE_REGEX_H return regex; +#endif +#ifdef HAVE_PCRE_H + return pcre_regex; +#endif + + } void G_free_ls_filter(void *regex) { if (!regex) return; - +#ifdef HAVE_REGEX_H regfree(regex); +#endif +#ifdef HAVE_PCRE_H + pcre_free(regex); +#endif + G_free(regex); -} -#endif +} diff --git a/lib/gis/mapset_msc.c b/lib/gis/mapset_msc.c index 8553ff3807d..2d3351a1393 100644 --- a/lib/gis/mapset_msc.c +++ b/lib/gis/mapset_msc.c @@ -264,7 +264,7 @@ int G__make_mapset_element_misc(const char *dir, const char *name) static int check_owner(const struct stat *info) { -#if defined(__MINGW32__) || defined(SKIP_MAPSET_OWN_CHK) +#if defined(_WIN32) || defined(SKIP_MAPSET_OWN_CHK) return 1; #else const char *check = getenv("GRASS_SKIP_MAPSET_OWNER_CHECK"); diff --git a/lib/gis/parser_interface.c b/lib/gis/parser_interface.c index d2c35fc96ab..d782bc97b14 100644 --- a/lib/gis/parser_interface.c +++ b/lib/gis/parser_interface.c @@ -114,9 +114,10 @@ void G__usage_xml(void) /* gettext converts strings to encoding returned by nl_langinfo(CODESET) */ +/* check if local_charset() comes from iconv. If so check for iconv library before using it */ #if defined(HAVE_LANGINFO_H) encoding = nl_langinfo(CODESET); -#elif defined(__MINGW32__) && defined(USE_NLS) +#elif defined(_WIN32) && defined(USE_NLS) encoding = locale_charset(); #endif diff --git a/lib/gis/paths.c b/lib/gis/paths.c index a2573762529..047b8d960e9 100644 --- a/lib/gis/paths.c +++ b/lib/gis/paths.c @@ -3,7 +3,7 @@ #include #include -#ifndef __MINGW32__ +#ifndef _WIN32 #include #else #include @@ -26,7 +26,7 @@ int G_mkdir(const char *path) { -#ifdef __MINGW32__ +#ifdef _WIN32 return mkdir(path); #else return mkdir(path, 0777); @@ -62,7 +62,7 @@ int G_is_dirsep(char c) int G_is_absolute_path(const char *path) { if (G_is_dirsep(path[0]) -#ifdef __MINGW32__ +#ifdef _WIN32 || (isalpha(path[0]) && (path[1] == ':') && G_is_dirsep(path[2])) #endif ) @@ -144,7 +144,7 @@ int G_stat(const char *file_name, struct stat *buf) int G_lstat(const char *file_name, struct stat *buf) { -#ifdef __MINGW32__ +#ifdef _WIN32 return stat(file_name, buf); #else return lstat(file_name, buf); @@ -164,7 +164,7 @@ int G_lstat(const char *file_name, struct stat *buf) int G_owner(const char *path) { -#ifndef __MINGW32__ +#ifndef _WIN32 struct stat info; G_stat(path, &info); diff --git a/lib/gis/popen.c b/lib/gis/popen.c index f3e4a2629cf..6b5c9fd07b6 100644 --- a/lib/gis/popen.c +++ b/lib/gis/popen.c @@ -6,7 +6,7 @@ #include #include -#ifdef __MINGW32__ +#ifdef _WIN32 #include #include #define pipe(fds) _pipe(fds, 4096, O_BINARY | O_NOINHERIT) diff --git a/lib/gis/sleep.c b/lib/gis/sleep.c index 1a5e2a07ae0..2f3bdce969c 100644 --- a/lib/gis/sleep.c +++ b/lib/gis/sleep.c @@ -1,8 +1,8 @@ #include -#ifndef __MINGW32__ +#ifndef _WIN32 #include #endif -#ifdef __MINGW32__ +#ifdef _WIN32 #include #endif #include @@ -10,7 +10,7 @@ /* Sleep */ void G_sleep(unsigned int seconds) { -#ifdef __MINGW32__ +#ifdef _WIN32 /* note: Sleep() cannot be interrupted */ Sleep((seconds) * 1000); #else diff --git a/lib/gis/spawn.c b/lib/gis/spawn.c index d6b5ec72896..2642f4020ab 100644 --- a/lib/gis/spawn.c +++ b/lib/gis/spawn.c @@ -23,7 +23,7 @@ #include #include -#ifndef __MINGW32__ +#ifndef _WIN32 #include #else #include @@ -68,7 +68,7 @@ struct signal { int action; int signum; int valid; -#ifndef __MINGW32__ +#ifndef _WIN32 struct sigaction old_act; sigset_t old_mask; #endif @@ -95,7 +95,7 @@ struct spawn { static void parse_arglist(struct spawn *sp, va_list va); static void parse_argvec(struct spawn *sp, const char **va); -#ifdef __MINGW32__ +#ifdef _WIN32 struct buffer { char *str; @@ -935,11 +935,11 @@ int G_spawn(const char *command, ...) va_end(va); - status = - G_spawn_ex(command, -#ifndef __MINGW32__ - SF_SIGNAL, SST_PRE, SSA_IGNORE, SIGINT, SF_SIGNAL, SST_PRE, - SSA_IGNORE, SIGQUIT, SF_SIGNAL, SST_PRE, SSA_BLOCK, SIGCHLD, + status = G_spawn_ex(command, +#ifndef _WIN32 + SF_SIGNAL, SST_PRE, SSA_IGNORE, SIGINT, + SF_SIGNAL, SST_PRE, SSA_IGNORE, SIGQUIT, + SF_SIGNAL, SST_PRE, SSA_BLOCK, SIGCHLD, #endif SF_ARGVEC, args, NULL); @@ -948,7 +948,7 @@ int G_spawn(const char *command, ...) int G_wait(int i_pid) { -#ifdef __MINGW32__ +#ifdef _WIN32 DWORD rights = PROCESS_QUERY_INFORMATION | SYNCHRONIZE; HANDLE hProcess = OpenProcess(rights, FALSE, (DWORD)i_pid); DWORD exitcode; diff --git a/lib/gis/user_config.c b/lib/gis/user_config.c index b2bba835c39..b9edce74490 100644 --- a/lib/gis/user_config.c +++ b/lib/gis/user_config.c @@ -30,9 +30,7 @@ #include #include #include -#include -#include -#ifndef __MINGW32__ +#ifndef _WIN32 #include #endif #include @@ -46,7 +44,7 @@ * path [caller must G_free ()] on success, or NULL on failure *************************************************************************/ -#ifndef __MINGW32__ /* TODO */ +#ifndef _WIN32 /* TODO */ static char *_make_toplevel(void) { size_t len; diff --git a/lib/gis/whoami.c b/lib/gis/whoami.c index d978326b588..4daa35115cc 100644 --- a/lib/gis/whoami.c +++ b/lib/gis/whoami.c @@ -10,11 +10,10 @@ * * \author Original author CERL */ - #include #include -#ifndef __MINGW32__ +#ifndef _WIN32 #include #endif @@ -40,7 +39,7 @@ const char *G_whoami(void) if (G_is_initialized(&initialized)) return name; -#ifdef __MINGW32__ +#ifdef _WIN32 name = getenv("USERNAME"); #endif if (!name || !*name) @@ -49,7 +48,7 @@ const char *G_whoami(void) if (!name || !*name) name = getenv("USER"); -#ifndef __MINGW32__ +#ifndef _WIN32 if (!name || !*name) { struct passwd *p = getpwuid(getuid()); diff --git a/lib/imagery/iscatt_core.c b/lib/imagery/iscatt_core.c index 05ce619eef8..8a3da41d15d 100644 --- a/lib/imagery/iscatt_core.c +++ b/lib/imagery/iscatt_core.c @@ -697,7 +697,6 @@ int I_compute_scatts(struct Cell_head *region, struct scCats *scatt_conds, struct rast_row *bands_rows = G_malloc(n_bands * sizeof(struct rast_row)); RASTER_MAP_TYPE data_type; - int nrows, i_band, n_a_bands, band_id; int i_row, head_nchars, i_cat, id_cat; diff --git a/lib/init/CMakeLists.txt b/lib/init/CMakeLists.txt new file mode 100644 index 00000000000..70b38b62d4b --- /dev/null +++ b/lib/init/CMakeLists.txt @@ -0,0 +1,171 @@ + +# #for i18N support + +file(GLOB init_HTMLFILES "*.html") + +#START_UP is the variable used in grass.py, grass.sh.in and grass.bat.in +set(START_UP "grass${GRASS_VERSION_MAJOR}${GRASS_VERSION_MINOR}.py") +if(WIN32) +set(script_file_name "grass.bat") +else() +set(script_file_name "grass.sh") +endif() + +file(TO_NATIVE_PATH ${CMAKE_BINARY_DIR}/bin BINARY_DIR) + +set(CONFIG_PROJSHARE) +get_filename_component(PROJ_INSTALL_PREFIX ${PROJ_INCLUDE_DIR} PATH) +if(DEFINED ENV{PROJSHARE}) + message(WARNING "External PROJ.4 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.4 directory ${CONFIG_PROJSHARE}") + endif() +endif() +file(TO_NATIVE_PATH "${PROJ_INSTALL_PREFIX}/share/proj" PROJ_LIB) +file(TO_NATIVE_PATH ${CONFIG_PROJSHARE} GRASS_PROJSHARE) + +find_path(gdal_share_dir "gdal" PATH_SUFFIXES share) +if(NOT gdal_share_dir) + message(FATAL_ERROR "Cannot find share/gdal") +endif() +mark_as_advanced(gdal_share_dir) + +file(TO_NATIVE_PATH "${gdal_share_dir}/gdal" GDAL_DATA) + +if(MSVC) + find_path(geotiff_share_dir "epsg_csv" PATH_SUFFIXES share) + mark_as_advanced(geotiff_share_dir) + if(geotiff_share_dir) + file(TO_NATIVE_PATH "${geotiff_share_dir}/epsg_csv" GEOTIFF_CSV) + else() + message(FATAL_ERROR "Cannot find share/epsg_csv.") + endif() +endif() #MSVC + +get_filename_component(GDAL_DIR ${GDAL_LIBRARY} PATH) +get_filename_component(GDAL_DIR ${GDAL_DIR} PATH) + +file(TO_NATIVE_PATH ${GDAL_DIR}/bin DEPS_DLL_PATH) +list(APPEND DLL_PATH_LIST ${DEPS_DLL_PATH}) + +file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} GRASS_PYTHON) + +# For install tree (first do install tree) +if(UNIX OR MINGW) + if( DEFINED ENV{LD_LIBRARY_PATH}) + set(LD_LIBRARY_PATH_VAR "${CMAKE_INSTALL_PREFIX}/lib:$ENV{LD_LIBRARY_PATH}") + else() + set(LD_LIBRARY_PATH_VAR "${CMAKE_INSTALL_PREFIX}/lib") + endif() +endif() + +if(WIN32) + set(app_data_dir $ENV{APPDATA}) + if(NOT EXISTS ${app_data_dir}) + # this can happen with some strange settings + message(FATAL_ERROR "The APPDATA variable is not set, ask your operating system support") + endif() + file(TO_NATIVE_PATH "${app_data_dir}/GRASS7" grass_config_dir) +else() + set(grass_config_dir "$ENV{HOME}/.grass7") +endif() + +file(TO_NATIVE_PATH "${CMAKE_INSTALL_PREFIX}" gisbase_init_dir) +message(STATUS "GISBASE (install) : ${gisbase_init_dir}") +message(STATUS "grass config directory (install): ${grass_config_dir}") + +#configure and install env.sh +if(NOT MSVC) + configure_file(env.sh ${CMAKE_CURRENT_BINARY_DIR}/bashrc @ONLY) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/bashrc + DESTINATION ${grass_config_dir}) +endif() + +#configure and install grass.py +configure_file(grass.py ${CMAKE_CURRENT_BINARY_DIR}/etc/${START_UP} @ONLY) +install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/etc/${START_UP} DESTINATION etc) + +#configure and install grass wrapper script (grass.bat or grass.sh +configure_file(${script_file_name}.in ${CMAKE_CURRENT_BINARY_DIR}/${script_file_name} @ONLY) +install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${script_file_name} DESTINATION bin) + + +# For build tree +file(TO_NATIVE_PATH ${GISBASE} gisbase_init_dir) +file(TO_NATIVE_PATH "${GISBASE}/etc/config" grass_config_dir) +configure_file(${script_file_name}.in ${GISBASE}/${script_file_name} @ONLY) +file(COPY ${CMAKE_SOURCE_DIR}/demolocation/PERMANENT DESTINATION ${GISBASE}/demolocation/) + +configure_file(${CMAKE_SOURCE_DIR}/demolocation/grassrc.cmake.in +"${grass_config_dir}/rc" @ONLY) + +file(TO_NATIVE_PATH ${GISBASE}/bin grass_dll_dir) +set(DLL_PATH_LIST) +list(APPEND DLL_PATH_LIST ${grass_dll_dir}) +separate_arguments(DLL_PATH_LIST) + +set(LD_LIBRARY_PATH_VAR) +if(UNIX OR MINGW) + if( DEFINED ENV{LD_LIBRARY_PATH}) + set(LD_LIBRARY_PATH_VAR "${GISBASE}/lib:$ENV{LD_LIBRARY_PATH}") + else() + set(LD_LIBRARY_PATH_VAR "${GISBASE}/lib") + endif() +endif() +message(STATUS "GISBASE (build) : ${gisbase_init_dir}") +message(STATUS "grass config directory (build): ${grass_config_dir}") +if(NOT MSVC) + configure_file(env.sh ${grass_config_dir}/bashrc @ONLY) + message(STATUS "env variables: ${GISBASE}/etc/config/bashrc") +endif() + +configure_file(grass.py ${GISBASE}/etc/${START_UP} @ONLY) +message(STATUS "Startup (build): ${GISBASE}/${script_file_name}") +message(STATUS "gisrc (build): ${GISBASE}/etc/config/rc") + +#finish installtree and buildtree configurations + + +build_program(NAME echo + SOURCES echo.c + PACKAGE "grasslibs" + RUNTIME_OUTPUT_DIR etc) + +build_program(NAME run + SOURCES run.c + PACKAGE "grasslibs" + RUNTIME_OUTPUT_DIR etc) + +build_program(NAME clean_temp + SOURCES clean_temp.c + DEPENDS grass_gis + PACKAGE "grasslibs" + RUNTIME_OUTPUT_DIR etc) + +build_program(NAME lock + SOURCES lock.c + DEPENDS grass_gis grass_datetime + PACKAGE "grasslibs" + RUNTIME_OUTPUT_DIR etc) + +if(MINGW) +build_program(NAME winlocale + SOURCES winlocale.c + RUNTIME_OUTPUT_DIR etc) +endif() + +set(VERSIONNUMBER_CONTENTS "${GRASS_VERSION_NUMBER}") +if(GRASS_VERSION_GIT) + list(APPEND VERSIONNUMBER_CONTENTS "${VERSIONNUMBER_CONTENTS} ${GRASS_VERSION_GIT}") +endif() + +file(WRITE ${CMAKE_BINARY_DIR}/gisbase/etc/VERSIONNUMBER "${VERSIONNUMBER_CONTENTS}") +install(FILES ${CMAKE_BINARY_DIR}/gisbase/etc/VERSIONNUMBER DESTINATION etc) + +configure_file(license.txt.in ${CMAKE_BINARY_DIR}/gisbase/etc/license) + +install(FILES ${CMAKE_BINARY_DIR}/gisbase/etc/VERSIONNUMBER DESTINATION etc) +install(FILES ${CMAKE_BINARY_DIR}/gisbase/etc/license DESTINATION etc) diff --git a/lib/init/clean_temp.c b/lib/init/clean_temp.c index b1edaaed6fe..29f9da173e6 100644 --- a/lib/init/clean_temp.c +++ b/lib/init/clean_temp.c @@ -36,7 +36,6 @@ #define SLEEP 30 /* 30 seconds */ /* Recursively scan the directory pathname, removing directory and files */ - void clean_dir(const char *pathname, uid_t uid, pid_t pid, time_t now, int max_age) { @@ -140,7 +139,7 @@ int main(int argc, char *argv[]) G_file_name(tmppath, element, "", mapset = G_mapset()); /* get user id and current time in seconds */ -#ifdef __MINGW32__ +#ifdef _WIN32 /* TODO */ uid = -1; #else @@ -172,7 +171,7 @@ int main(int argc, char *argv[]) int find_process(int pid) { -#ifdef __MINGW32__ +#ifdef _WIN32 /* TODO */ return -1; #else diff --git a/lib/init/env.sh b/lib/init/env.sh new file mode 100644 index 00000000000..95eff198af5 --- /dev/null +++ b/lib/init/env.sh @@ -0,0 +1,10 @@ +export GRASS_PROJSHARE=@GRASS_PROJSHARE@ +export PROJ_LIB=@PROJ_LIB@ +export GDAL_DATA=@GDAL_DATA@ +export GISBASE=@gisbase_init_dir@ +export GRASS_PYTHON=@GRASS_PYTHON@ +export GRASS_CONFIG_DIR=@grass_config_dir@ + +# export PYTHONHOME=$gisbase_init_dir\Python37 +# export FONTCONFIG_FILE=@gisbase_init_dir@\etc\fonts.conf +# export LD_LIBRARY_PATH=@DLL_PATH_LIST@:PATH% diff --git a/lib/init/grass.bat.in b/lib/init/grass.bat.in new file mode 100644 index 00000000000..cb95984ee55 --- /dev/null +++ b/lib/init/grass.bat.in @@ -0,0 +1,29 @@ +@echo off +::set PYTHONHOME=%GISBASE%\Python37 + +set GRASS_PROJSHARE=@GRASS_PROJSHARE@ + +set PROJ_LIB=@PROJ_LIB@ + +set GDAL_DATA=@GDAL_DATA@ + +set GEOTIFF_CSV=@GEOTIFF_CSV@ + +::set FONTCONFIG_FILE=%GISBASE%\etc\fonts.conf + +set PATH=@gisbase_init_dir@\bin;@BINARY_DIR@;@DLL_PATH_LIST@;%PATH% + +set GISBASE=@gisbase_init_dir@ + +set PYTHONPATH=@gisbase_init_dir@\etc\python;@gisbase_init_dir@\gui\wxpython;@gisbase_init_dir@\etc + +set GRASS_PYTHON=@GRASS_PYTHON@ + +set GRASS_CONFIG_DIR=@grass_config_dir@ + +"@GRASS_PYTHON@" "@gisbase_init_dir@\etc\@START_UP@" %* + +rem +rem Pause on error +rem +if %ERRORLEVEL% GEQ 1 pause diff --git a/lib/init/grass.sh.in b/lib/init/grass.sh.in new file mode 100644 index 00000000000..a37f5b2e624 --- /dev/null +++ b/lib/init/grass.sh.in @@ -0,0 +1,6 @@ +#! /bin/sh +trap "echo 'User break!' ; exit" 2 3 9 15 + +. @grass_config_dir@/bashrc + +"$GRASS_PYTHON" "@gisbase_init_dir@/etc/@START_UP@" "$@" diff --git a/lib/init/license.txt.in b/lib/init/license.txt.in new file mode 100644 index 00000000000..c40844420c5 --- /dev/null +++ b/lib/init/license.txt.in @@ -0,0 +1,11 @@ +Geographic Resources Analysis Support System (GRASS) is Copyright, +1999-@GRASS_VERSION_DATE@ by the GRASS Development Team, and licensed under terms of the +GNU General Public License (GPL) version >=2. + +This GRASS GIS @GRASS_VERSION_NUMBER@ release is coordinated and produced by +the GRASS Development Team with contributions from all over the world. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. diff --git a/lib/init/lock.c b/lib/init/lock.c index a1dc8ca93e5..7d435c0878a 100644 --- a/lib/init/lock.c +++ b/lib/init/lock.c @@ -38,7 +38,7 @@ int main(int argc, char *argv[]) G_fatal_error(_("Usage: %s file pid"), argv[0]); #define file argv[1] -#ifdef __MINGW32__ +#ifdef _WIN32 G_warning(_("Concurrent mapset locking is not supported on Windows")); exit(0); #else @@ -71,7 +71,7 @@ int find_process(int pid) kill failed because no such process, or because user is not owner of process */ -#ifdef __MINGW32__ +#ifdef _WIN32 return 0; #else if (kill(pid, 0) == 0) diff --git a/lib/init/run.c b/lib/init/run.c index 4c048efdcec..6dae2af309e 100644 --- a/lib/init/run.c +++ b/lib/init/run.c @@ -22,7 +22,7 @@ the user's shell to re-activate interrupts in shell-ese. int main(int argc, char *argv[]) { signal(SIGINT, SIG_DFL); -#ifndef __MINGW32__ +#ifndef _WIN32 signal(SIGQUIT, SIG_DFL); #endif diff --git a/lib/iostream/rtimer.cpp b/lib/iostream/rtimer.cpp index 83ed7e44879..c0d8a4fd9fc 100644 --- a/lib/iostream/rtimer.cpp +++ b/lib/iostream/rtimer.cpp @@ -33,10 +33,16 @@ * General Public License for more details. * * **************************************************************************/ +#if !defined(_MSC_VER) #include +#endif + #include #include + +#if !defined(_MSC_VER) #include +#endif #include diff --git a/lib/manage/sighold.c b/lib/manage/sighold.c index 7961f62f3dc..8fdbea604c4 100644 --- a/lib/manage/sighold.c +++ b/lib/manage/sighold.c @@ -27,7 +27,7 @@ int M__hold_signals(int hold) signal(SIGINT, sig); -#ifndef __MINGW32__ +#ifndef _WIN32 signal(SIGQUIT, sig); #endif diff --git a/lib/pngdriver/graph_close.c b/lib/pngdriver/graph_close.c index 3496bdf1fa1..e6dba3f6166 100644 --- a/lib/pngdriver/graph_close.c +++ b/lib/pngdriver/graph_close.c @@ -16,7 +16,7 @@ #include #include #include -#ifdef __MINGW32__ +#ifdef _WIN32 #include #else #include @@ -33,7 +33,7 @@ static void unmap_file(void) if (!png.mapped) return; -#ifdef __MINGW32__ +#ifdef _WIN32 UnmapViewOfFile(ptr); CloseHandle(png.handle); #else diff --git a/lib/pngdriver/graph_set.c b/lib/pngdriver/graph_set.c index 1fcf02bac8a..8376e421b12 100644 --- a/lib/pngdriver/graph_set.c +++ b/lib/pngdriver/graph_set.c @@ -18,7 +18,7 @@ #include #include #include -#ifdef __MINGW32__ +#ifdef _WIN32 #include #else #include @@ -41,9 +41,9 @@ static void map_file(void) if (fd < 0) return; -#ifdef __MINGW32__ - png.handle = CreateFileMapping((HANDLE)_get_osfhandle(fd), NULL, - PAGE_READWRITE, 0, size, NULL); +#ifdef _WIN32 + png.handle = CreateFileMapping((HANDLE) _get_osfhandle(fd), + NULL, PAGE_READWRITE, 0, size, NULL); if (!png.handle) return; ptr = MapViewOfFile(png.handle, FILE_MAP_WRITE, 0, 0, size); diff --git a/lib/pngdriver/pngdriver.h b/lib/pngdriver/pngdriver.h index 0a4b9564e72..24e7eb5c760 100644 --- a/lib/pngdriver/pngdriver.h +++ b/lib/pngdriver/pngdriver.h @@ -16,7 +16,7 @@ #include -#ifdef __MINGW32__ +#ifdef _WIN32 #include #endif @@ -34,7 +34,7 @@ struct png_state { int true_color; int has_alpha; int mapped; -#ifdef __MINGW32__ +#ifdef _WIN32 HANDLE handle; #endif diff --git a/lib/proj/CMakeLists.txt b/lib/proj/CMakeLists.txt new file mode 100644 index 00000000000..6481331b3a4 --- /dev/null +++ b/lib/proj/CMakeLists.txt @@ -0,0 +1,14 @@ +file(COPY desc.table DESTINATION etc/proj) +file(COPY parms.table DESTINATION etc/proj) +file(COPY units.table DESTINATION etc/proj) + +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") +endif() + +build_module(NAME grass_gproj + DEPENDS grass_driver GDAL ZLIB PROJ + SOURCES "${grass_gproj_SOURCES}" + INCLUDES "../driver") diff --git a/lib/raster/close.c b/lib/raster/close.c index 36ce924cb8b..50ed7fc1602 100644 --- a/lib/raster/close.c +++ b/lib/raster/close.c @@ -12,7 +12,7 @@ * \author USACERL and many others */ -#ifdef __MINGW32__ +#ifdef _WIN32 #include #endif @@ -51,7 +51,7 @@ static void sync_and_close(int fd, char *element, char *name) * after you are done writing all your data. */ -#ifndef __MINGW32__ +#ifndef _WIN32 if (fsync(fd)) { G_warning(_("Unable to flush file %s for raster map %s: %s"), element, name, strerror(errno)); diff --git a/lib/raster3d/close.c b/lib/raster3d/close.c index 2622eb48d40..8af9ed1ac1a 100644 --- a/lib/raster3d/close.c +++ b/lib/raster3d/close.c @@ -12,7 +12,7 @@ \author USACERL and many others */ -#ifdef __MINGW32__ +#ifdef _WIN32 #include #endif #include @@ -54,7 +54,7 @@ static int close_new(RASTER3D_Map *map) /* finally move tempfile to data file */ Rast3d_filename(path, RASTER3D_CELL_ELEMENT, map->fileName, map->mapset); -#ifdef __MINGW32__ +#ifdef _WIN32 if (CopyFile(map->tempName, path, FALSE) == 0) { #else if (link(map->tempName, path) < 0) { diff --git a/lib/raster3d/mask.c b/lib/raster3d/mask.c index 69e7a498774..5d9e4014b47 100644 --- a/lib/raster3d/mask.c +++ b/lib/raster3d/mask.c @@ -304,12 +304,12 @@ void Rast3d_mask_tile(RASTER3D_Map *map, int tileIndex, void *tile, int type) for (dy = y; dy < rows; dy++) { for (dx = x; dx < cols; dx++) { RASTER3D_MASKNUM(map, dx, dy, dz, tile, type); - tile = (char *)tile + length; + tile = (int*)tile + length; } - tile = (char *)tile + xLength; + tile = (int*) + xLength; } - tile = (char *)tile + yLength; + tile = (int*) + yLength; } } diff --git a/lib/raster3d/test/test_raster3d_lib.h b/lib/raster3d/test/test_raster3d_lib.h index 4bcb53f5f59..5a1c57dd3ef 100644 --- a/lib/raster3d/test/test_raster3d_lib.h +++ b/lib/raster3d/test/test_raster3d_lib.h @@ -20,8 +20,11 @@ #include #include #include +#ifdef HAVE_SYS_TIME_H #include - +#else +#include +#endif double compute_time_difference(struct timeval, struct timeval); int unit_test_coordinate_transform(void); int unit_test_put_get_value(void); diff --git a/lib/raster3d/test/test_tools.c b/lib/raster3d/test/test_tools.c index bb4ff23a7bd..a36f09dec63 100644 --- a/lib/raster3d/test/test_tools.c +++ b/lib/raster3d/test/test_tools.c @@ -19,6 +19,9 @@ #include #include #include "test_raster3d_lib.h" +#ifdef _MSC_VER + #include +#endif /* *************************************************************** */ /* Compute the difference between two time steps ***************** */ diff --git a/lib/rst/CMakeLists.txt b/lib/rst/CMakeLists.txt new file mode 100644 index 00000000000..4250dd94dcf --- /dev/null +++ b/lib/rst/CMakeLists.txt @@ -0,0 +1,21 @@ +#add_subdirectory(data) +#add_subdirectory(qtree) +#add_subdirectory(interp_float) + +build_library_in_subdir(data + NAME grass_interpdata + DEPENDS grass_gis + HEADERS "dataquad.h") + +build_library_in_subdir(qtree + NAME grass_qtree + DEPENDS grass_gis + HEADERS "qtree.h") + + +build_library_in_subdir(interp_float + NAME grass_interpfl + DEFS "-DPOINT2D_C=1" + DEPENDS GEOS grass_gis grass_raster grass_bitmap grass_vector grass_qtree grass_interpdata + HEADERS "interpf.h") + diff --git a/lib/rst/interp_float/point2d.c b/lib/rst/interp_float/point2d.c index 8a5a0aa8d42..7315bc62a3b 100644 --- a/lib/rst/interp_float/point2d.c +++ b/lib/rst/interp_float/point2d.c @@ -30,7 +30,9 @@ #include #include -#define POINT2D_C +#ifndef POINT2D_C +#define POINT2D_C 1 +#endif #include /* needed for AIX */ diff --git a/lib/temporal/CMakeLists.txt b/lib/temporal/CMakeLists.txt new file mode 100644 index 00000000000..8b1873bdf4f --- /dev/null +++ b/lib/temporal/CMakeLists.txt @@ -0,0 +1,5 @@ +file(GLOB SQLFILES "SQL/*.sql") +foreach(sqlfile ${SQLFILES}) + install(FILES "${sqlfile}" DESTINATION etc/sql) +endforeach() +build_library_in_subdir(lib NAME grass_temporal DEPENDS grass_dbmibase grass_datetime) diff --git a/lib/vector/CMakeLists.txt b/lib/vector/CMakeLists.txt new file mode 100644 index 00000000000..9e17ce093b8 --- /dev/null +++ b/lib/vector/CMakeLists.txt @@ -0,0 +1,23 @@ +#TODO: docs vectorascii +# PGM = vectorascii + +build_library_in_subdir(rtree HEADERS "rtree.h" DEPENDS grass_gis) + +add_subdirectory(dglib) +add_subdirectory(diglib) + +build_library_in_subdir(Vlib + NAME grass_vector + DEPENDS grass_gis grass_raster grass_rtree + grass_graph grass_dig2 grass_dbmibase + grass_btree2 grass_dbmiclient + grass_linkm grass_gproj + ) + +if(TARGET POSTGRES) + target_link_libraries(grass_vector POSTGRES) +endif() + +add_subdirectory(vedit) + +add_subdirectory(neta) diff --git a/lib/vector/Vlib/box.c b/lib/vector/Vlib/box.c index 229de5a2c53..ebcee7d4794 100644 --- a/lib/vector/Vlib/box.c +++ b/lib/vector/Vlib/box.c @@ -246,8 +246,8 @@ int Vect_get_line_box(struct Map_info *Map, int line, struct bound_box *Box) } Line = Plus->Line[line]; - if (Line == NULL) { /* dead */ - Box->N = Box->S = Box->E = Box->W = Box->T = Box->B = NAN; + if (Line == NULL) { /* dead */ + Box->N = Box->S = Box->E = Box->W = Box->T = Box->B = INFINITY; return 0; } @@ -310,8 +310,8 @@ int Vect_get_area_box(struct Map_info *Map, int area, struct bound_box *Box) Area = Plus->Area[area]; - if (Area == NULL) { /* dead */ - Box->N = Box->S = Box->E = Box->W = Box->T = Box->B = NAN; + if (Area == NULL) { /* dead */ + Box->N = Box->S = Box->E = Box->W = Box->T = Box->B = INFINITY; return 0; } @@ -356,8 +356,8 @@ int Vect_get_isle_box(struct Map_info *Map, int isle, struct bound_box *Box) Isle = Plus->Isle[isle]; - if (Isle == NULL) { /* dead */ - Box->N = Box->S = Box->E = Box->W = Box->T = Box->B = NAN; + if (Isle == NULL) { /* dead */ + Box->N = Box->S = Box->E = Box->W = Box->T = Box->B = INFINITY; return 0; } diff --git a/lib/vector/dglib/CMakeLists.txt b/lib/vector/dglib/CMakeLists.txt new file mode 100644 index 00000000000..8c6fe422c1a --- /dev/null +++ b/lib/vector/dglib/CMakeLists.txt @@ -0,0 +1,56 @@ +# MODULE_TOPDIR = ../../.. + +# include $(MODULE_TOPDIR)/include/Make/Vars.make + +# MOD_OBJS := $(filter-out %-template.o,$(AUTO_OBJS)) + +# LIB = GRAPH + +# include $(MODULE_TOPDIR)/include/Make/Lib.make +# include $(MODULE_TOPDIR)/include/Make/Doxygen.make + +# DGLINC = $(ARCH_INCDIR)/dgl + +# default: headers +# $(MAKE) lib + +# headers: $(DGLINC)/avl.h $(DGLINC)/tavl.h $(DGLINC)/graph.h $(DGLINC)/heap.h \ +# $(DGLINC)/tree.h $(DGLINC)/type.h $(DGLINC)/helpers.h $(DGLINC)/graph_v1.h $(DGLINC)/graph_v2.h \ +# $(ARCH_INCDIR)/dgl.h + +# $(DGLINC)/%.h: %.h | $(DGLINC) +# $(INSTALL_DATA) $< $@ + +set(DGL_headers + avl.h + tavl.h + graph.h + heap.h + tree.h + type.h + helpers.h + graph_v1.h + graph_v2.h +) +foreach(DGL_header ${DGL_headers}) + file(COPY ${DGL_header} DESTINATION ${CMAKE_BINARY_DIR}/include/grass/dgl) +endforeach() + +set(graphlib_SRCS + avl.c + graph.c + graph_v2.c + helpers.c + tree.c + graph_v1.c + heap.c + tavl.c + ) + +build_module( + NAME grass_graph + SOURCES "${graphlib_SRCS}" + HEADERS "dgl.h" + ) + + diff --git a/lib/vector/diglib/CMakeLists.txt b/lib/vector/diglib/CMakeLists.txt new file mode 100644 index 00000000000..683df73557c --- /dev/null +++ b/lib/vector/diglib/CMakeLists.txt @@ -0,0 +1,8 @@ +set(dig2_SRCS +allocation.c cindex.c frmt.c line_dist.c plus.c plus_node.c port_init.c prune.c struct_alloc.c update.c +angle.c cindex_rw.c head.c linecros.c plus_area.c plus_struct.c spindex.c +box.c file.c inside.c list.c plus_line.c poly.c portable.c spindex_rw.c type.c +) +build_module(NAME grass_dig2 + SOURCES ${dig2_SRCS} + DEPENDS GDAL GEOS grass_gmath grass_gis grass_rtree) diff --git a/lib/vector/neta/CMakeLists.txt b/lib/vector/neta/CMakeLists.txt new file mode 100644 index 00000000000..4d97bf911f7 --- /dev/null +++ b/lib/vector/neta/CMakeLists.txt @@ -0,0 +1,24 @@ +# MODULE_TOPDIR = ../../.. + +# LIB = NETA + +# LIBES = $(VECTORLIB) $(DBMILIB) $(GISLIB) $(GRAPHLIB) +# DEPENDENCIES= $(VECTORDEP) $(DBMIDEP) $(GISDEP) +# EXTRA_INC = $(VECT_INC) +# EXTRA_CFLAGS = $(VECT_CFLAGS) + +# include $(MODULE_TOPDIR)/include/Make/Lib.make +# include $(MODULE_TOPDIR)/include/Make/Doxygen.make + +# default: lib + +# DOXNAME=neta + +build_module(NAME grass_neta +DEPENDS GDAL GEOS +grass_dbmiclient +grass_gis +grass_graph +grass_vector +) + diff --git a/lib/vector/vedit/CMakeLists.txt b/lib/vector/vedit/CMakeLists.txt new file mode 100644 index 00000000000..f48250ec31f --- /dev/null +++ b/lib/vector/vedit/CMakeLists.txt @@ -0,0 +1,21 @@ +# MODULE_TOPDIR = ../../.. + +# LIB = VEDIT + +# DEPENDENCIES = $(VECTORDEP) $(GISDEP) + +# EXTRA_INC = $(VECT_INC) +# EXTRA_CFLAGS = $(VECT_CFLAGS) + +# include $(MODULE_TOPDIR)/include/Make/Lib.make +# include $(MODULE_TOPDIR)/include/Make/Doxygen.make + +# default: lib + +# # doxygen +# DOXNAME=vedit + + +build_module(NAME grass_vedit + DEPENDS grass_vector GDAL GEOS) + diff --git a/man/CMakeLists.txt b/man/CMakeLists.txt new file mode 100644 index 00000000000..d5137a06571 --- /dev/null +++ b/man/CMakeLists.txt @@ -0,0 +1,5 @@ + +set(data_files grassdocs.css grass_logo.png grass_icon.png jquery.fixedheadertable.min.js parser_standard_options.js parser_standard_options.css) + +file(COPY ${data_files} DESTINATION docs/html) +install(FILES ${data_files} DESTINATION docs/html) diff --git a/misc/CMakeLists.txt b/misc/CMakeLists.txt new file mode 100644 index 00000000000..9298252633e --- /dev/null +++ b/misc/CMakeLists.txt @@ -0,0 +1,23 @@ + +build_program_in_subdir( + m.cogo + DEPENDS grass_gis) + +build_program_in_subdir( + m.measure + DEPENDS grass_gis) + +build_program_in_subdir( + m.transform + DEPENDS grass_gis grass_imagery grass_raster grass_vector) + +if(WITH_OPENGL) +build_program_in_subdir( + m.nviz.image + DEPENDS grass_gis grass_ogsf grass_nviz) + +build_program_in_subdir( + m.nviz.script + DEPENDS grass_gis grass_ogsf grass_nviz) +endif(WITH_OPENGL) + diff --git a/msvc/strings.h b/msvc/strings.h new file mode 100644 index 00000000000..dcf9ed87b7f --- /dev/null +++ b/msvc/strings.h @@ -0,0 +1,5 @@ +/* MSVC does not have strings.h */ +#ifndef _INC_STRINGS_H +#define _INC_STRINGS_H 1 +#include +#endif \ No newline at end of file diff --git a/msvc/unistd.h b/msvc/unistd.h new file mode 100644 index 00000000000..a09e1d92e09 --- /dev/null +++ b/msvc/unistd.h @@ -0,0 +1,58 @@ +#ifndef _UNISTD_H +#define _UNISTD_H 1 + +/* This file intended to serve as a drop-in replacement for + * unistd.h on Windows. + * Please add functionality as neeeded. + * Original file from: http://stackoverflow.com/a/826027 + */ + +#include +#include +#include /* for getpid() and the exec..() family */ +#include /* for _getcwd() and _chdir() */ + +#define srandom srand +#define random rand + +/* Values for the second argument to access. + These may be OR'd together. */ +#define R_OK 4 /* Test for read permission. */ +#define W_OK 2 /* Test for write permission. */ +#define X_OK R_OK /* execute permission - unsupported in Windows, + use R_OK instead. */ +#define F_OK 0 /* Test for existence. */ + +#define access _access +#define dup2 _dup2 +#define execve _execve +#define ftruncate _chsize +#define unlink _unlink +#define fileno _fileno +#define getcwd _getcwd +#define chdir _chdir +#define isatty _isatty +#define lseek _lseek +/* read, write, and close are NOT being #defined here, + * because while there are file handle specific versions for Windows, + * they probably don't work for sockets. + * You need to look at your app and consider whether + * to call e.g. closesocket(). + */ + +//#define ssize_t int + +#define STDIN_FILENO 0 +#define STDOUT_FILENO 1 +#define STDERR_FILENO 2 +/* should be in some equivalent to */ + +typedef __int16 int16_t; +typedef __int32 int32_t; +typedef __int64 int64_t; +typedef unsigned __int8 uint8_t; +typedef unsigned __int16 uint16_t; +typedef unsigned __int32 uint32_t; +typedef unsigned __int64 uint64_t; + +#endif /* unistd.h */ \ No newline at end of file diff --git a/python/grass/CMakeLists.txt b/python/grass/CMakeLists.txt new file mode 100644 index 00000000000..78a229ece5b --- /dev/null +++ b/python/grass/CMakeLists.txt @@ -0,0 +1,42 @@ + +copy_python_files_in_subdir(bandref etc/python/grass) +copy_python_files_in_subdir(exceptions etc/python/grass) +copy_python_files_in_subdir(gunittest etc/python/grass) +copy_python_files_in_subdir(imaging etc/python/grass) +copy_python_files_in_subdir(pydispatch etc/python/grass) +copy_python_files_in_subdir(script etc/python/grass) +copy_python_files_in_subdir(temporal etc/python/grass) +copy_python_files_in_subdir(pygrass etc/python/grass) +copy_python_files_in_subdir(pygrass/messages etc/python/grass) +copy_python_files_in_subdir(pygrass/modules etc/python/grass) +copy_python_files_in_subdir(pygrass/raster etc/python/grass) +copy_python_files_in_subdir(pygrass/vector etc/python/grass) +copy_python_files_in_subdir(pygrass/gis etc/python/grass) +copy_python_files_in_subdir(pygrass/shell etc/python/grass) +copy_python_files_in_subdir(pygrass/tests etc/python/grass) +copy_python_files_in_subdir(pygrass/rpc etc/python/grass) +copy_python_files_in_subdir(pygrass/modules/interface etc/python/grass) +copy_python_files_in_subdir(pygrass/modules/grid etc/python/grass) + + +configure_file(script/setup.py + ${CMAKE_BINARY_DIR}/etc/python/grass/script/setup.py + COPYONLY) + +add_custom_target(LIB_PYTHON + COMMAND ${CMAKE_COMMAND} -E echo "#coding=utf-8" > ${GISBASE}/etc/python/__init__.py + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/__init__.py ${GISBASE}/etc/python/grass/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/etc/python/grass/script/setup.py ${GISBASE}/etc/python/grass/script/ + DEPENDS python_bandref python_exceptions python_imaging python_pydispatch python_script python_temporal + python_pygrass python_pygrass_messages python_pygrass_modules python_pygrass_modules + python_pygrass_raster python_pygrass_vector python_pygrass_gis python_pygrass_shell + python_pygrass_tests python_pygrass_rpc + python_pygrass_modules_interface + python_pygrass_modules_grid) + +#TODO: MODULES DISABLED +# add_subdirectory(ctypes) + +set_target_properties (LIB_PYTHON PROPERTIES FOLDER lib) + +install(DIRECTORY ${GISBASE}/etc/python/grass DESTINATION etc/python/grass/) diff --git a/python/grass/pygrass/CMakeLists.txt b/python/grass/pygrass/CMakeLists.txt new file mode 100644 index 00000000000..2606bd39571 --- /dev/null +++ b/python/grass/pygrass/CMakeLists.txt @@ -0,0 +1,24 @@ +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) + + build_pymodule_in_subdir(messages etc/python/grass/pygrass) + + build_pymodule_in_subdir(modules etc/python/grass/pygrass) + + build_pymodule_in_subdir(modules/interface etc/python/grass/pygrass/modules) + + build_pymodule_in_subdir(modules/grid etc/python/grass/pygrass/modules) + + build_pymodule_in_subdir(raster etc/python/grass/pygrass) + + build_pymodule_in_subdir(vector etc/python/grass/pygrass) + + build_pymodule_in_subdir(gis etc/python/grass/pygrass) + + build_pymodule_in_subdir(shell etc/python/grass/pygrass) + + build_pymodule_in_subdir(tests etc/python/grass/pygrass) + + build_pymodule_in_subdir(rpc etc/python/grass/pygrass) diff --git a/python/libgrass_interface_generator/CMakeLists.txt b/python/libgrass_interface_generator/CMakeLists.txt new file mode 100644 index 00000000000..b243f459da4 --- /dev/null +++ b/python/libgrass_interface_generator/CMakeLists.txt @@ -0,0 +1,85 @@ +set(MODULES + date gis raster gmath proj imagery vector rtree display + stats dbmi raster3d arraystats cluster vedit segment rowio temporal) + +if(WITH_OPENGL) + list(APPEND MODULES ogsf nviz) +endif() + +set(date_HDRS datetime.h defs/datetime.h) +set(date_LIBS grass_datetime) +set(date_TARGET_NAME grass_datetime_py) + +set(gis_HDRS gis.h defs/gis.h colors.h defs/colors.h) +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(display_HDRS display.h defs/display.h ) +set(dbmi_HDRS dbmi.h defs/dbmi.h ) +set(dbmi_LIBS grass_dbmibase grass_dbmiclient ) +set(arraystats_HDRS arraystats.h defs/arraystats.h ) +set(vedit_HDRS vedit.h defs/vedit.h) +set(nviz_HDRS nviz.h defs/nviz.h) +set(rowio_HDRS rowio.h defs/rowio.h) +set(temporal_HDRS temporal.h) +set(ogsf_HDRS ogsf.h defs/ogsf.h) +set(segment_HDRS segment.h defs/segment.h) +set(imagery_HDRS imagery.h defs/imagery.h ) +set(rtree_HDRS rtree.h) +set(stats_HDRS stats.h defs/stats.h) +set(raster3d_HDRS raster3d.h defs/raster3d.h) +set(cluster_HDRS cluster.h defs/cluster.h) + +#TODO +# set(VECT_INC ${PQINCPATH} ) +# set(proj_INC "${PROJ_INCLUDE_DIR}") +# set(vector_INC "${PQINCPATH};${GDAL_INCLUDE_DIR}") +# set(vedit_INC "${GDAL_INCLUDE_DIR}") + +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() + + foreach(${module}_LIB ${${module}_LIBS}) + if(NOT TARGET ${${module}_LIB} ) + message(FATAL_ERROR "${${module}_LIB} is not a target") + endif() + endforeach() + + 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 "${GISBASE}/etc/python/grass/lib/${module}.py") + + add_custom_command(OUTPUT ${output_file} + DEPENDS ${${module}_LIBS} + COMMAND ${CMAKE_COMMAND} + -DCTYPESGEN_PY=${CMAKE_CURRENT_SOURCE_DIR}/ctypesgen.py + -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE} + -DCOMPILER=${CMAKE_C_COMPILER} + -DBIN_DIR=${GISBASE} + -DHDRS=${${module}_HDRS} + -DLIBS=${${module}_LIBS} + -DOUT_FILE=${output_file} + -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 lib/python) + install(FILES ${output_file} DESTINATION etc/python/grass/lib) + +endforeach() diff --git a/raster/CMakeLists.txt b/raster/CMakeLists.txt new file mode 100644 index 00000000000..b3216cbcda2 --- /dev/null +++ b/raster/CMakeLists.txt @@ -0,0 +1,514 @@ +build_program_in_subdir( + r.basins.fill + DEPENDS grass_gis grass_raster ) + +build_program_in_subdir( + r.buffer + DEPENDS grass_gis grass_raster ) + +build_program_in_subdir( + r.carve + DEPENDS grass_gis grass_raster grass_vector grass_bitmap) + +build_program_in_subdir( + r.category + DEPENDS grass_gis grass_raster ) + +build_program_in_subdir( + r.circle + DEPENDS grass_gis grass_raster ) + +build_program_in_subdir( + r.clump + DEPENDS grass_gis grass_raster grass_btree2) + +build_program_in_subdir( +r.coin + DEPENDS grass_gis grass_raster ) + +add_subdirectory(r.colors) + +add_subdirectory(r.colors.out) + +build_program_in_subdir( + r.composite + DEPENDS grass_gis grass_raster ) + +build_program_in_subdir( + r.compress + DEPENDS grass_gis grass_raster ) + +build_program_in_subdir( + r.contour + DEPENDS grass_gis grass_raster grass_vector) + +build_program_in_subdir( + r.cost + DEPENDS grass_gis grass_raster grass_segment grass_vector) + +build_program_in_subdir( + r.covar + DEPENDS grass_gis grass_raster ) + +build_program_in_subdir( + r.cross + DEPENDS grass_gis grass_raster grass_btree grass_btree2) + +build_program_in_subdir( + r.describe + DEPENDS grass_gis grass_raster ) + +build_program_in_subdir( + r.distance + DEPENDS grass_gis grass_raster ) + +build_program_in_subdir( + r.drain + DEPENDS grass_gis grass_raster grass_vector) + +build_program_in_subdir( + r.external + DEPENDS grass_gis grass_raster grass_imagery grass_gproj) + +build_program_in_subdir( + r.external.out + DEPENDS grass_gis grass_raster ) + + build_program_in_subdir( + r.fill.dir + DEPENDS grass_gis grass_raster ) + +build_program_in_subdir( + r.flow + DEPENDS grass_gis grass_raster grass_segment grass_vector grass_bitmap) + +build_program_in_subdir(r.geomorphon DEPENDS grass_gis grass_raster grass_gmath) + +build_program_in_subdir( + r.grow.distance + DEPENDS grass_gis grass_raster ) + +build_program_in_subdir( + r.gwflow + DEPENDS grass_gis grass_raster grass_gpde) + +build_program_in_subdir( + r.his + DEPENDS grass_gis grass_raster grass_gproj) + +build_program_in_subdir( + r.horizon + DEPENDS grass_gis grass_raster grass_gproj) + +build_program_in_subdir( + r.in.ascii + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.in.bin + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.in.gdal + DEPENDS grass_gis grass_raster grass_gproj grass_imagery) + +build_program_in_subdir( + r.in.gridatb + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.in.mat + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.in.png + DEPENDS grass_gis grass_raster LIBPNG) + +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) +endif() +build_program_in_subdir( + r.info + TEST_SOURCES "test_r_info.py" + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.kappa + DEPENDS grass_gis grass_raster) + +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.mfilter + DEPENDS grass_gis grass_raster grass_rowio) + +build_program_in_subdir( + r.mode + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.neighbors + DEPENDS grass_gis grass_raster grass_stats) + +build_program_in_subdir( + r.null + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.out.ascii + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.out.bin + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.out.gdal + DEPENDS grass_gis grass_raster grass_dbmibase grass_imagery) + +set_source_files_properties(r.out.gdal/main.c + PROPERTIES COMPILE_DEFINITIONS + "GRASS_VERSION_NUMBER=\"${GRASS_VERSION_NUMBER}\";GDAL_VERSION_MAJOR=\"2\";GDAL_VERSION_MINOR=\"1\";GDAL_VERSION_REV=\"1\"" + ) + + build_program_in_subdir( + r.out.gridatb + DEPENDS grass_gis grass_raster) + +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 LIBPNG) + +build_program_in_subdir( + r.out.pov + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.out.ppm + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.out.ppm3 + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.out.vrml + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.out.vtk + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.param.scale + DEPENDS grass_gis grass_raster grass_interpfl + grass_interpdata grass_qtree ) + +build_program_in_subdir( + r.patch + DEPENDS grass_gis grass_raster) + +build_program_in_subdir(r.path DEPENDS grass_gis grass_raster grass_vector) + +build_program_in_subdir( + r.profile + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.proj + DEPENDS grass_gis grass_raster grass_gproj) + +build_program_in_subdir( + r.quant + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.quantile + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.random + DEPENDS grass_gis grass_raster grass_vector) + +build_program_in_subdir( + r.random.cells + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.random.surface + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.reclass + DEPENDS grass_gis grass_raster grass_manage ) + +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) + +build_program_in_subdir( + r.regression.multi + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.report + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.resamp.bspline + DEPENDS grass_gis grass_raster grass_vector grass_segment grass_lidar) + +build_program_in_subdir( + r.resamp.filter + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.resamp.interp + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.resamp.rst + DEPENDS grass_gis grass_raster grass_interpfl grass_interpdata grass_qtree) + +build_program_in_subdir( + r.resamp.stats + DEPENDS grass_gis grass_raster grass_stats) + +build_program_in_subdir( + r.resample + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.rescale + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.rescale.eq + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.ros + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.series + DEPENDS grass_gis grass_raster grass_stats ) + +build_program_in_subdir( + r.series.accumulate + DEPENDS grass_gis grass_raster grass_stats ) + +build_program_in_subdir( + r.series.interp + DEPENDS grass_gis grass_raster grass_stats ) + +build_program_in_subdir( + r.relief + DEPENDS grass_gis grass_raster) + +add_subdirectory(r.sim) + +build_program_in_subdir( + r.slope.aspect + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.solute.transport + DEPENDS grass_gis grass_raster grass_gmath grass_gpde) + +add_subdirectory(r.spread) + +build_program_in_subdir( + r.spreadpath + DEPENDS grass_gis grass_raster grass_segment) + +build_program_in_subdir( + r.statistics + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.stats.zonal + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.stats.quantile + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.stats + DEPENDS grass_gis grass_raster) + + build_program_in_subdir( + r.stream.extract + DEPENDS grass_gis grass_raster grass_segment grass_vector) + +build_program_in_subdir( + r.sun + DEPENDS grass_gmath grass_raster grass_gproj) + +build_program_in_subdir( + r.sunhours + DEPENDS grass_gis grass_raster grass_gproj) + +build_program_in_subdir( + r.sunmask + DEPENDS grass_gis grass_raster grass_gproj) + +build_program_in_subdir( + r.support + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.support.stats + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.surf.area + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.surf.contour + DEPENDS grass_gis grass_raster ) + +build_program_in_subdir( + r.surf.fractal + DEPENDS grass_gis grass_raster grass_gmath ) + +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 ) + +build_program_in_subdir( + r.surf.random + DEPENDS grass_gis grass_raster grass_gmath ) + +if(MSVC) + set(USER_NAME $ENV{USERNAME}) +else() + set(USER_NAME $ENV{USER}) +endif() + +build_program_in_subdir( + r.texture + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.thin + DEPENDS grass_gis grass_raster grass_rowio) + +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_raster3d) + +build_program_in_subdir( + r.to.rast3elev + DEPENDS grass_gis grass_raster3d) + +build_program_in_subdir( + r.to.vect + DEPENDS grass_gis grass_raster grass_vector) + +build_program_in_subdir( + r.topidx + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.topmodel + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.transect + DEPENDS grass_gis grass_raster) + +add_subdirectory(r.univar) + +build_program_in_subdir( + r.uslek + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.usler + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.volume + DEPENDS grass_gis grass_raster grass_vector) + +build_program_in_subdir( + r.walk + DEPENDS grass_gis grass_raster grass_segment grass_vector) + +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) + +build_program_in_subdir( + r.what.color + DEPENDS grass_gis grass_raster) + +build_program_in_subdir( + r.in.lidar + DEPENDS grass_gis grass_raster grass_lidar + PRIMARY_DEPENDS LIBLAS) + +add_subdirectory(r.li) + +add_subdirectory(r.mapcalc) + +build_program_in_subdir( + r.viewshed + DEPENDS grass_gis grass_raster grass_iostream + SRC_REGEX "*.cpp" + DEFS "-DUSER=${USER_NAME}") + + build_program_in_subdir( + r.terraflow + DEPENDS grass_gis grass_raster grass_iostream + SRC_REGEX "*.cpp" + DEFS "-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 new file mode 100644 index 00000000000..dd6ee9e6fc6 --- /dev/null +++ b/raster/r.colors.out/CMakeLists.txt @@ -0,0 +1,16 @@ +set(r_colors_out_SRCS raster_main.c) +set(r3_colors_out_SRCS raster3d_main.c) + +build_program( + NAME r.colors.out + SOURCES "${r_colors_out_SRCS}" + DEPENDS grass_gis grass_raster + ) + +build_program(NAME r3.colors.out + SOURCES "${r3_colors_out_SRCS}" + DEPENDS grass_gis grass_raster3d) + + + + diff --git a/raster/r.colors/CMakeLists.txt b/raster/r.colors/CMakeLists.txt new file mode 100644 index 00000000000..84a6f8a4b41 --- /dev/null +++ b/raster/r.colors/CMakeLists.txt @@ -0,0 +1,12 @@ + +set(r_colors_SRCS raster_main.c edit_colors.c rules.c stats.c) +set(r3_colors_SRCS + raster3d_main.c edit_colors.c rules.c stats.c) + +build_program(NAME r.colors + SOURCES "${r_colors_SRCS}" + DEPENDS grass_gis grass_raster3d) + +build_program(NAME r3.colors + SOURCES "${r3_colors_SRCS}" + DEPENDS grass_gis grass_raster3d) diff --git a/raster/r.in.bin/main.c b/raster/r.in.bin/main.c index 08b657746e5..56bf05249b2 100644 --- a/raster/r.in.bin/main.c +++ b/raster/r.in.bin/main.c @@ -255,7 +255,7 @@ int main(int argc, char *argv[]) const char *outpre; char output[GNAME_MAX]; const char *title; - double null_val = NAN; + double null_val = INFINITY; int is_fp; int is_signed; int bytes, hbytes; diff --git a/raster/r.in.lidar/info.c b/raster/r.in.lidar/info.c index 344a4d73c5d..24ea3223805 100644 --- a/raster/r.in.lidar/info.c +++ b/raster/r.in.lidar/info.c @@ -12,7 +12,8 @@ */ #include -#include +#include /* For INIFINITY */ + #include #include #include "local_proto.h" @@ -97,7 +98,7 @@ int scan_bounds(LASReaderH LAS_reader, int shell_style, int extents, int update, first = TRUE; /* init to nan in case no points are found */ - min_x = max_x = min_y = max_y = min_z = max_z = NAN; + min_x = max_x = min_y = max_y = min_z = max_z = INFINITY; G_verbose_message(_("Scanning data ...")); diff --git a/raster/r.in.lidar/point_binning.c b/raster/r.in.lidar/point_binning.c index 97e942d19b7..1148deaf5ae 100644 --- a/raster/r.in.lidar/point_binning.c +++ b/raster/r.in.lidar/point_binning.c @@ -434,7 +434,7 @@ void write_median(struct BinIndex *bin_index, void *raster_row, Rast_set_null_value(ptr, 1, rtype); else { /* one or more points in cell */ - head_id = Rast_get_c_value(index_array + n_offset, CELL_TYPE); + head_id = Rast_get_c_value((CELL*)index_array + n_offset, CELL_TYPE); node_id = head_id; n = 0; @@ -493,7 +493,7 @@ void write_percentile(struct BinIndex *bin_index, void *raster_row, CELL_TYPE)) /* no points in cell */ Rast_set_null_value(ptr, 1, rtype); else { - head_id = Rast_get_c_value(index_array + n_offset, CELL_TYPE); + head_id = Rast_get_c_value((CELL*)index_array + n_offset, CELL_TYPE); node_id = head_id; n = 0; @@ -548,7 +548,7 @@ void write_skewness(struct BinIndex *bin_index, void *raster_row, CELL_TYPE)) /* no points in cell */ Rast_set_null_value(ptr, 1, rtype); else { - head_id = Rast_get_c_value(index_array + n_offset, CELL_TYPE); + head_id = Rast_get_c_value((CELL*)index_array + n_offset, CELL_TYPE); node_id = head_id; n = 0; /* count */ @@ -605,7 +605,7 @@ void write_trimmean(struct BinIndex *bin_index, void *raster_row, CELL_TYPE)) /* no points in cell */ Rast_set_null_value(ptr, 1, rtype); else { - head_id = Rast_get_c_value(index_array + n_offset, CELL_TYPE); + head_id = Rast_get_c_value((CELL*)index_array + n_offset, CELL_TYPE); node_id = head_id; n = 0; @@ -697,9 +697,9 @@ void write_values(struct PointBinning *point_binning, for (col = 0; col < cols; col++) { size_t offset = ((size_t)row * cols + col) * Rast_cell_size(rtype); double min = - Rast_get_d_value(point_binning->min_array + offset, rtype); + Rast_get_d_value((DCELL*)point_binning->min_array + offset, rtype); double max = - Rast_get_d_value(point_binning->max_array + offset, rtype); + Rast_get_d_value((DCELL*)point_binning->max_array + offset, rtype); Rast_set_d_value(ptr, max - min, rtype); ptr = G_incr_void_ptr(ptr, Rast_cell_size(rtype)); } @@ -714,7 +714,7 @@ void write_values(struct PointBinning *point_binning, int n = Rast_get_c_value(point_binning->n_array + n_offset, CELL_TYPE); double sum = - Rast_get_d_value(point_binning->sum_array + offset, rtype); + Rast_get_d_value((DCELL*)point_binning->sum_array + offset, rtype); if (n == 0) Rast_set_null_value(ptr, 1, rtype); @@ -765,12 +765,12 @@ void write_values(struct PointBinning *point_binning, continue; double sum_x = - Rast_get_d_value(point_binning->x_array + offset, rtype); + Rast_get_d_value((DCELL*)point_binning->x_array + offset, rtype); double sum_y = - Rast_get_d_value(point_binning->y_array + offset, rtype); + Rast_get_d_value((DCELL*)point_binning->y_array + offset, rtype); /* TODO: we do this also in mean writing */ double sum_z = - Rast_get_d_value(point_binning->sum_array + offset, rtype); + Rast_get_d_value((DCELL*)point_binning->sum_array + offset, rtype); /* We are not writing any categories. They are not needed * and potentially it is too much trouble to do it and it is diff --git a/raster/r.li/CMakeLists.txt b/raster/r.li/CMakeLists.txt new file mode 100644 index 00000000000..50dd4140aa7 --- /dev/null +++ b/raster/r.li/CMakeLists.txt @@ -0,0 +1,27 @@ +set(SUBDIRS1 + r.li.cwed + r.li.dominance + r.li.edgedensity + r.li.mpa + r.li.mps + r.li.padcv + r.li.padrange + r.li.padsd + r.li.patchdensity + r.li.patchnum + r.li.pielou + r.li.renyi + r.li.richness + r.li.shannon + r.li.shape + r.li.simpson) +# r.li.setup + +build_library_in_subdir(r.li.daemon + NAME grass_rli + DEPENDS grass_gis grass_raster + HTML_FILE_NAME "r.li.daemon") + +foreach(SUBDIR ${SUBDIRS1}) + build_program_in_subdir(${SUBDIR} DEPENDS grass_rli) +endforeach() diff --git a/raster/r.li/r.li.daemon/daemon.c b/raster/r.li/r.li.daemon/daemon.c index 2ddee5a5c43..d1f31d9b8a5 100644 --- a/raster/r.li/r.li.daemon/daemon.c +++ b/raster/r.li/r.li.daemon/daemon.c @@ -23,7 +23,7 @@ #include #include -#ifdef __MINGW32__ +#ifdef _WIN32 #include #else #include diff --git a/raster/r.li/r.li.daemon/worker.c b/raster/r.li/r.li.daemon/worker.c index 83bfa62cc67..c272334595e 100644 --- a/raster/r.li/r.li.daemon/worker.c +++ b/raster/r.li/r.li.daemon/worker.c @@ -22,7 +22,7 @@ #include #include -#ifdef __MINGW32__ +#ifdef _WIN32 #include #else #include diff --git a/raster/r.li/r.li.padrange/padrange.c b/raster/r.li/r.li.padrange/padrange.c index 39e4e8e79e9..cda1465853e 100644 --- a/raster/r.li/r.li.padrange/padrange.c +++ b/raster/r.li/r.li.padrange/padrange.c @@ -308,19 +308,19 @@ int calculate(int fd, struct area_entry *ad, double *result) cell_size_m = (((EW_DIST1 + EW_DIST2) / 2) / hd.cols) * (((NS_DIST1 + NS_DIST2) / 2) / hd.rows); - /* get min and max patch size */ - min = INFINITY; - max = -INFINITY; - for (old_pid = 1; old_pid <= pid; old_pid++) { - if (pst[old_pid].count > 0) { - area_p = cell_size_m * pst[old_pid].count / 10000; - if (min > area_p) - min = area_p; - if (max < area_p) - max = area_p; - } - } - *result = max - min; + /* get min and max patch size */ + min = INFINITY; + max = -INFINITY; + for (old_pid = 1; old_pid <= pid; old_pid++) { + if (pst[old_pid].count > 0) { + area_p = cell_size_m * pst[old_pid].count / 10000; + if (min > area_p) + min = area_p; + if (max < area_p) + max = area_p; + } + } + *result = max - min; } else Rast_set_d_null_value(result, 1); @@ -542,19 +542,19 @@ int calculateD(int fd, struct area_entry *ad, double *result) cell_size_m = (((EW_DIST1 + EW_DIST2) / 2) / hd.cols) * (((NS_DIST1 + NS_DIST2) / 2) / hd.rows); - /* get min and max patch size */ - min = INFINITY; - max = -INFINITY; - for (old_pid = 1; old_pid <= pid; old_pid++) { - if (pst[old_pid].count > 0) { - area_p = cell_size_m * pst[old_pid].count / 10000; - if (min > area_p) - min = area_p; - if (max < area_p) - max = area_p; - } - } - *result = max - min; + /* get min and max patch size */ + min = INFINITY; + max = -INFINITY; + for (old_pid = 1; old_pid <= pid; old_pid++) { + if (pst[old_pid].count > 0) { + area_p = cell_size_m * pst[old_pid].count / 10000; + if (min > area_p) + min = area_p; + if (max < area_p) + max = area_p; + } + } + *result = max - min; } else Rast_set_d_null_value(result, 1); @@ -776,19 +776,19 @@ int calculateF(int fd, struct area_entry *ad, double *result) cell_size_m = (((EW_DIST1 + EW_DIST2) / 2) / hd.cols) * (((NS_DIST1 + NS_DIST2) / 2) / hd.rows); - /* get min and max patch size */ - min = INFINITY; - max = -INFINITY; - for (old_pid = 1; old_pid <= pid; old_pid++) { - if (pst[old_pid].count > 0) { - area_p = cell_size_m * pst[old_pid].count / 10000; - if (min > area_p) - min = area_p; - if (max < area_p) - max = area_p; - } - } - *result = max - min; + /* get min and max patch size */ + min = INFINITY; + max = -INFINITY; + for (old_pid = 1; old_pid <= pid; old_pid++) { + if (pst[old_pid].count > 0) { + area_p = cell_size_m * pst[old_pid].count / 10000; + if (min > area_p) + min = area_p; + if (max < area_p) + max = area_p; + } + } + *result = max - min; } else Rast_set_d_null_value(result, 1); diff --git a/raster/r.mapcalc/CMakeLists.txt b/raster/r.mapcalc/CMakeLists.txt new file mode 100644 index 00000000000..f360fa3abe4 --- /dev/null +++ b/raster/r.mapcalc/CMakeLists.txt @@ -0,0 +1,22 @@ + +FLEX_TARGET(mapcalc.yy.c mapcalc.l ${CMAKE_CURRENT_BINARY_DIR}/mapcalc.yy.c ) +BISON_TARGET(mapcalc.tab.c mapcalc.y ${CMAKE_CURRENT_BINARY_DIR}/mapcalc.tab.c ) +ADD_FLEX_BISON_DEPENDENCY(mapcalc.yy.c mapcalc.tab.c) +SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_BINARY_DIR}/mapcalc.yy.c GENERATED) +SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_BINARY_DIR}/mapcalc.tab.c GENERATED) + +set(r_mapcalc_common_SRCS + column_shift.c evaluate.c expression.c function.c main.c xrowcol.c + ${CMAKE_CURRENT_BINARY_DIR}/mapcalc.tab.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) + +build_program(NAME r.mapcalc + SOURCES "${r_mapcalc_SRCS}" + DEPENDS grass_gis grass_btree grass_calc grass_raster) + +#build_program(NAME r3.mapcalc +# SOURCES "${r3_mapcalc_SRCS}" +# DEPENDS grass_gis grass_btree grass_calc grass_raster3d) diff --git a/raster/r.out.gdal/main.c b/raster/r.out.gdal/main.c index 5021c26e9e1..b4b5a8de127 100644 --- a/raster/r.out.gdal/main.c +++ b/raster/r.out.gdal/main.c @@ -1047,11 +1047,11 @@ double set_default_nodata_value(GDALDataType datatype, double min, double max) case GDT_Float32: case GDT_CFloat32: - return NAN; + return INFINITY; case GDT_Float64: case GDT_CFloat64: - return NAN; + return INFINITY; default: return 0; diff --git a/raster/r.series.accumulate/main.c b/raster/r.series.accumulate/main.c index 2c526c30257..f4a531f6632 100644 --- a/raster/r.series.accumulate/main.c +++ b/raster/r.series.accumulate/main.c @@ -171,8 +171,9 @@ int main(int argc, char *argv[]) if (G_parser(argc, argv)) exit(EXIT_FAILURE); - lo = -INFINITY; + lo = INFINITY; hi = INFINITY; + method = METHOD_GDD; if (G_strncasecmp(parm.method->answer, "gdd", 3) == 0) method = METHOD_GDD; diff --git a/raster/r.sim/CMakeLists.txt b/raster/r.sim/CMakeLists.txt new file mode 100644 index 00000000000..1e87178a9d3 --- /dev/null +++ b/raster/r.sim/CMakeLists.txt @@ -0,0 +1,15 @@ + +build_library_in_subdir(simlib + NAME grass_sim + DEPENDS grass_datetime grass_raster grass_vector + HEADERS "waterglobs.h" "simlib.h") + +build_program_in_subdir( + r.sim.water + DEPENDS grass_gis grass_gmath grass_sim + INCLUDES "../simlib") + +build_program_in_subdir( + r.sim.sediment + DEPENDS grass_gis grass_gmath grass_sim + INCLUDES "../simlib") diff --git a/raster/r.sim/simlib/waterglobs.h b/raster/r.sim/simlib/waterglobs.h index f1af5965027..5311081c327 100644 --- a/raster/r.sim/simlib/waterglobs.h +++ b/raster/r.sim/simlib/waterglobs.h @@ -6,6 +6,10 @@ #define UNDEF -9999 #include +#ifdef _MSC_VER +#undef min +#undef max +#endif extern char *elevin; extern char *dxin; diff --git a/raster/r.spread/CMakeLists.txt b/raster/r.spread/CMakeLists.txt new file mode 100644 index 00000000000..75381ff7aeb --- /dev/null +++ b/raster/r.spread/CMakeLists.txt @@ -0,0 +1,8 @@ +set(r_spread_SRCS collect_ori.c deleteHa.c fixHa.c + get_minHa.c insert2Ha.c insertHa.c main.c pick_dist.c + pick_ignite.c ram2out.c replaceHa.c select_linksB.c spot.c spread.c + ) + +build_program(NAME r.spread + SOURCES "${r_spread_SRCS}" + DEPENDS grass_gis grass_raster grass_display) diff --git a/raster/r.terraflow/common.cpp b/raster/r.terraflow/common.cpp index 854193476e0..aae8f681e41 100644 --- a/raster/r.terraflow/common.cpp +++ b/raster/r.terraflow/common.cpp @@ -22,7 +22,7 @@ #endif #include -#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) || defined (_MSC_VER) #include #else #include diff --git a/raster/r.terraflow/direction.h b/raster/r.terraflow/direction.h index d98d463f7af..609b8d5c734 100644 --- a/raster/r.terraflow/direction.h +++ b/raster/r.terraflow/direction.h @@ -21,7 +21,7 @@ #include -#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) || defined(_MSC_VER) #include #else #include diff --git a/raster/r.terraflow/filldepr.cpp b/raster/r.terraflow/filldepr.cpp index 82390d374b4..66b006d4116 100644 --- a/raster/r.terraflow/filldepr.cpp +++ b/raster/r.terraflow/filldepr.cpp @@ -22,7 +22,10 @@ #include "unionFind.h" #include "common.h" -#define FLOOD_DEBUG if (0) +#ifdef _MSC_VER +#pragma warning(default:4716) +#endif +#define FLOOD_DEBUG if(0) /************************************************************/ /* INPUT: stream containing the edgelist of watershed adjacency graph diff --git a/raster/r.terraflow/flow.cpp b/raster/r.terraflow/flow.cpp index 83b7de0c378..68db9399184 100644 --- a/raster/r.terraflow/flow.cpp +++ b/raster/r.terraflow/flow.cpp @@ -48,8 +48,26 @@ void computeFlowAccumulation(AMI_STREAM *fillStream, Rtimer rt, rtTotal; AMI_STREAM *sweepstr; - rt_start(rtTotal); - assert(fillStream && outstr == NULL); + rt_start(rtTotal); + assert(fillStream && outstr == NULL); + if (stats) { + stats->comment("------------------------------"); + stats->comment("COMPUTING FLOW ACCUMULATION"); + } + + { /* timestamp stats file and print memory */ + time_t t = time(NULL); + char buf[BUFSIZ]; + if(t == (time_t)-1) { + perror("time"); + exit(1); + } +#ifdef _WIN32 + strcpy(buf, ctime(&t)); +#else + ctime_r(&t, buf); + buf[24] = '\0'; +#endif if (stats) { stats->comment("------------------------------"); stats->comment("COMPUTING FLOW ACCUMULATION"); diff --git a/raster/r.terraflow/main.cpp b/raster/r.terraflow/main.cpp index a831de23f6b..fa80134e6c6 100644 --- a/raster/r.terraflow/main.cpp +++ b/raster/r.terraflow/main.cpp @@ -297,8 +297,8 @@ void record_args(int argc, char **argv) exit(1); } -#ifdef __MINGW32__ - strcpy(buf, ctime(&t)); +#ifdef _WIN32 + strcpy(buf, ctime(&t)); #else ctime_r(&t, buf); buf[24] = '\0'; diff --git a/raster/r.terraflow/stats.cpp b/raster/r.terraflow/stats.cpp index 5325d72e466..ba804679bba 100644 --- a/raster/r.terraflow/stats.cpp +++ b/raster/r.terraflow/stats.cpp @@ -20,8 +20,10 @@ #include #include #include +#ifndef _MSC_VER #include -#ifndef __MINGW32__ +#endif +#ifndef _WIN32 #include #endif #include diff --git a/raster/r.to.vect/lines_io.c b/raster/r.to.vect/lines_io.c index 31dad0b903d..a8120da67b5 100644 --- a/raster/r.to.vect/lines_io.c +++ b/raster/r.to.vect/lines_io.c @@ -26,7 +26,7 @@ #include #include -#ifdef __MINGW32__ +#ifdef _WIN32 #include #else #include diff --git a/raster/r.to.vect/util.c b/raster/r.to.vect/util.c index 2a1498d88ec..93b629853b5 100644 --- a/raster/r.to.vect/util.c +++ b/raster/r.to.vect/util.c @@ -1,7 +1,7 @@ #include #include -#ifdef __MINGW32__ +#ifdef _WIN32 #include #else #include diff --git a/raster/r.univar/CMakeLists.txt b/raster/r.univar/CMakeLists.txt new file mode 100644 index 00000000000..c0d2f41a86b --- /dev/null +++ b/raster/r.univar/CMakeLists.txt @@ -0,0 +1,15 @@ + +set(r_univar_SRCS + r.univar_main.c sort.c stats.c + ) +set(r3_univar_SRCS + r3.univar_main.c sort.c stats.c) + +build_program(NAME r.univar + SOURCES "${r_univar_SRCS}" + DEPENDS grass_gis grass_raster) + +build_program(NAME r3.univar + SOURCES "${r3_univar_SRCS}" + DEPENDS grass_gis grass_raster3d) + diff --git a/raster/r.univar/r.univar_main.c b/raster/r.univar/r.univar_main.c index e56301a1364..de2a08f526f 100644 --- a/raster/r.univar/r.univar_main.c +++ b/raster/r.univar/r.univar_main.c @@ -207,8 +207,8 @@ int main(int argc, char *argv[]) /* table field separator */ zone_info.sep = G_option_to_separator(param.separator); - zone_info.min = 0; - zone_info.max = 0; + zone_info.min = NAN; + zone_info.max = NAN; zone_info.n_zones = 0; /* setting up thread workspace */ diff --git a/raster/r.univar/r3.univar_main.c b/raster/r.univar/r3.univar_main.c index 28fdb69acd5..f255ebe7431 100644 --- a/raster/r.univar/r3.univar_main.c +++ b/raster/r.univar/r3.univar_main.c @@ -146,8 +146,8 @@ int main(int argc, char *argv[]) dmin = NAN; dmax = NAN; - zone_info.min = 0; - zone_info.max = 0; + zone_info.min = NAN; + zone_info.max = NAN; zone_info.n_zones = 0; /* open 3D zoning raster with default region */ diff --git a/raster/r.viewshed/statusstructure.cpp b/raster/r.viewshed/statusstructure.cpp index 921b7bbecae..dd4e733cb81 100644 --- a/raster/r.viewshed/statusstructure.cpp +++ b/raster/r.viewshed/statusstructure.cpp @@ -38,8 +38,8 @@ #include #include #include - -extern "C" { +extern "C" +{ #include #include } diff --git a/raster/r.watershed/CMakeLists.txt b/raster/r.watershed/CMakeLists.txt new file mode 100644 index 00000000000..2a69c6d10b6 --- /dev/null +++ b/raster/r.watershed/CMakeLists.txt @@ -0,0 +1,11 @@ +build_program_in_subdir(ram +DEPENDS grass_gis grass_raster grass_btree2 grass_gmath +RUNTIME_OUTPUT_DIR etc/r.watershed) + +build_program_in_subdir(seg +DEPENDS grass_gis grass_raster grass_gmath grass_segment +RUNTIME_OUTPUT_DIR etc/r.watershed) + +build_program_in_subdir(front +NAME r.watershed +DEPENDS grass_gis grass_raster) \ No newline at end of file diff --git a/raster3d/CMakeLists.txt b/raster3d/CMakeLists.txt new file mode 100644 index 00000000000..266e0e9861c --- /dev/null +++ b/raster3d/CMakeLists.txt @@ -0,0 +1,97 @@ + +build_program_in_subdir( + r3.cross.rast + DEPENDS grass_gis grass_raster3d ) + +add_subdirectory(r3.flow) + +build_program_in_subdir( + r3.gradient + DEPENDS grass_gis grass_raster3d ) + +build_program_in_subdir( + r3.gwflow + DEPENDS grass_gis grass_raster3d grass_gpde ) + +build_program_in_subdir( + r3.in.ascii + DEPENDS grass_gis grass_raster3d ) + +build_program_in_subdir( + r3.in.bin + DEPENDS grass_gis grass_raster3d ) + +build_program_in_subdir( + r3.info + DEPENDS grass_gis grass_raster3d ) + +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) + +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 ) +endif() + +build_program_in_subdir( + r3.retile + DEPENDS grass_gis grass_raster3d ) + +build_program_in_subdir( + r3.stats + DEPENDS grass_gis grass_raster3d ) + +build_program_in_subdir( + r3.support + DEPENDS grass_gis grass_raster3d ) + +build_program_in_subdir( + r3.timestamp + DEPENDS grass_gis grass_raster3d ) + +build_program_in_subdir( + r3.to.rast + DEPENDS grass_gis grass_raster3d ) + +build_program_in_subdir( + r3.out.vtk + DEPENDS grass_gis grass_raster3d ) + +build_program_in_subdir( + r3.mkdspf + DEPENDS grass_gis grass_raster3d grass_gpde grass_dspf) + +build_program_in_subdir( + r3.in.lidar + DEPENDS grass_gis grass_raster3d grass_segment + PRIMARY_DEPENDS LIBLAS) + +build_program_in_subdir( + r3.out.netcdf + DEPENDS grass_gis grass_raster3d + PRIMARY_DEPENDS NETCDF) + +# mode_t is not available on msvc. Discuss +if(NOT MSVC) + build_program_in_subdir( + r3.in.v5d + DEPENDS grass_gis grass_raster3d) +endif() \ No newline at end of file diff --git a/raster3d/r3.flow/CMakeLists.txt b/raster3d/r3.flow/CMakeLists.txt new file mode 100644 index 00000000000..7a01819e898 --- /dev/null +++ b/raster3d/r3.flow/CMakeLists.txt @@ -0,0 +1,14 @@ +set(r3_flow_SRCS + main.c flowline.c integrate.c interpolate.c voxel_traversal.c + ) + +build_program(NAME r3.flow + SOURCES "${r3_flow_SRCS}" + DEPENDS grass_gis grass_raster3d grass_vector ) + +set(test_r3flow_SRCS + test_main.c flowline.c integrate.c interpolate.c voxel_traversal.c) + +build_program(NAME test.r3flow + SOURCES "${test_r3flow_SRCS}" + DEPENDS grass_gis grass_raster3d grass_vector) diff --git a/raster3d/r3.in.lidar/info.c b/raster3d/r3.in.lidar/info.c index 00511aad217..ce3fba3ba08 100644 --- a/raster3d/r3.in.lidar/info.c +++ b/raster3d/r3.in.lidar/info.c @@ -101,7 +101,7 @@ int scan_bounds(LASReaderH LAS_reader, int shell_style, int extents, int update, first = TRUE; /* init to nan in case no points are found */ - min_x = max_x = min_y = max_y = min_z = max_z = NAN; + min_x = max_x = min_y = max_y = min_z = max_z = INFINITY; G_verbose_message(_("Scanning data ...")); diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt new file mode 100644 index 00000000000..37106770768 --- /dev/null +++ b/scripts/CMakeLists.txt @@ -0,0 +1,102 @@ +set(script_DIRS + r.shade + d.correlate + d.frame + d.out.file + d.to.rast + d.polar + d.rast.edit + d.rast.leg + d.redraw + d.shade + d.what.rast + d.what.vect + db.dropcolumn + db.droptable + db.in.ogr + db.out.ogr + db.test + db.univar + g.extension + g.extension.all + g.manual + g.search.modules + i.colors.enhance + i.image.mosaic + i.in.spotvgt + i.oif + i.pansharpen + i.spectral + i.tasscap + m.proj + r.blend + r.buffer.lowmem + r.colors.stddev + r.fillnulls + r.grow + r.import + r.in.aster + r.in.srtm + r.mask + r.out.xyz + r.pack + r.plane + r.reclass.area + r.rgb + r.tileset + r.unpack + r3.in.xyz + v.build.all + v.centroids + v.clip + v.db.addcolumn + v.db.addtable + v.db.join + v.db.dropcolumn + v.db.droprow + v.db.droptable + v.db.renamecolumn + v.db.reconnect.all + v.db.univar + v.db.update + v.dissolve + v.import + v.in.e00 + v.in.geonames + v.in.lines + v.in.mapgen + v.in.wfs + v.rast.stats + v.report + v.pack + v.to.lines + v.unpack + v.what.strds + v.what.vect + wxpyimgview + r.mapcalc.simple + r.in.wms + ) + +foreach(script_DIR ${script_DIRS}) + build_script_in_subdir(${script_DIR}) +endforeach() + +file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms + DESTINATION ${CMAKE_BINARY_DIR}/etc/) + +file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/wxpyimgview/wxpyimgview_gui.py + DESTINATION ${CMAKE_BINARY_DIR}/etc/) + +add_custom_target(r.in.wms_files + COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/etc/r.in.wms/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms/wms_base.py ${GISBASE}/etc/r.in.wms/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms/wms_cap_parsers.py ${GISBASE}/etc/r.in.wms/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms/wms_drv.py ${GISBASE}/etc/r.in.wms/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms/wms_gdal_drv.py ${GISBASE}/etc/r.in.wms/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms/srs.py ${GISBASE}/etc/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 scripts) \ No newline at end of file diff --git a/temporal/CMakeLists.txt b/temporal/CMakeLists.txt new file mode 100644 index 00000000000..22f03ce97c7 --- /dev/null +++ b/temporal/CMakeLists.txt @@ -0,0 +1,56 @@ +set(temporal_DIRS + t.create + t.support + t.topology + t.list + t.info + t.merge + t.remove + t.sample + t.register + t.unregister + t.rast.accumulate + t.rast.accdetect + t.rast.aggregate + t.rast.aggregate.ds + t.rast.colors + t.rast.contour + t.rast.to.rast3 + t.rast.univar + t.rast.list + t.rast.mapcalc + t.rast.algebra + t.rast.neighbors + t.rast.series + t.rast.export + t.rast.out.vtk + t.rast.import + t.rast.gapfill + t.rast.extract + t.rast.to.vect + t.rast.what + t.rast3d.list + t.rast3d.extract + t.rast3d.mapcalc + t.rast3d.algebra + t.rast3d.univar + t.rename + t.select + t.snap + t.shift + t.vect.list + t.vect.db.select + t.vect.export + t.vect.extract + t.vect.algebra + t.vect.import + t.vect.what.strds + t.vect.observe.strds + t.vect.univar + ) + +build_program_in_subdir(t.connect DEPENDS grass_gis grass_temporal) + +foreach(temporal_DIR ${temporal_DIRS}) + build_script_in_subdir(${temporal_DIR}) +endforeach() diff --git a/thirdparty/CMakeLists.txt b/thirdparty/CMakeLists.txt new file mode 100644 index 00000000000..e60264360f7 --- /dev/null +++ b/thirdparty/CMakeLists.txt @@ -0,0 +1,180 @@ +find_package(FLEX REQUIRED) + +find_package(BISON REQUIRED) + +find_package(PROJ REQUIRED) +add_library(PROJ INTERFACE IMPORTED GLOBAL) +set_property(TARGET PROJ PROPERTY INTERFACE_LINK_LIBRARIES ${PROJ_LIBRARY${find_library_suffix}} ) +set_property(TARGET PROJ PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PROJ_INCLUDE_DIR} ) + +find_package(GDAL REQUIRED) +add_library(GDAL INTERFACE IMPORTED GLOBAL) +set_property(TARGET GDAL PROPERTY INTERFACE_LINK_LIBRARIES ${GDAL_LIBRARY} ) +set_property(TARGET GDAL PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${GDAL_INCLUDE_DIR} ) + +find_package(PNG REQUIRED) +add_library(LIBPNG INTERFACE IMPORTED GLOBAL) +set_property(TARGET LIBPNG PROPERTY INTERFACE_LINK_LIBRARIES ${PNG_LIBRARY${find_library_suffix}} ) +set_property(TARGET LIBPNG PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PNG_INCLUDE_DIR} ) + +find_package(JPEG) +if(JPEG_FOUND) + add_library(LIBJPEG INTERFACE IMPORTED GLOBAL) + set_property(TARGET LIBJPEG PROPERTY INTERFACE_LINK_LIBRARIES ${JPEG_LIBRARY${find_library_suffix}} ) + set_property(TARGET LIBJPEG PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${JPEG_INCLUDE_DIR} ) +endif() +find_package(ZLIB REQUIRED) +add_library(ZLIB INTERFACE IMPORTED GLOBAL) +set_property(TARGET ZLIB PROPERTY INTERFACE_LINK_LIBRARIES ${ZLIB_LIBRARY${find_library_suffix}} ) +set_property(TARGET ZLIB PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${ZLIB_INCLUDE_DIR} ) +if(UNIX) +find_library(M_LIBRARY m) +add_library(LIBM INTERFACE IMPORTED GLOBAL) +set_property(TARGET LIBM PROPERTY INTERFACE_LINK_LIBRARIES ${M_LIBRARY} ) +mark_as_advanced(M_LIBRARY) +endif() + +find_package(Freetype REQUIRED) +add_library(FREETYPE INTERFACE IMPORTED GLOBAL) +set_property(TARGET FREETYPE PROPERTY INTERFACE_LINK_LIBRARIES ${FREETYPE_LIBRARY${find_library_suffix}} ) +set_property(TARGET FREETYPE PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${FREETYPE_INCLUDE_DIRS} ) + +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() + +if(WITH_CAIRO) + find_package(Cairo REQUIRED) + add_library(CAIRO INTERFACE IMPORTED GLOBAL) + set_property(TARGET CAIRO PROPERTY INTERFACE_LINK_LIBRARIES ${CAIRO_LIBRARIES} ) + set_property(TARGET CAIRO PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${CAIRO_INCLUDE_DIRS} ) +endif() + +if(WITH_X11) + find_package(X11 REQUIRED) + add_library(X11 INTERFACE IMPORTED GLOBAL) + set_property(TARGET X11 PROPERTY INTERFACE_LINK_LIBRARIES ${X11_LIBRARIES} ) + set_property(TARGET X11 PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${X11_INCLUDE_DIR}) +endif() + +if(WIN32) + find_package(ODBC QUIET) + if(ODBC_FOUND) + add_library(ODBC INTERFACE IMPORTED GLOBAL) + set_property(TARGET ODBC PROPERTY INTERFACE_LINK_LIBRARIES ${ODBC_LIBRARIES} ) + set_property(TARGET PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${ODBC_INCLUDE_DIRS}) + endif() +endif() + +find_package(TIFF REQUIRED) +add_library(TIFF INTERFACE IMPORTED GLOBAL) +set_property(TARGET TIFF PROPERTY INTERFACE_LINK_LIBRARIES ${TIFF_LIBRARY${find_library_suffix}} ) +set_property(TARGET TIFF PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${TIFF_INCLUDE_DIR}) + +find_package(Iconv QUIET) +if(ICONV_FOUND) +add_library(ICONV INTERFACE IMPORTED GLOBAL) +set_property(TARGET ICONV PROPERTY INTERFACE_LINK_LIBRARIES ${ICONV_LIBRARIES} ) +set_property(TARGET ICONV PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${ICONV_INCLUDE_DIR}) +#if(ICONV_SECOND_ARGUMENT_IS_CONST) +#set() update this value in include/config.cmake.in +endif() + +if(WITH_BZLIB) + find_package(BZip2) + if(BZIP2_FOUND) + add_library(BZIP2 INTERFACE IMPORTED GLOBAL) + set_property(TARGET BZIP2 PROPERTY INTERFACE_LINK_LIBRARIES ${BZIP2_LIBRARY${find_library_suffix}} ) + set_property(TARGET BZIP2 PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${BZIP2_INCLUDE_DIR}) + endif() +endif() + +if(WITH_BLAS) + find_package(BLAS) + if(BLAS_FOUND) + add_library(BLAS INTERFACE IMPORTED GLOBAL) + set_property(TARGET BLAS PROPERTY INTERFACE_LINK_LIBRARIES ${BLAS_LIBRARIES} ) + endif() +endif() + +if(WITH_LAPACK) + find_package(LAPACK) + if(LAPACK_FOUND) + add_library(LAPACK INTERFACE IMPORTED GLOBAL) + set_property(TARGET LAPACK PROPERTY INTERFACE_LINK_LIBRARIES ${LAPACK_LIBRARIES} ) + endif() +endif() + +if(WITH_OPENGL) + find_package(OpenGL REQUIRED) + add_library(OPENGL INTERFACE IMPORTED GLOBAL) + set_property(TARGET OPENGL PROPERTY INTERFACE_LINK_LIBRARIES ${OPENGL_LIBRARIES} ) + set_property(TARGET OPENGL PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${OPENGL_INCLUDE_DIR} ) +endif() + +if(WITH_POSTGRES) + find_package(PostgreSQL REQUIRED) + add_library(POSTGRES INTERFACE IMPORTED GLOBAL) + set_property(TARGET POSTGRES PROPERTY INTERFACE_LINK_LIBRARIES ${PostgreSQL_LIBRARY} ) + set_property(TARGET POSTGRES PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PostgreSQL_INCLUDE_DIR} ) +endif() + +if(WITH_SQLITE) + find_package(SQLite REQUIRED) + add_library(SQLITE INTERFACE IMPORTED GLOBAL) + set_property(TARGET SQLITE PROPERTY INTERFACE_LINK_LIBRARIES ${SQLITE_LIBRARY} ) + set_property(TARGET SQLITE PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${SQLITE_INCLUDE_DIRS} ) +endif() + +find_package(PDAL QUIET) +if(PDAL_FOUND) +add_library(PDAL INTERFACE IMPORTED GLOBAL) +set_property(TARGET PDAL PROPERTY INTERFACE_LINK_LIBRARIES ${PDAL_LIBRARIES} ) +set_property(TARGET PDAL PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PDAL_INCLUDE_DIRS} ) +endif() + +find_package(LibLAS QUIET) +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(NetCDF QUIET) +if(NETCDF_FOUND) + add_library(NETCDF INTERFACE IMPORTED GLOBAL) + set_property(TARGET NETCDF PROPERTY INTERFACE_LINK_LIBRARIES ${NetCDF_LIBRARY} ) + set_property(TARGET NETCDF PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${NetCDF_INCLUDE_DIR} ) +endif() + +find_package(GEOS REQUIRED) +add_library(GEOS INTERFACE IMPORTED GLOBAL) +set_property(TARGET GEOS PROPERTY INTERFACE_LINK_LIBRARIES ${GEOS_C_LIBRARY${find_library_suffix}} ) +set_property(TARGET GEOS PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${GEOS_INCLUDE_DIR} ) + +set(THREADS_PREFER_PTHREAD_FLAG ON) +find_package(Threads) +if(Threads_FOUND) + add_library(PTHREAD INTERFACE IMPORTED GLOBAL) + if(THREADS_HAVE_PTHREAD_ARG) + set_property(TARGET PTHREAD PROPERTY INTERFACE_COMPILE_OPTIONS "-pthread") + endif() + if(CMAKE_THREAD_LIBS_INIT) + set_property(TARGET PTHREAD PROPERTY INTERFACE_LINK_LIBRARIES "${CMAKE_THREAD_LIBS_INIT}") + endif() +endif() + +if(MSVC) + find_package(PCRE REQUIRED) + 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 (PythonLibs REQUIRED ) +set(Python_ADDITIONAL_VERSIONS 3.5 3.6) +find_package (PythonInterp REQUIRED ) +# find_package ( Numpy ) diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt new file mode 100644 index 00000000000..af18a2a4f1f --- /dev/null +++ b/utils/CMakeLists.txt @@ -0,0 +1,24 @@ +file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/mkhtml.py DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) + +set(current_time_s_ms_SRCS "timer/main.c") +if(MSVC) + list(APPEND current_time_s_ms_SRCS "timer/msvc/gettimeofday.c") +endif() +build_program_in_subdir(timer +NAME current_time_s_ms +DEPENDS grass_gis +SOURCES "${current_time_s_ms_SRCS}" +RUNTIME_OUTPUT_DIR etc) + +build_program(NAME g.echo + SOURCES g.echo.c + RUNTIME_OUTPUT_DIR tools + PACKAGE "NONE") + add_dependencies(g.echo python_doc_tools) + add_custom_target(python_doc_tools + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/mkhtml.py ${GISBASE}/tools + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/g.html2man/g.html2man.py ${GISBASE}/tools + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/g.html2man/ghtml.py ${GISBASE}/tools + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/g.html2man/ggroff.py ${GISBASE}/tools + ) + diff --git a/utils/timer/main.c b/utils/timer/main.c index 72a1f9c3813..38fe0926b0b 100644 --- a/utils/timer/main.c +++ b/utils/timer/main.c @@ -12,8 +12,13 @@ * for details. * *****************************************************************************/ - +#ifdef _MSC_VER +#include +#include +#else #include +#endif + #include #include diff --git a/vector/CMakeLists.txt b/vector/CMakeLists.txt new file mode 100644 index 00000000000..52f2c5715f3 --- /dev/null +++ b/vector/CMakeLists.txt @@ -0,0 +1,212 @@ + +build_program_in_subdir(v.buffer DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.build DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.build.polylines DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.category DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.class DEPENDS grass_gis grass_vector grass_arraystats) + +build_program_in_subdir(v.clean DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.cluster DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.colors DEPENDS grass_gis grass_vector grass_raster3d) + +build_program_in_subdir(v.colors.out DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.db.connect DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.db.select DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.decimate DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.delaunay DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.distance DEPENDS grass_gis grass_vector grass_gmath) + +build_program_in_subdir(v.drape DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.edit DEPENDS grass_gis grass_vector grass_vedit) + +build_program_in_subdir(v.extract DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.extrude DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.generalize DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.hull DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.info DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.in.ascii DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.in.db DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.in.dxf DEPENDS grass_gis grass_vector) + +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_vector + PRIMARY_DEPENDS PDAL) + +build_program_in_subdir(v.in.region DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.kcv DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.kernel DEPENDS grass_gis grass_vector ) + +build_program_in_subdir(v.label DEPENDS grass_gis grass_vector grass_display) + +build_program_in_subdir(v.label.sa DEPENDS grass_gis grass_vector grass_display) + +build_program_in_subdir(v.proj DEPENDS grass_gis grass_vector grass_gproj) + +build_program_in_subdir(v.profile DEPENDS grass_gis grass_vector) + +add_subdirectory(v.lrs) + +build_program_in_subdir(v.mkgrid DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.neighbors DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.net DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.net.alloc DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.net.allpairs DEPENDS grass_gis grass_vector grass_neta) + +build_program_in_subdir(v.net.bridge DEPENDS grass_gis grass_vector grass_neta) + +build_program_in_subdir(v.net.centrality DEPENDS grass_gis grass_vector grass_neta) + +build_program_in_subdir(v.net.components DEPENDS grass_gis grass_vector grass_neta) + +build_program_in_subdir(v.net.connectivity DEPENDS grass_gis grass_vector grass_neta) + +build_program_in_subdir(v.net.distance DEPENDS grass_gis grass_vector grass_neta) + +build_program_in_subdir(v.net.flow DEPENDS grass_gis grass_vector grass_neta) + +build_program_in_subdir(v.net.iso DEPENDS grass_gis grass_vector grass_neta) + +build_program_in_subdir(v.net.path DEPENDS grass_gis grass_vector grass_neta) + +build_program_in_subdir(v.net.salesman DEPENDS grass_gis grass_vector grass_neta) + +build_program_in_subdir(v.net.spanningtree DEPENDS grass_gis grass_vector grass_neta) + +build_program_in_subdir(v.net.steiner DEPENDS grass_gis grass_vector grass_neta) + +build_program_in_subdir(v.net.timetable DEPENDS grass_gis grass_vector grass_neta) + +build_program_in_subdir(v.net.visibility DEPENDS grass_gis grass_vector grass_neta) + +build_program_in_subdir(v.normal DEPENDS grass_gis grass_vector grass_cdhc) + +build_program_in_subdir(v.out.ascii DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.out.dxf DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.out.pov DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.out.svg DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.out.vtk DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.outlier DEPENDS grass_gis grass_vector grass_lidar) + +build_program_in_subdir(v.overlay DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.parallel DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.patch DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.perturb DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.split DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.qcount DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.random DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.reclass DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.rectify DEPENDS grass_gis grass_vector grass_imagery) + +build_program_in_subdir(v.sample DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.segment DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.select DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.support DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.surf.bspline DEPENDS grass_gis grass_vector grass_lidar grass_gpde) + +build_program_in_subdir(v.surf.idw DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.surf.rst + DEPENDS grass_gis grass_vector grass_interpdata grass_interpfl grass_qtree) + +build_program_in_subdir(v.transform DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.timestamp DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.to.3d DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.to.db DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.to.points DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.to.rast DEPENDS grass_gis grass_vector grass_raster) + +build_program_in_subdir(v.to.rast3 DEPENDS grass_gis grass_vector grass_raster3d) + +build_program_in_subdir(v.type DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.univar DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.voronoi DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.what DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.what.rast DEPENDS grass_gis grass_vector grass_raster) + +build_program_in_subdir(v.what.rast3 DEPENDS grass_gis grass_vector grass_raster3d) + +build_program_in_subdir(v.vect.stats DEPENDS grass_gis grass_vector grass_stats) + +build_program_in_subdir(v.vol.rst + DEPENDS grass_gis grass_vector grass_raster3d grass_bitmap) + +build_program_in_subdir(v.out.ogr DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.in.ogr DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.external DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.external.out DEPENDS grass_gis grass_vector) + +build_program_in_subdir(v.in.lidar DEPENDS grass_gis grass_vector PRIMARY_DEPENDS LIBLAS) + +build_program_in_subdir(v.lidar.correction DEPENDS grass_gis grass_vector grass_lidar + PRIMARY_DEPENDS LIBLAS) + +build_program_in_subdir(v.lidar.edgedetection + DEPENDS grass_gis grass_vector grass_lidar grass_dbmibase grass_gmath + PRIMARY_DEPENDS LIBLAS) + +build_program_in_subdir(v.lidar.growing DEPENDS grass_gis grass_vector PRIMARY_DEPENDS LIBLAS) + +build_program_in_subdir(v.out.lidar DEPENDS grass_gis grass_vector PRIMARY_DEPENDS LIBLAS) + +build_program_in_subdir(v.out.postgis DEPENDS grass_gis grass_vector PRIMARY_DEPENDS POSTGRES) + +if(WITH_OPENDWG) + build_program_in_subdir(v.in.dwg DEPENDS grass_gis grass_vector) +endif() \ No newline at end of file diff --git a/vector/v.cluster/main.c b/vector/v.cluster/main.c index 49c7535beca..7c9ffb75ebb 100644 --- a/vector/v.cluster/main.c +++ b/vector/v.cluster/main.c @@ -256,7 +256,7 @@ int main(int argc, char *argv[]) c[2] = 0.0; n = 0; sum = sumsq = 0; - min = INFINITY; + min = NAN; max = 0; kd = G_malloc(minpnts * sizeof(double)); ki = G_malloc(minpnts * sizeof(int)); @@ -462,7 +462,7 @@ int main(int argc, char *argv[]) c[2] = 0.0; n = 0; sum = sumsq = 0; - min = INFINITY; + min = NAN; max = 0; kd = G_malloc(minpnts * sizeof(double)); ki = G_malloc(minpnts * sizeof(int)); diff --git a/vector/v.distance/distance.c b/vector/v.distance/distance.c index 74c6d88a40d..101b9a003da 100644 --- a/vector/v.distance/distance.c +++ b/vector/v.distance/distance.c @@ -11,7 +11,7 @@ int get_line_box(const struct line_pnts *Points, struct bound_box *box) int i; if (Points->n_points == 0) { - box->E = box->W = box->N = box->S = box->T = box->B = NAN; + box->E = box->W = box->N = box->S = box->T = box->B = INFINITY; return 0; } diff --git a/vector/v.lrs/CMakeLists.txt b/vector/v.lrs/CMakeLists.txt new file mode 100644 index 00000000000..f38a7ff17f2 --- /dev/null +++ b/vector/v.lrs/CMakeLists.txt @@ -0,0 +1,19 @@ +build_library_in_subdir(lib NAME grass_lrs + DEPENDS grass_gis grass_vector + HEADERS "lrs.h" ) +add_dependencies(grass_lrs db.drivers) +build_program_in_subdir( + v.lrs.create + DEPENDS grass_lrs) + +build_program_in_subdir( + v.lrs.segment + DEPENDS grass_lrs) + +build_program_in_subdir( + v.lrs.label + DEPENDS grass_lrs) + +build_program_in_subdir( + v.lrs.where + DEPENDS grass_lrs) From d52b92a9373a9eb854090d1ad157094686b92ac4 Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 5 Dec 2022 13:50:36 +0100 Subject: [PATCH 002/253] revert C related INFINITY/NAN changes (this is taken care of in #2681) --- general/g.region/printwindow.c | 2 +- lib/btree2/kdtree.c | 2 +- lib/raster3d/mask.c | 6 +++--- lib/vector/Vlib/box.c | 6 +++--- raster/r.in.bin/main.c | 2 +- raster/r.in.lidar/info.c | 3 +-- raster/r.in.lidar/point_binning.c | 20 ++++++++++---------- raster/r.li/r.li.padrange/padrange.c | 12 ++++++------ raster/r.out.gdal/main.c | 4 ++-- raster/r.series.accumulate/main.c | 4 ++-- raster/r.univar/r.univar_main.c | 4 ++-- raster/r.univar/r3.univar_main.c | 8 ++++---- raster/r.univar/stats.c | 16 ++++++++-------- raster3d/r3.in.lidar/info.c | 3 +-- vector/v.cluster/main.c | 4 ++-- vector/v.distance/distance.c | 2 +- vector/v.voronoi/skeleton.c | 2 +- 17 files changed, 49 insertions(+), 51 deletions(-) diff --git a/general/g.region/printwindow.c b/general/g.region/printwindow.c index c0519631c25..ab2a5379e2c 100644 --- a/general/g.region/printwindow.c +++ b/general/g.region/printwindow.c @@ -598,7 +598,7 @@ void print_window(struct Cell_head *window, int print_flag, int flat_flag, double convergence; if (G_projection() == PROJECTION_XY) - convergence = INFINITY; + convergence = 0. / 0.; else if (G_projection() == PROJECTION_LL) convergence = 0.0; else { diff --git a/lib/btree2/kdtree.c b/lib/btree2/kdtree.c index ec0d19e0abc..54a122033dc 100644 --- a/lib/btree2/kdtree.c +++ b/lib/btree2/kdtree.c @@ -531,7 +531,7 @@ int kdtree_knn(struct kdtree *t, double *c, int *uid, double *d, int k, if (skip) sn.uid = *skip; - maxdist = INFINITY; + maxdist = 1.0 / 0.0; found = 0; /* go down */ diff --git a/lib/raster3d/mask.c b/lib/raster3d/mask.c index 5d9e4014b47..33e5c3c44ee 100644 --- a/lib/raster3d/mask.c +++ b/lib/raster3d/mask.c @@ -304,12 +304,12 @@ void Rast3d_mask_tile(RASTER3D_Map *map, int tileIndex, void *tile, int type) for (dy = y; dy < rows; dy++) { for (dx = x; dx < cols; dx++) { RASTER3D_MASKNUM(map, dx, dy, dz, tile, type); - tile = (int*)tile + length; + tile += length; } - tile = (int*) + xLength; + tile += xLength; } - tile = (int*) + yLength; + tile += yLength; } } diff --git a/lib/vector/Vlib/box.c b/lib/vector/Vlib/box.c index ebcee7d4794..527d3c70c97 100644 --- a/lib/vector/Vlib/box.c +++ b/lib/vector/Vlib/box.c @@ -247,7 +247,7 @@ int Vect_get_line_box(struct Map_info *Map, int line, struct bound_box *Box) Line = Plus->Line[line]; if (Line == NULL) { /* dead */ - Box->N = Box->S = Box->E = Box->W = Box->T = Box->B = INFINITY; + Box->N = Box->S = Box->E = Box->W = Box->T = Box->B = 0. / 0.; return 0; } @@ -311,7 +311,7 @@ int Vect_get_area_box(struct Map_info *Map, int area, struct bound_box *Box) Area = Plus->Area[area]; if (Area == NULL) { /* dead */ - Box->N = Box->S = Box->E = Box->W = Box->T = Box->B = INFINITY; + Box->N = Box->S = Box->E = Box->W = Box->T = Box->B = 0. / 0.; return 0; } @@ -357,7 +357,7 @@ int Vect_get_isle_box(struct Map_info *Map, int isle, struct bound_box *Box) Isle = Plus->Isle[isle]; if (Isle == NULL) { /* dead */ - Box->N = Box->S = Box->E = Box->W = Box->T = Box->B = INFINITY; + Box->N = Box->S = Box->E = Box->W = Box->T = Box->B = 0. / 0.; return 0; } diff --git a/raster/r.in.bin/main.c b/raster/r.in.bin/main.c index 56bf05249b2..e5d457b8dc3 100644 --- a/raster/r.in.bin/main.c +++ b/raster/r.in.bin/main.c @@ -255,7 +255,7 @@ int main(int argc, char *argv[]) const char *outpre; char output[GNAME_MAX]; const char *title; - double null_val = INFINITY; + double null_val = 0.0 / 0.0; int is_fp; int is_signed; int bytes, hbytes; diff --git a/raster/r.in.lidar/info.c b/raster/r.in.lidar/info.c index 24ea3223805..e201774b716 100644 --- a/raster/r.in.lidar/info.c +++ b/raster/r.in.lidar/info.c @@ -12,7 +12,6 @@ */ #include -#include /* For INIFINITY */ #include #include @@ -98,7 +97,7 @@ int scan_bounds(LASReaderH LAS_reader, int shell_style, int extents, int update, first = TRUE; /* init to nan in case no points are found */ - min_x = max_x = min_y = max_y = min_z = max_z = INFINITY; + min_x = max_x = min_y = max_y = min_z = max_z = 0.0 / 0.0; G_verbose_message(_("Scanning data ...")); diff --git a/raster/r.in.lidar/point_binning.c b/raster/r.in.lidar/point_binning.c index 1148deaf5ae..97e942d19b7 100644 --- a/raster/r.in.lidar/point_binning.c +++ b/raster/r.in.lidar/point_binning.c @@ -434,7 +434,7 @@ void write_median(struct BinIndex *bin_index, void *raster_row, Rast_set_null_value(ptr, 1, rtype); else { /* one or more points in cell */ - head_id = Rast_get_c_value((CELL*)index_array + n_offset, CELL_TYPE); + head_id = Rast_get_c_value(index_array + n_offset, CELL_TYPE); node_id = head_id; n = 0; @@ -493,7 +493,7 @@ void write_percentile(struct BinIndex *bin_index, void *raster_row, CELL_TYPE)) /* no points in cell */ Rast_set_null_value(ptr, 1, rtype); else { - head_id = Rast_get_c_value((CELL*)index_array + n_offset, CELL_TYPE); + head_id = Rast_get_c_value(index_array + n_offset, CELL_TYPE); node_id = head_id; n = 0; @@ -548,7 +548,7 @@ void write_skewness(struct BinIndex *bin_index, void *raster_row, CELL_TYPE)) /* no points in cell */ Rast_set_null_value(ptr, 1, rtype); else { - head_id = Rast_get_c_value((CELL*)index_array + n_offset, CELL_TYPE); + head_id = Rast_get_c_value(index_array + n_offset, CELL_TYPE); node_id = head_id; n = 0; /* count */ @@ -605,7 +605,7 @@ void write_trimmean(struct BinIndex *bin_index, void *raster_row, CELL_TYPE)) /* no points in cell */ Rast_set_null_value(ptr, 1, rtype); else { - head_id = Rast_get_c_value((CELL*)index_array + n_offset, CELL_TYPE); + head_id = Rast_get_c_value(index_array + n_offset, CELL_TYPE); node_id = head_id; n = 0; @@ -697,9 +697,9 @@ void write_values(struct PointBinning *point_binning, for (col = 0; col < cols; col++) { size_t offset = ((size_t)row * cols + col) * Rast_cell_size(rtype); double min = - Rast_get_d_value((DCELL*)point_binning->min_array + offset, rtype); + Rast_get_d_value(point_binning->min_array + offset, rtype); double max = - Rast_get_d_value((DCELL*)point_binning->max_array + offset, rtype); + Rast_get_d_value(point_binning->max_array + offset, rtype); Rast_set_d_value(ptr, max - min, rtype); ptr = G_incr_void_ptr(ptr, Rast_cell_size(rtype)); } @@ -714,7 +714,7 @@ void write_values(struct PointBinning *point_binning, int n = Rast_get_c_value(point_binning->n_array + n_offset, CELL_TYPE); double sum = - Rast_get_d_value((DCELL*)point_binning->sum_array + offset, rtype); + Rast_get_d_value(point_binning->sum_array + offset, rtype); if (n == 0) Rast_set_null_value(ptr, 1, rtype); @@ -765,12 +765,12 @@ void write_values(struct PointBinning *point_binning, continue; double sum_x = - Rast_get_d_value((DCELL*)point_binning->x_array + offset, rtype); + Rast_get_d_value(point_binning->x_array + offset, rtype); double sum_y = - Rast_get_d_value((DCELL*)point_binning->y_array + offset, rtype); + Rast_get_d_value(point_binning->y_array + offset, rtype); /* TODO: we do this also in mean writing */ double sum_z = - Rast_get_d_value((DCELL*)point_binning->sum_array + offset, rtype); + Rast_get_d_value(point_binning->sum_array + offset, rtype); /* We are not writing any categories. They are not needed * and potentially it is too much trouble to do it and it is diff --git a/raster/r.li/r.li.padrange/padrange.c b/raster/r.li/r.li.padrange/padrange.c index cda1465853e..9bd255ddd43 100644 --- a/raster/r.li/r.li.padrange/padrange.c +++ b/raster/r.li/r.li.padrange/padrange.c @@ -309,8 +309,8 @@ int calculate(int fd, struct area_entry *ad, double *result) (((NS_DIST1 + NS_DIST2) / 2) / hd.rows); /* get min and max patch size */ - min = INFINITY; - max = -INFINITY; + min = 1.0 / 0.0; /* inf */ + max = -1.0 / 0.0; /* -inf */ for (old_pid = 1; old_pid <= pid; old_pid++) { if (pst[old_pid].count > 0) { area_p = cell_size_m * pst[old_pid].count / 10000; @@ -543,8 +543,8 @@ int calculateD(int fd, struct area_entry *ad, double *result) (((NS_DIST1 + NS_DIST2) / 2) / hd.rows); /* get min and max patch size */ - min = INFINITY; - max = -INFINITY; + min = 1.0 / 0.0; /* inf */ + max = -1.0 / 0.0; /* -inf */ for (old_pid = 1; old_pid <= pid; old_pid++) { if (pst[old_pid].count > 0) { area_p = cell_size_m * pst[old_pid].count / 10000; @@ -777,8 +777,8 @@ int calculateF(int fd, struct area_entry *ad, double *result) (((NS_DIST1 + NS_DIST2) / 2) / hd.rows); /* get min and max patch size */ - min = INFINITY; - max = -INFINITY; + min = 1.0 / 0.0; /* inf */ + max = -1.0 / 0.0; /* -inf */ for (old_pid = 1; old_pid <= pid; old_pid++) { if (pst[old_pid].count > 0) { area_p = cell_size_m * pst[old_pid].count / 10000; diff --git a/raster/r.out.gdal/main.c b/raster/r.out.gdal/main.c index b4b5a8de127..f647881b0cf 100644 --- a/raster/r.out.gdal/main.c +++ b/raster/r.out.gdal/main.c @@ -1047,11 +1047,11 @@ double set_default_nodata_value(GDALDataType datatype, double min, double max) case GDT_Float32: case GDT_CFloat32: - return INFINITY; + return 0.0 / 0.0; case GDT_Float64: case GDT_CFloat64: - return INFINITY; + return 0.0 / 0.0; default: return 0; diff --git a/raster/r.series.accumulate/main.c b/raster/r.series.accumulate/main.c index f4a531f6632..0cc6c38958a 100644 --- a/raster/r.series.accumulate/main.c +++ b/raster/r.series.accumulate/main.c @@ -171,8 +171,8 @@ int main(int argc, char *argv[]) if (G_parser(argc, argv)) exit(EXIT_FAILURE); - lo = INFINITY; - hi = INFINITY; + lo = -1.0 / 0.0; /* -inf */ + hi = 1.0 / 0.0; /* inf */ method = METHOD_GDD; if (G_strncasecmp(parm.method->answer, "gdd", 3) == 0) diff --git a/raster/r.univar/r.univar_main.c b/raster/r.univar/r.univar_main.c index de2a08f526f..7aabf404cf2 100644 --- a/raster/r.univar/r.univar_main.c +++ b/raster/r.univar/r.univar_main.c @@ -207,8 +207,8 @@ int main(int argc, char *argv[]) /* table field separator */ zone_info.sep = G_option_to_separator(param.separator); - zone_info.min = NAN; - zone_info.max = NAN; + zone_info.min = 0.0 / 0.0; /* set to nan as default */ + zone_info.max = 0.0 / 0.0; /* set to nan as default */ zone_info.n_zones = 0; /* setting up thread workspace */ diff --git a/raster/r.univar/r3.univar_main.c b/raster/r.univar/r3.univar_main.c index f255ebe7431..ccae7056ff6 100644 --- a/raster/r.univar/r3.univar_main.c +++ b/raster/r.univar/r3.univar_main.c @@ -144,10 +144,10 @@ int main(int argc, char *argv[]) /* table field separator */ zone_info.sep = G_option_to_separator(param.separator); - dmin = NAN; - dmax = NAN; - zone_info.min = NAN; - zone_info.max = NAN; + dmin = 0.0 / 0.0; /* set to nan as default */ + dmax = 0.0 / 0.0; /* set to nan as default */ + zone_info.min = 0.0 / 0.0; /* set to nan as default */ + zone_info.max = 0.0 / 0.0; /* set to nan as default */ zone_info.n_zones = 0; /* open 3D zoning raster with default region */ diff --git a/raster/r.univar/stats.c b/raster/r.univar/stats.c index 97367976103..4957f502772 100644 --- a/raster/r.univar/stats.c +++ b/raster/r.univar/stats.c @@ -31,8 +31,8 @@ univar_stat *create_univar_stat_struct(int map_type, int n_perc) for (i = 0; i < n_zones; i++) { stats[i].sum = 0.0; stats[i].sumsq = 0.0; - stats[i].min = NAN; - stats[i].max = NAN; + stats[i].min = 0.0 / 0.0; /* set to nan as default */ + stats[i].max = 0.0 / 0.0; /* set to nan as default */ stats[i].n_perc = n_perc; if (n_perc > 0) stats[i].perc = (double *)G_malloc(n_perc * sizeof(double)); @@ -126,7 +126,7 @@ int print_stats(univar_stat *stats, enum OutputFormat format) var_coef = (stdev / mean) * 100.; /* perhaps stdev/fabs(mean) ? */ if (stats[z].n == 0) - stats[z].sum = stats[z].sum_abs = NAN; + stats[z].sum = stats[z].sum_abs = 0.0 / 0.0; sprintf(sum_str, "%.15g", stats[z].sum); G_trim_decimal(sum_str); @@ -220,9 +220,9 @@ int print_stats(univar_stat *stats, enum OutputFormat format) quartile_perc = (double *)G_calloc(stats[z].n_perc, sizeof(double)); if (stats[z].n == 0) { - quartile_25 = median = quartile_75 = NAN; + quartile_25 = median = quartile_75 = 0.0 / 0.0; for (i = 0; i < stats[z].n_perc; i++) - quartile_perc[i] = NAN; + quartile_perc[i] = 0.0 / 0.0; } else { for (i = 0; i < stats[z].n_perc; i++) { @@ -485,7 +485,7 @@ int print_stats_table(univar_stat *stats) var_coef = (stdev / mean) * 100.; /* perhaps stdev/fabs(mean) ? */ if (stats[z].n == 0) - stats[z].sum = stats[z].sum_abs = NAN; + stats[z].sum = stats[z].sum_abs = 0.0 / 0.0; if (zone_info.n_zones) { int z_cat = z + zone_info.min; @@ -533,9 +533,9 @@ int print_stats_table(univar_stat *stats) quartile_perc = (double *)G_calloc(stats[z].n_perc, sizeof(double)); if (stats[z].n == 0) { - quartile_25 = median = quartile_75 = NAN; + quartile_25 = median = quartile_75 = 0.0 / 0.0; for (i = 0; i < stats[z].n_perc; i++) - quartile_perc[i] = NAN; + quartile_perc[i] = 0.0 / 0.0; } else { for (i = 0; i < stats[z].n_perc; i++) { diff --git a/raster3d/r3.in.lidar/info.c b/raster3d/r3.in.lidar/info.c index ce3fba3ba08..49912030655 100644 --- a/raster3d/r3.in.lidar/info.c +++ b/raster3d/r3.in.lidar/info.c @@ -13,7 +13,6 @@ */ #include -#include #include @@ -101,7 +100,7 @@ int scan_bounds(LASReaderH LAS_reader, int shell_style, int extents, int update, first = TRUE; /* init to nan in case no points are found */ - min_x = max_x = min_y = max_y = min_z = max_z = INFINITY; + min_x = max_x = min_y = max_y = min_z = max_z = 0.0 / 0.0; G_verbose_message(_("Scanning data ...")); diff --git a/vector/v.cluster/main.c b/vector/v.cluster/main.c index 7c9ffb75ebb..b9409331d64 100644 --- a/vector/v.cluster/main.c +++ b/vector/v.cluster/main.c @@ -256,7 +256,7 @@ int main(int argc, char *argv[]) c[2] = 0.0; n = 0; sum = sumsq = 0; - min = NAN; + min = 1.0 / 0.0; max = 0; kd = G_malloc(minpnts * sizeof(double)); ki = G_malloc(minpnts * sizeof(int)); @@ -462,7 +462,7 @@ int main(int argc, char *argv[]) c[2] = 0.0; n = 0; sum = sumsq = 0; - min = NAN; + min = 1.0 / 0.0; max = 0; kd = G_malloc(minpnts * sizeof(double)); ki = G_malloc(minpnts * sizeof(int)); diff --git a/vector/v.distance/distance.c b/vector/v.distance/distance.c index 101b9a003da..ebe590e8b35 100644 --- a/vector/v.distance/distance.c +++ b/vector/v.distance/distance.c @@ -11,7 +11,7 @@ int get_line_box(const struct line_pnts *Points, struct bound_box *box) int i; if (Points->n_points == 0) { - box->E = box->W = box->N = box->S = box->T = box->B = INFINITY; + box->E = box->W = box->N = box->S = box->T = box->B = 0.0 / 0.0; return 0; } diff --git a/vector/v.voronoi/skeleton.c b/vector/v.voronoi/skeleton.c index 96b19bdc709..ada3d356a8d 100644 --- a/vector/v.voronoi/skeleton.c +++ b/vector/v.voronoi/skeleton.c @@ -528,7 +528,7 @@ int tie_up(void) IPoints[i]); } - distmin = INFINITY; + distmin = 1. / 0.; /* +inf */ xmin = x; ymin = y; From 422c62b3986343f51b13f405cf1b69387389746f Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 5 Dec 2022 14:20:55 +0100 Subject: [PATCH 003/253] Sync to PR Cmake build2 #348 (replaces #348) --- cmake/ctypesgen.cmake | 2 +- cmake/modules/build_library_in_subdir.cmake | 2 +- cmake/modules/build_program.cmake | 2 +- cmake/modules/get_versions.cmake | 2 +- cmake/modules/repo_status.cmake | 2 +- cmake/modules/set_compiler_flags.cmake | 2 +- gui/icons/CMakeLists.txt | 7 +++++-- gui/images/CMakeLists.txt | 12 ++++++------ lib/CMakeLists.txt | 4 ++-- lib/init/license.txt.in | 2 +- python/libgrass_interface_generator/CMakeLists.txt | 1 + vector/CMakeLists.txt | 2 +- 12 files changed, 22 insertions(+), 18 deletions(-) diff --git a/cmake/ctypesgen.cmake b/cmake/ctypesgen.cmake index af9c06aef2a..945e74950b3 100644 --- a/cmake/ctypesgen.cmake +++ b/cmake/ctypesgen.cmake @@ -16,7 +16,7 @@ set(ENV{LC_ALL} C) set(LIBRARIES) foreach(LIB ${LIBS}) if(WIN32) - list(APPEND LIBRARIES "--library=${BIN_DIR}/bin/${LIB}.dll") + list(APPEND LIBRARIES "--library=${BIN_DIR}/lib/${LIB}.dll") elseif(APPLE) list(APPEND LIBRARIES "--library=${BIN_DIR}/lib/lib${LIB}.so") else() diff --git a/cmake/modules/build_library_in_subdir.cmake b/cmake/modules/build_library_in_subdir.cmake index 44415bea900..e49db0e8044 100644 --- a/cmake/modules/build_library_in_subdir.cmake +++ b/cmake/modules/build_library_in_subdir.cmake @@ -13,4 +13,4 @@ macro(build_library_in_subdir dir_name) #message("dir_name=${dir_name} |g_name= ${g_name}") build_module(NAME grass_${g_name} SRCDIR ${CMAKE_CURRENT_SOURCE_DIR}/${dir_name} ${ARGN}) endif() -endmacro() \ No newline at end of file +endmacro() diff --git a/cmake/modules/build_program.cmake b/cmake/modules/build_program.cmake index 31c381ab55f..cdd25a03549 100644 --- a/cmake/modules/build_program.cmake +++ b/cmake/modules/build_program.cmake @@ -5,4 +5,4 @@ # Read the file COPYING that comes with GRASS for details. macro(build_program) build_module(${ARGN} EXE) -endmacro() \ No newline at end of file +endmacro() diff --git a/cmake/modules/get_versions.cmake b/cmake/modules/get_versions.cmake index 5578440c2ed..2bc7563ec3b 100644 --- a/cmake/modules/get_versions.cmake +++ b/cmake/modules/get_versions.cmake @@ -31,4 +31,4 @@ set(${var_major} ${version_major} PARENT_SCOPE) set(${var_minor} ${version_minor} PARENT_SCOPE) set(${var_release} ${version_release} PARENT_SCOPE) set(${var_date} ${version_date} PARENT_SCOPE) -endfunction() \ No newline at end of file +endfunction() diff --git a/cmake/modules/repo_status.cmake b/cmake/modules/repo_status.cmake index ca13362fe45..7937f688860 100644 --- a/cmake/modules/repo_status.cmake +++ b/cmake/modules/repo_status.cmake @@ -33,4 +33,4 @@ execute_process( set(${version_git_var} "${GRASS_VERSION_GIT}" PARENT_SCOPE) -endfunction() #repo_status \ No newline at end of file +endfunction() #repo_status diff --git a/cmake/modules/set_compiler_flags.cmake b/cmake/modules/set_compiler_flags.cmake index 871f9f6bb2e..3f40238f325 100644 --- a/cmake/modules/set_compiler_flags.cmake +++ b/cmake/modules/set_compiler_flags.cmake @@ -10,4 +10,4 @@ endif() set(CMAKE_CXX_FLAGS "${GRASS_CXX_FLAGS} ${CMAKE_CXX_FLAGS}") set(CMAKE_C_FLAGS "${GRASS_C_FLAGS} ${CMAKE_C_FLAGS}") -endmacro() \ No newline at end of file +endmacro() diff --git a/gui/icons/CMakeLists.txt b/gui/icons/CMakeLists.txt index 9072ecfbb44..a71e06215be 100644 --- a/gui/icons/CMakeLists.txt +++ b/gui/icons/CMakeLists.txt @@ -20,12 +20,15 @@ endforeach() foreach(ICON ${GRASS_ICONS}) get_filename_component(FILE_NAME ${ICON} NAME) add_custom_command(OUTPUT ${GISBASE}/gui/icons/grass/${FILE_NAME} - COMMAND ${CMAKE_COMMAND} -E copy ${ICON} ${GISBASE}/gui/icons/grass/ - COMMAND ${CMAKE_COMMAND} -E copy ${ICON} ${GISBASE}/docs/html/icons/) + COMMAND ${CMAKE_COMMAND} -E copy ${ICON} ${GISBASE}/gui/icons/grass/) list(APPEND output_icons ${GISBASE}/gui/icons/grass/${FILE_NAME}) + + add_custom_command(OUTPUT ${GISBASE}/docs/html/icons/${FILE_NAME} + COMMAND ${CMAKE_COMMAND} -E copy ${ICON} ${GISBASE}/docs/html/icons/) list(APPEND output_icons ${GISBASE}/docs/html/icons/${FILE_NAME}) endforeach() + foreach(ICON ${FLAGS_ICONS}) get_filename_component(FILE_NAME ${ICON} NAME) add_custom_command(OUTPUT ${GISBASE}/gui/icons/flags/${FILE_NAME} diff --git a/gui/images/CMakeLists.txt b/gui/images/CMakeLists.txt index 263c9ef1ad4..3f7051820f6 100644 --- a/gui/images/CMakeLists.txt +++ b/gui/images/CMakeLists.txt @@ -18,9 +18,9 @@ add_custom_target(gui_images DEPENDS gui_icons ${output_images}) install(FILES ${GUI_IMAGES} DESTINATION gui/images/) -install(DIRECTORY basic DESTINATION gui/images/symbols/) -install(DIRECTORY demo DESTINATION gui/images/symbols/) -install(DIRECTORY extra DESTINATION gui/images/symbols/) -install(DIRECTORY geology DESTINATION gui/images/symbols/) -install(DIRECTORY legend DESTINATION gui/images/symbols/) -install(DIRECTORY n_arrows DESTINATION gui/images/symbols/) +install(DIRECTORY symbols/basic DESTINATION gui/images/symbols/) +install(DIRECTORY symbols/demo DESTINATION gui/images/symbols/) +install(DIRECTORY symbols/extra DESTINATION gui/images/symbols/) +install(DIRECTORY symbols/geology DESTINATION gui/images/symbols/) +install(DIRECTORY symbols/legend DESTINATION gui/images/symbols/) +install(DIRECTORY symbols/n_arrows DESTINATION gui/images/symbols/) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 841cb55b549..131f7ccb971 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -141,10 +141,10 @@ build_library_in_subdir(arraystats DEPENDS grass_gis) if(WITH_OPENGL) build_library_in_subdir(ogsf - DEPENDS grass_raster grass_raster3d OPENGL TIFF) + DEPENDS grass_raster grass_raster3d grass_vector grass_bitmap OPENGL TIFF) build_library_in_subdir(nviz - DEPENDS grass_display grass_raster grass_vector grass_bitmap OPENGL TIFF) + DEPENDS grass_display grass_raster grass_vector grass_bitmap grass_ogsf OPENGL TIFF) endif() add_subdirectory(temporal) diff --git a/lib/init/license.txt.in b/lib/init/license.txt.in index c40844420c5..c65922aa07e 100644 --- a/lib/init/license.txt.in +++ b/lib/init/license.txt.in @@ -1,7 +1,7 @@ Geographic Resources Analysis Support System (GRASS) is Copyright, 1999-@GRASS_VERSION_DATE@ by the GRASS Development Team, and licensed under terms of the GNU General Public License (GPL) version >=2. - + This GRASS GIS @GRASS_VERSION_NUMBER@ release is coordinated and produced by the GRASS Development Team with contributions from all over the world. diff --git a/python/libgrass_interface_generator/CMakeLists.txt b/python/libgrass_interface_generator/CMakeLists.txt index b243f459da4..698da806f6a 100644 --- a/python/libgrass_interface_generator/CMakeLists.txt +++ b/python/libgrass_interface_generator/CMakeLists.txt @@ -74,6 +74,7 @@ foreach(module ${MODULES}) -DHDRS=${${module}_HDRS} -DLIBS=${${module}_LIBS} -DOUT_FILE=${output_file} + -DGRASS_VERSION_NUMBER=${GRASS_VERSION_NUMBER} -P ${CMAKE_SOURCE_DIR}/cmake/ctypesgen.cmake COMMENT "Generating ${output_file}" VERBATIM) diff --git a/vector/CMakeLists.txt b/vector/CMakeLists.txt index 52f2c5715f3..b5e3b7b440f 100644 --- a/vector/CMakeLists.txt +++ b/vector/CMakeLists.txt @@ -209,4 +209,4 @@ build_program_in_subdir(v.out.postgis DEPENDS grass_gis grass_vector PRIMARY_DEP if(WITH_OPENDWG) build_program_in_subdir(v.in.dwg DEPENDS grass_gis grass_vector) -endif() \ No newline at end of file +endif() From 6e226f98095c2671508f63ab11aa961037b8895f Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 5 Dec 2022 15:41:08 +0100 Subject: [PATCH 004/253] cmake/find_scripts/FindPROJ.cmake: update to PROJ > 4 --- cmake/find_scripts/FindPROJ.cmake | 62 +++++++------------------------ 1 file changed, 14 insertions(+), 48 deletions(-) diff --git a/cmake/find_scripts/FindPROJ.cmake b/cmake/find_scripts/FindPROJ.cmake index 0c63cf8cbcc..8f7c1da251f 100644 --- a/cmake/find_scripts/FindPROJ.cmake +++ b/cmake/find_scripts/FindPROJ.cmake @@ -1,57 +1,23 @@ -############################################################################### -# CMake module to search for PROJ library -# -# On success, the macro sets the following variables: -# PROJ_FOUND = if the library found -# PROJ_LIBRARY = full path to the library -# PROJ_INCLUDE_DIR = where to find the library headers -# also defined, but not for general use are -# PROJ_LIBRARY, where to find the PROJ.4 library. -# -# Copyright (c) 2009 Mateusz Loskot -# -# Redistribution and use is allowed according to the terms of the BSD license. -# For details see the accompanying COPYING-CMAKE-SCRIPTS file. -# -############################################################################### +find_path(PROJ_INCLUDE_DIR proj.h PATH_SUFFIXES proj) -FIND_PATH(PROJ_INCLUDE_DIR proj_api.h DOC "Path to PROJ.4 include directory") - -if(EXISTS "${PROJ_INCLUDE_DIR}/proj_api.h") - file(READ "${PROJ_INCLUDE_DIR}/proj_api.h" proj_h_header) - string(REGEX MATCH "#define +PJ_VERSION +([0-9]+)" _dummy "${proj_h_header}") - set(PROJ_VERSION_STRING "${CMAKE_MATCH_1}" CACHE INTERNAL "PROJ.4 version string") -endif() -FIND_LIBRARY(PROJ_LIBRARY_RELEASE - NAMES proj proj_i - DOC "Path to PROJ library file") - -FIND_LIBRARY(PROJ_LIBRARY_DEBUG - NAMES projd - DOC "Path to PROJ debug library file") +find_library(PROJ_LIBRARY_RELEASE NAMES proj_i proj) +find_library(PROJ_LIBRARY_DEBUG NAMES projd) +set(PROJ_FOUND FALSE) set(PROJ_LIBRARY) if(PROJ_LIBRARY_DEBUG) - set( PROJ_LIBRARY ${PROJ_LIBRARY_DEBUG}) + set( PROJ_LIBRARY ${PROJ_LIBRARY_DEBUG} CACHE FILEPATH "doc" ) elseif(PROJ_LIBRARY_RELEASE) - set( PROJ_LIBRARY ${PROJ_LIBRARY_RELEASE}) + set( PROJ_LIBRARY ${PROJ_LIBRARY_RELEASE} CACHE FILEPATH "doc" ) endif() -if(PROJ_INCLUDE_DIR AND PROJ_LIBRARY) -set(PROJ_FOUND TRUE) -endif() +mark_as_advanced(PROJ_LIBRARY_RELEASE) +mark_as_advanced(PROJ_LIBRARY_DEBUG) +mark_as_advanced(PROJ_LIBRARY) +mark_as_advanced(PROJ_INCLUDE_DIR) -MARK_AS_ADVANCED( - PROJ_INCLUDE_DIR - PROJ_LIBRARY - PROJ_LIBRARY_DEBUG - PROJ_LIBRARY_RELEASE -) +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args( PROJ DEFAULT_MSG + PROJ_LIBRARY + PROJ_INCLUDE_DIR ) -# Handle the QUIETLY and REQUIRED arguments and set SPATIALINDEX_FOUND to TRUE -# if all listed variables are TRUE -INCLUDE(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(PROJ - FOUND_VAR PROJ_FOUND - REQUIRED_VARS PROJ_LIBRARY PROJ_INCLUDE_DIR PROJ_VERSION_STRING - VERSION_VAR PROJ_VERSION_STRING) From e2816d22376ab4ca2e57363817776265c6bd4b07 Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 5 Dec 2022 15:44:30 +0100 Subject: [PATCH 005/253] cmake/find_scripts/FindPostgreSQL.cmake: update to https://github.com/OSGeo/gdal/blob/master/cmake/modules/3.20/FindPostgreSQL.cmake --- cmake/find_scripts/FindPostgreSQL.cmake | 218 ++++++++++++++++++++++-- 1 file changed, 202 insertions(+), 16 deletions(-) diff --git a/cmake/find_scripts/FindPostgreSQL.cmake b/cmake/find_scripts/FindPostgreSQL.cmake index 3c048cd6c72..e5c6ce0a088 100644 --- a/cmake/find_scripts/FindPostgreSQL.cmake +++ b/cmake/find_scripts/FindPostgreSQL.cmake @@ -1,3 +1,45 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +#[=======================================================================[.rst: +FindPostgreSQL +-------------- + +Find the PostgreSQL installation. + +IMPORTED Targets +^^^^^^^^^^^^^^^^ + +.. versionadded:: 3.14 + +This module defines :prop_tgt:`IMPORTED` target ``PostgreSQL::PostgreSQL`` +if PostgreSQL has been found. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module will set the following variables in your project: + +``PostgreSQL_FOUND`` + True if PostgreSQL is found. +``PostgreSQL_LIBRARIES`` + the PostgreSQL libraries needed for linking +``PostgreSQL_INCLUDE_DIRS`` + the directories of the PostgreSQL headers +``PostgreSQL_LIBRARY_DIRS`` + the link directories for PostgreSQL libraries +``PostgreSQL_VERSION_STRING`` + the version of PostgreSQL found +``PostgreSQL_TYPE_INCLUDE_DIR`` + the directories of the PostgreSQL server headers + +Components +^^^^^^^^^^ + +This module contains additional ``Server`` component, that forcibly checks +for the presence of server headers. Note that ``PostgreSQL_TYPE_INCLUDE_DIR`` +is set regardless of the presence of the ``Server`` component in find_package call. + #]=======================================================================] # ---------------------------------------------------------------------------- @@ -48,36 +90,122 @@ # installed PostgreSQL, e.g. . # # ---------------------------------------------------------------------------- + +cmake_policy(PUSH) +cmake_policy(SET CMP0057 NEW) # if IN_LIST + +set(PostgreSQL_INCLUDE_PATH_DESCRIPTION "top-level directory containing the PostgreSQL include directories. E.g /usr/local/include/PostgreSQL/8.4 or C:/Program Files/PostgreSQL/8.4/include") +set(PostgreSQL_INCLUDE_DIR_MESSAGE "Set the PostgreSQL_INCLUDE_DIR cmake cache entry to the ${PostgreSQL_INCLUDE_PATH_DESCRIPTION}") +set(PostgreSQL_LIBRARY_PATH_DESCRIPTION "top-level directory containing the PostgreSQL libraries.") +set(PostgreSQL_LIBRARY_DIR_MESSAGE "Set the PostgreSQL_LIBRARY_DIR cmake cache entry to the ${PostgreSQL_LIBRARY_PATH_DESCRIPTION}") +set(PostgreSQL_ROOT_DIR_MESSAGE "Set the PostgreSQL_ROOT system variable to where PostgreSQL is found on the machine E.g C:/Program Files/PostgreSQL/8.4") + + +set(PostgreSQL_KNOWN_VERSIONS ${PostgreSQL_ADDITIONAL_VERSIONS} + "13" "12" "11" "10" "9.6" "9.5" "9.4" "9.3" "9.2" "9.1" "9.0" "8.4" "8.3" "8.2" "8.1" "8.0") + +# Define additional search paths for root directories. +set( PostgreSQL_ROOT_DIRECTORIES + ENV PostgreSQL_ROOT + ${PostgreSQL_ROOT} +) +foreach(suffix ${PostgreSQL_KNOWN_VERSIONS}) + if(WIN32) + list(APPEND PostgreSQL_LIBRARY_ADDITIONAL_SEARCH_SUFFIXES + "PostgreSQL/${suffix}/lib") + list(APPEND PostgreSQL_INCLUDE_ADDITIONAL_SEARCH_SUFFIXES + "PostgreSQL/${suffix}/include") + list(APPEND PostgreSQL_TYPE_ADDITIONAL_SEARCH_SUFFIXES + "PostgreSQL/${suffix}/include/server") + endif() + if(UNIX) + list(APPEND PostgreSQL_LIBRARY_ADDITIONAL_SEARCH_SUFFIXES + "postgresql${suffix}" + "pgsql-${suffix}/lib") + list(APPEND PostgreSQL_INCLUDE_ADDITIONAL_SEARCH_SUFFIXES + "postgresql${suffix}" + "postgresql/${suffix}" + "pgsql-${suffix}/include") + list(APPEND PostgreSQL_TYPE_ADDITIONAL_SEARCH_SUFFIXES + "postgresql${suffix}/server" + "postgresql/${suffix}/server" + "pgsql-${suffix}/include/server") + endif() +endforeach() + +# +# Look for an installation. +# find_path(PostgreSQL_INCLUDE_DIR NAMES libpq-fe.h + PATHS + # Look in other places. + ${PostgreSQL_ROOT_DIRECTORIES} PATH_SUFFIXES pgsql postgresql include - + ${PostgreSQL_INCLUDE_ADDITIONAL_SEARCH_SUFFIXES} # Help the user find it if we cannot. - DOC "path to libpq-fe.h" + DOC "The ${PostgreSQL_INCLUDE_DIR_MESSAGE}" ) find_path(PostgreSQL_TYPE_INCLUDE_DIR NAMES catalog/pg_type.h + PATHS + # Look in other places. + ${PostgreSQL_ROOT_DIRECTORIES} PATH_SUFFIXES postgresql pgsql/server postgresql/server - postgresql/9.5/server include/server - + ${PostgreSQL_TYPE_ADDITIONAL_SEARCH_SUFFIXES} # Help the user find it if we cannot. - DOC "path to postgresql header catalog/pg_type.h" + DOC "The ${PostgreSQL_INCLUDE_DIR_MESSAGE}" ) -find_library(PostgreSQL_LIBRARY - NAMES libpqd pqd libpq pq - # Help the user find it if we cannot. - DOC "The ${PostgreSQL_LIBRARY_DIR_MESSAGE}") +# The PostgreSQL library. +set (PostgreSQL_LIBRARY_TO_FIND pq) +# Setting some more prefixes for the library +set (PostgreSQL_LIB_PREFIX "") +if ( WIN32 ) + set (PostgreSQL_LIB_PREFIX ${PostgreSQL_LIB_PREFIX} "lib") + set (PostgreSQL_LIBRARY_TO_FIND ${PostgreSQL_LIB_PREFIX}${PostgreSQL_LIBRARY_TO_FIND}) +endif() -get_filename_component(PostgreSQL_LIBRARY_DIR ${PostgreSQL_LIBRARY} PATH) +function(__postgresql_find_library _name) + find_library(${_name} + NAMES ${ARGN} + PATHS + ${PostgreSQL_ROOT_DIRECTORIES} + PATH_SUFFIXES + lib + ${PostgreSQL_LIBRARY_ADDITIONAL_SEARCH_SUFFIXES} + # Help the user find it if we cannot. + DOC "The ${PostgreSQL_LIBRARY_DIR_MESSAGE}" + ) +endfunction() + +# For compatibility with versions prior to this multi-config search, honor +# any PostgreSQL_LIBRARY that is already specified and skip the search. +if(PostgreSQL_LIBRARY) + set(PostgreSQL_LIBRARIES "${PostgreSQL_LIBRARY}") + get_filename_component(PostgreSQL_LIBRARY_DIR "${PostgreSQL_LIBRARY}" PATH) +else() + __postgresql_find_library(PostgreSQL_LIBRARY_RELEASE ${PostgreSQL_LIBRARY_TO_FIND}) + __postgresql_find_library(PostgreSQL_LIBRARY_DEBUG ${PostgreSQL_LIBRARY_TO_FIND}d) + include(SelectLibraryConfigurations) + select_library_configurations(PostgreSQL) + mark_as_advanced(PostgreSQL_LIBRARY_RELEASE PostgreSQL_LIBRARY_DEBUG) + if(PostgreSQL_LIBRARY_RELEASE) + get_filename_component(PostgreSQL_LIBRARY_DIR "${PostgreSQL_LIBRARY_RELEASE}" PATH) + elseif(PostgreSQL_LIBRARY_DEBUG) + get_filename_component(PostgreSQL_LIBRARY_DIR "${PostgreSQL_LIBRARY_DEBUG}" PATH) + else() + set(PostgreSQL_LIBRARY_DIR "") + endif() +endif() if (PostgreSQL_INCLUDE_DIR) # Some platforms include multiple pg_config.hs for multi-lib configurations @@ -96,11 +224,22 @@ if (PostgreSQL_INCLUDE_DIR) endif() endforeach() if (_PostgreSQL_VERSION_NUM) - math(EXPR _PostgreSQL_major_version "${_PostgreSQL_VERSION_NUM} / 10000") - math(EXPR _PostgreSQL_minor_version "${_PostgreSQL_VERSION_NUM} % 10000") - set(PostgreSQL_VERSION_STRING "${_PostgreSQL_major_version}.${_PostgreSQL_minor_version}") - unset(_PostgreSQL_major_version) - unset(_PostgreSQL_minor_version) + # 9.x and older encoding + if (_PostgreSQL_VERSION_NUM LESS 100000) + math(EXPR _PostgreSQL_major_version "${_PostgreSQL_VERSION_NUM} / 10000") + math(EXPR _PostgreSQL_minor_version "${_PostgreSQL_VERSION_NUM} % 10000 / 100") + math(EXPR _PostgreSQL_patch_version "${_PostgreSQL_VERSION_NUM} % 100") + set(PostgreSQL_VERSION_STRING "${_PostgreSQL_major_version}.${_PostgreSQL_minor_version}.${_PostgreSQL_patch_version}") + unset(_PostgreSQL_major_version) + unset(_PostgreSQL_minor_version) + unset(_PostgreSQL_patch_version) + else () + math(EXPR _PostgreSQL_major_version "${_PostgreSQL_VERSION_NUM} / 10000") + math(EXPR _PostgreSQL_minor_version "${_PostgreSQL_VERSION_NUM} % 10000") + set(PostgreSQL_VERSION_STRING "${_PostgreSQL_major_version}.${_PostgreSQL_minor_version}") + unset(_PostgreSQL_major_version) + unset(_PostgreSQL_minor_version) + endif () else () foreach(_PG_CONFIG_HEADER ${_PG_CONFIG_HEADERS}) if(EXISTS "${_PG_CONFIG_HEADER}") @@ -118,9 +257,56 @@ if (PostgreSQL_INCLUDE_DIR) unset(pgsql_version_str) endif() +if("Server" IN_LIST PostgreSQL_FIND_COMPONENTS) + set(PostgreSQL_Server_FOUND TRUE) + if(NOT PostgreSQL_TYPE_INCLUDE_DIR) + set(PostgreSQL_Server_FOUND FALSE) + endif() +endif() + # Did we find anything? include(FindPackageHandleStandardArgs) find_package_handle_standard_args(PostgreSQL - REQUIRED_VARS PostgreSQL_LIBRARY PostgreSQL_INCLUDE_DIR PostgreSQL_TYPE_INCLUDE_DIR + REQUIRED_VARS PostgreSQL_LIBRARY PostgreSQL_INCLUDE_DIR + HANDLE_COMPONENTS VERSION_VAR PostgreSQL_VERSION_STRING) set(PostgreSQL_FOUND ${POSTGRESQL_FOUND}) + +function(__postgresql_import_library _target _var _config) + if(_config) + set(_config_suffix "_${_config}") + else() + set(_config_suffix "") + endif() + + set(_lib "${${_var}${_config_suffix}}") + if(EXISTS "${_lib}") + if(_config) + set_property(TARGET ${_target} APPEND PROPERTY + IMPORTED_CONFIGURATIONS ${_config}) + endif() + set_target_properties(${_target} PROPERTIES + IMPORTED_LOCATION${_config_suffix} "${_lib}") + endif() +endfunction() + +# Now try to get the include and library path. +if(PostgreSQL_FOUND) + set(PostgreSQL_INCLUDE_DIRS ${PostgreSQL_INCLUDE_DIR}) + if(PostgreSQL_TYPE_INCLUDE_DIR) + list(APPEND PostgreSQL_INCLUDE_DIRS ${PostgreSQL_TYPE_INCLUDE_DIR}) + endif() + set(PostgreSQL_LIBRARY_DIRS ${PostgreSQL_LIBRARY_DIR}) + if (NOT TARGET PostgreSQL::PostgreSQL) + add_library(PostgreSQL::PostgreSQL UNKNOWN IMPORTED) + set_target_properties(PostgreSQL::PostgreSQL PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${PostgreSQL_INCLUDE_DIRS}") + __postgresql_import_library(PostgreSQL::PostgreSQL PostgreSQL_LIBRARY "") + __postgresql_import_library(PostgreSQL::PostgreSQL PostgreSQL_LIBRARY "RELEASE") + __postgresql_import_library(PostgreSQL::PostgreSQL PostgreSQL_LIBRARY "DEBUG") + endif () +endif() + +mark_as_advanced(PostgreSQL_INCLUDE_DIR PostgreSQL_TYPE_INCLUDE_DIR) + +cmake_policy(POP) From da4ebbef0a10f4386fe9b148722c72067cde458a Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 5 Dec 2022 15:50:19 +0100 Subject: [PATCH 006/253] various path updates (sync to main) --- CMakeLists.txt | 7 ++++--- include/CMakeLists.txt | 2 +- lib/CMakeLists.txt | 4 ---- lib/gis/CMakeLists.txt | 2 +- 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 41b17b44ca8..00d0d612f4c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -115,7 +115,7 @@ include(build_gui_in_subdir) include(check_target) add_subdirectory(thirdparty) -set(MKHTML_PY ${CMAKE_BINARY_DIR}/tools/mkhtml.py) +set(MKHTML_PY ${CMAKE_BINARY_DIR}/utils/mkhtml.py) set(GISBASE ${CMAKE_BINARY_DIR}/gisbase) file(TO_NATIVE_PATH "${GISBASE}" GISBASE_NATIVE) @@ -165,8 +165,9 @@ execute_process( COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/demolocation/ COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/etc/config/ COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/driver/db/ - COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/tools/ + COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/utils/ COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/lib/ + COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/python/ COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/etc/lister/ COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/etc/python/grass/lib COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/gui/wxpython/xml/ @@ -176,7 +177,7 @@ execute_process( ) add_subdirectory(lib) -add_subdirectory(tools) +add_subdirectory(utils) set(modules_list) diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt index b9d398a81d9..4df77022d3e 100644 --- a/include/CMakeLists.txt +++ b/include/CMakeLists.txt @@ -260,7 +260,7 @@ endforeach() add_custom_target(copy_header DEPENDS ${include_depends} LIB_PYTHON) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/version.h.in +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/grass/version.h.in "${CMAKE_CURRENT_BINARY_DIR}/grass/version.h") message(STATUS "Creating ${CMAKE_CURRENT_BINARY_DIR}/grass/config.h") diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 131f7ccb971..d3d39cd3105 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -149,10 +149,6 @@ endif() add_subdirectory(temporal) -if(WITH_PYTHON) - add_subdirectory(python) -endif() - build_library_in_subdir(iostream SRC_REGEX "*.cpp" DEPENDS grass_gis) build_library_in_subdir(manage DEPENDS grass_raster grass_vector grass_raster3d ) diff --git a/lib/gis/CMakeLists.txt b/lib/gis/CMakeLists.txt index 22ae1df8fb9..48499500c57 100644 --- a/lib/gis/CMakeLists.txt +++ b/lib/gis/CMakeLists.txt @@ -21,7 +21,7 @@ set(gislib_SRCS color_str.c compress.c line_dist.c nl_to_spaces.c progrm_nme.c timestamp.c zero.c commas.c geodesic.c list.c nme_in_mps.c proj1.c token.c zone.c geodist.c ll_format.c open.c proj2.c trim_dec.c parser_json.c cmprzstd.c - compress.c band_reference.c + compress.c ) if(MINGW) From 84304b4c64232482b87322220c84992cfb6f6081 Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 5 Dec 2022 18:25:07 +0100 Subject: [PATCH 007/253] grass7 -> grass8; msg cosmetics --- CMakeLists.txt | 6 +++--- lib/init/CMakeLists.txt | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 00d0d612f4c..33c91e688f4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ # AUTHOR(S): Rashad Kanavath -# PURPOSE: Grass root that adds options to activate/deactivate 3rd party libraries -# COPYRIGHT: (C) 2020 by the GRASS Development Team +# PURPOSE: GRASS GIS root that adds options to activate/deactivate 3rd party libraries +# COPYRIGHT: (C) 2020-2022 by the GRASS Development Team # This program is free software under the GPL (>=v2) # Read the file COPYING that comes with GRASS for details. @@ -50,7 +50,7 @@ option(WITH_NLS "enable nls support" ${default_option_enabled}) option(WITH_BZLIB "enable bzlib support" ON) option(WITH_BLAS "enable blas support" ON) option(WITH_LAPACK "enable lapack support" ON) -option(WITH_LIBLAS "enable libLAS support" ON) +option(WITH_LIBLAS "enable libLAS support" OFF) option(WITH_OPENDWG "enable v.in.dwg" OFF) option(WITH_PYTHON "Build python bindings" ON) diff --git a/lib/init/CMakeLists.txt b/lib/init/CMakeLists.txt index 70b38b62d4b..d452b5c4329 100644 --- a/lib/init/CMakeLists.txt +++ b/lib/init/CMakeLists.txt @@ -16,12 +16,12 @@ file(TO_NATIVE_PATH ${CMAKE_BINARY_DIR}/bin BINARY_DIR) set(CONFIG_PROJSHARE) get_filename_component(PROJ_INSTALL_PREFIX ${PROJ_INCLUDE_DIR} PATH) if(DEFINED ENV{PROJSHARE}) - message(WARNING "External PROJ.4 directory not specified; default will be used") + 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.4 directory ${CONFIG_PROJSHARE}") + message(STATUS "PROJ directory ${CONFIG_PROJSHARE}") endif() endif() file(TO_NATIVE_PATH "${PROJ_INSTALL_PREFIX}/share/proj" PROJ_LIB) @@ -68,9 +68,9 @@ if(WIN32) # this can happen with some strange settings message(FATAL_ERROR "The APPDATA variable is not set, ask your operating system support") endif() - file(TO_NATIVE_PATH "${app_data_dir}/GRASS7" grass_config_dir) + file(TO_NATIVE_PATH "${app_data_dir}/GRASS8" grass_config_dir) else() - set(grass_config_dir "$ENV{HOME}/.grass7") + set(grass_config_dir "$ENV{HOME}/.grass8") endif() file(TO_NATIVE_PATH "${CMAKE_INSTALL_PREFIX}" gisbase_init_dir) From ef15e3e1191b6787b07487193b1c727b2fdfe053 Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Tue, 6 Dec 2022 23:05:13 +0100 Subject: [PATCH 008/253] CI: cmake compile script Attempt to add a CI workflow --- .github/workflows/cmake.yml | 91 +++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 .github/workflows/cmake.yml diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml new file mode 100644 index 00000000000..53b4dd25924 --- /dev/null +++ b/.github/workflows/cmake.yml @@ -0,0 +1,91 @@ +# inspired by "build GDAL library and to run test with CMake" +# from https://github.com/OSGeo/gdal/blob/master/.github/workflows/cmake_builds.yml + +name: Build and test with CMake + +on: + push: + paths-ignore: + - 'doc/**' + branches-ignore: + - 'backport**' + pull_request: + paths-ignore: + - 'doc/**' + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.ref }} + cancel-in-progress: true + +env: + CMAKE_UNITY_BUILD: OFF + +permissions: + contents: read # to fetch code (actions/checkout) + +jobs: + + build-linux-ubuntu-focal: + runs-on: ubuntu-20.04 + env: + CMAKE_OPTIONS: -DPython_LOOKUP_VERSION=3.8 -DUSE_CCACHE=ON + cache-name: cmake-ubuntu-focal + steps: + - name: Checkout GRASS + uses: actions/checkout@v3 + - name: Setup cache + uses: actions/cache@v3 + id: cache + with: + path: ${{ github.workspace }}/.ccache + key: ${{ runner.os }}-${{ env.cache-name }}-${{ github.base_ref }}${{ github.ref_name }}-${{ github.run_id }} + restore-keys: | + ${{ runner.os }}-${{ env.cache-name }}-${{ github.base_ref }} + ${{ runner.os }}-${{ env.cache-name }} + - name: Install CMake 3.9.1 + run: | + cd ${GITHUB_WORKSPACE} + wget https://github.com/Kitware/CMake/releases/download/v3.9.1/cmake-3.9.1-Linux-x86_64.tar.gz + tar xzf cmake-3.9.1-Linux-x86_64.tar.gz + echo "CMAKE_DIR=$GITHUB_WORKSPACE/cmake-3.9.1-Linux-x86_64/bin" >> $GITHUB_ENV + echo "$GITHUB_WORKSPACE/cmake-3.9.1-Linux-x86_64/bin" >> $GITHUB_PATH + - run: | + cmake --version + - name: Install dependency + run: | + sudo add-apt-repository -y ppa:ubuntugis/ubuntugis-unstable + sudo apt-get update + sudo apt-get install -y -q apt-get install build-essential \ + flex make bison gcc libgcc1 g++ ccache \ + python3 python3-dev \ + python3-opengl python3-wxgtk4.0 \ + python3-dateutil libgsl-dev python3-numpy \ + wx3.0-headers wx-common libwxgtk3.0-gtk3-dev \ + libwxbase3.0-dev libbz2-dev zlib1g-dev gettext \ + libtiff5-dev libpnglite-dev libcairo2 libcairo2-dev \ + sqlite3 libsqlite3-dev \ + libpq-dev libreadline6-dev libfreetype6-dev \ + libfftw3-3 libfftw3-dev \ + libboost-thread-dev libboost-program-options-dev libpdal-dev\ + subversion libzstd-dev checkinstall \ + libglu1-mesa-dev libxmu-dev \ + ghostscript wget -y make ccache g++ + sudo apt-get update -y + - name: Configure ccache + run: | + echo CCACHE_BASEDIR=$PWD >> ${GITHUB_ENV} + echo CCACHE_DIR=$PWD/.ccache >> ${GITHUB_ENV} + echo CCACHE_MAXSIZE=250M >> ${GITHUB_ENV} + ccache -z + working-directory: ${{ github.workspace }} + - name: Configure + run: | + mkdir -p $GITHUB_WORKSPACE/build + cd $GITHUB_WORKSPACE/build + cmake ${CMAKE_OPTIONS} .. + - name: Build + run: | + make -j$(nproc) + - name: ccache statistics + run: ccache -s + From 01060b142359919ca2306d15a73177b03c06d953 Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Sat, 10 Dec 2022 17:32:39 +0100 Subject: [PATCH 009/253] fix syntax --- .github/workflows/cmake.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 53b4dd25924..eae3da7da88 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -55,7 +55,7 @@ jobs: run: | sudo add-apt-repository -y ppa:ubuntugis/ubuntugis-unstable sudo apt-get update - sudo apt-get install -y -q apt-get install build-essential \ + sudo apt-get install -y -q build-essential \ flex make bison gcc libgcc1 g++ ccache \ python3 python3-dev \ python3-opengl python3-wxgtk4.0 \ From dc9a3d6397a12eb6d88ef8c78d3ba889cb139f7d Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Sat, 10 Dec 2022 17:39:25 +0100 Subject: [PATCH 010/253] fix Build step --- .github/workflows/cmake.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index eae3da7da88..2d6ea8f80e3 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -82,9 +82,10 @@ jobs: run: | mkdir -p $GITHUB_WORKSPACE/build cd $GITHUB_WORKSPACE/build - cmake ${CMAKE_OPTIONS} .. + cmake ${CMAKE_OPTIONS} .. - name: Build run: | + cd $GITHUB_WORKSPACE/build make -j$(nproc) - name: ccache statistics run: ccache -s From 155539d60be22987436bef527378c8274f682e3a Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Sun, 11 Dec 2022 15:54:28 +0100 Subject: [PATCH 011/253] Build step debugging --- .github/workflows/cmake.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 2d6ea8f80e3..f76d33b1335 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -51,7 +51,7 @@ jobs: echo "$GITHUB_WORKSPACE/cmake-3.9.1-Linux-x86_64/bin" >> $GITHUB_PATH - run: | cmake --version - - name: Install dependency + - name: Install dependencies run: | sudo add-apt-repository -y ppa:ubuntugis/ubuntugis-unstable sudo apt-get update @@ -83,6 +83,9 @@ jobs: mkdir -p $GITHUB_WORKSPACE/build cd $GITHUB_WORKSPACE/build cmake ${CMAKE_OPTIONS} .. + ls $GITHUB_WORKSPACE/build + sudo apt-get install -y -q mlocate ; sudo updatedb + locate include/Make/Platform.make - name: Build run: | cd $GITHUB_WORKSPACE/build From fd1b811a8cc69cc60e33bc3efa51c8713e9ccdf8 Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 2 Jan 2023 09:47:49 +0100 Subject: [PATCH 012/253] Simplify cmake command call MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Edouard Choinière <27212526+echoix@users.noreply.github.com> --- .github/workflows/cmake.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index f76d33b1335..205da83dafd 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -80,9 +80,7 @@ jobs: working-directory: ${{ github.workspace }} - name: Configure run: | - mkdir -p $GITHUB_WORKSPACE/build - cd $GITHUB_WORKSPACE/build - cmake ${CMAKE_OPTIONS} .. + cmake ${CMAKE_OPTIONS} -S $GITHUB_WORKSPACE -B $GITHUB_WORKSPACE/build ls $GITHUB_WORKSPACE/build sudo apt-get install -y -q mlocate ; sudo updatedb locate include/Make/Platform.make From 0c6b1cc5828cded2ba4adbb346586c70a1dff5a2 Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 2 Jan 2023 09:48:48 +0100 Subject: [PATCH 013/253] Remove debugging leftover. --- .github/workflows/cmake.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 205da83dafd..849d9d6bdb7 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -81,9 +81,6 @@ jobs: - name: Configure run: | cmake ${CMAKE_OPTIONS} -S $GITHUB_WORKSPACE -B $GITHUB_WORKSPACE/build - ls $GITHUB_WORKSPACE/build - sudo apt-get install -y -q mlocate ; sudo updatedb - locate include/Make/Platform.make - name: Build run: | cd $GITHUB_WORKSPACE/build From 42f7e2b4edd94b261bc88a3f36cf8402d1db8bdb Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 2 Jan 2023 09:49:34 +0100 Subject: [PATCH 014/253] make -> cmake MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Edouard Choinière <27212526+echoix@users.noreply.github.com> --- .github/workflows/cmake.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 849d9d6bdb7..928a16b0af0 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -84,7 +84,7 @@ jobs: - name: Build run: | cd $GITHUB_WORKSPACE/build - make -j$(nproc) + cmake --build . -j$(nproc) - name: ccache statistics run: ccache -s From 7dd1daebc6cded4277c733037527fcc598c1c933 Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 2 Jan 2023 11:45:54 +0100 Subject: [PATCH 015/253] update year MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Edouard Choinière <27212526+echoix@users.noreply.github.com> --- cmake/modules/build_program_in_subdir.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/modules/build_program_in_subdir.cmake b/cmake/modules/build_program_in_subdir.cmake index 3da2baa6ac1..e8197e56b8b 100644 --- a/cmake/modules/build_program_in_subdir.cmake +++ b/cmake/modules/build_program_in_subdir.cmake @@ -1,7 +1,7 @@ # AUTHOR(S): Rashad Kanavath # PURPOSE: CMake macro to build a grass executable (program) under sub directory # which is passed as argument to macro -# COPYRIGHT: (C) 2000 by the GRASS Development Team +# COPYRIGHT: (C) 2020 by the GRASS Development Team # This program is free software under the GPL (>=v2) # Read the file COPYING that comes with GRASS for details. From 3518c4c5d82b739083580ff9ab4c720d18d5083c Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 2 Jan 2023 13:26:35 +0100 Subject: [PATCH 016/253] python_bandref -> python_semantic_label MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Edouard Choinière <27212526+echoix@users.noreply.github.com> --- python/grass/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/grass/CMakeLists.txt b/python/grass/CMakeLists.txt index 78a229ece5b..858ad71fd58 100644 --- a/python/grass/CMakeLists.txt +++ b/python/grass/CMakeLists.txt @@ -27,7 +27,7 @@ add_custom_target(LIB_PYTHON COMMAND ${CMAKE_COMMAND} -E echo "#coding=utf-8" > ${GISBASE}/etc/python/__init__.py COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/__init__.py ${GISBASE}/etc/python/grass/ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/etc/python/grass/script/setup.py ${GISBASE}/etc/python/grass/script/ - DEPENDS python_bandref python_exceptions python_imaging python_pydispatch python_script python_temporal + DEPENDS python_exceptions python_imaging python_pydispatch python_script python_semantic_label python_temporal python_pygrass python_pygrass_messages python_pygrass_modules python_pygrass_modules python_pygrass_raster python_pygrass_vector python_pygrass_gis python_pygrass_shell python_pygrass_tests python_pygrass_rpc From 59ac36a8b09e958abb99610fc87c90265a2c4bd5 Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 2 Jan 2023 13:27:29 +0100 Subject: [PATCH 017/253] remove outdated bandref MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Edouard Choinière <27212526+echoix@users.noreply.github.com> --- python/grass/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/python/grass/CMakeLists.txt b/python/grass/CMakeLists.txt index 858ad71fd58..eb1e69f9694 100644 --- a/python/grass/CMakeLists.txt +++ b/python/grass/CMakeLists.txt @@ -1,5 +1,4 @@ -copy_python_files_in_subdir(bandref etc/python/grass) copy_python_files_in_subdir(exceptions etc/python/grass) copy_python_files_in_subdir(gunittest etc/python/grass) copy_python_files_in_subdir(imaging etc/python/grass) From 61209fea80ba7646d9316f7ed6ef91a435cc2398 Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 2 Jan 2023 13:27:55 +0100 Subject: [PATCH 018/253] bandref -> semantic_label MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Edouard Choinière <27212526+echoix@users.noreply.github.com> --- python/grass/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/python/grass/CMakeLists.txt b/python/grass/CMakeLists.txt index eb1e69f9694..75b9b171f29 100644 --- a/python/grass/CMakeLists.txt +++ b/python/grass/CMakeLists.txt @@ -4,6 +4,7 @@ copy_python_files_in_subdir(gunittest etc/python/grass) copy_python_files_in_subdir(imaging etc/python/grass) copy_python_files_in_subdir(pydispatch etc/python/grass) copy_python_files_in_subdir(script etc/python/grass) +copy_python_files_in_subdir(semantic_label etc/python/grass) copy_python_files_in_subdir(temporal etc/python/grass) copy_python_files_in_subdir(pygrass etc/python/grass) copy_python_files_in_subdir(pygrass/messages etc/python/grass) From f16b92f0cf101ecadaf74929e4ad5f2d705f8ee3 Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 2 Jan 2023 13:34:48 +0100 Subject: [PATCH 019/253] added python/CMakeLists.txt (from https://github.com/OSGeo/grass/pull/289/files#diff-28d5606d950172ebb1e15f25bf4c4b23e489abc29dceda5dd3df606a2a3a6d01) --- python/CMakeLists.txt | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 python/CMakeLists.txt diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt new file mode 100644 index 00000000000..d27e5854986 --- /dev/null +++ b/python/CMakeLists.txt @@ -0,0 +1,42 @@ + +copy_python_files_in_subdir(exceptions etc/python/grass) +copy_python_files_in_subdir(gunittest etc/python/grass) +copy_python_files_in_subdir(imaging etc/python/grass) +copy_python_files_in_subdir(pydispatch etc/python/grass) +copy_python_files_in_subdir(script etc/python/grass) +copy_python_files_in_subdir(semantic_label etc/python/grass) +copy_python_files_in_subdir(temporal etc/python/grass) +copy_python_files_in_subdir(pygrass etc/python/grass) +copy_python_files_in_subdir(pygrass/messages etc/python/grass) +copy_python_files_in_subdir(pygrass/modules etc/python/grass) +copy_python_files_in_subdir(pygrass/raster etc/python/grass) +copy_python_files_in_subdir(pygrass/vector etc/python/grass) +copy_python_files_in_subdir(pygrass/gis etc/python/grass) +copy_python_files_in_subdir(pygrass/shell etc/python/grass) +copy_python_files_in_subdir(pygrass/tests etc/python/grass) +copy_python_files_in_subdir(pygrass/rpc etc/python/grass) +copy_python_files_in_subdir(pygrass/modules/interface etc/python/grass) +copy_python_files_in_subdir(pygrass/modules/grid etc/python/grass) + + +configure_file(script/setup.py + ${CMAKE_BINARY_DIR}/etc/python/grass/script/setup.py + COPYONLY) + +add_custom_target(LIB_PYTHON + COMMAND ${CMAKE_COMMAND} -E echo "#coding=utf-8" > ${GISBASE}/etc/python/__init__.py + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/__init__.py ${GISBASE}/etc/python/grass/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/etc/python/grass/script/setup.py ${GISBASE}/etc/python/grass/script/ + DEPENDS python_exceptions python_imaging python_pydispatch python_script python_semantic_label python_temporal + python_pygrass python_pygrass_messages python_pygrass_modules python_pygrass_modules + python_pygrass_raster python_pygrass_vector python_pygrass_gis python_pygrass_shell + python_pygrass_tests python_pygrass_rpc + python_pygrass_modules_interface + python_pygrass_modules_grid) + +#TODO: MODULES DISABLED +# add_subdirectory(ctypes) + +set_target_properties (LIB_PYTHON PROPERTIES FOLDER lib) + +install(DIRECTORY ${GISBASE}/etc/python/grass DESTINATION etc/python/grass/) From dfa45944e94de198c1799d6aa8181e8e6d9dc802 Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 2 Jan 2023 13:36:26 +0100 Subject: [PATCH 020/253] add_subdirectory(python) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Edouard Choinière <27212526+echoix@users.noreply.github.com> --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 33c91e688f4..7a9dea54748 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -208,6 +208,8 @@ if(WITH_PYTHON) add_subdirectory(gui) endif() +add_subdirectory(python) + if(WITH_DOCS) add_subdirectory(doc) add_subdirectory(man) From 3f1196082b4c16dd648925364d23b37cea785d0c Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 2 Jan 2023 15:41:31 +0100 Subject: [PATCH 021/253] fix path to grass/script/setup.py --- python/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index d27e5854986..976c4046b17 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -19,7 +19,7 @@ copy_python_files_in_subdir(pygrass/modules/interface etc/python/grass) copy_python_files_in_subdir(pygrass/modules/grid etc/python/grass) -configure_file(script/setup.py +configure_file(grass/script/setup.py ${CMAKE_BINARY_DIR}/etc/python/grass/script/setup.py COPYONLY) From 0081ec132d21d0fcfad9713859f935c373e1a085 Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 2 Jan 2023 20:13:30 +0100 Subject: [PATCH 022/253] remove files deleted in PR #1400 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Edouard Choinière <27212526+echoix@users.noreply.github.com> --- gui/wxpython/CMakeLists.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/gui/wxpython/CMakeLists.txt b/gui/wxpython/CMakeLists.txt index ef69efa6076..0f8944d97a5 100644 --- a/gui/wxpython/CMakeLists.txt +++ b/gui/wxpython/CMakeLists.txt @@ -12,8 +12,6 @@ foreach(gui_lib_DIR ${gui_lib_DIRS}) list(APPEND gui_lib_targets python_${gui_lib_DIR}) endforeach() add_custom_target(GUI_WXPYTHON - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/gis_set.py ${WXPYTHON_DIR}/ - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/gis_set_error.py ${WXPYTHON_DIR}/ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/wxgui.py ${WXPYTHON_DIR}/ DEPENDS ${gui_lib_targets}) From 39ac99ffb3fc052bfab899aac51ae287f5490e0a Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 2 Jan 2023 20:18:14 +0100 Subject: [PATCH 023/253] Fix missing EOL --- raster/r.watershed/CMakeLists.txt | 2 +- raster3d/CMakeLists.txt | 2 +- scripts/CMakeLists.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/raster/r.watershed/CMakeLists.txt b/raster/r.watershed/CMakeLists.txt index 2a69c6d10b6..eede612ccf9 100644 --- a/raster/r.watershed/CMakeLists.txt +++ b/raster/r.watershed/CMakeLists.txt @@ -8,4 +8,4 @@ RUNTIME_OUTPUT_DIR etc/r.watershed) build_program_in_subdir(front NAME r.watershed -DEPENDS grass_gis grass_raster) \ No newline at end of file +DEPENDS grass_gis grass_raster) diff --git a/raster3d/CMakeLists.txt b/raster3d/CMakeLists.txt index 266e0e9861c..881d35e1778 100644 --- a/raster3d/CMakeLists.txt +++ b/raster3d/CMakeLists.txt @@ -94,4 +94,4 @@ if(NOT MSVC) build_program_in_subdir( r3.in.v5d DEPENDS grass_gis grass_raster3d) -endif() \ No newline at end of file +endif() diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt index 37106770768..c45cb51f41e 100644 --- a/scripts/CMakeLists.txt +++ b/scripts/CMakeLists.txt @@ -99,4 +99,4 @@ add_custom_target(r.in.wms_files ) add_dependencies(r.in.wms r.in.wms_files) - set_target_properties (r.in.wms_files PROPERTIES FOLDER scripts) \ No newline at end of file + set_target_properties (r.in.wms_files PROPERTIES FOLDER scripts) From 41498f0c46078c4cc170994622adef158ca06f16 Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Tue, 3 Jan 2023 08:28:59 +0100 Subject: [PATCH 024/253] just peek in the folder (by @echoix) --- python/CMakeLists.txt | 44 ++----------------------------------------- 1 file changed, 2 insertions(+), 42 deletions(-) diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 976c4046b17..f3f28a0c1d0 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -1,42 +1,2 @@ - -copy_python_files_in_subdir(exceptions etc/python/grass) -copy_python_files_in_subdir(gunittest etc/python/grass) -copy_python_files_in_subdir(imaging etc/python/grass) -copy_python_files_in_subdir(pydispatch etc/python/grass) -copy_python_files_in_subdir(script etc/python/grass) -copy_python_files_in_subdir(semantic_label etc/python/grass) -copy_python_files_in_subdir(temporal etc/python/grass) -copy_python_files_in_subdir(pygrass etc/python/grass) -copy_python_files_in_subdir(pygrass/messages etc/python/grass) -copy_python_files_in_subdir(pygrass/modules etc/python/grass) -copy_python_files_in_subdir(pygrass/raster etc/python/grass) -copy_python_files_in_subdir(pygrass/vector etc/python/grass) -copy_python_files_in_subdir(pygrass/gis etc/python/grass) -copy_python_files_in_subdir(pygrass/shell etc/python/grass) -copy_python_files_in_subdir(pygrass/tests etc/python/grass) -copy_python_files_in_subdir(pygrass/rpc etc/python/grass) -copy_python_files_in_subdir(pygrass/modules/interface etc/python/grass) -copy_python_files_in_subdir(pygrass/modules/grid etc/python/grass) - - -configure_file(grass/script/setup.py - ${CMAKE_BINARY_DIR}/etc/python/grass/script/setup.py - COPYONLY) - -add_custom_target(LIB_PYTHON - COMMAND ${CMAKE_COMMAND} -E echo "#coding=utf-8" > ${GISBASE}/etc/python/__init__.py - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/__init__.py ${GISBASE}/etc/python/grass/ - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/etc/python/grass/script/setup.py ${GISBASE}/etc/python/grass/script/ - DEPENDS python_exceptions python_imaging python_pydispatch python_script python_semantic_label python_temporal - python_pygrass python_pygrass_messages python_pygrass_modules python_pygrass_modules - python_pygrass_raster python_pygrass_vector python_pygrass_gis python_pygrass_shell - python_pygrass_tests python_pygrass_rpc - python_pygrass_modules_interface - python_pygrass_modules_grid) - -#TODO: MODULES DISABLED -# add_subdirectory(ctypes) - -set_target_properties (LIB_PYTHON PROPERTIES FOLDER lib) - -install(DIRECTORY ${GISBASE}/etc/python/grass DESTINATION etc/python/grass/) +add_subdirectory(grass) +add_subdirectory(libgrass_interface_generator) From b5adab35ab1feaf6f9b17a43eedff06f421075ed Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Wed, 4 Jan 2023 12:35:27 +0100 Subject: [PATCH 025/253] sync clang-format changes from main --- include/grass/iostream/mm.h | 1 - lib/db/dbmi_base/dbmscap.c | 4 ++-- lib/external/ccmath/ccmath.h | 12 +++++++----- lib/gis/spawn.c | 8 ++++---- lib/gis/user_config.c | 3 ++- lib/iostream/rtimer.cpp | 23 +++++++++++------------ lib/pngdriver/graph_set.c | 4 ++-- lib/rst/interp_float/point2d.c | 3 ++- raster/r.viewshed/statusstructure.cpp | 11 +++-------- 9 files changed, 33 insertions(+), 36 deletions(-) diff --git a/include/grass/iostream/mm.h b/include/grass/iostream/mm.h index dfe0fd9f68c..5b5cfa1e2d9 100644 --- a/include/grass/iostream/mm.h +++ b/include/grass/iostream/mm.h @@ -79,7 +79,6 @@ enum MM_stream_usage { MM_STREAM_USAGE_MAXIMUM }; - #ifdef GRASS_CMAKE_BUILD #include #else diff --git a/lib/db/dbmi_base/dbmscap.c b/lib/db/dbmi_base/dbmscap.c index 51aa438c653..c6ce8f755de 100644 --- a/lib/db/dbmi_base/dbmscap.c +++ b/lib/db/dbmi_base/dbmscap.c @@ -189,8 +189,8 @@ dbDbmscap *db_read_dbmscap(void) name = G_str_replace(ent->d_name, ".exe", ""); #ifdef _WIN32 - dirpath = G_malloc(strlen("\\driver\\db\\") - + strlen(G_gisbase()) + strlen(ent->d_name) + 1); + dirpath = G_malloc(strlen("\\driver\\db\\") + strlen(G_gisbase()) + + strlen(ent->d_name) + 1); sprintf(dirpath, "%s\\driver\\db\\%s", G_gisbase(), ent->d_name); G_convert_dirseps_to_host(dirpath); #else diff --git a/lib/external/ccmath/ccmath.h b/lib/external/ccmath/ccmath.h index 74aac8634f3..44fb1e5acb3 100644 --- a/lib/external/ccmath/ccmath.h +++ b/lib/external/ccmath/ccmath.h @@ -32,18 +32,16 @@ #define NULL ((void *)0 #endif - /* Complex Types */ +/* Complex Types */ #ifndef CPX #ifndef _MSC_VER -struct complex -{ +struct complex { double re, im; }; typedef struct complex Cpx; #else /* _MSVC has complex struct and cannot be used */ -struct gcomplex -{ +struct gcomplex { double re, im; }; typedef struct gcomplex Cpx; @@ -54,8 +52,10 @@ typedef struct gcomplex Cpx; /* Linear Algebra */ + /* Real Linear Systems */ + int minv(double *a, int n); int psinv(double *v, int n); @@ -178,6 +178,8 @@ void unitary(Cpx *u, int n); void hmgen(Cpx *h, double *eval, Cpx *u, int n); +int csolv(Cpx *a, Cpx *b, int n); + /* utility routines for hermitian eigen problems */ void chouse(Cpx *a, double *d, double *ud, int n); diff --git a/lib/gis/spawn.c b/lib/gis/spawn.c index 2642f4020ab..1b1630ebc78 100644 --- a/lib/gis/spawn.c +++ b/lib/gis/spawn.c @@ -935,11 +935,11 @@ int G_spawn(const char *command, ...) va_end(va); - status = G_spawn_ex(command, + status = + G_spawn_ex(command, #ifndef _WIN32 - SF_SIGNAL, SST_PRE, SSA_IGNORE, SIGINT, - SF_SIGNAL, SST_PRE, SSA_IGNORE, SIGQUIT, - SF_SIGNAL, SST_PRE, SSA_BLOCK, SIGCHLD, + SF_SIGNAL, SST_PRE, SSA_IGNORE, SIGINT, SF_SIGNAL, SST_PRE, + SSA_IGNORE, SIGQUIT, SF_SIGNAL, SST_PRE, SSA_BLOCK, SIGCHLD, #endif SF_ARGVEC, args, NULL); diff --git a/lib/gis/user_config.c b/lib/gis/user_config.c index b9edce74490..62c540225c6 100644 --- a/lib/gis/user_config.c +++ b/lib/gis/user_config.c @@ -44,7 +44,7 @@ * path [caller must G_free ()] on success, or NULL on failure *************************************************************************/ -#ifndef _WIN32 /* TODO */ +#ifndef _WIN32 /* TODO */ static char *_make_toplevel(void) { size_t len; @@ -317,5 +317,6 @@ char *G_rc_path(const char *element, const char *item) return path; } /* G_rc_path */ + /* vim: set softtabstop=4 shiftwidth=4 expandtab: */ #endif diff --git a/lib/iostream/rtimer.cpp b/lib/iostream/rtimer.cpp index c0d8a4fd9fc..b241a531d3e 100644 --- a/lib/iostream/rtimer.cpp +++ b/lib/iostream/rtimer.cpp @@ -44,25 +44,24 @@ #include #endif +// #include #include -#define BUFMAX 256 - char *rt_sprint_safe(char *buf, Rtimer rt) { if (rt_w_useconds(rt) == 0) { - snprintf(buf, BUFMAX, "[%4.2fu (%.0f%%) %4.2fs (%.0f%%) %4.2f %.1f%%]", - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0); + sprintf(buf, "[%4.2fu (%.0f%%) %4.2fs (%.0f%%) %4.2f %.1f%%]", 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0); } else { - snprintf(buf, BUFMAX, "[%4.2fu (%.0f%%) %4.2fs (%.0f%%) %4.2f %.1f%%]", - rt_u_useconds(rt) / 1000000, - 100.0 * rt_u_useconds(rt) / rt_w_useconds(rt), - rt_s_useconds(rt) / 1000000, - 100.0 * rt_s_useconds(rt) / rt_w_useconds(rt), - rt_w_useconds(rt) / 1000000, - 100.0 * (rt_u_useconds(rt) + rt_s_useconds(rt)) / - rt_w_useconds(rt)); + sprintf(buf, "[%4.2fu (%.0f%%) %4.2fs (%.0f%%) %4.2f %.1f%%]", + rt_u_useconds(rt) / 1000000, + 100.0 * rt_u_useconds(rt) / rt_w_useconds(rt), + rt_s_useconds(rt) / 1000000, + 100.0 * rt_s_useconds(rt) / rt_w_useconds(rt), + rt_w_useconds(rt) / 1000000, + 100.0 * (rt_u_useconds(rt) + rt_s_useconds(rt)) / + rt_w_useconds(rt)); } return buf; } diff --git a/lib/pngdriver/graph_set.c b/lib/pngdriver/graph_set.c index 8376e421b12..03c65ebbb8d 100644 --- a/lib/pngdriver/graph_set.c +++ b/lib/pngdriver/graph_set.c @@ -42,8 +42,8 @@ static void map_file(void) return; #ifdef _WIN32 - png.handle = CreateFileMapping((HANDLE) _get_osfhandle(fd), - NULL, PAGE_READWRITE, 0, size, NULL); + png.handle = CreateFileMapping((HANDLE)_get_osfhandle(fd), NULL, + PAGE_READWRITE, 0, size, NULL); if (!png.handle) return; ptr = MapViewOfFile(png.handle, FILE_MAP_WRITE, 0, 0, size); diff --git a/lib/rst/interp_float/point2d.c b/lib/rst/interp_float/point2d.c index 7315bc62a3b..ff2f309639a 100644 --- a/lib/rst/interp_float/point2d.c +++ b/lib/rst/interp_float/point2d.c @@ -31,7 +31,7 @@ #include #ifndef POINT2D_C -#define POINT2D_C 1 +#define POINT2D_C #endif #include @@ -151,6 +151,7 @@ int IL_check_at_points_2d(struct interp_params *params, } } /* cv */ + return 1; } diff --git a/raster/r.viewshed/statusstructure.cpp b/raster/r.viewshed/statusstructure.cpp index dd4e733cb81..05ef41b85d6 100644 --- a/raster/r.viewshed/statusstructure.cpp +++ b/raster/r.viewshed/statusstructure.cpp @@ -17,7 +17,7 @@ * considered visible to each other if the cells where they belong are * visible to each other. Two cells are visible to each other if the * line-of-sight that connects their centers does not intersect the - * terrain. The terrain is NOT viewed as a tessellation of flat cells, + * terrain. The terrain is NOT viewed as a tesselation of flat cells, * i.e. if the line-of-sight does not pass through the cell center, * elevation is determined using bilinear interpolation. * The viewshed algorithm is efficient both in @@ -38,8 +38,7 @@ #include #include #include -extern "C" -{ +extern "C" { #include #include } @@ -58,7 +57,7 @@ extern "C" If doCurv is set we need to consider the curvature of the earth */ float get_vertical_angle(Viewpoint vp, StatusNode sn, surface_type elev, - int doCurv UNUSED) + int doCurv) { /*determine the difference in elevation, based on the curvature */ @@ -107,9 +106,7 @@ void calculate_dist_n_gradient(StatusNode *sn, double elev, Viewpoint *vp, //sn->dist2vp = sqrt((float) ( pow(sn->row - vp->row,2.0) + // pow(sn->col - vp->col,2.0))); //sn->gradient = (sn->elev - vp->elev)/(sn->dist2vp); */ - double diffElev = elev - vp->elev; - if (G_projection() == PROJECTION_LL) { double dist = G_distance(Rast_col_to_easting(sn->col + 0.5, &(hd.window)), @@ -149,7 +146,6 @@ void calculate_dist_n_gradient(StatusNode *sn, double elev, Viewpoint *vp, /*maintain sign */ if (elev < vp->elev) sn->gradient[1] = -sn->gradient[1]; - return; } @@ -163,7 +159,6 @@ void calculate_event_gradient(StatusNode *sn, int e_idx, double row, double col, //sn->dist2vp = sqrt((float) ( pow(sn->row - vp->row,2.0) + // pow(sn->col - vp->col,2.0))); //sn->gradient = (sn->elev - vp->elev)/(sn->dist2vp); */ - double diffElev = elev - vp->elev; double dist2vp; From 2697c9e73d549ba30a0507d1a0ec58a63bc66800 Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Wed, 4 Jan 2023 14:38:28 +0100 Subject: [PATCH 026/253] apply clang-format --- cmake/tests/have_pbuffer.c | 14 +-- cmake/tests/have_pixmaps.c | 13 ++- cmake/tests/have_pqcmdtuples.c | 13 +-- lib/db/dbmi_base/login.c | 4 +- lib/db/dbmi_base/msvc/dirent.c | 166 +++++++++++++++----------------- lib/db/dbmi_base/msvc/dirent.h | 16 ++- lib/gis/gisinit.c | 4 +- lib/gis/ls_filter.c | 24 ++--- lib/gis/parser_interface.c | 3 +- lib/raster3d/test/test_tools.c | 2 +- msvc/unistd.h | 55 +++++------ raster/r.terraflow/common.cpp | 2 +- raster/r.terraflow/filldepr.cpp | 2 +- 13 files changed, 154 insertions(+), 164 deletions(-) diff --git a/cmake/tests/have_pbuffer.c b/cmake/tests/have_pbuffer.c index ebc7244acb9..595d07f92a0 100644 --- a/cmake/tests/have_pbuffer.c +++ b/cmake/tests/have_pbuffer.c @@ -4,15 +4,17 @@ builtin and then its argument prototype would still apply. */ char glXCreatePbuffer(); -int main() { +int main() +{ /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ -#if defined (__stub_glXCreatePbuffer) || defined (__stub___glXCreatePbuffer) -choke me +#if defined(__stub_glXCreatePbuffer) || defined(__stub___glXCreatePbuffer) + choke me #else -glXCreatePbuffer(); + glXCreatePbuffer(); #endif -; return 0; } - + ; + return 0; +} diff --git a/cmake/tests/have_pixmaps.c b/cmake/tests/have_pixmaps.c index 88b501bde46..ad46df8c350 100644 --- a/cmake/tests/have_pixmaps.c +++ b/cmake/tests/have_pixmaps.c @@ -6,15 +6,18 @@ builtin and then its argument prototype would still apply. */ char glXCreateGLXPixmap(); -int main() { +int main() +{ /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ -#if defined (__stub_glXCreateGLXPixmap) || defined (__stub___glXCreateGLXPixmap) -choke me +#if defined(__stub_glXCreateGLXPixmap) || defined(__stub___glXCreateGLXPixmap) + choke me #else -glXCreateGLXPixmap(); + glXCreateGLXPixmap(); #endif -; return 0; } + ; + return 0; +} diff --git a/cmake/tests/have_pqcmdtuples.c b/cmake/tests/have_pqcmdtuples.c index fcd05fe8d22..ad4ae92571d 100644 --- a/cmake/tests/have_pqcmdtuples.c +++ b/cmake/tests/have_pqcmdtuples.c @@ -1,8 +1,9 @@ #include -int main() { - PGresult* res = NULL; - PGconn* conn = PQconnectdb(NULL); - res = PQexec(conn, NULL); - PQcmdTuples(res); - return 0; +int main() +{ + PGresult *res = NULL; + PGconn *conn = PQconnectdb(NULL); + res = PQexec(conn, NULL); + PQcmdTuples(res); + return 0; } diff --git a/lib/db/dbmi_base/login.c b/lib/db/dbmi_base/login.c index fd8a00d43d8..d6e2a704c70 100644 --- a/lib/db/dbmi_base/login.c +++ b/lib/db/dbmi_base/login.c @@ -167,9 +167,9 @@ static int write_file(LOGIN *login) /* fchmod is not available on Windows */ /* fchmod ( fileno(fd), S_IRUSR | S_IWUSR ); */ - #ifndef _MSC_VER +#ifndef _MSC_VER chmod(file, S_IRUSR | S_IWUSR); - #endif +#endif for (i = 0; i < login->n; i++) { fprintf(fd, "%s|%s", login->data[i].driver, login->data[i].database); if (login->data[i].user) { diff --git a/lib/db/dbmi_base/msvc/dirent.c b/lib/db/dbmi_base/msvc/dirent.c index a5466566ecc..44f7a6a7d29 100644 --- a/lib/db/dbmi_base/msvc/dirent.c +++ b/lib/db/dbmi_base/msvc/dirent.c @@ -5,109 +5,97 @@ typedef ptrdiff_t handle_type; /* C99's intptr_t not sufficiently portable */ -struct DIR -{ - handle_type handle; /* -1 for failed rewind */ - struct _finddata_t info; - struct dirent result; /* d_name null iff first time */ - char* name; /* null-terminated char string */ +struct DIR { + handle_type handle; /* -1 for failed rewind */ + struct _finddata_t info; + struct dirent result; /* d_name null iff first time */ + char *name; /* null-terminated char string */ }; -DIR* opendir(const char* name) +DIR *opendir(const char *name) { - DIR* dir = 0; - - if (name && name[0]) - { - size_t base_length = strlen(name); - const char* all = /* search pattern must end with suitable wildcard */ - strchr("/\\", name[base_length - 1]) ? "*" : "/*"; - - if ((dir = (DIR*)malloc(sizeof * dir)) != 0 && - (dir->name = (char*)malloc(base_length + strlen(all) + 1)) != 0) - { - strcat(strcpy(dir->name, name), all); - - if ((dir->handle = - (handle_type)_findfirst(dir->name, &dir->info)) != -1) - { - dir->result.d_name = 0; - } - else /* rollback */ - { - free(dir->name); - free(dir); - dir = 0; - } - } - else /* rollback */ - { - free(dir); - dir = 0; - errno = ENOMEM; - } - } - else - { - errno = EINVAL; - } - - return dir; + DIR *dir = 0; + + if (name && name[0]) { + size_t base_length = strlen(name); + const char *all = /* search pattern must end with suitable wildcard */ + strchr("/\\", name[base_length - 1]) ? "*" : "/*"; + + if ((dir = (DIR *)malloc(sizeof *dir)) != 0 && + (dir->name = (char *)malloc(base_length + strlen(all) + 1)) != 0) { + strcat(strcpy(dir->name, name), all); + + if ((dir->handle = + (handle_type)_findfirst(dir->name, &dir->info)) != -1) { + dir->result.d_name = 0; + } + else /* rollback */ + { + free(dir->name); + free(dir); + dir = 0; + } + } + else /* rollback */ + { + free(dir); + dir = 0; + errno = ENOMEM; + } + } + else { + errno = EINVAL; + } + + return dir; } -int closedir(DIR* dir) +int closedir(DIR *dir) { - int result = -1; + int result = -1; - if (dir) - { - if (dir->handle != -1) - { - result = _findclose(dir->handle); - } + if (dir) { + if (dir->handle != -1) { + result = _findclose(dir->handle); + } - free(dir->name); - free(dir); - } + free(dir->name); + free(dir); + } - if (result == -1) /* map all errors to EBADF */ - { - errno = EBADF; - } + if (result == -1) /* map all errors to EBADF */ + { + errno = EBADF; + } - return result; + return result; } -struct dirent* readdir(DIR* dir) +struct dirent *readdir(DIR *dir) { - struct dirent* result = 0; - - if (dir && dir->handle != -1) - { - if (!dir->result.d_name || _findnext(dir->handle, &dir->info) != -1) - { - result = &dir->result; - result->d_name = dir->info.name; - } - } - else - { - errno = EBADF; - } - - return result; + struct dirent *result = 0; + + if (dir && dir->handle != -1) { + if (!dir->result.d_name || _findnext(dir->handle, &dir->info) != -1) { + result = &dir->result; + result->d_name = dir->info.name; + } + } + else { + errno = EBADF; + } + + return result; } -void rewinddir(DIR* dir) +void rewinddir(DIR *dir) { - if (dir && dir->handle != -1) - { - _findclose(dir->handle); - dir->handle = (handle_type)_findfirst(dir->name, &dir->info); - dir->result.d_name = 0; - } - else - { - errno = EBADF; - } + if (dir && dir->handle != -1) { + _findclose(dir->handle); + dir->handle = (handle_type)_findfirst(dir->name, &dir->info); + dir->result.d_name = 0; + } + else { + errno = EBADF; + } } diff --git a/lib/db/dbmi_base/msvc/dirent.h b/lib/db/dbmi_base/msvc/dirent.h index a02a0d828a7..8cd2229e21f 100644 --- a/lib/db/dbmi_base/msvc/dirent.h +++ b/lib/db/dbmi_base/msvc/dirent.h @@ -8,25 +8,23 @@ Author: Kevlin Henney (kevlin@acm.org, kevlin@curbralan.com) History: Created March 1997. Updated June 2003. Rights: See end of file. - + */ #ifdef __cplusplus -extern "C" -{ +extern "C" { #endif typedef struct DIR DIR; -struct dirent -{ +struct dirent { char *d_name; }; -DIR *opendir(const char *); -int closedir(DIR *); +DIR *opendir(const char *); +int closedir(DIR *); struct dirent *readdir(DIR *); -void rewinddir(DIR *); +void rewinddir(DIR *); /* @@ -36,7 +34,7 @@ void rewinddir(DIR *); documentation for any purpose is hereby granted without fee, provided that this copyright and permissions notice appear in all copies and derivatives. - + This software is supplied "as is" without express or implied warranty. But that said, if there are any problems please get in touch. diff --git a/lib/gis/gisinit.c b/lib/gis/gisinit.c index 04bf7e354c6..9ae04ac2f56 100644 --- a/lib/gis/gisinit.c +++ b/lib/gis/gisinit.c @@ -35,7 +35,8 @@ struct G__ G__; /** initialized is set to 1 when engine is initialized */ /* GRASS_GIS_EXPORT static int initialized on windows msvc throws below error. -"Error C2201 'initialized': must have external linkage in order to be exported/imported" +"Error C2201 'initialized': must have external linkage in order to be + exported/imported" So we do an ifndef on msvc. without GRASS_GIS_EXPORT it will be exported in DLL. */ #ifndef _MSC_VER @@ -44,7 +45,6 @@ static int initialized = 0; GRASS_GIS_EXPORT int initialized; #endif - static int gisinit(void); /*! diff --git a/lib/gis/ls_filter.c b/lib/gis/ls_filter.c index 98ff19437cf..f6dba0319e0 100644 --- a/lib/gis/ls_filter.c +++ b/lib/gis/ls_filter.c @@ -159,22 +159,22 @@ static int re_filter(const char *filename, void *closure) /* Optimize the regex */ pcreExtra = pcre_study(pcre_regex, 0, &pcreErrorStr); - pcreExecRet = pcre_exec(pcre_regex, pcreExtra, filename, strlen(filename), /* length of string */ - 0, /* Start looking at this point */ - 0, /* OPTIONS */ - NULL, 0); /* Length of subStrVec */ + pcreExecRet = pcre_exec(pcre_regex, pcreExtra, filename, + strlen(filename), /* length of string */ + 0, /* Start looking at this point */ + 0, /* OPTIONS */ + NULL, 0); /* Length of subStrVec */ /* Optimize the regex */ pcreExtra = pcre_study(pcre_regex, 0, &pcreErrorStr); - pcreExecRet = pcre_exec(pcre_regex, pcreExtra, filename, strlen(filename), /* length of string */ - 0, /* Start looking at this point */ - 0, /* OPTIONS */ - NULL, 0); /* Length of subStrVec */ + pcreExecRet = pcre_exec(pcre_regex, pcreExtra, filename, + strlen(filename), /* length of string */ + 0, /* Start looking at this point */ + 0, /* OPTIONS */ + NULL, 0); /* Length of subStrVec */ return filename[0] != '.' && pcreExecRet == 0; #endif - - } void *G_ls_regex_filter(const char *pat, int exclude, int extended, @@ -235,7 +235,6 @@ void *G_ls_regex_filter(const char *pat, int exclude, int extended, return pcre_regex; #endif - } void *G_ls_glob_filter(const char *pat, int exclude, int ignorecase) @@ -270,8 +269,6 @@ void *G_ls_glob_filter(const char *pat, int exclude, int ignorecase) #ifdef HAVE_PCRE_H return pcre_regex; #endif - - } void G_free_ls_filter(void *regex) @@ -286,5 +283,4 @@ void G_free_ls_filter(void *regex) #endif G_free(regex); - } diff --git a/lib/gis/parser_interface.c b/lib/gis/parser_interface.c index d782bc97b14..fb091af9144 100644 --- a/lib/gis/parser_interface.c +++ b/lib/gis/parser_interface.c @@ -114,7 +114,8 @@ void G__usage_xml(void) /* gettext converts strings to encoding returned by nl_langinfo(CODESET) */ -/* check if local_charset() comes from iconv. If so check for iconv library before using it */ +/* check if local_charset() comes from iconv. If so check for iconv library + * before using it */ #if defined(HAVE_LANGINFO_H) encoding = nl_langinfo(CODESET); #elif defined(_WIN32) && defined(USE_NLS) diff --git a/lib/raster3d/test/test_tools.c b/lib/raster3d/test/test_tools.c index a36f09dec63..97af63a7f7e 100644 --- a/lib/raster3d/test/test_tools.c +++ b/lib/raster3d/test/test_tools.c @@ -20,7 +20,7 @@ #include #include "test_raster3d_lib.h" #ifdef _MSC_VER - #include +#include #endif /* *************************************************************** */ diff --git a/msvc/unistd.h b/msvc/unistd.h index a09e1d92e09..a3370ffaa67 100644 --- a/msvc/unistd.h +++ b/msvc/unistd.h @@ -1,5 +1,5 @@ #ifndef _UNISTD_H -#define _UNISTD_H 1 +#define _UNISTD_H 1 /* This file intended to serve as a drop-in replacement for * unistd.h on Windows. @@ -10,29 +10,30 @@ #include #include #include /* for getpid() and the exec..() family */ -#include /* for _getcwd() and _chdir() */ +#include /* for _getcwd() and _chdir() */ #define srandom srand -#define random rand +#define random rand /* Values for the second argument to access. These may be OR'd together. */ -#define R_OK 4 /* Test for read permission. */ -#define W_OK 2 /* Test for write permission. */ -#define X_OK R_OK /* execute permission - unsupported in Windows, +#define R_OK 4 /* Test for read permission. */ +#define W_OK 2 /* Test for write permission. */ +#define X_OK \ + R_OK /* execute permission - unsupported in Windows, \ use R_OK instead. */ -#define F_OK 0 /* Test for existence. */ - -#define access _access -#define dup2 _dup2 -#define execve _execve -#define ftruncate _chsize -#define unlink _unlink -#define fileno _fileno -#define getcwd _getcwd -#define chdir _chdir -#define isatty _isatty -#define lseek _lseek +#define F_OK 0 /* Test for existence. */ + +#define access _access +#define dup2 _dup2 +#define execve _execve +#define ftruncate _chsize +#define unlink _unlink +#define fileno _fileno +#define getcwd _getcwd +#define chdir _chdir +#define isatty _isatty +#define lseek _lseek /* read, write, and close are NOT being #defined here, * because while there are file handle specific versions for Windows, * they probably don't work for sockets. @@ -40,19 +41,19 @@ * to call e.g. closesocket(). */ -//#define ssize_t int +// #define ssize_t int -#define STDIN_FILENO 0 +#define STDIN_FILENO 0 #define STDOUT_FILENO 1 #define STDERR_FILENO 2 /* should be in some equivalent to */ -typedef __int16 int16_t; -typedef __int32 int32_t; -typedef __int64 int64_t; -typedef unsigned __int8 uint8_t; -typedef unsigned __int16 uint16_t; -typedef unsigned __int32 uint32_t; -typedef unsigned __int64 uint64_t; +typedef __int16 int16_t; +typedef __int32 int32_t; +typedef __int64 int64_t; +typedef unsigned __int8 uint8_t; +typedef unsigned __int16 uint16_t; +typedef unsigned __int32 uint32_t; +typedef unsigned __int64 uint64_t; #endif /* unistd.h */ \ No newline at end of file diff --git a/raster/r.terraflow/common.cpp b/raster/r.terraflow/common.cpp index aae8f681e41..964d6760585 100644 --- a/raster/r.terraflow/common.cpp +++ b/raster/r.terraflow/common.cpp @@ -22,7 +22,7 @@ #endif #include -#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) || defined (_MSC_VER) +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) || defined(_MSC_VER) #include #else #include diff --git a/raster/r.terraflow/filldepr.cpp b/raster/r.terraflow/filldepr.cpp index 66b006d4116..c64ae600c94 100644 --- a/raster/r.terraflow/filldepr.cpp +++ b/raster/r.terraflow/filldepr.cpp @@ -23,7 +23,7 @@ #include "common.h" #ifdef _MSC_VER -#pragma warning(default:4716) +#pragma warning(default : 4716) #endif #define FLOOD_DEBUG if(0) From 11eefd905ec848015076e1018353b4206bc7e03c Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Wed, 4 Jan 2023 19:57:28 +0100 Subject: [PATCH 027/253] cmake_minimum_required version 3.11 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Edouard Choinière <27212526+echoix@users.noreply.github.com> --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7a9dea54748..d571732b37e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,7 @@ # This program is free software under the GPL (>=v2) # Read the file COPYING that comes with GRASS for details. -cmake_minimum_required(VERSION 3.3) +cmake_minimum_required(VERSION 3.11) set(CMAKE_DISABLE_IN_SOURCE_BUILD ON) #if(DEFINED ENV{VCPKG_DEFAULT_TRIPLET} AND NOT DEFINED VCPKG_TARGET_TRIPLET) From 1065835a485f524cb375e2960738084efd133f5a Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Wed, 4 Jan 2023 20:05:46 +0100 Subject: [PATCH 028/253] update to CMake 3.11.4 --- .github/workflows/cmake.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 928a16b0af0..b48da8e0352 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -42,13 +42,13 @@ jobs: restore-keys: | ${{ runner.os }}-${{ env.cache-name }}-${{ github.base_ref }} ${{ runner.os }}-${{ env.cache-name }} - - name: Install CMake 3.9.1 + - name: Install CMake 3.11.4 run: | cd ${GITHUB_WORKSPACE} - wget https://github.com/Kitware/CMake/releases/download/v3.9.1/cmake-3.9.1-Linux-x86_64.tar.gz - tar xzf cmake-3.9.1-Linux-x86_64.tar.gz - echo "CMAKE_DIR=$GITHUB_WORKSPACE/cmake-3.9.1-Linux-x86_64/bin" >> $GITHUB_ENV - echo "$GITHUB_WORKSPACE/cmake-3.9.1-Linux-x86_64/bin" >> $GITHUB_PATH + wget https://github.com/Kitware/CMake/releases/download/v3.11.4/cmake-3.11.4-Linux-x86_64.tar.gz + tar xzf cmake-3.11.4-Linux-x86_64.tar.gz + echo "CMAKE_DIR=$GITHUB_WORKSPACE/cmake-3.11.4-Linux-x86_64/bin" >> $GITHUB_ENV + echo "$GITHUB_WORKSPACE/cmake-3.11.4-Linux-x86_64/bin" >> $GITHUB_PATH - run: | cmake --version - name: Install dependencies @@ -80,6 +80,7 @@ jobs: working-directory: ${{ github.workspace }} - name: Configure run: | + mkdir build cmake ${CMAKE_OPTIONS} -S $GITHUB_WORKSPACE -B $GITHUB_WORKSPACE/build - name: Build run: | From 3d2b8b2b9aea9ab599100a813cf86e43dd79422c Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Wed, 4 Jan 2023 21:42:20 +0100 Subject: [PATCH 029/253] add VERBATIM MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Edouard Choinière <27212526+echoix@users.noreply.github.com> --- python/grass/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/python/grass/CMakeLists.txt b/python/grass/CMakeLists.txt index 75b9b171f29..ce721e1ce1b 100644 --- a/python/grass/CMakeLists.txt +++ b/python/grass/CMakeLists.txt @@ -27,6 +27,7 @@ add_custom_target(LIB_PYTHON COMMAND ${CMAKE_COMMAND} -E echo "#coding=utf-8" > ${GISBASE}/etc/python/__init__.py COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/__init__.py ${GISBASE}/etc/python/grass/ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/etc/python/grass/script/setup.py ${GISBASE}/etc/python/grass/script/ + VERBATIM DEPENDS python_exceptions python_imaging python_pydispatch python_script python_semantic_label python_temporal python_pygrass python_pygrass_messages python_pygrass_modules python_pygrass_modules python_pygrass_raster python_pygrass_vector python_pygrass_gis python_pygrass_shell From 6aaa9223245d910abfacff02d8974264c6c7a617 Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Wed, 4 Jan 2023 20:20:18 +0100 Subject: [PATCH 030/253] homogenize ubuntu image name --- .github/workflows/cmake.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index b48da8e0352..6b1c528ff50 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -25,11 +25,11 @@ permissions: jobs: - build-linux-ubuntu-focal: + build-linux-ubuntu-20.04: runs-on: ubuntu-20.04 env: CMAKE_OPTIONS: -DPython_LOOKUP_VERSION=3.8 -DUSE_CCACHE=ON - cache-name: cmake-ubuntu-focal + cache-name: cmake-ubuntu-20.04 steps: - name: Checkout GRASS uses: actions/checkout@v3 From 5faf3e4846b4848b6eef0c36c36878550aadf09a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Bartoletti?= Date: Mon, 5 Jun 2023 09:48:28 +0200 Subject: [PATCH 031/253] use of INFINITY and NAN --- general/g.region/printwindow.c | 2 +- lib/btree2/kdtree.c | 2 +- lib/gis/user_config.c | 2 + lib/iostream/rtimer.cpp | 23 ++++---- lib/raster3d/mask.c | 6 +-- lib/vector/Vlib/box.c | 12 ++--- raster/r.in.bin/main.c | 2 +- raster/r.in.lidar/info.c | 4 +- raster/r.li/r.li.padrange/padrange.c | 78 +++++++++++++-------------- raster/r.out.gdal/main.c | 4 +- raster/r.series.accumulate/main.c | 5 +- raster/r.terraflow/flow.cpp | 22 +------- raster/r.univar/r.univar_main.c | 4 +- raster/r.univar/r3.univar_main.c | 8 +-- raster/r.univar/stats.c | 16 +++--- raster/r.viewshed/statusstructure.cpp | 9 +++- raster3d/r3.in.lidar/info.c | 3 +- vector/v.cluster/main.c | 4 +- vector/v.distance/distance.c | 2 +- vector/v.voronoi/skeleton.c | 2 +- 20 files changed, 100 insertions(+), 110 deletions(-) diff --git a/general/g.region/printwindow.c b/general/g.region/printwindow.c index ab2a5379e2c..c36600864ff 100644 --- a/general/g.region/printwindow.c +++ b/general/g.region/printwindow.c @@ -598,7 +598,7 @@ void print_window(struct Cell_head *window, int print_flag, int flat_flag, double convergence; if (G_projection() == PROJECTION_XY) - convergence = 0. / 0.; + convergence = NAN; else if (G_projection() == PROJECTION_LL) convergence = 0.0; else { diff --git a/lib/btree2/kdtree.c b/lib/btree2/kdtree.c index 54a122033dc..ec0d19e0abc 100644 --- a/lib/btree2/kdtree.c +++ b/lib/btree2/kdtree.c @@ -531,7 +531,7 @@ int kdtree_knn(struct kdtree *t, double *c, int *uid, double *d, int k, if (skip) sn.uid = *skip; - maxdist = 1.0 / 0.0; + maxdist = INFINITY; found = 0; /* go down */ diff --git a/lib/gis/user_config.c b/lib/gis/user_config.c index 62c540225c6..2f3ab77e6a5 100644 --- a/lib/gis/user_config.c +++ b/lib/gis/user_config.c @@ -30,6 +30,8 @@ #include #include #include +#include +#include #ifndef _WIN32 #include #endif diff --git a/lib/iostream/rtimer.cpp b/lib/iostream/rtimer.cpp index b241a531d3e..c0d8a4fd9fc 100644 --- a/lib/iostream/rtimer.cpp +++ b/lib/iostream/rtimer.cpp @@ -44,24 +44,25 @@ #include #endif -// #include #include +#define BUFMAX 256 + char *rt_sprint_safe(char *buf, Rtimer rt) { if (rt_w_useconds(rt) == 0) { - sprintf(buf, "[%4.2fu (%.0f%%) %4.2fs (%.0f%%) %4.2f %.1f%%]", 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0); + snprintf(buf, BUFMAX, "[%4.2fu (%.0f%%) %4.2fs (%.0f%%) %4.2f %.1f%%]", + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0); } else { - sprintf(buf, "[%4.2fu (%.0f%%) %4.2fs (%.0f%%) %4.2f %.1f%%]", - rt_u_useconds(rt) / 1000000, - 100.0 * rt_u_useconds(rt) / rt_w_useconds(rt), - rt_s_useconds(rt) / 1000000, - 100.0 * rt_s_useconds(rt) / rt_w_useconds(rt), - rt_w_useconds(rt) / 1000000, - 100.0 * (rt_u_useconds(rt) + rt_s_useconds(rt)) / - rt_w_useconds(rt)); + snprintf(buf, BUFMAX, "[%4.2fu (%.0f%%) %4.2fs (%.0f%%) %4.2f %.1f%%]", + rt_u_useconds(rt) / 1000000, + 100.0 * rt_u_useconds(rt) / rt_w_useconds(rt), + rt_s_useconds(rt) / 1000000, + 100.0 * rt_s_useconds(rt) / rt_w_useconds(rt), + rt_w_useconds(rt) / 1000000, + 100.0 * (rt_u_useconds(rt) + rt_s_useconds(rt)) / + rt_w_useconds(rt)); } return buf; } diff --git a/lib/raster3d/mask.c b/lib/raster3d/mask.c index 33e5c3c44ee..69e7a498774 100644 --- a/lib/raster3d/mask.c +++ b/lib/raster3d/mask.c @@ -304,12 +304,12 @@ void Rast3d_mask_tile(RASTER3D_Map *map, int tileIndex, void *tile, int type) for (dy = y; dy < rows; dy++) { for (dx = x; dx < cols; dx++) { RASTER3D_MASKNUM(map, dx, dy, dz, tile, type); - tile += length; + tile = (char *)tile + length; } - tile += xLength; + tile = (char *)tile + xLength; } - tile += yLength; + tile = (char *)tile + yLength; } } diff --git a/lib/vector/Vlib/box.c b/lib/vector/Vlib/box.c index 527d3c70c97..229de5a2c53 100644 --- a/lib/vector/Vlib/box.c +++ b/lib/vector/Vlib/box.c @@ -246,8 +246,8 @@ int Vect_get_line_box(struct Map_info *Map, int line, struct bound_box *Box) } Line = Plus->Line[line]; - if (Line == NULL) { /* dead */ - Box->N = Box->S = Box->E = Box->W = Box->T = Box->B = 0. / 0.; + if (Line == NULL) { /* dead */ + Box->N = Box->S = Box->E = Box->W = Box->T = Box->B = NAN; return 0; } @@ -310,8 +310,8 @@ int Vect_get_area_box(struct Map_info *Map, int area, struct bound_box *Box) Area = Plus->Area[area]; - if (Area == NULL) { /* dead */ - Box->N = Box->S = Box->E = Box->W = Box->T = Box->B = 0. / 0.; + if (Area == NULL) { /* dead */ + Box->N = Box->S = Box->E = Box->W = Box->T = Box->B = NAN; return 0; } @@ -356,8 +356,8 @@ int Vect_get_isle_box(struct Map_info *Map, int isle, struct bound_box *Box) Isle = Plus->Isle[isle]; - if (Isle == NULL) { /* dead */ - Box->N = Box->S = Box->E = Box->W = Box->T = Box->B = 0. / 0.; + if (Isle == NULL) { /* dead */ + Box->N = Box->S = Box->E = Box->W = Box->T = Box->B = NAN; return 0; } diff --git a/raster/r.in.bin/main.c b/raster/r.in.bin/main.c index e5d457b8dc3..08b657746e5 100644 --- a/raster/r.in.bin/main.c +++ b/raster/r.in.bin/main.c @@ -255,7 +255,7 @@ int main(int argc, char *argv[]) const char *outpre; char output[GNAME_MAX]; const char *title; - double null_val = 0.0 / 0.0; + double null_val = NAN; int is_fp; int is_signed; int bytes, hbytes; diff --git a/raster/r.in.lidar/info.c b/raster/r.in.lidar/info.c index e201774b716..344a4d73c5d 100644 --- a/raster/r.in.lidar/info.c +++ b/raster/r.in.lidar/info.c @@ -12,7 +12,7 @@ */ #include - +#include #include #include #include "local_proto.h" @@ -97,7 +97,7 @@ int scan_bounds(LASReaderH LAS_reader, int shell_style, int extents, int update, first = TRUE; /* init to nan in case no points are found */ - min_x = max_x = min_y = max_y = min_z = max_z = 0.0 / 0.0; + min_x = max_x = min_y = max_y = min_z = max_z = NAN; G_verbose_message(_("Scanning data ...")); diff --git a/raster/r.li/r.li.padrange/padrange.c b/raster/r.li/r.li.padrange/padrange.c index 9bd255ddd43..39e4e8e79e9 100644 --- a/raster/r.li/r.li.padrange/padrange.c +++ b/raster/r.li/r.li.padrange/padrange.c @@ -308,19 +308,19 @@ int calculate(int fd, struct area_entry *ad, double *result) cell_size_m = (((EW_DIST1 + EW_DIST2) / 2) / hd.cols) * (((NS_DIST1 + NS_DIST2) / 2) / hd.rows); - /* get min and max patch size */ - min = 1.0 / 0.0; /* inf */ - max = -1.0 / 0.0; /* -inf */ - for (old_pid = 1; old_pid <= pid; old_pid++) { - if (pst[old_pid].count > 0) { - area_p = cell_size_m * pst[old_pid].count / 10000; - if (min > area_p) - min = area_p; - if (max < area_p) - max = area_p; - } - } - *result = max - min; + /* get min and max patch size */ + min = INFINITY; + max = -INFINITY; + for (old_pid = 1; old_pid <= pid; old_pid++) { + if (pst[old_pid].count > 0) { + area_p = cell_size_m * pst[old_pid].count / 10000; + if (min > area_p) + min = area_p; + if (max < area_p) + max = area_p; + } + } + *result = max - min; } else Rast_set_d_null_value(result, 1); @@ -542,19 +542,19 @@ int calculateD(int fd, struct area_entry *ad, double *result) cell_size_m = (((EW_DIST1 + EW_DIST2) / 2) / hd.cols) * (((NS_DIST1 + NS_DIST2) / 2) / hd.rows); - /* get min and max patch size */ - min = 1.0 / 0.0; /* inf */ - max = -1.0 / 0.0; /* -inf */ - for (old_pid = 1; old_pid <= pid; old_pid++) { - if (pst[old_pid].count > 0) { - area_p = cell_size_m * pst[old_pid].count / 10000; - if (min > area_p) - min = area_p; - if (max < area_p) - max = area_p; - } - } - *result = max - min; + /* get min and max patch size */ + min = INFINITY; + max = -INFINITY; + for (old_pid = 1; old_pid <= pid; old_pid++) { + if (pst[old_pid].count > 0) { + area_p = cell_size_m * pst[old_pid].count / 10000; + if (min > area_p) + min = area_p; + if (max < area_p) + max = area_p; + } + } + *result = max - min; } else Rast_set_d_null_value(result, 1); @@ -776,19 +776,19 @@ int calculateF(int fd, struct area_entry *ad, double *result) cell_size_m = (((EW_DIST1 + EW_DIST2) / 2) / hd.cols) * (((NS_DIST1 + NS_DIST2) / 2) / hd.rows); - /* get min and max patch size */ - min = 1.0 / 0.0; /* inf */ - max = -1.0 / 0.0; /* -inf */ - for (old_pid = 1; old_pid <= pid; old_pid++) { - if (pst[old_pid].count > 0) { - area_p = cell_size_m * pst[old_pid].count / 10000; - if (min > area_p) - min = area_p; - if (max < area_p) - max = area_p; - } - } - *result = max - min; + /* get min and max patch size */ + min = INFINITY; + max = -INFINITY; + for (old_pid = 1; old_pid <= pid; old_pid++) { + if (pst[old_pid].count > 0) { + area_p = cell_size_m * pst[old_pid].count / 10000; + if (min > area_p) + min = area_p; + if (max < area_p) + max = area_p; + } + } + *result = max - min; } else Rast_set_d_null_value(result, 1); diff --git a/raster/r.out.gdal/main.c b/raster/r.out.gdal/main.c index f647881b0cf..5021c26e9e1 100644 --- a/raster/r.out.gdal/main.c +++ b/raster/r.out.gdal/main.c @@ -1047,11 +1047,11 @@ double set_default_nodata_value(GDALDataType datatype, double min, double max) case GDT_Float32: case GDT_CFloat32: - return 0.0 / 0.0; + return NAN; case GDT_Float64: case GDT_CFloat64: - return 0.0 / 0.0; + return NAN; default: return 0; diff --git a/raster/r.series.accumulate/main.c b/raster/r.series.accumulate/main.c index 0cc6c38958a..2c526c30257 100644 --- a/raster/r.series.accumulate/main.c +++ b/raster/r.series.accumulate/main.c @@ -171,9 +171,8 @@ int main(int argc, char *argv[]) if (G_parser(argc, argv)) exit(EXIT_FAILURE); - lo = -1.0 / 0.0; /* -inf */ - hi = 1.0 / 0.0; /* inf */ - + lo = -INFINITY; + hi = INFINITY; method = METHOD_GDD; if (G_strncasecmp(parm.method->answer, "gdd", 3) == 0) method = METHOD_GDD; diff --git a/raster/r.terraflow/flow.cpp b/raster/r.terraflow/flow.cpp index 68db9399184..83b7de0c378 100644 --- a/raster/r.terraflow/flow.cpp +++ b/raster/r.terraflow/flow.cpp @@ -48,26 +48,8 @@ void computeFlowAccumulation(AMI_STREAM *fillStream, Rtimer rt, rtTotal; AMI_STREAM *sweepstr; - rt_start(rtTotal); - assert(fillStream && outstr == NULL); - if (stats) { - stats->comment("------------------------------"); - stats->comment("COMPUTING FLOW ACCUMULATION"); - } - - { /* timestamp stats file and print memory */ - time_t t = time(NULL); - char buf[BUFSIZ]; - if(t == (time_t)-1) { - perror("time"); - exit(1); - } -#ifdef _WIN32 - strcpy(buf, ctime(&t)); -#else - ctime_r(&t, buf); - buf[24] = '\0'; -#endif + rt_start(rtTotal); + assert(fillStream && outstr == NULL); if (stats) { stats->comment("------------------------------"); stats->comment("COMPUTING FLOW ACCUMULATION"); diff --git a/raster/r.univar/r.univar_main.c b/raster/r.univar/r.univar_main.c index 7aabf404cf2..e56301a1364 100644 --- a/raster/r.univar/r.univar_main.c +++ b/raster/r.univar/r.univar_main.c @@ -207,8 +207,8 @@ int main(int argc, char *argv[]) /* table field separator */ zone_info.sep = G_option_to_separator(param.separator); - zone_info.min = 0.0 / 0.0; /* set to nan as default */ - zone_info.max = 0.0 / 0.0; /* set to nan as default */ + zone_info.min = 0; + zone_info.max = 0; zone_info.n_zones = 0; /* setting up thread workspace */ diff --git a/raster/r.univar/r3.univar_main.c b/raster/r.univar/r3.univar_main.c index ccae7056ff6..28fdb69acd5 100644 --- a/raster/r.univar/r3.univar_main.c +++ b/raster/r.univar/r3.univar_main.c @@ -144,10 +144,10 @@ int main(int argc, char *argv[]) /* table field separator */ zone_info.sep = G_option_to_separator(param.separator); - dmin = 0.0 / 0.0; /* set to nan as default */ - dmax = 0.0 / 0.0; /* set to nan as default */ - zone_info.min = 0.0 / 0.0; /* set to nan as default */ - zone_info.max = 0.0 / 0.0; /* set to nan as default */ + dmin = NAN; + dmax = NAN; + zone_info.min = 0; + zone_info.max = 0; zone_info.n_zones = 0; /* open 3D zoning raster with default region */ diff --git a/raster/r.univar/stats.c b/raster/r.univar/stats.c index 4957f502772..97367976103 100644 --- a/raster/r.univar/stats.c +++ b/raster/r.univar/stats.c @@ -31,8 +31,8 @@ univar_stat *create_univar_stat_struct(int map_type, int n_perc) for (i = 0; i < n_zones; i++) { stats[i].sum = 0.0; stats[i].sumsq = 0.0; - stats[i].min = 0.0 / 0.0; /* set to nan as default */ - stats[i].max = 0.0 / 0.0; /* set to nan as default */ + stats[i].min = NAN; + stats[i].max = NAN; stats[i].n_perc = n_perc; if (n_perc > 0) stats[i].perc = (double *)G_malloc(n_perc * sizeof(double)); @@ -126,7 +126,7 @@ int print_stats(univar_stat *stats, enum OutputFormat format) var_coef = (stdev / mean) * 100.; /* perhaps stdev/fabs(mean) ? */ if (stats[z].n == 0) - stats[z].sum = stats[z].sum_abs = 0.0 / 0.0; + stats[z].sum = stats[z].sum_abs = NAN; sprintf(sum_str, "%.15g", stats[z].sum); G_trim_decimal(sum_str); @@ -220,9 +220,9 @@ int print_stats(univar_stat *stats, enum OutputFormat format) quartile_perc = (double *)G_calloc(stats[z].n_perc, sizeof(double)); if (stats[z].n == 0) { - quartile_25 = median = quartile_75 = 0.0 / 0.0; + quartile_25 = median = quartile_75 = NAN; for (i = 0; i < stats[z].n_perc; i++) - quartile_perc[i] = 0.0 / 0.0; + quartile_perc[i] = NAN; } else { for (i = 0; i < stats[z].n_perc; i++) { @@ -485,7 +485,7 @@ int print_stats_table(univar_stat *stats) var_coef = (stdev / mean) * 100.; /* perhaps stdev/fabs(mean) ? */ if (stats[z].n == 0) - stats[z].sum = stats[z].sum_abs = 0.0 / 0.0; + stats[z].sum = stats[z].sum_abs = NAN; if (zone_info.n_zones) { int z_cat = z + zone_info.min; @@ -533,9 +533,9 @@ int print_stats_table(univar_stat *stats) quartile_perc = (double *)G_calloc(stats[z].n_perc, sizeof(double)); if (stats[z].n == 0) { - quartile_25 = median = quartile_75 = 0.0 / 0.0; + quartile_25 = median = quartile_75 = NAN; for (i = 0; i < stats[z].n_perc; i++) - quartile_perc[i] = 0.0 / 0.0; + quartile_perc[i] = NAN; } else { for (i = 0; i < stats[z].n_perc; i++) { diff --git a/raster/r.viewshed/statusstructure.cpp b/raster/r.viewshed/statusstructure.cpp index 05ef41b85d6..921b7bbecae 100644 --- a/raster/r.viewshed/statusstructure.cpp +++ b/raster/r.viewshed/statusstructure.cpp @@ -17,7 +17,7 @@ * considered visible to each other if the cells where they belong are * visible to each other. Two cells are visible to each other if the * line-of-sight that connects their centers does not intersect the - * terrain. The terrain is NOT viewed as a tesselation of flat cells, + * terrain. The terrain is NOT viewed as a tessellation of flat cells, * i.e. if the line-of-sight does not pass through the cell center, * elevation is determined using bilinear interpolation. * The viewshed algorithm is efficient both in @@ -38,6 +38,7 @@ #include #include #include + extern "C" { #include #include @@ -57,7 +58,7 @@ extern "C" { If doCurv is set we need to consider the curvature of the earth */ float get_vertical_angle(Viewpoint vp, StatusNode sn, surface_type elev, - int doCurv) + int doCurv UNUSED) { /*determine the difference in elevation, based on the curvature */ @@ -106,7 +107,9 @@ void calculate_dist_n_gradient(StatusNode *sn, double elev, Viewpoint *vp, //sn->dist2vp = sqrt((float) ( pow(sn->row - vp->row,2.0) + // pow(sn->col - vp->col,2.0))); //sn->gradient = (sn->elev - vp->elev)/(sn->dist2vp); */ + double diffElev = elev - vp->elev; + if (G_projection() == PROJECTION_LL) { double dist = G_distance(Rast_col_to_easting(sn->col + 0.5, &(hd.window)), @@ -146,6 +149,7 @@ void calculate_dist_n_gradient(StatusNode *sn, double elev, Viewpoint *vp, /*maintain sign */ if (elev < vp->elev) sn->gradient[1] = -sn->gradient[1]; + return; } @@ -159,6 +163,7 @@ void calculate_event_gradient(StatusNode *sn, int e_idx, double row, double col, //sn->dist2vp = sqrt((float) ( pow(sn->row - vp->row,2.0) + // pow(sn->col - vp->col,2.0))); //sn->gradient = (sn->elev - vp->elev)/(sn->dist2vp); */ + double diffElev = elev - vp->elev; double dist2vp; diff --git a/raster3d/r3.in.lidar/info.c b/raster3d/r3.in.lidar/info.c index 49912030655..00511aad217 100644 --- a/raster3d/r3.in.lidar/info.c +++ b/raster3d/r3.in.lidar/info.c @@ -13,6 +13,7 @@ */ #include +#include #include @@ -100,7 +101,7 @@ int scan_bounds(LASReaderH LAS_reader, int shell_style, int extents, int update, first = TRUE; /* init to nan in case no points are found */ - min_x = max_x = min_y = max_y = min_z = max_z = 0.0 / 0.0; + min_x = max_x = min_y = max_y = min_z = max_z = NAN; G_verbose_message(_("Scanning data ...")); diff --git a/vector/v.cluster/main.c b/vector/v.cluster/main.c index b9409331d64..49c7535beca 100644 --- a/vector/v.cluster/main.c +++ b/vector/v.cluster/main.c @@ -256,7 +256,7 @@ int main(int argc, char *argv[]) c[2] = 0.0; n = 0; sum = sumsq = 0; - min = 1.0 / 0.0; + min = INFINITY; max = 0; kd = G_malloc(minpnts * sizeof(double)); ki = G_malloc(minpnts * sizeof(int)); @@ -462,7 +462,7 @@ int main(int argc, char *argv[]) c[2] = 0.0; n = 0; sum = sumsq = 0; - min = 1.0 / 0.0; + min = INFINITY; max = 0; kd = G_malloc(minpnts * sizeof(double)); ki = G_malloc(minpnts * sizeof(int)); diff --git a/vector/v.distance/distance.c b/vector/v.distance/distance.c index ebe590e8b35..74c6d88a40d 100644 --- a/vector/v.distance/distance.c +++ b/vector/v.distance/distance.c @@ -11,7 +11,7 @@ int get_line_box(const struct line_pnts *Points, struct bound_box *box) int i; if (Points->n_points == 0) { - box->E = box->W = box->N = box->S = box->T = box->B = 0.0 / 0.0; + box->E = box->W = box->N = box->S = box->T = box->B = NAN; return 0; } diff --git a/vector/v.voronoi/skeleton.c b/vector/v.voronoi/skeleton.c index ada3d356a8d..96b19bdc709 100644 --- a/vector/v.voronoi/skeleton.c +++ b/vector/v.voronoi/skeleton.c @@ -528,7 +528,7 @@ int tie_up(void) IPoints[i]); } - distmin = 1. / 0.; /* +inf */ + distmin = INFINITY; xmin = x; ymin = y; From bc882ce3b9c8d70dcc5e8ef5764465b3804505ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Bartoletti?= Date: Sat, 3 Jun 2023 14:05:48 +0200 Subject: [PATCH 032/253] Simplify and use PROJ_H_ --- include/CMakeLists.txt | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt index 4df77022d3e..381ae23c8b7 100644 --- a/include/CMakeLists.txt +++ b/include/CMakeLists.txt @@ -47,21 +47,7 @@ check_target(GDAL HAVE_GDAL) check_target(GDAL HAVE_OGR) check_target(SQLITE HAVE_SQLITE) -#TODO: check with more version of proj - -if(PROJ_VERSION_STRING GREATER 599 AND PROJ_VERSION_STRING LESS 700) - message(STATUS "Using PROJ.4 API version 6.x") - set(PROJMAJOR 6) - check_target(PROJ HAVE_PROJ_H) -elseif(PROJ_VERSION_STRING GREATER 499 AND PROJ_VERSION_STRING LESS 600) - check_target(PROJ HAVE_PROJ_H) - message(STATUS "Using PROJ.4 API version 5.x") - set(PROJMAJOR 5) -elseif(PROJ_VERSION_STRING GREATER 399 AND PROJ_VERSION_STRING LESS 500) - set(USE_PROJ4API 1) - message(STATUS "Using PROJ.4 API version 4.x") - set(PROJMAJOR 4) -endif() +check_target(PROJ HAVE_PROJ_H) check_target(BLAS HAVE_LIBBLAS) check_target(BLAS HAVE_CBLAS_H) From fbb18a8256d9cfa3bdb3d74c5e9e05e24ba5f9c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Bartoletti?= Date: Sat, 3 Jun 2023 14:57:10 +0200 Subject: [PATCH 033/253] CMakeLists.txt: add include_irectories to grass --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index d571732b37e..617e31ba538 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -154,6 +154,7 @@ set(NO_HTML_DESCR_TARGETS "g.parser;ximgview;test.raster3d.lib") add_subdirectory(include) include_directories("${CMAKE_BINARY_DIR}/include") +include_directories(${CMAKE_BINARY_DIR}/include/grass) if(MSVC) include_directories("${CMAKE_SOURCE_DIR}/msvc") endif() From 07d7eef04ab586b1d3b49eacba17fba3bd9af508 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Bartoletti?= Date: Sat, 3 Jun 2023 15:11:50 +0200 Subject: [PATCH 034/253] raster/CMakeLists.txt: fix GDAL_VERSION --- raster/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/raster/CMakeLists.txt b/raster/CMakeLists.txt index b3216cbcda2..dba9b71e3fd 100644 --- a/raster/CMakeLists.txt +++ b/raster/CMakeLists.txt @@ -180,7 +180,7 @@ build_program_in_subdir( set_source_files_properties(r.out.gdal/main.c PROPERTIES COMPILE_DEFINITIONS - "GRASS_VERSION_NUMBER=\"${GRASS_VERSION_NUMBER}\";GDAL_VERSION_MAJOR=\"2\";GDAL_VERSION_MINOR=\"1\";GDAL_VERSION_REV=\"1\"" + "GRASS_VERSION_NUMBER=\"${GRASS_VERSION_NUMBER}\"" ) build_program_in_subdir( From 60f38949c704bc86fd810e97bce88f31707050fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Bartoletti?= Date: Sun, 4 Jun 2023 09:37:14 +0200 Subject: [PATCH 035/253] add aprintf.c --- lib/gis/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/gis/CMakeLists.txt b/lib/gis/CMakeLists.txt index 48499500c57..2ebd88d8647 100644 --- a/lib/gis/CMakeLists.txt +++ b/lib/gis/CMakeLists.txt @@ -1,5 +1,5 @@ set(gislib_SRCS - adj_cellhd.c + adj_cellhd.c aprintf.c copy_dir.c get_ellipse.c ll_scan.c open_misc.c proj3.c units.c alloc.c copy_file.c get_projinfo.c locale.c overwrite.c put_window.c user_config.c From c45e1577f289e6e7dd69aac3350e58ce9bd8a887 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Bartoletti?= Date: Sun, 4 Jun 2023 09:37:29 +0200 Subject: [PATCH 036/253] v.neighbors requires grass_stats --- vector/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vector/CMakeLists.txt b/vector/CMakeLists.txt index b5e3b7b440f..0804fc0b68b 100644 --- a/vector/CMakeLists.txt +++ b/vector/CMakeLists.txt @@ -72,7 +72,7 @@ add_subdirectory(v.lrs) build_program_in_subdir(v.mkgrid DEPENDS grass_gis grass_vector) -build_program_in_subdir(v.neighbors DEPENDS grass_gis grass_vector) +build_program_in_subdir(v.neighbors DEPENDS grass_gis grass_vector grass_stats) build_program_in_subdir(v.net DEPENDS grass_gis grass_vector) From 501bf70b11bcb32e2ad6d6b099ac58da37a0cded Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Bartoletti?= Date: Sun, 4 Jun 2023 10:09:37 +0200 Subject: [PATCH 037/253] ctypesgen.py: main module is not ctypesgen.py but run.py. fix it. --- python/libgrass_interface_generator/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/libgrass_interface_generator/CMakeLists.txt b/python/libgrass_interface_generator/CMakeLists.txt index 698da806f6a..5a78cf3f4b2 100644 --- a/python/libgrass_interface_generator/CMakeLists.txt +++ b/python/libgrass_interface_generator/CMakeLists.txt @@ -67,7 +67,7 @@ foreach(module ${MODULES}) add_custom_command(OUTPUT ${output_file} DEPENDS ${${module}_LIBS} COMMAND ${CMAKE_COMMAND} - -DCTYPESGEN_PY=${CMAKE_CURRENT_SOURCE_DIR}/ctypesgen.py + -DCTYPESGEN_PY=${CMAKE_CURRENT_SOURCE_DIR}/run.py -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE} -DCOMPILER=${CMAKE_C_COMPILER} -DBIN_DIR=${GISBASE} From 7751d337a5b6ff2f464ef9531d1bd166a5d4978a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Bartoletti?= Date: Mon, 5 Jun 2023 10:21:22 +0200 Subject: [PATCH 038/253] lib/rst: fix build. Remove DEFS POINT2D_C --- lib/rst/CMakeLists.txt | 1 - lib/rst/interp_float/point2d.c | 3 --- 2 files changed, 4 deletions(-) diff --git a/lib/rst/CMakeLists.txt b/lib/rst/CMakeLists.txt index 4250dd94dcf..c99042b3917 100644 --- a/lib/rst/CMakeLists.txt +++ b/lib/rst/CMakeLists.txt @@ -15,7 +15,6 @@ build_library_in_subdir(qtree build_library_in_subdir(interp_float NAME grass_interpfl - DEFS "-DPOINT2D_C=1" DEPENDS GEOS grass_gis grass_raster grass_bitmap grass_vector grass_qtree grass_interpdata HEADERS "interpf.h") diff --git a/lib/rst/interp_float/point2d.c b/lib/rst/interp_float/point2d.c index ff2f309639a..8a5a0aa8d42 100644 --- a/lib/rst/interp_float/point2d.c +++ b/lib/rst/interp_float/point2d.c @@ -30,9 +30,7 @@ #include #include -#ifndef POINT2D_C #define POINT2D_C -#endif #include /* needed for AIX */ @@ -151,7 +149,6 @@ int IL_check_at_points_2d(struct interp_params *params, } } /* cv */ - return 1; } From d3ac69a17db6249f651deedf5ddc9ca06d199f70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Bartoletti?= Date: Mon, 5 Jun 2023 15:43:56 +0200 Subject: [PATCH 039/253] python: copy grassdb --- python/grass/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/python/grass/CMakeLists.txt b/python/grass/CMakeLists.txt index ce721e1ce1b..0f159fcfb3c 100644 --- a/python/grass/CMakeLists.txt +++ b/python/grass/CMakeLists.txt @@ -1,6 +1,7 @@ copy_python_files_in_subdir(exceptions etc/python/grass) copy_python_files_in_subdir(gunittest etc/python/grass) +copy_python_files_in_subdir(grassdb etc/python/grass) copy_python_files_in_subdir(imaging etc/python/grass) copy_python_files_in_subdir(pydispatch etc/python/grass) copy_python_files_in_subdir(script etc/python/grass) @@ -28,7 +29,7 @@ add_custom_target(LIB_PYTHON COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/__init__.py ${GISBASE}/etc/python/grass/ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/etc/python/grass/script/setup.py ${GISBASE}/etc/python/grass/script/ VERBATIM - DEPENDS python_exceptions python_imaging python_pydispatch python_script python_semantic_label python_temporal + DEPENDS python_exceptions python_grassdb python_imaging python_pydispatch python_script python_semantic_label python_temporal python_pygrass python_pygrass_messages python_pygrass_modules python_pygrass_modules python_pygrass_raster python_pygrass_vector python_pygrass_gis python_pygrass_shell python_pygrass_tests python_pygrass_rpc From 8c70cde6c895cff78e36ab1080417702387aeebe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Bartoletti?= Date: Mon, 5 Jun 2023 15:44:13 +0200 Subject: [PATCH 040/253] propose ccache to speedup build --- CMakeLists.txt | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 617e31ba538..cd1418a98ed 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,6 +30,19 @@ if(WIN32) set(default_option_enabled OFF) endif() +# 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) +endif(NOT MSVC) + if(CMAKE_BUILD_TYPE) set( grass_build_type "${CMAKE_BUILD_TYPE}" ) string( TOLOWER "${grass_build_type}" grass_build_type_lc ) From 7d2d4ef606141248a6673cbd909ec4fe70ba2738 Mon Sep 17 00:00:00 2001 From: Aaron Saw Date: Mon, 5 Jun 2023 16:39:14 +0200 Subject: [PATCH 041/253] mkhtml.py depends on a sibling python script This is just a temporary fix. I don't think all of these manual copying is pretty. All instances of resource copying we can probably do better with structuring it in a directory. --- utils/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt index af18a2a4f1f..c9834362fd4 100644 --- a/utils/CMakeLists.txt +++ b/utils/CMakeLists.txt @@ -1,4 +1,5 @@ file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/mkhtml.py DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) +file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/generate_last_commit_file.py DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) set(current_time_s_ms_SRCS "timer/main.c") if(MSVC) From 29fa95c28ea17f14793ce24dfa7ca5791938d66c Mon Sep 17 00:00:00 2001 From: Aaron Saw Date: Mon, 5 Jun 2023 16:39:29 +0200 Subject: [PATCH 042/253] make libraster libvector link with lapack when it is available --- lib/CMakeLists.txt | 4 ++++ lib/vector/CMakeLists.txt | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index d3d39cd3105..e844e962096 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -21,6 +21,10 @@ build_library_in_subdir(raster SOURCES ${raster_SRCS} DEPENDS GDAL PROJ grass_gproj) +if(TARGET LAPACK) + target_link_libraries(grass_raster LAPACK) +endif() + if(CMAKE_SYSTEM_NAME MATCHES "Linux") find_library(DL_LIBRARY dl) mark_as_advanced(DL_LIBRARY) diff --git a/lib/vector/CMakeLists.txt b/lib/vector/CMakeLists.txt index 9e17ce093b8..8dd910f8ab5 100644 --- a/lib/vector/CMakeLists.txt +++ b/lib/vector/CMakeLists.txt @@ -18,6 +18,10 @@ if(TARGET POSTGRES) target_link_libraries(grass_vector POSTGRES) endif() +if(TARGET LAPACK) + target_link_libraries(grass_vector LAPACK) +endif() + add_subdirectory(vedit) add_subdirectory(neta) From 099918461885b3d008f48cab02e9490f166020a1 Mon Sep 17 00:00:00 2001 From: Aaron Saw Date: Mon, 5 Jun 2023 16:39:41 +0200 Subject: [PATCH 043/253] add the 3 missing raster modules --- .gitignore | 2 -- raster/CMakeLists.txt | 15 +++++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 28343eaa267..2087a1bf7d1 100644 --- a/.gitignore +++ b/.gitignore @@ -6,8 +6,6 @@ OBJ.* locale/scriptstrings/* bin.*/* dist.*/* -.vs/* -CMakeSettings.json config.log config.status* error.log diff --git a/raster/CMakeLists.txt b/raster/CMakeLists.txt index dba9b71e3fd..3b4fdf3e9d2 100644 --- a/raster/CMakeLists.txt +++ b/raster/CMakeLists.txt @@ -2,6 +2,10 @@ 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) + build_program_in_subdir( r.buffer DEPENDS grass_gis grass_raster ) @@ -78,6 +82,10 @@ build_program_in_subdir( r.fill.dir DEPENDS grass_gis grass_raster ) + build_program_in_subdir( + r.fill.stats + DEPENDS grass_gis grass_raster ) + build_program_in_subdir( r.flow DEPENDS grass_gis grass_raster grass_segment grass_vector grass_bitmap) @@ -120,6 +128,13 @@ build_program_in_subdir( r.in.mat DEPENDS grass_gis grass_raster) +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 + PRIMARY_DEPENDS PDAL) + build_program_in_subdir( r.in.png DEPENDS grass_gis grass_raster LIBPNG) From 9b92c9a7dd24fafe44776175d437cb35032951cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Bartoletti?= Date: Mon, 5 Jun 2023 20:23:08 +0200 Subject: [PATCH 044/253] display: add d.rgb, d.rhumbline, d.text, d.title, d.vect.* --- display/CMakeLists.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/display/CMakeLists.txt b/display/CMakeLists.txt index fd16882eb2c..5263be47ec6 100644 --- a/display/CMakeLists.txt +++ b/display/CMakeLists.txt @@ -24,4 +24,11 @@ build_program_in_subdir(d.profile DEPENDS grass_gis grass_display) 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) build_program_in_subdir(d.rast.num DEPENDS grass_gis grass_display grass_raster) +build_program_in_subdir(d.rgb DEPENDS grass_gis grass_display grass_raster) +build_program_in_subdir(d.rhumbline DEPENDS grass_gis grass_display) +build_program_in_subdir(d.text DEPENDS grass_gis grass_display) +build_program_in_subdir(d.title DEPENDS grass_gis grass_display) +build_program_in_subdir(d.vect DEPENDS grass_gis grass_display grass_vector grass_sym) +build_program_in_subdir(d.vect.chart DEPENDS grass_gis grass_display grass_vector grass_sym) +build_program_in_subdir(d.vect.thematic DEPENDS grass_gis grass_display grass_vector grass_sym grass_arraystats) build_program_in_subdir(d.where DEPENDS grass_gis grass_display grass_gproj) From 80c090dccc5bc3eea69f94172c1c2d80ff08d139 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Bartoletti?= Date: Mon, 5 Jun 2023 21:20:16 +0200 Subject: [PATCH 045/253] raster: enable r3.mapcalc --- raster/r.mapcalc/CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/raster/r.mapcalc/CMakeLists.txt b/raster/r.mapcalc/CMakeLists.txt index f360fa3abe4..b5cb74b91b0 100644 --- a/raster/r.mapcalc/CMakeLists.txt +++ b/raster/r.mapcalc/CMakeLists.txt @@ -17,6 +17,6 @@ build_program(NAME r.mapcalc SOURCES "${r_mapcalc_SRCS}" DEPENDS grass_gis grass_btree grass_calc grass_raster) -#build_program(NAME r3.mapcalc -# SOURCES "${r3_mapcalc_SRCS}" -# DEPENDS grass_gis grass_btree grass_calc grass_raster3d) +build_program(NAME r3.mapcalc + SOURCES "${r3_mapcalc_SRCS}" + DEPENDS grass_gis grass_btree grass_calc grass_raster3d) From 362f81a1ae2ee95bc1a8edaa7e31e80579b806e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Bartoletti?= Date: Tue, 6 Jun 2023 07:55:14 +0200 Subject: [PATCH 046/253] raster: enable r.object.geometry --- raster/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/raster/CMakeLists.txt b/raster/CMakeLists.txt index 3b4fdf3e9d2..905104d86aa 100644 --- a/raster/CMakeLists.txt +++ b/raster/CMakeLists.txt @@ -181,6 +181,10 @@ build_program_in_subdir( r.null DEPENDS grass_gis grass_raster) +build_program_in_subdir( + r.object.geometry + DEPENDS grass_gis grass_raster) + build_program_in_subdir( r.out.ascii DEPENDS grass_gis grass_raster) From 625181f8a8c3e5399a3756cbdd8379899c621e8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Bartoletti?= Date: Tue, 6 Jun 2023 07:55:31 +0200 Subject: [PATCH 047/253] ps: enable ps.map --- CMakeLists.txt | 2 +- ps/CMakeLists.txt | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 ps/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index cd1418a98ed..adcf75040cf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -206,7 +206,7 @@ set(ALL_SUBDIRS scripts vector temporal - # ps + ps ) foreach(d ${ALL_SUBDIRS}) diff --git a/ps/CMakeLists.txt b/ps/CMakeLists.txt new file mode 100644 index 00000000000..8b2c821da55 --- /dev/null +++ b/ps/CMakeLists.txt @@ -0,0 +1,4 @@ +build_program_in_subdir( + ps.map + DEPENDS grass_gis grass_raster grass_gmath grass_gproj grass_imagery grass_vector grass_dbmibase grass_sym) + From b1ad3a9f4224659354c087eff900e2dead9adaca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Bartoletti?= Date: Tue, 6 Jun 2023 08:41:45 +0200 Subject: [PATCH 048/253] python/grass: add utils (will be used by g.download.location scripts) --- python/grass/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/python/grass/CMakeLists.txt b/python/grass/CMakeLists.txt index 0f159fcfb3c..9e17736cae3 100644 --- a/python/grass/CMakeLists.txt +++ b/python/grass/CMakeLists.txt @@ -5,6 +5,7 @@ copy_python_files_in_subdir(grassdb etc/python/grass) copy_python_files_in_subdir(imaging etc/python/grass) copy_python_files_in_subdir(pydispatch etc/python/grass) copy_python_files_in_subdir(script etc/python/grass) +copy_python_files_in_subdir(utils etc/python/grass) copy_python_files_in_subdir(semantic_label etc/python/grass) copy_python_files_in_subdir(temporal etc/python/grass) copy_python_files_in_subdir(pygrass etc/python/grass) @@ -30,6 +31,7 @@ add_custom_target(LIB_PYTHON COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/etc/python/grass/script/setup.py ${GISBASE}/etc/python/grass/script/ VERBATIM DEPENDS python_exceptions python_grassdb python_imaging python_pydispatch python_script python_semantic_label python_temporal + python_utils python_pygrass python_pygrass_messages python_pygrass_modules python_pygrass_modules python_pygrass_raster python_pygrass_vector python_pygrass_gis python_pygrass_shell python_pygrass_tests python_pygrass_rpc From b4144e5543d91776c62e3a61b2877798256cd729 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Bartoletti?= Date: Tue, 6 Jun 2023 08:42:11 +0200 Subject: [PATCH 049/253] scripts: add d.background, g.download.location, i.band.library, r.semantic.label --- scripts/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt index c45cb51f41e..b1947c6b568 100644 --- a/scripts/CMakeLists.txt +++ b/scripts/CMakeLists.txt @@ -1,5 +1,6 @@ set(script_DIRS r.shade + d.background d.correlate d.frame d.out.file @@ -17,10 +18,12 @@ set(script_DIRS db.out.ogr db.test db.univar + g.download.location g.extension g.extension.all g.manual g.search.modules + i.band.library i.colors.enhance i.image.mosaic i.in.spotvgt @@ -43,6 +46,7 @@ set(script_DIRS r.plane r.reclass.area r.rgb + r.semantic.label r.tileset r.unpack r3.in.xyz From e7f94a7a53a24981ddfb34295ef75cb9e7758fa1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Bartoletti?= Date: Tue, 6 Jun 2023 09:15:59 +0200 Subject: [PATCH 050/253] temporal: add t.copy and t.upgrade --- temporal/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/temporal/CMakeLists.txt b/temporal/CMakeLists.txt index 22f03ce97c7..891c9fce1dc 100644 --- a/temporal/CMakeLists.txt +++ b/temporal/CMakeLists.txt @@ -1,10 +1,12 @@ set(temporal_DIRS t.create + t.copy t.support t.topology t.list t.info t.merge + t.upgrade t.remove t.sample t.register From 073bed886e8106f1fc725db316b968bced00cb46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Bartoletti?= Date: Tue, 6 Jun 2023 11:10:29 +0200 Subject: [PATCH 051/253] add an optional cmake to use alternate linker --- CMakeLists.txt | 4 ++++ cmake/modules/linker.cmake | 42 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 cmake/modules/linker.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index adcf75040cf..e0a74abcde9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,6 +43,10 @@ if(NOT MSVC) endif(USE_CCACHE) endif(NOT MSVC) +if(USE_ALTERNATE_LINKER) + include("cmake/modules/linker.cmake") +endif() + if(CMAKE_BUILD_TYPE) set( grass_build_type "${CMAKE_BUILD_TYPE}" ) string( TOLOWER "${grass_build_type}" grass_build_type_lc ) diff --git a/cmake/modules/linker.cmake b/cmake/modules/linker.cmake new file mode 100644 index 00000000000..7e093ae241a --- /dev/null +++ b/cmake/modules/linker.cmake @@ -0,0 +1,42 @@ +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() + else() + add_link_options("-fuse-ld=${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 "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") +endif() From 3793f5bf38bd92478d8b52d069d9c3e5d07addf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Bartoletti?= Date: Tue, 6 Jun 2023 12:17:54 +0200 Subject: [PATCH 052/253] gui/wxpython: copy main_window dir --- gui/wxpython/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gui/wxpython/CMakeLists.txt b/gui/wxpython/CMakeLists.txt index 0f8944d97a5..54339b70b61 100644 --- a/gui/wxpython/CMakeLists.txt +++ b/gui/wxpython/CMakeLists.txt @@ -3,7 +3,7 @@ set(WXPYTHON_DIR ${GISBASE}/gui/wxpython) -set(gui_lib_DIRS core gui_core icons iscatt lmgr location_wizard +set(gui_lib_DIRS core gui_core icons iscatt lmgr location_wizard main_window mapdisp mapwin modules nviz rdigit startup tools vnet web_services wxplot) set(gui_lib_targets) From 03ca9aee7d63c4334de0100e9d6564f21c3344ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Bartoletti?= Date: Tue, 6 Jun 2023 13:04:58 +0200 Subject: [PATCH 053/253] init: copy lock, echo, run, clean_temp and winlocale --- lib/init/CMakeLists.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/init/CMakeLists.txt b/lib/init/CMakeLists.txt index d452b5c4329..8c86ff83c13 100644 --- a/lib/init/CMakeLists.txt +++ b/lib/init/CMakeLists.txt @@ -169,3 +169,10 @@ configure_file(license.txt.in ${CMAKE_BINARY_DIR}/gisbase/etc/license) install(FILES ${CMAKE_BINARY_DIR}/gisbase/etc/VERSIONNUMBER DESTINATION etc) install(FILES ${CMAKE_BINARY_DIR}/gisbase/etc/license DESTINATION etc) +install(FILES ${CMAKE_BINARY_DIR}/gisbase/etc/lock DESTINATION etc) +install(FILES ${CMAKE_BINARY_DIR}/gisbase/etc/echo DESTINATION etc) +install(FILES ${CMAKE_BINARY_DIR}/gisbase/etc/run DESTINATION etc) +install(FILES ${CMAKE_BINARY_DIR}/gisbase/etc/clean_temp DESTINATION etc) +if(MINGW) +install(FILES ${CMAKE_BINARY_DIR}/gisbase/etc/winlocale DESTINATION etc) +endif() From af00fabf7f48c36ef50fb742d795ab12ec3b5ad0 Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Mon, 14 Aug 2023 08:49:23 +0200 Subject: [PATCH 054/253] minor fixes just to move forward --- CMakeLists.txt | 11 ++ cmake/find_scripts/FindPROJ.cmake | 125 +++++++++++++++--- cmake/find_scripts/FindSQLite.cmake | 2 +- general/CMakeLists.txt | 3 +- gui/wxpython/CMakeLists.txt | 20 +-- gui/wxpython/docs/CMakeLists.txt | 2 +- include/CMakeLists.txt | 55 ++++---- include/config.h.cmake.in | 1 + lib/CMakeLists.txt | 10 +- lib/gis/CMakeLists.txt | 2 +- lib/init/CMakeLists.txt | 2 +- .../CMakeLists.txt | 2 +- thirdparty/CMakeLists.txt | 11 +- 13 files changed, 177 insertions(+), 69 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e0a74abcde9..74c87475b45 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,6 +25,17 @@ endif() set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/find_scripts;${CMAKE_SOURCE_DIR}/cmake/modules;${CMAKE_MODULE_PATH}") + +if (NOT CMAKE_CXX_STANDARD) + 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) +endif() + set(default_option_enabled ON) if(WIN32) set(default_option_enabled OFF) diff --git a/cmake/find_scripts/FindPROJ.cmake b/cmake/find_scripts/FindPROJ.cmake index 8f7c1da251f..61c5cee5764 100644 --- a/cmake/find_scripts/FindPROJ.cmake +++ b/cmake/find_scripts/FindPROJ.cmake @@ -1,23 +1,116 @@ -find_path(PROJ_INCLUDE_DIR proj.h PATH_SUFFIXES proj) +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file COPYING-CMAKE-SCRIPTS or https://cmake.org/licensing for details. -find_library(PROJ_LIBRARY_RELEASE NAMES proj_i proj) -find_library(PROJ_LIBRARY_DEBUG NAMES projd) -set(PROJ_FOUND FALSE) +#[=======================================================================[.rst: +FindPROJ +--------- -set(PROJ_LIBRARY) -if(PROJ_LIBRARY_DEBUG) - set( PROJ_LIBRARY ${PROJ_LIBRARY_DEBUG} CACHE FILEPATH "doc" ) -elseif(PROJ_LIBRARY_RELEASE) - set( PROJ_LIBRARY ${PROJ_LIBRARY_RELEASE} CACHE FILEPATH "doc" ) +CMake module to search for PROJ(PROJ.4 and PROJ) library + +On success, the macro sets the following variables: +``PROJ_FOUND`` + if the library found + +``PROJ_LIBRARIES`` + full path to the library + +``PROJ_INCLUDE_DIRS`` + where to find the library headers + +``PROJ_VERSION_STRING`` + version string of PROJ + +Copyright (c) 2009 Mateusz Loskot +Copyright (c) 2015 NextGIS +Copyright (c) 2018 Hiroshi Miura + +#]=======================================================================] + +find_path(PROJ_INCLUDE_DIR proj.h + PATHS ${PROJ_ROOT}/include + DOC "Path to PROJ library include directory") + +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) endif() -mark_as_advanced(PROJ_LIBRARY_RELEASE) -mark_as_advanced(PROJ_LIBRARY_DEBUG) -mark_as_advanced(PROJ_LIBRARY) -mark_as_advanced(PROJ_INCLUDE_DIR) +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}") +endif () include(FindPackageHandleStandardArgs) -find_package_handle_standard_args( PROJ DEFAULT_MSG - PROJ_LIBRARY - PROJ_INCLUDE_DIR ) +find_package_handle_standard_args(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}") + 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() + + +# find_path(PROJ_INCLUDE_DIR proj.h PATH_SUFFIXES proj) +# +# find_library(PROJ_LIBRARY_RELEASE NAMES proj_i proj) +# find_library(PROJ_LIBRARY_DEBUG NAMES projd) +# set(PROJ_FOUND FALSE) +# +# set(PROJ_LIBRARY) +# if(PROJ_LIBRARY_DEBUG) +# set( PROJ_LIBRARY ${PROJ_LIBRARY_DEBUG} CACHE FILEPATH "doc" ) +# elseif(PROJ_LIBRARY_RELEASE) +# set( PROJ_LIBRARY ${PROJ_LIBRARY_RELEASE} CACHE FILEPATH "doc" ) +# endif() +# +# mark_as_advanced(PROJ_LIBRARY_RELEASE) +# mark_as_advanced(PROJ_LIBRARY_DEBUG) +# mark_as_advanced(PROJ_LIBRARY) +# mark_as_advanced(PROJ_INCLUDE_DIR) +# +# include(FindPackageHandleStandardArgs) +# find_package_handle_standard_args( PROJ DEFAULT_MSG +# PROJ_LIBRARY +# PROJ_INCLUDE_DIR ) +# diff --git a/cmake/find_scripts/FindSQLite.cmake b/cmake/find_scripts/FindSQLite.cmake index c49858c4ef7..0a3f4522829 100644 --- a/cmake/find_scripts/FindSQLite.cmake +++ b/cmake/find_scripts/FindSQLite.cmake @@ -5,4 +5,4 @@ mark_as_advanced(SQLITE_LIBRARY) mark_as_advanced(SQLITE_INCLUDE_DIR) include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(SQLITE REQUIRED_VARS SQLITE_LIBRARY SQLITE_INCLUDE_DIR) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(SQLite REQUIRED_VARS SQLITE_LIBRARY SQLITE_INCLUDE_DIR) diff --git a/general/CMakeLists.txt b/general/CMakeLists.txt index 1905254fd26..eed2ce08243 100644 --- a/general/CMakeLists.txt +++ b/general/CMakeLists.txt @@ -28,7 +28,8 @@ build_program_in_subdir(g.version "-DARCH=\"${BUILD_ARCH}\"" ) -if(WITH_CAIRO) +# TODO: add CAIRO_HAS_XRENDER and CAIRO_HAS_XRENDER_SURFACE to if clause +if(WITH_CAIRO AND USE_X11) if(NOT MSVC) build_program_in_subdir(g.cairocomp DEPENDS grass_gis CAIRO grass_cairodriver) endif() diff --git a/gui/wxpython/CMakeLists.txt b/gui/wxpython/CMakeLists.txt index 54339b70b61..db92f38d785 100644 --- a/gui/wxpython/CMakeLists.txt +++ b/gui/wxpython/CMakeLists.txt @@ -38,38 +38,38 @@ add_custom_target(copy_wxpython_xml DEPENDS GUI_WXPYTHON) add_custom_target(compile_python_files - COMMAND ${PYTHON_EXECUTABLE} -m compileall ${GISBASE}/scripts - COMMAND ${PYTHON_EXECUTABLE} -m compileall ${WXPYTHON_DIR} + COMMAND ${Python_EXECUTABLE} -m compileall ${GISBASE}/scripts + COMMAND ${Python_EXECUTABLE} -m compileall ${WXPYTHON_DIR} DEPENDS ALL_MODULES) add_custom_target(build_modules_items_xml - COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} + COMMAND ${grass_env_command} ${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/tools/build_modules_xml.py > ${WXPYTHON_DIR}/xml/module_items.xml DEPENDS copy_wxpython_xml compile_python_files ${g_gui_targets} COMMENT "Generating interface description for all modules..." VERBATIM) add_custom_target(build_xml_menudata - COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} + 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} + 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 ${WXPYTHON_DIR}/xml/ DEPENDS build_modules_items_xml) add_custom_target(build_module_tree_menudata - COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} + 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} + 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 ${WXPYTHON_DIR}/xml/ DEPENDS build_xml_menudata) add_custom_target(build_menustrings ALL - COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} + 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} + 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} + 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) diff --git a/gui/wxpython/docs/CMakeLists.txt b/gui/wxpython/docs/CMakeLists.txt index a04446a98ba..26696cf326f 100644 --- a/gui/wxpython/docs/CMakeLists.txt +++ b/gui/wxpython/docs/CMakeLists.txt @@ -3,7 +3,7 @@ set(wxpython_html_files) ADD_CUSTOM_COMMAND(OUTPUT ${GISBASE}/docs/html/wxGUI.components.html COMMAND ${grass_env_command} - ${PYTHON_EXECUTABLE} ${MKHTML_PY} wxGUI.components ${GRASS_VERSION_DATE} > ${GISBASE}/docs/html/wxGUI.components.html + ${Python_EXECUTABLE} ${MKHTML_PY} wxGUI.components ${GRASS_VERSION_DATE} > ${GISBASE}/docs/html/wxGUI.components.html COMMENT "Creating ${GISBASE}/docs/html/wxGUI.components.html" DEPENDS GUI_WXPYTHON LIB_PYTHON ) diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt index 381ae23c8b7..7bb6007477a 100644 --- a/include/CMakeLists.txt +++ b/include/CMakeLists.txt @@ -1,5 +1,6 @@ include(CheckIncludeFile) -include(CheckFunctionExists) #TODO: use CheckSymbolExists +include(CheckSymbolExists) + check_include_file(limits.h HAVE_LIMITS_H) check_include_file(termio.h HAVE_TERMIO_H) check_include_file(termios.h HAVE_TERMIOS_H) @@ -139,7 +140,7 @@ include(CheckCSourceCompiles) set(CMAKE_REQUIRED_FLAGS ${CMAKE_C_FLAGS}) -CHECK_C_SOURCE_COMPILES(" +check_c_source_compiles(" int main(int argc, char *argv[]) { long long int x; @@ -148,7 +149,7 @@ return 0; " HAVE_LONG_LONG_INT) -CHECK_C_SOURCE_COMPILES(" +check_c_source_compiles(" #include #include #include @@ -158,23 +159,24 @@ struct tm *tp; " TIME_WITH_SYS_TIME) -CHECK_FUNCTION_EXISTS(ftime HAVE_FTIME) -CHECK_FUNCTION_EXISTS(gethostname HAVE_GETHOSTNAME) -CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY) -CHECK_FUNCTION_EXISTS(lseek HAVE_LSEEK) -CHECK_FUNCTION_EXISTS(time HAVE_TIME) -CHECK_FUNCTION_EXISTS(uname HAVE_UNAME) -CHECK_FUNCTION_EXISTS(seteuid HAVE_SETEUID) -CHECK_FUNCTION_EXISTS(setpriority HAVE_SETPRIORITY) -CHECK_FUNCTION_EXISTS(setreuid HAVE_SETREUID) -CHECK_FUNCTION_EXISTS(setruid HAVE_SETRUID) -CHECK_FUNCTION_EXISTS(setpgrp SETPGRP_VOID) -CHECK_FUNCTION_EXISTS(drand48 HAVE_DRAND48) -CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP) -CHECK_FUNCTION_EXISTS(asprintf HAVE_ASPRINTF) -CHECK_FUNCTION_EXISTS(putenv HAVE_PUTENV) -CHECK_FUNCTION_EXISTS(setenv HAVE_SETENV) -CHECK_FUNCTION_EXISTS(socket HAVE_SOCKET) +check_symbol_exists(gethostname "unistd.h" HAVE_GETHOSTNAME) +check_symbol_exists(gettimeofday "sys/time.h" HAVE_GETTIMEOFDAY) +check_symbol_exists(time "time.h" HAVE_TIME) +check_symbol_exists(asprintf "stdio.h" HAVE_ASPRINTF) +check_symbol_exists(putenv "stdlib.h" HAVE_PUTENV) +check_symbol_exists(setenv "stdlib.h" HAVE_SETENV) +check_symbol_exists(socket "sys/socket.h" HAVE_SOCKET) +check_symbol_exists(ftime "sys/timeb.h" HAVE_FTIME) +check_symbol_exists(lseek "unistd.h" HAVE_LSEEK) +check_symbol_exists(uname "sys/utsname.h" HAVE_UNAME) +check_symbol_exists(seteuid "unistd.h" HAVE_SETEUID) +check_symbol_exists(setpriority "sys/resource.h" HAVE_SETPRIORITY) +check_symbol_exists(setreuid "unistd.h" HAVE_SETREUID) +check_symbol_exists(setruid "unistd.h" HAVE_SETRUID) +check_symbol_exists(setpgrp "unistd.h" SETPGRP_VOID) +check_symbol_exists(drand48 "stdlib.h" HAVE_DRAND48) +check_symbol_exists(nanosleep "time.h" HAVE_NANOSLEEP) +check_symbol_exists(fseeko "stdio.h" HAVE_FSEEKO) set(HAVE_PBUFFERS 0) set(HAVE_PIXMAPS 0) @@ -211,8 +213,6 @@ endif() endif(WITH_OPENGL) -CHECK_FUNCTION_EXISTS(fseeko HAVE_FSEEKO) - set(OPENGL_X11 0) set(OPENGL_AQUA 0) @@ -220,6 +220,7 @@ set(OPENGL_WINDOWS 0) if(WITH_OPENGL) if(APPLE) set(OPENGL_AQUA 1) + set(OPENGL_AGL 1) elseif(WIN32) set(OPENGL_WINDOWS 1) else() @@ -230,17 +231,15 @@ endif() file(GLOB_RECURSE SRCHS "*.h") set(include_depends) foreach(srch ${SRCHS}) - get_filename_component(srch_PATH ${srch} PATH) + get_filename_component(srch_DIR ${srch} DIRECTORY) get_filename_component(srch_NAME ${srch} NAME) - STRING(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "" dsth_PATH "${srch_PATH}") - set(output_dir ${CMAKE_BINARY_DIR}/include/grass${dsth_PATH}) - + string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" dsth_DIR "${srch_DIR}") + set(output_dir ${CMAKE_BINARY_DIR}/include/${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 ${CMAKE_BINARY_DIR}/include/grass${dsth_PATH}/${srch_NAME}" - ) + COMMENT "Copy ${srch} to ${output_dir}/${srch_NAME}") list(APPEND include_depends ${output_dir}/${srch_NAME} ) endforeach() diff --git a/include/config.h.cmake.in b/include/config.h.cmake.in index b695dfd6389..9b63e7631eb 100644 --- a/include/config.h.cmake.in +++ b/include/config.h.cmake.in @@ -224,6 +224,7 @@ /* define if OpenGL uses Aqua (MacOS X) */ #cmakedefine OPENGL_AQUA ${OPENGL_AQUA} +#define OPENGL_AGL 1 /* define if OpenGL uses Windows */ #cmakedefine OPENGL_WINDOWS ${OPENGL_WINDOWS} diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index e844e962096..35625ba03ce 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -15,7 +15,7 @@ build_library_in_subdir(driver add_subdirectory(proj) file(GLOB raster_SRCS "./raster/*.c") -list(APPEND raster_SRCS "./gis/gisinit.c") +# list(APPEND raster_SRCS "./gis/gisinit.c") build_library_in_subdir(raster DEFS "-DGDAL_DYNAMIC=1;-DGDAL_LINK=1" SOURCES ${raster_SRCS} @@ -42,16 +42,16 @@ build_library_in_subdir(external/shapelib NAME grass_shape build_library_in_subdir(gmath DEPENDS grass_ccmath grass_gis DEFS "${use_math_DEFS}" - OPTIONAL_DEPENDS FFTW) + OPTIONAL_DEPENDS FFTW LAPACK BLAS) build_library_in_subdir(linkm) file(GLOB pngdriver_SRCS "./pngdriver/*.c") -list(APPEND pngdriver_SRCS "./driver/init.c") +# list(APPEND pngdriver_SRCS "./driver/init.c") build_library_in_subdir(pngdriver SOURCES ${pngdriver_SRCS} - DEPENDS grass_driver LIBPNG ZLIB - INCLUDES "./driver") + DEPENDS grass_driver grass_gis LIBPNG ZLIB) + # INCLUDES "./driver") file(GLOB psdriver_SRCS "./psdriver/*.c") list(APPEND psdriver_SRCS "./driver/init.c") diff --git a/lib/gis/CMakeLists.txt b/lib/gis/CMakeLists.txt index 2ebd88d8647..77a498f085f 100644 --- a/lib/gis/CMakeLists.txt +++ b/lib/gis/CMakeLists.txt @@ -53,7 +53,7 @@ add_custom_command(TARGET grass_gis POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/colors.desc ${GISBASE}/etc/ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/renamed_options ${GISBASE}/etc/ ) - install(DIRECTORY colors DESTINATION etc/colors) + install(DIRECTORY colors DESTINATION etc) install(FILES ellipse.table ellipse.table.solar.system datum.table datumtransform.table FIPS.code state27 state83 projections DESTINATION etc/proj) diff --git a/lib/init/CMakeLists.txt b/lib/init/CMakeLists.txt index 8c86ff83c13..fbf1355c622 100644 --- a/lib/init/CMakeLists.txt +++ b/lib/init/CMakeLists.txt @@ -51,7 +51,7 @@ get_filename_component(GDAL_DIR ${GDAL_DIR} PATH) file(TO_NATIVE_PATH ${GDAL_DIR}/bin DEPS_DLL_PATH) list(APPEND DLL_PATH_LIST ${DEPS_DLL_PATH}) -file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} GRASS_PYTHON) +file(TO_NATIVE_PATH ${Python_EXECUTABLE} GRASS_PYTHON) # For install tree (first do install tree) if(UNIX OR MINGW) diff --git a/python/libgrass_interface_generator/CMakeLists.txt b/python/libgrass_interface_generator/CMakeLists.txt index 5a78cf3f4b2..574651c9198 100644 --- a/python/libgrass_interface_generator/CMakeLists.txt +++ b/python/libgrass_interface_generator/CMakeLists.txt @@ -68,7 +68,7 @@ foreach(module ${MODULES}) DEPENDS ${${module}_LIBS} COMMAND ${CMAKE_COMMAND} -DCTYPESGEN_PY=${CMAKE_CURRENT_SOURCE_DIR}/run.py - -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE} + -DPython_EXECUTABLE=${Python_EXECUTABLE} -DCOMPILER=${CMAKE_C_COMPILER} -DBIN_DIR=${GISBASE} -DHDRS=${${module}_HDRS} diff --git a/thirdparty/CMakeLists.txt b/thirdparty/CMakeLists.txt index e60264360f7..21cef917446 100644 --- a/thirdparty/CMakeLists.txt +++ b/thirdparty/CMakeLists.txt @@ -111,8 +111,12 @@ endif() if(WITH_OPENGL) find_package(OpenGL REQUIRED) add_library(OPENGL INTERFACE IMPORTED GLOBAL) - set_property(TARGET OPENGL PROPERTY INTERFACE_LINK_LIBRARIES ${OPENGL_LIBRARIES} ) - set_property(TARGET OPENGL PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${OPENGL_INCLUDE_DIR} ) + if(APPLE) + find_library(AGL_FRAMEWORK AGL DOC "AGL lib for OSX") + set(APP "-framework AGL -framework ApplicationServices") + endif() + set_property(TARGET OPENGL PROPERTY INTERFACE_LINK_LIBRARIES ${OPENGL_LIBRARIES} ${AGL_FRAMEWORK} ) + set_property(TARGET OPENGL PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${OPENGL_INCLUDE_DIR} ${AGL_FRAMEWORK}) endif() if(WITH_POSTGRES) @@ -175,6 +179,5 @@ if(MSVC) endif() # find_package (PythonLibs REQUIRED ) -set(Python_ADDITIONAL_VERSIONS 3.5 3.6) -find_package (PythonInterp REQUIRED ) +find_package(Python3 REQUIRED) # find_package ( Numpy ) From 94a6b326fa4751e6c2d57f11d6d5ce78c34e06cd Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Mon, 14 Aug 2023 10:37:35 +0200 Subject: [PATCH 055/253] apply cmake-format using version 0.6.13 with default settings --- CMakeLists.txt | 149 +++-- cmake/copy_g_gui_module.cmake | 38 +- cmake/ctypesgen.cmake | 47 +- cmake/find_scripts/FindCairo.cmake | 193 +++--- cmake/find_scripts/FindFFTW.cmake | 37 +- cmake/find_scripts/FindFontConfig.cmake | 46 +- cmake/find_scripts/FindGDAL.cmake | 14 +- cmake/find_scripts/FindGEOS.cmake | 83 ++- cmake/find_scripts/FindIconv.cmake | 72 +-- cmake/find_scripts/FindLibLAS.cmake | 29 +- cmake/find_scripts/FindNetCDF.cmake | 11 +- cmake/find_scripts/FindPCRE.cmake | 13 +- cmake/find_scripts/FindPROJ.cmake | 95 +-- cmake/find_scripts/FindSQLite.cmake | 5 +- cmake/locale_strings.cmake | 48 +- cmake/modules/build_gui_in_subdir.cmake | 124 ++-- cmake/modules/build_library_in_subdir.cmake | 23 +- cmake/modules/build_module.cmake | 418 +++++++------ cmake/modules/build_program.cmake | 13 +- cmake/modules/build_program_in_subdir.cmake | 25 +- cmake/modules/build_script_in_subdir.cmake | 145 ++--- cmake/modules/check_target.cmake | 10 +- .../modules/copy_python_files_in_subdir.cmake | 30 +- cmake/modules/get_host_arch.cmake | 35 +- cmake/modules/get_versions.cmake | 64 +- cmake/modules/linker.cmake | 38 +- cmake/modules/repo_status.cmake | 53 +- cmake/modules/set_compiler_flags.cmake | 19 +- db/CMakeLists.txt | 3 +- db/drivers/CMakeLists.txt | 130 ++-- display/CMakeLists.txt | 25 +- general/CMakeLists.txt | 68 ++- general/manage/lister/CMakeLists.txt | 32 +- gui/CMakeLists.txt | 7 +- gui/icons/CMakeLists.txt | 55 +- gui/images/CMakeLists.txt | 26 +- gui/wxpython/CMakeLists.txt | 150 +++-- gui/wxpython/docs/CMakeLists.txt | 14 +- imagery/CMakeLists.txt | 207 ++++--- imagery/i.ortho.photo/CMakeLists.txt | 11 +- include/CMakeLists.txt | 134 ++-- lib/CMakeLists.txt | 180 ++++-- lib/db/CMakeLists.txt | 46 +- lib/db/sqlp/CMakeLists.txt | 20 +- lib/fonts/CMakeLists.txt | 2 +- lib/gis/CMakeLists.txt | 244 ++++++-- lib/init/CMakeLists.txt | 135 ++-- lib/proj/CMakeLists.txt | 19 +- lib/rst/CMakeLists.txt | 48 +- lib/temporal/CMakeLists.txt | 3 +- lib/vector/CMakeLists.txt | 25 +- lib/vector/dglib/CMakeLists.txt | 62 +- lib/vector/diglib/CMakeLists.txt | 44 +- lib/vector/neta/CMakeLists.txt | 29 +- lib/vector/vedit/CMakeLists.txt | 15 +- man/CMakeLists.txt | 5 +- misc/CMakeLists.txt | 23 +- ps/CMakeLists.txt | 11 +- python/grass/CMakeLists.txt | 53 +- python/grass/pygrass/CMakeLists.txt | 30 +- .../CMakeLists.txt | 106 ++-- raster/CMakeLists.txt | 574 ++++++------------ raster/r.colors.out/CMakeLists.txt | 30 +- raster/r.colors/CMakeLists.txt | 26 +- raster/r.li/CMakeLists.txt | 49 +- raster/r.mapcalc/CMakeLists.txt | 50 +- raster/r.sim/CMakeLists.txt | 32 +- raster/r.spread/CMakeLists.txt | 31 +- raster/r.univar/CMakeLists.txt | 31 +- raster/r.watershed/CMakeLists.txt | 28 +- raster3d/CMakeLists.txt | 99 +-- raster3d/r3.flow/CMakeLists.txt | 32 +- scripts/CMakeLists.txt | 198 +++--- temporal/CMakeLists.txt | 101 ++- thirdparty/CMakeLists.txt | 149 +++-- utils/CMakeLists.txt | 53 +- vector/CMakeLists.txt | 100 ++- vector/v.lrs/CMakeLists.txt | 28 +- 78 files changed, 3036 insertions(+), 2414 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 74c87475b45..0b7ea104f76 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,20 +1,23 @@ -# AUTHOR(S): Rashad Kanavath -# PURPOSE: GRASS GIS root that adds options to activate/deactivate 3rd party libraries -# COPYRIGHT: (C) 2020-2022 by the GRASS Development Team -# This program is free software under the GPL (>=v2) -# Read the file COPYING that comes with GRASS for details. +#[[ +AUTHOR(S): Rashad Kanavath +PURPOSE: GRASS GIS root that adds options to activate/deactivate + 3rd party libraries +COPYRIGHT: (C) 2020-2022 by the GRASS Development Team + This program is free software under the GPL (>=v2) + Read the file COPYING that comes with GRASS for details. +#]] cmake_minimum_required(VERSION 3.11) set(CMAKE_DISABLE_IN_SOURCE_BUILD ON) -#if(DEFINED ENV{VCPKG_DEFAULT_TRIPLET} AND NOT DEFINED VCPKG_TARGET_TRIPLET) -# set(VCPKG_TARGET_TRIPLET "$ENV{VCPKG_DEFAULT_TRIPLET}" CACHE STRING "") -#endif() +# if(DEFINED ENV{VCPKG_DEFAULT_TRIPLET} AND NOT DEFINED VCPKG_TARGET_TRIPLET) +# set(VCPKG_TARGET_TRIPLET "$ENV{VCPKG_DEFAULT_TRIPLET}" CACHE STRING "") +# endif() project(GRASSGIS) set(BUILD_SHARED_LIBS ON) -#message(FATAL_ERROR "VCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET}") +# message(FATAL_ERROR "VCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET}") if(MSVC) if(BUILD_SHARED_LIBS) set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) @@ -23,17 +26,18 @@ if(MSVC) set_property(GLOBAL PROPERTY USE_FOLDERS ON) endif() -set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/find_scripts;${CMAKE_SOURCE_DIR}/cmake/modules;${CMAKE_MODULE_PATH}") - +set(CMAKE_MODULE_PATH + "${CMAKE_SOURCE_DIR}/cmake/find_scripts;${CMAKE_SOURCE_DIR}/cmake/modules;${CMAKE_MODULE_PATH}" +) -if (NOT CMAKE_CXX_STANDARD) - set(CMAKE_CXX_STANDARD 11) - set(CMAKE_CXX_STANDARD_REQUIRED ON) +if(NOT CMAKE_CXX_STANDARD) + 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) +if(NOT CMAKE_C_STANDARD) + set(CMAKE_C_STANDARD 11) + set(CMAKE_C_STANDARD_REQUIRED ON) endif() set(default_option_enabled ON) @@ -44,12 +48,12 @@ endif() # Configure CCache if available if(NOT MSVC) option(USE_CCACHE "Use ccache" ON) - if (USE_CCACHE) + 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") + 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) @@ -59,14 +63,14 @@ if(USE_ALTERNATE_LINKER) endif() if(CMAKE_BUILD_TYPE) -set( grass_build_type "${CMAKE_BUILD_TYPE}" ) -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() + set(grass_build_type "${CMAKE_BUILD_TYPE}") + 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() else() -set(find_library_suffix "") + set(find_library_suffix "") endif() option(WITH_CAIRO "Build with cairo support ." ON) @@ -91,11 +95,12 @@ if(APPLE) set(CMAKE_MACOSX_RPATH TRUE) endif() -set(CMAKE_SKIP_BUILD_RPATH FALSE) +set(CMAKE_SKIP_BUILD_RPATH FALSE) set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) -list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir) +list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES + "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir) if("${isSystemDir}" STREQUAL "-1") set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") endif("${isSystemDir}" STREQUAL "-1") @@ -104,13 +109,11 @@ include(get_host_arch) get_host_arch(BUILD_ARCH) include(get_versions) -get_versions("include/VERSION" - GRASS_VERSION_MAJOR - GRASS_VERSION_MINOR - GRASS_VERSION_RELEASE - GRASS_VERSION_DATE) +get_versions("include/VERSION" GRASS_VERSION_MAJOR GRASS_VERSION_MINOR + GRASS_VERSION_RELEASE GRASS_VERSION_DATE) -set(GRASS_VERSION_NUMBER ${GRASS_VERSION_MAJOR}.${GRASS_VERSION_MINOR}.${GRASS_VERSION_RELEASE}) +set(GRASS_VERSION_NUMBER + ${GRASS_VERSION_MAJOR}.${GRASS_VERSION_MINOR}.${GRASS_VERSION_RELEASE}) message(STATUS "GRASS_VERSION_NUMBER = '${GRASS_VERSION_NUMBER}'") set(GRASS_VERSION_UPDATE_PKG "0.2") @@ -155,36 +158,29 @@ file(TO_NATIVE_PATH "${GISBASE}/etc/config/rc" GISRC) file(TO_NATIVE_PATH "${GISBASE}/etc/python" ETC_PYTHON_DIR) file(TO_NATIVE_PATH "${GISBASE}/gui/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(grass_env_command ${CMAKE_COMMAND} -E env - "PATH=${BINARY_DIR}${sep}${SCRIPTS_DIR}${env_path}" - "PYTHONPATH=${ETC_PYTHON_DIR}${sep}${GUI_WXPYTHON_DIR}${sep}$ENV{PYTHONPATH}" - "LD_LIBRARY_PATH=${LIB_DIR}${sep}$ENV{LD_LIBRARY_PATH}" - "GISBASE=${GISBASE_NATIVE}" - "GISRC=${GISRC}" - "LC_ALL=C" - "LANG=C" - "LANGUAGE=C" - "MODULE_TOPDIR=${MODULE_TOPDIR}" +set(grass_env_command + ${CMAKE_COMMAND} -E env "PATH=${BINARY_DIR}${sep}${SCRIPTS_DIR}${env_path}" + "PYTHONPATH=${ETC_PYTHON_DIR}${sep}${GUI_WXPYTHON_DIR}${sep}$ENV{PYTHONPATH}" + "LD_LIBRARY_PATH=${LIB_DIR}${sep}$ENV{LD_LIBRARY_PATH}" + "GISBASE=${GISBASE_NATIVE}" "GISRC=${GISRC}" "LC_ALL=C" "LANG=C" + "LANGUAGE=C" "MODULE_TOPDIR=${MODULE_TOPDIR}" "VERSION_NUMBER=\"${GRASS_VERSION_NUMBER}\"" "VERSION_DATE=\"${GRASS_VERSION_DATE}\"") - - set(NO_HTML_DESCR_TARGETS "g.parser;ximgview;test.raster3d.lib") add_subdirectory(include) include_directories("${CMAKE_BINARY_DIR}/include") include_directories(${CMAKE_BINARY_DIR}/include/grass) if(MSVC) - include_directories("${CMAKE_SOURCE_DIR}/msvc") + include_directories("${CMAKE_SOURCE_DIR}/msvc") endif() execute_process( @@ -202,39 +198,37 @@ execute_process( COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/gui/wxpython/xml/ COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/gui/icons/ COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/gui/images/ - COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/docs/html/ - ) + COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/docs/html/) add_subdirectory(lib) add_subdirectory(utils) set(modules_list) - set(ALL_SUBDIRS - general - db - display - imagery - misc - raster - raster3d - scripts - vector - temporal - ps -) + general + db + display + imagery + misc + raster + raster3d + scripts + vector + temporal + ps) foreach(d ${ALL_SUBDIRS}) add_subdirectory(${d}) endforeach() -add_custom_target(ALL_MODULES - COMMAND ${CMAKE_COMMAND} -E echo "Building all modules" - DEPENDS ${modules_list}) +add_custom_target( + ALL_MODULES + COMMAND ${CMAKE_COMMAND} -E echo "Building all modules" + DEPENDS ${modules_list}) -###message(FATAL_ERROR "modules_list=${modules_list}") +# message(FATAL_ERROR "modules_list=${modules_list}") if(WITH_PYTHON) - add_subdirectory(gui) + add_subdirectory(gui) endif() add_subdirectory(python) @@ -244,12 +238,9 @@ if(WITH_DOCS) add_subdirectory(man) endif() # WITH_DOCS +# add_subdirectory(locale) -####add_subdirectory(locale) - -# TODO: To be discussed -# add_subdirectory(testsuite) -# add_subdirectory(macosx) +# TODO: To be discussed - add_subdirectory(testsuite) - add_subdirectory(macosx) if(WITH_X11) build_program_in_subdir(visualization/ximgview DEPENDS grass_gis X11) diff --git a/cmake/copy_g_gui_module.cmake b/cmake/copy_g_gui_module.cmake index 46246dc4ca0..21fc99559da 100644 --- a/cmake/copy_g_gui_module.cmake +++ b/cmake/copy_g_gui_module.cmake @@ -1,13 +1,15 @@ -# AUTHOR(S): Rashad Kanavath -# PURPOSE: Copy g.gui script plus .bat file if on windows -# COPYRIGHT: (C) 2020 by the GRASS Development Team -# This program is free software under the GPL (>=v2) -# Read the file COPYING that comes with GRASS for details. -# -DSOURCE_DIR -# -DGISBASE -# -DG_NAME -# -DSRC_SCRIPT_FILE -# -DBINARY_DIR +#[[ +AUTHOR(S): Rashad Kanavath +PURPOSE: Copy g.gui script plus .bat file if on windows +COPYRIGHT: (C) 2020 by the GRASS Development Team + This program is free software under the GPL (>=v2) + Read the file COPYING that comes with GRASS for details. +-DSOURCE_DIR +-DGISBASE +-DG_NAME +-DSRC_SCRIPT_FILE +-DBINARY_DIR +#]] set(SCRIPT_EXT "") if(WIN32) @@ -16,9 +18,8 @@ endif() if(WIN32) set(PGM_NAME ${G_NAME}) - configure_file( - ${SOURCE_DIR}/cmake/windows_launch.bat.in - ${GISBASE}/scripts/${G_NAME}.bat @ONLY) + configure_file(${SOURCE_DIR}/cmake/windows_launch.bat.in + ${GISBASE}/scripts/${G_NAME}.bat @ONLY) endif(WIN32) set(TMP_SCRIPT_FILE ${BINARY_DIR}/CMakeFiles/${G_NAME}${SCRIPT_EXT}) @@ -27,9 +28,12 @@ file( COPY ${TMP_SCRIPT_FILE} DESTINATION ${GISBASE}/scripts/ FILE_PERMISSIONS - OWNER_READ OWNER_WRITE OWNER_EXECUTE - GROUP_READ GROUP_EXECUTE - WORLD_READ WORLD_EXECUTE) - + OWNER_READ + OWNER_WRITE + OWNER_EXECUTE + GROUP_READ + GROUP_EXECUTE + WORLD_READ + WORLD_EXECUTE) file(REMOVE ${TMP_SCRIPT_FILE}) diff --git a/cmake/ctypesgen.cmake b/cmake/ctypesgen.cmake index 945e74950b3..3ad7bb3f3ae 100644 --- a/cmake/ctypesgen.cmake +++ b/cmake/ctypesgen.cmake @@ -1,13 +1,18 @@ -# AUTHOR(S): Rashad Kanavath -# PURPOSE: Cmake building of lib/python/ctypes (TODO) -# COPYRIGHT: (C) 2020 by the GRASS Development Team -# This program is free software under the GPL (>=v2) -# Read the file COPYING that comes with GRASS for details. +#[[ +AUTHOR(S): Rashad Kanavath +PURPOSE: Cmake building of lib/python/ctypes (TODO) +COPYRIGHT: (C) 2020 by the GRASS Development Team + This program is free software under the GPL (>=v2) + Read the file COPYING that comes with GRASS for details. +#]] -set(ENV{GISRC} "${BIN_DIR}/demolocation/.grassrc${GRASS_VERSION_MAJOR}${GRASS_VERSION_MINOR}") +set(ENV{GISRC} + "${BIN_DIR}/demolocation/.grassrc${GRASS_VERSION_MAJOR}${GRASS_VERSION_MINOR}" +) set(ENV{GISBASE} "${BIN_DIR}") set(ENV{PATH} "${BIN_DIR}/bin:${BIN_DIR}/scripts:$ENV{PATH}") -set(ENV{PYTHONPATH} "${BIN_DIR}/gui/wxpython:${BIN_DIR}/etc/python:$ENV{PYTHONPATH}") +set(ENV{PYTHONPATH} + "${BIN_DIR}/gui/wxpython:${BIN_DIR}/etc/python:$ENV{PYTHONPATH}") if(NOT MSVC) set(ENV{LD_LIBRARY_PATH} "${BIN_DIR}/lib:$ENV{LD_LIBRARY_PATH}") endif() @@ -20,7 +25,7 @@ foreach(LIB ${LIBS}) elseif(APPLE) list(APPEND LIBRARIES "--library=${BIN_DIR}/lib/lib${LIB}.so") else() - #This can be linux or unix + # This can be linux or unix list(APPEND LIBRARIES "--library=${BIN_DIR}/lib/lib${LIB}.so") endif() endforeach() @@ -30,7 +35,7 @@ foreach(HDR ${HDRS}) list(APPEND HEADERS "${BIN_DIR}/include/grass/${HDR}") endforeach() -foreach(req OUT_FILE HDRS LIBS CTYPESGEN_PY COMPILER ) +foreach(req OUT_FILE HDRS LIBS CTYPESGEN_PY COMPILER) if(NOT DEFINED ${req} OR "${${req}}" STREQUAL "") message(FATAL_ERROR "you must set ${req}") endif() @@ -39,23 +44,23 @@ endforeach() if(MSVC) set(CTYPESFLAGS "${COMPILER} -E -DPACKAGE=\"grasslibs\"") else() - set(CTYPESFLAGS "${COMPILER} -E -DPACKAGE=\"grasslibs\" -D__GLIBC_HAVE_LONG_LONG") + set(CTYPESFLAGS + "${COMPILER} -E -DPACKAGE=\"grasslibs\" -D__GLIBC_HAVE_LONG_LONG") endif() -message(STATUS "Running ${PYTHON_EXECUTABLE} ${CTYPESGEN_PY} --cpp=${CTYPESFLAGS} --includedir=\"${BIN_DIR}/include\" --runtime-libdir=\"${BIN_DIR}/lib\" ${HEADERS} ${LIBRARIES} --output=${OUT_FILE}") +message( + STATUS + "Running ${PYTHON_EXECUTABLE} ${CTYPESGEN_PY} --cpp=${CTYPESFLAGS} --includedir=\"${BIN_DIR}/include\" --runtime-libdir=\"${BIN_DIR}/lib\" ${HEADERS} ${LIBRARIES} --output=${OUT_FILE}" +) execute_process( - COMMAND ${PYTHON_EXECUTABLE} ${CTYPESGEN_PY} - --cpp=${CTYPESFLAGS} - --includedir="${BIN_DIR}/include" - --runtime-libdir="${BIN_DIR}/lib" - ${HEADERS} - ${LIBRARIES} - --output=${OUT_FILE} + COMMAND + ${PYTHON_EXECUTABLE} ${CTYPESGEN_PY} --cpp=${CTYPESFLAGS} + --includedir="${BIN_DIR}/include" --runtime-libdir="${BIN_DIR}/lib" + ${HEADERS} ${LIBRARIES} --output=${OUT_FILE} OUTPUT_VARIABLE ctypesgen_OV ERROR_VARIABLE ctypesgen_EV - RESULT_VARIABLE ctypesgen_RV - ) + RESULT_VARIABLE ctypesgen_RV) -if( ctypesgen_RV ) +if(ctypesgen_RV) message(FATAL_ERROR "ctypesgen.py: ${ctypesgen_EV} \n ${ctypesgen_OV}") endif() diff --git a/cmake/find_scripts/FindCairo.cmake b/cmake/find_scripts/FindCairo.cmake index 92a22db9a25..c6551cb0fdc 100644 --- a/cmake/find_scripts/FindCairo.cmake +++ b/cmake/find_scripts/FindCairo.cmake @@ -1,122 +1,125 @@ -# - Try to find Cairo -# Once done, this will define -# -# CAIRO_FOUND - system has Cairo -# CAIRO_INCLUDE_DIRS - the Cairo include directories -# CAIRO_LIBRARIES - link these to use Cairo -# -# Copyright (C) 2012 Raphael Kubo da Costa -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND ITS CONTRIBUTORS ``AS -# IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ITS -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -FIND_PACKAGE(PkgConfig QUIET) -PKG_CHECK_MODULES(PC_CAIRO cairo QUIET) # FIXME: After we require CMake 2.8.2 we can pass QUIET to this call. - - -FIND_PATH(CAIRO_INCLUDE_DIRS - 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} -) - -FIND_LIBRARY(CAIRO_LIBRARY_DEBUG - NAMES cairod - HINTS ${PC_CAIRO_LIBDIR} - ${PC_CAIRO_LIBRARY_DIRS} -) +#[[ +- Try to find Cairo +Once done, this will define + + CAIRO_FOUND - system has Cairo + CAIRO_INCLUDE_DIRS - the Cairo include directories + CAIRO_LIBRARIES - link these to use Cairo + +Copyright (C) 2012 Raphael Kubo da Costa + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND ITS CONTRIBUTORS ``AS +IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ITS +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#]] + +find_package(PkgConfig QUIET) +pkg_check_modules(PC_CAIRO cairo QUIET) # FIXME: After we require CMake 2.8.2 we + # can pass QUIET to this call. + +find_path( + CAIRO_INCLUDE_DIRS + 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}) + +find_library( + 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_DIRS) + if(EXISTS "${CAIRO_INCLUDE_DIRS}/cairo-version.h") + file(READ "${CAIRO_INCLUDE_DIRS}/cairo-version.h" CAIRO_VERSION_CONTENT) -IF (CAIRO_INCLUDE_DIRS) - IF (EXISTS "${CAIRO_INCLUDE_DIRS}/cairo-version.h") - FILE(READ "${CAIRO_INCLUDE_DIRS}/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_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_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}") + 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 () + set(CAIRO_VERSION + "${CAIRO_VERSION_MAJOR}.${CAIRO_VERSION_MINOR}.${CAIRO_VERSION_MICRO}") + endif() +endif() # FIXME: Should not be needed anymore once we start depending on CMake 2.8.3 -SET(VERSION_OK TRUE) -IF (Cairo_FIND_VERSION) - IF (Cairo_FIND_VERSION_EXACT) - IF ("${Cairo_FIND_VERSION}" VERSION_EQUAL "${CAIRO_VERSION}") - # FIXME: Use IF (NOT ...) with CMake 2.8.2+ to get rid of the ELSE block - ELSE () - SET(VERSION_OK FALSE) - ENDIF () - ELSE () - IF ("${Cairo_FIND_VERSION}" VERSION_GREATER "${CAIRO_VERSION}") - SET(VERSION_OK FALSE) - ENDIF () - ENDIF () -ENDIF () +set(VERSION_OK TRUE) +if(Cairo_FIND_VERSION) + if(Cairo_FIND_VERSION_EXACT) + if("${Cairo_FIND_VERSION}" VERSION_EQUAL "${CAIRO_VERSION}") + # FIXME: Use IF (NOT ...) with CMake 2.8.2+ to get rid of the ELSE block + else() + set(VERSION_OK FALSE) + endif() + else() + if("${Cairo_FIND_VERSION}" VERSION_GREATER "${CAIRO_VERSION}") + set(VERSION_OK FALSE) + endif() + endif() +endif() find_path(FONTCONFIG_INCLUDE_DIR fontconfig/fontconfig.h) if(FONTCONFIG_INCLUDE_DIR) - set(CAIRO_INCLUDE_DIRS ${CAIRO_INCLUDE_DIRS} ${FONTCONFIG_INCLUDE_DIR} ) + set(CAIRO_INCLUDE_DIRS ${CAIRO_INCLUDE_DIRS} ${FONTCONFIG_INCLUDE_DIR}) else() - message(STATUS "fontconfig/fontconfig.h was not found. \n I had to unset(CAIRO_INCLUDE_DIRS) to make find_package() fail \n ") + message( + STATUS + "fontconfig/fontconfig.h was not found. \n I had to unset(CAIRO_INCLUDE_DIRS) to make find_package() fail \n " + ) unset(CAIRO_INCLUDE_DIRS CACHE) endif() find_library(FONTCONFIG_LIBRARY NAMES fontconfig) if(FONTCONFIG_LIBRARY) - set(CAIRO_LIBRARIES ${CAIRO_LIBRARY} ${FONTCONFIG_LIBRARY} ) + set(CAIRO_LIBRARIES ${CAIRO_LIBRARY} ${FONTCONFIG_LIBRARY}) else() - message(STATUS "fontconfig library file was not found. \n I had to unset(CAIRO_LIBRARIES) to make find_package() fail \n ") + message( + STATUS + "fontconfig library file was not found. \n I had to unset(CAIRO_LIBRARIES) to make find_package() fail \n " + ) unset(CAIRO_LIBRARIES CACHE) endif() -MARK_AS_ADVANCED( - CAIRO_INCLUDE_DIRS - CAIRO_LIBRARY - CAIRO_LIBRARY_RELEASE - CAIRO_LIBRARY_DEBUG - FONTCONFIG_LIBRARY - FONTCONFIG_INCLUDE_DIR - ) +mark_as_advanced(CAIRO_INCLUDE_DIRS CAIRO_LIBRARY CAIRO_LIBRARY_RELEASE + CAIRO_LIBRARY_DEBUG FONTCONFIG_LIBRARY FONTCONFIG_INCLUDE_DIR) -INCLUDE(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(Cairo DEFAULT_MSG CAIRO_INCLUDE_DIRS CAIRO_LIBRARIES VERSION_OK) +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Cairo DEFAULT_MSG CAIRO_INCLUDE_DIRS + CAIRO_LIBRARIES VERSION_OK) diff --git a/cmake/find_scripts/FindFFTW.cmake b/cmake/find_scripts/FindFFTW.cmake index 33fe91dcd30..22adc1d8839 100644 --- a/cmake/find_scripts/FindFFTW.cmake +++ b/cmake/find_scripts/FindFFTW.cmake @@ -7,7 +7,7 @@ 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}") + message(STATUS "Found fftw.h in ${FFTW_INCLUDE_DIR}") endif() endif() @@ -17,8 +17,8 @@ if(DFFTW_INCLUDE_DIR) message(STATUS "Found dfftw.h in ${FFTW_INCLUDE_DIR}") endif() -#fftw double lib -find_library(FFTWD_LIB fftw3 ) +# fftw double lib +find_library(FFTWD_LIB fftw3) find_library(FFTWD_THREADS_LIB fftw3_threads) # threads support set(FFTW_LIBRARIES) @@ -30,9 +30,9 @@ if(FFTWD_LIB) endif() endif() -#Single Precision +# Single Precision find_library(FFTWF_LIB fftw3f) -find_library(FFTWF_THREADS_LIB fftw3f_threads) #threads support +find_library(FFTWF_THREADS_LIB fftw3f_threads) # threads support if(FFTWF_LIB) set(FFTWF_FOUND 1) @@ -42,25 +42,30 @@ if(FFTWF_LIB) endif() endif() -if(NOT FFTWD_FOUND AND NOT FFTWF_FOUND ) +if(NOT FFTWD_FOUND AND NOT FFTWF_FOUND) set(FFTW_FOUND FALSE) endif() -MARK_AS_ADVANCED( +mark_as_advanced( FFTW_LIBRARIES FFTW_INCLUDE_DIR DFFTW_INCLUDE_DIR FFTWF_LIB FFTWF_THREADS_LIB FFTWD_LIB - FFTWD_THREADS_LIB -) + FFTWD_THREADS_LIB) - -#copy HAVE_ to parent scope so that we can use in include/CMakeLists.txt and rest -set(HAVE_FFTW3_H ${HAVE_FFTW3_H} PARENT_SCOPE) -set(HAVE_FFTW_H ${HAVE_FFTW_H} PARENT_SCOPE) -set(HAVE_DFFTW_H ${HAVE_DFFTW_H} PARENT_SCOPE) +# copy HAVE_ to parent scope so that we can use in include/CMakeLists.txt and +# rest +set(HAVE_FFTW3_H + ${HAVE_FFTW3_H} + PARENT_SCOPE) +set(HAVE_FFTW_H + ${HAVE_FFTW_H} + PARENT_SCOPE) +set(HAVE_DFFTW_H + ${HAVE_DFFTW_H} + PARENT_SCOPE) 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/FindFontConfig.cmake b/cmake/find_scripts/FindFontConfig.cmake index 540aef0d2af..c7d228c7cc2 100644 --- a/cmake/find_scripts/FindFontConfig.cmake +++ b/cmake/find_scripts/FindFontConfig.cmake @@ -1,22 +1,24 @@ -# - Find FontConfig library -# Find the FontConfig includes and library -# This module defines -# FONTCONFIG_INCLUDE_DIR, where to find fontconfig.h -# FONTCONFIG_LIBRARIES, libraries to link against to use the FontConfig API. -# FONTCONFIG_FOUND, If false, do not try to use FontConfig. - -#============================================================================= -# Copyright 2012 Kitware, Inc. -# -# Distributed under the OSI-approved BSD License (the "License"); -# see accompanying file Copyright.txt for details. -# -# This software is distributed WITHOUT ANY WARRANTY; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the License for more information. -#============================================================================= -# (To distribute this file outside of VTK, substitute the full -# License text for the above reference.) +#[[ +- Find FontConfig library +Find the FontConfig includes and library +This module defines + FONTCONFIG_INCLUDE_DIR, where to find fontconfig.h + FONTCONFIG_LIBRARIES, libraries to link against to use the FontConfig API. + FONTCONFIG_FOUND, If false, do not try to use FontConfig. + +============================================================================= +Copyright 2012 Kitware, Inc. + +Distributed under the OSI-approved BSD License (the "License"); +see accompanying file Copyright.txt for details. + +This software is distributed WITHOUT ANY WARRANTY; without even the +implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the License for more information. +============================================================================= +(To distribute this file outside of VTK, substitute the full + License text for the above reference.) +#]] find_path(FONTCONFIG_INCLUDE_DIR fontconfig/fontconfig.h) @@ -25,11 +27,11 @@ find_library(FONTCONFIG_LIBRARY NAMES fontconfig) # handle the QUIETLY and REQUIRED arguments and set FONTCONFIG_FOUND to TRUE if # all listed variables are TRUE include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(FontConfig DEFAULT_MSG - FONTCONFIG_LIBRARY FONTCONFIG_INCLUDE_DIR) +find_package_handle_standard_args(FontConfig DEFAULT_MSG FONTCONFIG_LIBRARY + FONTCONFIG_INCLUDE_DIR) if(FONTCONFIG_FOUND) - set( FONTCONFIG_LIBRARIES ${FONTCONFIG_LIBRARY} ) + set(FONTCONFIG_LIBRARIES ${FONTCONFIG_LIBRARY}) endif() mark_as_advanced(FONTCONFIG_INCLUDE_DIR FONTCONFIG_LIBRARY FONTCONFIG_LIBRARIES) diff --git a/cmake/find_scripts/FindGDAL.cmake b/cmake/find_scripts/FindGDAL.cmake index 698f4916819..08479a2d7dd 100644 --- a/cmake/find_scripts/FindGDAL.cmake +++ b/cmake/find_scripts/FindGDAL.cmake @@ -6,9 +6,13 @@ set(GDAL_FOUND FALSE) set(GDAL_LIBRARY) if(GDAL_LIBRARY_DEBUG) - set( GDAL_LIBRARY ${GDAL_LIBRARY_DEBUG} CACHE FILEPATH "doc" ) + set(GDAL_LIBRARY + ${GDAL_LIBRARY_DEBUG} + CACHE FILEPATH "doc") elseif(GDAL_LIBRARY_RELEASE) - set( GDAL_LIBRARY ${GDAL_LIBRARY_RELEASE} CACHE FILEPATH "doc" ) + set(GDAL_LIBRARY + ${GDAL_LIBRARY_RELEASE} + CACHE FILEPATH "doc") endif() mark_as_advanced(GDAL_LIBRARY_RELEASE) @@ -17,7 +21,5 @@ mark_as_advanced(GDAL_LIBRARY) mark_as_advanced(GDAL_INCLUDE_DIR) include(FindPackageHandleStandardArgs) -find_package_handle_standard_args( GDAL DEFAULT_MSG - GDAL_LIBRARY - GDAL_INCLUDE_DIR ) - +find_package_handle_standard_args(GDAL DEFAULT_MSG GDAL_LIBRARY + GDAL_INCLUDE_DIR) diff --git a/cmake/find_scripts/FindGEOS.cmake b/cmake/find_scripts/FindGEOS.cmake index 6b7544b612e..17fe3831095 100644 --- a/cmake/find_scripts/FindGEOS.cmake +++ b/cmake/find_scripts/FindGEOS.cmake @@ -1,37 +1,39 @@ -#--- -# File: FindGEOS.cmake -# -# Find the native GEOS(Geometry Engine - Open Source) includes and libraries. -# -# This module defines: -# -# GEOS_INCLUDE_DIR, where to find geos.h, etc. -# GEOS_LIBRARY, libraries to link against to use GEOS. Currently there are -# two looked for, geos and geos_c libraries. -# GEOS_FOUND, True if found, false if one of the above are not found. -# -# For ossim, typically geos will be system installed which should be found; -# or found in the ossim 3rd party dependencies directory from a geos build -# and install. If the latter it will rely on CMAKE_INCLUDE_PATH and -# CMAKE_LIBRARY_PATH having the path to the party dependencies directory. -# -# NOTE: -# This script is specialized for ossim, e.g. looking in /usr/local/ossim. -# -# $Id$ -#--- - -#--- -# Find include path: -# Note: Ubuntu 14.04+ did not have geos.h (not included in any ossim src). -# Instead looking for Geometry.h -#--- - -find_path( GEOS_INCLUDE_DIR geos_c.h) +#[[ +File: FindGEOS.cmake + +Find the native GEOS(Geometry Engine - Open Source) includes and libraries. + +This module defines: + +GEOS_INCLUDE_DIR, where to find geos.h, etc. + +GEOS_LIBRARY, libraries to link against to use GEOS. Currently there are +two looked for, geos and geos_c libraries. + +GEOS_FOUND, True if found, false if one of the above are not found. +For ossim, typically geos will be system installed which should be found; +or found in the ossim 3rd party dependencies directory from a geos build +and install. If the latter it will rely on CMAKE_INCLUDE_PATH and +CMAKE_LIBRARY_PATH having the path to the party dependencies directory. + +NOTE: +This script is specialized for ossim, e.g. looking in /usr/local/ossim. + +$Id$ +--- + +--- +Find include path: +Note: Ubuntu 14.04+ did not have geos.h (not included in any ossim src). +Instead looking for Geometry.h +--- +#]] + +find_path(GEOS_INCLUDE_DIR geos_c.h) # Find GEOS C library: -find_library( GEOS_C_LIBRARY_RELEASE NAMES geos_c ) -find_library( GEOS_C_LIBRARY_DEBUG NAMES geos_cd ) +find_library(GEOS_C_LIBRARY_RELEASE NAMES geos_c) +find_library(GEOS_C_LIBRARY_DEBUG NAMES geos_cd) set(GEOS_FOUND FALSE) set(GEOS_C_LIBRARY) @@ -41,17 +43,10 @@ elseif(GEOS_C_LIBRARY_RELEASE) set(GEOS_C_LIBRARY ${GEOS_C_LIBRARY_RELEASE}) endif() -MARK_AS_ADVANCED( - GEOS_INCLUDE_DIR - GEOS_C_LIBRARY - GEOS_C_LIBRARY_RELEASE - GEOS_C_LIBRARY_DEBUG) +mark_as_advanced(GEOS_INCLUDE_DIR GEOS_C_LIBRARY GEOS_C_LIBRARY_RELEASE + GEOS_C_LIBRARY_DEBUG) -#--- -# This function sets GEOS_FOUND if variables are valid. -#--- +# --- This function sets GEOS_FOUND if variables are valid. --- include(FindPackageHandleStandardArgs) -find_package_handle_standard_args( GEOS DEFAULT_MSG - GEOS_C_LIBRARY - GEOS_INCLUDE_DIR ) - +find_package_handle_standard_args(GEOS DEFAULT_MSG GEOS_C_LIBRARY + GEOS_INCLUDE_DIR) diff --git a/cmake/find_scripts/FindIconv.cmake b/cmake/find_scripts/FindIconv.cmake index 4da368207e4..fe9089df133 100644 --- a/cmake/find_scripts/FindIconv.cmake +++ b/cmake/find_scripts/FindIconv.cmake @@ -1,30 +1,33 @@ -# - Try to find Iconv -# Once done this will define -# -# ICONV_FOUND - system has Iconv -# ICONV_INCLUDE_DIR - the Iconv include directory -# ICONV_LIBRARIES - Link these to use Iconv -# ICONV_SECOND_ARGUMENT_IS_CONST - the second argument for iconv() is const -# +#[[ +- Try to find Iconv +Once done this will define + +ICONV_FOUND - system has Iconv +ICONV_INCLUDE_DIR - the Iconv include directory +ICONV_LIBRARIES - Link these to use Iconv +ICONV_SECOND_ARGUMENT_IS_CONST - the second argument for iconv() is const +#]] + include(CheckCXXSourceCompiles) -IF (ICONV_INCLUDE_DIR AND ICONV_LIBRARIES) +if(ICONV_INCLUDE_DIR AND ICONV_LIBRARIES) # Already in cache, be silent - SET(ICONV_FIND_QUIETLY TRUE) -ENDIF (ICONV_INCLUDE_DIR AND ICONV_LIBRARIES) + set(ICONV_FIND_QUIETLY TRUE) +endif(ICONV_INCLUDE_DIR AND ICONV_LIBRARIES) -FIND_PATH(ICONV_INCLUDE_DIR iconv.h) +find_path(ICONV_INCLUDE_DIR iconv.h) -FIND_LIBRARY(ICONV_LIBRARIES NAMES iconv libiconv libiconv-2 c) +find_library(ICONV_LIBRARIES NAMES iconv libiconv libiconv-2 c) -IF(ICONV_INCLUDE_DIR AND ICONV_LIBRARIES) - SET(ICONV_FOUND TRUE) -ENDIF(ICONV_INCLUDE_DIR AND ICONV_LIBRARIES) +if(ICONV_INCLUDE_DIR AND ICONV_LIBRARIES) + set(ICONV_FOUND TRUE) +endif(ICONV_INCLUDE_DIR AND ICONV_LIBRARIES) set(CMAKE_REQUIRED_INCLUDES ${ICONV_INCLUDE_DIR}) set(CMAKE_REQUIRED_LIBRARIES ${ICONV_LIBRARIES}) -IF(ICONV_FOUND) - check_cxx_source_compiles(" +if(ICONV_FOUND) + check_cxx_source_compiles( + " #include int main(){ iconv_t conv = 0; @@ -35,24 +38,21 @@ IF(ICONV_FOUND) iconv(conv, &in, &ilen, &out, &olen); return 0; } -" ICONV_SECOND_ARGUMENT_IS_CONST ) -ENDIF(ICONV_FOUND) +" + ICONV_SECOND_ARGUMENT_IS_CONST) +endif(ICONV_FOUND) set(CMAKE_REQUIRED_INCLUDES) set(CMAKE_REQUIRED_LIBRARIES) -IF(ICONV_FOUND) - IF(NOT ICONV_FIND_QUIETLY) - MESSAGE(STATUS "Found Iconv: ${ICONV_LIBRARIES}") - ENDIF(NOT ICONV_FIND_QUIETLY) -ELSE(ICONV_FOUND) - IF(Iconv_FIND_REQUIRED) - MESSAGE(FATAL_ERROR "Could not find Iconv") - ENDIF(Iconv_FIND_REQUIRED) -ENDIF(ICONV_FOUND) - -MARK_AS_ADVANCED( - ICONV_INCLUDE_DIR - ICONV_LIBRARIES - ICONV_SECOND_ARGUMENT_IS_CONST -) - +if(ICONV_FOUND) + if(NOT ICONV_FIND_QUIETLY) + message(STATUS "Found Iconv: ${ICONV_LIBRARIES}") + endif(NOT ICONV_FIND_QUIETLY) +else(ICONV_FOUND) + if(Iconv_FIND_REQUIRED) + message(FATAL_ERROR "Could not find Iconv") + endif(Iconv_FIND_REQUIRED) +endif(ICONV_FOUND) + +mark_as_advanced(ICONV_INCLUDE_DIR ICONV_LIBRARIES + ICONV_SECOND_ARGUMENT_IS_CONST) diff --git a/cmake/find_scripts/FindLibLAS.cmake b/cmake/find_scripts/FindLibLAS.cmake index ccf40b6552b..c3c5b07c242 100644 --- a/cmake/find_scripts/FindLibLAS.cmake +++ b/cmake/find_scripts/FindLibLAS.cmake @@ -1,29 +1,34 @@ -find_path(LibLAS_INCLUDE_DIR +find_path( + 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") +find_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) +if(LibLAS_INCLUDE_DIR) 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}") + 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}") + 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}") + "${LibLAS_VERSION_MAJOR}.${LibLAS_VERSION_MINOR}.${LIBLAS_VERSION_REV}") endif() - #message(FATAL_ERROR "LibLAS_LIBRARY=${LibLAS_LIBRARY}") +# message(FATAL_ERROR "LibLAS_LIBRARY=${LibLAS_LIBRARY}") if(LibLAS_INCLUDE_DIR AND LibLAS_C_LIBRARY) set(LibLAS_FOUND TRUE) endif() diff --git a/cmake/find_scripts/FindNetCDF.cmake b/cmake/find_scripts/FindNetCDF.cmake index 794726c96a7..8939fb9b5bb 100644 --- a/cmake/find_scripts/FindNetCDF.cmake +++ b/cmake/find_scripts/FindNetCDF.cmake @@ -1,14 +1,17 @@ -find_path(NetCDF_INCLUDE_DIR +find_path( + NetCDF_INCLUDE_DIR NAMES netcdf.h DOC "path to netcdf.h") -find_library(NetCDF_LIBRARY +find_library( + NetCDF_LIBRARY NAMES netcdf DOC "path netcdf library") if(NetCDF_INCLUDE_DIR AND NetCDF_LIBRARY) - set(NetCDF_FOUND TRUE) + set(NetCDF_FOUND TRUE) endif() include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(NetCDF REQUIRED_VARS NetCDF_LIBRARY NetCDF_INCLUDE_DIR) +find_package_handle_standard_args(NetCDF REQUIRED_VARS NetCDF_LIBRARY + NetCDF_INCLUDE_DIR) diff --git a/cmake/find_scripts/FindPCRE.cmake b/cmake/find_scripts/FindPCRE.cmake index fb329d930d0..002f7af4a6d 100644 --- a/cmake/find_scripts/FindPCRE.cmake +++ b/cmake/find_scripts/FindPCRE.cmake @@ -1,12 +1,11 @@ - 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) @@ -24,9 +23,5 @@ 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 61c5cee5764..03e5e6716e0 100644 --- a/cmake/find_scripts/FindPROJ.cmake +++ b/cmake/find_scripts/FindPROJ.cmake @@ -26,9 +26,10 @@ Copyright (c) 2018 Hiroshi Miura #]=======================================================================] -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") set(PROJ_NAMES ${PROJ_NAMES} proj proj_i) set(PROJ_NAMES_DEBUG ${PROJ_NAMES_DEBUG} projd proj_d) @@ -45,18 +46,23 @@ 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}") -endif () + 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) +find_package_handle_standard_args( + PROJ + REQUIRED_VARS PROJ_LIBRARY PROJ_INCLUDE_DIR + VERSION_VAR PROJ_VERSION_STRING) mark_as_advanced(PROJ_INCLUDE_DIR PROJ_LIBRARY) if(PROJ_FOUND) @@ -64,53 +70,48 @@ if(PROJ_FOUND) 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") + 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_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}") + 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}") + 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() - - # find_path(PROJ_INCLUDE_DIR proj.h PATH_SUFFIXES proj) # # find_library(PROJ_LIBRARY_RELEASE NAMES proj_i proj) -# find_library(PROJ_LIBRARY_DEBUG NAMES projd) -# set(PROJ_FOUND FALSE) +# find_library(PROJ_LIBRARY_DEBUG NAMES projd) set(PROJ_FOUND FALSE) # -# set(PROJ_LIBRARY) -# if(PROJ_LIBRARY_DEBUG) -# set( PROJ_LIBRARY ${PROJ_LIBRARY_DEBUG} CACHE FILEPATH "doc" ) -# elseif(PROJ_LIBRARY_RELEASE) -# set( PROJ_LIBRARY ${PROJ_LIBRARY_RELEASE} CACHE FILEPATH "doc" ) -# endif() +# set(PROJ_LIBRARY) if(PROJ_LIBRARY_DEBUG) set( PROJ_LIBRARY +# ${PROJ_LIBRARY_DEBUG} CACHE FILEPATH "doc" ) elseif(PROJ_LIBRARY_RELEASE) set( +# PROJ_LIBRARY ${PROJ_LIBRARY_RELEASE} CACHE FILEPATH "doc" ) endif() # -# mark_as_advanced(PROJ_LIBRARY_RELEASE) -# mark_as_advanced(PROJ_LIBRARY_DEBUG) -# mark_as_advanced(PROJ_LIBRARY) -# mark_as_advanced(PROJ_INCLUDE_DIR) +# mark_as_advanced(PROJ_LIBRARY_RELEASE) mark_as_advanced(PROJ_LIBRARY_DEBUG) +# mark_as_advanced(PROJ_LIBRARY) mark_as_advanced(PROJ_INCLUDE_DIR) # -# include(FindPackageHandleStandardArgs) -# find_package_handle_standard_args( PROJ DEFAULT_MSG -# PROJ_LIBRARY -# PROJ_INCLUDE_DIR ) +# include(FindPackageHandleStandardArgs) find_package_handle_standard_args( PROJ +# DEFAULT_MSG PROJ_LIBRARY PROJ_INCLUDE_DIR ) # diff --git a/cmake/find_scripts/FindSQLite.cmake b/cmake/find_scripts/FindSQLite.cmake index 0a3f4522829..19da96bf203 100644 --- a/cmake/find_scripts/FindSQLite.cmake +++ b/cmake/find_scripts/FindSQLite.cmake @@ -1,8 +1,9 @@ find_path(SQLITE_INCLUDE_DIR sqlite3.h) -find_library(SQLITE_LIBRARY NAMES sqlite3 ) +find_library(SQLITE_LIBRARY NAMES sqlite3) mark_as_advanced(SQLITE_LIBRARY) mark_as_advanced(SQLITE_INCLUDE_DIR) include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(SQLite REQUIRED_VARS SQLITE_LIBRARY SQLITE_INCLUDE_DIR) +find_package_handle_standard_args(SQLite REQUIRED_VARS SQLITE_LIBRARY + SQLITE_INCLUDE_DIR) diff --git a/cmake/locale_strings.cmake b/cmake/locale_strings.cmake index 79a42843ee9..d2318cbea88 100644 --- a/cmake/locale_strings.cmake +++ b/cmake/locale_strings.cmake @@ -1,14 +1,16 @@ -# AUTHOR(S): Rashad Kanavath -# PURPOSE: create translation strings for grass scripts -# environment. TODO use custom_command POST_BUILD directly -# COPYRIGHT: (C) 2020 by the GRASS Development Team -# This program is free software under the GPL (>=v2) -# Read the file COPYING that comes with GRASS for details. -#-DBINARY_DIR= -#-DG_NAME= -#-DSRC_SCRIPT_FILE= -#-DOUTPUT_FILE= -#-DSOURCE_DIR= +#[[ +AUTHOR(S): Rashad Kanavath +PURPOSE: create translation strings for grass scripts + environment. TODO use custom_command POST_BUILD directly +COPYRIGHT: (C) 2020 by the GRASS Development Team + This program is free software under the GPL (>=v2) + Read the file COPYING that comes with GRASS for details. +-DBINARY_DIR= +-DG_NAME= +-DSRC_SCRIPT_FILE= +-DOUTPUT_FILE= +-DSOURCE_DIR= +#]] set(GISBASE ${BINARY_DIR}/gisbase) file(TO_NATIVE_PATH "${GISBASE}" GISBASE_NATIVE) @@ -31,7 +33,8 @@ endif() set(ENV{GISBASE} "${GISBASE_NATIVE}") set(ENV{GISRC} ${GISRC}) set(ENV{PATH} "${BINARY_DIR}${sep}${SCRIPTS_DIR}${env_path}") -set(ENV{PYTHONPATH} "${ETC_PYTHON_DIR}${sep}${GUI_WXPYTHON_DIR}${sep}$ENV{PYTHONPATH}") +set(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}") endif() @@ -47,9 +50,8 @@ endif() if(WIN32) set(PGM_NAME ${G_NAME}) - configure_file( - ${SOURCE_DIR}/cmake/windows_launch.bat.in - ${GISBASE}/scripts/${G_NAME}.bat @ONLY) + configure_file(${SOURCE_DIR}/cmake/windows_launch.bat.in + ${GISBASE}/scripts/${G_NAME}.bat @ONLY) endif(WIN32) set(TMP_SCRIPT_FILE ${BINARY_DIR}/CMakeFiles/${G_NAME}${SCRIPT_EXT}) @@ -58,13 +60,17 @@ file( COPY ${TMP_SCRIPT_FILE} DESTINATION ${GISBASE}/scripts/ FILE_PERMISSIONS - OWNER_READ OWNER_WRITE OWNER_EXECUTE - GROUP_READ GROUP_EXECUTE - WORLD_READ WORLD_EXECUTE) + OWNER_READ + OWNER_WRITE + OWNER_EXECUTE + GROUP_READ + GROUP_EXECUTE + WORLD_READ + WORLD_EXECUTE) - -execute_process(COMMAND - ${BINARY_DIR}/bin/g.parser -t ${GISBASE}/scripts/${G_NAME}${SCRIPT_EXT} +execute_process( + COMMAND ${BINARY_DIR}/bin/g.parser -t + ${GISBASE}/scripts/${G_NAME}${SCRIPT_EXT} OUTPUT_VARIABLE run_g_parser_OV ERROR_VARIABLE run_g_parser_EV RESULT_VARIABLE run_g_parser_RV) diff --git a/cmake/modules/build_gui_in_subdir.cmake b/cmake/modules/build_gui_in_subdir.cmake index 0a7a767cd57..cd3d268c9a0 100644 --- a/cmake/modules/build_gui_in_subdir.cmake +++ b/cmake/modules/build_gui_in_subdir.cmake @@ -1,8 +1,10 @@ -# AUTHOR(S): Rashad Kanavath -# PURPOSE: build_gui_in_subdir is the cmake function that builds g.gui.* modules -# COPYRIGHT: (C) 2020 by the GRASS Development Team -# This program is free software under the GPL (>=v2) -# Read the file COPYING that comes with GRASS for details. +#[[ +AUTHOR(S): Rashad Kanavath +PURPOSE: build_gui_in_subdir is the cmake function that builds g.gui.* modules +COPYRIGHT: (C) 2020 by the GRASS Development Team + This program is free software under the GPL (>=v2) + Read the file COPYING that comes with GRASS for details. +#]] function(build_gui_in_subdir dir_name) set(G_NAME ${dir_name}) @@ -18,50 +20,57 @@ function(build_gui_in_subdir dir_name) set(SRC_SCRIPT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/${G_NAME}/${G_TARGET_NAME}.py) - if (NOT EXISTS ${SRC_SCRIPT_FILE}) + 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") 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 ${GISBASE}/gui/wxpython/${G_NAME}/ - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PYTHON_FILES} ${GISBASE}/gui/wxpython/${G_NAME}/ + add_custom_command( + OUTPUT ${GUI_STAMP_FILE} + COMMAND ${CMAKE_COMMAND} -E make_directory + ${GISBASE}/gui/wxpython/${G_NAME}/ + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PYTHON_FILES} + ${GISBASE}/gui/wxpython/${G_NAME}/ COMMAND ${CMAKE_COMMAND} -E touch ${GUI_STAMP_FILE}) set(OUT_SCRIPT_FILE ${GISBASE}/scripts/${G_TARGET_NAME}${SCRIPT_EXT}) - ADD_CUSTOM_COMMAND(OUTPUT ${OUT_SCRIPT_FILE} - COMMAND ${CMAKE_COMMAND} - -DSOURCE_DIR=${CMAKE_SOURCE_DIR} - -DBINARY_DIR=${CMAKE_BINARY_DIR} - -DSRC_SCRIPT_FILE=${SRC_SCRIPT_FILE} - -DG_NAME=${G_TARGET_NAME} - -DGISBASE=${GISBASE} - -P ${CMAKE_SOURCE_DIR}/cmake/copy_g_gui_module.cmake + add_custom_command( + OUTPUT ${OUT_SCRIPT_FILE} + COMMAND + ${CMAKE_COMMAND} -DSOURCE_DIR=${CMAKE_SOURCE_DIR} + -DBINARY_DIR=${CMAKE_BINARY_DIR} -DSRC_SCRIPT_FILE=${SRC_SCRIPT_FILE} + -DG_NAME=${G_TARGET_NAME} -DGISBASE=${GISBASE} -P + ${CMAKE_SOURCE_DIR}/cmake/copy_g_gui_module.cmake DEPENDS g.parser ${SRC_SCRIPT_FILE}) - if(WITH_DOCS) - file(GLOB IMG_FILES ${G_SRC_DIR}/*.png ${G_SRC_DIR}/*.jpg) - set(copy_images_command ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_TARGET_NAME}) + file(GLOB IMG_FILES ${G_SRC_DIR}/*.png ${G_SRC_DIR}/*.jpg) + set(copy_images_command + ${CMAKE_COMMAND} -E touch + ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_TARGET_NAME}) if(IMG_FILES) - set(copy_images_command ${CMAKE_COMMAND} -E copy ${IMG_FILES} ${GISBASE}/docs/html/) + set(copy_images_command ${CMAKE_COMMAND} -E copy ${IMG_FILES} + ${GISBASE}/docs/html/) endif() set(HTML_FILE ${G_SRC_DIR}/${G_TARGET_NAME}.html) if(EXISTS ${HTML_FILE}) - install(FILES ${GISBASE}/docs/html/${G_TARGET_NAME}.html DESTINATION docs/html) + install(FILES ${GISBASE}/docs/html/${G_TARGET_NAME}.html + DESTINATION docs/html) 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 ${GISBASE}/scripts| ${G_TARGET_NAME}") + message( + FATAL_ERROR + "${html_file} does not exists. ${G_SRC_DIR} \n ${GISBASE}/scripts| ${G_TARGET_NAME}" + ) endif() endif() @@ -69,39 +78,46 @@ function(build_gui_in_subdir dir_name) set(OUT_HTML_FILE ${GISBASE}/docs/html/${G_TARGET_NAME}.html) set(GUI_HTML_FILE ${GISBASE}/docs/html/wxGUI.${G_NAME}.html) - ADD_CUSTOM_COMMAND(OUTPUT ${OUT_HTML_FILE} - COMMAND ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRC_DIR} - ${PYTHON_EXECUTABLE} ${G_TARGET_NAME}.py "--html-description" > ${TMP_HTML_FILE} - COMMAND ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRC_DIR} - ${PYTHON_EXECUTABLE} ${MKHTML_PY} ${G_TARGET_NAME} ${GRASS_VERSION_DATE} > ${OUT_HTML_FILE} - COMMENT "Creating ${OUT_HTML_FILE}" - COMMAND ${copy_images_command} - COMMAND ${CMAKE_COMMAND} -E remove ${TMP_HTML_FILE} - COMMAND ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRC_DIR} - ${PYTHON_EXECUTABLE} ${MKHTML_PY} ${G_TARGET_NAME} ${GRASS_VERSION_DATE} > ${GUI_HTML_FILE} - COMMENT "Creating ${GUI_HTML_FILE}" - DEPENDS ${OUT_SCRIPT_FILE} GUI_WXPYTHON LIB_PYTHON - ) - - install(FILES ${OUT_HTML_FILE} DESTINATION docs/html/) - - endif() #WITH_DOCS - - - ADD_CUSTOM_TARGET(${G_TARGET_NAME} - DEPENDS ${GUI_STAMP_FILE} ${OUT_SCRIPT_FILE} ${OUT_HTML_FILE}) - - - set(modules_list "${G_TARGET_NAME};${modules_list}" CACHE INTERNAL "list of modules") - - set_target_properties (${G_TARGET_NAME} PROPERTIES FOLDER gui) - + add_custom_command( + OUTPUT ${OUT_HTML_FILE} + COMMAND + ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRC_DIR} + ${PYTHON_EXECUTABLE} ${G_TARGET_NAME}.py "--html-description" > + ${TMP_HTML_FILE} + COMMAND + ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRC_DIR} + ${PYTHON_EXECUTABLE} ${MKHTML_PY} ${G_TARGET_NAME} ${GRASS_VERSION_DATE} + > ${OUT_HTML_FILE} + COMMENT "Creating ${OUT_HTML_FILE}" + COMMAND ${copy_images_command} + COMMAND ${CMAKE_COMMAND} -E remove ${TMP_HTML_FILE} + COMMAND + ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRC_DIR} + ${PYTHON_EXECUTABLE} ${MKHTML_PY} ${G_TARGET_NAME} ${GRASS_VERSION_DATE} + > ${GUI_HTML_FILE} + COMMENT "Creating ${GUI_HTML_FILE}" + DEPENDS ${OUT_SCRIPT_FILE} GUI_WXPYTHON LIB_PYTHON) + + install(FILES ${OUT_HTML_FILE} DESTINATION docs/html/) + + endif() # WITH_DOCS + + add_custom_target( + ${G_TARGET_NAME} DEPENDS ${GUI_STAMP_FILE} ${OUT_SCRIPT_FILE} + ${OUT_HTML_FILE}) + + set(modules_list + "${G_TARGET_NAME};${modules_list}" + CACHE INTERNAL "list of modules") + + set_target_properties(${G_TARGET_NAME} PROPERTIES FOLDER gui) if(WIN32) - install(PROGRAMS ${GISBASE}/scripts/${G_TARGET_NAME}.bat DESTINATION scripts) + install(PROGRAMS ${GISBASE}/scripts/${G_TARGET_NAME}.bat + DESTINATION scripts) endif() - install(PROGRAMS ${GISBASE}/scripts/${G_TARGET_NAME}${SCRIPT_EXT} DESTINATION scripts) - + install(PROGRAMS ${GISBASE}/scripts/${G_TARGET_NAME}${SCRIPT_EXT} + DESTINATION scripts) endfunction() diff --git a/cmake/modules/build_library_in_subdir.cmake b/cmake/modules/build_library_in_subdir.cmake index e49db0e8044..85bb924204e 100644 --- a/cmake/modules/build_library_in_subdir.cmake +++ b/cmake/modules/build_library_in_subdir.cmake @@ -1,16 +1,19 @@ -# AUTHOR(S): Rashad Kanavath -# PURPOSE: This is the macro to make grass libraries through build_module function. -# COPYRIGHT: (C) 2020 by the GRASS Development Team -# This program is free software under the GPL (>=v2) -# Read the file COPYING that comes with GRASS for details. +#[[ +AUTHOR(S): Rashad Kanavath +PURPOSE: This is the macro to make grass libraries through build_module function. +COPYRIGHT: (C) 2020 by the GRASS Development Team + This program is free software under the GPL (>=v2) + Read the file COPYING that comes with GRASS for details. +#]] macro(build_library_in_subdir dir_name) - set (extra_args ${ARGN}) - if ("NAME" IN_LIST extra_args) - build_module(SRCDIR ${CMAKE_CURRENT_SOURCE_DIR}/${dir_name} ${ARGN} ) + set(extra_args ${ARGN}) + if("NAME" IN_LIST extra_args) + build_module(SRCDIR ${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} SRCDIR ${CMAKE_CURRENT_SOURCE_DIR}/${dir_name} ${ARGN}) + # message("dir_name=${dir_name} |g_name= ${g_name}") + build_module(NAME grass_${g_name} SRCDIR + ${CMAKE_CURRENT_SOURCE_DIR}/${dir_name} ${ARGN}) endif() endmacro() diff --git a/cmake/modules/build_module.cmake b/cmake/modules/build_module.cmake index 0110a94b471..298a97f3b0d 100644 --- a/cmake/modules/build_module.cmake +++ b/cmake/modules/build_module.cmake @@ -1,30 +1,34 @@ - -# AUTHOR(S): Rashad Kanavath -# PURPOSE: This is the main function that builds all grass libraries (prefixed with grass_) -# and grass exeuctables. This cmake function is tailored to meet requirement of grass gnu make rules -# COPYRIGHT: (C) 2020 by the GRASS Development Team -# This program is free software under the GPL (>=v2) -# Read the file COPYING that comes with GRASS for details. +#[[ +AUTHOR(S): Rashad Kanavath +PURPOSE: This is the main function that builds all grass libraries (prefixed with grass_) + and grass exeuctables. This cmake function is tailored to meet requirement of grass + gnu make rules +COPYRIGHT: (C) 2020 by the GRASS Development Team + This program is free software under the GPL (>=v2) + Read the file COPYING that comes with GRASS for details. +#]] include(GenerateExportHeader) function(build_module) - cmake_parse_arguments(G + cmake_parse_arguments( + G "EXE" "NAME;SRCDIR;SRC_REGEX;RUNTIME_OUTPUT_DIR;PACKAGE;HTML_FILE_NAME" "SOURCES;INCLUDES;DEPENDS;OPTIONAL_DEPENDS;PRIMARY_DEPENDS;DEFS;HEADERS;TEST_SOURCES" - ${ARGN} ) + ${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}) - endif() + 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() if(NOT G_SRC_REGEX) @@ -34,18 +38,25 @@ function(build_module) if(NOT G_SRCDIR) set(G_SRCDIR ${CMAKE_CURRENT_SOURCE_DIR}) endif() - set(html_file "${G_SRCDIR}/${G_NAME}.html") + set(html_file "${G_SRCDIR}/${G_NAME}.html") foreach(G_HEADER ${G_HEADERS}) - if( EXISTS "${G_SRCDIR}/${G_HEADER}" ) - file(COPY ${G_SRCDIR}/${G_HEADER} DESTINATION "${CMAKE_BINARY_DIR}/include/grass") + if(EXISTS "${G_SRCDIR}/${G_HEADER}") + file(COPY ${G_SRCDIR}/${G_HEADER} + DESTINATION "${CMAKE_BINARY_DIR}/include/grass") else() - file(GLOB header_list_from_glob LIST_DIRECTORIES false "${G_SRCDIR}/${G_HEADER}") + file( + GLOB header_list_from_glob + LIST_DIRECTORIES false + "${G_SRCDIR}/${G_HEADER}") if(NOT header_list_from_glob) - message(FATAL_ERROR "MUST copy '${G_SRCDIR}/${G_HEADER}' to ${CMAKE_BINARY_DIR}/include/grass") + message( + FATAL_ERROR + "MUST copy '${G_SRCDIR}/${G_HEADER}' to ${CMAKE_BINARY_DIR}/include/grass" + ) endif() foreach(header_I ${header_list_from_glob}) - file(COPY ${header_I} DESTINATION "${CMAKE_BINARY_DIR}/include/grass") + file(COPY ${header_I} DESTINATION "${CMAKE_BINARY_DIR}/include/grass") endforeach() endif() endforeach() @@ -58,34 +69,36 @@ function(build_module) if(G_EXE) add_executable(${G_NAME} ${${G_NAME}_SRCS}) - if("${G_NAME}" MATCHES "^v.*") - set_target_properties (${G_NAME} PROPERTIES FOLDER vector) - elseif("${G_NAME}" MATCHES "^r.*") - set_target_properties (${G_NAME} PROPERTIES FOLDER raster) - else() - set_target_properties (${G_NAME} PROPERTIES FOLDER bin) - endif() + if("${G_NAME}" MATCHES "^v.*") + set_target_properties(${G_NAME} PROPERTIES FOLDER vector) + elseif("${G_NAME}" MATCHES "^r.*") + set_target_properties(${G_NAME} PROPERTIES FOLDER raster) + else() + set_target_properties(${G_NAME} PROPERTIES FOLDER bin) + 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") + 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() add_library(${G_NAME} ${${G_NAME}_SRCS}) - set_target_properties (${G_NAME} PROPERTIES FOLDER lib) - set_target_properties(${G_NAME} PROPERTIES OUTPUT_NAME ${G_NAME}.${GRASS_VERSION_NUMBER}) - set(export_file_name "${CMAKE_BINARY_DIR}/include/export/${G_NAME}_export.h") + set_target_properties(${G_NAME} PROPERTIES FOLDER lib) + set_target_properties( + ${G_NAME} PROPERTIES OUTPUT_NAME ${G_NAME}.${GRASS_VERSION_NUMBER}) + set(export_file_name + "${CMAKE_BINARY_DIR}/include/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}) + set(PGM_NAME ${default_html_file_name}) - generate_export_header(${G_NAME} - STATIC_DEFINE "STATIC_BUILD" - EXPORT_FILE_NAME ${export_file_name}) + generate_export_header(${G_NAME} STATIC_DEFINE "STATIC_BUILD" + EXPORT_FILE_NAME ${export_file_name}) endif() if(G_HTML_FILE_NAME) @@ -104,168 +117,179 @@ function(build_module) 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_SRCDIR}") - 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 ${${G_NAME}_INCLUDE_DIRS}) - 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") - else() - set(package_define "grasslibs") - 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() - endif() - target_link_libraries(${G_NAME} ${dep}) - endforeach() - - 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) - 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(RUN_HTML_DESCR FALSE) - endif() - - set(install_dest "") - if(NOT G_RUNTIME_OUTPUT_DIR) - if(G_EXE) - set(G_RUNTIME_OUTPUT_DIR "${GISBASE}/bin") - set(install_dest "bin") - else() - set(G_RUNTIME_OUTPUT_DIR "${GISBASE}/lib") - set(install_dest "lib") - endif() - else() - set(install_dest "${G_RUNTIME_OUTPUT_DIR}") - set(G_RUNTIME_OUTPUT_DIR "${GISBASE}/${install_dest}") - endif() - - # To use this property later in build_docs - set(PGM_EXT "") - if(WIN32) - if(G_EXE) - set(PGM_EXT ".exe") - endif() - endif() - - - if(WITH_DOCS) - - set(G_HTML_FILE_NAME "${HTML_FILE_NAME}.html") - - set(html_file ${G_SRCDIR}/${G_HTML_FILE_NAME}) - set(HTML_FILE) - set(no_docs_list "grass_sqlp;echo;clean_temp;lock;run") - - if(EXISTS ${html_file}) - set(HTML_FILE ${html_file}) - install(FILES ${GISBASE}/docs/html/${G_HTML_FILE_NAME} DESTINATION docs/html) + 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_SRCDIR}") + 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 ${${G_NAME}_INCLUDE_DIRS}) + 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") + else() + set(package_define "grasslibs") + endif() else() - file(GLOB html_files ${G_SRCDIR}/*.html) - if(html_files) - if(NOT ${target_name} IN_LIST no_docs_list) - message(FATAL_ERROR "${html_file} does not exists. ${G_SRCDIR} \n ${G_RUNTIME_OUTPUT_DIR} | ${target_name}") + 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() endif() + target_link_libraries(${G_NAME} ${dep}) + endforeach() + + 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) + 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(RUN_HTML_DESCR FALSE) endif() + set(install_dest "") + if(NOT G_RUNTIME_OUTPUT_DIR) + if(G_EXE) + set(G_RUNTIME_OUTPUT_DIR "${GISBASE}/bin") + set(install_dest "bin") + else() + set(G_RUNTIME_OUTPUT_DIR "${GISBASE}/lib") + set(install_dest "lib") + endif() + else() + set(install_dest "${G_RUNTIME_OUTPUT_DIR}") + set(G_RUNTIME_OUTPUT_DIR "${GISBASE}/${install_dest}") + endif() - if(NOT HTML_FILE) - add_custom_command(TARGET ${G_NAME} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy $ ${G_RUNTIME_OUTPUT_DIR} - ) - return() + # To use this property later in build_docs + set(PGM_EXT "") + if(WIN32) + if(G_EXE) + set(PGM_EXT ".exe") + endif() endif() -##message("HTML_FILE=${HTML_FILE}") - -get_filename_component(HTML_FILE_NAME ${HTML_FILE} NAME) -get_filename_component(PGM_SOURCE_DIR ${HTML_FILE} PATH) - -string(REPLACE ".html" "" PGM_NAME "${HTML_FILE_NAME}" ) -string(REPLACE ".html" ".tmp.html" TMP_HTML_NAME ${HTML_FILE_NAME}) -set(TMP_HTML_FILE ${G_SRCDIR}/${TMP_HTML_NAME}) -set(OUT_HTML_FILE ${GISBASE}/docs/html/${HTML_FILE_NAME}) - -set(PGM_EXT "") -if(WIN32) - set(PGM_EXT ".exe") -endif() - -set(html_descr_argument "--html-description") -if(RUN_HTML_DESCR) -set(html_descr_command ${G_NAME}${PGM_EXT} "--html-description") -else() - set(html_descr_command ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_NAME}) -endif() - -file(GLOB IMG_FILES ${G_SRCDIR}/*.png ${G_SRCDIR}/*.jpg) -set(copy_images_command ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_NAME}) -if(IMG_FILES) - set(copy_images_command ${CMAKE_COMMAND} -E copy ${IMG_FILES} ${GISBASE}/docs/html/) -endif() - -add_custom_command(TARGET ${G_NAME} POST_BUILD - COMMAND ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRCDIR} - ${html_descr_command} > ${TMP_HTML_FILE} - COMMAND ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRCDIR} - ${PYTHON_EXECUTABLE} ${MKHTML_PY} ${PGM_NAME} > ${OUT_HTML_FILE} - COMMAND ${CMAKE_COMMAND} -E copy $ ${G_RUNTIME_OUTPUT_DIR} - COMMAND ${copy_images_command} - COMMAND ${CMAKE_COMMAND} -E remove ${TMP_HTML_FILE} - COMMENT "Creating ${OUT_HTML_FILE}") - -endif() # WITH_DOCS - -foreach(test_SOURCE ${G_TEST_SOURCES}) - add_test(NAME ${G_NAME}-test - COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} - ${G_SRCDIR}/testsuite/${test_SOURCE}) - message("[build_module] ADDING TEST ${G_NAME}-test") -endforeach() - - install(TARGETS ${G_NAME} DESTINATION ${install_dest}) + + if(WITH_DOCS) + + set(G_HTML_FILE_NAME "${HTML_FILE_NAME}.html") + + set(html_file ${G_SRCDIR}/${G_HTML_FILE_NAME}) + set(HTML_FILE) + set(no_docs_list "grass_sqlp;echo;clean_temp;lock;run") + + if(EXISTS ${html_file}) + set(HTML_FILE ${html_file}) + install(FILES ${GISBASE}/docs/html/${G_HTML_FILE_NAME} + DESTINATION docs/html) + else() + file(GLOB html_files ${G_SRCDIR}/*.html) + if(html_files) + if(NOT ${target_name} IN_LIST no_docs_list) + message( + FATAL_ERROR + "${html_file} does not exists. ${G_SRCDIR} \n ${G_RUNTIME_OUTPUT_DIR} | ${target_name}" + ) + endif() + endif() + endif() + + if(NOT HTML_FILE) + add_custom_command( + TARGET ${G_NAME} + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy $ + ${G_RUNTIME_OUTPUT_DIR}) + return() + endif() + # message("HTML_FILE=${HTML_FILE}") + + get_filename_component(HTML_FILE_NAME ${HTML_FILE} NAME) + get_filename_component(PGM_SOURCE_DIR ${HTML_FILE} PATH) + + string(REPLACE ".html" "" PGM_NAME "${HTML_FILE_NAME}") + string(REPLACE ".html" ".tmp.html" TMP_HTML_NAME ${HTML_FILE_NAME}) + set(TMP_HTML_FILE ${G_SRCDIR}/${TMP_HTML_NAME}) + set(OUT_HTML_FILE ${GISBASE}/docs/html/${HTML_FILE_NAME}) + + set(PGM_EXT "") + if(WIN32) + set(PGM_EXT ".exe") + endif() + + set(html_descr_argument "--html-description") + if(RUN_HTML_DESCR) + set(html_descr_command ${G_NAME}${PGM_EXT} "--html-description") + else() + set(html_descr_command ${CMAKE_COMMAND} -E touch + ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_NAME}) + endif() + + file(GLOB IMG_FILES ${G_SRCDIR}/*.png ${G_SRCDIR}/*.jpg) + set(copy_images_command ${CMAKE_COMMAND} -E touch + ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_NAME}) + if(IMG_FILES) + set(copy_images_command ${CMAKE_COMMAND} -E copy ${IMG_FILES} + ${GISBASE}/docs/html/) + endif() + + add_custom_command( + TARGET ${G_NAME} + POST_BUILD + COMMAND ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRCDIR} + ${html_descr_command} > ${TMP_HTML_FILE} + COMMAND ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRCDIR} + ${PYTHON_EXECUTABLE} ${MKHTML_PY} ${PGM_NAME} > ${OUT_HTML_FILE} + COMMAND ${CMAKE_COMMAND} -E copy $ + ${G_RUNTIME_OUTPUT_DIR} + COMMAND ${copy_images_command} + COMMAND ${CMAKE_COMMAND} -E remove ${TMP_HTML_FILE} + COMMENT "Creating ${OUT_HTML_FILE}") + + endif() # WITH_DOCS + + foreach(test_SOURCE ${G_TEST_SOURCES}) + add_test(NAME ${G_NAME}-test + COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} + ${G_SRCDIR}/testsuite/${test_SOURCE}) + message("[build_module] ADDING TEST ${G_NAME}-test") + endforeach() + + install(TARGETS ${G_NAME} DESTINATION ${install_dest}) endfunction() diff --git a/cmake/modules/build_program.cmake b/cmake/modules/build_program.cmake index cdd25a03549..69ea000337e 100644 --- a/cmake/modules/build_program.cmake +++ b/cmake/modules/build_program.cmake @@ -1,8 +1,11 @@ -# AUTHOR(S): Rashad Kanavath -# PURPOSE: Shortcut macro to call build_module with EXE argument set -# COPYRIGHT: (C) 2020 by the GRASS Development Team -# This program is free software under the GPL (>=v2) -# Read the file COPYING that comes with GRASS for details. +#[[ +AUTHOR(S): Rashad Kanavath +PURPOSE: Shortcut macro to call build_module with EXE argument set +COPYRIGHT: (C) 2020 by the GRASS Development Team + This program is free software under the GPL (>=v2) + Read the file COPYING that comes with GRASS for details. +#]] + macro(build_program) build_module(${ARGN} EXE) endmacro() diff --git a/cmake/modules/build_program_in_subdir.cmake b/cmake/modules/build_program_in_subdir.cmake index e8197e56b8b..0de14a08a4b 100644 --- a/cmake/modules/build_program_in_subdir.cmake +++ b/cmake/modules/build_program_in_subdir.cmake @@ -1,17 +1,20 @@ -# AUTHOR(S): Rashad Kanavath -# PURPOSE: CMake macro to build a grass executable (program) under sub directory -# which is passed as argument to macro -# COPYRIGHT: (C) 2020 by the GRASS Development Team -# This program is free software under the GPL (>=v2) -# Read the file COPYING that comes with GRASS for details. +#[[ +AUTHOR(S): Rashad Kanavath +PURPOSE: CMake macro to build a grass executable (program) under sub directory + which is passed as argument to macro +COPYRIGHT: (C) 2020 by the GRASS Development Team + This program is free software under the GPL (>=v2) + Read the file COPYING that comes with GRASS for details. +#]] 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(SRCDIR ${CMAKE_CURRENT_SOURCE_DIR}/${dir_name} ${ARGN} ) + set(extra_args ${ARGN}) + if("NAME" IN_LIST extra_args) + # message("dir_name=${dir_name} ${extra_args}") + build_program(SRCDIR ${CMAKE_CURRENT_SOURCE_DIR}/${dir_name} ${ARGN}) else() get_filename_component(pgm_name ${dir_name} NAME) - build_program(NAME ${pgm_name} SRCDIR ${CMAKE_CURRENT_SOURCE_DIR}/${dir_name} ${ARGN} ) + build_program(NAME ${pgm_name} SRCDIR + ${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 07c85897e61..d9b4ccfa02b 100644 --- a/cmake/modules/build_script_in_subdir.cmake +++ b/cmake/modules/build_script_in_subdir.cmake @@ -1,11 +1,13 @@ -# AUTHOR(S): Rashad Kanavath -# PURPOSE: A CMake function that builds grass python script modules -# COPYRIGHT: (C) 2020 by the GRASS Development Team -# This program is free software under the GPL (>=v2) -# Read the file COPYING that comes with GRASS for details. +#[[ +AUTHOR(S): Rashad Kanavath +PURPOSE: A CMake function that builds grass python script modules +COPYRIGHT: (C) 2020 by the GRASS Development Team + This program is free software under the GPL (>=v2) + Read the file COPYING that comes with GRASS for details. +#]] function(build_script_in_subdir dir_name) - #build_py_module(NAME ${dir_name}) + # build_py_module(NAME ${dir_name}) set(G_NAME ${dir_name}) set(G_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${G_NAME}) @@ -15,83 +17,90 @@ function(build_script_in_subdir dir_name) 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}) + 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() set(TRANSLATE_C_FILE - ${CMAKE_SOURCE_DIR}/locale/scriptstrings/${G_NAME}_to_translate.c) - - ADD_CUSTOM_COMMAND(OUTPUT ${TRANSLATE_C_FILE} - COMMAND ${CMAKE_COMMAND} - -DBINARY_DIR=${CMAKE_BINARY_DIR} - -DG_NAME=${G_NAME} - -DSRC_SCRIPT_FILE=${SRC_SCRIPT_FILE} - -DSOURCE_DIR=${CMAKE_SOURCE_DIR} - -DOUTPUT_FILE=${TRANSLATE_C_FILE} - -P ${CMAKE_SOURCE_DIR}/cmake/locale_strings.cmake + ${CMAKE_SOURCE_DIR}/locale/scriptstrings/${G_NAME}_to_translate.c) + + add_custom_command( + OUTPUT ${TRANSLATE_C_FILE} + COMMAND + ${CMAKE_COMMAND} -DBINARY_DIR=${CMAKE_BINARY_DIR} -DG_NAME=${G_NAME} + -DSRC_SCRIPT_FILE=${SRC_SCRIPT_FILE} -DSOURCE_DIR=${CMAKE_SOURCE_DIR} + -DOUTPUT_FILE=${TRANSLATE_C_FILE} -P + ${CMAKE_SOURCE_DIR}/cmake/locale_strings.cmake DEPENDS g.parser) - set(HTML_FILE_NAME ${G_NAME}) - set(OUT_HTML_FILE "") - - if(WITH_DOCS) - - file(GLOB IMG_FILES ${G_SRC_DIR}/*.png ${G_SRC_DIR}/*.jpg) - set(copy_images_command ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_NAME}) - if(IMG_FILES) - set(copy_images_command ${CMAKE_COMMAND} -E copy ${IMG_FILES} ${GISBASE}/docs/html/) - endif() - - set(HTML_FILE ${G_SRC_DIR}/${G_NAME}.html) - if(EXISTS ${HTML_FILE}) - install(FILES ${GISBASE}/docs/html/${G_NAME}.html DESTINATION docs/html) - 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 ${GISBASE}/scripts| ${G_NAME}") - endif() - endif() - - set(TMP_HTML_FILE ${G_SRC_DIR}/${G_NAME}.tmp.html) - set(OUT_HTML_FILE ${GISBASE}/docs/html/${G_NAME}.html) - - - ADD_CUSTOM_COMMAND(OUTPUT ${OUT_HTML_FILE} - COMMAND ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRC_DIR} - ${PYTHON_EXECUTABLE} ${G_NAME}.py "--html-description" > ${TMP_HTML_FILE} - COMMAND ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRC_DIR} - ${PYTHON_EXECUTABLE} ${MKHTML_PY} ${G_NAME} > ${OUT_HTML_FILE} - COMMAND ${copy_images_command} - COMMAND ${CMAKE_COMMAND} -E remove ${TMP_HTML_FILE} - COMMENT "Creating ${OUT_HTML_FILE}" - DEPENDS ${TRANSLATE_C_FILE} LIB_PYTHON) + set(HTML_FILE_NAME ${G_NAME}) + set(OUT_HTML_FILE "") + + if(WITH_DOCS) + + file(GLOB IMG_FILES ${G_SRC_DIR}/*.png ${G_SRC_DIR}/*.jpg) + set(copy_images_command ${CMAKE_COMMAND} -E touch + ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_NAME}) + if(IMG_FILES) + set(copy_images_command ${CMAKE_COMMAND} -E copy ${IMG_FILES} + ${GISBASE}/docs/html/) + endif() + + set(HTML_FILE ${G_SRC_DIR}/${G_NAME}.html) + if(EXISTS ${HTML_FILE}) + install(FILES ${GISBASE}/docs/html/${G_NAME}.html DESTINATION docs/html) + 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 ${GISBASE}/scripts| ${G_NAME}" + ) + endif() + endif() + + set(TMP_HTML_FILE ${G_SRC_DIR}/${G_NAME}.tmp.html) + set(OUT_HTML_FILE ${GISBASE}/docs/html/${G_NAME}.html) + + add_custom_command( + OUTPUT ${OUT_HTML_FILE} + COMMAND + ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRC_DIR} + ${PYTHON_EXECUTABLE} ${G_NAME}.py "--html-description" > + ${TMP_HTML_FILE} + COMMAND ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRC_DIR} + ${PYTHON_EXECUTABLE} ${MKHTML_PY} ${G_NAME} > ${OUT_HTML_FILE} + COMMAND ${copy_images_command} + COMMAND ${CMAKE_COMMAND} -E remove ${TMP_HTML_FILE} + COMMENT "Creating ${OUT_HTML_FILE}" + DEPENDS ${TRANSLATE_C_FILE} LIB_PYTHON) + + install(FILES ${OUT_HTML_FILE} DESTINATION docs/html/) + + 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") + + set_target_properties(${G_NAME} PROPERTIES FOLDER scripts) - install(FILES ${OUT_HTML_FILE} DESTINATION docs/html/) - - 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") - - set_target_properties (${G_NAME} PROPERTIES FOLDER scripts) - - if(WIN32) - install(PROGRAMS ${GISBASE}/scripts/${G_NAME}.bat DESTINATION scripts) - endif() + if(WIN32) + install(PROGRAMS ${GISBASE}/scripts/${G_NAME}.bat DESTINATION scripts) + endif() - install(PROGRAMS ${GISBASE}/scripts/${G_NAME}${SCRIPT_EXT} DESTINATION scripts) + install(PROGRAMS ${GISBASE}/scripts/${G_NAME}${SCRIPT_EXT} + DESTINATION scripts) endfunction() diff --git a/cmake/modules/check_target.cmake b/cmake/modules/check_target.cmake index ca6d3f855ef..79e79138676 100644 --- a/cmake/modules/check_target.cmake +++ b/cmake/modules/check_target.cmake @@ -1,7 +1,7 @@ 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 62cee3f5816..1f31dd5b04d 100644 --- a/cmake/modules/copy_python_files_in_subdir.cmake +++ b/cmake/modules/copy_python_files_in_subdir.cmake @@ -1,15 +1,21 @@ -# AUTHOR(S): Rashad Kanavath -# PURPOSE: Simply copy python file in given subdirectory -# Destination will be relative to GISBASE directory set in root CMakeLists.txt -# COPYRIGHT: (C) 2020 by the GRASS Development Team -# This program is free software under the GPL (>=v2) -# Read the file COPYING that comes with GRASS for details. +#[[ +AUTHOR(S): Rashad Kanavath +PURPOSE: Simply copy python file in given subdirectory + Destination will be relative to GISBASE directory set in root + CMakeLists.txt +COPYRIGHT: (C) 2020 by the GRASS Development Team + This program is free software under the GPL (>=v2) + Read the file COPYING that comes with GRASS for details. +#]] + function(copy_python_files_in_subdir dir_name dst_prefix) -file(GLOB PY_FILES "${CMAKE_CURRENT_SOURCE_DIR}/${dir_name}/*.py") + file(GLOB PY_FILES "${CMAKE_CURRENT_SOURCE_DIR}/${dir_name}/*.py") string(REPLACE "/" "_" targ_name ${dir_name}) -add_custom_target(python_${targ_name} - COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/${dst_prefix}/${dir_name}/ - COMMAND ${CMAKE_COMMAND} -E copy ${PY_FILES} ${GISBASE}/${dst_prefix}/${dir_name}/ - ) - set_target_properties (python_${targ_name} PROPERTIES FOLDER lib/python) + add_custom_target( + python_${targ_name} + COMMAND ${CMAKE_COMMAND} -E make_directory + ${GISBASE}/${dst_prefix}/${dir_name}/ + COMMAND ${CMAKE_COMMAND} -E copy ${PY_FILES} + ${GISBASE}/${dst_prefix}/${dir_name}/) + set_target_properties(python_${targ_name} PROPERTIES FOLDER lib/python) endfunction() diff --git a/cmake/modules/get_host_arch.cmake b/cmake/modules/get_host_arch.cmake index 52a1fe21c6b..a7b3e632886 100644 --- a/cmake/modules/get_host_arch.cmake +++ b/cmake/modules/get_host_arch.cmake @@ -1,28 +1,31 @@ -# AUTHOR(S): Rashad Kanavath -# PURPOSE: Get host system architecuture -# COPYRIGHT: (C) 2020 by the GRASS Development Team -# This program is free software under the GPL (>=v2) -# Read the file COPYING that comes with GRASS for details. +#[[ +AUTHOR(S): Rashad Kanavath +PURPOSE: Get host system architecuture +COPYRIGHT: (C) 2020 by the GRASS Development Team + This program is free software under the GPL (>=v2) + Read the file COPYING that comes with GRASS for details. +#]] + 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) + 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") + else() + set(${host_arch_value} "x86_64") endif() elseif(MINGW) - else() + + else() message(FATAL_ERROR "compiler/platform is not supported") endif() # if(MSVC) @@ -35,5 +38,7 @@ function(get_host_arch var_arch) set(${host_arch_value} "${ov}") endif() - set(${var_arch} ${host_arch_value} PARENT_SCOPE) + set(${var_arch} + ${host_arch_value} + PARENT_SCOPE) endfunction() diff --git a/cmake/modules/get_versions.cmake b/cmake/modules/get_versions.cmake index 2bc7563ec3b..e99fd36eae5 100644 --- a/cmake/modules/get_versions.cmake +++ b/cmake/modules/get_versions.cmake @@ -1,34 +1,44 @@ -# AUTHOR(S): Rashad Kanavath -# PURPOSE: Read major, minor patch, date from given version file -# COPYRIGHT: (C) 2020 by the GRASS Development Team -# This program is free software under the GPL (>=v2) -# Read the file COPYING that comes with GRASS for details. -function(get_versions file_path var_major var_minor var_release var_date) +#[[ +AUTHOR(S): Rashad Kanavath +PURPOSE: Read major, minor patch, date from given version file +COPYRIGHT: (C) 2020 by the GRASS Development Team + This program is free software under the GPL (>=v2) + Read the file COPYING that comes with GRASS for details. +#]] -set(version_major 0) -set(version_minor 0) -set(version_release 0) -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_date) + set(version_major 0) + set(version_minor 0) + set(version_release 0) + 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) -endif() + if(grass_version_file_length GREATER 2) + list(GET grass_version_strings 2 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_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_date} + ${version_date} + PARENT_SCOPE) endfunction() diff --git a/cmake/modules/linker.cmake b/cmake/modules/linker.cmake index 7e093ae241a..a94f0e11f77 100644 --- a/cmake/modules/linker.cmake +++ b/cmake/modules/linker.cmake @@ -1,38 +1,48 @@ macro(set_alternate_linker linker) - if( NOT "${USE_ALTERNATE_LINKER}" STREQUAL "${USE_ALTERNATE_LINKER_OLD_CACHED}" ) + 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}) + 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) + 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. + 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") + if(EXISTS "${_dir}/libexec/mold/ld") + add_link_options(-B "${_dir}/libexec/mold") else() - message(FATAL_ERROR "Cannot find ${_dir}/libexec/mold/ld") + 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() - message(FATAL_ERROR "Cannot find alternative linker ${USE_ALTERNATE_LINKER}") + 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 "Use alternate linker. Leave empty for system default; potential alternatives are 'gold', 'lld', 'bfd', 'mold'") +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() diff --git a/cmake/modules/repo_status.cmake b/cmake/modules/repo_status.cmake index 7937f688860..43a22173b3c 100644 --- a/cmake/modules/repo_status.cmake +++ b/cmake/modules/repo_status.cmake @@ -1,36 +1,39 @@ -# AUTHOR(S): Rashad Kanavath -# PURPOSE: Read git status of grass repository if building from git clone -# COPYRIGHT: (C) 2020 by the GRASS Development Team -# This program is free software under the GPL (>=v2) -# Read the file COPYING that comes with GRASS for details. -function(repo_status repo_dir version_git_var) +#[[ +AUTHOR(S): Rashad Kanavath +PURPOSE: Read git status of grass repository if building from git clone +COPYRIGHT: (C) 2020 by the GRASS Development Team + This program is free software under the GPL (>=v2) + Read the file COPYING that comes with GRASS for details. +#]] -if(NOT EXISTS "${repo_dir}/.git") - message(STATUS ".git directory not found. GRASS_VERSION_GIT is set to 'exported'") - set(GRASS_VERSION_GIT "exported") - return() -endif() -find_package(Git) -if(NOT GIT_FOUND) - message(WARNING "git not found. GRASS_VERSION_GIT is set to 'exported'") - set(GRASS_VERSION_GIT "exported") - return() -endif() +function(repo_status repo_dir version_git_var) + if(NOT EXISTS "${repo_dir}/.git") + message( + STATUS ".git directory not found. GRASS_VERSION_GIT is set to 'exported'") + set(GRASS_VERSION_GIT "exported") + return() + endif() + find_package(Git) + if(NOT GIT_FOUND) + message(WARNING "git not found. GRASS_VERSION_GIT is set to 'exported'") + set(GRASS_VERSION_GIT "exported") + return() + endif() -execute_process( + 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 - ) + ERROR_VARIABLE git_rev_EV + RESULT_VARIABLE git_rev_RV) - if(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) endif() - set(${version_git_var} "${GRASS_VERSION_GIT}" PARENT_SCOPE) - -endfunction() #repo_status + set(${version_git_var} + "${GRASS_VERSION_GIT}" + PARENT_SCOPE) +endfunction() diff --git a/cmake/modules/set_compiler_flags.cmake b/cmake/modules/set_compiler_flags.cmake index 3f40238f325..986b405dd2d 100644 --- a/cmake/modules/set_compiler_flags.cmake +++ b/cmake/modules/set_compiler_flags.cmake @@ -1,13 +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() + 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}") + 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 999a28566fb..6693c411aa3 100644 --- a/db/CMakeLists.txt +++ b/db/CMakeLists.txt @@ -1,4 +1,3 @@ - set(db_drivers grass_gis) add_subdirectory(drivers) @@ -38,4 +37,4 @@ add_dependencies(db.select ${db_drivers}) build_program_in_subdir(db.tables DEPENDS grass_dbmiclient) add_dependencies(db.tables ${db_drivers}) -#TODO: PGM = databaseintro +# TODO: PGM = databaseintro diff --git a/db/drivers/CMakeLists.txt b/db/drivers/CMakeLists.txt index 22ddb1dfa52..d9dbd1ef466 100644 --- a/db/drivers/CMakeLists.txt +++ b/db/drivers/CMakeLists.txt @@ -1,67 +1,119 @@ -set(dbf_SRCS dbf/column.c dbf/create_table.c - dbf/cursor.c dbf/db.c dbf/dbfexe.c dbf/describe.c - dbf/driver.c dbf/error.c dbf/execute.c dbf/fetch.c - dbf/listtab.c dbf/main.c dbf/select.c dbf/str.c dbf/table.c) +set(dbf_SRCS + dbf/column.c + dbf/create_table.c + dbf/cursor.c + dbf/db.c + dbf/dbfexe.c + dbf/describe.c + dbf/driver.c + dbf/error.c + dbf/execute.c + dbf/fetch.c + dbf/listtab.c + dbf/main.c + dbf/select.c + dbf/str.c + dbf/table.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 - SOURCES ${dbf_SRCS} - DEPENDS grass_gis grass_dbmidriver grass_shape grass_sqlp - DEFS "${grass_dbstubs_DEFS}" - HTML_FILE_NAME grass-dbf - RUNTIME_OUTPUT_DIR "driver/db/") +build_program_in_subdir( + dbf + SOURCES + ${dbf_SRCS} + DEPENDS + grass_gis + grass_dbmidriver + grass_shape + grass_sqlp + DEFS + "${grass_dbstubs_DEFS}" + HTML_FILE_NAME + grass-dbf + RUNTIME_OUTPUT_DIR + "driver/db/") list(APPEND db_drivers dbf) -build_program_in_subdir(ogr - DEPENDS grass_gis grass_dbmidriver grass_sqlp GDAL - DEFS "${grass_dbstubs_DEFS}" - HTML_FILE_NAME grass-ogr - RUNTIME_OUTPUT_DIR "driver/db/") +build_program_in_subdir( + ogr + DEPENDS + grass_gis + grass_dbmidriver + grass_sqlp + GDAL + DEFS + "${grass_dbstubs_DEFS}" + HTML_FILE_NAME + grass-ogr + RUNTIME_OUTPUT_DIR + "driver/db/") list(APPEND db_drivers ogr) -build_program_in_subdir(odbc - DEPENDS grass_gis grass_dbmidriver grass_sqlp - DEFS "${grass_dbstubs_DEFS}" - PRIMARY_DEPENDS ODBC - HTML_FILE_NAME grass-odbc - RUNTIME_OUTPUT_DIR "driver/db/") +build_program_in_subdir( + odbc + DEPENDS + grass_gis + grass_dbmidriver + grass_sqlp + DEFS + "${grass_dbstubs_DEFS}" + PRIMARY_DEPENDS + ODBC + HTML_FILE_NAME + grass-odbc + RUNTIME_OUTPUT_DIR + "driver/db/") if(TARGET ODBC) list(APPEND db_drivers odbc) endif() -build_program_in_subdir(sqlite - DEPENDS grass_gis grass_dbmidriver grass_sqlp - DEFS "${grass_dbstubs_DEFS}" - PRIMARY_DEPENDS SQLITE - HTML_FILE_NAME grass-sqlite - RUNTIME_OUTPUT_DIR "driver/db/") +build_program_in_subdir( + sqlite + DEPENDS + grass_gis + grass_dbmidriver + grass_sqlp + DEFS + "${grass_dbstubs_DEFS}" + PRIMARY_DEPENDS + SQLITE + HTML_FILE_NAME + grass-sqlite + RUNTIME_OUTPUT_DIR + "driver/db/") if(TARGET SQLITE) list(APPEND db_drivers sqlite) endif() -build_program_in_subdir(postgres - DEPENDS grass_gis grass_dbmidriver grass_sqlp - DEFS "${grass_dbstubs_DEFS}" - PRIMARY_DEPENDS POSTGRES - HTML_FILE_NAME grass-pg - RUNTIME_OUTPUT_DIR "driver/db/") +build_program_in_subdir( + postgres + DEPENDS + grass_gis + grass_dbmidriver + grass_sqlp + DEFS + "${grass_dbstubs_DEFS}" + PRIMARY_DEPENDS + POSTGRES + HTML_FILE_NAME + grass-pg + RUNTIME_OUTPUT_DIR + "driver/db/") if(TARGET POSTGRES) list(APPEND db_drivers postgres) endif() - if(MYSQL_LIB) - ##add_subdirectory(mysql) - #list(APPEND db_drivers "mysql") + # add_subdirectory(mysql) list(APPEND db_drivers "mysql") endif() - -set(db_drivers ${db_drivers} PARENT_SCOPE) +set(db_drivers + ${db_drivers} + PARENT_SCOPE) diff --git a/display/CMakeLists.txt b/display/CMakeLists.txt index 5263be47ec6..a98aac2e189 100644 --- a/display/CMakeLists.txt +++ b/display/CMakeLists.txt @@ -1,16 +1,17 @@ -build_program_in_subdir(d.barscale DEPENDS grass_sym grass_display grass_gis ) +build_program_in_subdir(d.barscale DEPENDS grass_sym grass_display grass_gis) build_program_in_subdir(d.colorlist DEPENDS grass_gis grass_display) build_program_in_subdir(d.colortable DEPENDS grass_gis grass_display) 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 + # libgen.h does not exists on windows msvc build_program_in_subdir(d.mon DEPENDS grass_gis grass_display) 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_sym grass_display) -build_program_in_subdir(d.grid DEPENDS grass_gis grass_sym grass_gproj grass_display) +build_program_in_subdir(d.grid DEPENDS grass_gis grass_sym grass_gproj + grass_display) build_program_in_subdir(d.his DEPENDS grass_gis grass_display) build_program_in_subdir(d.histogram DEPENDS grass_gis grass_display) build_program_in_subdir(d.info DEPENDS grass_gis grass_display) @@ -22,13 +23,23 @@ build_program_in_subdir(d.northarrow DEPENDS grass_gis grass_display grass_sym) build_program_in_subdir(d.path DEPENDS grass_gis grass_display grass_vector) build_program_in_subdir(d.profile DEPENDS grass_gis grass_display) 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) +build_program_in_subdir(d.rast.arrow DEPENDS grass_gis grass_raster + grass_display) build_program_in_subdir(d.rast.num DEPENDS grass_gis grass_display grass_raster) build_program_in_subdir(d.rgb DEPENDS grass_gis grass_display grass_raster) build_program_in_subdir(d.rhumbline DEPENDS grass_gis grass_display) build_program_in_subdir(d.text DEPENDS grass_gis grass_display) build_program_in_subdir(d.title DEPENDS grass_gis grass_display) -build_program_in_subdir(d.vect DEPENDS grass_gis grass_display grass_vector grass_sym) -build_program_in_subdir(d.vect.chart DEPENDS grass_gis grass_display grass_vector grass_sym) -build_program_in_subdir(d.vect.thematic DEPENDS grass_gis grass_display grass_vector grass_sym grass_arraystats) +build_program_in_subdir(d.vect DEPENDS grass_gis grass_display grass_vector + grass_sym) +build_program_in_subdir(d.vect.chart DEPENDS grass_gis grass_display + grass_vector grass_sym) +build_program_in_subdir( + d.vect.thematic + DEPENDS + grass_gis + grass_display + grass_vector + grass_sym + grass_arraystats) build_program_in_subdir(d.where DEPENDS grass_gis grass_display grass_gproj) diff --git a/general/CMakeLists.txt b/general/CMakeLists.txt index eed2ce08243..9797e6d540b 100644 --- a/general/CMakeLists.txt +++ b/general/CMakeLists.txt @@ -1,37 +1,49 @@ - -build_program_in_subdir(g.access DEPENDS grass_gis ) -build_program_in_subdir(g.copy DEPENDS grass_manage ) -build_program_in_subdir(g.dirseps DEPENDS grass_gis ) -build_program_in_subdir(g.filename DEPENDS grass_gis ) -build_program_in_subdir(g.findetc DEPENDS grass_gis ) -build_program_in_subdir(g.findfile DEPENDS grass_manage ) -build_program_in_subdir(g.gisenv DEPENDS grass_gis ) -build_program_in_subdir(g.mapset DEPENDS grass_gis ) -build_program_in_subdir(g.mapsets DEPENDS grass_gis ) -build_program_in_subdir(g.message DEPENDS grass_gis ) -build_program_in_subdir(g.mkfontcap DEPENDS grass_gis FREETYPE ) +build_program_in_subdir(g.access DEPENDS grass_gis) +build_program_in_subdir(g.copy DEPENDS grass_manage) +build_program_in_subdir(g.dirseps DEPENDS grass_gis) +build_program_in_subdir(g.filename DEPENDS grass_gis) +build_program_in_subdir(g.findetc DEPENDS grass_gis) +build_program_in_subdir(g.findfile DEPENDS grass_manage) +build_program_in_subdir(g.gisenv DEPENDS grass_gis) +build_program_in_subdir(g.mapset DEPENDS grass_gis) +build_program_in_subdir(g.mapsets DEPENDS grass_gis) +build_program_in_subdir(g.message DEPENDS grass_gis) +build_program_in_subdir(g.mkfontcap DEPENDS grass_gis FREETYPE) build_program_in_subdir(g.parser DEPENDS grass_gis FREETYPE) -build_program_in_subdir(g.pnmcomp DEPENDS grass_gis ) +build_program_in_subdir(g.pnmcomp DEPENDS grass_gis) build_program_in_subdir(g.ppmtopng DEPENDS grass_gis LIBPNG) -build_program_in_subdir(g.proj DEPENDS grass_gis grass_gproj GDAL ) -build_program_in_subdir(g.region DEPENDS grass_gis grass_gproj - grass_vector grass_raster3d grass_gmath) - -build_program_in_subdir(g.rename DEPENDS grass_manage grass_raster ) -build_program_in_subdir(g.tempfile DEPENDS grass_gis ) - -build_program_in_subdir(g.version - DEPENDS grass_gis PROJ GEOS GDAL SQLITE - DEFS "-DGRASS_VERSION_NUMBER=\"${GRASS_VERSION_NUMBER}\"" - "-DGRASS_VERSION_GIT=\"${GRASS_VERSION_GIT}\"" - "-DGRASS_VERSION_UPDATE_PKG=${GRASS_VERSION_UPDATE_PKG}" - "-DARCH=\"${BUILD_ARCH}\"" - ) +build_program_in_subdir(g.proj DEPENDS grass_gis grass_gproj GDAL) +build_program_in_subdir( + g.region + DEPENDS + grass_gis + grass_gproj + grass_vector + grass_raster3d + grass_gmath) + +build_program_in_subdir(g.rename DEPENDS grass_manage grass_raster) +build_program_in_subdir(g.tempfile DEPENDS grass_gis) + +build_program_in_subdir( + g.version + DEPENDS + grass_gis + PROJ + GEOS + GDAL + SQLITE + DEFS + "-DGRASS_VERSION_NUMBER=\"${GRASS_VERSION_NUMBER}\"" + "-DGRASS_VERSION_GIT=\"${GRASS_VERSION_GIT}\"" + "-DGRASS_VERSION_UPDATE_PKG=${GRASS_VERSION_UPDATE_PKG}" + "-DARCH=\"${BUILD_ARCH}\"") # TODO: add CAIRO_HAS_XRENDER and CAIRO_HAS_XRENDER_SURFACE to if clause if(WITH_CAIRO AND USE_X11) if(NOT MSVC) - build_program_in_subdir(g.cairocomp DEPENDS grass_gis CAIRO grass_cairodriver) + build_program_in_subdir(g.cairocomp DEPENDS grass_gis CAIRO + grass_cairodriver) endif() endif() diff --git a/general/manage/lister/CMakeLists.txt b/general/manage/lister/CMakeLists.txt index 38f31daf1e9..b0ac9a86b19 100644 --- a/general/manage/lister/CMakeLists.txt +++ b/general/manage/lister/CMakeLists.txt @@ -1,9 +1,25 @@ -build_program(NAME cell -SOURCES "cell.c" -DEPENDS grass_vector grass_dbmibase grass_gis grass_raster -RUNTIME_OUTPUT_DIR etc/lister) +build_program( + NAME + cell + SOURCES + "cell.c" + DEPENDS + grass_vector + grass_dbmibase + grass_gis + grass_raster + RUNTIME_OUTPUT_DIR + etc/lister) -build_program(NAME vector -SOURCES "vector.c" -DEPENDS grass_vector grass_dbmibase grass_gis grass_raster -RUNTIME_OUTPUT_DIR etc/lister) +build_program( + NAME + vector + SOURCES + "vector.c" + DEPENDS + grass_vector + grass_dbmibase + grass_gis + grass_raster + RUNTIME_OUTPUT_DIR + etc/lister) diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt index 04d60dd4d9f..815d347c6b9 100644 --- a/gui/CMakeLists.txt +++ b/gui/CMakeLists.txt @@ -1,12 +1,9 @@ - add_subdirectory(icons) add_subdirectory(images) - - -#add_subdirectory(scripts) +# add_subdirectory(scripts) add_subdirectory(wxpython) -install(FILES xml/grass-interface.dtd DESTINATION gui/xml) +install(FILES xml/grass-interface.dtd DESTINATION gui/xml) diff --git a/gui/icons/CMakeLists.txt b/gui/icons/CMakeLists.txt index a71e06215be..33374a88dfd 100644 --- a/gui/icons/CMakeLists.txt +++ b/gui/icons/CMakeLists.txt @@ -2,54 +2,75 @@ file(GLOB GUI_ICONS "*.ico" "*.png") file(GLOB GRASS_ICONS "grass/*.png") file(GLOB FLAGS_ICONS "flags/*.png") -add_custom_target(make_gui_icons_dirs +add_custom_target( + make_gui_icons_dirs COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/gui/icons/grass COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/gui/icons/flags COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/docs/html/icons - COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/gui/images/symbols - ) + COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/gui/images/symbols) set(output_icons) foreach(ICON ${GUI_ICONS}) get_filename_component(FILE_NAME ${ICON} NAME) - add_custom_command(OUTPUT ${GISBASE}/gui/icons/${FILE_NAME} - COMMAND ${CMAKE_COMMAND} -E copy ${ICON} ${GISBASE}/gui/icons/) + add_custom_command( + OUTPUT ${GISBASE}/gui/icons/${FILE_NAME} + COMMAND ${CMAKE_COMMAND} -E copy ${ICON} ${GISBASE}/gui/icons/) list(APPEND output_icons ${GISBASE}/gui/icons/${FILE_NAME}) endforeach() foreach(ICON ${GRASS_ICONS}) get_filename_component(FILE_NAME ${ICON} NAME) - add_custom_command(OUTPUT ${GISBASE}/gui/icons/grass/${FILE_NAME} - COMMAND ${CMAKE_COMMAND} -E copy ${ICON} ${GISBASE}/gui/icons/grass/) + add_custom_command( + OUTPUT ${GISBASE}/gui/icons/grass/${FILE_NAME} + COMMAND ${CMAKE_COMMAND} -E copy ${ICON} ${GISBASE}/gui/icons/grass/) list(APPEND output_icons ${GISBASE}/gui/icons/grass/${FILE_NAME}) - add_custom_command(OUTPUT ${GISBASE}/docs/html/icons/${FILE_NAME} + add_custom_command( + OUTPUT ${GISBASE}/docs/html/icons/${FILE_NAME} COMMAND ${CMAKE_COMMAND} -E copy ${ICON} ${GISBASE}/docs/html/icons/) list(APPEND output_icons ${GISBASE}/docs/html/icons/${FILE_NAME}) endforeach() - foreach(ICON ${FLAGS_ICONS}) get_filename_component(FILE_NAME ${ICON} NAME) - add_custom_command(OUTPUT ${GISBASE}/gui/icons/flags/${FILE_NAME} - COMMAND ${CMAKE_COMMAND} -E copy ${ICON} ${GISBASE}/gui/icons/flags/) + add_custom_command( + OUTPUT ${GISBASE}/gui/icons/flags/${FILE_NAME} + COMMAND ${CMAKE_COMMAND} -E copy ${ICON} ${GISBASE}/gui/icons/flags/) list(APPEND output_icons ${GISBASE}/gui/icons/flags/${FILE_NAME}) endforeach() -add_custom_target(gui_icons DEPENDS make_gui_icons_dirs ${output_icons}) +add_custom_target(gui_icons DEPENDS make_gui_icons_dirs ${output_icons}) install(FILES ${GUI_ICONS} DESTINATION gui/icons) install(FILES ${GRASS_ICONS} DESTINATION gui/icons/grass) install(FILES ${FLAGS_ICONS} DESTINATION gui/icons/flags) install(FILES ${GRASS_ICONS} DESTINATION docs/html/icons) install(FILES grass.desktop DESTINATION share/applications) -foreach(icon_type 8 16 22 24 32 36 40 42 48 64 72 80 96 128 192) +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 DESTINATION share/icons/hicolor/${icon_size}/apps) + install(FILES grass-${icon_size}.png + DESTINATION share/icons/hicolor/${icon_size}/apps) endforeach() -install(FILES grass.svg - DESTINATION share/icons/hicolor/scalable/apps - RENAME grass${GRASS_VERSION_MAJOR}${GRASS_VERSION_MINOR}.svg) +install( + FILES grass.svg + DESTINATION share/icons/hicolor/scalable/apps + RENAME grass${GRASS_VERSION_MAJOR}${GRASS_VERSION_MINOR}.svg) install(FILES grass.appdata.xml DESTINATION share/appdata) diff --git a/gui/images/CMakeLists.txt b/gui/images/CMakeLists.txt index 3f7051820f6..06401023d0e 100644 --- a/gui/images/CMakeLists.txt +++ b/gui/images/CMakeLists.txt @@ -3,18 +3,26 @@ file(GLOB GUI_IMAGES "*.png") set(output_images) foreach(IMG ${GUI_IMAGES}) get_filename_component(FILE_NAME ${IMG} NAME) - add_custom_command(OUTPUT ${GISBASE}/gui/images/${FILE_NAME} - COMMAND ${CMAKE_COMMAND} -E copy ${IMG} ${GISBASE}/gui/images/) + add_custom_command( + OUTPUT ${GISBASE}/gui/images/${FILE_NAME} + COMMAND ${CMAKE_COMMAND} -E copy ${IMG} ${GISBASE}/gui/images/) list(APPEND output_images ${GISBASE}/gui/images/${FILE_NAME}) endforeach() -add_custom_target(gui_images - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/symbols/basic/ ${GISBASE}/gui/images/symbols/ - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/symbols/demo/ ${GISBASE}/gui/images/symbols/ - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/symbols/extra/ ${GISBASE}/gui/images/symbols/ - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/symbols/geology/ ${GISBASE}/gui/images/symbols/ - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/symbols/legend/ ${GISBASE}/gui/images/symbols/ - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/symbols/n_arrows/ ${GISBASE}/gui/images/symbols/ +add_custom_target( + gui_images + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/symbols/basic/ + ${GISBASE}/gui/images/symbols/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/symbols/demo/ + ${GISBASE}/gui/images/symbols/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/symbols/extra/ + ${GISBASE}/gui/images/symbols/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/symbols/geology/ + ${GISBASE}/gui/images/symbols/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/symbols/legend/ + ${GISBASE}/gui/images/symbols/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/symbols/n_arrows/ + ${GISBASE}/gui/images/symbols/ DEPENDS gui_icons ${output_images}) install(FILES ${GUI_IMAGES} DESTINATION gui/images/) diff --git a/gui/wxpython/CMakeLists.txt b/gui/wxpython/CMakeLists.txt index db92f38d785..d0903550468 100644 --- a/gui/wxpython/CMakeLists.txt +++ b/gui/wxpython/CMakeLists.txt @@ -1,75 +1,131 @@ - # missing docs - set(WXPYTHON_DIR ${GISBASE}/gui/wxpython) -set(gui_lib_DIRS core gui_core icons iscatt lmgr location_wizard main_window -mapdisp mapwin modules nviz rdigit startup tools vnet web_services wxplot) +set(gui_lib_DIRS + core + gui_core + icons + iscatt + lmgr + location_wizard + main_window + mapdisp + mapwin + modules + nviz + rdigit + startup + tools + vnet + web_services + wxplot) set(gui_lib_targets) foreach(gui_lib_DIR ${gui_lib_DIRS}) copy_python_files_in_subdir(${gui_lib_DIR} gui/wxpython) list(APPEND gui_lib_targets python_${gui_lib_DIR}) endforeach() -add_custom_target(GUI_WXPYTHON - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/wxgui.py ${WXPYTHON_DIR}/ - DEPENDS ${gui_lib_targets}) +add_custom_target( + GUI_WXPYTHON + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/wxgui.py + ${WXPYTHON_DIR}/ + DEPENDS ${gui_lib_targets}) -set(gui_DIRS animation datacatalog dbmgr gcp gmodeler -iclass image2target mapswipe photo2image psmap rlisetup timeline tplot vdigit) +set(gui_DIRS + animation + datacatalog + dbmgr + gcp + gmodeler + iclass + image2target + mapswipe + photo2image + psmap + rlisetup + timeline + tplot + 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}") endforeach() - add_subdirectory(docs) install(FILES README DESTINATION gui/wxpython) - ### copy all python files gui/ lib/python - ### compile all python files - ### so below target depends on MODULD_LIST +# copy all python files gui/ lib/python compile all python files so below target +# depends on MODULD_LIST -add_custom_target(copy_wxpython_xml - COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/xml ${WXPYTHON_DIR}/xml/ - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../xml/grass-interface.dtd ${GISBASE}/gui/ - DEPENDS GUI_WXPYTHON) +add_custom_target( + copy_wxpython_xml + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/xml + ${WXPYTHON_DIR}/xml/ + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../xml/grass-interface.dtd ${GISBASE}/gui/ + DEPENDS GUI_WXPYTHON) -add_custom_target(compile_python_files - COMMAND ${Python_EXECUTABLE} -m compileall ${GISBASE}/scripts - COMMAND ${Python_EXECUTABLE} -m compileall ${WXPYTHON_DIR} - DEPENDS ALL_MODULES) +add_custom_target( + compile_python_files + COMMAND ${Python_EXECUTABLE} -m compileall ${GISBASE}/scripts + COMMAND ${Python_EXECUTABLE} -m compileall ${WXPYTHON_DIR} + DEPENDS ALL_MODULES) -add_custom_target(build_modules_items_xml - COMMAND ${grass_env_command} ${Python_EXECUTABLE} - ${CMAKE_CURRENT_SOURCE_DIR}/tools/build_modules_xml.py > ${WXPYTHON_DIR}/xml/module_items.xml - DEPENDS copy_wxpython_xml compile_python_files ${g_gui_targets} - COMMENT "Generating interface description for all modules..." - VERBATIM) +add_custom_target( + build_modules_items_xml + COMMAND + ${grass_env_command} ${Python_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/tools/build_modules_xml.py > + ${WXPYTHON_DIR}/xml/module_items.xml + DEPENDS copy_wxpython_xml compile_python_files ${g_gui_targets} + COMMENT "Generating interface description for all modules..." + VERBATIM) -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 ${WXPYTHON_DIR}/xml/ - DEPENDS build_modules_items_xml) +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 + ${WXPYTHON_DIR}/xml/ + DEPENDS build_modules_items_xml) -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 ${WXPYTHON_DIR}/xml/ +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 + ${WXPYTHON_DIR}/xml/ DEPENDS build_xml_menudata) -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 +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) diff --git a/gui/wxpython/docs/CMakeLists.txt b/gui/wxpython/docs/CMakeLists.txt index 26696cf326f..02e4b4a9b1f 100644 --- a/gui/wxpython/docs/CMakeLists.txt +++ b/gui/wxpython/docs/CMakeLists.txt @@ -1,13 +1,13 @@ - set(wxpython_html_files) -ADD_CUSTOM_COMMAND(OUTPUT ${GISBASE}/docs/html/wxGUI.components.html - COMMAND ${grass_env_command} - ${Python_EXECUTABLE} ${MKHTML_PY} wxGUI.components ${GRASS_VERSION_DATE} > ${GISBASE}/docs/html/wxGUI.components.html +add_custom_command( + OUTPUT ${GISBASE}/docs/html/wxGUI.components.html + COMMAND + ${grass_env_command} ${Python_EXECUTABLE} ${MKHTML_PY} wxGUI.components + ${GRASS_VERSION_DATE} > ${GISBASE}/docs/html/wxGUI.components.html COMMENT "Creating ${GISBASE}/docs/html/wxGUI.components.html" - DEPENDS GUI_WXPYTHON LIB_PYTHON - ) + DEPENDS GUI_WXPYTHON LIB_PYTHON) list(APPEND wxpython_html_files ${GISBASE}/docs/html/wxGUI.components.html) -ADD_CUSTOM_TARGET(wxpython_docs DEPENDS ${wxpython_html_files}) +add_custom_target(wxpython_docs DEPENDS ${wxpython_html_files}) diff --git a/imagery/CMakeLists.txt b/imagery/CMakeLists.txt index 8e2050fd238..6c5a1868844 100644 --- a/imagery/CMakeLists.txt +++ b/imagery/CMakeLists.txt @@ -1,103 +1,138 @@ -build_program_in_subdir(i.albedo DEPENDS grass_imagery grass_raster grass_vector grass_gis ) -build_program_in_subdir(i.aster.toar DEPENDS grass_imagery grass_raster grass_vector grass_gis ) - -build_program_in_subdir(i.atcorr - DEPENDS grass_imagery grass_raster grass_vector grass_gis SRC_REGEX "*.cpp") - -build_program_in_subdir(i.biomass DEPENDS grass_imagery grass_raster grass_vector grass_gis ) -build_program_in_subdir(i.cca DEPENDS grass_imagery grass_raster grass_vector grass_gis ) -build_program_in_subdir(i.cluster DEPENDS grass_imagery grass_raster grass_vector grass_gis grass_cluster) - -build_program_in_subdir(i.eb.evapfr DEPENDS grass_imagery grass_raster grass_vector grass_gis) -build_program_in_subdir(i.eb.eta DEPENDS grass_imagery grass_raster grass_vector grass_gis) -build_program_in_subdir(i.eb.hsebal01 DEPENDS grass_imagery grass_raster grass_vector grass_gis) -build_program_in_subdir(i.eb.netrad DEPENDS grass_imagery grass_raster grass_vector grass_gis) -build_program_in_subdir(i.eb.soilheatflux DEPENDS grass_imagery grass_raster grass_vector grass_gis) - -build_program_in_subdir(i.evapo.mh DEPENDS grass_imagery grass_raster grass_vector grass_gis) -build_program_in_subdir(i.evapo.pm DEPENDS grass_imagery grass_raster grass_vector grass_gis) -build_program_in_subdir(i.evapo.pt DEPENDS grass_imagery grass_raster grass_vector grass_gis) -build_program_in_subdir(i.evapo.time DEPENDS grass_imagery grass_raster grass_vector grass_gis) -build_program_in_subdir(i.emissivity DEPENDS grass_imagery grass_raster grass_vector grass_gis) -build_program_in_subdir(i.find - DEPENDS grass_imagery grass_raster grass_vector grass_gis - PACKAGE "grassmods" - RUNTIME_OUTPUT_DIR etc) - -build_program_in_subdir(i.gensig DEPENDS grass_imagery grass_raster grass_vector grass_gis) - -build_program_in_subdir( - i.gensigset - DEPENDS grass_imagery grass_raster grass_vector grass_gis) - -build_program_in_subdir( - i.group - DEPENDS grass_imagery grass_raster grass_vector grass_gis) - -build_program_in_subdir( - i.his.rgb - DEPENDS grass_imagery grass_raster grass_vector grass_gis) - -build_program_in_subdir( - i.landsat.toar - DEPENDS grass_imagery grass_raster grass_vector grass_gis) - -build_program_in_subdir( - i.maxlik - DEPENDS grass_imagery grass_raster grass_vector grass_gis) - -build_program_in_subdir( - i.modis.qc - DEPENDS grass_imagery grass_raster grass_vector grass_gis) - -build_program_in_subdir( - i.rectify - DEPENDS grass_imagery grass_raster grass_vector grass_gis) - -build_program_in_subdir( - i.rgb.his - DEPENDS grass_imagery grass_raster grass_vector grass_gis) +build_program_in_subdir(i.albedo DEPENDS grass_imagery grass_raster + grass_vector grass_gis) +build_program_in_subdir(i.aster.toar DEPENDS grass_imagery grass_raster + grass_vector grass_gis) + +build_program_in_subdir( + i.atcorr + DEPENDS + grass_imagery + grass_raster + grass_vector + grass_gis + SRC_REGEX + "*.cpp") + +build_program_in_subdir(i.biomass DEPENDS grass_imagery grass_raster + grass_vector grass_gis) +build_program_in_subdir(i.cca DEPENDS grass_imagery grass_raster grass_vector + grass_gis) +build_program_in_subdir( + i.cluster + DEPENDS + grass_imagery + grass_raster + grass_vector + grass_gis + grass_cluster) + +build_program_in_subdir(i.eb.evapfr DEPENDS grass_imagery grass_raster + grass_vector grass_gis) +build_program_in_subdir(i.eb.eta DEPENDS grass_imagery grass_raster + grass_vector grass_gis) +build_program_in_subdir(i.eb.hsebal01 DEPENDS grass_imagery grass_raster + grass_vector grass_gis) +build_program_in_subdir(i.eb.netrad DEPENDS grass_imagery grass_raster + grass_vector grass_gis) +build_program_in_subdir(i.eb.soilheatflux DEPENDS grass_imagery grass_raster + grass_vector grass_gis) + +build_program_in_subdir(i.evapo.mh DEPENDS grass_imagery grass_raster + grass_vector grass_gis) +build_program_in_subdir(i.evapo.pm DEPENDS grass_imagery grass_raster + grass_vector grass_gis) +build_program_in_subdir(i.evapo.pt DEPENDS grass_imagery grass_raster + grass_vector grass_gis) +build_program_in_subdir(i.evapo.time DEPENDS grass_imagery grass_raster + grass_vector grass_gis) +build_program_in_subdir(i.emissivity DEPENDS grass_imagery grass_raster + grass_vector grass_gis) +build_program_in_subdir( + i.find + DEPENDS + grass_imagery + grass_raster + grass_vector + grass_gis + PACKAGE + "grassmods" + RUNTIME_OUTPUT_DIR + etc) + +build_program_in_subdir(i.gensig DEPENDS grass_imagery grass_raster + grass_vector grass_gis) + +build_program_in_subdir(i.gensigset DEPENDS grass_imagery grass_raster + grass_vector grass_gis) + +build_program_in_subdir(i.group DEPENDS grass_imagery grass_raster grass_vector + grass_gis) + +build_program_in_subdir(i.his.rgb DEPENDS grass_imagery grass_raster + grass_vector grass_gis) + +build_program_in_subdir(i.landsat.toar DEPENDS grass_imagery grass_raster + grass_vector grass_gis) + +build_program_in_subdir(i.maxlik DEPENDS grass_imagery grass_raster + grass_vector grass_gis) + +build_program_in_subdir(i.modis.qc DEPENDS grass_imagery grass_raster + grass_vector grass_gis) + +build_program_in_subdir(i.rectify DEPENDS grass_imagery grass_raster + grass_vector grass_gis) + +build_program_in_subdir(i.rgb.his DEPENDS grass_imagery grass_raster + grass_vector grass_gis) build_program_in_subdir( i.segment - DEPENDS grass_imagery grass_raster grass_vector grass_gis grass_segment) + DEPENDS + grass_imagery + grass_raster + grass_vector + grass_gis + grass_segment) -build_program_in_subdir( - i.smap - DEPENDS grass_imagery grass_raster grass_vector grass_gis) +build_program_in_subdir(i.smap DEPENDS grass_imagery grass_raster grass_vector + grass_gis) -build_program_in_subdir( - i.target - DEPENDS grass_imagery grass_raster grass_vector grass_gis) +build_program_in_subdir(i.target DEPENDS grass_imagery grass_raster + grass_vector grass_gis) -build_program_in_subdir( - i.topo.corr - DEPENDS grass_imagery grass_raster grass_vector grass_gis) +build_program_in_subdir(i.topo.corr DEPENDS grass_imagery grass_raster + grass_vector grass_gis) -build_program_in_subdir( - i.pca - DEPENDS grass_imagery grass_raster grass_vector grass_gis) +build_program_in_subdir(i.pca DEPENDS grass_imagery grass_raster grass_vector + grass_gis) -build_program_in_subdir( - i.vi - DEPENDS grass_imagery grass_raster grass_vector grass_gis) +build_program_in_subdir(i.vi DEPENDS grass_imagery grass_raster grass_vector + grass_gis) -build_program_in_subdir( - i.zc - DEPENDS grass_imagery grass_raster grass_vector grass_gis) +build_program_in_subdir(i.zc DEPENDS grass_imagery grass_raster grass_vector + grass_gis) build_program_in_subdir( i.fft - DEPENDS grass_imagery grass_raster grass_gmath grass_gis - PRIMARY_DEPENDS FFTW) + DEPENDS + grass_imagery + grass_raster + grass_gmath + grass_gis + PRIMARY_DEPENDS + FFTW) build_program_in_subdir( i.ifft - DEPENDS grass_gis grass_raster grass_gmath grass_btree2 - PRIMARY_DEPENDS FFTW) - -build_program_in_subdir( - i.landsat.acca - DEPENDS grass_raster grass_gis) + DEPENDS + grass_gis + grass_raster + grass_gmath + grass_btree2 + PRIMARY_DEPENDS + FFTW) + +build_program_in_subdir(i.landsat.acca DEPENDS grass_raster grass_gis) add_subdirectory(i.ortho.photo) diff --git a/imagery/i.ortho.photo/CMakeLists.txt b/imagery/i.ortho.photo/CMakeLists.txt index c442548d498..ec829a3b73b 100644 --- a/imagery/i.ortho.photo/CMakeLists.txt +++ b/imagery/i.ortho.photo/CMakeLists.txt @@ -1,6 +1,11 @@ -build_library_in_subdir(lib - NAME grass_iortho - DEPENDS grass_gis grass_imagery grass_gmath) +build_library_in_subdir( + lib + NAME + grass_iortho + DEPENDS + grass_gis + grass_imagery + grass_gmath) build_program_in_subdir(i.ortho.camera DEPENDS grass_iortho) diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt index 7bb6007477a..337a2190b55 100644 --- a/include/CMakeLists.txt +++ b/include/CMakeLists.txt @@ -36,7 +36,7 @@ else() check_include_file(dbm.h HAVE_DBM_H) endif() -#set(CMAKE_REQUIRED_INCLUDES "${FFTW_INCLUDE_DIR}") +# set(CMAKE_REQUIRED_INCLUDES "${FFTW_INCLUDE_DIR}") check_target(ICONV HAVE_ICONV_H) check_target(BZIP2 HAVE_BZLIB_H) check_target(ZLIB HAVE_ZLIB_H) @@ -61,23 +61,24 @@ check_target(POSTGRES HAVE_POSTGRES) check_target(ODBC HAVE_SQL_H) if(TARGET POSTGRES) - try_compile(HAVE_PQCMDTUPLES - ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_SOURCE_DIR}/cmake/tests/have_pqcmdtuples.c - CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:PATH=${PostgreSQL_INCLUDE_DIR}" - "-w" - "-DLINK_LIBRARIES:STRING=${PostgreSQL_LIBRARY}" - OUTPUT_VARIABLE COMPILE_HAVE_PQCMDTUPLES) - if(NOT COMPILE_HAVE_PQCMDTUPLES) - message("Performing Test HAVE_PQCMDTUPLES - Failed\n COMPILE_OUTPUT:${COMPILE_HAVE_PQCMDTUPLES}\n") - else() - message(STATUS "Performing Test HAVE_PQCMDTUPLES - Success") - set(HAVE_PQCMDTUPLES 1) - endif() + try_compile( + HAVE_PQCMDTUPLES ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_SOURCE_DIR}/cmake/tests/have_pqcmdtuples.c + CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:PATH=${PostgreSQL_INCLUDE_DIR}" "-w" + "-DLINK_LIBRARIES:STRING=${PostgreSQL_LIBRARY}" + OUTPUT_VARIABLE COMPILE_HAVE_PQCMDTUPLES) + if(NOT COMPILE_HAVE_PQCMDTUPLES) + message( + "Performing Test HAVE_PQCMDTUPLES - Failed\n COMPILE_OUTPUT:${COMPILE_HAVE_PQCMDTUPLES}\n" + ) + else() + message(STATUS "Performing Test HAVE_PQCMDTUPLES - Success") + set(HAVE_PQCMDTUPLES 1) + endif() endif() if(MSVC) -check_target(PCRE HAVE_PCRE_H) + check_target(PCRE HAVE_PCRE_H) endif() check_target(POSTGRES HAVE_LIBPQ_FE_H) @@ -100,8 +101,8 @@ else() set(RETSIGTYPE "int") endif() -########################TODO######################## -#no target ATLAS in thirdpary/CMakeLists.txt +# #######################TODO######################## +# no target ATLAS in thirdpary/CMakeLists.txt check_target(ATLAS HAVE_LIBATLAS) set(USE_NLS 0) @@ -111,28 +112,28 @@ endif() set(HAVE_READLINE_READLINE_H 0) if(MSVC) -set(PID_TYPE int) + set(PID_TYPE int) endif() set(_OE_SOCKETS 0) set(USE_DELTA_FOR_TZ 0) set(_REENTRANT 0) -########################TODO######################## +# #######################TODO######################## set(X_DISPLAY_MISSING 1) if(TARGET X11) set(X_DISPLAY_MISSING 0) endif() -#used in config.cmake.in +# used in config.cmake.in set(STATIC_BUILD 0) if(NOT BUILD_SHARED_LIBS) set(STATIC_BUILD 1) endif() -#used in config.cmake.in +# used in config.cmake.in set(GDEBUG 0) -if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug" ) +if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") set(GDEBUG 1) endif() @@ -140,16 +141,18 @@ include(CheckCSourceCompiles) set(CMAKE_REQUIRED_FLAGS ${CMAKE_C_FLAGS}) -check_c_source_compiles(" +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(" +check_c_source_compiles( + " #include #include #include @@ -157,7 +160,7 @@ 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) @@ -181,39 +184,41 @@ check_symbol_exists(fseeko "stdio.h" HAVE_FSEEKO) set(HAVE_PBUFFERS 0) set(HAVE_PIXMAPS 0) if(WITH_OPENGL) -try_compile(HAVE_PBUFFERS ${CMAKE_CURRENT_BINARY_DIR} -${CMAKE_SOURCE_DIR}/cmake/tests/have_pbuffer.c -CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:PATH=${OPENGL_INCLUDE_DIR}" - "-w" - "-DLINK_LIBRARIES:STRING=${OPENGL_LIBRARIES}" -OUTPUT_VARIABLE COMPILE_HAVE_PBUFFERS -) -if(NOT COMPILE_HAVE_PBUFFERS) - message(FATAL_ERROR "Performing Test HAVE_PBUFFERS - Failed\n COMPILE_OUTPUT:${COMPILE_HAVE_PBUFFERS}\n") -else() - message(STATUS "Performing Test HAVE_PBUFFERS - Success") - set(HAVE_PBUFFERS 1) -endif() - - -try_compile(HAVE_PIXMAPS ${CMAKE_CURRENT_BINARY_DIR} -${CMAKE_SOURCE_DIR}/cmake/tests/have_pixmaps.c -CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:PATH=${OPENGL_INCLUDE_DIR}" - "-w" - "-DLINK_LIBRARIES:STRING=${OPENGL_LIBRARIES}" - OUTPUT_VARIABLE COMPILE_HAVE_PIXMAPS - ) + try_compile( + HAVE_PBUFFERS ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_SOURCE_DIR}/cmake/tests/have_pbuffer.c + CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:PATH=${OPENGL_INCLUDE_DIR}" "-w" + "-DLINK_LIBRARIES:STRING=${OPENGL_LIBRARIES}" + OUTPUT_VARIABLE COMPILE_HAVE_PBUFFERS) + if(NOT COMPILE_HAVE_PBUFFERS) + message( + FATAL_ERROR + "Performing Test HAVE_PBUFFERS - Failed\n COMPILE_OUTPUT:${COMPILE_HAVE_PBUFFERS}\n" + ) + else() + message(STATUS "Performing Test HAVE_PBUFFERS - Success") + set(HAVE_PBUFFERS 1) + endif() -if(NOT COMPILE_HAVE_PIXMAPS) - message(FATAL_ERROR "Performing Test HAVE_PIXMAPS - Failed\n COMPILE_OUTPUT:${COMPILE_HAVE_PIXMAPS}\n") -else() - message(STATUS "Performing Test HAVE_PIXMAPS - Success") - set(HAVE_PIXMAPS 1) -endif() + try_compile( + HAVE_PIXMAPS ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_SOURCE_DIR}/cmake/tests/have_pixmaps.c + CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:PATH=${OPENGL_INCLUDE_DIR}" "-w" + "-DLINK_LIBRARIES:STRING=${OPENGL_LIBRARIES}" + OUTPUT_VARIABLE COMPILE_HAVE_PIXMAPS) + + if(NOT COMPILE_HAVE_PIXMAPS) + message( + FATAL_ERROR + "Performing Test HAVE_PIXMAPS - Failed\n COMPILE_OUTPUT:${COMPILE_HAVE_PIXMAPS}\n" + ) + else() + message(STATUS "Performing Test HAVE_PIXMAPS - Success") + set(HAVE_PIXMAPS 1) + endif() endif(WITH_OPENGL) - set(OPENGL_X11 0) set(OPENGL_AQUA 0) set(OPENGL_WINDOWS 0) @@ -229,7 +234,7 @@ if(WITH_OPENGL) endif() file(GLOB_RECURSE SRCHS "*.h") - set(include_depends) +set(include_depends) foreach(srch ${SRCHS}) get_filename_component(srch_DIR ${srch} DIRECTORY) get_filename_component(srch_NAME ${srch} NAME) @@ -240,31 +245,32 @@ foreach(srch ${SRCHS}) 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} ) + list(APPEND include_depends ${output_dir}/${srch_NAME}) endforeach() add_custom_target(copy_header DEPENDS ${include_depends} LIB_PYTHON) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/grass/version.h.in - "${CMAKE_CURRENT_BINARY_DIR}/grass/version.h") + "${CMAKE_CURRENT_BINARY_DIR}/grass/version.h") message(STATUS "Creating ${CMAKE_CURRENT_BINARY_DIR}/grass/config.h") configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake.in - "${CMAKE_CURRENT_BINARY_DIR}/grass/config.h") + "${CMAKE_CURRENT_BINARY_DIR}/grass/config.h") file(WRITE ${CMAKE_BINARY_DIR}/include/grass/copying.h "") file(STRINGS ${CMAKE_SOURCE_DIR}/COPYING copying_lines) foreach(copying_line ${copying_lines}) - file(APPEND ${CMAKE_BINARY_DIR}/include/grass/copying.h "\"${copying_line} \\n\"\n" ) + file(APPEND ${CMAKE_BINARY_DIR}/include/grass/copying.h + "\"${copying_line} \\n\"\n") endforeach() file(WRITE ${CMAKE_BINARY_DIR}/include/grass/citing.h "") file(STRINGS ${CMAKE_SOURCE_DIR}/CITING citing_lines) foreach(citing_line ${citing_lines}) - file(APPEND ${CMAKE_BINARY_DIR}/include/grass/citing.h "\"${citing_line}\\n\"\n" ) + file(APPEND ${CMAKE_BINARY_DIR}/include/grass/citing.h + "\"${citing_line}\\n\"\n") endforeach() -#TODO -#file(READ ${CMAKE_SOURCE_DIR}/config.status config_status_header) -file(WRITE ${CMAKE_BINARY_DIR}/include/grass/confparms.h "\"/* */\\n\"" ) +# TODO file(READ ${CMAKE_SOURCE_DIR}/config.status config_status_header) +file(WRITE ${CMAKE_BINARY_DIR}/include/grass/confparms.h "\"/* */\\n\"") diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 35625ba03ce..5e8dd6c9607 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -1,4 +1,3 @@ - set(use_math_DEFS "") if(MSVC) set(use_math_DEFS "-D_USE_MATH_DEFINES=1") @@ -8,18 +7,30 @@ build_library_in_subdir(datetime) add_subdirectory(gis) -build_library_in_subdir(driver - DEFS "${use_math_DEFS}" - DEPENDS grass_gis FREETYPE ICONV ZLIB) +build_library_in_subdir( + driver + DEFS + "${use_math_DEFS}" + DEPENDS + grass_gis + FREETYPE + ICONV + ZLIB) add_subdirectory(proj) file(GLOB raster_SRCS "./raster/*.c") # list(APPEND raster_SRCS "./gis/gisinit.c") -build_library_in_subdir(raster - DEFS "-DGDAL_DYNAMIC=1;-DGDAL_LINK=1" - SOURCES ${raster_SRCS} - DEPENDS GDAL PROJ grass_gproj) +build_library_in_subdir( + raster + DEFS + "-DGDAL_DYNAMIC=1;-DGDAL_LINK=1" + SOURCES + ${raster_SRCS} + DEPENDS + GDAL + PROJ + grass_gproj) if(TARGET LAPACK) target_link_libraries(grass_raster LAPACK) @@ -32,46 +43,64 @@ if(CMAKE_SYSTEM_NAME MATCHES "Linux") endif() configure_file(external/ccmath/ccmath.h - ${CMAKE_BINARY_DIR}/include/grass/ccmath_grass.h - COPYONLY) + ${CMAKE_BINARY_DIR}/include/grass/ccmath_grass.h COPYONLY) build_library_in_subdir(external/ccmath) -build_library_in_subdir(external/shapelib NAME grass_shape - HEADERS "shapefil.h") +build_library_in_subdir(external/shapelib NAME grass_shape HEADERS "shapefil.h") -build_library_in_subdir(gmath - DEPENDS grass_ccmath grass_gis - DEFS "${use_math_DEFS}" - OPTIONAL_DEPENDS FFTW LAPACK BLAS) +build_library_in_subdir( + gmath + DEPENDS + grass_ccmath + grass_gis + DEFS + "${use_math_DEFS}" + OPTIONAL_DEPENDS + FFTW + LAPACK + BLAS) build_library_in_subdir(linkm) file(GLOB pngdriver_SRCS "./pngdriver/*.c") # list(APPEND pngdriver_SRCS "./driver/init.c") -build_library_in_subdir(pngdriver - SOURCES ${pngdriver_SRCS} - DEPENDS grass_driver grass_gis LIBPNG ZLIB) - # INCLUDES "./driver") +build_library_in_subdir( + pngdriver + SOURCES + ${pngdriver_SRCS} + DEPENDS + grass_driver + grass_gis + LIBPNG + ZLIB) +# INCLUDES "./driver") file(GLOB psdriver_SRCS "./psdriver/*.c") list(APPEND psdriver_SRCS "./driver/init.c") -build_library_in_subdir(psdriver - SOURCES ${psdriver_SRCS} - DEPENDS grass_driver - INCLUDES "./driver") +build_library_in_subdir( + psdriver + SOURCES + ${psdriver_SRCS} + DEPENDS + grass_driver + INCLUDES + "./driver") file(GLOB htmldriver_SRCS "./htmldriver/*.c") list(APPEND htmldriver_SRCS "./driver/init.c") -build_library_in_subdir(htmldriver - SOURCES ${htmldriver_SRCS} - DEPENDS grass_driver - INCLUDES "./driver") +build_library_in_subdir( + htmldriver + SOURCES + ${htmldriver_SRCS} + DEPENDS + grass_driver + INCLUDES + "./driver") set(_grass_display_DEFS) -set(_grass_display_DEPENDS - grass_driver grass_raster - grass_htmldriver grass_pngdriver grass_psdriver) +set(_grass_display_DEPENDS grass_driver grass_raster grass_htmldriver + grass_pngdriver grass_psdriver) if(WITH_CAIRO) @@ -82,25 +111,22 @@ if(WITH_CAIRO) file(GLOB cairodriver_SRCS "./cairodriver/*.c") list(APPEND cairodriver_SRCS "./driver/init.c") - build_library_in_subdir(cairodriver - DEPENDS ${_cairodriver_DEPENDS} - SOURCES ${cairodriver_SRCS}) + build_library_in_subdir(cairodriver DEPENDS ${_cairodriver_DEPENDS} SOURCES + ${cairodriver_SRCS}) 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) +build_library_in_subdir(bitmap SOURCES "./bitmap/bitmap.c" "./bitmap/sparse.c" + 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}) +build_library_in_subdir(display DEFS ${_grass_display_DEFS} DEPENDS + ${_grass_display_DEPENDS}) add_subdirectory(db) @@ -114,24 +140,44 @@ build_library_in_subdir(cluster DEPENDS grass_imagery) build_library_in_subdir(rowio DEPENDS grass_gis) -build_library_in_subdir(segment DEPENDS grass_gis) #addeed DEPENDS grass_gis for uninstd.h +build_library_in_subdir(segment DEPENDS grass_gis) # addeed DEPENDS grass_gis + # for uninstd.h add_subdirectory(rst) -build_library_in_subdir(lidar -DEPENDS GDAL GEOS grass_vector grass_raster grass_dbmibase grass_segment -HEADERS "lidar.h") +build_library_in_subdir( + lidar + DEPENDS + GDAL + GEOS + grass_vector + grass_raster + grass_dbmibase + grass_segment + HEADERS + "lidar.h") build_library_in_subdir(raster3d DEPENDS grass_raster) -build_program_in_subdir(raster3d/test - NAME test.raster3d.lib - DEPENDS grass_gis grass_raster3d grass_raster) - -build_library_in_subdir(gpde HEADERS "N_*.h" - DEPENDS grass_gis grass_raster3d grass_gmath) - -build_library_in_subdir(dspf DEPENDS grass_gis) +build_program_in_subdir( + raster3d/test + NAME + test.raster3d.lib + DEPENDS + grass_gis + grass_raster3d + grass_raster) + +build_library_in_subdir( + gpde + HEADERS + "N_*.h" + DEPENDS + grass_gis + grass_raster3d + grass_gmath) + +build_library_in_subdir(dspf DEPENDS grass_gis) build_library_in_subdir(symbol NAME grass_sym DEPENDS grass_raster) @@ -144,20 +190,34 @@ build_library_in_subdir(stats DEPENDS grass_raster) build_library_in_subdir(arraystats DEPENDS grass_gis) if(WITH_OPENGL) - build_library_in_subdir(ogsf - DEPENDS grass_raster grass_raster3d grass_vector grass_bitmap OPENGL TIFF) - - build_library_in_subdir(nviz - DEPENDS grass_display grass_raster grass_vector grass_bitmap grass_ogsf OPENGL TIFF) + build_library_in_subdir( + ogsf + DEPENDS + grass_raster + grass_raster3d + grass_vector + grass_bitmap + OPENGL + TIFF) + + build_library_in_subdir( + nviz + DEPENDS + grass_display + grass_raster + grass_vector + grass_bitmap + grass_ogsf + OPENGL + TIFF) endif() add_subdirectory(temporal) build_library_in_subdir(iostream SRC_REGEX "*.cpp" DEPENDS grass_gis) -build_library_in_subdir(manage DEPENDS grass_raster grass_vector grass_raster3d ) +build_library_in_subdir(manage DEPENDS grass_raster grass_vector grass_raster3d) file(COPY manage/element_list DESTINATION ${GISBASE}/etc) install(FILES ${GISBASE}/etc/element_list DESTINATION etc) -build_library_in_subdir(calc -DEPENDS grass_raster) +build_library_in_subdir(calc DEPENDS grass_raster) diff --git a/lib/db/CMakeLists.txt b/lib/db/CMakeLists.txt index 2796781e8e7..5fc3119b06e 100644 --- a/lib/db/CMakeLists.txt +++ b/lib/db/CMakeLists.txt @@ -1,28 +1,40 @@ - file(GLOB dbmibase_SRCS "./dbmi_base/*.c") if(MSVC) set(dbmibase_INCLUDES "./dbmi_base" "./dbmi_base/msvc") list(APPEND dbmibase_SRCS "./dbmi_base/msvc/dirent.c") endif() -build_library_in_subdir(dbmi_base NAME grass_dbmibase - INCLUDES ${dbmibase_INCLUDES} - SOURCES ${dbmibase_SRCS} - DEPENDS grass_gis - HEADERS "dbstubs.h") +build_library_in_subdir( + dbmi_base + NAME + grass_dbmibase + INCLUDES + ${dbmibase_INCLUDES} + SOURCES + ${dbmibase_SRCS} + DEPENDS + grass_gis + HEADERS + "dbstubs.h") -build_library_in_subdir(dbmi_client NAME grass_dbmiclient - DEPENDS grass_dbmibase - INCLUDES "./dbmi_base" - ) +build_library_in_subdir( + dbmi_client + NAME + grass_dbmiclient + DEPENDS + grass_dbmibase + INCLUDES + "./dbmi_base") -build_library_in_subdir(stubs NAME grass_dstubs - DEPENDS grass_dbmibase - ) +build_library_in_subdir(stubs NAME grass_dstubs DEPENDS grass_dbmibase) -build_library_in_subdir(dbmi_driver NAME grass_dbmidriver - DEPENDS grass_dstubs - INCLUDES "./dbmi_base" - ) +build_library_in_subdir( + dbmi_driver + NAME + grass_dbmidriver + DEPENDS + grass_dstubs + INCLUDES + "./dbmi_base") add_subdirectory(sqlp) diff --git a/lib/db/sqlp/CMakeLists.txt b/lib/db/sqlp/CMakeLists.txt index 9fe5ca0f183..eeead261d8a 100644 --- a/lib/db/sqlp/CMakeLists.txt +++ b/lib/db/sqlp/CMakeLists.txt @@ -1,17 +1,13 @@ +flex_target(sqlp.yy.c sqlp.l ${CMAKE_CURRENT_BINARY_DIR}/sqlp.yy.c) -FLEX_TARGET(sqlp.yy.c sqlp.l ${CMAKE_CURRENT_BINARY_DIR}/sqlp.yy.c) +bison_target(sqlp.tab.c sqlp.y ${CMAKE_CURRENT_BINARY_DIR}/sqlp.tab.c) -BISON_TARGET(sqlp.tab.c sqlp.y ${CMAKE_CURRENT_BINARY_DIR}/sqlp.tab.c ) +add_flex_bison_dependency(sqlp.yy.c sqlp.tab.c) -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_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}" ) +build_module(NAME grass_sqlp SOURCES "${sqlp_SRCS}") diff --git a/lib/fonts/CMakeLists.txt b/lib/fonts/CMakeLists.txt index f9bf1abc130..464090415c4 100644 --- a/lib/fonts/CMakeLists.txt +++ b/lib/fonts/CMakeLists.txt @@ -1 +1 @@ -#TODO +# TODO diff --git a/lib/gis/CMakeLists.txt b/lib/gis/CMakeLists.txt index 77a498f085f..9afd02602fa 100644 --- a/lib/gis/CMakeLists.txt +++ b/lib/gis/CMakeLists.txt @@ -1,28 +1,146 @@ set(gislib_SRCS - adj_cellhd.c aprintf.c - copy_dir.c - get_ellipse.c ll_scan.c open_misc.c proj3.c units.c - alloc.c copy_file.c get_projinfo.c locale.c overwrite.c put_window.c user_config.c - area.c counter.c get_window.c location.c pager.c putenv.c verbose.c - area_ellipse.c date.c getl.c lrand48.c parser.c radii.c view.c - area_poly1.c datum.c gisbase.c ls.c parser_dependencies.c rd_cellhd.c whoami.c - area_poly2.c debug.c gisdbase.c ls_filter.c parser_help.c remove.c win32_pipes.c - area_sphere.c distance.c gisinit.c lz4.c parser_html.c rename.c wind_2_box.c - ascii_chk.c done_msg.c handler.c mach_name.c parser_interface.c rhumbline.c wind_format.c - asprintf.c endian.c home.c make_loc.c parser_rest.c rotate.c wind_in.c - basename.c env.c ilist.c make_mapset.c parser_script.c seek.c wind_limits.c - bres_line.c error.c intersect.c mapcase.c parser_standard_options.c set_window.c wind_overlap.c - clicker.c file_name.c is.c mapset.c parser_wps.c short_way.c wind_scan.c - cmprbzip.c find_etc.c key_value1.c mapset_msc.c paths.c sleep.c window_map.c - cmprlz4.c find_file.c key_value2.c mapset_nme.c percent.c snprintf.c worker.c - cmprrle.c find_rast.c key_value3.c mkstemp.c plot.c spawn.c wr_cellhd.c - cmprzlib.c find_rast3d.c key_value4.c myname.c pole_in_poly.c strings.c writ_zeros.c - color_rules.c find_vect.c legal_name.c named_colr.c popen.c tempfile.c xdr.c - color_str.c compress.c line_dist.c nl_to_spaces.c progrm_nme.c timestamp.c zero.c - commas.c geodesic.c list.c nme_in_mps.c proj1.c token.c zone.c - geodist.c ll_format.c open.c proj2.c trim_dec.c parser_json.c cmprzstd.c - compress.c - ) + adj_cellhd.c + aprintf.c + copy_dir.c + get_ellipse.c + ll_scan.c + open_misc.c + proj3.c + units.c + alloc.c + copy_file.c + get_projinfo.c + locale.c + overwrite.c + put_window.c + user_config.c + area.c + counter.c + get_window.c + location.c + pager.c + putenv.c + verbose.c + area_ellipse.c + date.c + getl.c + lrand48.c + parser.c + radii.c + view.c + area_poly1.c + datum.c + gisbase.c + ls.c + parser_dependencies.c + rd_cellhd.c + whoami.c + area_poly2.c + debug.c + gisdbase.c + ls_filter.c + parser_help.c + remove.c + win32_pipes.c + area_sphere.c + distance.c + gisinit.c + lz4.c + parser_html.c + rename.c + wind_2_box.c + ascii_chk.c + done_msg.c + handler.c + mach_name.c + parser_interface.c + rhumbline.c + wind_format.c + asprintf.c + endian.c + home.c + make_loc.c + parser_rest.c + rotate.c + wind_in.c + basename.c + env.c + ilist.c + make_mapset.c + parser_script.c + seek.c + wind_limits.c + bres_line.c + error.c + intersect.c + mapcase.c + parser_standard_options.c + set_window.c + wind_overlap.c + clicker.c + file_name.c + is.c + mapset.c + parser_wps.c + short_way.c + wind_scan.c + cmprbzip.c + find_etc.c + key_value1.c + mapset_msc.c + paths.c + sleep.c + window_map.c + cmprlz4.c + find_file.c + key_value2.c + mapset_nme.c + percent.c + snprintf.c + worker.c + cmprrle.c + find_rast.c + key_value3.c + mkstemp.c + plot.c + spawn.c + wr_cellhd.c + cmprzlib.c + find_rast3d.c + key_value4.c + myname.c + pole_in_poly.c + strings.c + writ_zeros.c + color_rules.c + find_vect.c + legal_name.c + named_colr.c + popen.c + tempfile.c + xdr.c + color_str.c + compress.c + line_dist.c + nl_to_spaces.c + progrm_nme.c + timestamp.c + zero.c + commas.c + geodesic.c + list.c + nme_in_mps.c + proj1.c + token.c + zone.c + geodist.c + ll_format.c + open.c + proj2.c + trim_dec.c + parser_json.c + cmprzstd.c + compress.c) if(MINGW) list(APPEND gislib_SRCS "fmode.c") @@ -33,36 +151,66 @@ if(MSVC) set(grass_gis_DEFS "${grass_gis_DEFS};-D_USE_MATH_DEFINES=1") endif() -build_module(NAME grass_gis SOURCES "${gislib_SRCS}" - DEPENDS grass_datetime ZLIB - OPTIONAL_DEPENDS PTHREAD BZIP2 ICONV POSTGRES - DEFS "${grass_gis_DEFS}" - ) +build_module( + NAME + grass_gis + SOURCES + "${gislib_SRCS}" + DEPENDS + grass_datetime + ZLIB + OPTIONAL_DEPENDS + PTHREAD + BZIP2 + ICONV + POSTGRES + DEFS + "${grass_gis_DEFS}") -add_custom_command(TARGET grass_gis POST_BUILD +add_custom_command( + TARGET grass_gis + POST_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/etc/proj - COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/colors ${GISBASE}/etc/colors/ - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/ellipse.table ${GISBASE}/etc/proj/ - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/datum.table ${GISBASE}/etc/proj/ - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/datumtransform.table ${GISBASE}/etc/proj/ - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/FIPS.code ${GISBASE}/etc/proj/ - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/state27 ${GISBASE}/etc/proj/ - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/state83 ${GISBASE}/etc/proj/ - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/projections ${GISBASE}/etc/proj/ - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/ellipse.table.solar.system ${GISBASE}/etc/proj/ - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/colors.desc ${GISBASE}/etc/ - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/renamed_options ${GISBASE}/etc/ - ) - install(DIRECTORY colors DESTINATION etc) - install(FILES ellipse.table ellipse.table.solar.system - datum.table datumtransform.table - FIPS.code state27 state83 projections DESTINATION etc/proj) - install(FILES colors.desc renamed_options DESTINATION etc) + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/colors + ${GISBASE}/etc/colors/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/ellipse.table + ${GISBASE}/etc/proj/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/datum.table + ${GISBASE}/etc/proj/ + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/datumtransform.table ${GISBASE}/etc/proj/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/FIPS.code + ${GISBASE}/etc/proj/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/state27 + ${GISBASE}/etc/proj/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/state83 + ${GISBASE}/etc/proj/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/projections + ${GISBASE}/etc/proj/ + COMMAND + ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/ellipse.table.solar.system ${GISBASE}/etc/proj/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/colors.desc + ${GISBASE}/etc/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/renamed_options + ${GISBASE}/etc/) +install(DIRECTORY colors DESTINATION etc) +install( + FILES ellipse.table + ellipse.table.solar.system + datum.table + datumtransform.table + FIPS.code + state27 + state83 + projections + DESTINATION etc/proj) +install(FILES colors.desc renamed_options DESTINATION etc) if(UNIX) target_link_libraries(grass_gis LIBM) endif() if(MSVC) -target_link_libraries(grass_gis PCRE) + target_link_libraries(grass_gis PCRE) endif() diff --git a/lib/init/CMakeLists.txt b/lib/init/CMakeLists.txt index fbf1355c622..2972f061d72 100644 --- a/lib/init/CMakeLists.txt +++ b/lib/init/CMakeLists.txt @@ -1,17 +1,16 @@ - # #for i18N support file(GLOB init_HTMLFILES "*.html") -#START_UP is the variable used in grass.py, grass.sh.in and grass.bat.in +# START_UP is the variable used in grass.py, grass.sh.in and grass.bat.in set(START_UP "grass${GRASS_VERSION_MAJOR}${GRASS_VERSION_MINOR}.py") if(WIN32) -set(script_file_name "grass.bat") + set(script_file_name "grass.bat") else() -set(script_file_name "grass.sh") + set(script_file_name "grass.sh") endif() -file(TO_NATIVE_PATH ${CMAKE_BINARY_DIR}/bin BINARY_DIR) +file(TO_NATIVE_PATH ${CMAKE_BINARY_DIR}/bin BINARY_DIR) set(CONFIG_PROJSHARE) get_filename_component(PROJ_INSTALL_PREFIX ${PROJ_INCLUDE_DIR} PATH) @@ -27,7 +26,7 @@ endif() file(TO_NATIVE_PATH "${PROJ_INSTALL_PREFIX}/share/proj" PROJ_LIB) file(TO_NATIVE_PATH ${CONFIG_PROJSHARE} GRASS_PROJSHARE) -find_path(gdal_share_dir "gdal" PATH_SUFFIXES share) +find_path(gdal_share_dir "gdal" PATH_SUFFIXES share) if(NOT gdal_share_dir) message(FATAL_ERROR "Cannot find share/gdal") endif() @@ -36,26 +35,26 @@ mark_as_advanced(gdal_share_dir) file(TO_NATIVE_PATH "${gdal_share_dir}/gdal" GDAL_DATA) if(MSVC) - find_path(geotiff_share_dir "epsg_csv" PATH_SUFFIXES share) + find_path(geotiff_share_dir "epsg_csv" PATH_SUFFIXES share) mark_as_advanced(geotiff_share_dir) if(geotiff_share_dir) file(TO_NATIVE_PATH "${geotiff_share_dir}/epsg_csv" GEOTIFF_CSV) else() message(FATAL_ERROR "Cannot find share/epsg_csv.") endif() -endif() #MSVC +endif() # MSVC get_filename_component(GDAL_DIR ${GDAL_LIBRARY} PATH) get_filename_component(GDAL_DIR ${GDAL_DIR} PATH) -file(TO_NATIVE_PATH ${GDAL_DIR}/bin DEPS_DLL_PATH) +file(TO_NATIVE_PATH ${GDAL_DIR}/bin DEPS_DLL_PATH) list(APPEND DLL_PATH_LIST ${DEPS_DLL_PATH}) file(TO_NATIVE_PATH ${Python_EXECUTABLE} GRASS_PYTHON) # For install tree (first do install tree) if(UNIX OR MINGW) - if( DEFINED ENV{LD_LIBRARY_PATH}) + if(DEFINED ENV{LD_LIBRARY_PATH}) set(LD_LIBRARY_PATH_VAR "${CMAKE_INSTALL_PREFIX}/lib:$ENV{LD_LIBRARY_PATH}") else() set(LD_LIBRARY_PATH_VAR "${CMAKE_INSTALL_PREFIX}/lib") @@ -66,7 +65,9 @@ if(WIN32) set(app_data_dir $ENV{APPDATA}) if(NOT EXISTS ${app_data_dir}) # this can happen with some strange settings - message(FATAL_ERROR "The APPDATA variable is not set, ask your operating system support") + message( + FATAL_ERROR + "The APPDATA variable is not set, ask your operating system support") endif() file(TO_NATIVE_PATH "${app_data_dir}/GRASS8" grass_config_dir) else() @@ -77,39 +78,41 @@ file(TO_NATIVE_PATH "${CMAKE_INSTALL_PREFIX}" gisbase_init_dir) message(STATUS "GISBASE (install) : ${gisbase_init_dir}") message(STATUS "grass config directory (install): ${grass_config_dir}") -#configure and install env.sh +# configure and install env.sh if(NOT MSVC) - configure_file(env.sh ${CMAKE_CURRENT_BINARY_DIR}/bashrc @ONLY) + configure_file(env.sh ${CMAKE_CURRENT_BINARY_DIR}/bashrc @ONLY) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/bashrc - DESTINATION ${grass_config_dir}) + DESTINATION ${grass_config_dir}) endif() -#configure and install grass.py +# configure and install grass.py configure_file(grass.py ${CMAKE_CURRENT_BINARY_DIR}/etc/${START_UP} @ONLY) install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/etc/${START_UP} DESTINATION etc) -#configure and install grass wrapper script (grass.bat or grass.sh -configure_file(${script_file_name}.in ${CMAKE_CURRENT_BINARY_DIR}/${script_file_name} @ONLY) -install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${script_file_name} DESTINATION bin) - +# configure and install grass wrapper script (grass.bat or grass.sh +configure_file(${script_file_name}.in + ${CMAKE_CURRENT_BINARY_DIR}/${script_file_name} @ONLY) +install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${script_file_name} + DESTINATION bin) # For build tree file(TO_NATIVE_PATH ${GISBASE} gisbase_init_dir) file(TO_NATIVE_PATH "${GISBASE}/etc/config" grass_config_dir) -configure_file(${script_file_name}.in ${GISBASE}/${script_file_name} @ONLY) -file(COPY ${CMAKE_SOURCE_DIR}/demolocation/PERMANENT DESTINATION ${GISBASE}/demolocation/) +configure_file(${script_file_name}.in ${GISBASE}/${script_file_name} @ONLY) +file(COPY ${CMAKE_SOURCE_DIR}/demolocation/PERMANENT + DESTINATION ${GISBASE}/demolocation/) configure_file(${CMAKE_SOURCE_DIR}/demolocation/grassrc.cmake.in -"${grass_config_dir}/rc" @ONLY) + "${grass_config_dir}/rc" @ONLY) -file(TO_NATIVE_PATH ${GISBASE}/bin grass_dll_dir) +file(TO_NATIVE_PATH ${GISBASE}/bin grass_dll_dir) set(DLL_PATH_LIST) list(APPEND DLL_PATH_LIST ${grass_dll_dir}) separate_arguments(DLL_PATH_LIST) set(LD_LIBRARY_PATH_VAR) if(UNIX OR MINGW) - if( DEFINED ENV{LD_LIBRARY_PATH}) + if(DEFINED ENV{LD_LIBRARY_PATH}) set(LD_LIBRARY_PATH_VAR "${GISBASE}/lib:$ENV{LD_LIBRARY_PATH}") else() set(LD_LIBRARY_PATH_VAR "${GISBASE}/lib") @@ -118,7 +121,7 @@ endif() message(STATUS "GISBASE (build) : ${gisbase_init_dir}") message(STATUS "grass config directory (build): ${grass_config_dir}") if(NOT MSVC) - configure_file(env.sh ${grass_config_dir}/bashrc @ONLY) + configure_file(env.sh ${grass_config_dir}/bashrc @ONLY) message(STATUS "env variables: ${GISBASE}/etc/config/bashrc") endif() @@ -126,43 +129,65 @@ configure_file(grass.py ${GISBASE}/etc/${START_UP} @ONLY) message(STATUS "Startup (build): ${GISBASE}/${script_file_name}") message(STATUS "gisrc (build): ${GISBASE}/etc/config/rc") -#finish installtree and buildtree configurations - - -build_program(NAME echo - SOURCES echo.c - PACKAGE "grasslibs" - RUNTIME_OUTPUT_DIR etc) - -build_program(NAME run - SOURCES run.c - PACKAGE "grasslibs" - RUNTIME_OUTPUT_DIR etc) - -build_program(NAME clean_temp - SOURCES clean_temp.c - DEPENDS grass_gis - PACKAGE "grasslibs" - RUNTIME_OUTPUT_DIR etc) - -build_program(NAME lock - SOURCES lock.c - DEPENDS grass_gis grass_datetime - PACKAGE "grasslibs" - RUNTIME_OUTPUT_DIR etc) +# finish installtree and buildtree configurations + +build_program( + NAME + echo + SOURCES + echo.c + PACKAGE + "grasslibs" + RUNTIME_OUTPUT_DIR + etc) + +build_program( + NAME + run + SOURCES + run.c + PACKAGE + "grasslibs" + RUNTIME_OUTPUT_DIR + etc) + +build_program( + NAME + clean_temp + SOURCES + clean_temp.c + DEPENDS + grass_gis + PACKAGE + "grasslibs" + RUNTIME_OUTPUT_DIR + etc) + +build_program( + NAME + lock + SOURCES + lock.c + DEPENDS + grass_gis + grass_datetime + PACKAGE + "grasslibs" + RUNTIME_OUTPUT_DIR + etc) if(MINGW) -build_program(NAME winlocale - SOURCES winlocale.c - RUNTIME_OUTPUT_DIR etc) + build_program(NAME winlocale SOURCES winlocale.c RUNTIME_OUTPUT_DIR etc) 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 ${CMAKE_BINARY_DIR}/gisbase/etc/VERSIONNUMBER "${VERSIONNUMBER_CONTENTS}") +file(WRITE ${CMAKE_BINARY_DIR}/gisbase/etc/VERSIONNUMBER + "${VERSIONNUMBER_CONTENTS}") install(FILES ${CMAKE_BINARY_DIR}/gisbase/etc/VERSIONNUMBER DESTINATION etc) configure_file(license.txt.in ${CMAKE_BINARY_DIR}/gisbase/etc/license) @@ -174,5 +199,5 @@ install(FILES ${CMAKE_BINARY_DIR}/gisbase/etc/echo DESTINATION etc) install(FILES ${CMAKE_BINARY_DIR}/gisbase/etc/run DESTINATION etc) install(FILES ${CMAKE_BINARY_DIR}/gisbase/etc/clean_temp DESTINATION etc) if(MINGW) -install(FILES ${CMAKE_BINARY_DIR}/gisbase/etc/winlocale DESTINATION etc) + install(FILES ${CMAKE_BINARY_DIR}/gisbase/etc/winlocale DESTINATION etc) endif() diff --git a/lib/proj/CMakeLists.txt b/lib/proj/CMakeLists.txt index 6481331b3a4..bf80e1ddd6c 100644 --- a/lib/proj/CMakeLists.txt +++ b/lib/proj/CMakeLists.txt @@ -2,13 +2,20 @@ file(COPY desc.table DESTINATION etc/proj) file(COPY parms.table DESTINATION etc/proj) file(COPY units.table DESTINATION etc/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") endif() -build_module(NAME grass_gproj - DEPENDS grass_driver GDAL ZLIB PROJ - SOURCES "${grass_gproj_SOURCES}" - INCLUDES "../driver") +build_module( + NAME + grass_gproj + DEPENDS + grass_driver + GDAL + ZLIB + PROJ + SOURCES + "${grass_gproj_SOURCES}" + INCLUDES + "../driver") diff --git a/lib/rst/CMakeLists.txt b/lib/rst/CMakeLists.txt index c99042b3917..89b90562cf9 100644 --- a/lib/rst/CMakeLists.txt +++ b/lib/rst/CMakeLists.txt @@ -1,20 +1,34 @@ -#add_subdirectory(data) -#add_subdirectory(qtree) -#add_subdirectory(interp_float) +# add_subdirectory(data) add_subdirectory(qtree) add_subdirectory(interp_float) -build_library_in_subdir(data - NAME grass_interpdata - DEPENDS grass_gis - HEADERS "dataquad.h") +build_library_in_subdir( + data + NAME + grass_interpdata + DEPENDS + grass_gis + HEADERS + "dataquad.h") -build_library_in_subdir(qtree - NAME grass_qtree - DEPENDS grass_gis - HEADERS "qtree.h") - - -build_library_in_subdir(interp_float - NAME grass_interpfl - DEPENDS GEOS grass_gis grass_raster grass_bitmap grass_vector grass_qtree grass_interpdata - HEADERS "interpf.h") +build_library_in_subdir( + qtree + NAME + grass_qtree + DEPENDS + grass_gis + HEADERS + "qtree.h") +build_library_in_subdir( + interp_float + NAME + grass_interpfl + DEPENDS + GEOS + grass_gis + grass_raster + grass_bitmap + grass_vector + grass_qtree + grass_interpdata + HEADERS + "interpf.h") diff --git a/lib/temporal/CMakeLists.txt b/lib/temporal/CMakeLists.txt index 8b1873bdf4f..25617170411 100644 --- a/lib/temporal/CMakeLists.txt +++ b/lib/temporal/CMakeLists.txt @@ -2,4 +2,5 @@ file(GLOB SQLFILES "SQL/*.sql") foreach(sqlfile ${SQLFILES}) install(FILES "${sqlfile}" DESTINATION etc/sql) endforeach() -build_library_in_subdir(lib NAME grass_temporal DEPENDS grass_dbmibase grass_datetime) +build_library_in_subdir(lib NAME grass_temporal DEPENDS grass_dbmibase + grass_datetime) diff --git a/lib/vector/CMakeLists.txt b/lib/vector/CMakeLists.txt index 8dd910f8ab5..be283864fd9 100644 --- a/lib/vector/CMakeLists.txt +++ b/lib/vector/CMakeLists.txt @@ -1,18 +1,25 @@ -#TODO: docs vectorascii -# PGM = vectorascii +# TODO: docs vectorascii PGM = vectorascii build_library_in_subdir(rtree HEADERS "rtree.h" DEPENDS grass_gis) add_subdirectory(dglib) add_subdirectory(diglib) -build_library_in_subdir(Vlib - NAME grass_vector - DEPENDS grass_gis grass_raster grass_rtree - grass_graph grass_dig2 grass_dbmibase - grass_btree2 grass_dbmiclient - grass_linkm grass_gproj - ) +build_library_in_subdir( + Vlib + NAME + grass_vector + DEPENDS + grass_gis + grass_raster + grass_rtree + grass_graph + grass_dig2 + grass_dbmibase + grass_btree2 + grass_dbmiclient + grass_linkm + grass_gproj) if(TARGET POSTGRES) target_link_libraries(grass_vector POSTGRES) diff --git a/lib/vector/dglib/CMakeLists.txt b/lib/vector/dglib/CMakeLists.txt index 8c6fe422c1a..b342cc4a95b 100644 --- a/lib/vector/dglib/CMakeLists.txt +++ b/lib/vector/dglib/CMakeLists.txt @@ -6,51 +6,41 @@ # LIB = GRAPH -# include $(MODULE_TOPDIR)/include/Make/Lib.make -# include $(MODULE_TOPDIR)/include/Make/Doxygen.make +# include $(MODULE_TOPDIR)/include/Make/Lib.make include +# $(MODULE_TOPDIR)/include/Make/Doxygen.make # DGLINC = $(ARCH_INCDIR)/dgl -# default: headers -# $(MAKE) lib +# default: headers $(MAKE) lib # headers: $(DGLINC)/avl.h $(DGLINC)/tavl.h $(DGLINC)/graph.h $(DGLINC)/heap.h \ -# $(DGLINC)/tree.h $(DGLINC)/type.h $(DGLINC)/helpers.h $(DGLINC)/graph_v1.h $(DGLINC)/graph_v2.h \ -# $(ARCH_INCDIR)/dgl.h +# $(DGLINC)/tree.h $(DGLINC)/type.h $(DGLINC)/helpers.h $(DGLINC)/graph_v1.h +# $(DGLINC)/graph_v2.h \ $(ARCH_INCDIR)/dgl.h -# $(DGLINC)/%.h: %.h | $(DGLINC) -# $(INSTALL_DATA) $< $@ +# $(DGLINC)/%.h: %.h | $(DGLINC) $(INSTALL_DATA) $< $@ set(DGL_headers - avl.h - tavl.h - graph.h - heap.h - tree.h - type.h - helpers.h - graph_v1.h - graph_v2.h -) + avl.h + tavl.h + graph.h + heap.h + tree.h + type.h + helpers.h + graph_v1.h + graph_v2.h) foreach(DGL_header ${DGL_headers}) - file(COPY ${DGL_header} DESTINATION ${CMAKE_BINARY_DIR}/include/grass/dgl) + file(COPY ${DGL_header} DESTINATION ${CMAKE_BINARY_DIR}/include/grass/dgl) endforeach() set(graphlib_SRCS - avl.c - graph.c - graph_v2.c - helpers.c - tree.c - graph_v1.c - heap.c - tavl.c - ) - -build_module( - NAME grass_graph - SOURCES "${graphlib_SRCS}" - HEADERS "dgl.h" - ) - - + avl.c + graph.c + graph_v2.c + helpers.c + tree.c + graph_v1.c + heap.c + tavl.c) + +build_module(NAME grass_graph SOURCES "${graphlib_SRCS}" HEADERS "dgl.h") diff --git a/lib/vector/diglib/CMakeLists.txt b/lib/vector/diglib/CMakeLists.txt index 683df73557c..68421116cef 100644 --- a/lib/vector/diglib/CMakeLists.txt +++ b/lib/vector/diglib/CMakeLists.txt @@ -1,8 +1,38 @@ set(dig2_SRCS -allocation.c cindex.c frmt.c line_dist.c plus.c plus_node.c port_init.c prune.c struct_alloc.c update.c -angle.c cindex_rw.c head.c linecros.c plus_area.c plus_struct.c spindex.c -box.c file.c inside.c list.c plus_line.c poly.c portable.c spindex_rw.c type.c -) -build_module(NAME grass_dig2 - SOURCES ${dig2_SRCS} - DEPENDS GDAL GEOS grass_gmath grass_gis grass_rtree) + allocation.c + cindex.c + frmt.c + line_dist.c + plus.c + plus_node.c + port_init.c + prune.c + struct_alloc.c + update.c + angle.c + cindex_rw.c + head.c + linecros.c + plus_area.c + plus_struct.c + spindex.c + box.c + file.c + inside.c + list.c + plus_line.c + poly.c + portable.c + spindex_rw.c + type.c) +build_module( + NAME + grass_dig2 + SOURCES + ${dig2_SRCS} + DEPENDS + GDAL + GEOS + grass_gmath + grass_gis + grass_rtree) diff --git a/lib/vector/neta/CMakeLists.txt b/lib/vector/neta/CMakeLists.txt index 4d97bf911f7..fc8fb495b5b 100644 --- a/lib/vector/neta/CMakeLists.txt +++ b/lib/vector/neta/CMakeLists.txt @@ -2,23 +2,24 @@ # LIB = NETA -# LIBES = $(VECTORLIB) $(DBMILIB) $(GISLIB) $(GRAPHLIB) -# DEPENDENCIES= $(VECTORDEP) $(DBMIDEP) $(GISDEP) -# EXTRA_INC = $(VECT_INC) -# EXTRA_CFLAGS = $(VECT_CFLAGS) +# LIBES = $(VECTORLIB) $(DBMILIB) $(GISLIB) $(GRAPHLIB) DEPENDENCIES= +# $(VECTORDEP) $(DBMIDEP) $(GISDEP) EXTRA_INC = $(VECT_INC) EXTRA_CFLAGS = +# $(VECT_CFLAGS) -# include $(MODULE_TOPDIR)/include/Make/Lib.make -# include $(MODULE_TOPDIR)/include/Make/Doxygen.make +# include $(MODULE_TOPDIR)/include/Make/Lib.make include +# $(MODULE_TOPDIR)/include/Make/Doxygen.make # default: lib # DOXNAME=neta -build_module(NAME grass_neta -DEPENDS GDAL GEOS -grass_dbmiclient -grass_gis -grass_graph -grass_vector -) - +build_module( + NAME + grass_neta + DEPENDS + GDAL + GEOS + grass_dbmiclient + grass_gis + grass_graph + grass_vector) diff --git a/lib/vector/vedit/CMakeLists.txt b/lib/vector/vedit/CMakeLists.txt index f48250ec31f..936f64dbcd0 100644 --- a/lib/vector/vedit/CMakeLists.txt +++ b/lib/vector/vedit/CMakeLists.txt @@ -4,18 +4,13 @@ # DEPENDENCIES = $(VECTORDEP) $(GISDEP) -# EXTRA_INC = $(VECT_INC) -# EXTRA_CFLAGS = $(VECT_CFLAGS) +# EXTRA_INC = $(VECT_INC) EXTRA_CFLAGS = $(VECT_CFLAGS) -# include $(MODULE_TOPDIR)/include/Make/Lib.make -# include $(MODULE_TOPDIR)/include/Make/Doxygen.make +# include $(MODULE_TOPDIR)/include/Make/Lib.make include +# $(MODULE_TOPDIR)/include/Make/Doxygen.make # default: lib -# # doxygen -# DOXNAME=vedit - - -build_module(NAME grass_vedit - DEPENDS grass_vector GDAL GEOS) +# # doxygen DOXNAME=vedit +build_module(NAME grass_vedit DEPENDS grass_vector GDAL GEOS) diff --git a/man/CMakeLists.txt b/man/CMakeLists.txt index d5137a06571..096432ea764 100644 --- a/man/CMakeLists.txt +++ b/man/CMakeLists.txt @@ -1,5 +1,6 @@ - -set(data_files grassdocs.css grass_logo.png grass_icon.png jquery.fixedheadertable.min.js parser_standard_options.js parser_standard_options.css) +set(data_files + grassdocs.css grass_logo.png grass_icon.png jquery.fixedheadertable.min.js + parser_standard_options.js parser_standard_options.css) file(COPY ${data_files} DESTINATION docs/html) install(FILES ${data_files} DESTINATION docs/html) diff --git a/misc/CMakeLists.txt b/misc/CMakeLists.txt index 9298252633e..739c47f6ddf 100644 --- a/misc/CMakeLists.txt +++ b/misc/CMakeLists.txt @@ -1,23 +1,12 @@ +build_program_in_subdir(m.cogo DEPENDS grass_gis) -build_program_in_subdir( - m.cogo - DEPENDS grass_gis) +build_program_in_subdir(m.measure DEPENDS grass_gis) -build_program_in_subdir( - m.measure - DEPENDS grass_gis) - -build_program_in_subdir( - m.transform - DEPENDS grass_gis grass_imagery grass_raster grass_vector) +build_program_in_subdir(m.transform DEPENDS grass_gis grass_imagery + grass_raster grass_vector) if(WITH_OPENGL) -build_program_in_subdir( - m.nviz.image - DEPENDS grass_gis grass_ogsf grass_nviz) + build_program_in_subdir(m.nviz.image DEPENDS grass_gis grass_ogsf grass_nviz) -build_program_in_subdir( - m.nviz.script - DEPENDS grass_gis grass_ogsf grass_nviz) + build_program_in_subdir(m.nviz.script DEPENDS grass_gis grass_ogsf grass_nviz) endif(WITH_OPENGL) - diff --git a/ps/CMakeLists.txt b/ps/CMakeLists.txt index 8b2c821da55..3c1ff397433 100644 --- a/ps/CMakeLists.txt +++ b/ps/CMakeLists.txt @@ -1,4 +1,11 @@ build_program_in_subdir( ps.map - DEPENDS grass_gis grass_raster grass_gmath grass_gproj grass_imagery grass_vector grass_dbmibase grass_sym) - + DEPENDS + grass_gis + grass_raster + grass_gmath + grass_gproj + grass_imagery + grass_vector + grass_dbmibase + grass_sym) diff --git a/python/grass/CMakeLists.txt b/python/grass/CMakeLists.txt index 9e17736cae3..f7aad47ce65 100644 --- a/python/grass/CMakeLists.txt +++ b/python/grass/CMakeLists.txt @@ -1,4 +1,3 @@ - copy_python_files_in_subdir(exceptions etc/python/grass) copy_python_files_in_subdir(gunittest etc/python/grass) copy_python_files_in_subdir(grassdb etc/python/grass) @@ -20,27 +19,43 @@ copy_python_files_in_subdir(pygrass/rpc etc/python/grass) copy_python_files_in_subdir(pygrass/modules/interface etc/python/grass) copy_python_files_in_subdir(pygrass/modules/grid etc/python/grass) - configure_file(script/setup.py - ${CMAKE_BINARY_DIR}/etc/python/grass/script/setup.py - COPYONLY) + ${CMAKE_BINARY_DIR}/etc/python/grass/script/setup.py COPYONLY) -add_custom_target(LIB_PYTHON - COMMAND ${CMAKE_COMMAND} -E echo "#coding=utf-8" > ${GISBASE}/etc/python/__init__.py - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/__init__.py ${GISBASE}/etc/python/grass/ - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/etc/python/grass/script/setup.py ${GISBASE}/etc/python/grass/script/ - VERBATIM - DEPENDS python_exceptions python_grassdb python_imaging python_pydispatch python_script python_semantic_label python_temporal - python_utils - python_pygrass python_pygrass_messages python_pygrass_modules python_pygrass_modules - python_pygrass_raster python_pygrass_vector python_pygrass_gis python_pygrass_shell - python_pygrass_tests python_pygrass_rpc - python_pygrass_modules_interface - python_pygrass_modules_grid) +add_custom_target( + LIB_PYTHON + COMMAND ${CMAKE_COMMAND} -E echo "#coding=utf-8" > + ${GISBASE}/etc/python/__init__.py + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/__init__.py + ${GISBASE}/etc/python/grass/ + COMMAND + ${CMAKE_COMMAND} -E copy + ${CMAKE_BINARY_DIR}/etc/python/grass/script/setup.py + ${GISBASE}/etc/python/grass/script/ + VERBATIM + DEPENDS python_exceptions + python_grassdb + python_imaging + python_pydispatch + python_script + python_semantic_label + python_temporal + python_utils + python_pygrass + python_pygrass_messages + python_pygrass_modules + python_pygrass_modules + python_pygrass_raster + python_pygrass_vector + python_pygrass_gis + python_pygrass_shell + python_pygrass_tests + python_pygrass_rpc + python_pygrass_modules_interface + python_pygrass_modules_grid) -#TODO: MODULES DISABLED -# add_subdirectory(ctypes) +# TODO: MODULES DISABLED add_subdirectory(ctypes) -set_target_properties (LIB_PYTHON PROPERTIES FOLDER lib) +set_target_properties(LIB_PYTHON PROPERTIES FOLDER lib) install(DIRECTORY ${GISBASE}/etc/python/grass DESTINATION etc/python/grass/) diff --git a/python/grass/pygrass/CMakeLists.txt b/python/grass/pygrass/CMakeLists.txt index 2606bd39571..da001607086 100644 --- a/python/grass/pygrass/CMakeLists.txt +++ b/python/grass/pygrass/CMakeLists.txt @@ -1,24 +1,26 @@ -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) +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) - build_pymodule_in_subdir(messages etc/python/grass/pygrass) +build_pymodule_in_subdir(messages etc/python/grass/pygrass) - build_pymodule_in_subdir(modules etc/python/grass/pygrass) +build_pymodule_in_subdir(modules etc/python/grass/pygrass) - build_pymodule_in_subdir(modules/interface etc/python/grass/pygrass/modules) +build_pymodule_in_subdir(modules/interface etc/python/grass/pygrass/modules) - build_pymodule_in_subdir(modules/grid etc/python/grass/pygrass/modules) +build_pymodule_in_subdir(modules/grid etc/python/grass/pygrass/modules) - build_pymodule_in_subdir(raster etc/python/grass/pygrass) +build_pymodule_in_subdir(raster etc/python/grass/pygrass) - build_pymodule_in_subdir(vector etc/python/grass/pygrass) +build_pymodule_in_subdir(vector etc/python/grass/pygrass) - build_pymodule_in_subdir(gis etc/python/grass/pygrass) +build_pymodule_in_subdir(gis etc/python/grass/pygrass) - build_pymodule_in_subdir(shell etc/python/grass/pygrass) +build_pymodule_in_subdir(shell etc/python/grass/pygrass) - build_pymodule_in_subdir(tests etc/python/grass/pygrass) +build_pymodule_in_subdir(tests etc/python/grass/pygrass) - build_pymodule_in_subdir(rpc etc/python/grass/pygrass) +build_pymodule_in_subdir(rpc etc/python/grass/pygrass) diff --git a/python/libgrass_interface_generator/CMakeLists.txt b/python/libgrass_interface_generator/CMakeLists.txt index 574651c9198..c1c906b119c 100644 --- a/python/libgrass_interface_generator/CMakeLists.txt +++ b/python/libgrass_interface_generator/CMakeLists.txt @@ -1,42 +1,57 @@ set(MODULES - date gis raster gmath proj imagery vector rtree display - stats dbmi raster3d arraystats cluster vedit segment rowio temporal) + date + gis + raster + gmath + proj + imagery + vector + rtree + display + stats + dbmi + raster3d + arraystats + cluster + vedit + segment + rowio + temporal) if(WITH_OPENGL) list(APPEND MODULES ogsf nviz) endif() -set(date_HDRS datetime.h defs/datetime.h) -set(date_LIBS grass_datetime) -set(date_TARGET_NAME grass_datetime_py) +set(date_HDRS datetime.h defs/datetime.h) +set(date_LIBS grass_datetime) +set(date_TARGET_NAME grass_datetime_py) -set(gis_HDRS gis.h defs/gis.h colors.h defs/colors.h) -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(display_HDRS display.h defs/display.h ) -set(dbmi_HDRS dbmi.h defs/dbmi.h ) -set(dbmi_LIBS grass_dbmibase grass_dbmiclient ) -set(arraystats_HDRS arraystats.h defs/arraystats.h ) -set(vedit_HDRS vedit.h defs/vedit.h) -set(nviz_HDRS nviz.h defs/nviz.h) -set(rowio_HDRS rowio.h defs/rowio.h) -set(temporal_HDRS temporal.h) -set(ogsf_HDRS ogsf.h defs/ogsf.h) -set(segment_HDRS segment.h defs/segment.h) -set(imagery_HDRS imagery.h defs/imagery.h ) -set(rtree_HDRS rtree.h) -set(stats_HDRS stats.h defs/stats.h) -set(raster3d_HDRS raster3d.h defs/raster3d.h) -set(cluster_HDRS cluster.h defs/cluster.h) +set(gis_HDRS gis.h defs/gis.h colors.h defs/colors.h) +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(display_HDRS display.h defs/display.h) +set(dbmi_HDRS dbmi.h defs/dbmi.h) +set(dbmi_LIBS grass_dbmibase grass_dbmiclient) +set(arraystats_HDRS arraystats.h defs/arraystats.h) +set(vedit_HDRS vedit.h defs/vedit.h) +set(nviz_HDRS nviz.h defs/nviz.h) +set(rowio_HDRS rowio.h defs/rowio.h) +set(temporal_HDRS temporal.h) +set(ogsf_HDRS ogsf.h defs/ogsf.h) +set(segment_HDRS segment.h defs/segment.h) +set(imagery_HDRS imagery.h defs/imagery.h) +set(rtree_HDRS rtree.h) +set(stats_HDRS stats.h defs/stats.h) +set(raster3d_HDRS raster3d.h defs/raster3d.h) +set(cluster_HDRS cluster.h defs/cluster.h) -#TODO -# set(VECT_INC ${PQINCPATH} ) -# set(proj_INC "${PROJ_INCLUDE_DIR}") -# set(vector_INC "${PQINCPATH};${GDAL_INCLUDE_DIR}") -# set(vedit_INC "${GDAL_INCLUDE_DIR}") +# TODO set(VECT_INC ${PQINCPATH} ) set(proj_INC "${PROJ_INCLUDE_DIR}") +# set(vector_INC "${PQINCPATH};${GDAL_INCLUDE_DIR}") set(vedit_INC +# "${GDAL_INCLUDE_DIR}") foreach(module ${MODULES}) if(NOT ${module}_LIBS) @@ -47,8 +62,8 @@ foreach(module ${MODULES}) message(FATAL_ERROR "${module}_HDRS is not set") endif() - foreach(${module}_LIB ${${module}_LIBS}) - if(NOT TARGET ${${module}_LIB} ) + foreach(${module}_LIB ${${module}_LIBS}) + if(NOT TARGET ${${module}_LIB}) message(FATAL_ERROR "${${module}_LIB} is not a target") endif() endforeach() @@ -64,23 +79,20 @@ foreach(module ${MODULES}) set(output_file "${GISBASE}/etc/python/grass/lib/${module}.py") - add_custom_command(OUTPUT ${output_file} + 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} - -DBIN_DIR=${GISBASE} - -DHDRS=${${module}_HDRS} - -DLIBS=${${module}_LIBS} - -DOUT_FILE=${output_file} - -DGRASS_VERSION_NUMBER=${GRASS_VERSION_NUMBER} - -P ${CMAKE_SOURCE_DIR}/cmake/ctypesgen.cmake - COMMENT "Generating ${output_file}" - VERBATIM) + COMMAND + ${CMAKE_COMMAND} -DCTYPESGEN_PY=${CMAKE_CURRENT_SOURCE_DIR}/run.py + -DPython_EXECUTABLE=${Python_EXECUTABLE} -DCOMPILER=${CMAKE_C_COMPILER} + -DBIN_DIR=${GISBASE} -DHDRS=${${module}_HDRS} -DLIBS=${${module}_LIBS} + -DOUT_FILE=${output_file} -DGRASS_VERSION_NUMBER=${GRASS_VERSION_NUMBER} + -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 lib/python) + set_target_properties(${${module}_TARGET_NAME} PROPERTIES FOLDER lib/python) install(FILES ${output_file} DESTINATION etc/python/grass/lib) endforeach() diff --git a/raster/CMakeLists.txt b/raster/CMakeLists.txt index 905104d86aa..5c583a6cafd 100644 --- a/raster/CMakeLists.txt +++ b/raster/CMakeLists.txt @@ -1,437 +1,282 @@ -build_program_in_subdir( - r.basins.fill - DEPENDS grass_gis grass_raster ) +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) +build_program_in_subdir(r.buildvrt DEPENDS grass_gis grass_raster grass_gmath) -build_program_in_subdir( - r.buffer - DEPENDS grass_gis grass_raster ) +build_program_in_subdir(r.buffer DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.carve - DEPENDS grass_gis grass_raster grass_vector grass_bitmap) +build_program_in_subdir(r.carve DEPENDS grass_gis grass_raster grass_vector + grass_bitmap) -build_program_in_subdir( - r.category - DEPENDS grass_gis grass_raster ) +build_program_in_subdir(r.category DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.circle - DEPENDS grass_gis grass_raster ) +build_program_in_subdir(r.circle DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.clump - DEPENDS grass_gis grass_raster grass_btree2) +build_program_in_subdir(r.clump DEPENDS grass_gis grass_raster grass_btree2) -build_program_in_subdir( -r.coin - DEPENDS grass_gis grass_raster ) +build_program_in_subdir(r.coin DEPENDS grass_gis grass_raster) add_subdirectory(r.colors) add_subdirectory(r.colors.out) -build_program_in_subdir( - r.composite - DEPENDS grass_gis grass_raster ) +build_program_in_subdir(r.composite DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.compress - DEPENDS grass_gis grass_raster ) +build_program_in_subdir(r.compress DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.contour - DEPENDS grass_gis grass_raster grass_vector) +build_program_in_subdir(r.contour DEPENDS grass_gis grass_raster grass_vector) -build_program_in_subdir( - r.cost - DEPENDS grass_gis grass_raster grass_segment grass_vector) +build_program_in_subdir(r.cost DEPENDS grass_gis grass_raster grass_segment + grass_vector) -build_program_in_subdir( - r.covar - DEPENDS grass_gis grass_raster ) +build_program_in_subdir(r.covar DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.cross - DEPENDS grass_gis grass_raster grass_btree grass_btree2) +build_program_in_subdir(r.cross DEPENDS grass_gis grass_raster grass_btree + grass_btree2) -build_program_in_subdir( - r.describe - DEPENDS grass_gis grass_raster ) +build_program_in_subdir(r.describe DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.distance - DEPENDS grass_gis grass_raster ) +build_program_in_subdir(r.distance DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.drain - DEPENDS grass_gis grass_raster grass_vector) +build_program_in_subdir(r.drain DEPENDS grass_gis grass_raster grass_vector) -build_program_in_subdir( - r.external - DEPENDS grass_gis grass_raster grass_imagery grass_gproj) +build_program_in_subdir(r.external DEPENDS grass_gis grass_raster grass_imagery + grass_gproj) -build_program_in_subdir( - r.external.out - DEPENDS grass_gis grass_raster ) +build_program_in_subdir(r.external.out DEPENDS grass_gis grass_raster) - build_program_in_subdir( - r.fill.dir - DEPENDS grass_gis grass_raster ) +build_program_in_subdir(r.fill.dir DEPENDS grass_gis grass_raster) - build_program_in_subdir( - r.fill.stats - DEPENDS grass_gis grass_raster ) +build_program_in_subdir(r.fill.stats DEPENDS grass_gis grass_raster) build_program_in_subdir( r.flow - DEPENDS grass_gis grass_raster grass_segment grass_vector grass_bitmap) + DEPENDS + grass_gis + grass_raster + grass_segment + grass_vector + grass_bitmap) build_program_in_subdir(r.geomorphon DEPENDS grass_gis grass_raster grass_gmath) -build_program_in_subdir( - r.grow.distance - DEPENDS grass_gis grass_raster ) +build_program_in_subdir(r.grow.distance DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.gwflow - DEPENDS grass_gis grass_raster grass_gpde) +build_program_in_subdir(r.gwflow DEPENDS grass_gis grass_raster grass_gpde) -build_program_in_subdir( - r.his - DEPENDS grass_gis grass_raster grass_gproj) +build_program_in_subdir(r.his DEPENDS grass_gis grass_raster grass_gproj) -build_program_in_subdir( - r.horizon - DEPENDS grass_gis grass_raster grass_gproj) +build_program_in_subdir(r.horizon DEPENDS grass_gis grass_raster grass_gproj) -build_program_in_subdir( - r.in.ascii - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.in.ascii DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.in.bin - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.in.bin DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.in.gdal - DEPENDS grass_gis grass_raster grass_gproj grass_imagery) +build_program_in_subdir(r.in.gdal DEPENDS grass_gis grass_raster grass_gproj + grass_imagery) -build_program_in_subdir( - r.in.gridatb - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.in.gridatb DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.in.mat - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.in.mat DEPENDS grass_gis grass_raster) 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 - PRIMARY_DEPENDS PDAL) - -build_program_in_subdir( - r.in.png - DEPENDS grass_gis grass_raster LIBPNG) - -build_program_in_subdir( - r.in.poly - DEPENDS grass_gis grass_raster) + SOURCES + "${r_in_pdal_SOURCES}" + DEPENDS + grass_gis + grass_raster + grass_vector + grass_gmath + grass_segment + grass_gproj + PRIMARY_DEPENDS + PDAL) + +build_program_in_subdir(r.in.png DEPENDS grass_gis grass_raster LIBPNG) + +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) + build_program_in_subdir(r.in.xyz DEPENDS grass_gis grass_raster) endif() -build_program_in_subdir( - r.info - TEST_SOURCES "test_r_info.py" - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.info TEST_SOURCES "test_r_info.py" DEPENDS grass_gis + grass_raster) -build_program_in_subdir( - r.kappa - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.kappa DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.latlong - DEPENDS grass_gis grass_raster grass_gproj) +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.lake DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.mfilter - DEPENDS grass_gis grass_raster grass_rowio) +build_program_in_subdir(r.mfilter DEPENDS grass_gis grass_raster grass_rowio) -build_program_in_subdir( - r.mode - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.mode DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.neighbors - DEPENDS grass_gis grass_raster grass_stats) +build_program_in_subdir(r.neighbors DEPENDS grass_gis grass_raster grass_stats) -build_program_in_subdir( - r.null - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.null DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.object.geometry - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.object.geometry DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.out.ascii - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.out.ascii DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.out.bin - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.out.bin DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.out.gdal - DEPENDS grass_gis grass_raster grass_dbmibase grass_imagery) +build_program_in_subdir(r.out.gdal DEPENDS grass_gis grass_raster + grass_dbmibase grass_imagery) -set_source_files_properties(r.out.gdal/main.c +set_source_files_properties( + r.out.gdal/main.c PROPERTIES COMPILE_DEFINITIONS - "GRASS_VERSION_NUMBER=\"${GRASS_VERSION_NUMBER}\"" - ) + "GRASS_VERSION_NUMBER=\"${GRASS_VERSION_NUMBER}\"") - build_program_in_subdir( - r.out.gridatb - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.out.gridatb DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.out.mat - DEPENDS grass_gis grass_raster) +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.mpeg DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.out.png - DEPENDS grass_gis grass_raster LIBPNG) +build_program_in_subdir(r.out.png DEPENDS grass_gis grass_raster LIBPNG) -build_program_in_subdir( - r.out.pov - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.out.pov DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.out.ppm - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.out.ppm DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.out.ppm3 - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.out.ppm3 DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.out.vrml - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.out.vrml DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.out.vtk - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.out.vtk DEPENDS grass_gis grass_raster) build_program_in_subdir( r.param.scale - DEPENDS grass_gis grass_raster grass_interpfl - grass_interpdata grass_qtree ) + DEPENDS + grass_gis + grass_raster + grass_interpfl + grass_interpdata + grass_qtree) -build_program_in_subdir( - r.patch - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.patch DEPENDS grass_gis grass_raster) build_program_in_subdir(r.path DEPENDS grass_gis grass_raster grass_vector) -build_program_in_subdir( - r.profile - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.profile DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.proj - DEPENDS grass_gis grass_raster grass_gproj) +build_program_in_subdir(r.proj DEPENDS grass_gis grass_raster grass_gproj) -build_program_in_subdir( - r.quant - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.quant DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.quantile - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.quantile DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.random - DEPENDS grass_gis grass_raster grass_vector) +build_program_in_subdir(r.random DEPENDS grass_gis grass_raster grass_vector) -build_program_in_subdir( - r.random.cells - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.random.cells DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.random.surface - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.random.surface DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.reclass - DEPENDS grass_gis grass_raster grass_manage ) +build_program_in_subdir(r.reclass DEPENDS grass_gis grass_raster grass_manage) -build_program_in_subdir( - r.recode - DEPENDS grass_gis grass_raster) +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.region DEPENDS grass_gis grass_raster grass_vector) -build_program_in_subdir( - r.regression.line - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.regression.line DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.regression.multi - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.regression.multi DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.report - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.report DEPENDS grass_gis grass_raster) build_program_in_subdir( r.resamp.bspline - DEPENDS grass_gis grass_raster grass_vector grass_segment grass_lidar) + DEPENDS + grass_gis + grass_raster + grass_vector + grass_segment + grass_lidar) -build_program_in_subdir( - r.resamp.filter - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.resamp.filter DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.resamp.interp - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.resamp.interp DEPENDS grass_gis grass_raster) build_program_in_subdir( r.resamp.rst - DEPENDS grass_gis grass_raster grass_interpfl grass_interpdata grass_qtree) + DEPENDS + grass_gis + grass_raster + grass_interpfl + grass_interpdata + grass_qtree) -build_program_in_subdir( - r.resamp.stats - DEPENDS grass_gis grass_raster grass_stats) +build_program_in_subdir(r.resamp.stats DEPENDS grass_gis grass_raster + grass_stats) -build_program_in_subdir( - r.resample - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.resample DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.rescale - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.rescale DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.rescale.eq - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.rescale.eq DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.ros - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.ros DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.series - DEPENDS grass_gis grass_raster grass_stats ) +build_program_in_subdir(r.series DEPENDS grass_gis grass_raster grass_stats) -build_program_in_subdir( - r.series.accumulate - DEPENDS grass_gis grass_raster grass_stats ) +build_program_in_subdir(r.series.accumulate DEPENDS grass_gis grass_raster + grass_stats) -build_program_in_subdir( - r.series.interp - DEPENDS grass_gis grass_raster grass_stats ) +build_program_in_subdir(r.series.interp DEPENDS grass_gis grass_raster + grass_stats) -build_program_in_subdir( - r.relief - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.relief DEPENDS grass_gis grass_raster) add_subdirectory(r.sim) -build_program_in_subdir( - r.slope.aspect - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.slope.aspect DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.solute.transport - DEPENDS grass_gis grass_raster grass_gmath grass_gpde) +build_program_in_subdir(r.solute.transport DEPENDS grass_gis grass_raster + grass_gmath grass_gpde) add_subdirectory(r.spread) -build_program_in_subdir( - r.spreadpath - DEPENDS grass_gis grass_raster grass_segment) +build_program_in_subdir(r.spreadpath DEPENDS grass_gis grass_raster + grass_segment) -build_program_in_subdir( - r.statistics - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.statistics DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.stats.zonal - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.stats.zonal DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.stats.quantile - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.stats.quantile DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.stats - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.stats DEPENDS grass_gis grass_raster) - build_program_in_subdir( - r.stream.extract - DEPENDS grass_gis grass_raster grass_segment grass_vector) +build_program_in_subdir(r.stream.extract DEPENDS grass_gis grass_raster + grass_segment grass_vector) -build_program_in_subdir( - r.sun - DEPENDS grass_gmath grass_raster grass_gproj) +build_program_in_subdir(r.sun DEPENDS grass_gmath grass_raster grass_gproj) -build_program_in_subdir( - r.sunhours - DEPENDS grass_gis grass_raster grass_gproj) +build_program_in_subdir(r.sunhours DEPENDS grass_gis grass_raster grass_gproj) -build_program_in_subdir( - r.sunmask - DEPENDS grass_gis grass_raster grass_gproj) +build_program_in_subdir(r.sunmask DEPENDS grass_gis grass_raster grass_gproj) -build_program_in_subdir( - r.support - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.support DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.support.stats - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.support.stats DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.surf.area - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.surf.area DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.surf.contour - DEPENDS grass_gis grass_raster ) +build_program_in_subdir(r.surf.contour DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.surf.fractal - DEPENDS grass_gis grass_raster grass_gmath ) +build_program_in_subdir(r.surf.fractal DEPENDS grass_gis grass_raster + grass_gmath) -build_program_in_subdir( - r.surf.gauss - DEPENDS grass_gis grass_raster grass_gmath ) +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 ) +build_program_in_subdir(r.surf.idw DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.surf.random - DEPENDS grass_gis grass_raster grass_gmath ) +build_program_in_subdir(r.surf.random DEPENDS grass_gis grass_raster + grass_gmath) if(MSVC) set(USER_NAME $ENV{USERNAME}) @@ -439,95 +284,76 @@ else() set(USER_NAME $ENV{USER}) endif() -build_program_in_subdir( - r.texture - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.texture DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.thin - DEPENDS grass_gis grass_raster grass_rowio) +build_program_in_subdir(r.thin DEPENDS grass_gis grass_raster grass_rowio) -build_program_in_subdir( - r.tile - DEPENDS grass_gis grass_raster) +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.timestamp DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.to.rast3 - DEPENDS grass_gis grass_raster3d) +build_program_in_subdir(r.to.rast3 DEPENDS grass_gis grass_raster3d) -build_program_in_subdir( - r.to.rast3elev - DEPENDS grass_gis grass_raster3d) +build_program_in_subdir(r.to.rast3elev DEPENDS grass_gis grass_raster3d) -build_program_in_subdir( - r.to.vect - DEPENDS grass_gis grass_raster grass_vector) +build_program_in_subdir(r.to.vect DEPENDS grass_gis grass_raster grass_vector) -build_program_in_subdir( - r.topidx - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.topidx DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.topmodel - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.topmodel DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.transect - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.transect DEPENDS grass_gis grass_raster) add_subdirectory(r.univar) -build_program_in_subdir( - r.uslek - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.uslek DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.usler - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.usler DEPENDS grass_gis grass_raster) -build_program_in_subdir( - r.volume - DEPENDS grass_gis grass_raster grass_vector) +build_program_in_subdir(r.volume DEPENDS grass_gis grass_raster grass_vector) -build_program_in_subdir( - r.walk - DEPENDS grass_gis grass_raster grass_segment grass_vector) +build_program_in_subdir(r.walk DEPENDS grass_gis grass_raster grass_segment + grass_vector) -build_program_in_subdir( - r.water.outlet - DEPENDS grass_gis grass_raster) +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) +build_program_in_subdir(r.what DEPENDS grass_gis grass_raster grass_vector) -build_program_in_subdir( - r.what.color - DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.what.color DEPENDS grass_gis grass_raster) build_program_in_subdir( - r.in.lidar - DEPENDS grass_gis grass_raster grass_lidar - PRIMARY_DEPENDS LIBLAS) + r.in.lidar + DEPENDS + grass_gis + grass_raster + grass_lidar + PRIMARY_DEPENDS + LIBLAS) add_subdirectory(r.li) add_subdirectory(r.mapcalc) build_program_in_subdir( - r.viewshed - DEPENDS grass_gis grass_raster grass_iostream - SRC_REGEX "*.cpp" - DEFS "-DUSER=${USER_NAME}") - - build_program_in_subdir( - r.terraflow - DEPENDS grass_gis grass_raster grass_iostream - SRC_REGEX "*.cpp" - DEFS "-DUSER=${USER_NAME};-DNODATA_FIX;-DELEV_FLOAT") - - add_subdirectory(r.watershed) + r.viewshed + DEPENDS + grass_gis + grass_raster + grass_iostream + SRC_REGEX + "*.cpp" + DEFS + "-DUSER=${USER_NAME}") + +build_program_in_subdir( + r.terraflow + DEPENDS + grass_gis + grass_raster + grass_iostream + SRC_REGEX + "*.cpp" + DEFS + "-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 dd6ee9e6fc6..0a9c64e8714 100644 --- a/raster/r.colors.out/CMakeLists.txt +++ b/raster/r.colors.out/CMakeLists.txt @@ -1,16 +1,20 @@ -set(r_colors_out_SRCS raster_main.c) -set(r3_colors_out_SRCS raster3d_main.c) +set(r_colors_out_SRCS raster_main.c) +set(r3_colors_out_SRCS raster3d_main.c) build_program( - NAME r.colors.out - SOURCES "${r_colors_out_SRCS}" - DEPENDS grass_gis grass_raster - ) - -build_program(NAME r3.colors.out - SOURCES "${r3_colors_out_SRCS}" - DEPENDS grass_gis grass_raster3d) - - - + NAME + r.colors.out + SOURCES + "${r_colors_out_SRCS}" + DEPENDS + grass_gis + grass_raster) +build_program( + NAME + r3.colors.out + SOURCES + "${r3_colors_out_SRCS}" + DEPENDS + grass_gis + grass_raster3d) diff --git a/raster/r.colors/CMakeLists.txt b/raster/r.colors/CMakeLists.txt index 84a6f8a4b41..084855195f4 100644 --- a/raster/r.colors/CMakeLists.txt +++ b/raster/r.colors/CMakeLists.txt @@ -1,12 +1,20 @@ - set(r_colors_SRCS raster_main.c edit_colors.c rules.c stats.c) -set(r3_colors_SRCS - raster3d_main.c edit_colors.c rules.c stats.c) +set(r3_colors_SRCS raster3d_main.c edit_colors.c rules.c stats.c) -build_program(NAME r.colors - SOURCES "${r_colors_SRCS}" - DEPENDS grass_gis grass_raster3d) +build_program( + NAME + r.colors + SOURCES + "${r_colors_SRCS}" + DEPENDS + grass_gis + grass_raster3d) -build_program(NAME r3.colors - SOURCES "${r3_colors_SRCS}" - DEPENDS grass_gis grass_raster3d) +build_program( + NAME + r3.colors + SOURCES + "${r3_colors_SRCS}" + DEPENDS + grass_gis + grass_raster3d) diff --git a/raster/r.li/CMakeLists.txt b/raster/r.li/CMakeLists.txt index 50dd4140aa7..8444c2459ef 100644 --- a/raster/r.li/CMakeLists.txt +++ b/raster/r.li/CMakeLists.txt @@ -1,27 +1,32 @@ set(SUBDIRS1 - r.li.cwed - r.li.dominance - r.li.edgedensity - r.li.mpa - r.li.mps - r.li.padcv - r.li.padrange - r.li.padsd - r.li.patchdensity - r.li.patchnum - r.li.pielou - r.li.renyi - r.li.richness - r.li.shannon - r.li.shape - r.li.simpson) -# r.li.setup + r.li.cwed + r.li.dominance + r.li.edgedensity + r.li.mpa + r.li.mps + r.li.padcv + r.li.padrange + r.li.padsd + r.li.patchdensity + r.li.patchnum + r.li.pielou + r.li.renyi + r.li.richness + r.li.shannon + r.li.shape + r.li.simpson) +# r.li.setup -build_library_in_subdir(r.li.daemon - NAME grass_rli - DEPENDS grass_gis grass_raster - HTML_FILE_NAME "r.li.daemon") +build_library_in_subdir( + r.li.daemon + NAME + grass_rli + DEPENDS + grass_gis + grass_raster + HTML_FILE_NAME + "r.li.daemon") foreach(SUBDIR ${SUBDIRS1}) - build_program_in_subdir(${SUBDIR} DEPENDS grass_rli) + build_program_in_subdir(${SUBDIR} DEPENDS grass_rli) endforeach() diff --git a/raster/r.mapcalc/CMakeLists.txt b/raster/r.mapcalc/CMakeLists.txt index b5cb74b91b0..8cf40de93f3 100644 --- a/raster/r.mapcalc/CMakeLists.txt +++ b/raster/r.mapcalc/CMakeLists.txt @@ -1,22 +1,40 @@ - -FLEX_TARGET(mapcalc.yy.c mapcalc.l ${CMAKE_CURRENT_BINARY_DIR}/mapcalc.yy.c ) -BISON_TARGET(mapcalc.tab.c mapcalc.y ${CMAKE_CURRENT_BINARY_DIR}/mapcalc.tab.c ) -ADD_FLEX_BISON_DEPENDENCY(mapcalc.yy.c mapcalc.tab.c) -SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_BINARY_DIR}/mapcalc.yy.c GENERATED) -SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_BINARY_DIR}/mapcalc.tab.c GENERATED) +flex_target(mapcalc.yy.c mapcalc.l ${CMAKE_CURRENT_BINARY_DIR}/mapcalc.yy.c) +bison_target(mapcalc.tab.c mapcalc.y ${CMAKE_CURRENT_BINARY_DIR}/mapcalc.tab.c) +add_flex_bison_dependency(mapcalc.yy.c mapcalc.tab.c) +set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/mapcalc.yy.c GENERATED) +set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/mapcalc.tab.c GENERATED) set(r_mapcalc_common_SRCS - column_shift.c evaluate.c expression.c function.c main.c xrowcol.c - ${CMAKE_CURRENT_BINARY_DIR}/mapcalc.tab.c - ${CMAKE_CURRENT_BINARY_DIR}/mapcalc.yy.c ) + column_shift.c + evaluate.c + expression.c + function.c + main.c + xrowcol.c + ${CMAKE_CURRENT_BINARY_DIR}/mapcalc.tab.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(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 r.mapcalc - SOURCES "${r_mapcalc_SRCS}" - DEPENDS grass_gis grass_btree grass_calc grass_raster) +build_program( + NAME + r.mapcalc + SOURCES + "${r_mapcalc_SRCS}" + DEPENDS + grass_gis + grass_btree + grass_calc + grass_raster) -build_program(NAME r3.mapcalc - SOURCES "${r3_mapcalc_SRCS}" - DEPENDS grass_gis grass_btree grass_calc grass_raster3d) +build_program( + NAME + r3.mapcalc + SOURCES + "${r3_mapcalc_SRCS}" + DEPENDS + grass_gis + grass_btree + grass_calc + grass_raster3d) diff --git a/raster/r.sim/CMakeLists.txt b/raster/r.sim/CMakeLists.txt index 1e87178a9d3..921d72f95c8 100644 --- a/raster/r.sim/CMakeLists.txt +++ b/raster/r.sim/CMakeLists.txt @@ -1,15 +1,29 @@ - -build_library_in_subdir(simlib - NAME grass_sim - DEPENDS grass_datetime grass_raster grass_vector - HEADERS "waterglobs.h" "simlib.h") +build_library_in_subdir( + simlib + NAME + grass_sim + DEPENDS + grass_datetime + grass_raster + grass_vector + HEADERS + "waterglobs.h" + "simlib.h") build_program_in_subdir( r.sim.water - DEPENDS grass_gis grass_gmath grass_sim - INCLUDES "../simlib") + DEPENDS + grass_gis + grass_gmath + grass_sim + INCLUDES + "../simlib") build_program_in_subdir( r.sim.sediment - DEPENDS grass_gis grass_gmath grass_sim - INCLUDES "../simlib") + DEPENDS + grass_gis + grass_gmath + grass_sim + INCLUDES + "../simlib") diff --git a/raster/r.spread/CMakeLists.txt b/raster/r.spread/CMakeLists.txt index 75381ff7aeb..46078279c58 100644 --- a/raster/r.spread/CMakeLists.txt +++ b/raster/r.spread/CMakeLists.txt @@ -1,8 +1,25 @@ -set(r_spread_SRCS collect_ori.c deleteHa.c fixHa.c - get_minHa.c insert2Ha.c insertHa.c main.c pick_dist.c - pick_ignite.c ram2out.c replaceHa.c select_linksB.c spot.c spread.c - ) +set(r_spread_SRCS + collect_ori.c + deleteHa.c + fixHa.c + get_minHa.c + insert2Ha.c + insertHa.c + main.c + pick_dist.c + pick_ignite.c + ram2out.c + replaceHa.c + select_linksB.c + spot.c + spread.c) -build_program(NAME r.spread - SOURCES "${r_spread_SRCS}" - DEPENDS grass_gis grass_raster grass_display) +build_program( + NAME + r.spread + SOURCES + "${r_spread_SRCS}" + DEPENDS + grass_gis + grass_raster + grass_display) diff --git a/raster/r.univar/CMakeLists.txt b/raster/r.univar/CMakeLists.txt index c0d2f41a86b..aa5d13d6bb2 100644 --- a/raster/r.univar/CMakeLists.txt +++ b/raster/r.univar/CMakeLists.txt @@ -1,15 +1,20 @@ +set(r_univar_SRCS r.univar_main.c sort.c stats.c) +set(r3_univar_SRCS r3.univar_main.c sort.c stats.c) -set(r_univar_SRCS - r.univar_main.c sort.c stats.c - ) -set(r3_univar_SRCS - r3.univar_main.c sort.c stats.c) - -build_program(NAME r.univar - SOURCES "${r_univar_SRCS}" - DEPENDS grass_gis grass_raster) - -build_program(NAME r3.univar - SOURCES "${r3_univar_SRCS}" - DEPENDS grass_gis grass_raster3d) +build_program( + NAME + r.univar + SOURCES + "${r_univar_SRCS}" + DEPENDS + grass_gis + grass_raster) +build_program( + NAME + r3.univar + SOURCES + "${r3_univar_SRCS}" + DEPENDS + grass_gis + grass_raster3d) diff --git a/raster/r.watershed/CMakeLists.txt b/raster/r.watershed/CMakeLists.txt index eede612ccf9..3a5a883d2d7 100644 --- a/raster/r.watershed/CMakeLists.txt +++ b/raster/r.watershed/CMakeLists.txt @@ -1,11 +1,21 @@ -build_program_in_subdir(ram -DEPENDS grass_gis grass_raster grass_btree2 grass_gmath -RUNTIME_OUTPUT_DIR etc/r.watershed) +build_program_in_subdir( + ram + DEPENDS + grass_gis + grass_raster + grass_btree2 + grass_gmath + RUNTIME_OUTPUT_DIR + etc/r.watershed) -build_program_in_subdir(seg -DEPENDS grass_gis grass_raster grass_gmath grass_segment -RUNTIME_OUTPUT_DIR etc/r.watershed) +build_program_in_subdir( + seg + DEPENDS + grass_gis + grass_raster + grass_gmath + grass_segment + RUNTIME_OUTPUT_DIR + etc/r.watershed) -build_program_in_subdir(front -NAME r.watershed -DEPENDS grass_gis grass_raster) +build_program_in_subdir(front NAME r.watershed DEPENDS grass_gis grass_raster) diff --git a/raster3d/CMakeLists.txt b/raster3d/CMakeLists.txt index 881d35e1778..f751522d910 100644 --- a/raster3d/CMakeLists.txt +++ b/raster3d/CMakeLists.txt @@ -1,97 +1,60 @@ - -build_program_in_subdir( - r3.cross.rast - DEPENDS grass_gis grass_raster3d ) +build_program_in_subdir(r3.cross.rast DEPENDS grass_gis grass_raster3d) add_subdirectory(r3.flow) -build_program_in_subdir( - r3.gradient - DEPENDS grass_gis grass_raster3d ) +build_program_in_subdir(r3.gradient DEPENDS grass_gis grass_raster3d) -build_program_in_subdir( - r3.gwflow - DEPENDS grass_gis grass_raster3d grass_gpde ) +build_program_in_subdir(r3.gwflow DEPENDS grass_gis grass_raster3d grass_gpde) -build_program_in_subdir( - r3.in.ascii - DEPENDS grass_gis grass_raster3d ) +build_program_in_subdir(r3.in.ascii DEPENDS grass_gis grass_raster3d) -build_program_in_subdir( - r3.in.bin - DEPENDS grass_gis grass_raster3d ) +build_program_in_subdir(r3.in.bin DEPENDS grass_gis grass_raster3d) -build_program_in_subdir( - r3.info - DEPENDS grass_gis grass_raster3d ) +build_program_in_subdir(r3.info DEPENDS grass_gis grass_raster3d) -build_program_in_subdir( - r3.mask - DEPENDS grass_gis grass_raster3d ) +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.null DEPENDS grass_gis grass_raster3d) -build_program_in_subdir( - r3.neighbors - DEPENDS grass_gis grass_raster3d grass_stats) +build_program_in_subdir(r3.neighbors DEPENDS grass_gis grass_raster3d + grass_stats) -build_program_in_subdir( - r3.out.ascii - DEPENDS grass_gis grass_raster3d ) +build_program_in_subdir(r3.out.ascii DEPENDS grass_gis grass_raster3d) -build_program_in_subdir( - r3.out.bin - 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 ) + build_program_in_subdir(r3.out.v5d DEPENDS grass_gis grass_raster3d) endif() -build_program_in_subdir( - r3.retile - DEPENDS grass_gis grass_raster3d ) +build_program_in_subdir(r3.retile DEPENDS grass_gis grass_raster3d) -build_program_in_subdir( - r3.stats - DEPENDS grass_gis grass_raster3d ) +build_program_in_subdir(r3.stats DEPENDS grass_gis grass_raster3d) -build_program_in_subdir( - r3.support - DEPENDS grass_gis grass_raster3d ) +build_program_in_subdir(r3.support DEPENDS grass_gis grass_raster3d) -build_program_in_subdir( - r3.timestamp - DEPENDS grass_gis grass_raster3d ) +build_program_in_subdir(r3.timestamp DEPENDS grass_gis grass_raster3d) -build_program_in_subdir( - r3.to.rast - DEPENDS grass_gis grass_raster3d ) +build_program_in_subdir(r3.to.rast DEPENDS grass_gis grass_raster3d) -build_program_in_subdir( - r3.out.vtk - DEPENDS grass_gis grass_raster3d ) +build_program_in_subdir(r3.out.vtk DEPENDS grass_gis grass_raster3d) -build_program_in_subdir( - r3.mkdspf - DEPENDS grass_gis grass_raster3d grass_gpde grass_dspf) +build_program_in_subdir(r3.mkdspf DEPENDS grass_gis grass_raster3d grass_gpde + grass_dspf) build_program_in_subdir( - r3.in.lidar - DEPENDS grass_gis grass_raster3d grass_segment - PRIMARY_DEPENDS LIBLAS) + r3.in.lidar + DEPENDS + grass_gis + grass_raster3d + grass_segment + PRIMARY_DEPENDS + LIBLAS) -build_program_in_subdir( - r3.out.netcdf - DEPENDS grass_gis grass_raster3d - PRIMARY_DEPENDS NETCDF) +build_program_in_subdir(r3.out.netcdf DEPENDS grass_gis grass_raster3d + PRIMARY_DEPENDS NETCDF) # mode_t is not available on msvc. Discuss if(NOT MSVC) - build_program_in_subdir( - r3.in.v5d - DEPENDS grass_gis grass_raster3d) + build_program_in_subdir(r3.in.v5d DEPENDS grass_gis grass_raster3d) endif() diff --git a/raster3d/r3.flow/CMakeLists.txt b/raster3d/r3.flow/CMakeLists.txt index 7a01819e898..6fc652e2ec5 100644 --- a/raster3d/r3.flow/CMakeLists.txt +++ b/raster3d/r3.flow/CMakeLists.txt @@ -1,14 +1,24 @@ -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 r3.flow - SOURCES "${r3_flow_SRCS}" - DEPENDS grass_gis grass_raster3d grass_vector ) +build_program( + NAME + r3.flow + SOURCES + "${r3_flow_SRCS}" + DEPENDS + grass_gis + grass_raster3d + grass_vector) -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 test.r3flow - SOURCES "${test_r3flow_SRCS}" - DEPENDS grass_gis grass_raster3d grass_vector) +build_program( + NAME + test.r3flow + SOURCES + "${test_r3flow_SRCS}" + DEPENDS + grass_gis + grass_raster3d + grass_vector) diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt index b1947c6b568..e08cb05d61c 100644 --- a/scripts/CMakeLists.txt +++ b/scripts/CMakeLists.txt @@ -1,106 +1,116 @@ set(script_DIRS - r.shade - d.background - d.correlate - d.frame - d.out.file - d.to.rast - d.polar - d.rast.edit - d.rast.leg - d.redraw - d.shade - d.what.rast - d.what.vect - db.dropcolumn - db.droptable - db.in.ogr - db.out.ogr - db.test - db.univar - g.download.location - g.extension - g.extension.all - g.manual - g.search.modules - i.band.library - i.colors.enhance - i.image.mosaic - i.in.spotvgt - i.oif - i.pansharpen - i.spectral - i.tasscap - m.proj - r.blend - r.buffer.lowmem - r.colors.stddev - r.fillnulls - r.grow - r.import - r.in.aster - r.in.srtm - r.mask - r.out.xyz - r.pack - r.plane - r.reclass.area - r.rgb - r.semantic.label - r.tileset - r.unpack - r3.in.xyz - v.build.all - v.centroids - v.clip - v.db.addcolumn - v.db.addtable - v.db.join - v.db.dropcolumn - v.db.droprow - v.db.droptable - v.db.renamecolumn - v.db.reconnect.all - v.db.univar - v.db.update - v.dissolve - v.import - v.in.e00 - v.in.geonames - v.in.lines - v.in.mapgen - v.in.wfs - v.rast.stats - v.report - v.pack - v.to.lines - v.unpack - v.what.strds - v.what.vect - wxpyimgview - r.mapcalc.simple - r.in.wms - ) + r.shade + d.background + d.correlate + d.frame + d.out.file + d.to.rast + d.polar + d.rast.edit + d.rast.leg + d.redraw + d.shade + d.what.rast + d.what.vect + db.dropcolumn + db.droptable + db.in.ogr + db.out.ogr + db.test + db.univar + g.download.location + g.extension + g.extension.all + g.manual + g.search.modules + i.band.library + i.colors.enhance + i.image.mosaic + i.in.spotvgt + i.oif + i.pansharpen + i.spectral + i.tasscap + m.proj + r.blend + r.buffer.lowmem + r.colors.stddev + r.fillnulls + r.grow + r.import + r.in.aster + r.in.srtm + r.mask + r.out.xyz + r.pack + r.plane + r.reclass.area + r.rgb + r.semantic.label + r.tileset + r.unpack + r3.in.xyz + v.build.all + v.centroids + v.clip + v.db.addcolumn + v.db.addtable + v.db.join + v.db.dropcolumn + v.db.droprow + v.db.droptable + v.db.renamecolumn + v.db.reconnect.all + v.db.univar + v.db.update + v.dissolve + v.import + v.in.e00 + v.in.geonames + v.in.lines + v.in.mapgen + v.in.wfs + v.rast.stats + v.report + v.pack + v.to.lines + v.unpack + v.what.strds + v.what.vect + wxpyimgview + r.mapcalc.simple + r.in.wms) foreach(script_DIR ${script_DIRS}) build_script_in_subdir(${script_DIR}) endforeach() file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms - DESTINATION ${CMAKE_BINARY_DIR}/etc/) + DESTINATION ${CMAKE_BINARY_DIR}/etc/) file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/wxpyimgview/wxpyimgview_gui.py - DESTINATION ${CMAKE_BINARY_DIR}/etc/) + DESTINATION ${CMAKE_BINARY_DIR}/etc/) -add_custom_target(r.in.wms_files - COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/etc/r.in.wms/ - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms/wms_base.py ${GISBASE}/etc/r.in.wms/ - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms/wms_cap_parsers.py ${GISBASE}/etc/r.in.wms/ - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms/wms_drv.py ${GISBASE}/etc/r.in.wms/ - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms/wms_gdal_drv.py ${GISBASE}/etc/r.in.wms/ - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms/srs.py ${GISBASE}/etc/r.in.wms/ - DEPENDS v.to.lines - ) +add_custom_target( + r.in.wms_files + COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/etc/r.in.wms/ + COMMAND + ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms/wms_base.py + ${GISBASE}/etc/r.in.wms/ + COMMAND + ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms/wms_cap_parsers.py + ${GISBASE}/etc/r.in.wms/ + COMMAND + ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms/wms_drv.py + ${GISBASE}/etc/r.in.wms/ + COMMAND + ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms/wms_gdal_drv.py + ${GISBASE}/etc/r.in.wms/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms/srs.py + ${GISBASE}/etc/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 scripts) +set_target_properties(r.in.wms_files PROPERTIES FOLDER scripts) diff --git a/temporal/CMakeLists.txt b/temporal/CMakeLists.txt index 891c9fce1dc..eb62bacb0c1 100644 --- a/temporal/CMakeLists.txt +++ b/temporal/CMakeLists.txt @@ -1,55 +1,54 @@ set(temporal_DIRS - t.create - t.copy - t.support - t.topology - t.list - t.info - t.merge - t.upgrade - t.remove - t.sample - t.register - t.unregister - t.rast.accumulate - t.rast.accdetect - t.rast.aggregate - t.rast.aggregate.ds - t.rast.colors - t.rast.contour - t.rast.to.rast3 - t.rast.univar - t.rast.list - t.rast.mapcalc - t.rast.algebra - t.rast.neighbors - t.rast.series - t.rast.export - t.rast.out.vtk - t.rast.import - t.rast.gapfill - t.rast.extract - t.rast.to.vect - t.rast.what - t.rast3d.list - t.rast3d.extract - t.rast3d.mapcalc - t.rast3d.algebra - t.rast3d.univar - t.rename - t.select - t.snap - t.shift - t.vect.list - t.vect.db.select - t.vect.export - t.vect.extract - t.vect.algebra - t.vect.import - t.vect.what.strds - t.vect.observe.strds - t.vect.univar - ) + t.create + t.copy + t.support + t.topology + t.list + t.info + t.merge + t.upgrade + t.remove + t.sample + t.register + t.unregister + t.rast.accumulate + t.rast.accdetect + t.rast.aggregate + t.rast.aggregate.ds + t.rast.colors + t.rast.contour + t.rast.to.rast3 + t.rast.univar + t.rast.list + t.rast.mapcalc + t.rast.algebra + t.rast.neighbors + t.rast.series + t.rast.export + t.rast.out.vtk + t.rast.import + t.rast.gapfill + t.rast.extract + t.rast.to.vect + t.rast.what + t.rast3d.list + t.rast3d.extract + t.rast3d.mapcalc + t.rast3d.algebra + t.rast3d.univar + t.rename + t.select + t.snap + t.shift + t.vect.list + t.vect.db.select + t.vect.export + t.vect.extract + t.vect.algebra + t.vect.import + t.vect.what.strds + t.vect.observe.strds + t.vect.univar) build_program_in_subdir(t.connect DEPENDS grass_gis grass_temporal) diff --git a/thirdparty/CMakeLists.txt b/thirdparty/CMakeLists.txt index 21cef917446..12ff736ab79 100644 --- a/thirdparty/CMakeLists.txt +++ b/thirdparty/CMakeLists.txt @@ -4,91 +4,114 @@ find_package(BISON REQUIRED) find_package(PROJ REQUIRED) add_library(PROJ INTERFACE IMPORTED GLOBAL) -set_property(TARGET PROJ PROPERTY INTERFACE_LINK_LIBRARIES ${PROJ_LIBRARY${find_library_suffix}} ) -set_property(TARGET PROJ PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PROJ_INCLUDE_DIR} ) +set_property(TARGET PROJ PROPERTY INTERFACE_LINK_LIBRARIES + ${PROJ_LIBRARY${find_library_suffix}}) +set_property(TARGET PROJ PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${PROJ_INCLUDE_DIR}) find_package(GDAL REQUIRED) add_library(GDAL INTERFACE IMPORTED GLOBAL) -set_property(TARGET GDAL PROPERTY INTERFACE_LINK_LIBRARIES ${GDAL_LIBRARY} ) -set_property(TARGET GDAL PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${GDAL_INCLUDE_DIR} ) +set_property(TARGET GDAL PROPERTY INTERFACE_LINK_LIBRARIES ${GDAL_LIBRARY}) +set_property(TARGET GDAL PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${GDAL_INCLUDE_DIR}) find_package(PNG REQUIRED) add_library(LIBPNG INTERFACE IMPORTED GLOBAL) -set_property(TARGET LIBPNG PROPERTY INTERFACE_LINK_LIBRARIES ${PNG_LIBRARY${find_library_suffix}} ) -set_property(TARGET LIBPNG PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PNG_INCLUDE_DIR} ) +set_property(TARGET LIBPNG PROPERTY INTERFACE_LINK_LIBRARIES + ${PNG_LIBRARY${find_library_suffix}}) +set_property(TARGET LIBPNG PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${PNG_INCLUDE_DIR}) find_package(JPEG) if(JPEG_FOUND) add_library(LIBJPEG INTERFACE IMPORTED GLOBAL) - set_property(TARGET LIBJPEG PROPERTY INTERFACE_LINK_LIBRARIES ${JPEG_LIBRARY${find_library_suffix}} ) - set_property(TARGET LIBJPEG PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${JPEG_INCLUDE_DIR} ) + set_property(TARGET LIBJPEG PROPERTY INTERFACE_LINK_LIBRARIES + ${JPEG_LIBRARY${find_library_suffix}}) + set_property(TARGET LIBJPEG PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${JPEG_INCLUDE_DIR}) endif() find_package(ZLIB REQUIRED) add_library(ZLIB INTERFACE IMPORTED GLOBAL) -set_property(TARGET ZLIB PROPERTY INTERFACE_LINK_LIBRARIES ${ZLIB_LIBRARY${find_library_suffix}} ) -set_property(TARGET ZLIB PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${ZLIB_INCLUDE_DIR} ) +set_property(TARGET ZLIB PROPERTY INTERFACE_LINK_LIBRARIES + ${ZLIB_LIBRARY${find_library_suffix}}) +set_property(TARGET ZLIB PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${ZLIB_INCLUDE_DIR}) if(UNIX) -find_library(M_LIBRARY m) -add_library(LIBM INTERFACE IMPORTED GLOBAL) -set_property(TARGET LIBM PROPERTY INTERFACE_LINK_LIBRARIES ${M_LIBRARY} ) -mark_as_advanced(M_LIBRARY) + find_library(M_LIBRARY m) + add_library(LIBM INTERFACE IMPORTED GLOBAL) + set_property(TARGET LIBM PROPERTY INTERFACE_LINK_LIBRARIES ${M_LIBRARY}) + mark_as_advanced(M_LIBRARY) endif() find_package(Freetype REQUIRED) add_library(FREETYPE INTERFACE IMPORTED GLOBAL) -set_property(TARGET FREETYPE PROPERTY INTERFACE_LINK_LIBRARIES ${FREETYPE_LIBRARY${find_library_suffix}} ) -set_property(TARGET FREETYPE PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${FREETYPE_INCLUDE_DIRS} ) +set_property(TARGET FREETYPE PROPERTY INTERFACE_LINK_LIBRARIES + ${FREETYPE_LIBRARY${find_library_suffix}}) +set_property(TARGET FREETYPE PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${FREETYPE_INCLUDE_DIRS}) 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} ) + set_property(TARGET FFTW PROPERTY INTERFACE_LINK_LIBRARIES ${FFTW_LIBRARIES}) + set_property(TARGET FFTW PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${FFTW_INCLUDE_DIR}) endif() if(WITH_CAIRO) find_package(Cairo REQUIRED) add_library(CAIRO INTERFACE IMPORTED GLOBAL) - set_property(TARGET CAIRO PROPERTY INTERFACE_LINK_LIBRARIES ${CAIRO_LIBRARIES} ) - set_property(TARGET CAIRO PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${CAIRO_INCLUDE_DIRS} ) + set_property(TARGET CAIRO PROPERTY INTERFACE_LINK_LIBRARIES + ${CAIRO_LIBRARIES}) + set_property(TARGET CAIRO PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${CAIRO_INCLUDE_DIRS}) endif() if(WITH_X11) find_package(X11 REQUIRED) add_library(X11 INTERFACE IMPORTED GLOBAL) - set_property(TARGET X11 PROPERTY INTERFACE_LINK_LIBRARIES ${X11_LIBRARIES} ) - set_property(TARGET X11 PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${X11_INCLUDE_DIR}) + set_property(TARGET X11 PROPERTY INTERFACE_LINK_LIBRARIES ${X11_LIBRARIES}) + set_property(TARGET X11 PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${X11_INCLUDE_DIR}) endif() if(WIN32) find_package(ODBC QUIET) if(ODBC_FOUND) add_library(ODBC INTERFACE IMPORTED GLOBAL) - set_property(TARGET ODBC PROPERTY INTERFACE_LINK_LIBRARIES ${ODBC_LIBRARIES} ) - set_property(TARGET PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${ODBC_INCLUDE_DIRS}) + set_property(TARGET ODBC PROPERTY INTERFACE_LINK_LIBRARIES + ${ODBC_LIBRARIES}) + set_property(TARGET PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${ODBC_INCLUDE_DIRS}) endif() endif() find_package(TIFF REQUIRED) add_library(TIFF INTERFACE IMPORTED GLOBAL) -set_property(TARGET TIFF PROPERTY INTERFACE_LINK_LIBRARIES ${TIFF_LIBRARY${find_library_suffix}} ) -set_property(TARGET TIFF PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${TIFF_INCLUDE_DIR}) +set_property(TARGET TIFF PROPERTY INTERFACE_LINK_LIBRARIES + ${TIFF_LIBRARY${find_library_suffix}}) +set_property(TARGET TIFF PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${TIFF_INCLUDE_DIR}) find_package(Iconv QUIET) if(ICONV_FOUND) -add_library(ICONV INTERFACE IMPORTED GLOBAL) -set_property(TARGET ICONV PROPERTY INTERFACE_LINK_LIBRARIES ${ICONV_LIBRARIES} ) -set_property(TARGET ICONV PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${ICONV_INCLUDE_DIR}) -#if(ICONV_SECOND_ARGUMENT_IS_CONST) -#set() update this value in include/config.cmake.in + add_library(ICONV INTERFACE IMPORTED GLOBAL) + set_property(TARGET ICONV PROPERTY INTERFACE_LINK_LIBRARIES + ${ICONV_LIBRARIES}) + set_property(TARGET ICONV PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${ICONV_INCLUDE_DIR}) + # if(ICONV_SECOND_ARGUMENT_IS_CONST) set() update this value in + # include/config.cmake.in endif() if(WITH_BZLIB) find_package(BZip2) if(BZIP2_FOUND) add_library(BZIP2 INTERFACE IMPORTED GLOBAL) - set_property(TARGET BZIP2 PROPERTY INTERFACE_LINK_LIBRARIES ${BZIP2_LIBRARY${find_library_suffix}} ) - set_property(TARGET BZIP2 PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${BZIP2_INCLUDE_DIR}) + set_property(TARGET BZIP2 PROPERTY INTERFACE_LINK_LIBRARIES + ${BZIP2_LIBRARY${find_library_suffix}}) + set_property(TARGET BZIP2 PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${BZIP2_INCLUDE_DIR}) endif() endif() @@ -96,7 +119,8 @@ if(WITH_BLAS) find_package(BLAS) if(BLAS_FOUND) add_library(BLAS INTERFACE IMPORTED GLOBAL) - set_property(TARGET BLAS PROPERTY INTERFACE_LINK_LIBRARIES ${BLAS_LIBRARIES} ) + set_property(TARGET BLAS PROPERTY INTERFACE_LINK_LIBRARIES + ${BLAS_LIBRARIES}) endif() endif() @@ -104,7 +128,8 @@ if(WITH_LAPACK) find_package(LAPACK) if(LAPACK_FOUND) add_library(LAPACK INTERFACE IMPORTED GLOBAL) - set_property(TARGET LAPACK PROPERTY INTERFACE_LINK_LIBRARIES ${LAPACK_LIBRARIES} ) + set_property(TARGET LAPACK PROPERTY INTERFACE_LINK_LIBRARIES + ${LAPACK_LIBRARIES}) endif() endif() @@ -115,49 +140,62 @@ if(WITH_OPENGL) find_library(AGL_FRAMEWORK AGL DOC "AGL lib for OSX") set(APP "-framework AGL -framework ApplicationServices") endif() - set_property(TARGET OPENGL PROPERTY INTERFACE_LINK_LIBRARIES ${OPENGL_LIBRARIES} ${AGL_FRAMEWORK} ) - set_property(TARGET OPENGL PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${OPENGL_INCLUDE_DIR} ${AGL_FRAMEWORK}) + set_property(TARGET OPENGL PROPERTY INTERFACE_LINK_LIBRARIES + ${OPENGL_LIBRARIES} ${AGL_FRAMEWORK}) + set_property(TARGET OPENGL PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${OPENGL_INCLUDE_DIR} ${AGL_FRAMEWORK}) endif() if(WITH_POSTGRES) find_package(PostgreSQL REQUIRED) add_library(POSTGRES INTERFACE IMPORTED GLOBAL) - set_property(TARGET POSTGRES PROPERTY INTERFACE_LINK_LIBRARIES ${PostgreSQL_LIBRARY} ) - set_property(TARGET POSTGRES PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PostgreSQL_INCLUDE_DIR} ) + set_property(TARGET POSTGRES PROPERTY INTERFACE_LINK_LIBRARIES + ${PostgreSQL_LIBRARY}) + set_property(TARGET POSTGRES PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${PostgreSQL_INCLUDE_DIR}) endif() if(WITH_SQLITE) find_package(SQLite REQUIRED) add_library(SQLITE INTERFACE IMPORTED GLOBAL) - set_property(TARGET SQLITE PROPERTY INTERFACE_LINK_LIBRARIES ${SQLITE_LIBRARY} ) - set_property(TARGET SQLITE PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${SQLITE_INCLUDE_DIRS} ) + set_property(TARGET SQLITE PROPERTY INTERFACE_LINK_LIBRARIES + ${SQLITE_LIBRARY}) + set_property(TARGET SQLITE PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${SQLITE_INCLUDE_DIRS}) endif() find_package(PDAL QUIET) if(PDAL_FOUND) -add_library(PDAL INTERFACE IMPORTED GLOBAL) -set_property(TARGET PDAL PROPERTY INTERFACE_LINK_LIBRARIES ${PDAL_LIBRARIES} ) -set_property(TARGET PDAL PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PDAL_INCLUDE_DIRS} ) + add_library(PDAL INTERFACE IMPORTED GLOBAL) + set_property(TARGET PDAL PROPERTY INTERFACE_LINK_LIBRARIES ${PDAL_LIBRARIES}) + set_property(TARGET PDAL PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${PDAL_INCLUDE_DIRS}) endif() find_package(LibLAS QUIET) 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} ) + 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(NetCDF QUIET) if(NETCDF_FOUND) - add_library(NETCDF INTERFACE IMPORTED GLOBAL) - set_property(TARGET NETCDF PROPERTY INTERFACE_LINK_LIBRARIES ${NetCDF_LIBRARY} ) - set_property(TARGET NETCDF PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${NetCDF_INCLUDE_DIR} ) + add_library(NETCDF INTERFACE IMPORTED GLOBAL) + set_property(TARGET NETCDF PROPERTY INTERFACE_LINK_LIBRARIES + ${NetCDF_LIBRARY}) + set_property(TARGET NETCDF PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${NetCDF_INCLUDE_DIR}) endif() find_package(GEOS REQUIRED) add_library(GEOS INTERFACE IMPORTED GLOBAL) -set_property(TARGET GEOS PROPERTY INTERFACE_LINK_LIBRARIES ${GEOS_C_LIBRARY${find_library_suffix}} ) -set_property(TARGET GEOS PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${GEOS_INCLUDE_DIR} ) +set_property(TARGET GEOS PROPERTY INTERFACE_LINK_LIBRARIES + ${GEOS_C_LIBRARY${find_library_suffix}}) +set_property(TARGET GEOS PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${GEOS_INCLUDE_DIR}) set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads) @@ -167,15 +205,18 @@ if(Threads_FOUND) set_property(TARGET PTHREAD PROPERTY INTERFACE_COMPILE_OPTIONS "-pthread") endif() if(CMAKE_THREAD_LIBS_INIT) - set_property(TARGET PTHREAD PROPERTY INTERFACE_LINK_LIBRARIES "${CMAKE_THREAD_LIBS_INIT}") + set_property(TARGET PTHREAD PROPERTY INTERFACE_LINK_LIBRARIES + "${CMAKE_THREAD_LIBS_INIT}") endif() endif() if(MSVC) find_package(PCRE REQUIRED) 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} ) + 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 (PythonLibs REQUIRED ) diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt index c9834362fd4..84a9ab749e9 100644 --- a/utils/CMakeLists.txt +++ b/utils/CMakeLists.txt @@ -1,25 +1,40 @@ -file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/mkhtml.py DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) -file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/generate_last_commit_file.py DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) +file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/mkhtml.py + DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) +file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/generate_last_commit_file.py + DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) set(current_time_s_ms_SRCS "timer/main.c") if(MSVC) list(APPEND current_time_s_ms_SRCS "timer/msvc/gettimeofday.c") endif() -build_program_in_subdir(timer -NAME current_time_s_ms -DEPENDS grass_gis -SOURCES "${current_time_s_ms_SRCS}" -RUNTIME_OUTPUT_DIR etc) - -build_program(NAME g.echo - SOURCES g.echo.c - RUNTIME_OUTPUT_DIR tools - PACKAGE "NONE") - add_dependencies(g.echo python_doc_tools) - add_custom_target(python_doc_tools - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/mkhtml.py ${GISBASE}/tools - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/g.html2man/g.html2man.py ${GISBASE}/tools - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/g.html2man/ghtml.py ${GISBASE}/tools - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/g.html2man/ggroff.py ${GISBASE}/tools - ) +build_program_in_subdir( + timer + NAME + current_time_s_ms + DEPENDS + grass_gis + SOURCES + "${current_time_s_ms_SRCS}" + RUNTIME_OUTPUT_DIR + etc) +build_program( + NAME + g.echo + SOURCES + g.echo.c + RUNTIME_OUTPUT_DIR + tools + PACKAGE + "NONE") +add_dependencies(g.echo python_doc_tools) +add_custom_target( + python_doc_tools + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/mkhtml.py + ${GISBASE}/tools + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/g.html2man/g.html2man.py ${GISBASE}/tools + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/g.html2man/ghtml.py ${GISBASE}/tools + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/g.html2man/ggroff.py ${GISBASE}/tools) diff --git a/vector/CMakeLists.txt b/vector/CMakeLists.txt index 0804fc0b68b..dc88f59cc3b 100644 --- a/vector/CMakeLists.txt +++ b/vector/CMakeLists.txt @@ -1,4 +1,3 @@ - build_program_in_subdir(v.buffer DEPENDS grass_gis grass_vector) build_program_in_subdir(v.build DEPENDS grass_gis grass_vector) @@ -50,15 +49,19 @@ build_program_in_subdir(v.in.dxf DEPENDS grass_gis grass_vector) 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_vector - PRIMARY_DEPENDS PDAL) + SOURCES + "${v_in_pdal_SOURCES}" + DEPENDS + grass_gis + grass_vector + PRIMARY_DEPENDS + PDAL) build_program_in_subdir(v.in.region DEPENDS grass_gis grass_vector) build_program_in_subdir(v.kcv DEPENDS grass_gis grass_vector) -build_program_in_subdir(v.kernel DEPENDS grass_gis grass_vector ) +build_program_in_subdir(v.kernel DEPENDS grass_gis grass_vector) build_program_in_subdir(v.label DEPENDS grass_gis grass_vector grass_display) @@ -78,17 +81,22 @@ build_program_in_subdir(v.net DEPENDS grass_gis grass_vector) build_program_in_subdir(v.net.alloc DEPENDS grass_gis grass_vector) -build_program_in_subdir(v.net.allpairs DEPENDS grass_gis grass_vector grass_neta) +build_program_in_subdir(v.net.allpairs DEPENDS grass_gis grass_vector + grass_neta) build_program_in_subdir(v.net.bridge DEPENDS grass_gis grass_vector grass_neta) -build_program_in_subdir(v.net.centrality DEPENDS grass_gis grass_vector grass_neta) +build_program_in_subdir(v.net.centrality DEPENDS grass_gis grass_vector + grass_neta) -build_program_in_subdir(v.net.components DEPENDS grass_gis grass_vector grass_neta) +build_program_in_subdir(v.net.components DEPENDS grass_gis grass_vector + grass_neta) -build_program_in_subdir(v.net.connectivity DEPENDS grass_gis grass_vector grass_neta) +build_program_in_subdir(v.net.connectivity DEPENDS grass_gis grass_vector + grass_neta) -build_program_in_subdir(v.net.distance DEPENDS grass_gis grass_vector grass_neta) +build_program_in_subdir(v.net.distance DEPENDS grass_gis grass_vector + grass_neta) build_program_in_subdir(v.net.flow DEPENDS grass_gis grass_vector grass_neta) @@ -96,15 +104,19 @@ build_program_in_subdir(v.net.iso DEPENDS grass_gis grass_vector grass_neta) build_program_in_subdir(v.net.path DEPENDS grass_gis grass_vector grass_neta) -build_program_in_subdir(v.net.salesman DEPENDS grass_gis grass_vector grass_neta) +build_program_in_subdir(v.net.salesman DEPENDS grass_gis grass_vector + grass_neta) -build_program_in_subdir(v.net.spanningtree DEPENDS grass_gis grass_vector grass_neta) +build_program_in_subdir(v.net.spanningtree DEPENDS grass_gis grass_vector + grass_neta) build_program_in_subdir(v.net.steiner DEPENDS grass_gis grass_vector grass_neta) -build_program_in_subdir(v.net.timetable DEPENDS grass_gis grass_vector grass_neta) +build_program_in_subdir(v.net.timetable DEPENDS grass_gis grass_vector + grass_neta) -build_program_in_subdir(v.net.visibility DEPENDS grass_gis grass_vector grass_neta) +build_program_in_subdir(v.net.visibility DEPENDS grass_gis grass_vector + grass_neta) build_program_in_subdir(v.normal DEPENDS grass_gis grass_vector grass_cdhc) @@ -146,12 +158,19 @@ build_program_in_subdir(v.select DEPENDS grass_gis grass_vector) build_program_in_subdir(v.support DEPENDS grass_gis grass_vector) -build_program_in_subdir(v.surf.bspline DEPENDS grass_gis grass_vector grass_lidar grass_gpde) +build_program_in_subdir(v.surf.bspline DEPENDS grass_gis grass_vector + grass_lidar grass_gpde) build_program_in_subdir(v.surf.idw DEPENDS grass_gis grass_vector) -build_program_in_subdir(v.surf.rst - DEPENDS grass_gis grass_vector grass_interpdata grass_interpfl grass_qtree) +build_program_in_subdir( + v.surf.rst + DEPENDS + grass_gis + grass_vector + grass_interpdata + grass_interpfl + grass_qtree) build_program_in_subdir(v.transform DEPENDS grass_gis grass_vector) @@ -165,7 +184,8 @@ build_program_in_subdir(v.to.points DEPENDS grass_gis grass_vector) build_program_in_subdir(v.to.rast DEPENDS grass_gis grass_vector grass_raster) -build_program_in_subdir(v.to.rast3 DEPENDS grass_gis grass_vector grass_raster3d) +build_program_in_subdir(v.to.rast3 DEPENDS grass_gis grass_vector + grass_raster3d) build_program_in_subdir(v.type DEPENDS grass_gis grass_vector) @@ -177,12 +197,13 @@ build_program_in_subdir(v.what DEPENDS grass_gis grass_vector) build_program_in_subdir(v.what.rast DEPENDS grass_gis grass_vector grass_raster) -build_program_in_subdir(v.what.rast3 DEPENDS grass_gis grass_vector grass_raster3d) +build_program_in_subdir(v.what.rast3 DEPENDS grass_gis grass_vector + grass_raster3d) build_program_in_subdir(v.vect.stats DEPENDS grass_gis grass_vector grass_stats) -build_program_in_subdir(v.vol.rst - DEPENDS grass_gis grass_vector grass_raster3d grass_bitmap) +build_program_in_subdir(v.vol.rst DEPENDS grass_gis grass_vector grass_raster3d + grass_bitmap) build_program_in_subdir(v.out.ogr DEPENDS grass_gis grass_vector) @@ -192,21 +213,38 @@ build_program_in_subdir(v.external DEPENDS grass_gis grass_vector) build_program_in_subdir(v.external.out DEPENDS grass_gis grass_vector) -build_program_in_subdir(v.in.lidar DEPENDS grass_gis grass_vector PRIMARY_DEPENDS LIBLAS) +build_program_in_subdir(v.in.lidar DEPENDS grass_gis grass_vector + PRIMARY_DEPENDS LIBLAS) -build_program_in_subdir(v.lidar.correction DEPENDS grass_gis grass_vector grass_lidar - PRIMARY_DEPENDS LIBLAS) +build_program_in_subdir( + v.lidar.correction + DEPENDS + grass_gis + grass_vector + grass_lidar + PRIMARY_DEPENDS + LIBLAS) -build_program_in_subdir(v.lidar.edgedetection - DEPENDS grass_gis grass_vector grass_lidar grass_dbmibase grass_gmath - PRIMARY_DEPENDS LIBLAS) +build_program_in_subdir( + v.lidar.edgedetection + DEPENDS + grass_gis + grass_vector + grass_lidar + grass_dbmibase + grass_gmath + PRIMARY_DEPENDS + LIBLAS) -build_program_in_subdir(v.lidar.growing DEPENDS grass_gis grass_vector PRIMARY_DEPENDS LIBLAS) +build_program_in_subdir(v.lidar.growing DEPENDS grass_gis grass_vector + PRIMARY_DEPENDS LIBLAS) -build_program_in_subdir(v.out.lidar DEPENDS grass_gis grass_vector PRIMARY_DEPENDS LIBLAS) +build_program_in_subdir(v.out.lidar DEPENDS grass_gis grass_vector + PRIMARY_DEPENDS LIBLAS) -build_program_in_subdir(v.out.postgis DEPENDS grass_gis grass_vector PRIMARY_DEPENDS POSTGRES) +build_program_in_subdir(v.out.postgis DEPENDS grass_gis grass_vector + PRIMARY_DEPENDS POSTGRES) if(WITH_OPENDWG) - build_program_in_subdir(v.in.dwg DEPENDS grass_gis grass_vector) + build_program_in_subdir(v.in.dwg DEPENDS grass_gis grass_vector) endif() diff --git a/vector/v.lrs/CMakeLists.txt b/vector/v.lrs/CMakeLists.txt index f38a7ff17f2..90a0619b96e 100644 --- a/vector/v.lrs/CMakeLists.txt +++ b/vector/v.lrs/CMakeLists.txt @@ -1,19 +1,17 @@ -build_library_in_subdir(lib NAME grass_lrs - DEPENDS grass_gis grass_vector - HEADERS "lrs.h" ) +build_library_in_subdir( + lib + NAME + grass_lrs + DEPENDS + grass_gis + grass_vector + HEADERS + "lrs.h") add_dependencies(grass_lrs db.drivers) -build_program_in_subdir( - v.lrs.create - DEPENDS grass_lrs) +build_program_in_subdir(v.lrs.create DEPENDS grass_lrs) -build_program_in_subdir( - v.lrs.segment - DEPENDS grass_lrs) +build_program_in_subdir(v.lrs.segment DEPENDS grass_lrs) -build_program_in_subdir( - v.lrs.label - DEPENDS grass_lrs) +build_program_in_subdir(v.lrs.label DEPENDS grass_lrs) -build_program_in_subdir( - v.lrs.where - DEPENDS grass_lrs) +build_program_in_subdir(v.lrs.where DEPENDS grass_lrs) From 69392ec4ba3443b0a63ba2b854e42c83295854e6 Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Sun, 3 Mar 2024 16:03:41 +0100 Subject: [PATCH 056/253] Very WIP commit, various changes - Move contents of "thirdparty" dir to "cmake" directory (and remove thirdparty dir) - Test various implementations of FindFFTW. - Start create variables for standard directories like GISBASE_DIR, GRASS_BIN_DIR etc. --- CMakeLists.txt | 20 +- cmake/find_scripts/FindFFTW-egpbos.cmake | 421 ++++++++++++++++++ cmake/find_scripts/FindFFTW-eigen.cmake | 119 +++++ cmake/find_scripts/FindFFTW.cmake | 12 +- .../modules/CheckDependentLibraries.cmake | 200 +++++++-- cmake/modules/Configure.cmake | 233 ++++++++++ include/CMakeLists.txt | 234 ---------- 7 files changed, 953 insertions(+), 286 deletions(-) create mode 100644 cmake/find_scripts/FindFFTW-egpbos.cmake create mode 100644 cmake/find_scripts/FindFFTW-eigen.cmake rename thirdparty/CMakeLists.txt => cmake/modules/CheckDependentLibraries.cmake (50%) create mode 100644 cmake/modules/Configure.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 0b7ea104f76..43ee00c4202 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -117,8 +117,24 @@ set(GRASS_VERSION_NUMBER message(STATUS "GRASS_VERSION_NUMBER = '${GRASS_VERSION_NUMBER}'") set(GRASS_VERSION_UPDATE_PKG "0.2") +# setup install directories +set(GISBASE_DIR "grass${GRASS_VERSION_MAJOR}${GRASS_VERSION_MINOR}") +set(GRASS_BIN_DIR "${GISBASE_DIR}/bin") +set(GRASS_DEMOLOCATION_DIR "${GISBASE_DIR}/demolocation") +set(GRASS_DOCS_DIR "${GISBASE_DIR}/docs") +set(GRASS_DRIVER_DIR "${GISBASE_DIR}/driver") +set(GRASS_ETC_DIR "${GISBASE_DIR}/etc") +set(GRASS_FONTS_DIR "${GISBASE_DIR}/fonts") +set(GRASS_GUI_DIR "${GISBASE_DIR}/gui") +set(GRASS_INCLUDE_DIR "${GISBASE_DIR}/include") +set(GRASS_LIB_DIR "${GISBASE_DIR}/lib") +set(GRASS_SCRIPTS_DIR "${GISBASE_DIR}/scripts") +set(GRASS_SHARE_DIR "${GISBASE_DIR}/share") +set(GRASS_UTILS_DIR "${GISBASE_DIR}/utils") + include(set_compiler_flags) set_compiler_flags() +include(Configure) include(repo_status) repo_status("${CMAKE_CURRENT_LIST_DIR}" GRASS_VERSION_GIT) @@ -145,7 +161,8 @@ include(build_script_in_subdir) include(build_gui_in_subdir) include(check_target) -add_subdirectory(thirdparty) +include(CheckDependentLibraries) + set(MKHTML_PY ${CMAKE_BINARY_DIR}/utils/mkhtml.py) set(GISBASE ${CMAKE_BINARY_DIR}/gisbase) @@ -175,6 +192,7 @@ set(grass_env_command "VERSION_DATE=\"${GRASS_VERSION_DATE}\"") set(NO_HTML_DESCR_TARGETS "g.parser;ximgview;test.raster3d.lib") +# include(Configure) add_subdirectory(include) include_directories("${CMAKE_BINARY_DIR}/include") diff --git a/cmake/find_scripts/FindFFTW-egpbos.cmake b/cmake/find_scripts/FindFFTW-egpbos.cmake new file mode 100644 index 00000000000..1861b54c19d --- /dev/null +++ b/cmake/find_scripts/FindFFTW-egpbos.cmake @@ -0,0 +1,421 @@ +# - Find the FFTW library +# +# Original version of this file: +# Copyright (c) 2015, Wenzel Jakob +# https://github.com/wjakob/layerlab/blob/master/cmake/FindFFTW.cmake, commit 4d58bfdc28891b4f9373dfe46239dda5a0b561c6 +# Modifications: +# Copyright (c) 2017, Patrick Bos +# +# Usage: +# find_package(FFTW [REQUIRED] [QUIET] [COMPONENTS component1 ... componentX] ) +# +# It sets the following variables: +# FFTW_FOUND ... true if fftw is found on the system +# FFTW_[component]_LIB_FOUND ... true if the component is found on the system (see components below) +# FFTW_LIBRARIES ... full paths to all found fftw libraries +# FFTW_[component]_LIB ... full path to one of the components (see below) +# FFTW_INCLUDE_DIRS ... fftw include directory paths +# +# The following variables will be checked by the function +# FFTW_USE_STATIC_LIBS ... if true, only static libraries are found, otherwise both static and shared. +# FFTW_ROOT ... if set, the libraries are exclusively searched +# under this path +# +# This package supports the following components: +# FLOAT_LIB +# DOUBLE_LIB +# LONGDOUBLE_LIB +# FLOAT_THREADS_LIB +# DOUBLE_THREADS_LIB +# LONGDOUBLE_THREADS_LIB +# FLOAT_OPENMP_LIB +# DOUBLE_OPENMP_LIB +# LONGDOUBLE_OPENMP_LIB +# + +# From: https://github.com/egpbos/findFFTW/tree/master + +# 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} ) +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" ) +endif() + +#Check whether to search static or dynamic libs +set( CMAKE_FIND_LIBRARY_SUFFIXES_SAV ${CMAKE_FIND_LIBRARY_SUFFIXES} ) + +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} ) +endif() + +if( FFTW_ROOT ) + # find libs + + find_library( + FFTW_DOUBLE_LIB + NAMES "fftw3" libfftw3-3 + PATHS ${FFTW_ROOT} + PATH_SUFFIXES "lib" "lib64" + NO_DEFAULT_PATH + ) + + find_library( + FFTW_DOUBLE_THREADS_LIB + NAMES "fftw3_threads" + PATHS ${FFTW_ROOT} + PATH_SUFFIXES "lib" "lib64" + NO_DEFAULT_PATH + ) + + find_library( + FFTW_DOUBLE_OPENMP_LIB + NAMES "fftw3_omp" + PATHS ${FFTW_ROOT} + PATH_SUFFIXES "lib" "lib64" + NO_DEFAULT_PATH + ) + + find_library( + FFTW_DOUBLE_MPI_LIB + NAMES "fftw3_mpi" + PATHS ${FFTW_ROOT} + PATH_SUFFIXES "lib" "lib64" + NO_DEFAULT_PATH + ) + + find_library( + FFTW_FLOAT_LIB + NAMES "fftw3f" libfftw3f-3 + PATHS ${FFTW_ROOT} + PATH_SUFFIXES "lib" "lib64" + NO_DEFAULT_PATH + ) + + find_library( + FFTW_FLOAT_THREADS_LIB + NAMES "fftw3f_threads" + PATHS ${FFTW_ROOT} + PATH_SUFFIXES "lib" "lib64" + NO_DEFAULT_PATH + ) + + find_library( + FFTW_FLOAT_OPENMP_LIB + NAMES "fftw3f_omp" + PATHS ${FFTW_ROOT} + PATH_SUFFIXES "lib" "lib64" + NO_DEFAULT_PATH + ) + + find_library( + FFTW_FLOAT_MPI_LIB + NAMES "fftw3f_mpi" + PATHS ${FFTW_ROOT} + PATH_SUFFIXES "lib" "lib64" + NO_DEFAULT_PATH + ) + + find_library( + FFTW_LONGDOUBLE_LIB + NAMES "fftw3l" libfftw3l-3 + PATHS ${FFTW_ROOT} + PATH_SUFFIXES "lib" "lib64" + NO_DEFAULT_PATH + ) + + find_library( + FFTW_LONGDOUBLE_THREADS_LIB + NAMES "fftw3l_threads" + PATHS ${FFTW_ROOT} + PATH_SUFFIXES "lib" "lib64" + NO_DEFAULT_PATH + ) + + find_library( + FFTW_LONGDOUBLE_OPENMP_LIB + NAMES "fftw3l_omp" + PATHS ${FFTW_ROOT} + PATH_SUFFIXES "lib" "lib64" + NO_DEFAULT_PATH + ) + + find_library( + FFTW_LONGDOUBLE_MPI_LIB + NAMES "fftw3l_mpi" + PATHS ${FFTW_ROOT} + PATH_SUFFIXES "lib" "lib64" + NO_DEFAULT_PATH + ) + + #find includes + find_path(FFTW_INCLUDE_DIRS + NAMES "fftw3.h" + PATHS ${FFTW_ROOT} + PATH_SUFFIXES "include" + NO_DEFAULT_PATH + ) + +else() + + find_library( + 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 + NAMES "fftw3l_omp" + PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} + ) + + find_library(FFTW_LONGDOUBLE_MPI_LIB + NAMES "fftw3l_mpi" + PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} + ) + + find_path(FFTW_INCLUDE_DIRS + NAMES "fftw3.h" + PATHS ${PKG_FFTW_INCLUDE_DIRS} ${INCLUDE_INSTALL_DIR} + ) + +endif( FFTW_ROOT ) + +#--------------------------------------- components + +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}" + ) +else() + set(FFTW_DOUBLE_LIB_FOUND FALSE) +endif() + +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}" + ) +else() + set(FFTW_FLOAT_LIB_FOUND FALSE) +endif() + +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}" + ) +else() + set(FFTW_LONGDOUBLE_LIB_FOUND FALSE) +endif() + +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}" + ) +else() + set(FFTW_DOUBLE_THREADS_LIB_FOUND FALSE) +endif() + +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}" + ) +else() + set(FFTW_FLOAT_THREADS_LIB_FOUND FALSE) +endif() + +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}" + ) +else() + set(FFTW_LONGDOUBLE_THREADS_LIB_FOUND FALSE) +endif() + +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}" + ) +else() + set(FFTW_DOUBLE_OPENMP_LIB_FOUND FALSE) +endif() + +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}" + ) +else() + set(FFTW_FLOAT_OPENMP_LIB_FOUND FALSE) +endif() + +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}" + ) +else() + set(FFTW_LONGDOUBLE_OPENMP_LIB_FOUND FALSE) +endif() + +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}" + ) +else() + set(FFTW_DOUBLE_MPI_LIB_FOUND FALSE) +endif() + +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}" + ) +else() + set(FFTW_FLOAT_MPI_LIB_FOUND FALSE) +endif() + +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}" + ) +else() + set(FFTW_LONGDOUBLE_MPI_LIB_FOUND FALSE) +endif() + +#--------------------------------------- end components + +set( CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_SAV} ) + +include(FindPackageHandleStandardArgs) + +find_package_handle_standard_args(FFTW + REQUIRED_VARS FFTW_INCLUDE_DIRS + HANDLE_COMPONENTS + ) + +mark_as_advanced( + FFTW_INCLUDE_DIRS + FFTW_LIBRARIES + FFTW_FLOAT_LIB + FFTW_DOUBLE_LIB + FFTW_LONGDOUBLE_LIB + FFTW_FLOAT_THREADS_LIB + FFTW_DOUBLE_THREADS_LIB + FFTW_LONGDOUBLE_THREADS_LIB + FFTW_FLOAT_OPENMP_LIB + FFTW_DOUBLE_OPENMP_LIB + FFTW_LONGDOUBLE_OPENMP_LIB + 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 new file mode 100644 index 00000000000..e0415e3d944 --- /dev/null +++ b/cmake/find_scripts/FindFFTW-eigen.cmake @@ -0,0 +1,119 @@ +# - Find the FFTW library +# +# Usage: +# find_package(FFTW [REQUIRED] [QUIET] ) +# +# It sets the following variables: +# FFTW_FOUND ... true if fftw is found on the system +# FFTW_LIBRARIES ... full path to fftw library +# FFTW_INCLUDES ... fftw include directory +# +# The following variables will be checked by the function +# FFTW_USE_STATIC_LIBS ... if true, only static libraries are found +# FFTW_ROOT ... if set, the libraries are exclusively searched +# under this path +# FFTW_LIBRARY ... fftw library to use +# FFTW_INCLUDE_DIR ... fftw include directory +# + +#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} ) +endif() + +# Check if we can use PkgConfig +include(CMakeFindDependencyMacro) +find_dependency(PkgConfig) + +#Determine from PKG +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} ) + +if( ${FFTW_USE_STATIC_LIBS} ) + set( CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX} ) +else() + 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 + ) + +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} + ) + +endif() + +set(FFTW_LIBRARIES ${FFTW_LIB} ${FFTWF_LIB}) + +if(FFTWL_LIB) + set(FFTW_LIBRARIES ${FFTW_LIBRARIES} ${FFTWL_LIB}) +endif() + +set( CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_SAV} ) + +include(FindPackageHandleStandardArgs) +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) diff --git a/cmake/find_scripts/FindFFTW.cmake b/cmake/find_scripts/FindFFTW.cmake index 22adc1d8839..f9c92a4c33d 100644 --- a/cmake/find_scripts/FindFFTW.cmake +++ b/cmake/find_scripts/FindFFTW.cmake @@ -57,15 +57,9 @@ mark_as_advanced( # copy HAVE_ to parent scope so that we can use in include/CMakeLists.txt and # rest -set(HAVE_FFTW3_H - ${HAVE_FFTW3_H} - PARENT_SCOPE) -set(HAVE_FFTW_H - ${HAVE_FFTW_H} - PARENT_SCOPE) -set(HAVE_DFFTW_H - ${HAVE_DFFTW_H} - PARENT_SCOPE) +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) diff --git a/thirdparty/CMakeLists.txt b/cmake/modules/CheckDependentLibraries.cmake similarity index 50% rename from thirdparty/CMakeLists.txt rename to cmake/modules/CheckDependentLibraries.cmake index 12ff736ab79..16438a31a07 100644 --- a/thirdparty/CMakeLists.txt +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -1,97 +1,105 @@ +#[=======================================================================[.rst: +CheckDependentLibraries.cmake +----------------------------- + +Detect GRASS dependencies and set variable HAVE_* + +#]=======================================================================] + find_package(FLEX REQUIRED) find_package(BISON REQUIRED) find_package(PROJ REQUIRED) add_library(PROJ INTERFACE IMPORTED GLOBAL) -set_property(TARGET PROJ PROPERTY INTERFACE_LINK_LIBRARIES - ${PROJ_LIBRARY${find_library_suffix}}) -set_property(TARGET PROJ PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${PROJ_INCLUDE_DIR}) +# set_property(TARGET PROJ PROPERTY INTERFACE_LINK_LIBRARIES +# ${PROJ_LIBRARY${find_library_suffix}}) +# set_property(TARGET PROJ PROPERTY INTERFACE_INCLUDE_DIRECTORIES +# ${PROJ_INCLUDE_DIR}) find_package(GDAL REQUIRED) add_library(GDAL INTERFACE IMPORTED GLOBAL) -set_property(TARGET GDAL PROPERTY INTERFACE_LINK_LIBRARIES ${GDAL_LIBRARY}) -set_property(TARGET GDAL PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${GDAL_INCLUDE_DIR}) +# set_property(TARGET GDAL PROPERTY INTERFACE_LINK_LIBRARIES ${GDAL_LIBRARY}) +# set_property(TARGET GDAL PROPERTY INTERFACE_INCLUDE_DIRECTORIES +# ${GDAL_INCLUDE_DIR}) find_package(PNG REQUIRED) add_library(LIBPNG INTERFACE IMPORTED GLOBAL) -set_property(TARGET LIBPNG PROPERTY INTERFACE_LINK_LIBRARIES - ${PNG_LIBRARY${find_library_suffix}}) -set_property(TARGET LIBPNG PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${PNG_INCLUDE_DIR}) +# set_property(TARGET LIBPNG PROPERTY INTERFACE_LINK_LIBRARIES +# ${PNG_LIBRARY${find_library_suffix}}) +# set_property(TARGET LIBPNG PROPERTY INTERFACE_INCLUDE_DIRECTORIES +# ${PNG_INCLUDE_DIR}) find_package(JPEG) if(JPEG_FOUND) add_library(LIBJPEG INTERFACE IMPORTED GLOBAL) - set_property(TARGET LIBJPEG PROPERTY INTERFACE_LINK_LIBRARIES - ${JPEG_LIBRARY${find_library_suffix}}) - set_property(TARGET LIBJPEG PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${JPEG_INCLUDE_DIR}) + # set_property(TARGET LIBJPEG PROPERTY INTERFACE_LINK_LIBRARIES + # ${JPEG_LIBRARY${find_library_suffix}}) + # set_property(TARGET LIBJPEG PROPERTY INTERFACE_INCLUDE_DIRECTORIES + # ${JPEG_INCLUDE_DIR}) endif() find_package(ZLIB REQUIRED) add_library(ZLIB INTERFACE IMPORTED GLOBAL) -set_property(TARGET ZLIB PROPERTY INTERFACE_LINK_LIBRARIES - ${ZLIB_LIBRARY${find_library_suffix}}) -set_property(TARGET ZLIB PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${ZLIB_INCLUDE_DIR}) +# set_property(TARGET ZLIB PROPERTY INTERFACE_LINK_LIBRARIES +# ${ZLIB_LIBRARY${find_library_suffix}}) +# set_property(TARGET ZLIB PROPERTY INTERFACE_INCLUDE_DIRECTORIES +# ${ZLIB_INCLUDE_DIR}) if(UNIX) find_library(M_LIBRARY m) add_library(LIBM INTERFACE IMPORTED GLOBAL) - set_property(TARGET LIBM PROPERTY INTERFACE_LINK_LIBRARIES ${M_LIBRARY}) + # set_property(TARGET LIBM PROPERTY INTERFACE_LINK_LIBRARIES ${M_LIBRARY}) mark_as_advanced(M_LIBRARY) endif() find_package(Freetype REQUIRED) add_library(FREETYPE INTERFACE IMPORTED GLOBAL) -set_property(TARGET FREETYPE PROPERTY INTERFACE_LINK_LIBRARIES - ${FREETYPE_LIBRARY${find_library_suffix}}) -set_property(TARGET FREETYPE PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${FREETYPE_INCLUDE_DIRS}) +# set_property(TARGET FREETYPE PROPERTY INTERFACE_LINK_LIBRARIES +# ${FREETYPE_LIBRARY${find_library_suffix}}) +# set_property(TARGET FREETYPE PROPERTY INTERFACE_INCLUDE_DIRECTORIES +# ${FREETYPE_INCLUDE_DIRS}) 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}) + # set_property(TARGET FFTW PROPERTY INTERFACE_LINK_LIBRARIES ${FFTW_LIBRARIES}) + # set_property(TARGET FFTW PROPERTY INTERFACE_INCLUDE_DIRECTORIES + # ${FFTW_INCLUDE_DIR}) endif() if(WITH_CAIRO) find_package(Cairo REQUIRED) add_library(CAIRO INTERFACE IMPORTED GLOBAL) - set_property(TARGET CAIRO PROPERTY INTERFACE_LINK_LIBRARIES - ${CAIRO_LIBRARIES}) - set_property(TARGET CAIRO PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${CAIRO_INCLUDE_DIRS}) + # set_property(TARGET CAIRO PROPERTY INTERFACE_LINK_LIBRARIES + # ${CAIRO_LIBRARIES}) + # set_property(TARGET CAIRO PROPERTY INTERFACE_INCLUDE_DIRECTORIES + # ${CAIRO_INCLUDE_DIRS}) endif() if(WITH_X11) find_package(X11 REQUIRED) add_library(X11 INTERFACE IMPORTED GLOBAL) - set_property(TARGET X11 PROPERTY INTERFACE_LINK_LIBRARIES ${X11_LIBRARIES}) - set_property(TARGET X11 PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${X11_INCLUDE_DIR}) + # set_property(TARGET X11 PROPERTY INTERFACE_LINK_LIBRARIES ${X11_LIBRARIES}) + # set_property(TARGET X11 PROPERTY INTERFACE_INCLUDE_DIRECTORIES + # ${X11_INCLUDE_DIR}) endif() if(WIN32) find_package(ODBC QUIET) if(ODBC_FOUND) add_library(ODBC INTERFACE IMPORTED GLOBAL) - set_property(TARGET ODBC PROPERTY INTERFACE_LINK_LIBRARIES - ${ODBC_LIBRARIES}) - set_property(TARGET PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${ODBC_INCLUDE_DIRS}) + # set_property(TARGET ODBC PROPERTY INTERFACE_LINK_LIBRARIES + # ${ODBC_LIBRARIES}) + # set_property(TARGET PROPERTY INTERFACE_INCLUDE_DIRECTORIES + # ${ODBC_INCLUDE_DIRS}) endif() endif() find_package(TIFF REQUIRED) add_library(TIFF INTERFACE IMPORTED GLOBAL) -set_property(TARGET TIFF PROPERTY INTERFACE_LINK_LIBRARIES - ${TIFF_LIBRARY${find_library_suffix}}) -set_property(TARGET TIFF PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${TIFF_INCLUDE_DIR}) +# set_property(TARGET TIFF PROPERTY INTERFACE_LINK_LIBRARIES +# ${TIFF_LIBRARY${find_library_suffix}}) +# set_property(TARGET TIFF PROPERTY INTERFACE_INCLUDE_DIRECTORIES +# ${TIFF_INCLUDE_DIR}) find_package(Iconv QUIET) if(ICONV_FOUND) @@ -222,3 +230,111 @@ endif() # find_package (PythonLibs REQUIRED ) find_package(Python3 REQUIRED) # find_package ( Numpy ) + + + +# no target ATLAS in thirdpary/CMakeLists.txt +check_target(ATLAS HAVE_LIBATLAS) + + + +# set(CMAKE_REQUIRED_INCLUDES "${FFTW_INCLUDE_DIR}") +check_target(ICONV HAVE_ICONV_H) +check_target(BZIP2 HAVE_BZLIB_H) +check_target(ZLIB HAVE_ZLIB_H) +check_target(LIBJPEG HAVE_JPEGLIB_H) +check_target(LIBPNG HAVE_PNG_H) +check_target(TIFF HAVE_TIFFIO_H) +check_target(GEOS HAVE_GEOS) +check_target(GDAL HAVE_GDAL) +check_target(GDAL HAVE_OGR) +check_target(SQLITE HAVE_SQLITE) + +check_target(PROJ HAVE_PROJ_H) + +check_target(BLAS HAVE_LIBBLAS) +check_target(BLAS HAVE_CBLAS_H) + +check_target(LAPACK HAVE_LIBLAPACK) +check_target(LAPACK HAVE_CLAPACK_H) + +check_target(FREETYPE HAVE_FT2BUILD_H) +check_target(POSTGRES HAVE_POSTGRES) +check_target(ODBC HAVE_SQL_H) + +if(TARGET POSTGRES) + try_compile( + HAVE_PQCMDTUPLES ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_SOURCE_DIR}/cmake/tests/have_pqcmdtuples.c + CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:PATH=${PostgreSQL_INCLUDE_DIR}" "-w" + "-DLINK_LIBRARIES:STRING=${PostgreSQL_LIBRARY}" + OUTPUT_VARIABLE COMPILE_HAVE_PQCMDTUPLES) + if(NOT COMPILE_HAVE_PQCMDTUPLES) + message( + "Performing Test HAVE_PQCMDTUPLES - Failed\n COMPILE_OUTPUT:${COMPILE_HAVE_PQCMDTUPLES}\n" + ) + else() + message(STATUS "Performing Test HAVE_PQCMDTUPLES - Success") + set(HAVE_PQCMDTUPLES 1) + endif() +endif() + +if(MSVC) + check_target(PCRE HAVE_PCRE_H) +endif() + +check_target(POSTGRES HAVE_LIBPQ_FE_H) + + + +set(HAVE_PBUFFERS 0) +set(HAVE_PIXMAPS 0) +if(WITH_OPENGL) + try_compile( + HAVE_PBUFFERS ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_SOURCE_DIR}/cmake/tests/have_pbuffer.c + CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:PATH=${OPENGL_INCLUDE_DIR}" "-w" + "-DLINK_LIBRARIES:STRING=${OPENGL_LIBRARIES}" + OUTPUT_VARIABLE COMPILE_HAVE_PBUFFERS) + if(NOT COMPILE_HAVE_PBUFFERS) + message( + FATAL_ERROR + "Performing Test HAVE_PBUFFERS - Failed\n COMPILE_OUTPUT:${COMPILE_HAVE_PBUFFERS}\n" + ) + else() + message(STATUS "Performing Test HAVE_PBUFFERS - Success") + set(HAVE_PBUFFERS 1) + endif() + + try_compile( + HAVE_PIXMAPS ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_SOURCE_DIR}/cmake/tests/have_pixmaps.c + CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:PATH=${OPENGL_INCLUDE_DIR}" "-w" + "-DLINK_LIBRARIES:STRING=${OPENGL_LIBRARIES}" + OUTPUT_VARIABLE COMPILE_HAVE_PIXMAPS) + + if(NOT COMPILE_HAVE_PIXMAPS) + message( + FATAL_ERROR + "Performing Test HAVE_PIXMAPS - Failed\n COMPILE_OUTPUT:${COMPILE_HAVE_PIXMAPS}\n" + ) + else() + message(STATUS "Performing Test HAVE_PIXMAPS - Success") + set(HAVE_PIXMAPS 1) + endif() + +endif(WITH_OPENGL) + +set(OPENGL_X11 0) +set(OPENGL_AQUA 0) +set(OPENGL_WINDOWS 0) +if(WITH_OPENGL) + if(APPLE) + set(OPENGL_AQUA 1) + set(OPENGL_AGL 1) + elseif(WIN32) + set(OPENGL_WINDOWS 1) + else() + set(OPENGL_X11 1) + endif() +endif() diff --git a/cmake/modules/Configure.cmake b/cmake/modules/Configure.cmake new file mode 100644 index 00000000000..d3ff090a7b9 --- /dev/null +++ b/cmake/modules/Configure.cmake @@ -0,0 +1,233 @@ +include(CheckIncludeFile) +include(CheckSymbolExists) +include(CheckCSourceCompiles) + +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) +else() + # unistd.h in stocked in thirdparty/msvc/ + set(HAVE_UNISTD_H 1) +endif() +check_include_file(values.h HAVE_VALUES_H) +check_include_file(sys/ioctl.h HAVE_SYS_IOCTL_H) +check_include_file(sys/mtio.h HAVE_SYS_MTIO_H) +check_include_file(sys/resource.h HAVE_SYS_RESOURCE_H) +check_include_file(sys/time.h HAVE_SYS_TIME_H) +check_include_file(time.h HAVE_TIME_H) +check_include_file(sys/timeb.h HAVE_SYS_TIMEB_H) +check_include_file(sys/types.h HAVE_SYS_TYPES_H) +check_include_file(sys/utsname.h HAVE_SYS_UTSNAME_H) +check_include_file(g2c.h HAVE_G2C_H) +check_include_file(f2c.h HAVE_F2C_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) +else() + check_include_file(pthread.h HAVE_PTHREAD_H) + check_include_file(regex.h HAVE_REGEX_H) + check_include_file(libintl.h HAVE_LIBINTL_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 HAVE_ICONV_H) +# check_target(BZIP2 HAVE_BZLIB_H) +# check_target(ZLIB HAVE_ZLIB_H) +# check_target(LIBJPEG HAVE_JPEGLIB_H) +# check_target(LIBPNG HAVE_PNG_H) +# check_target(TIFF HAVE_TIFFIO_H) +# check_target(GEOS HAVE_GEOS) +# check_target(GDAL HAVE_GDAL) +# check_target(GDAL HAVE_OGR) +# check_target(SQLITE HAVE_SQLITE) +# +# check_target(PROJ HAVE_PROJ_H) +# +# check_target(BLAS HAVE_LIBBLAS) +# check_target(BLAS HAVE_CBLAS_H) +# +# check_target(LAPACK HAVE_LIBLAPACK) +# check_target(LAPACK HAVE_CLAPACK_H) +# +# check_target(FREETYPE HAVE_FT2BUILD_H) +# check_target(POSTGRES HAVE_POSTGRES) +# check_target(ODBC HAVE_SQL_H) +# +# if(TARGET POSTGRES) +# try_compile( +# HAVE_PQCMDTUPLES ${CMAKE_CURRENT_BINARY_DIR} +# ${CMAKE_SOURCE_DIR}/cmake/tests/have_pqcmdtuples.c +# CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:PATH=${PostgreSQL_INCLUDE_DIR}" "-w" +# "-DLINK_LIBRARIES:STRING=${PostgreSQL_LIBRARY}" +# OUTPUT_VARIABLE COMPILE_HAVE_PQCMDTUPLES) +# if(NOT COMPILE_HAVE_PQCMDTUPLES) +# message( +# "Performing Test HAVE_PQCMDTUPLES - Failed\n COMPILE_OUTPUT:${COMPILE_HAVE_PQCMDTUPLES}\n" +# ) +# else() +# message(STATUS "Performing Test HAVE_PQCMDTUPLES - Success") +# set(HAVE_PQCMDTUPLES 1) +# endif() +# endif() +# +# if(MSVC) +# check_target(PCRE HAVE_PCRE_H) +# endif() +# +# check_target(POSTGRES HAVE_LIBPQ_FE_H) + +# Whether or not we are using G_socks for display communications +set(USE_G_SOCKS 0) + +if(WITH_LARGEFILES) + set(HAVE_LARGEFILES 1) +else() + set(HAVE_LARGEFILES 0) +endif() + +if(MSVC) + set(GID_TYPE int) + set(UID_TYPE int) + set(UID_TYPE int) + set(RETSIGTYPE "void") +else() + set(RETSIGTYPE "int") +endif() + +# #######################TODO######################## +# no target ATLAS in thirdpary/CMakeLists.txt +# check_target(ATLAS HAVE_LIBATLAS) + +set(USE_NLS 0) +if(WITH_NLS) + set(USE_NLS 1) +endif() +set(HAVE_READLINE_READLINE_H 0) + +if(MSVC) + set(PID_TYPE int) +endif() + +set(_OE_SOCKETS 0) +set(USE_DELTA_FOR_TZ 0) +set(_REENTRANT 0) +# #######################TODO######################## + +set(X_DISPLAY_MISSING 1) +if(TARGET X11) + set(X_DISPLAY_MISSING 0) +endif() + +# used in config.cmake.in +set(STATIC_BUILD 0) +if(NOT BUILD_SHARED_LIBS) + set(STATIC_BUILD 1) +endif() + +# used in config.cmake.in +set(GDEBUG 0) +if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") + 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) + +check_c_source_compiles( + " +#include +#include +#include +int main() { +struct tm *tp; +; return 0; } +" + TIME_WITH_SYS_TIME) + +check_symbol_exists(gethostname "unistd.h" HAVE_GETHOSTNAME) +check_symbol_exists(gettimeofday "sys/time.h" HAVE_GETTIMEOFDAY) +check_symbol_exists(time "time.h" HAVE_TIME) +check_symbol_exists(asprintf "stdio.h" HAVE_ASPRINTF) +check_symbol_exists(putenv "stdlib.h" HAVE_PUTENV) +check_symbol_exists(setenv "stdlib.h" HAVE_SETENV) +check_symbol_exists(socket "sys/socket.h" HAVE_SOCKET) +check_symbol_exists(ftime "sys/timeb.h" HAVE_FTIME) +check_symbol_exists(lseek "unistd.h" HAVE_LSEEK) +check_symbol_exists(uname "sys/utsname.h" HAVE_UNAME) +check_symbol_exists(seteuid "unistd.h" HAVE_SETEUID) +check_symbol_exists(setpriority "sys/resource.h" HAVE_SETPRIORITY) +check_symbol_exists(setreuid "unistd.h" HAVE_SETREUID) +check_symbol_exists(setruid "unistd.h" HAVE_SETRUID) +check_symbol_exists(setpgrp "unistd.h" SETPGRP_VOID) +check_symbol_exists(drand48 "stdlib.h" HAVE_DRAND48) +check_symbol_exists(nanosleep "time.h" HAVE_NANOSLEEP) +check_symbol_exists(fseeko "stdio.h" HAVE_FSEEKO) + +# set(HAVE_PBUFFERS 0) +# set(HAVE_PIXMAPS 0) +# if(WITH_OPENGL) +# try_compile( +# HAVE_PBUFFERS ${CMAKE_CURRENT_BINARY_DIR} +# ${CMAKE_SOURCE_DIR}/cmake/tests/have_pbuffer.c +# CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:PATH=${OPENGL_INCLUDE_DIR}" "-w" +# "-DLINK_LIBRARIES:STRING=${OPENGL_LIBRARIES}" +# OUTPUT_VARIABLE COMPILE_HAVE_PBUFFERS) +# if(NOT COMPILE_HAVE_PBUFFERS) +# message( +# FATAL_ERROR +# "Performing Test HAVE_PBUFFERS - Failed\n COMPILE_OUTPUT:${COMPILE_HAVE_PBUFFERS}\n" +# ) +# else() +# message(STATUS "Performing Test HAVE_PBUFFERS - Success") +# set(HAVE_PBUFFERS 1) +# endif() +# +# try_compile( +# HAVE_PIXMAPS ${CMAKE_CURRENT_BINARY_DIR} +# ${CMAKE_SOURCE_DIR}/cmake/tests/have_pixmaps.c +# CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:PATH=${OPENGL_INCLUDE_DIR}" "-w" +# "-DLINK_LIBRARIES:STRING=${OPENGL_LIBRARIES}" +# OUTPUT_VARIABLE COMPILE_HAVE_PIXMAPS) +# +# if(NOT COMPILE_HAVE_PIXMAPS) +# message( +# FATAL_ERROR +# "Performing Test HAVE_PIXMAPS - Failed\n COMPILE_OUTPUT:${COMPILE_HAVE_PIXMAPS}\n" +# ) +# else() +# message(STATUS "Performing Test HAVE_PIXMAPS - Success") +# set(HAVE_PIXMAPS 1) +# endif() +# +# endif(WITH_OPENGL) +# +# set(OPENGL_X11 0) +# set(OPENGL_AQUA 0) +# set(OPENGL_WINDOWS 0) +# if(WITH_OPENGL) +# if(APPLE) +# set(OPENGL_AQUA 1) +# set(OPENGL_AGL 1) +# elseif(WIN32) +# set(OPENGL_WINDOWS 1) +# else() +# set(OPENGL_X11 1) +# endif() +# endif() diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt index 337a2190b55..e8a19e562e5 100644 --- a/include/CMakeLists.txt +++ b/include/CMakeLists.txt @@ -1,237 +1,3 @@ -include(CheckIncludeFile) -include(CheckSymbolExists) - -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) -else() - # unistd.h in stocked in thirdparty/msvc/ - set(HAVE_UNISTD_H 1) -endif() -check_include_file(values.h HAVE_VALUES_H) -check_include_file(sys/ioctl.h HAVE_SYS_IOCTL_H) -check_include_file(sys/mtio.h HAVE_SYS_MTIO_H) -check_include_file(sys/resource.h HAVE_SYS_RESOURCE_H) -check_include_file(sys/time.h HAVE_SYS_TIME_H) -check_include_file(time.h HAVE_TIME_H) -check_include_file(sys/timeb.h HAVE_SYS_TIMEB_H) -check_include_file(sys/types.h HAVE_SYS_TYPES_H) -check_include_file(sys/utsname.h HAVE_SYS_UTSNAME_H) -check_include_file(g2c.h HAVE_G2C_H) -check_include_file(f2c.h HAVE_F2C_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) -else() - check_include_file(pthread.h HAVE_PTHREAD_H) - check_include_file(regex.h HAVE_REGEX_H) - check_include_file(libintl.h HAVE_LIBINTL_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 HAVE_ICONV_H) -check_target(BZIP2 HAVE_BZLIB_H) -check_target(ZLIB HAVE_ZLIB_H) -check_target(LIBJPEG HAVE_JPEGLIB_H) -check_target(LIBPNG HAVE_PNG_H) -check_target(TIFF HAVE_TIFFIO_H) -check_target(GEOS HAVE_GEOS) -check_target(GDAL HAVE_GDAL) -check_target(GDAL HAVE_OGR) -check_target(SQLITE HAVE_SQLITE) - -check_target(PROJ HAVE_PROJ_H) - -check_target(BLAS HAVE_LIBBLAS) -check_target(BLAS HAVE_CBLAS_H) - -check_target(LAPACK HAVE_LIBLAPACK) -check_target(LAPACK HAVE_CLAPACK_H) - -check_target(FREETYPE HAVE_FT2BUILD_H) -check_target(POSTGRES HAVE_POSTGRES) -check_target(ODBC HAVE_SQL_H) - -if(TARGET POSTGRES) - try_compile( - HAVE_PQCMDTUPLES ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_SOURCE_DIR}/cmake/tests/have_pqcmdtuples.c - CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:PATH=${PostgreSQL_INCLUDE_DIR}" "-w" - "-DLINK_LIBRARIES:STRING=${PostgreSQL_LIBRARY}" - OUTPUT_VARIABLE COMPILE_HAVE_PQCMDTUPLES) - if(NOT COMPILE_HAVE_PQCMDTUPLES) - message( - "Performing Test HAVE_PQCMDTUPLES - Failed\n COMPILE_OUTPUT:${COMPILE_HAVE_PQCMDTUPLES}\n" - ) - else() - message(STATUS "Performing Test HAVE_PQCMDTUPLES - Success") - set(HAVE_PQCMDTUPLES 1) - endif() -endif() - -if(MSVC) - check_target(PCRE HAVE_PCRE_H) -endif() - -check_target(POSTGRES HAVE_LIBPQ_FE_H) - -# Whether or not we are using G_socks for display communications -set(USE_G_SOCKS 0) - -if(WITH_LARGEFILES) - set(HAVE_LARGEFILES 1) -else() - set(HAVE_LARGEFILES 0) -endif() - -if(MSVC) - set(GID_TYPE int) - set(UID_TYPE int) - set(UID_TYPE int) - set(RETSIGTYPE "void") -else() - set(RETSIGTYPE "int") -endif() - -# #######################TODO######################## -# no target ATLAS in thirdpary/CMakeLists.txt -check_target(ATLAS HAVE_LIBATLAS) - -set(USE_NLS 0) -if(WITH_NLS) - set(USE_NLS 1) -endif() -set(HAVE_READLINE_READLINE_H 0) - -if(MSVC) - set(PID_TYPE int) -endif() - -set(_OE_SOCKETS 0) -set(USE_DELTA_FOR_TZ 0) -set(_REENTRANT 0) -# #######################TODO######################## - -set(X_DISPLAY_MISSING 1) -if(TARGET X11) - set(X_DISPLAY_MISSING 0) -endif() - -# used in config.cmake.in -set(STATIC_BUILD 0) -if(NOT BUILD_SHARED_LIBS) - set(STATIC_BUILD 1) -endif() - -# used in config.cmake.in -set(GDEBUG 0) -if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") - set(GDEBUG 1) -endif() - -include(CheckCSourceCompiles) - -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) - -check_c_source_compiles( - " -#include -#include -#include -int main() { -struct tm *tp; -; return 0; } -" - TIME_WITH_SYS_TIME) - -check_symbol_exists(gethostname "unistd.h" HAVE_GETHOSTNAME) -check_symbol_exists(gettimeofday "sys/time.h" HAVE_GETTIMEOFDAY) -check_symbol_exists(time "time.h" HAVE_TIME) -check_symbol_exists(asprintf "stdio.h" HAVE_ASPRINTF) -check_symbol_exists(putenv "stdlib.h" HAVE_PUTENV) -check_symbol_exists(setenv "stdlib.h" HAVE_SETENV) -check_symbol_exists(socket "sys/socket.h" HAVE_SOCKET) -check_symbol_exists(ftime "sys/timeb.h" HAVE_FTIME) -check_symbol_exists(lseek "unistd.h" HAVE_LSEEK) -check_symbol_exists(uname "sys/utsname.h" HAVE_UNAME) -check_symbol_exists(seteuid "unistd.h" HAVE_SETEUID) -check_symbol_exists(setpriority "sys/resource.h" HAVE_SETPRIORITY) -check_symbol_exists(setreuid "unistd.h" HAVE_SETREUID) -check_symbol_exists(setruid "unistd.h" HAVE_SETRUID) -check_symbol_exists(setpgrp "unistd.h" SETPGRP_VOID) -check_symbol_exists(drand48 "stdlib.h" HAVE_DRAND48) -check_symbol_exists(nanosleep "time.h" HAVE_NANOSLEEP) -check_symbol_exists(fseeko "stdio.h" HAVE_FSEEKO) - -set(HAVE_PBUFFERS 0) -set(HAVE_PIXMAPS 0) -if(WITH_OPENGL) - try_compile( - HAVE_PBUFFERS ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_SOURCE_DIR}/cmake/tests/have_pbuffer.c - CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:PATH=${OPENGL_INCLUDE_DIR}" "-w" - "-DLINK_LIBRARIES:STRING=${OPENGL_LIBRARIES}" - OUTPUT_VARIABLE COMPILE_HAVE_PBUFFERS) - if(NOT COMPILE_HAVE_PBUFFERS) - message( - FATAL_ERROR - "Performing Test HAVE_PBUFFERS - Failed\n COMPILE_OUTPUT:${COMPILE_HAVE_PBUFFERS}\n" - ) - else() - message(STATUS "Performing Test HAVE_PBUFFERS - Success") - set(HAVE_PBUFFERS 1) - endif() - - try_compile( - HAVE_PIXMAPS ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_SOURCE_DIR}/cmake/tests/have_pixmaps.c - CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:PATH=${OPENGL_INCLUDE_DIR}" "-w" - "-DLINK_LIBRARIES:STRING=${OPENGL_LIBRARIES}" - OUTPUT_VARIABLE COMPILE_HAVE_PIXMAPS) - - if(NOT COMPILE_HAVE_PIXMAPS) - message( - FATAL_ERROR - "Performing Test HAVE_PIXMAPS - Failed\n COMPILE_OUTPUT:${COMPILE_HAVE_PIXMAPS}\n" - ) - else() - message(STATUS "Performing Test HAVE_PIXMAPS - Success") - set(HAVE_PIXMAPS 1) - endif() - -endif(WITH_OPENGL) - -set(OPENGL_X11 0) -set(OPENGL_AQUA 0) -set(OPENGL_WINDOWS 0) -if(WITH_OPENGL) - if(APPLE) - set(OPENGL_AQUA 1) - set(OPENGL_AGL 1) - elseif(WIN32) - set(OPENGL_WINDOWS 1) - else() - set(OPENGL_X11 1) - endif() -endif() file(GLOB_RECURSE SRCHS "*.h") set(include_depends) From fa702a96fd364d09e06cc8538b82c3ea321d66c1 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Thu, 18 Apr 2024 03:00:53 -0600 Subject: [PATCH 057/253] Define global PYTHON_EXECUTABLE --- lib/CMakeLists.txt | 4 ++++ lib/init/CMakeLists.txt | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 5e8dd6c9607..eb6fd15a301 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -183,6 +183,10 @@ build_library_in_subdir(symbol NAME grass_sym DEPENDS grass_raster) add_subdirectory(init) +set(PYTHON_EXECUTABLE + ${PYTHON_EXECUTABLE} + PARENT_SCOPE) + build_library_in_subdir(cdhc DEPENDS grass_raster) build_library_in_subdir(stats DEPENDS grass_raster) diff --git a/lib/init/CMakeLists.txt b/lib/init/CMakeLists.txt index 2972f061d72..d5cb1e76cef 100644 --- a/lib/init/CMakeLists.txt +++ b/lib/init/CMakeLists.txt @@ -50,7 +50,11 @@ get_filename_component(GDAL_DIR ${GDAL_DIR} PATH) file(TO_NATIVE_PATH ${GDAL_DIR}/bin DEPS_DLL_PATH) list(APPEND DLL_PATH_LIST ${DEPS_DLL_PATH}) -file(TO_NATIVE_PATH ${Python_EXECUTABLE} GRASS_PYTHON) +find_package(Python3 REQUIRED) +set(PYTHON_EXECUTABLE + ${Python3_EXECUTABLE} + PARENT_SCOPE) +file(TO_NATIVE_PATH ${Python3_EXECUTABLE} GRASS_PYTHON) # For install tree (first do install tree) if(UNIX OR MINGW) From 1be74e35b6d40957519bbccf194b31067c31bf04 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Thu, 18 Apr 2024 03:07:02 -0600 Subject: [PATCH 058/253] Shared library versioning and symlinks --- cmake/modules/build_module.cmake | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cmake/modules/build_module.cmake b/cmake/modules/build_module.cmake index 298a97f3b0d..ab8b5695a29 100644 --- a/cmake/modules/build_module.cmake +++ b/cmake/modules/build_module.cmake @@ -88,9 +88,11 @@ function(build_module) else() add_library(${G_NAME} ${${G_NAME}_SRCS}) - set_target_properties(${G_NAME} PROPERTIES FOLDER lib) set_target_properties( - ${G_NAME} PROPERTIES OUTPUT_NAME ${G_NAME}.${GRASS_VERSION_NUMBER}) + ${G_NAME} + PROPERTIES FOLDER lib + VERSION ${GRASS_VERSION_NUMBER} + SOVERSION ${GRASS_VERSION_MAJOR}) set(export_file_name "${CMAKE_BINARY_DIR}/include/export/${G_NAME}_export.h") # Default is to use library target name without grass_ prefix From 7186e9c03908f550b1690d10a88b5b65024b560d Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Thu, 18 Apr 2024 03:12:34 -0600 Subject: [PATCH 059/253] Rename grass.sh to grass and set 755 permissions --- lib/init/CMakeLists.txt | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/lib/init/CMakeLists.txt b/lib/init/CMakeLists.txt index d5cb1e76cef..185cde91759 100644 --- a/lib/init/CMakeLists.txt +++ b/lib/init/CMakeLists.txt @@ -6,8 +6,10 @@ file(GLOB init_HTMLFILES "*.html") set(START_UP "grass${GRASS_VERSION_MAJOR}${GRASS_VERSION_MINOR}.py") if(WIN32) set(script_file_name "grass.bat") + set(script_input_file_name ${script_file_name}.in) else() - set(script_file_name "grass.sh") + set(script_file_name "grass") + set(script_input_file_name ${script_file_name}.sh.in) endif() file(TO_NATIVE_PATH ${CMAKE_BINARY_DIR}/bin BINARY_DIR) @@ -94,7 +96,7 @@ configure_file(grass.py ${CMAKE_CURRENT_BINARY_DIR}/etc/${START_UP} @ONLY) install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/etc/${START_UP} DESTINATION etc) # configure and install grass wrapper script (grass.bat or grass.sh -configure_file(${script_file_name}.in +configure_file(${script_input_file_name} ${CMAKE_CURRENT_BINARY_DIR}/${script_file_name} @ONLY) install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${script_file_name} DESTINATION bin) @@ -102,7 +104,20 @@ install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${script_file_name} # For build tree file(TO_NATIVE_PATH ${GISBASE} gisbase_init_dir) file(TO_NATIVE_PATH "${GISBASE}/etc/config" grass_config_dir) -configure_file(${script_file_name}.in ${GISBASE}/${script_file_name} @ONLY) +configure_file(${script_input_file_name} ${GISBASE}/${script_file_name} @ONLY) +if(UNIX OR MINGW) + file( + CHMOD + ${GISBASE}/${script_file_name} + FILE_PERMISSIONS + OWNER_READ + OWNER_WRITE + OWNER_EXECUTE + GROUP_READ + GROUP_EXECUTE + WORLD_READ + WORLD_EXECUTE) +endif() file(COPY ${CMAKE_SOURCE_DIR}/demolocation/PERMANENT DESTINATION ${GISBASE}/demolocation/) From 61cd5fcc3f92b54df096c2102cc0449dddb685e2 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Thu, 18 Apr 2024 06:31:39 -0600 Subject: [PATCH 060/253] Rename project to GRASS --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 43ee00c4202..233868c7ece 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,7 +14,7 @@ set(CMAKE_DISABLE_IN_SOURCE_BUILD ON) # set(VCPKG_TARGET_TRIPLET "$ENV{VCPKG_DEFAULT_TRIPLET}" CACHE STRING "") # endif() -project(GRASSGIS) +project(GRASS) set(BUILD_SHARED_LIBS ON) # message(FATAL_ERROR "VCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET}") From edc25bad9abf6289af0bc92e36b4e6fe4a8d85a1 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Thu, 18 Apr 2024 07:31:26 -0600 Subject: [PATCH 061/253] Define PYTHON_EXECUTABLE from CheckDependentLibraries.cmake --- CMakeLists.txt | 5 ++--- cmake/modules/CheckDependentLibraries.cmake | 1 + lib/CMakeLists.txt | 4 ---- lib/init/CMakeLists.txt | 6 +----- 4 files changed, 4 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 233868c7ece..75ff655302c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -152,6 +152,8 @@ if(NOT CMAKE_ARCHIVE_OUTPUT_DIRECTORY) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) endif() +include(check_target) +include(CheckDependentLibraries) include(build_module) include(build_program) include(build_program_in_subdir) @@ -159,9 +161,6 @@ include(build_library_in_subdir) include(copy_python_files_in_subdir) include(build_script_in_subdir) include(build_gui_in_subdir) -include(check_target) - -include(CheckDependentLibraries) set(MKHTML_PY ${CMAKE_BINARY_DIR}/utils/mkhtml.py) diff --git a/cmake/modules/CheckDependentLibraries.cmake b/cmake/modules/CheckDependentLibraries.cmake index 16438a31a07..3f592b7db12 100644 --- a/cmake/modules/CheckDependentLibraries.cmake +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -229,6 +229,7 @@ endif() # find_package (PythonLibs REQUIRED ) find_package(Python3 REQUIRED) +set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE}) # find_package ( Numpy ) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index eb6fd15a301..5e8dd6c9607 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -183,10 +183,6 @@ build_library_in_subdir(symbol NAME grass_sym DEPENDS grass_raster) add_subdirectory(init) -set(PYTHON_EXECUTABLE - ${PYTHON_EXECUTABLE} - PARENT_SCOPE) - build_library_in_subdir(cdhc DEPENDS grass_raster) build_library_in_subdir(stats DEPENDS grass_raster) diff --git a/lib/init/CMakeLists.txt b/lib/init/CMakeLists.txt index 185cde91759..fdac4ba4f06 100644 --- a/lib/init/CMakeLists.txt +++ b/lib/init/CMakeLists.txt @@ -52,11 +52,7 @@ get_filename_component(GDAL_DIR ${GDAL_DIR} PATH) file(TO_NATIVE_PATH ${GDAL_DIR}/bin DEPS_DLL_PATH) list(APPEND DLL_PATH_LIST ${DEPS_DLL_PATH}) -find_package(Python3 REQUIRED) -set(PYTHON_EXECUTABLE - ${Python3_EXECUTABLE} - PARENT_SCOPE) -file(TO_NATIVE_PATH ${Python3_EXECUTABLE} GRASS_PYTHON) +file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} GRASS_PYTHON) # For install tree (first do install tree) if(UNIX OR MINGW) From ca13896bcc844b13d214920234ecc3964a0ef78e Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Thu, 18 Apr 2024 07:52:59 -0600 Subject: [PATCH 062/253] Add dependency properties --- cmake/modules/CheckDependentLibraries.cmake | 158 ++++++++++++-------- 1 file changed, 94 insertions(+), 64 deletions(-) diff --git a/cmake/modules/CheckDependentLibraries.cmake b/cmake/modules/CheckDependentLibraries.cmake index 3f592b7db12..681ee342e71 100644 --- a/cmake/modules/CheckDependentLibraries.cmake +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -11,24 +11,30 @@ find_package(FLEX REQUIRED) find_package(BISON REQUIRED) find_package(PROJ REQUIRED) -add_library(PROJ INTERFACE IMPORTED GLOBAL) -# set_property(TARGET PROJ PROPERTY INTERFACE_LINK_LIBRARIES -# ${PROJ_LIBRARY${find_library_suffix}}) -# set_property(TARGET PROJ PROPERTY INTERFACE_INCLUDE_DIRECTORIES -# ${PROJ_INCLUDE_DIR}) +if(PROJ_FOUND) + add_library(PROJ INTERFACE IMPORTED GLOBAL) + set_property(TARGET PROJ PROPERTY INTERFACE_LINK_LIBRARIES + ${PROJ_LIBRARY${find_library_suffix}}) + set_property(TARGET PROJ PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${PROJ_INCLUDE_DIR}) +endif() find_package(GDAL REQUIRED) -add_library(GDAL INTERFACE IMPORTED GLOBAL) -# set_property(TARGET GDAL PROPERTY INTERFACE_LINK_LIBRARIES ${GDAL_LIBRARY}) -# set_property(TARGET GDAL PROPERTY INTERFACE_INCLUDE_DIRECTORIES -# ${GDAL_INCLUDE_DIR}) +if(GDAL_FOUND) + add_library(GDAL INTERFACE IMPORTED GLOBAL) + set_property(TARGET GDAL PROPERTY INTERFACE_LINK_LIBRARIES ${GDAL_LIBRARY}) + set_property(TARGET GDAL PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${GDAL_INCLUDE_DIR}) +endif() find_package(PNG REQUIRED) -add_library(LIBPNG INTERFACE IMPORTED GLOBAL) -# set_property(TARGET LIBPNG PROPERTY INTERFACE_LINK_LIBRARIES -# ${PNG_LIBRARY${find_library_suffix}}) -# set_property(TARGET LIBPNG PROPERTY INTERFACE_INCLUDE_DIRECTORIES -# ${PNG_INCLUDE_DIR}) +if(PNG_FOUND) + add_library(LIBPNG INTERFACE IMPORTED GLOBAL) + set_property(TARGET LIBPNG PROPERTY INTERFACE_LINK_LIBRARIES + ${PNG_LIBRARY${find_library_suffix}}) + set_property(TARGET LIBPNG PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${PNG_INCLUDE_DIR}) +endif() find_package(JPEG) if(JPEG_FOUND) @@ -38,49 +44,59 @@ if(JPEG_FOUND) # set_property(TARGET LIBJPEG PROPERTY INTERFACE_INCLUDE_DIRECTORIES # ${JPEG_INCLUDE_DIR}) endif() + find_package(ZLIB REQUIRED) -add_library(ZLIB INTERFACE IMPORTED GLOBAL) -# set_property(TARGET ZLIB PROPERTY INTERFACE_LINK_LIBRARIES -# ${ZLIB_LIBRARY${find_library_suffix}}) -# set_property(TARGET ZLIB PROPERTY INTERFACE_INCLUDE_DIRECTORIES -# ${ZLIB_INCLUDE_DIR}) +if(ZLIB_FOUND) + add_library(ZLIB INTERFACE IMPORTED GLOBAL) + set_property(TARGET ZLIB PROPERTY INTERFACE_LINK_LIBRARIES + ${ZLIB_LIBRARY${find_library_suffix}}) + set_property(TARGET ZLIB PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${ZLIB_INCLUDE_DIR}) +endif() + if(UNIX) find_library(M_LIBRARY m) add_library(LIBM INTERFACE IMPORTED GLOBAL) - # set_property(TARGET LIBM PROPERTY INTERFACE_LINK_LIBRARIES ${M_LIBRARY}) + set_property(TARGET LIBM PROPERTY INTERFACE_LINK_LIBRARIES ${M_LIBRARY}) mark_as_advanced(M_LIBRARY) endif() find_package(Freetype REQUIRED) -add_library(FREETYPE INTERFACE IMPORTED GLOBAL) -# set_property(TARGET FREETYPE PROPERTY INTERFACE_LINK_LIBRARIES -# ${FREETYPE_LIBRARY${find_library_suffix}}) -# set_property(TARGET FREETYPE PROPERTY INTERFACE_INCLUDE_DIRECTORIES -# ${FREETYPE_INCLUDE_DIRS}) +if(FREETYPE_FOUND) + add_library(FREETYPE INTERFACE IMPORTED GLOBAL) + set_property(TARGET FREETYPE PROPERTY INTERFACE_LINK_LIBRARIES + ${FREETYPE_LIBRARY${find_library_suffix}}) + set_property(TARGET FREETYPE PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${FREETYPE_INCLUDE_DIRS}) +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}) + set_property(TARGET FFTW PROPERTY INTERFACE_LINK_LIBRARIES ${FFTW_LIBRARIES}) + set_property(TARGET FFTW PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${FFTW_INCLUDE_DIR}) endif() if(WITH_CAIRO) find_package(Cairo REQUIRED) - add_library(CAIRO INTERFACE IMPORTED GLOBAL) - # set_property(TARGET CAIRO PROPERTY INTERFACE_LINK_LIBRARIES - # ${CAIRO_LIBRARIES}) - # set_property(TARGET CAIRO PROPERTY INTERFACE_INCLUDE_DIRECTORIES - # ${CAIRO_INCLUDE_DIRS}) + if(CAIRO_FOUND) + add_library(CAIRO INTERFACE IMPORTED GLOBAL) + set_property(TARGET CAIRO PROPERTY INTERFACE_LINK_LIBRARIES + ${CAIRO_LIBRARIES}) + set_property(TARGET CAIRO PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${CAIRO_INCLUDE_DIRS}) + endif() endif() if(WITH_X11) find_package(X11 REQUIRED) - add_library(X11 INTERFACE IMPORTED GLOBAL) - # set_property(TARGET X11 PROPERTY INTERFACE_LINK_LIBRARIES ${X11_LIBRARIES}) - # set_property(TARGET X11 PROPERTY INTERFACE_INCLUDE_DIRECTORIES - # ${X11_INCLUDE_DIR}) + if(X11_FOUND) + add_library(X11 INTERFACE IMPORTED GLOBAL) + set_property(TARGET X11 PROPERTY INTERFACE_LINK_LIBRARIES ${X11_LIBRARIES}) + set_property(TARGET X11 PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${X11_INCLUDE_DIR}) + endif() endif() if(WIN32) @@ -95,11 +111,13 @@ if(WIN32) endif() find_package(TIFF REQUIRED) -add_library(TIFF INTERFACE IMPORTED GLOBAL) -# set_property(TARGET TIFF PROPERTY INTERFACE_LINK_LIBRARIES -# ${TIFF_LIBRARY${find_library_suffix}}) -# set_property(TARGET TIFF PROPERTY INTERFACE_INCLUDE_DIRECTORIES -# ${TIFF_INCLUDE_DIR}) +if(TIFF_FOUND) + add_library(TIFF INTERFACE IMPORTED GLOBAL) + set_property(TARGET TIFF PROPERTY INTERFACE_LINK_LIBRARIES + ${TIFF_LIBRARY${find_library_suffix}}) + set_property(TARGET TIFF PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${TIFF_INCLUDE_DIR}) +endif() find_package(Iconv QUIET) if(ICONV_FOUND) @@ -143,33 +161,39 @@ endif() if(WITH_OPENGL) find_package(OpenGL REQUIRED) - add_library(OPENGL INTERFACE IMPORTED GLOBAL) - if(APPLE) - find_library(AGL_FRAMEWORK AGL DOC "AGL lib for OSX") - set(APP "-framework AGL -framework ApplicationServices") - endif() - set_property(TARGET OPENGL PROPERTY INTERFACE_LINK_LIBRARIES + if(OPENGL_FOUND) + add_library(OPENGL INTERFACE IMPORTED GLOBAL) + if(APPLE) + find_library(AGL_FRAMEWORK AGL DOC "AGL lib for OSX") + set(APP "-framework AGL -framework ApplicationServices") + endif() + set_property(TARGET OPENGL PROPERTY INTERFACE_LINK_LIBRARIES ${OPENGL_LIBRARIES} ${AGL_FRAMEWORK}) - set_property(TARGET OPENGL PROPERTY INTERFACE_INCLUDE_DIRECTORIES + set_property(TARGET OPENGL PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${OPENGL_INCLUDE_DIR} ${AGL_FRAMEWORK}) + endif() endif() if(WITH_POSTGRES) find_package(PostgreSQL REQUIRED) - add_library(POSTGRES INTERFACE IMPORTED GLOBAL) - set_property(TARGET POSTGRES PROPERTY INTERFACE_LINK_LIBRARIES + if(POSTGRESQL_FOUND) + add_library(POSTGRES INTERFACE IMPORTED GLOBAL) + set_property(TARGET POSTGRES PROPERTY INTERFACE_LINK_LIBRARIES ${PostgreSQL_LIBRARY}) - set_property(TARGET POSTGRES PROPERTY INTERFACE_INCLUDE_DIRECTORIES + set_property(TARGET POSTGRES PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PostgreSQL_INCLUDE_DIR}) + endif() endif() if(WITH_SQLITE) find_package(SQLite REQUIRED) - add_library(SQLITE INTERFACE IMPORTED GLOBAL) - set_property(TARGET SQLITE PROPERTY INTERFACE_LINK_LIBRARIES + if(SQLITE_FOUND) + add_library(SQLITE INTERFACE IMPORTED GLOBAL) + set_property(TARGET SQLITE PROPERTY INTERFACE_LINK_LIBRARIES ${SQLITE_LIBRARY}) - set_property(TARGET SQLITE PROPERTY INTERFACE_INCLUDE_DIRECTORIES + set_property(TARGET SQLITE PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${SQLITE_INCLUDE_DIRS}) + endif() endif() find_package(PDAL QUIET) @@ -199,15 +223,17 @@ if(NETCDF_FOUND) endif() find_package(GEOS REQUIRED) -add_library(GEOS INTERFACE IMPORTED GLOBAL) -set_property(TARGET GEOS PROPERTY INTERFACE_LINK_LIBRARIES +if(GEOS_FOUND) + add_library(GEOS INTERFACE IMPORTED GLOBAL) + set_property(TARGET GEOS PROPERTY INTERFACE_LINK_LIBRARIES ${GEOS_C_LIBRARY${find_library_suffix}}) -set_property(TARGET GEOS PROPERTY INTERFACE_INCLUDE_DIRECTORIES + set_property(TARGET GEOS PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${GEOS_INCLUDE_DIR}) +endif() set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads) -if(Threads_FOUND) +if(THREADS_FOUND) add_library(PTHREAD INTERFACE IMPORTED GLOBAL) if(THREADS_HAVE_PTHREAD_ARG) set_property(TARGET PTHREAD PROPERTY INTERFACE_COMPILE_OPTIONS "-pthread") @@ -220,17 +246,21 @@ endif() if(MSVC) find_package(PCRE REQUIRED) - add_library(PCRE INTERFACE IMPORTED GLOBAL) - set_property(TARGET PCRE PROPERTY INTERFACE_LINK_LIBRARIES + 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 + set_property(TARGET PCRE PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PCRE_INCLUDE_DIR}) + endif() endif() -# find_package (PythonLibs REQUIRED ) find_package(Python3 REQUIRED) -set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE}) +if(PYTHON3_FOUND) + set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE}) +# find_package (PythonLibs REQUIRED ) # find_package ( Numpy ) +endif() From cc8bfdfccda63f8325036dac930806b1907e82b1 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Thu, 18 Apr 2024 09:08:02 -0600 Subject: [PATCH 063/253] libjpeg not required anymore? --- cmake/modules/CheckDependentLibraries.cmake | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/cmake/modules/CheckDependentLibraries.cmake b/cmake/modules/CheckDependentLibraries.cmake index 681ee342e71..6559512176e 100644 --- a/cmake/modules/CheckDependentLibraries.cmake +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -36,14 +36,16 @@ if(PNG_FOUND) ${PNG_INCLUDE_DIR}) endif() -find_package(JPEG) -if(JPEG_FOUND) - add_library(LIBJPEG INTERFACE IMPORTED GLOBAL) - # set_property(TARGET LIBJPEG PROPERTY INTERFACE_LINK_LIBRARIES - # ${JPEG_LIBRARY${find_library_suffix}}) - # set_property(TARGET LIBJPEG PROPERTY INTERFACE_INCLUDE_DIRECTORIES +# TODO: no core and addon modules use libjpeg; delete this block +# find -type f -exec grep -H HAVE_JPEGLIB_H {} \; | grep -v "cmake\|config.h" +#find_package(JPEG) +#if(JPEG_FOUND) +# add_library(LIBJPEG INTERFACE IMPORTED GLOBAL) +# set_property(TARGET LIBJPEG PROPERTY INTERFACE_LINK_LIBRARIES +# ${JPEG_LIBRARY${find_library_suffix}}) +# set_property(TARGET LIBJPEG PROPERTY INTERFACE_INCLUDE_DIRECTORIES # ${JPEG_INCLUDE_DIR}) -endif() +#endif() find_package(ZLIB REQUIRED) if(ZLIB_FOUND) From 4a92f5cd5c46fbdee949654cdd7fca5d4f5f3689 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Thu, 18 Apr 2024 18:21:39 -0600 Subject: [PATCH 064/253] cmake-format --- cmake/modules/CheckDependentLibraries.cmake | 81 ++++++++++----------- 1 file changed, 38 insertions(+), 43 deletions(-) diff --git a/cmake/modules/CheckDependentLibraries.cmake b/cmake/modules/CheckDependentLibraries.cmake index 6559512176e..fecfe2ac4cc 100644 --- a/cmake/modules/CheckDependentLibraries.cmake +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -14,9 +14,9 @@ find_package(PROJ REQUIRED) if(PROJ_FOUND) add_library(PROJ INTERFACE IMPORTED GLOBAL) set_property(TARGET PROJ PROPERTY INTERFACE_LINK_LIBRARIES - ${PROJ_LIBRARY${find_library_suffix}}) + ${PROJ_LIBRARY${find_library_suffix}}) set_property(TARGET PROJ PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${PROJ_INCLUDE_DIR}) + ${PROJ_INCLUDE_DIR}) endif() find_package(GDAL REQUIRED) @@ -24,28 +24,30 @@ if(GDAL_FOUND) add_library(GDAL INTERFACE IMPORTED GLOBAL) set_property(TARGET GDAL PROPERTY INTERFACE_LINK_LIBRARIES ${GDAL_LIBRARY}) set_property(TARGET GDAL PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${GDAL_INCLUDE_DIR}) + ${GDAL_INCLUDE_DIR}) endif() find_package(PNG REQUIRED) if(PNG_FOUND) add_library(LIBPNG INTERFACE IMPORTED GLOBAL) set_property(TARGET LIBPNG PROPERTY INTERFACE_LINK_LIBRARIES - ${PNG_LIBRARY${find_library_suffix}}) + ${PNG_LIBRARY${find_library_suffix}}) set_property(TARGET LIBPNG PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${PNG_INCLUDE_DIR}) + ${PNG_INCLUDE_DIR}) endif() +#[[ # TODO: no core and addon modules use libjpeg; delete this block # find -type f -exec grep -H HAVE_JPEGLIB_H {} \; | grep -v "cmake\|config.h" -#find_package(JPEG) -#if(JPEG_FOUND) -# add_library(LIBJPEG INTERFACE IMPORTED GLOBAL) -# set_property(TARGET LIBJPEG PROPERTY INTERFACE_LINK_LIBRARIES -# ${JPEG_LIBRARY${find_library_suffix}}) -# set_property(TARGET LIBJPEG PROPERTY INTERFACE_INCLUDE_DIRECTORIES - # ${JPEG_INCLUDE_DIR}) -#endif() +find_package(JPEG) +if(JPEG_FOUND) + add_library(LIBJPEG INTERFACE IMPORTED GLOBAL) + set_property(TARGET LIBJPEG PROPERTY INTERFACE_LINK_LIBRARIES + ${JPEG_LIBRARY${find_library_suffix}}) + set_property(TARGET LIBJPEG PROPERTY INTERFACE_INCLUDE_DIRECTORIES + # ${JPEG_INCLUDE_DIR}) +endif() +#]] find_package(ZLIB REQUIRED) if(ZLIB_FOUND) @@ -66,10 +68,11 @@ endif() find_package(Freetype REQUIRED) if(FREETYPE_FOUND) add_library(FREETYPE INTERFACE IMPORTED GLOBAL) - set_property(TARGET FREETYPE PROPERTY INTERFACE_LINK_LIBRARIES - ${FREETYPE_LIBRARY${find_library_suffix}}) + set_property( + TARGET FREETYPE PROPERTY INTERFACE_LINK_LIBRARIES + ${FREETYPE_LIBRARY${find_library_suffix}}) set_property(TARGET FREETYPE PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${FREETYPE_INCLUDE_DIRS}) + ${FREETYPE_INCLUDE_DIRS}) endif() find_package(FFTW REQUIRED) @@ -85,9 +88,9 @@ if(WITH_CAIRO) if(CAIRO_FOUND) add_library(CAIRO INTERFACE IMPORTED GLOBAL) set_property(TARGET CAIRO PROPERTY INTERFACE_LINK_LIBRARIES - ${CAIRO_LIBRARIES}) + ${CAIRO_LIBRARIES}) set_property(TARGET CAIRO PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${CAIRO_INCLUDE_DIRS}) + ${CAIRO_INCLUDE_DIRS}) endif() endif() @@ -97,7 +100,7 @@ if(WITH_X11) add_library(X11 INTERFACE IMPORTED GLOBAL) set_property(TARGET X11 PROPERTY INTERFACE_LINK_LIBRARIES ${X11_LIBRARIES}) set_property(TARGET X11 PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${X11_INCLUDE_DIR}) + ${X11_INCLUDE_DIR}) endif() endif() @@ -105,10 +108,8 @@ if(WIN32) find_package(ODBC QUIET) if(ODBC_FOUND) add_library(ODBC INTERFACE IMPORTED GLOBAL) - # set_property(TARGET ODBC PROPERTY INTERFACE_LINK_LIBRARIES - # ${ODBC_LIBRARIES}) - # set_property(TARGET PROPERTY INTERFACE_INCLUDE_DIRECTORIES - # ${ODBC_INCLUDE_DIRS}) + # set_property(TARGET ODBC PROPERTY INTERFACE_LINK_LIBRARIES ${ODBC_LIBRARIES}) + # set_property(TARGET PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${ODBC_INCLUDE_DIRS}) endif() endif() @@ -116,9 +117,9 @@ find_package(TIFF REQUIRED) if(TIFF_FOUND) add_library(TIFF INTERFACE IMPORTED GLOBAL) set_property(TARGET TIFF PROPERTY INTERFACE_LINK_LIBRARIES - ${TIFF_LIBRARY${find_library_suffix}}) + ${TIFF_LIBRARY${find_library_suffix}}) set_property(TARGET TIFF PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${TIFF_INCLUDE_DIR}) + ${TIFF_INCLUDE_DIR}) endif() find_package(Iconv QUIET) @@ -170,9 +171,9 @@ if(WITH_OPENGL) set(APP "-framework AGL -framework ApplicationServices") endif() set_property(TARGET OPENGL PROPERTY INTERFACE_LINK_LIBRARIES - ${OPENGL_LIBRARIES} ${AGL_FRAMEWORK}) + ${OPENGL_LIBRARIES} ${AGL_FRAMEWORK}) set_property(TARGET OPENGL PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${OPENGL_INCLUDE_DIR} ${AGL_FRAMEWORK}) + ${OPENGL_INCLUDE_DIR} ${AGL_FRAMEWORK}) endif() endif() @@ -181,9 +182,9 @@ if(WITH_POSTGRES) if(POSTGRESQL_FOUND) add_library(POSTGRES INTERFACE IMPORTED GLOBAL) set_property(TARGET POSTGRES PROPERTY INTERFACE_LINK_LIBRARIES - ${PostgreSQL_LIBRARY}) + ${PostgreSQL_LIBRARY}) set_property(TARGET POSTGRES PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${PostgreSQL_INCLUDE_DIR}) + ${PostgreSQL_INCLUDE_DIR}) endif() endif() @@ -192,9 +193,9 @@ if(WITH_SQLITE) if(SQLITE_FOUND) add_library(SQLITE INTERFACE IMPORTED GLOBAL) set_property(TARGET SQLITE PROPERTY INTERFACE_LINK_LIBRARIES - ${SQLITE_LIBRARY}) + ${SQLITE_LIBRARY}) set_property(TARGET SQLITE PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${SQLITE_INCLUDE_DIRS}) + ${SQLITE_INCLUDE_DIRS}) endif() endif() @@ -228,9 +229,9 @@ find_package(GEOS REQUIRED) if(GEOS_FOUND) add_library(GEOS INTERFACE IMPORTED GLOBAL) set_property(TARGET GEOS PROPERTY INTERFACE_LINK_LIBRARIES - ${GEOS_C_LIBRARY${find_library_suffix}}) + ${GEOS_C_LIBRARY${find_library_suffix}}) set_property(TARGET GEOS PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${GEOS_INCLUDE_DIR}) + ${GEOS_INCLUDE_DIR}) endif() set(THREADS_PREFER_PTHREAD_FLAG ON) @@ -251,26 +252,22 @@ if(MSVC) if(PCRE_FOUND) add_library(PCRE INTERFACE IMPORTED GLOBAL) set_property(TARGET PCRE PROPERTY INTERFACE_LINK_LIBRARIES - ${PCRE_LIBRARY${find_library_suffix}}) + ${PCRE_LIBRARY${find_library_suffix}}) set_property(TARGET PCRE PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${PCRE_INCLUDE_DIR}) + ${PCRE_INCLUDE_DIR}) endif() endif() find_package(Python3 REQUIRED) if(PYTHON3_FOUND) set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE}) -# find_package (PythonLibs REQUIRED ) -# find_package ( Numpy ) + # find_package(PythonLibs REQUIRED) + # find_package(Numpy) endif() - - # no target ATLAS in thirdpary/CMakeLists.txt check_target(ATLAS HAVE_LIBATLAS) - - # set(CMAKE_REQUIRED_INCLUDES "${FFTW_INCLUDE_DIR}") check_target(ICONV HAVE_ICONV_H) check_target(BZIP2 HAVE_BZLIB_H) @@ -318,8 +315,6 @@ endif() check_target(POSTGRES HAVE_LIBPQ_FE_H) - - set(HAVE_PBUFFERS 0) set(HAVE_PIXMAPS 0) if(WITH_OPENGL) From cf9db5c0cc1af28c57ef47948c7f80231027389f Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Thu, 18 Apr 2024 18:38:49 -0600 Subject: [PATCH 065/253] Honor WITH_LIBLAS --- CMakeLists.txt | 1 + cmake/modules/CheckDependentLibraries.cmake | 28 +++++++++++++-------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 75ff655302c..ca53a6cba94 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -85,6 +85,7 @@ option(WITH_LAPACK "enable lapack support" ON) option(WITH_LIBLAS "enable libLAS support" OFF) option(WITH_OPENDWG "enable v.in.dwg" OFF) +# XXX: Do we need this? Don't we always need Python? option(WITH_PYTHON "Build python bindings" ON) option(WITH_LARGEFILES "enable largefile support" ${default_option_enabled}) option(WITH_DOCS "Build documentation" ON) diff --git a/cmake/modules/CheckDependentLibraries.cmake b/cmake/modules/CheckDependentLibraries.cmake index fecfe2ac4cc..3f5a3badd37 100644 --- a/cmake/modules/CheckDependentLibraries.cmake +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -108,8 +108,10 @@ if(WIN32) find_package(ODBC QUIET) if(ODBC_FOUND) add_library(ODBC INTERFACE IMPORTED GLOBAL) - # set_property(TARGET ODBC PROPERTY INTERFACE_LINK_LIBRARIES ${ODBC_LIBRARIES}) - # set_property(TARGET PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${ODBC_INCLUDE_DIRS}) + #[[ + set_property(TARGET ODBC PROPERTY INTERFACE_LINK_LIBRARIES ${ODBC_LIBRARIES}) + set_property(TARGET PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${ODBC_INCLUDE_DIRS}) + #]] endif() endif() @@ -207,13 +209,15 @@ if(PDAL_FOUND) ${PDAL_INCLUDE_DIRS}) endif() -find_package(LibLAS QUIET) -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}) +if(WITH_LIBLAS) + find_package(LibLAS) + 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(NetCDF QUIET) @@ -261,8 +265,10 @@ endif() find_package(Python3 REQUIRED) if(PYTHON3_FOUND) set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE}) - # find_package(PythonLibs REQUIRED) - # find_package(Numpy) + #[[ + find_package(PythonLibs REQUIRED) + find_package(Numpy) + #]] endif() # no target ATLAS in thirdpary/CMakeLists.txt From ab9de1e8ab208e73c5625363a5c43fc6f99594a3 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Thu, 18 Apr 2024 18:43:00 -0600 Subject: [PATCH 066/253] Indentation --- cmake/modules/CheckDependentLibraries.cmake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cmake/modules/CheckDependentLibraries.cmake b/cmake/modules/CheckDependentLibraries.cmake index 3f5a3badd37..c8b033973c9 100644 --- a/cmake/modules/CheckDependentLibraries.cmake +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -266,9 +266,9 @@ find_package(Python3 REQUIRED) if(PYTHON3_FOUND) set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE}) #[[ - find_package(PythonLibs REQUIRED) - find_package(Numpy) - #]] + find_package(PythonLibs REQUIRED) + find_package(Numpy) + #]] endif() # no target ATLAS in thirdpary/CMakeLists.txt From 7d40ac7d1aa3137a39496606917be5e7fa44d24c Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Thu, 18 Apr 2024 18:52:20 -0600 Subject: [PATCH 067/253] Fix Python_EXECUTABLE to PYTHON_EXECUTABLE --- gui/wxpython/CMakeLists.txt | 20 +++++++++---------- gui/wxpython/docs/CMakeLists.txt | 2 +- .../CMakeLists.txt | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/gui/wxpython/CMakeLists.txt b/gui/wxpython/CMakeLists.txt index d0903550468..74230b83e98 100644 --- a/gui/wxpython/CMakeLists.txt +++ b/gui/wxpython/CMakeLists.txt @@ -69,14 +69,14 @@ add_custom_target( add_custom_target( compile_python_files - COMMAND ${Python_EXECUTABLE} -m compileall ${GISBASE}/scripts - COMMAND ${Python_EXECUTABLE} -m compileall ${WXPYTHON_DIR} + COMMAND ${PYTHON_EXECUTABLE} -m compileall ${GISBASE}/scripts + COMMAND ${PYTHON_EXECUTABLE} -m compileall ${WXPYTHON_DIR} DEPENDS ALL_MODULES) add_custom_target( build_modules_items_xml COMMAND - ${grass_env_command} ${Python_EXECUTABLE} + ${grass_env_command} ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/tools/build_modules_xml.py > ${WXPYTHON_DIR}/xml/module_items.xml DEPENDS copy_wxpython_xml compile_python_files ${g_gui_targets} @@ -86,11 +86,11 @@ add_custom_target( add_custom_target( build_xml_menudata COMMAND - ${grass_env_command} ${Python_EXECUTABLE} + ${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} + ${grass_env_command} ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/core/toolboxes.py "validate" ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/menudata.xml COMMAND @@ -101,11 +101,11 @@ add_custom_target( add_custom_target( build_module_tree_menudata COMMAND - ${grass_env_command} ${Python_EXECUTABLE} + ${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} + ${grass_env_command} ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/core/toolboxes.py "validate" ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/module_tree_menudata.xml COMMAND @@ -117,15 +117,15 @@ add_custom_target( add_custom_target( build_menustrings ALL COMMAND - ${grass_env_command} ${Python_EXECUTABLE} + ${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} + ${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} + ${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) diff --git a/gui/wxpython/docs/CMakeLists.txt b/gui/wxpython/docs/CMakeLists.txt index 02e4b4a9b1f..8e32eee7424 100644 --- a/gui/wxpython/docs/CMakeLists.txt +++ b/gui/wxpython/docs/CMakeLists.txt @@ -3,7 +3,7 @@ set(wxpython_html_files) add_custom_command( OUTPUT ${GISBASE}/docs/html/wxGUI.components.html COMMAND - ${grass_env_command} ${Python_EXECUTABLE} ${MKHTML_PY} wxGUI.components + ${grass_env_command} ${PYTHON_EXECUTABLE} ${MKHTML_PY} wxGUI.components ${GRASS_VERSION_DATE} > ${GISBASE}/docs/html/wxGUI.components.html COMMENT "Creating ${GISBASE}/docs/html/wxGUI.components.html" DEPENDS GUI_WXPYTHON LIB_PYTHON) diff --git a/python/libgrass_interface_generator/CMakeLists.txt b/python/libgrass_interface_generator/CMakeLists.txt index c1c906b119c..3f93ef6af82 100644 --- a/python/libgrass_interface_generator/CMakeLists.txt +++ b/python/libgrass_interface_generator/CMakeLists.txt @@ -84,7 +84,7 @@ foreach(module ${MODULES}) DEPENDS ${${module}_LIBS} COMMAND ${CMAKE_COMMAND} -DCTYPESGEN_PY=${CMAKE_CURRENT_SOURCE_DIR}/run.py - -DPython_EXECUTABLE=${Python_EXECUTABLE} -DCOMPILER=${CMAKE_C_COMPILER} + -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE} -DCOMPILER=${CMAKE_C_COMPILER} -DBIN_DIR=${GISBASE} -DHDRS=${${module}_HDRS} -DLIBS=${${module}_LIBS} -DOUT_FILE=${output_file} -DGRASS_VERSION_NUMBER=${GRASS_VERSION_NUMBER} -P ${CMAKE_SOURCE_DIR}/cmake/ctypesgen.cmake From 2d09ff01edc1a2e5453acb6d6eba2f1431a70e5d Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Fri, 19 Apr 2024 01:09:20 -0600 Subject: [PATCH 068/253] Do not overwrite BINARY_DIR cmake property --- CMakeLists.txt | 4 ++-- cmake/locale_strings.cmake | 9 ++++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ca53a6cba94..05f731ce7cf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -167,7 +167,7 @@ set(MKHTML_PY ${CMAKE_BINARY_DIR}/utils/mkhtml.py) set(GISBASE ${CMAKE_BINARY_DIR}/gisbase) file(TO_NATIVE_PATH "${GISBASE}" GISBASE_NATIVE) -file(TO_NATIVE_PATH "${CMAKE_BINARY_DIR}/bin" BINARY_DIR) +file(TO_NATIVE_PATH "${CMAKE_BINARY_DIR}/bin" BIN_DIR) file(TO_NATIVE_PATH "${CMAKE_BINARY_DIR}/lib" LIB_DIR) file(TO_NATIVE_PATH "${CMAKE_SOURCE_DIR}" MODULE_TOPDIR) file(TO_NATIVE_PATH "${GISBASE}/scripts" SCRIPTS_DIR) @@ -183,7 +183,7 @@ else() endif() set(grass_env_command - ${CMAKE_COMMAND} -E env "PATH=${BINARY_DIR}${sep}${SCRIPTS_DIR}${env_path}" + ${CMAKE_COMMAND} -E env "PATH=${BIN_DIR}${sep}${SCRIPTS_DIR}${env_path}" "PYTHONPATH=${ETC_PYTHON_DIR}${sep}${GUI_WXPYTHON_DIR}${sep}$ENV{PYTHONPATH}" "LD_LIBRARY_PATH=${LIB_DIR}${sep}$ENV{LD_LIBRARY_PATH}" "GISBASE=${GISBASE_NATIVE}" "GISRC=${GISRC}" "LC_ALL=C" "LANG=C" diff --git a/cmake/locale_strings.cmake b/cmake/locale_strings.cmake index d2318cbea88..2a62e3e746b 100644 --- a/cmake/locale_strings.cmake +++ b/cmake/locale_strings.cmake @@ -15,7 +15,7 @@ COPYRIGHT: (C) 2020 by the GRASS Development Team set(GISBASE ${BINARY_DIR}/gisbase) file(TO_NATIVE_PATH "${GISBASE}" GISBASE_NATIVE) file(TO_NATIVE_PATH "${GISBASE}/etc/config/rc" GISRC) -file(TO_NATIVE_PATH "${BINARY_DIR}/bin" BINARY_DIR) +file(TO_NATIVE_PATH "${BINARY_DIR}/bin" BIN_DIR) file(TO_NATIVE_PATH "${BINARY_DIR}/lib" LIB_DIR) file(TO_NATIVE_PATH "${SOURCE_DIR}" MODULE_TOPDIR) file(TO_NATIVE_PATH "${GISBASE}/scripts" SCRIPTS_DIR) @@ -32,7 +32,7 @@ endif() set(ENV{GISBASE} "${GISBASE_NATIVE}") set(ENV{GISRC} ${GISRC}) -set(ENV{PATH} "${BINARY_DIR}${sep}${SCRIPTS_DIR}${env_path}") +set(ENV{PATH} "${BIN_DIR}${sep}${SCRIPTS_DIR}${env_path}") set(ENV{PYTHONPATH} "${ETC_PYTHON_DIR}${sep}${GUI_WXPYTHON_DIR}${sep}$ENV{PYTHONPATH}") if(NOT MSVC) @@ -54,7 +54,7 @@ if(WIN32) ${GISBASE}/scripts/${G_NAME}.bat @ONLY) endif(WIN32) -set(TMP_SCRIPT_FILE ${BINARY_DIR}/CMakeFiles/${G_NAME}${SCRIPT_EXT}) +set(TMP_SCRIPT_FILE ${BIN_DIR}/CMakeFiles/${G_NAME}${SCRIPT_EXT}) configure_file(${SRC_SCRIPT_FILE} ${TMP_SCRIPT_FILE} COPYONLY) file( COPY ${TMP_SCRIPT_FILE} @@ -69,8 +69,7 @@ file( WORLD_EXECUTE) execute_process( - COMMAND ${BINARY_DIR}/bin/g.parser -t - ${GISBASE}/scripts/${G_NAME}${SCRIPT_EXT} + COMMAND ${BIN_DIR}/bin/g.parser -t ${GISBASE}/scripts/${G_NAME}${SCRIPT_EXT} OUTPUT_VARIABLE run_g_parser_OV ERROR_VARIABLE run_g_parser_EV RESULT_VARIABLE run_g_parser_RV) From 1e2b7174109ca01d7febf00b6610add8e855d4d0 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Fri, 19 Apr 2024 01:47:53 -0600 Subject: [PATCH 069/253] Move directory settings --- CMakeLists.txt | 63 +++++++++++++++++++++++++------------------------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 05f731ce7cf..7d4d936f80e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -106,19 +106,28 @@ if("${isSystemDir}" STREQUAL "-1") set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") endif("${isSystemDir}" STREQUAL "-1") -include(get_host_arch) -get_host_arch(BUILD_ARCH) - -include(get_versions) -get_versions("include/VERSION" GRASS_VERSION_MAJOR GRASS_VERSION_MINOR - GRASS_VERSION_RELEASE GRASS_VERSION_DATE) +set(GISBASE ${CMAKE_BINARY_DIR}/gisbase) +file(TO_NATIVE_PATH "${CMAKE_SOURCE_DIR}" MODULE_TOPDIR) +file(TO_NATIVE_PATH "${GISBASE}" GISBASE_NATIVE) +file(TO_NATIVE_PATH "${CMAKE_BINARY_DIR}/bin" BIN_DIR) +file(TO_NATIVE_PATH "${CMAKE_BINARY_DIR}/lib" LIB_DIR) +file(TO_NATIVE_PATH "${GISBASE}/scripts" SCRIPTS_DIR) +file(TO_NATIVE_PATH "${GISBASE}/etc/config/rc" GISRC) +file(TO_NATIVE_PATH "${GISBASE}/etc/python" ETC_PYTHON_DIR) +file(TO_NATIVE_PATH "${GISBASE}/gui/wxpython" GUI_WXPYTHON_DIR) -set(GRASS_VERSION_NUMBER - ${GRASS_VERSION_MAJOR}.${GRASS_VERSION_MINOR}.${GRASS_VERSION_RELEASE}) -message(STATUS "GRASS_VERSION_NUMBER = '${GRASS_VERSION_NUMBER}'") -set(GRASS_VERSION_UPDATE_PKG "0.2") +# Setup build locations. +if(NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) +endif() +if(NOT CMAKE_LIBRARY_OUTPUT_DIRECTORY) + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +endif() +if(NOT CMAKE_ARCHIVE_OUTPUT_DIRECTORY) + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) +endif() -# setup install directories +# XXX: not used for now; setup install directories set(GISBASE_DIR "grass${GRASS_VERSION_MAJOR}${GRASS_VERSION_MINOR}") set(GRASS_BIN_DIR "${GISBASE_DIR}/bin") set(GRASS_DEMOLOCATION_DIR "${GISBASE_DIR}/demolocation") @@ -133,6 +142,18 @@ set(GRASS_SCRIPTS_DIR "${GISBASE_DIR}/scripts") set(GRASS_SHARE_DIR "${GISBASE_DIR}/share") set(GRASS_UTILS_DIR "${GISBASE_DIR}/utils") +include(get_host_arch) +get_host_arch(BUILD_ARCH) + +include(get_versions) +get_versions("include/VERSION" GRASS_VERSION_MAJOR GRASS_VERSION_MINOR + GRASS_VERSION_RELEASE GRASS_VERSION_DATE) + +set(GRASS_VERSION_NUMBER + ${GRASS_VERSION_MAJOR}.${GRASS_VERSION_MINOR}.${GRASS_VERSION_RELEASE}) +message(STATUS "GRASS_VERSION_NUMBER = '${GRASS_VERSION_NUMBER}'") +set(GRASS_VERSION_UPDATE_PKG "0.2") + include(set_compiler_flags) set_compiler_flags() include(Configure) @@ -142,17 +163,6 @@ repo_status("${CMAKE_CURRENT_LIST_DIR}" GRASS_VERSION_GIT) enable_testing() -# Setup build locations. -if(NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) -endif() -if(NOT CMAKE_LIBRARY_OUTPUT_DIRECTORY) - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) -endif() -if(NOT CMAKE_ARCHIVE_OUTPUT_DIRECTORY) - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) -endif() - include(check_target) include(CheckDependentLibraries) include(build_module) @@ -165,15 +175,6 @@ include(build_gui_in_subdir) set(MKHTML_PY ${CMAKE_BINARY_DIR}/utils/mkhtml.py) -set(GISBASE ${CMAKE_BINARY_DIR}/gisbase) -file(TO_NATIVE_PATH "${GISBASE}" GISBASE_NATIVE) -file(TO_NATIVE_PATH "${CMAKE_BINARY_DIR}/bin" BIN_DIR) -file(TO_NATIVE_PATH "${CMAKE_BINARY_DIR}/lib" LIB_DIR) -file(TO_NATIVE_PATH "${CMAKE_SOURCE_DIR}" MODULE_TOPDIR) -file(TO_NATIVE_PATH "${GISBASE}/scripts" SCRIPTS_DIR) -file(TO_NATIVE_PATH "${GISBASE}/etc/config/rc" GISRC) -file(TO_NATIVE_PATH "${GISBASE}/etc/python" ETC_PYTHON_DIR) -file(TO_NATIVE_PATH "${GISBASE}/gui/wxpython" GUI_WXPYTHON_DIR) if(WIN32) set(sep "\;") set(env_path "") From 1f2024167e61f312346cba4fe86c6afab6766d4c Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 01:26:05 -0600 Subject: [PATCH 070/253] Build directly into GISBASE --- CMakeLists.txt | 27 ++++++++++++--------------- cmake/locale_strings.cmake | 10 +++++----- cmake/modules/build_module.cmake | 32 ++++++++++++++++++-------------- 3 files changed, 35 insertions(+), 34 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7d4d936f80e..c8714560d23 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -109,38 +109,35 @@ endif("${isSystemDir}" STREQUAL "-1") set(GISBASE ${CMAKE_BINARY_DIR}/gisbase) file(TO_NATIVE_PATH "${CMAKE_SOURCE_DIR}" MODULE_TOPDIR) file(TO_NATIVE_PATH "${GISBASE}" GISBASE_NATIVE) -file(TO_NATIVE_PATH "${CMAKE_BINARY_DIR}/bin" BIN_DIR) -file(TO_NATIVE_PATH "${CMAKE_BINARY_DIR}/lib" LIB_DIR) +file(TO_NATIVE_PATH "${GISBASE}/bin" BIN_DIR) +file(TO_NATIVE_PATH "${GISBASE}/lib" LIB_DIR) file(TO_NATIVE_PATH "${GISBASE}/scripts" SCRIPTS_DIR) file(TO_NATIVE_PATH "${GISBASE}/etc/config/rc" GISRC) file(TO_NATIVE_PATH "${GISBASE}/etc/python" ETC_PYTHON_DIR) file(TO_NATIVE_PATH "${GISBASE}/gui/wxpython" GUI_WXPYTHON_DIR) # Setup build locations. -if(NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) -endif() if(NOT CMAKE_LIBRARY_OUTPUT_DIRECTORY) - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${GISBASE}/lib) endif() if(NOT CMAKE_ARCHIVE_OUTPUT_DIRECTORY) - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${GISBASE}/lib) endif() # XXX: not used for now; setup install directories set(GISBASE_DIR "grass${GRASS_VERSION_MAJOR}${GRASS_VERSION_MINOR}") set(GRASS_BIN_DIR "${GISBASE_DIR}/bin") -set(GRASS_DEMOLOCATION_DIR "${GISBASE_DIR}/demolocation") -set(GRASS_DOCS_DIR "${GISBASE_DIR}/docs") -set(GRASS_DRIVER_DIR "${GISBASE_DIR}/driver") -set(GRASS_ETC_DIR "${GISBASE_DIR}/etc") -set(GRASS_FONTS_DIR "${GISBASE_DIR}/fonts") -set(GRASS_GUI_DIR "${GISBASE_DIR}/gui") -set(GRASS_INCLUDE_DIR "${GISBASE_DIR}/include") set(GRASS_LIB_DIR "${GISBASE_DIR}/lib") set(GRASS_SCRIPTS_DIR "${GISBASE_DIR}/scripts") -set(GRASS_SHARE_DIR "${GISBASE_DIR}/share") +set(GRASS_ETC_DIR "${GISBASE_DIR}/etc") +set(GRASS_GUI_DIR "${GISBASE_DIR}/gui") +set(GRASS_DRIVER_DIR "${GISBASE_DIR}/driver") +set(GRASS_FONTS_DIR "${GISBASE_DIR}/fonts") set(GRASS_UTILS_DIR "${GISBASE_DIR}/utils") +set(GRASS_SHARE_DIR "${GISBASE_DIR}/share") +set(GRASS_INCLUDE_DIR "${GISBASE_DIR}/include") +set(GRASS_DOCS_DIR "${GISBASE_DIR}/docs") +set(GRASS_DEMOLOCATION_DIR "${GISBASE_DIR}/demolocation") include(get_host_arch) get_host_arch(BUILD_ARCH) diff --git a/cmake/locale_strings.cmake b/cmake/locale_strings.cmake index 2a62e3e746b..3c31db02053 100644 --- a/cmake/locale_strings.cmake +++ b/cmake/locale_strings.cmake @@ -13,12 +13,12 @@ COPYRIGHT: (C) 2020 by the GRASS Development Team #]] set(GISBASE ${BINARY_DIR}/gisbase) -file(TO_NATIVE_PATH "${GISBASE}" GISBASE_NATIVE) -file(TO_NATIVE_PATH "${GISBASE}/etc/config/rc" GISRC) -file(TO_NATIVE_PATH "${BINARY_DIR}/bin" BIN_DIR) -file(TO_NATIVE_PATH "${BINARY_DIR}/lib" LIB_DIR) file(TO_NATIVE_PATH "${SOURCE_DIR}" MODULE_TOPDIR) +file(TO_NATIVE_PATH "${GISBASE}" GISBASE_NATIVE) +file(TO_NATIVE_PATH "${GISBASE}/bin" BIN_DIR) +file(TO_NATIVE_PATH "${GISBASE}/lib" LIB_DIR) file(TO_NATIVE_PATH "${GISBASE}/scripts" SCRIPTS_DIR) +file(TO_NATIVE_PATH "${GISBASE}/etc/config/rc" GISRC) file(TO_NATIVE_PATH "${GISBASE}/etc/python" ETC_PYTHON_DIR) file(TO_NATIVE_PATH "${GISBASE}/gui/wxpython" GUI_WXPYTHON_DIR) @@ -54,7 +54,7 @@ if(WIN32) ${GISBASE}/scripts/${G_NAME}.bat @ONLY) endif(WIN32) -set(TMP_SCRIPT_FILE ${BIN_DIR}/CMakeFiles/${G_NAME}${SCRIPT_EXT}) +set(TMP_SCRIPT_FILE ${BINARY_DIR}/CMakeFiles/${G_NAME}${SCRIPT_EXT}) configure_file(${SRC_SCRIPT_FILE} ${TMP_SCRIPT_FILE} COPYONLY) file( COPY ${TMP_SCRIPT_FILE} diff --git a/cmake/modules/build_module.cmake b/cmake/modules/build_module.cmake index ab8b5695a29..460a2204073 100644 --- a/cmake/modules/build_module.cmake +++ b/cmake/modules/build_module.cmake @@ -67,6 +67,24 @@ function(build_module) set(${G_NAME}_SRCS ${G_SOURCES}) endif() + set(install_dest "") + if(NOT G_RUNTIME_OUTPUT_DIR) + if(G_EXE) + set(G_RUNTIME_OUTPUT_DIR "${GISBASE}/bin") + set(install_dest "bin") + else() + set(G_RUNTIME_OUTPUT_DIR "${GISBASE}/lib") + set(install_dest "lib") + endif() + else() + set(install_dest "${G_RUNTIME_OUTPUT_DIR}") + set(G_RUNTIME_OUTPUT_DIR "${GISBASE}/${install_dest}") + endif() + + if(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.*") @@ -185,20 +203,6 @@ function(build_module) set(RUN_HTML_DESCR FALSE) endif() - set(install_dest "") - if(NOT G_RUNTIME_OUTPUT_DIR) - if(G_EXE) - set(G_RUNTIME_OUTPUT_DIR "${GISBASE}/bin") - set(install_dest "bin") - else() - set(G_RUNTIME_OUTPUT_DIR "${GISBASE}/lib") - set(install_dest "lib") - endif() - else() - set(install_dest "${G_RUNTIME_OUTPUT_DIR}") - set(G_RUNTIME_OUTPUT_DIR "${GISBASE}/${install_dest}") - endif() - # To use this property later in build_docs set(PGM_EXT "") if(WIN32) From ee9b9b0ba056d9bdaa504daa404b375dd5cc3de8 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 01:28:39 -0600 Subject: [PATCH 071/253] Rename tools directory to utils to be consistent --- utils/CMakeLists.txt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt index 84a9ab749e9..63f821d0e76 100644 --- a/utils/CMakeLists.txt +++ b/utils/CMakeLists.txt @@ -24,17 +24,17 @@ build_program( SOURCES g.echo.c RUNTIME_OUTPUT_DIR - tools + utils PACKAGE "NONE") -add_dependencies(g.echo python_doc_tools) +add_dependencies(g.echo python_doc_utils) add_custom_target( - python_doc_tools + python_doc_utils COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/mkhtml.py - ${GISBASE}/tools + ${GISBASE}/utils COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/g.html2man/g.html2man.py ${GISBASE}/tools + ${CMAKE_CURRENT_SOURCE_DIR}/g.html2man/g.html2man.py ${GISBASE}/utils COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/g.html2man/ghtml.py ${GISBASE}/tools + ${CMAKE_CURRENT_SOURCE_DIR}/g.html2man/ghtml.py ${GISBASE}/utils COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/g.html2man/ggroff.py ${GISBASE}/tools) + ${CMAKE_CURRENT_SOURCE_DIR}/g.html2man/ggroff.py ${GISBASE}/utils) From 952da36ae54ad3f3939ccc33de795d7f6be3250a Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 02:00:52 -0600 Subject: [PATCH 072/253] No need to copy G_NAME to itself now --- cmake/modules/build_module.cmake | 7 ------- 1 file changed, 7 deletions(-) diff --git a/cmake/modules/build_module.cmake b/cmake/modules/build_module.cmake index 460a2204073..4eb1fb8d967 100644 --- a/cmake/modules/build_module.cmake +++ b/cmake/modules/build_module.cmake @@ -236,11 +236,6 @@ function(build_module) endif() if(NOT HTML_FILE) - add_custom_command( - TARGET ${G_NAME} - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy $ - ${G_RUNTIME_OUTPUT_DIR}) return() endif() # message("HTML_FILE=${HTML_FILE}") @@ -281,8 +276,6 @@ function(build_module) ${html_descr_command} > ${TMP_HTML_FILE} COMMAND ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRCDIR} ${PYTHON_EXECUTABLE} ${MKHTML_PY} ${PGM_NAME} > ${OUT_HTML_FILE} - COMMAND ${CMAKE_COMMAND} -E copy $ - ${G_RUNTIME_OUTPUT_DIR} COMMAND ${copy_images_command} COMMAND ${CMAKE_COMMAND} -E remove ${TMP_HTML_FILE} COMMENT "Creating ${OUT_HTML_FILE}") From 496d82c646b8f89cc2ce4f7bb300f01ca5eee27c Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 02:22:42 -0600 Subject: [PATCH 073/253] Rename G_SRCDIR to G_SRC_DIR for consistency; Do not create tmp.html in source directory --- cmake/modules/Configure.cmake | 123 +++++++------------- cmake/modules/build_gui_in_subdir.cmake | 2 +- cmake/modules/build_library_in_subdir.cmake | 4 +- cmake/modules/build_module.cmake | 36 +++--- cmake/modules/build_program_in_subdir.cmake | 4 +- cmake/modules/build_script_in_subdir.cmake | 2 +- cmake/modules/check_target.cmake | 3 +- 7 files changed, 66 insertions(+), 108 deletions(-) diff --git a/cmake/modules/Configure.cmake b/cmake/modules/Configure.cmake index d3ff090a7b9..0b6db9ba25b 100644 --- a/cmake/modules/Configure.cmake +++ b/cmake/modules/Configure.cmake @@ -37,50 +37,33 @@ else() check_include_file(dbm.h HAVE_DBM_H) endif() # -# # set(CMAKE_REQUIRED_INCLUDES "${FFTW_INCLUDE_DIR}") -# check_target(ICONV HAVE_ICONV_H) -# check_target(BZIP2 HAVE_BZLIB_H) -# check_target(ZLIB HAVE_ZLIB_H) -# check_target(LIBJPEG HAVE_JPEGLIB_H) -# check_target(LIBPNG HAVE_PNG_H) -# check_target(TIFF HAVE_TIFFIO_H) -# check_target(GEOS HAVE_GEOS) -# check_target(GDAL HAVE_GDAL) -# check_target(GDAL HAVE_OGR) -# check_target(SQLITE HAVE_SQLITE) +# # set(CMAKE_REQUIRED_INCLUDES "${FFTW_INCLUDE_DIR}") check_target(ICONV +# HAVE_ICONV_H) check_target(BZIP2 HAVE_BZLIB_H) check_target(ZLIB HAVE_ZLIB_H) +# check_target(LIBJPEG HAVE_JPEGLIB_H) check_target(LIBPNG HAVE_PNG_H) +# check_target(TIFF HAVE_TIFFIO_H) check_target(GEOS HAVE_GEOS) +# check_target(GDAL HAVE_GDAL) check_target(GDAL HAVE_OGR) check_target(SQLITE +# HAVE_SQLITE) # # check_target(PROJ HAVE_PROJ_H) # -# check_target(BLAS HAVE_LIBBLAS) -# check_target(BLAS HAVE_CBLAS_H) +# check_target(BLAS HAVE_LIBBLAS) check_target(BLAS HAVE_CBLAS_H) # -# check_target(LAPACK HAVE_LIBLAPACK) -# check_target(LAPACK HAVE_CLAPACK_H) +# check_target(LAPACK HAVE_LIBLAPACK) check_target(LAPACK HAVE_CLAPACK_H) # -# check_target(FREETYPE HAVE_FT2BUILD_H) -# check_target(POSTGRES HAVE_POSTGRES) +# check_target(FREETYPE HAVE_FT2BUILD_H) check_target(POSTGRES HAVE_POSTGRES) # check_target(ODBC HAVE_SQL_H) # -# if(TARGET POSTGRES) -# try_compile( -# HAVE_PQCMDTUPLES ${CMAKE_CURRENT_BINARY_DIR} -# ${CMAKE_SOURCE_DIR}/cmake/tests/have_pqcmdtuples.c -# CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:PATH=${PostgreSQL_INCLUDE_DIR}" "-w" -# "-DLINK_LIBRARIES:STRING=${PostgreSQL_LIBRARY}" -# OUTPUT_VARIABLE COMPILE_HAVE_PQCMDTUPLES) -# if(NOT COMPILE_HAVE_PQCMDTUPLES) -# message( -# "Performing Test HAVE_PQCMDTUPLES - Failed\n COMPILE_OUTPUT:${COMPILE_HAVE_PQCMDTUPLES}\n" -# ) -# else() -# message(STATUS "Performing Test HAVE_PQCMDTUPLES - Success") -# set(HAVE_PQCMDTUPLES 1) -# endif() +# if(TARGET POSTGRES) try_compile( HAVE_PQCMDTUPLES ${CMAKE_CURRENT_BINARY_DIR} +# ${CMAKE_SOURCE_DIR}/cmake/tests/have_pqcmdtuples.c CMAKE_FLAGS +# "-DINCLUDE_DIRECTORIES:PATH=${PostgreSQL_INCLUDE_DIR}" "-w" +# "-DLINK_LIBRARIES:STRING=${PostgreSQL_LIBRARY}" OUTPUT_VARIABLE +# COMPILE_HAVE_PQCMDTUPLES) if(NOT COMPILE_HAVE_PQCMDTUPLES) message( +# "Performing Test HAVE_PQCMDTUPLES - Failed\n +# COMPILE_OUTPUT:${COMPILE_HAVE_PQCMDTUPLES}\n" ) else() message(STATUS +# "Performing Test HAVE_PQCMDTUPLES - Success") set(HAVE_PQCMDTUPLES 1) endif() # endif() # -# if(MSVC) -# check_target(PCRE HAVE_PCRE_H) -# endif() +# if(MSVC) check_target(PCRE HAVE_PCRE_H) endif() # # check_target(POSTGRES HAVE_LIBPQ_FE_H) @@ -103,8 +86,7 @@ else() endif() # #######################TODO######################## -# no target ATLAS in thirdpary/CMakeLists.txt -# check_target(ATLAS HAVE_LIBATLAS) +# no target ATLAS in thirdpary/CMakeLists.txt check_target(ATLAS HAVE_LIBATLAS) set(USE_NLS 0) if(WITH_NLS) @@ -180,54 +162,29 @@ check_symbol_exists(drand48 "stdlib.h" HAVE_DRAND48) check_symbol_exists(nanosleep "time.h" HAVE_NANOSLEEP) check_symbol_exists(fseeko "stdio.h" HAVE_FSEEKO) -# set(HAVE_PBUFFERS 0) -# set(HAVE_PIXMAPS 0) -# if(WITH_OPENGL) -# try_compile( -# HAVE_PBUFFERS ${CMAKE_CURRENT_BINARY_DIR} -# ${CMAKE_SOURCE_DIR}/cmake/tests/have_pbuffer.c -# CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:PATH=${OPENGL_INCLUDE_DIR}" "-w" -# "-DLINK_LIBRARIES:STRING=${OPENGL_LIBRARIES}" -# OUTPUT_VARIABLE COMPILE_HAVE_PBUFFERS) -# if(NOT COMPILE_HAVE_PBUFFERS) -# message( -# FATAL_ERROR -# "Performing Test HAVE_PBUFFERS - Failed\n COMPILE_OUTPUT:${COMPILE_HAVE_PBUFFERS}\n" -# ) -# else() -# message(STATUS "Performing Test HAVE_PBUFFERS - Success") -# set(HAVE_PBUFFERS 1) -# endif() +# set(HAVE_PBUFFERS 0) set(HAVE_PIXMAPS 0) if(WITH_OPENGL) try_compile( +# HAVE_PBUFFERS ${CMAKE_CURRENT_BINARY_DIR} +# ${CMAKE_SOURCE_DIR}/cmake/tests/have_pbuffer.c CMAKE_FLAGS +# "-DINCLUDE_DIRECTORIES:PATH=${OPENGL_INCLUDE_DIR}" "-w" +# "-DLINK_LIBRARIES:STRING=${OPENGL_LIBRARIES}" OUTPUT_VARIABLE +# COMPILE_HAVE_PBUFFERS) if(NOT COMPILE_HAVE_PBUFFERS) message( FATAL_ERROR +# "Performing Test HAVE_PBUFFERS - Failed\n +# COMPILE_OUTPUT:${COMPILE_HAVE_PBUFFERS}\n" ) else() message(STATUS "Performing +# Test HAVE_PBUFFERS - Success") set(HAVE_PBUFFERS 1) endif() # -# try_compile( -# HAVE_PIXMAPS ${CMAKE_CURRENT_BINARY_DIR} -# ${CMAKE_SOURCE_DIR}/cmake/tests/have_pixmaps.c -# CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:PATH=${OPENGL_INCLUDE_DIR}" "-w" -# "-DLINK_LIBRARIES:STRING=${OPENGL_LIBRARIES}" -# OUTPUT_VARIABLE COMPILE_HAVE_PIXMAPS) +# try_compile( HAVE_PIXMAPS ${CMAKE_CURRENT_BINARY_DIR} +# ${CMAKE_SOURCE_DIR}/cmake/tests/have_pixmaps.c CMAKE_FLAGS +# "-DINCLUDE_DIRECTORIES:PATH=${OPENGL_INCLUDE_DIR}" "-w" +# "-DLINK_LIBRARIES:STRING=${OPENGL_LIBRARIES}" OUTPUT_VARIABLE +# COMPILE_HAVE_PIXMAPS) # -# if(NOT COMPILE_HAVE_PIXMAPS) -# message( -# FATAL_ERROR -# "Performing Test HAVE_PIXMAPS - Failed\n COMPILE_OUTPUT:${COMPILE_HAVE_PIXMAPS}\n" -# ) -# else() -# message(STATUS "Performing Test HAVE_PIXMAPS - Success") -# set(HAVE_PIXMAPS 1) -# endif() +# if(NOT COMPILE_HAVE_PIXMAPS) message( FATAL_ERROR "Performing Test +# HAVE_PIXMAPS - Failed\n COMPILE_OUTPUT:${COMPILE_HAVE_PIXMAPS}\n" ) else() +# message(STATUS "Performing Test HAVE_PIXMAPS - Success") set(HAVE_PIXMAPS 1) +# endif() # # endif(WITH_OPENGL) # -# set(OPENGL_X11 0) -# set(OPENGL_AQUA 0) -# set(OPENGL_WINDOWS 0) -# if(WITH_OPENGL) -# if(APPLE) -# set(OPENGL_AQUA 1) -# set(OPENGL_AGL 1) -# elseif(WIN32) -# set(OPENGL_WINDOWS 1) -# else() -# set(OPENGL_X11 1) -# endif() -# endif() +# set(OPENGL_X11 0) set(OPENGL_AQUA 0) set(OPENGL_WINDOWS 0) if(WITH_OPENGL) +# if(APPLE) set(OPENGL_AQUA 1) set(OPENGL_AGL 1) elseif(WIN32) +# set(OPENGL_WINDOWS 1) else() set(OPENGL_X11 1) endif() endif() diff --git a/cmake/modules/build_gui_in_subdir.cmake b/cmake/modules/build_gui_in_subdir.cmake index cd3d268c9a0..0dae10eb11f 100644 --- a/cmake/modules/build_gui_in_subdir.cmake +++ b/cmake/modules/build_gui_in_subdir.cmake @@ -74,7 +74,7 @@ function(build_gui_in_subdir dir_name) endif() endif() - set(TMP_HTML_FILE ${G_SRC_DIR}/${G_TARGET_NAME}.tmp.html) + set(TMP_HTML_FILE ${CMAKE_CURRENT_BINARY_DIR}/${G_TARGET_NAME}.tmp.html) set(OUT_HTML_FILE ${GISBASE}/docs/html/${G_TARGET_NAME}.html) set(GUI_HTML_FILE ${GISBASE}/docs/html/wxGUI.${G_NAME}.html) diff --git a/cmake/modules/build_library_in_subdir.cmake b/cmake/modules/build_library_in_subdir.cmake index 85bb924204e..739d2f9c76c 100644 --- a/cmake/modules/build_library_in_subdir.cmake +++ b/cmake/modules/build_library_in_subdir.cmake @@ -9,11 +9,11 @@ COPYRIGHT: (C) 2020 by the GRASS Development Team macro(build_library_in_subdir dir_name) set(extra_args ${ARGN}) if("NAME" IN_LIST extra_args) - build_module(SRCDIR ${CMAKE_CURRENT_SOURCE_DIR}/${dir_name} ${ARGN}) + 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} SRCDIR + 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 4eb1fb8d967..d285f6922c9 100644 --- a/cmake/modules/build_module.cmake +++ b/cmake/modules/build_module.cmake @@ -13,7 +13,7 @@ function(build_module) cmake_parse_arguments( G "EXE" - "NAME;SRCDIR;SRC_REGEX;RUNTIME_OUTPUT_DIR;PACKAGE;HTML_FILE_NAME" + "NAME;SRC_DIR;SRC_REGEX;RUNTIME_OUTPUT_DIR;PACKAGE;HTML_FILE_NAME" "SOURCES;INCLUDES;DEPENDS;OPTIONAL_DEPENDS;PRIMARY_DEPENDS;DEFS;HEADERS;TEST_SOURCES" ${ARGN}) @@ -35,24 +35,24 @@ function(build_module) set(G_SRC_REGEX "*.c") endif() - if(NOT G_SRCDIR) - set(G_SRCDIR ${CMAKE_CURRENT_SOURCE_DIR}) + if(NOT G_SRC_DIR) + set(G_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}) endif() - set(html_file "${G_SRCDIR}/${G_NAME}.html") + set(html_file "${G_SRC_DIR}/${G_NAME}.html") foreach(G_HEADER ${G_HEADERS}) - if(EXISTS "${G_SRCDIR}/${G_HEADER}") - file(COPY ${G_SRCDIR}/${G_HEADER} + if(EXISTS "${G_SRC_DIR}/${G_HEADER}") + file(COPY ${G_SRC_DIR}/${G_HEADER} DESTINATION "${CMAKE_BINARY_DIR}/include/grass") else() file( GLOB header_list_from_glob LIST_DIRECTORIES false - "${G_SRCDIR}/${G_HEADER}") + "${G_SRC_DIR}/${G_HEADER}") if(NOT header_list_from_glob) message( FATAL_ERROR - "MUST copy '${G_SRCDIR}/${G_HEADER}' to ${CMAKE_BINARY_DIR}/include/grass" + "MUST copy '${G_SRC_DIR}/${G_HEADER}' to ${CMAKE_BINARY_DIR}/include/grass" ) endif() foreach(header_I ${header_list_from_glob}) @@ -62,7 +62,7 @@ function(build_module) endforeach() if(NOT G_SOURCES) - file(GLOB ${G_NAME}_SRCS "${G_SRCDIR}/${G_SRC_REGEX}") + file(GLOB ${G_NAME}_SRCS "${G_SRC_DIR}/${G_SRC_REGEX}") else() set(${G_NAME}_SRCS ${G_SOURCES}) endif() @@ -146,7 +146,7 @@ function(build_module) add_dependencies(${G_NAME} ${G_DEPEND}) set(${G_NAME}_INCLUDE_DIRS) - list(APPEND ${G_NAME}_INCLUDE_DIRS "${G_SRCDIR}") + list(APPEND ${G_NAME}_INCLUDE_DIRS "${G_SRC_DIR}") foreach(G_INCLUDE ${G_INCLUDES}) list(APPEND ${G_NAME}_INCLUDE_DIRS "${G_INCLUDE}") endforeach() @@ -215,7 +215,7 @@ function(build_module) set(G_HTML_FILE_NAME "${HTML_FILE_NAME}.html") - set(html_file ${G_SRCDIR}/${G_HTML_FILE_NAME}) + set(html_file ${G_SRC_DIR}/${G_HTML_FILE_NAME}) set(HTML_FILE) set(no_docs_list "grass_sqlp;echo;clean_temp;lock;run") @@ -224,12 +224,12 @@ function(build_module) install(FILES ${GISBASE}/docs/html/${G_HTML_FILE_NAME} DESTINATION docs/html) else() - file(GLOB html_files ${G_SRCDIR}/*.html) + file(GLOB html_files ${G_SRC_DIR}/*.html) if(html_files) if(NOT ${target_name} IN_LIST no_docs_list) message( FATAL_ERROR - "${html_file} does not exists. ${G_SRCDIR} \n ${G_RUNTIME_OUTPUT_DIR} | ${target_name}" + "${html_file} does not exists. ${G_SRC_DIR} \n ${G_RUNTIME_OUTPUT_DIR} | ${target_name}" ) endif() endif() @@ -245,7 +245,7 @@ function(build_module) string(REPLACE ".html" "" PGM_NAME "${HTML_FILE_NAME}") string(REPLACE ".html" ".tmp.html" TMP_HTML_NAME ${HTML_FILE_NAME}) - set(TMP_HTML_FILE ${G_SRCDIR}/${TMP_HTML_NAME}) + set(TMP_HTML_FILE ${CMAKE_CURRENT_BINARY_DIR}/${TMP_HTML_NAME}) set(OUT_HTML_FILE ${GISBASE}/docs/html/${HTML_FILE_NAME}) set(PGM_EXT "") @@ -261,7 +261,7 @@ function(build_module) ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_NAME}) endif() - file(GLOB IMG_FILES ${G_SRCDIR}/*.png ${G_SRCDIR}/*.jpg) + file(GLOB IMG_FILES ${G_SRC_DIR}/*.png ${G_SRC_DIR}/*.jpg) set(copy_images_command ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_NAME}) if(IMG_FILES) @@ -272,9 +272,9 @@ function(build_module) add_custom_command( TARGET ${G_NAME} POST_BUILD - COMMAND ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRCDIR} + COMMAND ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRC_DIR} ${html_descr_command} > ${TMP_HTML_FILE} - COMMAND ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRCDIR} + COMMAND ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRC_DIR} ${PYTHON_EXECUTABLE} ${MKHTML_PY} ${PGM_NAME} > ${OUT_HTML_FILE} COMMAND ${copy_images_command} COMMAND ${CMAKE_COMMAND} -E remove ${TMP_HTML_FILE} @@ -285,7 +285,7 @@ function(build_module) foreach(test_SOURCE ${G_TEST_SOURCES}) add_test(NAME ${G_NAME}-test COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} - ${G_SRCDIR}/testsuite/${test_SOURCE}) + ${G_SRC_DIR}/testsuite/${test_SOURCE}) message("[build_module] ADDING TEST ${G_NAME}-test") endforeach() diff --git a/cmake/modules/build_program_in_subdir.cmake b/cmake/modules/build_program_in_subdir.cmake index 0de14a08a4b..5f7bccd192d 100644 --- a/cmake/modules/build_program_in_subdir.cmake +++ b/cmake/modules/build_program_in_subdir.cmake @@ -11,10 +11,10 @@ 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(SRCDIR ${CMAKE_CURRENT_SOURCE_DIR}/${dir_name} ${ARGN}) + 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} SRCDIR + 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 d9b4ccfa02b..681c17da6ff 100644 --- a/cmake/modules/build_script_in_subdir.cmake +++ b/cmake/modules/build_script_in_subdir.cmake @@ -68,7 +68,7 @@ function(build_script_in_subdir dir_name) endif() endif() - set(TMP_HTML_FILE ${G_SRC_DIR}/${G_NAME}.tmp.html) + set(TMP_HTML_FILE ${CMAKE_CURRENT_BINARY_DIR}/${G_NAME}.tmp.html) set(OUT_HTML_FILE ${GISBASE}/docs/html/${G_NAME}.html) add_custom_command( diff --git a/cmake/modules/check_target.cmake b/cmake/modules/check_target.cmake index 79e79138676..1d03d29382f 100644 --- a/cmake/modules/check_target.cmake +++ b/cmake/modules/check_target.cmake @@ -1,7 +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") + # message(STATUS "${target_name} package found. Setting ${have_define_var} + # to 1") set(${have_define_var} 1) endif() endmacro() From e2346468aa2bdee4ed4dbc8b3dd3620a808c5cd1 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 02:59:43 -0600 Subject: [PATCH 074/253] Do not touch empty files; Do not run html-description if G_RUNTIME_OUTPUT_DIR is given; Move tmp.html to CMakeFiles directory --- cmake/modules/build_gui_in_subdir.cmake | 5 +-- cmake/modules/build_module.cmake | 37 ++++++++++------------ cmake/modules/build_script_in_subdir.cmake | 4 +-- 3 files changed, 18 insertions(+), 28 deletions(-) diff --git a/cmake/modules/build_gui_in_subdir.cmake b/cmake/modules/build_gui_in_subdir.cmake index 0dae10eb11f..59b8fb26b68 100644 --- a/cmake/modules/build_gui_in_subdir.cmake +++ b/cmake/modules/build_gui_in_subdir.cmake @@ -51,9 +51,6 @@ function(build_gui_in_subdir dir_name) if(WITH_DOCS) file(GLOB IMG_FILES ${G_SRC_DIR}/*.png ${G_SRC_DIR}/*.jpg) - set(copy_images_command - ${CMAKE_COMMAND} -E touch - ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_TARGET_NAME}) if(IMG_FILES) set(copy_images_command ${CMAKE_COMMAND} -E copy ${IMG_FILES} ${GISBASE}/docs/html/) @@ -74,7 +71,7 @@ function(build_gui_in_subdir dir_name) endif() endif() - set(TMP_HTML_FILE ${CMAKE_CURRENT_BINARY_DIR}/${G_TARGET_NAME}.tmp.html) + set(TMP_HTML_FILE ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_TARGET_NAME}.tmp.html) set(OUT_HTML_FILE ${GISBASE}/docs/html/${G_TARGET_NAME}.html) set(GUI_HTML_FILE ${GISBASE}/docs/html/wxGUI.${G_NAME}.html) diff --git a/cmake/modules/build_module.cmake b/cmake/modules/build_module.cmake index d285f6922c9..e49d6fcec63 100644 --- a/cmake/modules/build_module.cmake +++ b/cmake/modules/build_module.cmake @@ -67,6 +67,21 @@ function(build_module) 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) + 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(RUN_HTML_DESCR FALSE) + endif() + set(install_dest "") if(NOT G_RUNTIME_OUTPUT_DIR) if(G_EXE) @@ -188,21 +203,6 @@ function(build_module) target_link_libraries(${G_NAME} ${dep}) endforeach() - 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) - 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(RUN_HTML_DESCR FALSE) - endif() - # To use this property later in build_docs set(PGM_EXT "") if(WIN32) @@ -245,7 +245,7 @@ function(build_module) string(REPLACE ".html" "" PGM_NAME "${HTML_FILE_NAME}") string(REPLACE ".html" ".tmp.html" TMP_HTML_NAME ${HTML_FILE_NAME}) - set(TMP_HTML_FILE ${CMAKE_CURRENT_BINARY_DIR}/${TMP_HTML_NAME}) + set(TMP_HTML_FILE ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${TMP_HTML_NAME}) set(OUT_HTML_FILE ${GISBASE}/docs/html/${HTML_FILE_NAME}) set(PGM_EXT "") @@ -256,14 +256,9 @@ function(build_module) set(html_descr_argument "--html-description") if(RUN_HTML_DESCR) set(html_descr_command ${G_NAME}${PGM_EXT} "--html-description") - else() - set(html_descr_command ${CMAKE_COMMAND} -E touch - ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_NAME}) endif() file(GLOB IMG_FILES ${G_SRC_DIR}/*.png ${G_SRC_DIR}/*.jpg) - set(copy_images_command ${CMAKE_COMMAND} -E touch - ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_NAME}) if(IMG_FILES) set(copy_images_command ${CMAKE_COMMAND} -E copy ${IMG_FILES} ${GISBASE}/docs/html/) diff --git a/cmake/modules/build_script_in_subdir.cmake b/cmake/modules/build_script_in_subdir.cmake index 681c17da6ff..eaabfe767f3 100644 --- a/cmake/modules/build_script_in_subdir.cmake +++ b/cmake/modules/build_script_in_subdir.cmake @@ -47,8 +47,6 @@ function(build_script_in_subdir dir_name) if(WITH_DOCS) file(GLOB IMG_FILES ${G_SRC_DIR}/*.png ${G_SRC_DIR}/*.jpg) - set(copy_images_command ${CMAKE_COMMAND} -E touch - ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_NAME}) if(IMG_FILES) set(copy_images_command ${CMAKE_COMMAND} -E copy ${IMG_FILES} ${GISBASE}/docs/html/) @@ -68,7 +66,7 @@ function(build_script_in_subdir dir_name) endif() endif() - set(TMP_HTML_FILE ${CMAKE_CURRENT_BINARY_DIR}/${G_NAME}.tmp.html) + set(TMP_HTML_FILE ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_NAME}.tmp.html) set(OUT_HTML_FILE ${GISBASE}/docs/html/${G_NAME}.html) add_custom_command( From 7a0b99bdf6d7f6f0c21c8b9e4ce16428bed39fbd Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 03:35:21 -0600 Subject: [PATCH 075/253] Don't chdir unnecessarily --- cmake/modules/build_gui_in_subdir.cmake | 19 ++++++++----------- cmake/modules/build_module.cmake | 12 ++++++------ cmake/modules/build_script_in_subdir.cmake | 8 ++++---- 3 files changed, 18 insertions(+), 21 deletions(-) diff --git a/cmake/modules/build_gui_in_subdir.cmake b/cmake/modules/build_gui_in_subdir.cmake index 59b8fb26b68..752df2922fd 100644 --- a/cmake/modules/build_gui_in_subdir.cmake +++ b/cmake/modules/build_gui_in_subdir.cmake @@ -71,27 +71,24 @@ function(build_gui_in_subdir dir_name) endif() endif() - set(TMP_HTML_FILE ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_TARGET_NAME}.tmp.html) + set(TMP_HTML_FILE + ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_TARGET_NAME}.tmp.html) set(OUT_HTML_FILE ${GISBASE}/docs/html/${G_TARGET_NAME}.html) set(GUI_HTML_FILE ${GISBASE}/docs/html/wxGUI.${G_NAME}.html) add_custom_command( OUTPUT ${OUT_HTML_FILE} COMMAND - ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRC_DIR} - ${PYTHON_EXECUTABLE} ${G_TARGET_NAME}.py "--html-description" > + ${grass_env_command} ${PYTHON_EXECUTABLE} + ${GISBASE}/scripts/${G_TARGET_NAME}${SCRIPT_EXT} --html-description > ${TMP_HTML_FILE} - COMMAND - ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRC_DIR} - ${PYTHON_EXECUTABLE} ${MKHTML_PY} ${G_TARGET_NAME} ${GRASS_VERSION_DATE} - > ${OUT_HTML_FILE} + COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} ${MKHTML_PY} + ${G_TARGET_NAME} ${GRASS_VERSION_DATE} > ${OUT_HTML_FILE} COMMENT "Creating ${OUT_HTML_FILE}" COMMAND ${copy_images_command} COMMAND ${CMAKE_COMMAND} -E remove ${TMP_HTML_FILE} - COMMAND - ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRC_DIR} - ${PYTHON_EXECUTABLE} ${MKHTML_PY} ${G_TARGET_NAME} ${GRASS_VERSION_DATE} - > ${GUI_HTML_FILE} + COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} ${MKHTML_PY} + ${G_TARGET_NAME} ${GRASS_VERSION_DATE} > ${GUI_HTML_FILE} COMMENT "Creating ${GUI_HTML_FILE}" DEPENDS ${OUT_SCRIPT_FILE} GUI_WXPYTHON LIB_PYTHON) diff --git a/cmake/modules/build_module.cmake b/cmake/modules/build_module.cmake index e49d6fcec63..0938e9010ea 100644 --- a/cmake/modules/build_module.cmake +++ b/cmake/modules/build_module.cmake @@ -253,9 +253,10 @@ function(build_module) set(PGM_EXT ".exe") endif() - set(html_descr_argument "--html-description") if(RUN_HTML_DESCR) - set(html_descr_command ${G_NAME}${PGM_EXT} "--html-description") + set(html_descr_command ${G_NAME}${PGM_EXT} --html-description) + else() + set(html_descr_command ${CMAKE_COMMAND} -E echo) endif() file(GLOB IMG_FILES ${G_SRC_DIR}/*.png ${G_SRC_DIR}/*.jpg) @@ -267,10 +268,9 @@ function(build_module) add_custom_command( TARGET ${G_NAME} POST_BUILD - COMMAND ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRC_DIR} - ${html_descr_command} > ${TMP_HTML_FILE} - COMMAND ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRC_DIR} - ${PYTHON_EXECUTABLE} ${MKHTML_PY} ${PGM_NAME} > ${OUT_HTML_FILE} + COMMAND ${grass_env_command} ${html_descr_command} > ${TMP_HTML_FILE} + COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} ${MKHTML_PY} ${PGM_NAME} + > ${OUT_HTML_FILE} COMMAND ${copy_images_command} COMMAND ${CMAKE_COMMAND} -E remove ${TMP_HTML_FILE} COMMENT "Creating ${OUT_HTML_FILE}") diff --git a/cmake/modules/build_script_in_subdir.cmake b/cmake/modules/build_script_in_subdir.cmake index eaabfe767f3..f6a439fd9db 100644 --- a/cmake/modules/build_script_in_subdir.cmake +++ b/cmake/modules/build_script_in_subdir.cmake @@ -72,11 +72,11 @@ function(build_script_in_subdir dir_name) add_custom_command( OUTPUT ${OUT_HTML_FILE} COMMAND - ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRC_DIR} - ${PYTHON_EXECUTABLE} ${G_NAME}.py "--html-description" > + ${grass_env_command} ${PYTHON_EXECUTABLE} + ${GISBASE}/scripts/${G_NAME}${SCRIPT_EXT} --html-description > ${TMP_HTML_FILE} - COMMAND ${grass_env_command} ${CMAKE_COMMAND} -E chdir ${G_SRC_DIR} - ${PYTHON_EXECUTABLE} ${MKHTML_PY} ${G_NAME} > ${OUT_HTML_FILE} + COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} ${MKHTML_PY} ${G_NAME} > + ${OUT_HTML_FILE} COMMAND ${copy_images_command} COMMAND ${CMAKE_COMMAND} -E remove ${TMP_HTML_FILE} COMMENT "Creating ${OUT_HTML_FILE}" From 99a8f1e5af3abc048a3085aeeaad06ce4f38c14d Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 10:57:03 -0600 Subject: [PATCH 076/253] Set GRASS_HEADERS_(VERSION|DATE) for g.version --- CMakeLists.txt | 2 +- cmake/modules/repo_status.cmake | 59 ++++++++++++++++++++++++++++----- 2 files changed, 51 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c8714560d23..66dad527f6b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -156,7 +156,7 @@ set_compiler_flags() include(Configure) include(repo_status) -repo_status("${CMAKE_CURRENT_LIST_DIR}" GRASS_VERSION_GIT) +repo_status("${CMAKE_CURRENT_LIST_DIR}") enable_testing() diff --git a/cmake/modules/repo_status.cmake b/cmake/modules/repo_status.cmake index 43a22173b3c..ce107aead53 100644 --- a/cmake/modules/repo_status.cmake +++ b/cmake/modules/repo_status.cmake @@ -6,17 +6,24 @@ COPYRIGHT: (C) 2020 by the GRASS Development Team Read the file COPYING that comes with GRASS for details. #]] -function(repo_status repo_dir version_git_var) +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) + if(NOT EXISTS "${repo_dir}/.git") - message( - STATUS ".git directory not found. GRASS_VERSION_GIT is set to 'exported'") - set(GRASS_VERSION_GIT "exported") return() endif() find_package(Git) if(NOT GIT_FOUND) - message(WARNING "git not found. GRASS_VERSION_GIT is set to 'exported'") - set(GRASS_VERSION_GIT "exported") return() endif() @@ -31,9 +38,43 @@ function(repo_status repo_dir version_git_var) 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() - set(${version_git_var} - "${GRASS_VERSION_GIT}" - PARENT_SCOPE) + 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) + + 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 -- + "${CMAKE_SOURCE_DIR}/include" + 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() endfunction() From 4d97f596622803cef99b17d18b83845b50741f7a Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 12:25:32 -0600 Subject: [PATCH 077/253] Remove JPEG --- cmake/modules/CheckDependentLibraries.cmake | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/cmake/modules/CheckDependentLibraries.cmake b/cmake/modules/CheckDependentLibraries.cmake index c8b033973c9..5115b96283e 100644 --- a/cmake/modules/CheckDependentLibraries.cmake +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -36,19 +36,6 @@ if(PNG_FOUND) ${PNG_INCLUDE_DIR}) endif() -#[[ -# TODO: no core and addon modules use libjpeg; delete this block -# find -type f -exec grep -H HAVE_JPEGLIB_H {} \; | grep -v "cmake\|config.h" -find_package(JPEG) -if(JPEG_FOUND) - add_library(LIBJPEG INTERFACE IMPORTED GLOBAL) - set_property(TARGET LIBJPEG PROPERTY INTERFACE_LINK_LIBRARIES - ${JPEG_LIBRARY${find_library_suffix}}) - set_property(TARGET LIBJPEG PROPERTY INTERFACE_INCLUDE_DIRECTORIES - # ${JPEG_INCLUDE_DIR}) -endif() -#]] - find_package(ZLIB REQUIRED) if(ZLIB_FOUND) add_library(ZLIB INTERFACE IMPORTED GLOBAL) From f007776beb4d2cba5afe2072da8230c8ceff19bc Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 14:04:59 -0600 Subject: [PATCH 078/253] Add MySQL support --- CMakeLists.txt | 3 +- cmake/modules/CheckDependentLibraries.cmake | 36 ++++++++++++++------- include/config.h.cmake.in | 7 ++-- 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 66dad527f6b..0819a11e115 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -77,7 +77,8 @@ option(WITH_CAIRO "Build with cairo support ." ON) option(WITH_X11 "Build with X11 support ." ${default_option_enabled}) option(WITH_OPENGL "Build with opengl support ." ON) option(WITH_SQLITE "enable sqlite support" ON) -option(WITH_POSTGRES "enable postgres support" ON) +option(WITH_POSTGRES "enable postgres support" OFF) +option(WITH_MYSQL "enable mysql support" OFF) option(WITH_NLS "enable nls support" ${default_option_enabled}) option(WITH_BZLIB "enable bzlib support" ON) option(WITH_BLAS "enable blas support" ON) diff --git a/cmake/modules/CheckDependentLibraries.cmake b/cmake/modules/CheckDependentLibraries.cmake index 5115b96283e..12aa366502b 100644 --- a/cmake/modules/CheckDependentLibraries.cmake +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -166,17 +166,6 @@ if(WITH_OPENGL) endif() endif() -if(WITH_POSTGRES) - find_package(PostgreSQL REQUIRED) - if(POSTGRESQL_FOUND) - add_library(POSTGRES INTERFACE IMPORTED GLOBAL) - set_property(TARGET POSTGRES PROPERTY INTERFACE_LINK_LIBRARIES - ${PostgreSQL_LIBRARY}) - set_property(TARGET POSTGRES PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${PostgreSQL_INCLUDE_DIR}) - endif() -endif() - if(WITH_SQLITE) find_package(SQLite REQUIRED) if(SQLITE_FOUND) @@ -188,6 +177,28 @@ if(WITH_SQLITE) endif() endif() +if(WITH_POSTGRES) + find_package(PostgreSQL) + if(POSTGRESQL_FOUND) + add_library(POSTGRES INTERFACE IMPORTED GLOBAL) + set_property(TARGET POSTGRES PROPERTY INTERFACE_LINK_LIBRARIES + ${POSTGRESQL_LIBRARY}) + set_property(TARGET POSTGRES PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${POSTGRESQL_INCLUDE_DIR}) + endif() +endif() + +if(WITH_MYSQL) + find_package(MySQL) + 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_DIR}) + endif() +endif() + find_package(PDAL QUIET) if(PDAL_FOUND) add_library(PDAL INTERFACE IMPORTED GLOBAL) @@ -272,6 +283,8 @@ check_target(GEOS HAVE_GEOS) check_target(GDAL HAVE_GDAL) check_target(GDAL HAVE_OGR) check_target(SQLITE HAVE_SQLITE) +check_target(POSTGRES HAVE_POSTGRES) +check_target(MYSQL HAVE_MYSQL_H) check_target(PROJ HAVE_PROJ_H) @@ -282,7 +295,6 @@ check_target(LAPACK HAVE_LIBLAPACK) check_target(LAPACK HAVE_CLAPACK_H) check_target(FREETYPE HAVE_FT2BUILD_H) -check_target(POSTGRES HAVE_POSTGRES) check_target(ODBC HAVE_SQL_H) if(TARGET POSTGRES) diff --git a/include/config.h.cmake.in b/include/config.h.cmake.in index 9b63e7631eb..2a68eff8f4d 100644 --- a/include/config.h.cmake.in +++ b/include/config.h.cmake.in @@ -125,11 +125,14 @@ /* define if asprintf() exists */ #cmakedefine HAVE_ASPRINTF ${HAVE_ASPRINTF} +/* define if SQLite is to be used */ +#cmakedefine HAVE_SQLITE ${HAVE_SQLITE} + /* define if postgres is to be used */ #cmakedefine HAVE_POSTGRES ${HAVE_POSTGRES} -/* define if SQLite is to be used */ -#cmakedefine HAVE_SQLITE ${HAVE_SQLITE} +/* define if MySQL is to be used */ +#cmakedefine HAVE_MYSQL_H ${HAVE_MYSQL_H} /* define if GDAL is to be used */ #cmakedefine HAVE_GDAL ${HAVE_GDAL} From 93987e26df0a7aa507c5b297ac82811c41cb3429 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 14:40:52 -0600 Subject: [PATCH 079/253] Support MySQL --- cmake/find_scripts/FindMySQL.cmake | 16 ++++++++ cmake/modules/CheckDependentLibraries.cmake | 2 +- db/drivers/CMakeLists.txt | 41 +++++++++++++++++++-- 3 files changed, 54 insertions(+), 5 deletions(-) create mode 100644 cmake/find_scripts/FindMySQL.cmake diff --git a/cmake/find_scripts/FindMySQL.cmake b/cmake/find_scripts/FindMySQL.cmake new file mode 100644 index 00000000000..9f7bc49754a --- /dev/null +++ b/cmake/find_scripts/FindMySQL.cmake @@ -0,0 +1,16 @@ +execute_process( + 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) + +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) +endif() diff --git a/cmake/modules/CheckDependentLibraries.cmake b/cmake/modules/CheckDependentLibraries.cmake index 12aa366502b..6d7f4956d64 100644 --- a/cmake/modules/CheckDependentLibraries.cmake +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -195,7 +195,7 @@ if(WITH_MYSQL) set_property(TARGET MYSQL PROPERTY INTERFACE_LINK_LIBRARIES ${MYSQL_LIBRARY}) set_property(TARGET MYSQL PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${MYSQL_INCLUDE_DIR}) + ${MYSQL_INCLUDE_DIRS}) endif() endif() diff --git a/db/drivers/CMakeLists.txt b/db/drivers/CMakeLists.txt index d9dbd1ef466..f8d30699a98 100644 --- a/db/drivers/CMakeLists.txt +++ b/db/drivers/CMakeLists.txt @@ -106,12 +106,45 @@ build_program_in_subdir( RUNTIME_OUTPUT_DIR "driver/db/") -if(TARGET POSTGRES) - list(APPEND db_drivers postgres) +if(TARGET MYSQL) + list(APPEND db_drivers mysql) endif() -if(MYSQL_LIB) - # add_subdirectory(mysql) list(APPEND db_drivers "mysql") +set(mysql_SRCS + mysql/create_table.c + mysql/cursor.c + mysql/dbe.c + mysql/describe.c + mysql/driver.c + mysql/error.c + mysql/execute.c + mysql/fetch.c + mysql/index.c + mysql/listtab.c + mysql/main.c + mysql/parse.c + mysql/replace.c + mysql/select.c) + +build_program_in_subdir( + mysql + SOURCES + ${mysql_SRCS} + DEPENDS + grass_gis + grass_dbmidriver + grass_sqlp + DEFS + "${grass_dbstubs_DEFS}" + PRIMARY_DEPENDS + MYSQL + HTML_FILE_NAME + grass-sql + RUNTIME_OUTPUT_DIR + "driver/db/") + +if(TARGET MYSQL) + list(APPEND db_drivers mysql) endif() set(db_drivers From e0feca0a19de2abe74d86abf879a3a0d2c2b3aa2 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 14:41:57 -0600 Subject: [PATCH 080/253] Move mysql_SRCS to top --- db/drivers/CMakeLists.txt | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/db/drivers/CMakeLists.txt b/db/drivers/CMakeLists.txt index f8d30699a98..d6562f2884d 100644 --- a/db/drivers/CMakeLists.txt +++ b/db/drivers/CMakeLists.txt @@ -15,6 +15,22 @@ set(dbf_SRCS dbf/str.c dbf/table.c) +set(mysql_SRCS + mysql/create_table.c + mysql/cursor.c + mysql/dbe.c + mysql/describe.c + mysql/driver.c + mysql/error.c + mysql/execute.c + mysql/fetch.c + mysql/index.c + mysql/listtab.c + mysql/main.c + mysql/parse.c + mysql/replace.c + mysql/select.c) + set(db_drivers) set(grass_dbstubs_DEFS) if(MSVC) @@ -110,22 +126,6 @@ if(TARGET MYSQL) list(APPEND db_drivers mysql) endif() -set(mysql_SRCS - mysql/create_table.c - mysql/cursor.c - mysql/dbe.c - mysql/describe.c - mysql/driver.c - mysql/error.c - mysql/execute.c - mysql/fetch.c - mysql/index.c - mysql/listtab.c - mysql/main.c - mysql/parse.c - mysql/replace.c - mysql/select.c) - build_program_in_subdir( mysql SOURCES From accfc82289e733ecf7f3672afa5e29e32ccffa65 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 14:48:54 -0600 Subject: [PATCH 081/253] Mixed-case PostgreSQL_* variables --- cmake/modules/CheckDependentLibraries.cmake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cmake/modules/CheckDependentLibraries.cmake b/cmake/modules/CheckDependentLibraries.cmake index 6d7f4956d64..c2d5df9062d 100644 --- a/cmake/modules/CheckDependentLibraries.cmake +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -179,12 +179,12 @@ endif() if(WITH_POSTGRES) find_package(PostgreSQL) - if(POSTGRESQL_FOUND) + if(PostgreSQL_FOUND) add_library(POSTGRES INTERFACE IMPORTED GLOBAL) set_property(TARGET POSTGRES PROPERTY INTERFACE_LINK_LIBRARIES - ${POSTGRESQL_LIBRARY}) + ${PostgreSQL_LIBRARY}) set_property(TARGET POSTGRES PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${POSTGRESQL_INCLUDE_DIR}) + ${PostgreSQL_INCLUDE_DIR}) endif() endif() From cb7d540be41c26cd2d04021ae350b32eccfb2a0b Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 14:50:51 -0600 Subject: [PATCH 082/253] Mixed-case MySQL_* variables --- cmake/find_scripts/FindMySQL.cmake | 14 +++++++------- cmake/modules/CheckDependentLibraries.cmake | 6 +++--- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/cmake/find_scripts/FindMySQL.cmake b/cmake/find_scripts/FindMySQL.cmake index 9f7bc49754a..59f36a07726 100644 --- a/cmake/find_scripts/FindMySQL.cmake +++ b/cmake/find_scripts/FindMySQL.cmake @@ -1,16 +1,16 @@ execute_process( COMMAND mysql_config --cflags - OUTPUT_VARIABLE MYSQL_INCLUDE_DIRS + OUTPUT_VARIABLE MySQL_INCLUDE_DIRS OUTPUT_STRIP_TRAILING_WHITESPACE) execute_process( COMMAND mysql_config --libs - OUTPUT_VARIABLE MYSQL_LIBRARY + OUTPUT_VARIABLE MySQL_LIBRARY OUTPUT_STRIP_TRAILING_WHITESPACE) -if(MYSQL_INCLUDE_DIRS AND MYSQL_LIBRARY) - string(REGEX REPLACE "(^| +)-I" " " _dummy ${MYSQL_INCLUDE_DIRS}) +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(REPLACE " " ";" MySQL_INCLUDE_DIRS ${_dummy}) + message(STATUS "Found MySQL: ${MySQL_LIBRARY}") + set(MySQL_FOUND TRUE) endif() diff --git a/cmake/modules/CheckDependentLibraries.cmake b/cmake/modules/CheckDependentLibraries.cmake index c2d5df9062d..4971b28c8a0 100644 --- a/cmake/modules/CheckDependentLibraries.cmake +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -190,12 +190,12 @@ endif() if(WITH_MYSQL) find_package(MySQL) - if(MYSQL_FOUND) + if(MySQL_FOUND) add_library(MYSQL INTERFACE IMPORTED GLOBAL) set_property(TARGET MYSQL PROPERTY INTERFACE_LINK_LIBRARIES - ${MYSQL_LIBRARY}) + ${MySQL_LIBRARY}) set_property(TARGET MYSQL PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${MYSQL_INCLUDE_DIRS}) + ${MySQL_INCLUDE_DIRS}) endif() endif() From 184d8e3c09ff12c4876b7d4a17a943392a608938 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 14:58:37 -0600 Subject: [PATCH 083/253] Mixed-case LibLAS_FOUND --- cmake/modules/CheckDependentLibraries.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/modules/CheckDependentLibraries.cmake b/cmake/modules/CheckDependentLibraries.cmake index 4971b28c8a0..60a8a4c92e0 100644 --- a/cmake/modules/CheckDependentLibraries.cmake +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -209,7 +209,7 @@ endif() if(WITH_LIBLAS) find_package(LibLAS) - if(LIBLAS_FOUND) + if(LibLAS_FOUND) add_library(LIBLAS INTERFACE IMPORTED GLOBAL) set_property(TARGET LIBLAS PROPERTY INTERFACE_LINK_LIBRARIES ${LibLAS_C_LIBRARY}) From 347f6f390e3baa355029c34f5b5fd1949d87b69a Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 15:04:10 -0600 Subject: [PATCH 084/253] Use original mixed-case *_FOUND --- cmake/modules/CheckDependentLibraries.cmake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cmake/modules/CheckDependentLibraries.cmake b/cmake/modules/CheckDependentLibraries.cmake index 60a8a4c92e0..0071d725b9a 100644 --- a/cmake/modules/CheckDependentLibraries.cmake +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -219,7 +219,7 @@ if(WITH_LIBLAS) endif() find_package(NetCDF QUIET) -if(NETCDF_FOUND) +if(NetCDF_FOUND) add_library(NETCDF INTERFACE IMPORTED GLOBAL) set_property(TARGET NETCDF PROPERTY INTERFACE_LINK_LIBRARIES ${NetCDF_LIBRARY}) @@ -238,7 +238,7 @@ endif() set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads) -if(THREADS_FOUND) +if(Threads_FOUND) add_library(PTHREAD INTERFACE IMPORTED GLOBAL) if(THREADS_HAVE_PTHREAD_ARG) set_property(TARGET PTHREAD PROPERTY INTERFACE_COMPILE_OPTIONS "-pthread") @@ -261,7 +261,7 @@ if(MSVC) endif() find_package(Python3 REQUIRED) -if(PYTHON3_FOUND) +if(Python3_FOUND) set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE}) #[[ find_package(PythonLibs REQUIRED) From b9ccfbefeb75012d623712bde1eca1dc61042286 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 17:31:55 -0600 Subject: [PATCH 085/253] Support readline --- CMakeLists.txt | 1 + cmake/find_scripts/FindReadline.cmake | 40 +++++++++++++++++++++ cmake/modules/CheckDependentLibraries.cmake | 21 +++++++++++ cmake/modules/build_module.cmake | 2 +- include/config.h.cmake.in | 3 ++ raster/r.mapcalc/CMakeLists.txt | 8 +++-- 6 files changed, 72 insertions(+), 3 deletions(-) create mode 100644 cmake/find_scripts/FindReadline.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 0819a11e115..43e146d43e9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -80,6 +80,7 @@ option(WITH_SQLITE "enable sqlite support" ON) option(WITH_POSTGRES "enable postgres support" OFF) option(WITH_MYSQL "enable mysql support" OFF) option(WITH_NLS "enable nls support" ${default_option_enabled}) +option(WITH_READLINE "Build with readline support" ON) option(WITH_BZLIB "enable bzlib support" ON) option(WITH_BLAS "enable blas support" ON) option(WITH_LAPACK "enable lapack support" ON) diff --git a/cmake/find_scripts/FindReadline.cmake b/cmake/find_scripts/FindReadline.cmake new file mode 100644 index 00000000000..6c2e3bc9eb0 --- /dev/null +++ b/cmake/find_scripts/FindReadline.cmake @@ -0,0 +1,40 @@ +find_package(PkgConfig) +if(PKG_CONFIG_FOUND) + pkg_check_modules(Readline QUIET "readline") + pkg_check_modules(History QUIET "history") + set(Readline_LIBRARIES ${Readline_LINK_LIBRARIES}) + set(History_LIBRARIES ${History_LINK_LIBRARIES}) +else() + find_path(Readline_ROOT_DIR NAMES include/readline/readline.h) + find_path( + Readline_INCLUDE_DIRS + NAMES readline/readline.h + HINTS ${Readline_ROOT_DIR}/include) + find_library( + Readline_LIBRARIES + NAMES readline + HINTS ${Readline_ROOT_DIR}/lib) + if(Readline_INCLUDE_DIRS AND Readline_LIBRARIES) + set(Readline_FOUND TRUE) + endif() + + find_path( + History_INCLUDE_DIRS + NAMES readline/readline.h + HINTS ${Readline_ROOT_DIR}/include) + find_library( + History_LIBRARIES + NAMES readline + HINTS ${Readline_ROOT_DIR}/lib) + if(History_INCLUDE_DIRS AND History_LIBRARIES) + set(History_FOUND TRUE) + endif() +endif() + +if(Readline_INCLUDE_DIRS AND Readline_LIBRARIES) + message(STATUS "Found Readline: ${Readline_LIBRARIES}") +endif() + +if(History_INCLUDE_DIRS AND History_LIBRARIES) + message(STATUS "Found History: ${History_LIBRARIES}") +endif() diff --git a/cmake/modules/CheckDependentLibraries.cmake b/cmake/modules/CheckDependentLibraries.cmake index 0071d725b9a..32db1970013 100644 --- a/cmake/modules/CheckDependentLibraries.cmake +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -236,6 +236,25 @@ if(GEOS_FOUND) ${GEOS_INCLUDE_DIR}) endif() +if(WITH_READLINE) + find_package(Readline) + if(Readline_FOUND) + add_library(READLINE INTERFACE IMPORTED GLOBAL) + set_property(TARGET READLINE PROPERTY INTERFACE_LINK_LIBRARIES + ${Readline_LIBRARIES}) + set_property(TARGET READLINE PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${Readline_INCLUDE_DIRS}) + endif() + if(History_FOUND) + add_library(HISTORY INTERFACE IMPORTED GLOBAL) + set_property(TARGET HISTORY PROPERTY INTERFACE_LINK_LIBRARIES + ${History_LIBRARIES}) + set_property(TARGET HISTORY PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${History_INCLUDE_DIRS}) + message(HAHA ${History_LIBRARIES}...${History_INCLUDE_DIRS}) + endif() +endif() + set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads) if(Threads_FOUND) @@ -295,6 +314,8 @@ check_target(LAPACK HAVE_LIBLAPACK) check_target(LAPACK HAVE_CLAPACK_H) check_target(FREETYPE HAVE_FT2BUILD_H) +check_target(READLINE HAVE_READLINE_READLINE_H) +check_target(HISTORY HAVE_READLINE_HISTORY_H) check_target(ODBC HAVE_SQL_H) if(TARGET POSTGRES) diff --git a/cmake/modules/build_module.cmake b/cmake/modules/build_module.cmake index 0938e9010ea..10a180e469f 100644 --- a/cmake/modules/build_module.cmake +++ b/cmake/modules/build_module.cmake @@ -199,8 +199,8 @@ function(build_module) if(interface_def) target_compile_definitions(${G_NAME} PRIVATE "${interface_def}") endif() + target_link_libraries(${G_NAME} ${dep}) endif() - target_link_libraries(${G_NAME} ${dep}) endforeach() # To use this property later in build_docs diff --git a/include/config.h.cmake.in b/include/config.h.cmake.in index 2a68eff8f4d..13706181336 100644 --- a/include/config.h.cmake.in +++ b/include/config.h.cmake.in @@ -189,6 +189,9 @@ /* define if readline exists */ #cmakedefine HAVE_READLINE_READLINE_H ${HAVE_READLINE_READLINE_H} +/* define if history exists */ +#cmakedefine HAVE_READLINE_HISTORY_H ${HAVE_READLINE_HISTORY_H} + /* define if ft2build.h exists */ #cmakedefine HAVE_FT2BUILD_H ${HAVE_FT2BUILD_H} diff --git a/raster/r.mapcalc/CMakeLists.txt b/raster/r.mapcalc/CMakeLists.txt index 8cf40de93f3..7ac43843f80 100644 --- a/raster/r.mapcalc/CMakeLists.txt +++ b/raster/r.mapcalc/CMakeLists.txt @@ -26,7 +26,9 @@ build_program( grass_gis grass_btree grass_calc - grass_raster) + grass_raster + OPTIONAL_DEPENDS + READLINE) build_program( NAME @@ -37,4 +39,6 @@ build_program( grass_gis grass_btree grass_calc - grass_raster3d) + grass_raster3d + OPTIONAL_DEPENDS + READLINE) From 0f5ef8ff4f0f9a7ecc99f3a923876b0c817b37de Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 17:38:46 -0600 Subject: [PATCH 086/253] Consistent help messages --- CMakeLists.txt | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 43e146d43e9..7b9e4235ef0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -76,20 +76,20 @@ endif() option(WITH_CAIRO "Build with cairo support ." ON) option(WITH_X11 "Build with X11 support ." ${default_option_enabled}) option(WITH_OPENGL "Build with opengl support ." ON) -option(WITH_SQLITE "enable sqlite support" ON) -option(WITH_POSTGRES "enable postgres support" OFF) -option(WITH_MYSQL "enable mysql support" OFF) -option(WITH_NLS "enable nls support" ${default_option_enabled}) -option(WITH_READLINE "Build with readline support" ON) -option(WITH_BZLIB "enable bzlib support" ON) -option(WITH_BLAS "enable blas support" ON) -option(WITH_LAPACK "enable lapack support" ON) -option(WITH_LIBLAS "enable libLAS support" OFF) -option(WITH_OPENDWG "enable v.in.dwg" OFF) +option(WITH_SQLITE "Build with SQLite support" ON) +option(WITH_POSTGRES "Build with Postgres support" OFF) +option(WITH_MYSQL "Build with MySQL support" OFF) +option(WITH_NLS "Build with NLS support" ${default_option_enabled}) +option(WITH_READLINE "Build with Readline support" ON) +option(WITH_BZLIB "Build with bzlib support" ON) +option(WITH_BLAS "Build with BLAS support" ON) +option(WITH_LAPACK "Build with LAPACK support" ON) +option(WITH_LIBLAS "Build with libLAS support" OFF) +option(WITH_OPENDWG "Build with OpenDWG support" OFF) # XXX: Do we need this? Don't we always need Python? -option(WITH_PYTHON "Build python bindings" ON) -option(WITH_LARGEFILES "enable largefile support" ${default_option_enabled}) +option(WITH_PYTHON "Build Python bindings" ON) +option(WITH_LARGEFILES "Build with large file support" ${default_option_enabled}) option(WITH_DOCS "Build documentation" ON) if(APPLE) if(POLICY CMP0042) From 510ae702eab6a5127c5a45d896034216773f82d9 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 17:41:23 -0600 Subject: [PATCH 087/253] Require WITH-libraries --- cmake/modules/CheckDependentLibraries.cmake | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/cmake/modules/CheckDependentLibraries.cmake b/cmake/modules/CheckDependentLibraries.cmake index 32db1970013..f4150bf6e72 100644 --- a/cmake/modules/CheckDependentLibraries.cmake +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -123,7 +123,7 @@ if(ICONV_FOUND) endif() if(WITH_BZLIB) - find_package(BZip2) + find_package(BZip2 REQUIRED) if(BZIP2_FOUND) add_library(BZIP2 INTERFACE IMPORTED GLOBAL) set_property(TARGET BZIP2 PROPERTY INTERFACE_LINK_LIBRARIES @@ -134,7 +134,7 @@ if(WITH_BZLIB) endif() if(WITH_BLAS) - find_package(BLAS) + find_package(BLAS REQUIRED) if(BLAS_FOUND) add_library(BLAS INTERFACE IMPORTED GLOBAL) set_property(TARGET BLAS PROPERTY INTERFACE_LINK_LIBRARIES @@ -143,7 +143,7 @@ if(WITH_BLAS) endif() if(WITH_LAPACK) - find_package(LAPACK) + find_package(LAPACK REQUIRED) if(LAPACK_FOUND) add_library(LAPACK INTERFACE IMPORTED GLOBAL) set_property(TARGET LAPACK PROPERTY INTERFACE_LINK_LIBRARIES @@ -178,7 +178,7 @@ if(WITH_SQLITE) endif() if(WITH_POSTGRES) - find_package(PostgreSQL) + find_package(PostgreSQL REQUIRED) if(PostgreSQL_FOUND) add_library(POSTGRES INTERFACE IMPORTED GLOBAL) set_property(TARGET POSTGRES PROPERTY INTERFACE_LINK_LIBRARIES @@ -189,7 +189,7 @@ if(WITH_POSTGRES) endif() if(WITH_MYSQL) - find_package(MySQL) + find_package(MySQL REQUIRED) if(MySQL_FOUND) add_library(MYSQL INTERFACE IMPORTED GLOBAL) set_property(TARGET MYSQL PROPERTY INTERFACE_LINK_LIBRARIES @@ -208,7 +208,7 @@ if(PDAL_FOUND) endif() if(WITH_LIBLAS) - find_package(LibLAS) + find_package(LibLAS REQUIRED) if(LibLAS_FOUND) add_library(LIBLAS INTERFACE IMPORTED GLOBAL) set_property(TARGET LIBLAS PROPERTY INTERFACE_LINK_LIBRARIES @@ -237,7 +237,7 @@ if(GEOS_FOUND) endif() if(WITH_READLINE) - find_package(Readline) + find_package(Readline REQUIRED) if(Readline_FOUND) add_library(READLINE INTERFACE IMPORTED GLOBAL) set_property(TARGET READLINE PROPERTY INTERFACE_LINK_LIBRARIES From 9537f7376534ed771d6c0041d010e7e0795cb999 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 18:31:56 -0600 Subject: [PATCH 088/253] Support zstd --- CMakeLists.txt | 4 ++- cmake/modules/CheckDependentLibraries.cmake | 37 +++++++++++++-------- include/config.h.cmake.in | 3 ++ lib/gis/CMakeLists.txt | 1 + 4 files changed, 31 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7b9e4235ef0..46e2ce5f791 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,6 +82,7 @@ option(WITH_MYSQL "Build with MySQL support" OFF) option(WITH_NLS "Build with NLS support" ${default_option_enabled}) option(WITH_READLINE "Build with Readline support" ON) option(WITH_BZLIB "Build with bzlib support" ON) +option(WITH_ZSTD "Build with zstd support" ON) option(WITH_BLAS "Build with BLAS support" ON) option(WITH_LAPACK "Build with LAPACK support" ON) option(WITH_LIBLAS "Build with libLAS support" OFF) @@ -89,7 +90,8 @@ option(WITH_OPENDWG "Build with OpenDWG support" OFF) # XXX: Do we need this? Don't we always need Python? option(WITH_PYTHON "Build Python bindings" ON) -option(WITH_LARGEFILES "Build with large file support" ${default_option_enabled}) +option(WITH_LARGEFILES "Build with large file support" + ${default_option_enabled}) option(WITH_DOCS "Build documentation" ON) if(APPLE) if(POLICY CMP0042) diff --git a/cmake/modules/CheckDependentLibraries.cmake b/cmake/modules/CheckDependentLibraries.cmake index f4150bf6e72..1e95019646c 100644 --- a/cmake/modules/CheckDependentLibraries.cmake +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -45,6 +45,28 @@ if(ZLIB_FOUND) ${ZLIB_INCLUDE_DIR}) endif() +if(WITH_BZLIB) + find_package(BZip2 REQUIRED) + if(BZIP2_FOUND) + add_library(BZIP2 INTERFACE IMPORTED GLOBAL) + set_property(TARGET BZIP2 PROPERTY INTERFACE_LINK_LIBRARIES + ${BZIP2_LIBRARY${find_library_suffix}}) + set_property(TARGET BZIP2 PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${BZIP2_INCLUDE_DIR}) + endif() +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() +endif() + if(UNIX) find_library(M_LIBRARY m) add_library(LIBM INTERFACE IMPORTED GLOBAL) @@ -122,17 +144,6 @@ if(ICONV_FOUND) # include/config.cmake.in endif() -if(WITH_BZLIB) - find_package(BZip2 REQUIRED) - if(BZIP2_FOUND) - add_library(BZIP2 INTERFACE IMPORTED GLOBAL) - set_property(TARGET BZIP2 PROPERTY INTERFACE_LINK_LIBRARIES - ${BZIP2_LIBRARY${find_library_suffix}}) - set_property(TARGET BZIP2 PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${BZIP2_INCLUDE_DIR}) - endif() -endif() - if(WITH_BLAS) find_package(BLAS REQUIRED) if(BLAS_FOUND) @@ -251,7 +262,6 @@ if(WITH_READLINE) ${History_LIBRARIES}) set_property(TARGET HISTORY PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${History_INCLUDE_DIRS}) - message(HAHA ${History_LIBRARIES}...${History_INCLUDE_DIRS}) endif() endif() @@ -293,8 +303,9 @@ check_target(ATLAS HAVE_LIBATLAS) # set(CMAKE_REQUIRED_INCLUDES "${FFTW_INCLUDE_DIR}") check_target(ICONV HAVE_ICONV_H) -check_target(BZIP2 HAVE_BZLIB_H) check_target(ZLIB HAVE_ZLIB_H) +check_target(BZIP2 HAVE_BZLIB_H) +check_target(ZSTD HAVE_ZSTD_H) check_target(LIBJPEG HAVE_JPEGLIB_H) check_target(LIBPNG HAVE_PNG_H) check_target(TIFF HAVE_TIFFIO_H) diff --git a/include/config.h.cmake.in b/include/config.h.cmake.in index 13706181336..77291a69e51 100644 --- a/include/config.h.cmake.in +++ b/include/config.h.cmake.in @@ -41,6 +41,9 @@ /* define if bzlib.h exists */ #cmakedefine HAVE_BZLIB_H ${HAVE_BZLIB_H} +/* define if zstd.h exists */ +#cmakedefine HAVE_ZSTD_H ${HAVE_ZSTD_H} + /* define if sys/ioctl.h exists */ #cmakedefine HAVE_SYS_IOCTL_H ${HAVE_SYS_IOCTL_H} diff --git a/lib/gis/CMakeLists.txt b/lib/gis/CMakeLists.txt index 9afd02602fa..5fb223352bf 100644 --- a/lib/gis/CMakeLists.txt +++ b/lib/gis/CMakeLists.txt @@ -162,6 +162,7 @@ build_module( OPTIONAL_DEPENDS PTHREAD BZIP2 + ZSTD ICONV POSTGRES DEFS From 5a9604f758905fa39bae49fb9a3c0801811a18a1 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 18:50:01 -0600 Subject: [PATCH 089/253] Support regex --- CMakeLists.txt | 1 + cmake/find_scripts/FindReadline.cmake | 4 ++-- cmake/find_scripts/Findregex.cmake | 17 +++++++++++++++++ cmake/modules/CheckDependentLibraries.cmake | 14 ++++++++++++++ lib/gis/CMakeLists.txt | 1 + 5 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 cmake/find_scripts/Findregex.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 46e2ce5f791..ffbd9d55862 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -81,6 +81,7 @@ option(WITH_POSTGRES "Build with Postgres support" OFF) option(WITH_MYSQL "Build with MySQL support" OFF) option(WITH_NLS "Build with NLS support" ${default_option_enabled}) option(WITH_READLINE "Build with Readline support" ON) +option(WITH_REGEX "Build with regex support" ON) option(WITH_BZLIB "Build with bzlib support" ON) option(WITH_ZSTD "Build with zstd support" ON) option(WITH_BLAS "Build with BLAS support" ON) diff --git a/cmake/find_scripts/FindReadline.cmake b/cmake/find_scripts/FindReadline.cmake index 6c2e3bc9eb0..14981ddf9c2 100644 --- a/cmake/find_scripts/FindReadline.cmake +++ b/cmake/find_scripts/FindReadline.cmake @@ -31,10 +31,10 @@ else() endif() endif() -if(Readline_INCLUDE_DIRS AND Readline_LIBRARIES) +if(Readline_FOUND) message(STATUS "Found Readline: ${Readline_LIBRARIES}") endif() -if(History_INCLUDE_DIRS AND History_LIBRARIES) +if(History_FOUND) message(STATUS "Found History: ${History_LIBRARIES}") endif() diff --git a/cmake/find_scripts/Findregex.cmake b/cmake/find_scripts/Findregex.cmake new file mode 100644 index 00000000000..50580bbb8ac --- /dev/null +++ b/cmake/find_scripts/Findregex.cmake @@ -0,0 +1,17 @@ +find_path(regex_ROOT_DIR NAMES include/regex.h) +find_path( + regex_INCLUDE_DIRS + NAMES regex.h + HINTS ${regex_ROOT_DIR}/include) +find_library( + regex_LIBRARIES + NAMES regex + HINTS ${regex_ROOT_DIR}/lib) +if(regex_INCLUDE_DIRS) + set(regex_FOUND TRUE) + if(regex_LIBRARIES) + message(STATUS "Found regex: ${regex_LIBRARIES}") + else() + message(STATUS "Found regex") + endif() +endif() diff --git a/cmake/modules/CheckDependentLibraries.cmake b/cmake/modules/CheckDependentLibraries.cmake index 1e95019646c..fe3ce677778 100644 --- a/cmake/modules/CheckDependentLibraries.cmake +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -265,6 +265,19 @@ if(WITH_READLINE) endif() endif() +if(WITH_REGEX) + find_package(regex REQUIRED) + if(regex_FOUND) + add_library(REGEX INTERFACE IMPORTED GLOBAL) + if(regex_LIBRARIES) + set_property(TARGET REGEX PROPERTY INTERFACE_LINK_LIBRARIES + ${regex_LIBRARIES}) + endif() # else in libc + set_property(TARGET REGEX PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${regex_INCLUDE_DIRS}) + endif() +endif() + set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads) if(Threads_FOUND) @@ -327,6 +340,7 @@ check_target(LAPACK HAVE_CLAPACK_H) check_target(FREETYPE HAVE_FT2BUILD_H) check_target(READLINE HAVE_READLINE_READLINE_H) check_target(HISTORY HAVE_READLINE_HISTORY_H) +check_target(REGEX HAVE_REGEX_H) check_target(ODBC HAVE_SQL_H) if(TARGET POSTGRES) diff --git a/lib/gis/CMakeLists.txt b/lib/gis/CMakeLists.txt index 5fb223352bf..fd3329a3939 100644 --- a/lib/gis/CMakeLists.txt +++ b/lib/gis/CMakeLists.txt @@ -164,6 +164,7 @@ build_module( BZIP2 ZSTD ICONV + REGEX POSTGRES DEFS "${grass_gis_DEFS}") From 98718a0c906f51e49385e54b85b784f32dd0c635 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 19:35:42 -0600 Subject: [PATCH 090/253] Support OpenMP --- CMakeLists.txt | 1 + cmake/modules/CheckDependentLibraries.cmake | 22 ++++--- cmake/modules/build_module.cmake | 2 + lib/CMakeLists.txt | 7 ++- lib/rst/CMakeLists.txt | 2 + raster/CMakeLists.txt | 67 +++++++++++++++++---- raster/r.sim/CMakeLists.txt | 6 ++ raster/r.univar/CMakeLists.txt | 8 ++- vector/CMakeLists.txt | 4 +- 9 files changed, 94 insertions(+), 25 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ffbd9d55862..e3677376071 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -88,6 +88,7 @@ option(WITH_BLAS "Build with BLAS support" ON) option(WITH_LAPACK "Build with LAPACK support" ON) option(WITH_LIBLAS "Build with libLAS support" OFF) option(WITH_OPENDWG "Build with OpenDWG support" OFF) +option(WITH_OPENMP "Build with OpenMP support" OFF) # XXX: Do we need this? Don't we always need Python? option(WITH_PYTHON "Build Python bindings" ON) diff --git a/cmake/modules/CheckDependentLibraries.cmake b/cmake/modules/CheckDependentLibraries.cmake index fe3ce677778..df1371e9dc3 100644 --- a/cmake/modules/CheckDependentLibraries.cmake +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -278,6 +278,17 @@ if(WITH_REGEX) endif() endif() +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() +endif() + set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads) if(Threads_FOUND) @@ -291,15 +302,8 @@ if(Threads_FOUND) endif() endif() -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() +if(WITH_OPENMP) + find_package(OpenMP REQUIRED) endif() find_package(Python3 REQUIRED) diff --git a/cmake/modules/build_module.cmake b/cmake/modules/build_module.cmake index 10a180e469f..570c46842c5 100644 --- a/cmake/modules/build_module.cmake +++ b/cmake/modules/build_module.cmake @@ -200,6 +200,8 @@ function(build_module) target_compile_definitions(${G_NAME} PRIVATE "${interface_def}") endif() target_link_libraries(${G_NAME} ${dep}) + else() + target_link_libraries(${G_NAME} OpenMP::OpenMP_C) endif() endforeach() diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 5e8dd6c9607..e9c78b4886a 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -58,7 +58,8 @@ build_library_in_subdir( OPTIONAL_DEPENDS FFTW LAPACK - BLAS) + BLAS + OPENMP) build_library_in_subdir(linkm) @@ -175,7 +176,9 @@ build_library_in_subdir( DEPENDS grass_gis grass_raster3d - grass_gmath) + grass_gmath + OPTIONAL_DEPENDS + OPENMP) build_library_in_subdir(dspf DEPENDS grass_gis) diff --git a/lib/rst/CMakeLists.txt b/lib/rst/CMakeLists.txt index 89b90562cf9..98e7c680d29 100644 --- a/lib/rst/CMakeLists.txt +++ b/lib/rst/CMakeLists.txt @@ -30,5 +30,7 @@ build_library_in_subdir( grass_vector grass_qtree grass_interpdata + OPTIONAL_DEPENDS + OPENMP HEADERS "interpf.h") diff --git a/raster/CMakeLists.txt b/raster/CMakeLists.txt index 5c583a6cafd..2aefbd012fa 100644 --- a/raster/CMakeLists.txt +++ b/raster/CMakeLists.txt @@ -109,11 +109,25 @@ 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.mfilter DEPENDS grass_gis grass_raster grass_rowio) +build_program_in_subdir( + r.mfilter + DEPENDS + grass_gis + grass_raster + grass_rowio + OPTIONAL_DEPENDS + OPENMP) build_program_in_subdir(r.mode DEPENDS grass_gis grass_raster) -build_program_in_subdir(r.neighbors DEPENDS grass_gis grass_raster grass_stats) +build_program_in_subdir( + r.neighbors + DEPENDS + grass_gis + grass_raster + grass_stats + OPTIONAL_DEPENDS + OPENMP) build_program_in_subdir(r.null DEPENDS grass_gis grass_raster) @@ -158,13 +172,21 @@ build_program_in_subdir( grass_interpdata grass_qtree) -build_program_in_subdir(r.patch DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.patch DEPENDS grass_gis grass_raster OPTIONAL_DEPENDS + OPENMP) build_program_in_subdir(r.path DEPENDS grass_gis grass_raster grass_vector) build_program_in_subdir(r.profile DEPENDS grass_gis grass_raster) -build_program_in_subdir(r.proj DEPENDS grass_gis grass_raster grass_gproj) +build_program_in_subdir( + r.proj + DEPENDS + grass_gis + grass_raster + grass_gproj + OPTIONAL_DEPENDS + OPENMP) build_program_in_subdir(r.quant DEPENDS grass_gis grass_raster) @@ -197,9 +219,11 @@ build_program_in_subdir( grass_segment grass_lidar) -build_program_in_subdir(r.resamp.filter DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.resamp.filter DEPENDS grass_gis grass_raster + OPTIONAL_DEPENDS OPENMP) -build_program_in_subdir(r.resamp.interp DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.resamp.interp DEPENDS grass_gis grass_raster + OPTIONAL_DEPENDS OPENMP) build_program_in_subdir( r.resamp.rst @@ -221,10 +245,23 @@ build_program_in_subdir(r.rescale.eq DEPENDS grass_gis grass_raster) build_program_in_subdir(r.ros DEPENDS grass_gis grass_raster) -build_program_in_subdir(r.series DEPENDS grass_gis grass_raster grass_stats) +build_program_in_subdir( + r.series + DEPENDS + grass_gis + grass_raster + grass_stats + OPTIONAL_DEPENDS + OPENMP) -build_program_in_subdir(r.series.accumulate DEPENDS grass_gis grass_raster - grass_stats) +build_program_in_subdir( + r.series.accumulate + DEPENDS + grass_gis + grass_raster + grass_stats + OPTIONAL_DEPENDS + OPENMP) build_program_in_subdir(r.series.interp DEPENDS grass_gis grass_raster grass_stats) @@ -233,7 +270,8 @@ build_program_in_subdir(r.relief DEPENDS grass_gis grass_raster) add_subdirectory(r.sim) -build_program_in_subdir(r.slope.aspect DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.slope.aspect DEPENDS grass_gis grass_raster + OPTIONAL_DEPENDS OPENMP) build_program_in_subdir(r.solute.transport DEPENDS grass_gis grass_raster grass_gmath grass_gpde) @@ -254,7 +292,14 @@ build_program_in_subdir(r.stats DEPENDS grass_gis grass_raster) build_program_in_subdir(r.stream.extract DEPENDS grass_gis grass_raster grass_segment grass_vector) -build_program_in_subdir(r.sun DEPENDS grass_gmath grass_raster grass_gproj) +build_program_in_subdir( + r.sun + DEPENDS + grass_gmath + grass_raster + grass_gproj + OPTIONAL_DEPENDS + OPENMP) build_program_in_subdir(r.sunhours DEPENDS grass_gis grass_raster grass_gproj) diff --git a/raster/r.sim/CMakeLists.txt b/raster/r.sim/CMakeLists.txt index 921d72f95c8..8e50cc05626 100644 --- a/raster/r.sim/CMakeLists.txt +++ b/raster/r.sim/CMakeLists.txt @@ -6,6 +6,8 @@ build_library_in_subdir( grass_datetime grass_raster grass_vector + OPTIONAL_DEPENDS + OPENMP HEADERS "waterglobs.h" "simlib.h") @@ -16,6 +18,8 @@ build_program_in_subdir( grass_gis grass_gmath grass_sim + OPTIONAL_DEPENDS + OPENMP INCLUDES "../simlib") @@ -25,5 +29,7 @@ build_program_in_subdir( grass_gis grass_gmath grass_sim + OPTIONAL_DEPENDS + OPENMP INCLUDES "../simlib") diff --git a/raster/r.univar/CMakeLists.txt b/raster/r.univar/CMakeLists.txt index aa5d13d6bb2..d6c4a30b165 100644 --- a/raster/r.univar/CMakeLists.txt +++ b/raster/r.univar/CMakeLists.txt @@ -8,7 +8,9 @@ build_program( "${r_univar_SRCS}" DEPENDS grass_gis - grass_raster) + grass_raster + OPTIONAL_DEPENDS + OPENMP) build_program( NAME @@ -17,4 +19,6 @@ build_program( "${r3_univar_SRCS}" DEPENDS grass_gis - grass_raster3d) + grass_raster3d + OPTIONAL_DEPENDS + OPENMP) diff --git a/vector/CMakeLists.txt b/vector/CMakeLists.txt index dc88f59cc3b..6128938a713 100644 --- a/vector/CMakeLists.txt +++ b/vector/CMakeLists.txt @@ -170,7 +170,9 @@ build_program_in_subdir( grass_vector grass_interpdata grass_interpfl - grass_qtree) + grass_qtree + OPTIONAL_DEPENDS + OPENMP) build_program_in_subdir(v.transform DEPENDS grass_gis grass_vector) From ba7440e5ed29e758383664a3a2294e9ee57ca56e Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 19:36:15 -0600 Subject: [PATCH 091/253] cmake-format --- cmake/modules/CheckDependentLibraries.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/modules/CheckDependentLibraries.cmake b/cmake/modules/CheckDependentLibraries.cmake index df1371e9dc3..1a088584d70 100644 --- a/cmake/modules/CheckDependentLibraries.cmake +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -303,7 +303,7 @@ if(Threads_FOUND) endif() if(WITH_OPENMP) - find_package(OpenMP REQUIRED) + find_package(OpenMP REQUIRED) endif() find_package(Python3 REQUIRED) From 15dd45ac29a3b8a442e1004fac26cc519e905c6d Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 19:40:20 -0600 Subject: [PATCH 092/253] Add -fopenmp only if OpenMP is requested and found --- cmake/modules/build_module.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/modules/build_module.cmake b/cmake/modules/build_module.cmake index 570c46842c5..34e2ca99179 100644 --- a/cmake/modules/build_module.cmake +++ b/cmake/modules/build_module.cmake @@ -200,7 +200,7 @@ function(build_module) target_compile_definitions(${G_NAME} PRIVATE "${interface_def}") endif() target_link_libraries(${G_NAME} ${dep}) - else() + elseif(OpenMP_C_FOUND) target_link_libraries(${G_NAME} OpenMP::OpenMP_C) endif() endforeach() From 05a907d6f7ab171386bbed80d1209996c1163e97 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 21:25:20 -0600 Subject: [PATCH 093/253] Reorder options by group; Clean up dependencies for libraries and modules --- CMakeLists.txt | 40 +- cmake/modules/CheckDependentLibraries.cmake | 394 +++++++++++--------- general/CMakeLists.txt | 7 +- include/config.h.cmake.in | 3 + lib/CMakeLists.txt | 22 +- lib/rst/CMakeLists.txt | 1 - lib/vector/CMakeLists.txt | 12 +- lib/vector/diglib/CMakeLists.txt | 2 - lib/vector/neta/CMakeLists.txt | 25 -- lib/vector/vedit/CMakeLists.txt | 16 - raster/CMakeLists.txt | 8 +- 11 files changed, 272 insertions(+), 258 deletions(-) delete mode 100644 lib/vector/neta/CMakeLists.txt delete mode 100644 lib/vector/vedit/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index e3677376071..aa94bef21f7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -73,28 +73,50 @@ else() set(find_library_suffix "") endif() -option(WITH_CAIRO "Build with cairo support ." ON) +# Graphics options option(WITH_X11 "Build with X11 support ." ${default_option_enabled}) option(WITH_OPENGL "Build with opengl support ." ON) +option(WITH_CAIRO "Build with cairo support ." ON) +option(WITH_LIBPNG "Build with libpng support ." OFF) + +# Data storage options option(WITH_SQLITE "Build with SQLite support" ON) option(WITH_POSTGRES "Build with Postgres support" OFF) option(WITH_MYSQL "Build with MySQL support" OFF) -option(WITH_NLS "Build with NLS support" ${default_option_enabled}) -option(WITH_READLINE "Build with Readline support" ON) -option(WITH_REGEX "Build with regex support" ON) -option(WITH_BZLIB "Build with bzlib support" ON) +if(WIN32) + option(WITH_ODBC "Build with ODBC support" OFF) +endif() option(WITH_ZSTD "Build with zstd support" ON) +option(WITH_BZLIB "Build with bzlib support" OFF) + +# Command-line/string-related options +option(WITH_REGEX "Build with regex support" ON) +option(WITH_READLINE "Build with Readline support" OFF) + +# Language options +option(WITH_FREETYPE "Build with FreeType support" ON) +option(WITH_NLS "Build with NLS support" ${default_option_enabled}) + +# Computing options +option(WITH_FFTW "Build with FFTW support" ON) option(WITH_BLAS "Build with BLAS support" ON) option(WITH_LAPACK "Build with LAPACK support" ON) +option(WITH_OPENMP "Build with OpenMP support" ON) + +# Data format options +option(WITH_TIFF "Build with LibTIFF support ." ON) +option(WITH_NETCDF "Build with NetCDF support" OFF) +option(WITH_GEOS "Build with GEOS support" OFF) +option(WITH_PDAL "Build with PDAL support" ON) option(WITH_LIBLAS "Build with libLAS support" OFF) option(WITH_OPENDWG "Build with OpenDWG support" OFF) -option(WITH_OPENMP "Build with OpenMP support" OFF) -# XXX: Do we need this? Don't we always need Python? -option(WITH_PYTHON "Build Python bindings" ON) +# Other options option(WITH_LARGEFILES "Build with large file support" ${default_option_enabled}) option(WITH_DOCS "Build documentation" ON) +option(WITH_GUI "Build GUI" ON) + if(APPLE) if(POLICY CMP0042) cmake_policy(SET CMP0042 NEW) @@ -249,7 +271,7 @@ add_custom_target( # message(FATAL_ERROR "modules_list=${modules_list}") -if(WITH_PYTHON) +if(WITH_GUI) add_subdirectory(gui) endif() diff --git a/cmake/modules/CheckDependentLibraries.cmake b/cmake/modules/CheckDependentLibraries.cmake index 1a088584d70..254b5b7b04a 100644 --- a/cmake/modules/CheckDependentLibraries.cmake +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -6,10 +6,19 @@ Detect GRASS dependencies and set variable HAVE_* #]=======================================================================] +# Required dependencies + find_package(FLEX REQUIRED) find_package(BISON REQUIRED) +if(UNIX) + find_library(M_LIBRARY m) + add_library(LIBM INTERFACE IMPORTED GLOBAL) + set_property(TARGET LIBM PROPERTY INTERFACE_LINK_LIBRARIES ${M_LIBRARY}) + mark_as_advanced(M_LIBRARY) +endif() + find_package(PROJ REQUIRED) if(PROJ_FOUND) add_library(PROJ INTERFACE IMPORTED GLOBAL) @@ -27,15 +36,6 @@ if(GDAL_FOUND) ${GDAL_INCLUDE_DIR}) endif() -find_package(PNG REQUIRED) -if(PNG_FOUND) - add_library(LIBPNG INTERFACE IMPORTED GLOBAL) - set_property(TARGET LIBPNG PROPERTY INTERFACE_LINK_LIBRARIES - ${PNG_LIBRARY${find_library_suffix}}) - set_property(TARGET LIBPNG PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${PNG_INCLUDE_DIR}) -endif() - find_package(ZLIB REQUIRED) if(ZLIB_FOUND) add_library(ZLIB INTERFACE IMPORTED GLOBAL) @@ -45,93 +45,7 @@ if(ZLIB_FOUND) ${ZLIB_INCLUDE_DIR}) endif() -if(WITH_BZLIB) - find_package(BZip2 REQUIRED) - if(BZIP2_FOUND) - add_library(BZIP2 INTERFACE IMPORTED GLOBAL) - set_property(TARGET BZIP2 PROPERTY INTERFACE_LINK_LIBRARIES - ${BZIP2_LIBRARY${find_library_suffix}}) - set_property(TARGET BZIP2 PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${BZIP2_INCLUDE_DIR}) - endif() -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() -endif() - -if(UNIX) - find_library(M_LIBRARY m) - add_library(LIBM INTERFACE IMPORTED GLOBAL) - set_property(TARGET LIBM PROPERTY INTERFACE_LINK_LIBRARIES ${M_LIBRARY}) - mark_as_advanced(M_LIBRARY) -endif() - -find_package(Freetype REQUIRED) -if(FREETYPE_FOUND) - add_library(FREETYPE INTERFACE IMPORTED GLOBAL) - set_property( - TARGET FREETYPE PROPERTY INTERFACE_LINK_LIBRARIES - ${FREETYPE_LIBRARY${find_library_suffix}}) - set_property(TARGET FREETYPE PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${FREETYPE_INCLUDE_DIRS}) -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() - -if(WITH_CAIRO) - find_package(Cairo REQUIRED) - if(CAIRO_FOUND) - add_library(CAIRO INTERFACE IMPORTED GLOBAL) - set_property(TARGET CAIRO PROPERTY INTERFACE_LINK_LIBRARIES - ${CAIRO_LIBRARIES}) - set_property(TARGET CAIRO PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${CAIRO_INCLUDE_DIRS}) - endif() -endif() - -if(WITH_X11) - find_package(X11 REQUIRED) - if(X11_FOUND) - add_library(X11 INTERFACE IMPORTED GLOBAL) - set_property(TARGET X11 PROPERTY INTERFACE_LINK_LIBRARIES ${X11_LIBRARIES}) - set_property(TARGET X11 PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${X11_INCLUDE_DIR}) - endif() -endif() - -if(WIN32) - find_package(ODBC QUIET) - if(ODBC_FOUND) - add_library(ODBC INTERFACE IMPORTED GLOBAL) - #[[ - set_property(TARGET ODBC PROPERTY INTERFACE_LINK_LIBRARIES ${ODBC_LIBRARIES}) - set_property(TARGET PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${ODBC_INCLUDE_DIRS}) - #]] - endif() -endif() - -find_package(TIFF REQUIRED) -if(TIFF_FOUND) - add_library(TIFF INTERFACE IMPORTED GLOBAL) - set_property(TARGET TIFF PROPERTY INTERFACE_LINK_LIBRARIES - ${TIFF_LIBRARY${find_library_suffix}}) - set_property(TARGET TIFF PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${TIFF_INCLUDE_DIR}) -endif() +# Optional dependencies find_package(Iconv QUIET) if(ICONV_FOUND) @@ -144,21 +58,28 @@ if(ICONV_FOUND) # include/config.cmake.in endif() -if(WITH_BLAS) - find_package(BLAS REQUIRED) - if(BLAS_FOUND) - add_library(BLAS INTERFACE IMPORTED GLOBAL) - set_property(TARGET BLAS PROPERTY INTERFACE_LINK_LIBRARIES - ${BLAS_LIBRARIES}) +set(THREADS_PREFER_PTHREAD_FLAG ON) +find_package(Threads) +if(Threads_FOUND) + add_library(PTHREAD INTERFACE IMPORTED GLOBAL) + if(THREADS_HAVE_PTHREAD_ARG) + set_property(TARGET PTHREAD PROPERTY INTERFACE_COMPILE_OPTIONS "-pthread") + endif() + if(CMAKE_THREAD_LIBS_INIT) + set_property(TARGET PTHREAD PROPERTY INTERFACE_LINK_LIBRARIES + "${CMAKE_THREAD_LIBS_INIT}") endif() endif() -if(WITH_LAPACK) - find_package(LAPACK REQUIRED) - if(LAPACK_FOUND) - add_library(LAPACK INTERFACE IMPORTED GLOBAL) - set_property(TARGET LAPACK PROPERTY INTERFACE_LINK_LIBRARIES - ${LAPACK_LIBRARIES}) +# Graphics options + +if(WITH_X11) + find_package(X11 REQUIRED) + if(X11_FOUND) + add_library(X11 INTERFACE IMPORTED GLOBAL) + set_property(TARGET X11 PROPERTY INTERFACE_LINK_LIBRARIES ${X11_LIBRARIES}) + set_property(TARGET X11 PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${X11_INCLUDE_DIR}) endif() endif() @@ -177,6 +98,30 @@ if(WITH_OPENGL) endif() endif() +if(WITH_CAIRO) + find_package(Cairo REQUIRED) + if(CAIRO_FOUND) + add_library(CAIRO INTERFACE IMPORTED GLOBAL) + set_property(TARGET CAIRO PROPERTY INTERFACE_LINK_LIBRARIES + ${CAIRO_LIBRARIES}) + set_property(TARGET CAIRO PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${CAIRO_INCLUDE_DIRS}) + endif() +endif() + +if(WITH_LIBPNG) + find_package(PNG REQUIRED) + if(PNG_FOUND) + add_library(LIBPNG INTERFACE IMPORTED GLOBAL) + set_property(TARGET LIBPNG PROPERTY INTERFACE_LINK_LIBRARIES + ${PNG_LIBRARY${find_library_suffix}}) + set_property(TARGET LIBPNG PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${PNG_INCLUDE_DIR}) + endif() +endif() + +# Data storage options + if(WITH_SQLITE) find_package(SQLite REQUIRED) if(SQLITE_FOUND) @@ -210,41 +155,62 @@ if(WITH_MYSQL) endif() endif() -find_package(PDAL QUIET) -if(PDAL_FOUND) - add_library(PDAL INTERFACE IMPORTED GLOBAL) - set_property(TARGET PDAL PROPERTY INTERFACE_LINK_LIBRARIES ${PDAL_LIBRARIES}) - set_property(TARGET PDAL PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${PDAL_INCLUDE_DIRS}) +if(WITH_ODBC AND WIN32) + find_package(ODBC QUIET) + if(ODBC_FOUND) + add_library(ODBC INTERFACE IMPORTED GLOBAL) + #[[ + set_property(TARGET ODBC PROPERTY INTERFACE_LINK_LIBRARIES ${ODBC_LIBRARIES}) + set_property(TARGET PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${ODBC_INCLUDE_DIRS}) + #]] + endif() 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}) +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() endif() -find_package(NetCDF QUIET) -if(NetCDF_FOUND) - add_library(NETCDF INTERFACE IMPORTED GLOBAL) - set_property(TARGET NETCDF PROPERTY INTERFACE_LINK_LIBRARIES - ${NetCDF_LIBRARY}) - set_property(TARGET NETCDF PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${NetCDF_INCLUDE_DIR}) +if(WITH_BZLIB) + find_package(BZip2 REQUIRED) + if(BZIP2_FOUND) + add_library(BZIP2 INTERFACE IMPORTED GLOBAL) + set_property(TARGET BZIP2 PROPERTY INTERFACE_LINK_LIBRARIES + ${BZIP2_LIBRARY${find_library_suffix}}) + set_property(TARGET BZIP2 PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${BZIP2_INCLUDE_DIR}) + endif() endif() -find_package(GEOS REQUIRED) -if(GEOS_FOUND) - add_library(GEOS INTERFACE IMPORTED GLOBAL) - set_property(TARGET GEOS PROPERTY INTERFACE_LINK_LIBRARIES - ${GEOS_C_LIBRARY${find_library_suffix}}) - set_property(TARGET GEOS PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${GEOS_INCLUDE_DIR}) +# Command-line/string-related options +if(WITH_REGEX) + find_package(regex REQUIRED) + if(regex_FOUND) + add_library(REGEX INTERFACE IMPORTED GLOBAL) + if(regex_LIBRARIES) + set_property(TARGET REGEX PROPERTY INTERFACE_LINK_LIBRARIES + ${regex_LIBRARIES}) + endif() # else in libc + set_property(TARGET REGEX PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${regex_INCLUDE_DIRS}) + endif() +endif() + +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() endif() if(WITH_READLINE) @@ -265,40 +231,46 @@ if(WITH_READLINE) endif() endif() -if(WITH_REGEX) - find_package(regex REQUIRED) - if(regex_FOUND) - add_library(REGEX INTERFACE IMPORTED GLOBAL) - if(regex_LIBRARIES) - set_property(TARGET REGEX PROPERTY INTERFACE_LINK_LIBRARIES - ${regex_LIBRARIES}) - endif() # else in libc - set_property(TARGET REGEX PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${regex_INCLUDE_DIRS}) +# Language options +if(WITH_FREETYPE) + find_package(Freetype REQUIRED) + if(FREETYPE_FOUND) + add_library(FREETYPE INTERFACE IMPORTED GLOBAL) + set_property( + TARGET FREETYPE PROPERTY INTERFACE_LINK_LIBRARIES + ${FREETYPE_LIBRARY${find_library_suffix}}) + set_property(TARGET FREETYPE PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${FREETYPE_INCLUDE_DIRS}) endif() endif() -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}) +# 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() endif() -set(THREADS_PREFER_PTHREAD_FLAG ON) -find_package(Threads) -if(Threads_FOUND) - add_library(PTHREAD INTERFACE IMPORTED GLOBAL) - if(THREADS_HAVE_PTHREAD_ARG) - set_property(TARGET PTHREAD PROPERTY INTERFACE_COMPILE_OPTIONS "-pthread") +if(WITH_BLAS) + find_package(BLAS REQUIRED) + if(BLAS_FOUND) + add_library(BLAS INTERFACE IMPORTED GLOBAL) + set_property(TARGET BLAS PROPERTY INTERFACE_LINK_LIBRARIES + ${BLAS_LIBRARIES}) endif() - if(CMAKE_THREAD_LIBS_INIT) - set_property(TARGET PTHREAD PROPERTY INTERFACE_LINK_LIBRARIES - "${CMAKE_THREAD_LIBS_INIT}") +endif() + +if(WITH_LAPACK) + find_package(LAPACK REQUIRED) + if(LAPACK_FOUND) + add_library(LAPACK INTERFACE IMPORTED GLOBAL) + set_property(TARGET LAPACK PROPERTY INTERFACE_LINK_LIBRARIES + ${LAPACK_LIBRARIES}) endif() endif() @@ -306,6 +278,62 @@ if(WITH_OPENMP) find_package(OpenMP REQUIRED) endif() +# Data format options +if(WITH_TIFF) + find_package(TIFF REQUIRED) + if(TIFF_FOUND) + add_library(TIFF INTERFACE IMPORTED GLOBAL) + set_property(TARGET TIFF PROPERTY INTERFACE_LINK_LIBRARIES + ${TIFF_LIBRARY${find_library_suffix}}) + set_property(TARGET TIFF PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${TIFF_INCLUDE_DIR}) + endif() +endif() + +if(WITH_NETCDF) + find_package(NetCDF REQUIRED) + if(NetCDF_FOUND) + add_library(NETCDF INTERFACE IMPORTED GLOBAL) + set_property(TARGET NETCDF PROPERTY INTERFACE_LINK_LIBRARIES + ${NetCDF_LIBRARY}) + set_property(TARGET NETCDF PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${NetCDF_INCLUDE_DIR}) + endif() +endif() + +if(WITH_GEOS) + find_package(GEOS REQUIRED) + if(GEOS_FOUND) + add_library(GEOS INTERFACE IMPORTED GLOBAL) + set_property(TARGET GEOS PROPERTY INTERFACE_LINK_LIBRARIES + ${GEOS_C_LIBRARY${find_library_suffix}}) + set_property(TARGET GEOS PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${GEOS_INCLUDE_DIR}) + endif() +endif() + +if(WITH_PDAL) + find_package(PDAL REQUIRED) + if(PDAL_FOUND) + add_library(PDAL INTERFACE IMPORTED GLOBAL) + set_property(TARGET PDAL PROPERTY INTERFACE_LINK_LIBRARIES + ${PDAL_LIBRARIES}) + set_property(TARGET PDAL PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${PDAL_INCLUDE_DIRS}) + endif() +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() +endif() + find_package(Python3 REQUIRED) if(Python3_FOUND) set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE}) @@ -315,37 +343,33 @@ if(Python3_FOUND) #]] endif() -# no target ATLAS in thirdpary/CMakeLists.txt -check_target(ATLAS HAVE_LIBATLAS) - -# set(CMAKE_REQUIRED_INCLUDES "${FFTW_INCLUDE_DIR}") -check_target(ICONV HAVE_ICONV_H) -check_target(ZLIB HAVE_ZLIB_H) -check_target(BZIP2 HAVE_BZLIB_H) -check_target(ZSTD HAVE_ZSTD_H) -check_target(LIBJPEG HAVE_JPEGLIB_H) -check_target(LIBPNG HAVE_PNG_H) -check_target(TIFF HAVE_TIFFIO_H) -check_target(GEOS HAVE_GEOS) +check_target(PROJ HAVE_PROJ_H) check_target(GDAL HAVE_GDAL) check_target(GDAL HAVE_OGR) +check_target(ZLIB HAVE_ZLIB_H) +check_target(ICONV HAVE_ICONV_H) +check_target(LIBPNG HAVE_PNG_H) +check_target(LIBJPEG HAVE_JPEGLIB_H) check_target(SQLITE HAVE_SQLITE) check_target(POSTGRES HAVE_POSTGRES) check_target(MYSQL HAVE_MYSQL_H) - -check_target(PROJ HAVE_PROJ_H) - +check_target(ODBC HAVE_SQL_H) +check_target(ZSTD HAVE_ZSTD_H) +check_target(BZIP2 HAVE_BZLIB_H) +check_target(REGEX HAVE_REGEX_H) +check_target(READLINE HAVE_READLINE_READLINE_H) +check_target(HISTORY HAVE_READLINE_HISTORY_H) +check_target(FREETYPE HAVE_FT2BUILD_H) +# set(CMAKE_REQUIRED_INCLUDES "${FFTW_INCLUDE_DIR}") no target ATLAS in +# thirdpary/CMakeLists.txt +check_target(ATLAS HAVE_LIBATLAS) check_target(BLAS HAVE_LIBBLAS) check_target(BLAS HAVE_CBLAS_H) - check_target(LAPACK HAVE_LIBLAPACK) check_target(LAPACK HAVE_CLAPACK_H) - -check_target(FREETYPE HAVE_FT2BUILD_H) -check_target(READLINE HAVE_READLINE_READLINE_H) -check_target(HISTORY HAVE_READLINE_HISTORY_H) -check_target(REGEX HAVE_REGEX_H) -check_target(ODBC HAVE_SQL_H) +check_target(TIFF HAVE_TIFFIO_H) +check_target(NETCDF HAVE_NETCDF) +check_target(GEOS HAVE_GEOS) if(TARGET POSTGRES) try_compile( diff --git a/general/CMakeLists.txt b/general/CMakeLists.txt index 9797e6d540b..60cc62f351c 100644 --- a/general/CMakeLists.txt +++ b/general/CMakeLists.txt @@ -11,7 +11,9 @@ build_program_in_subdir(g.message DEPENDS grass_gis) build_program_in_subdir(g.mkfontcap DEPENDS grass_gis FREETYPE) build_program_in_subdir(g.parser DEPENDS grass_gis FREETYPE) build_program_in_subdir(g.pnmcomp DEPENDS grass_gis) -build_program_in_subdir(g.ppmtopng DEPENDS grass_gis LIBPNG) +if(WITH_LIBPNG) + build_program_in_subdir(g.ppmtopng DEPENDS grass_gis LIBPNG) +endif() build_program_in_subdir(g.proj DEPENDS grass_gis grass_gproj GDAL) build_program_in_subdir( g.region @@ -30,9 +32,10 @@ build_program_in_subdir( DEPENDS grass_gis PROJ - GEOS GDAL SQLITE + OPTIONAL_DEPENDS + GEOS DEFS "-DGRASS_VERSION_NUMBER=\"${GRASS_VERSION_NUMBER}\"" "-DGRASS_VERSION_GIT=\"${GRASS_VERSION_GIT}\"" diff --git a/include/config.h.cmake.in b/include/config.h.cmake.in index 77291a69e51..cd2dcf6379d 100644 --- a/include/config.h.cmake.in +++ b/include/config.h.cmake.in @@ -158,6 +158,9 @@ /* define if tiffio.h exists */ #cmakedefine HAVE_TIFFIO_H ${HAVE_TIFFIO_H} +/* define if NetCDF exists */ +#cmakedefine HAVE_NETCDF ${HAVE_NETCDF} + /* define if png.h exists */ #cmakedefine HAVE_PNG_H ${HAVE_PNG_H} diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index e9c78b4886a..eb7043d6031 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -65,6 +65,9 @@ build_library_in_subdir(linkm) file(GLOB pngdriver_SRCS "./pngdriver/*.c") # list(APPEND pngdriver_SRCS "./driver/init.c") +if(NOT WITH_LIBPNG) + list(REMOVE_ITEM pngdriver_SRCS "./pngdriver/*_png.c") +endif() build_library_in_subdir( pngdriver SOURCES @@ -72,8 +75,9 @@ build_library_in_subdir( DEPENDS grass_driver grass_gis - LIBPNG - ZLIB) + ZLIB + OPTIONAL_DEPENDS + LIBPNG) # INCLUDES "./driver") file(GLOB psdriver_SRCS "./psdriver/*.c") @@ -135,7 +139,7 @@ add_subdirectory(fonts) add_subdirectory(vector) -build_library_in_subdir(imagery DEPENDS GDAL GEOS grass_vector) +build_library_in_subdir(imagery DEPENDS grass_vector) build_library_in_subdir(cluster DEPENDS grass_imagery) @@ -146,17 +150,7 @@ build_library_in_subdir(segment DEPENDS grass_gis) # addeed DEPENDS grass_gis add_subdirectory(rst) -build_library_in_subdir( - lidar - DEPENDS - GDAL - GEOS - grass_vector - grass_raster - grass_dbmibase - grass_segment - HEADERS - "lidar.h") +build_library_in_subdir(lidar DEPENDS grass_vector HEADERS "lidar.h") build_library_in_subdir(raster3d DEPENDS grass_raster) diff --git a/lib/rst/CMakeLists.txt b/lib/rst/CMakeLists.txt index 98e7c680d29..a1f093f2ded 100644 --- a/lib/rst/CMakeLists.txt +++ b/lib/rst/CMakeLists.txt @@ -23,7 +23,6 @@ build_library_in_subdir( NAME grass_interpfl DEPENDS - GEOS grass_gis grass_raster grass_bitmap diff --git a/lib/vector/CMakeLists.txt b/lib/vector/CMakeLists.txt index be283864fd9..4240de51851 100644 --- a/lib/vector/CMakeLists.txt +++ b/lib/vector/CMakeLists.txt @@ -29,6 +29,14 @@ if(TARGET LAPACK) target_link_libraries(grass_vector LAPACK) endif() -add_subdirectory(vedit) +build_library_in_subdir(vedit NAME grass_vedit DEPENDS grass_vector) -add_subdirectory(neta) +build_library_in_subdir( + neta + NAME + grass_neta + DEPENDS + grass_dbmiclient + grass_gis + grass_graph + grass_vector) diff --git a/lib/vector/diglib/CMakeLists.txt b/lib/vector/diglib/CMakeLists.txt index 68421116cef..85fb9d45a25 100644 --- a/lib/vector/diglib/CMakeLists.txt +++ b/lib/vector/diglib/CMakeLists.txt @@ -31,8 +31,6 @@ build_module( SOURCES ${dig2_SRCS} DEPENDS - GDAL - GEOS grass_gmath grass_gis grass_rtree) diff --git a/lib/vector/neta/CMakeLists.txt b/lib/vector/neta/CMakeLists.txt deleted file mode 100644 index fc8fb495b5b..00000000000 --- a/lib/vector/neta/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -# MODULE_TOPDIR = ../../.. - -# LIB = NETA - -# LIBES = $(VECTORLIB) $(DBMILIB) $(GISLIB) $(GRAPHLIB) DEPENDENCIES= -# $(VECTORDEP) $(DBMIDEP) $(GISDEP) EXTRA_INC = $(VECT_INC) EXTRA_CFLAGS = -# $(VECT_CFLAGS) - -# include $(MODULE_TOPDIR)/include/Make/Lib.make include -# $(MODULE_TOPDIR)/include/Make/Doxygen.make - -# default: lib - -# DOXNAME=neta - -build_module( - NAME - grass_neta - DEPENDS - GDAL - GEOS - grass_dbmiclient - grass_gis - grass_graph - grass_vector) diff --git a/lib/vector/vedit/CMakeLists.txt b/lib/vector/vedit/CMakeLists.txt deleted file mode 100644 index 936f64dbcd0..00000000000 --- a/lib/vector/vedit/CMakeLists.txt +++ /dev/null @@ -1,16 +0,0 @@ -# MODULE_TOPDIR = ../../.. - -# LIB = VEDIT - -# DEPENDENCIES = $(VECTORDEP) $(GISDEP) - -# EXTRA_INC = $(VECT_INC) EXTRA_CFLAGS = $(VECT_CFLAGS) - -# include $(MODULE_TOPDIR)/include/Make/Lib.make include -# $(MODULE_TOPDIR)/include/Make/Doxygen.make - -# default: lib - -# # doxygen DOXNAME=vedit - -build_module(NAME grass_vedit DEPENDS grass_vector GDAL GEOS) diff --git a/raster/CMakeLists.txt b/raster/CMakeLists.txt index 2aefbd012fa..dfc62b6609d 100644 --- a/raster/CMakeLists.txt +++ b/raster/CMakeLists.txt @@ -93,7 +93,9 @@ build_program_in_subdir( PRIMARY_DEPENDS PDAL) -build_program_in_subdir(r.in.png DEPENDS grass_gis grass_raster LIBPNG) +if(WITH_LIBPNG) + build_program_in_subdir(r.in.png DEPENDS grass_gis grass_raster LIBPNG) +endif() build_program_in_subdir(r.in.poly DEPENDS grass_gis grass_raster) @@ -151,7 +153,9 @@ 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 LIBPNG) +if(WITH_LIBPNG) + build_program_in_subdir(r.out.png DEPENDS grass_gis grass_raster LIBPNG) +endif() build_program_in_subdir(r.out.pov DEPENDS grass_gis grass_raster) From 99659d5f3dfe866c79880a455f9354651418eb52 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 21:46:10 -0600 Subject: [PATCH 094/253] Add missing dependencies to lidar --- lib/CMakeLists.txt | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index eb7043d6031..d624bf47bc4 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -150,7 +150,15 @@ build_library_in_subdir(segment DEPENDS grass_gis) # addeed DEPENDS grass_gis add_subdirectory(rst) -build_library_in_subdir(lidar DEPENDS grass_vector HEADERS "lidar.h") +build_library_in_subdir( + lidar + DEPENDS + grass_vector + grass_raster + grass_dbmibase + grass_segment + HEADERS + "lidar.h") build_library_in_subdir(raster3d DEPENDS grass_raster) From d7a2596314d4c88a44b086e89bc347866c7c2b24 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 21:47:40 -0600 Subject: [PATCH 095/253] Update lib/external/ccmath/ccmath.h Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- lib/external/ccmath/ccmath.h | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/external/ccmath/ccmath.h b/lib/external/ccmath/ccmath.h index 44fb1e5acb3..8b41c38af86 100644 --- a/lib/external/ccmath/ccmath.h +++ b/lib/external/ccmath/ccmath.h @@ -52,7 +52,6 @@ typedef struct gcomplex Cpx; /* Linear Algebra */ - /* Real Linear Systems */ From 4470c017a1f8c938e48512db784e6308fb72bfc3 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 21:47:52 -0600 Subject: [PATCH 096/253] Update lib/external/ccmath/ccmath.h Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- lib/external/ccmath/ccmath.h | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/external/ccmath/ccmath.h b/lib/external/ccmath/ccmath.h index 8b41c38af86..d977c3791da 100644 --- a/lib/external/ccmath/ccmath.h +++ b/lib/external/ccmath/ccmath.h @@ -54,7 +54,6 @@ typedef struct gcomplex Cpx; /* Real Linear Systems */ - int minv(double *a, int n); int psinv(double *v, int n); From e65d6163c8db9efc81c9650cb87649b5b32a06b1 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 21:49:29 -0600 Subject: [PATCH 097/253] Update lib/gis/user_config.c Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- lib/gis/user_config.c | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/gis/user_config.c b/lib/gis/user_config.c index 2f3ab77e6a5..4734dfa985e 100644 --- a/lib/gis/user_config.c +++ b/lib/gis/user_config.c @@ -319,6 +319,5 @@ char *G_rc_path(const char *element, const char *item) return path; } /* G_rc_path */ - /* vim: set softtabstop=4 shiftwidth=4 expandtab: */ #endif From 3d174f7926b56cff719398ccdbe0ee45f74d1089 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 21:51:00 -0600 Subject: [PATCH 098/253] Update raster/r.terraflow/filldepr.cpp Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- raster/r.terraflow/filldepr.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/raster/r.terraflow/filldepr.cpp b/raster/r.terraflow/filldepr.cpp index c64ae600c94..600cf9005b4 100644 --- a/raster/r.terraflow/filldepr.cpp +++ b/raster/r.terraflow/filldepr.cpp @@ -25,7 +25,7 @@ #ifdef _MSC_VER #pragma warning(default : 4716) #endif -#define FLOOD_DEBUG if(0) +#define FLOOD_DEBUG if (0) /************************************************************/ /* INPUT: stream containing the edgelist of watershed adjacency graph From 344267431eb7dc8aebee5a3dd3d31cfd1561ffde Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 21:51:23 -0600 Subject: [PATCH 099/253] Update raster/r.terraflow/main.cpp Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- raster/r.terraflow/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/raster/r.terraflow/main.cpp b/raster/r.terraflow/main.cpp index fa80134e6c6..4aa1475190d 100644 --- a/raster/r.terraflow/main.cpp +++ b/raster/r.terraflow/main.cpp @@ -298,7 +298,7 @@ void record_args(int argc, char **argv) } #ifdef _WIN32 - strcpy(buf, ctime(&t)); + strcpy(buf, ctime(&t)); #else ctime_r(&t, buf); buf[24] = '\0'; From c8b34703cafa0ad4b196ad2f6b6b8ea746ad16b0 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 21:59:33 -0600 Subject: [PATCH 100/253] Compile parson --- lib/CMakeLists.txt | 2 ++ lib/gis/CMakeLists.txt | 2 +- raster/CMakeLists.txt | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index d624bf47bc4..de02ce3d902 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -48,6 +48,8 @@ build_library_in_subdir(external/ccmath) build_library_in_subdir(external/shapelib NAME grass_shape HEADERS "shapefil.h") +build_library_in_subdir(external/parson NAME grass_parson HEADERS "parson.h") + build_library_in_subdir( gmath DEPENDS diff --git a/lib/gis/CMakeLists.txt b/lib/gis/CMakeLists.txt index fd3329a3939..315c5b8a79f 100644 --- a/lib/gis/CMakeLists.txt +++ b/lib/gis/CMakeLists.txt @@ -60,7 +60,7 @@ set(gislib_SRCS endian.c home.c make_loc.c - parser_rest.c + parser_rest_md.c rotate.c wind_in.c basename.c diff --git a/raster/CMakeLists.txt b/raster/CMakeLists.txt index dfc62b6609d..6b34b7b95da 100644 --- a/raster/CMakeLists.txt +++ b/raster/CMakeLists.txt @@ -65,7 +65,7 @@ build_program_in_subdir(r.gwflow DEPENDS grass_gis grass_raster grass_gpde) build_program_in_subdir(r.his DEPENDS grass_gis grass_raster grass_gproj) -build_program_in_subdir(r.horizon DEPENDS grass_gis grass_raster grass_gproj) +build_program_in_subdir(r.horizon DEPENDS grass_gis grass_raster grass_gproj grass_parson) build_program_in_subdir(r.in.ascii DEPENDS grass_gis grass_raster) From afd1421817fbed4884e619fdaa1d7f004bae19c8 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 22:02:35 -0600 Subject: [PATCH 101/253] Add parson dependency --- general/CMakeLists.txt | 2 +- raster/CMakeLists.txt | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/general/CMakeLists.txt b/general/CMakeLists.txt index 60cc62f351c..f2020606b49 100644 --- a/general/CMakeLists.txt +++ b/general/CMakeLists.txt @@ -6,7 +6,7 @@ build_program_in_subdir(g.findetc DEPENDS grass_gis) build_program_in_subdir(g.findfile DEPENDS grass_manage) build_program_in_subdir(g.gisenv DEPENDS grass_gis) build_program_in_subdir(g.mapset DEPENDS grass_gis) -build_program_in_subdir(g.mapsets DEPENDS grass_gis) +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 FREETYPE) build_program_in_subdir(g.parser DEPENDS grass_gis FREETYPE) diff --git a/raster/CMakeLists.txt b/raster/CMakeLists.txt index 6b34b7b95da..068818d49bd 100644 --- a/raster/CMakeLists.txt +++ b/raster/CMakeLists.txt @@ -65,7 +65,8 @@ build_program_in_subdir(r.gwflow DEPENDS grass_gis grass_raster grass_gpde) build_program_in_subdir(r.his DEPENDS grass_gis grass_raster grass_gproj) -build_program_in_subdir(r.horizon DEPENDS grass_gis grass_raster grass_gproj grass_parson) +build_program_in_subdir(r.horizon DEPENDS grass_gis grass_raster grass_gproj + grass_parson) build_program_in_subdir(r.in.ascii DEPENDS grass_gis grass_raster) @@ -366,7 +367,8 @@ build_program_in_subdir(r.walk DEPENDS grass_gis grass_raster grass_segment 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) +build_program_in_subdir(r.what DEPENDS grass_gis grass_raster grass_vector + grass_parson) build_program_in_subdir(r.what.color DEPENDS grass_gis grass_raster) From 39216fd94009ad950dc8f8051d6e06e35273697b Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 22:27:47 -0600 Subject: [PATCH 102/253] Remove duplicate regex check --- CMakeLists.txt | 3 +- cmake/find_scripts/Findregex.cmake | 17 --------- cmake/modules/CheckDependentLibraries.cmake | 38 +++++++-------------- 3 files changed, 13 insertions(+), 45 deletions(-) delete mode 100644 cmake/find_scripts/Findregex.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index aa94bef21f7..ca5a43ac196 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -89,8 +89,7 @@ endif() option(WITH_ZSTD "Build with zstd support" ON) option(WITH_BZLIB "Build with bzlib support" OFF) -# Command-line/string-related options -option(WITH_REGEX "Build with regex support" ON) +# Command-line options option(WITH_READLINE "Build with Readline support" OFF) # Language options diff --git a/cmake/find_scripts/Findregex.cmake b/cmake/find_scripts/Findregex.cmake deleted file mode 100644 index 50580bbb8ac..00000000000 --- a/cmake/find_scripts/Findregex.cmake +++ /dev/null @@ -1,17 +0,0 @@ -find_path(regex_ROOT_DIR NAMES include/regex.h) -find_path( - regex_INCLUDE_DIRS - NAMES regex.h - HINTS ${regex_ROOT_DIR}/include) -find_library( - regex_LIBRARIES - NAMES regex - HINTS ${regex_ROOT_DIR}/lib) -if(regex_INCLUDE_DIRS) - set(regex_FOUND TRUE) - if(regex_LIBRARIES) - message(STATUS "Found regex: ${regex_LIBRARIES}") - else() - message(STATUS "Found regex") - endif() -endif() diff --git a/cmake/modules/CheckDependentLibraries.cmake b/cmake/modules/CheckDependentLibraries.cmake index 254b5b7b04a..9d234af783b 100644 --- a/cmake/modules/CheckDependentLibraries.cmake +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -47,6 +47,17 @@ endif() # 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() +endif() + find_package(Iconv QUIET) if(ICONV_FOUND) add_library(ICONV INTERFACE IMPORTED GLOBAL) @@ -188,31 +199,7 @@ if(WITH_BZLIB) endif() endif() -# Command-line/string-related options -if(WITH_REGEX) - find_package(regex REQUIRED) - if(regex_FOUND) - add_library(REGEX INTERFACE IMPORTED GLOBAL) - if(regex_LIBRARIES) - set_property(TARGET REGEX PROPERTY INTERFACE_LINK_LIBRARIES - ${regex_LIBRARIES}) - endif() # else in libc - set_property(TARGET REGEX PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${regex_INCLUDE_DIRS}) - endif() -endif() - -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() -endif() - +# Command-line options if(WITH_READLINE) find_package(Readline REQUIRED) if(Readline_FOUND) @@ -356,7 +343,6 @@ check_target(MYSQL HAVE_MYSQL_H) check_target(ODBC HAVE_SQL_H) check_target(ZSTD HAVE_ZSTD_H) check_target(BZIP2 HAVE_BZLIB_H) -check_target(REGEX HAVE_REGEX_H) check_target(READLINE HAVE_READLINE_READLINE_H) check_target(HISTORY HAVE_READLINE_HISTORY_H) check_target(FREETYPE HAVE_FT2BUILD_H) From e63162c73ae44d3ade7b392aa8ce61643327f0c2 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 22:38:28 -0600 Subject: [PATCH 103/253] Add GUI history --- gui/wxpython/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/gui/wxpython/CMakeLists.txt b/gui/wxpython/CMakeLists.txt index 74230b83e98..6d10450b2c9 100644 --- a/gui/wxpython/CMakeLists.txt +++ b/gui/wxpython/CMakeLists.txt @@ -4,6 +4,7 @@ set(WXPYTHON_DIR ${GISBASE}/gui/wxpython) set(gui_lib_DIRS core gui_core + history icons iscatt lmgr From 3d90f198f72316aae48b18a3949bc7ddcf1dddce Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sun, 21 Apr 2024 00:06:20 -0600 Subject: [PATCH 104/253] Copy install to GISBASE; Fix ctypesgen --- include/CMakeLists.txt | 12 ++++++------ python/libgrass_interface_generator/CMakeLists.txt | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt index e8a19e562e5..4734dd5bdc1 100644 --- a/include/CMakeLists.txt +++ b/include/CMakeLists.txt @@ -5,7 +5,7 @@ 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 ${CMAKE_BINARY_DIR}/include/${dsth_DIR}) + set(output_dir ${GISBASE}/include/${dsth_DIR}) add_custom_command( OUTPUT ${output_dir}/${srch_NAME} COMMAND ${CMAKE_COMMAND} -E make_directory ${output_dir} @@ -24,19 +24,19 @@ message(STATUS "Creating ${CMAKE_CURRENT_BINARY_DIR}/grass/config.h") configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/grass/config.h") -file(WRITE ${CMAKE_BINARY_DIR}/include/grass/copying.h "") +file(WRITE ${GISBASE}/include/grass/copying.h "") file(STRINGS ${CMAKE_SOURCE_DIR}/COPYING copying_lines) foreach(copying_line ${copying_lines}) - file(APPEND ${CMAKE_BINARY_DIR}/include/grass/copying.h + file(APPEND ${GISBASE}/include/grass/copying.h "\"${copying_line} \\n\"\n") endforeach() -file(WRITE ${CMAKE_BINARY_DIR}/include/grass/citing.h "") +file(WRITE ${GISBASE}/include/grass/citing.h "") file(STRINGS ${CMAKE_SOURCE_DIR}/CITING citing_lines) foreach(citing_line ${citing_lines}) - file(APPEND ${CMAKE_BINARY_DIR}/include/grass/citing.h + file(APPEND ${GISBASE}/include/grass/citing.h "\"${citing_line}\\n\"\n") endforeach() # TODO file(READ ${CMAKE_SOURCE_DIR}/config.status config_status_header) -file(WRITE ${CMAKE_BINARY_DIR}/include/grass/confparms.h "\"/* */\\n\"") +file(WRITE ${GISBASE}/include/grass/confparms.h "\"/* */\\n\"") diff --git a/python/libgrass_interface_generator/CMakeLists.txt b/python/libgrass_interface_generator/CMakeLists.txt index 3f93ef6af82..0f3719e25f7 100644 --- a/python/libgrass_interface_generator/CMakeLists.txt +++ b/python/libgrass_interface_generator/CMakeLists.txt @@ -84,8 +84,8 @@ foreach(module ${MODULES}) DEPENDS ${${module}_LIBS} COMMAND ${CMAKE_COMMAND} -DCTYPESGEN_PY=${CMAKE_CURRENT_SOURCE_DIR}/run.py - -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE} -DCOMPILER=${CMAKE_C_COMPILER} - -DBIN_DIR=${GISBASE} -DHDRS=${${module}_HDRS} -DLIBS=${${module}_LIBS} + -DPython_EXECUTABLE=${Python_EXECUTABLE} -DCOMPILER=${CMAKE_C_COMPILER} + -DBIN_DIR=${GISBASE} "-DHDRS=${${module}_HDRS}" "-DLIBS=${${module}_LIBS}" -DOUT_FILE=${output_file} -DGRASS_VERSION_NUMBER=${GRASS_VERSION_NUMBER} -P ${CMAKE_SOURCE_DIR}/cmake/ctypesgen.cmake COMMENT "Generating ${output_file}" From 14ac43633f8b417bd67caa7be611707037c3d649 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sun, 21 Apr 2024 00:26:10 -0600 Subject: [PATCH 105/253] Copy include to GISBASE --- CMakeLists.txt | 4 ++-- cmake/modules/build_module.cmake | 11 ++++------- include/CMakeLists.txt | 13 +++++-------- lib/CMakeLists.txt | 4 ++-- lib/vector/dglib/CMakeLists.txt | 2 +- 5 files changed, 14 insertions(+), 20 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ca5a43ac196..723736ebbf5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -220,8 +220,8 @@ set(NO_HTML_DESCR_TARGETS "g.parser;ximgview;test.raster3d.lib") # include(Configure) add_subdirectory(include) -include_directories("${CMAKE_BINARY_DIR}/include") -include_directories(${CMAKE_BINARY_DIR}/include/grass) +include_directories("${GISBASE}/include") +include_directories("${GISBASE}/include/grass") if(MSVC) include_directories("${CMAKE_SOURCE_DIR}/msvc") endif() diff --git a/cmake/modules/build_module.cmake b/cmake/modules/build_module.cmake index 34e2ca99179..ac644f7719d 100644 --- a/cmake/modules/build_module.cmake +++ b/cmake/modules/build_module.cmake @@ -42,8 +42,7 @@ function(build_module) foreach(G_HEADER ${G_HEADERS}) if(EXISTS "${G_SRC_DIR}/${G_HEADER}") - file(COPY ${G_SRC_DIR}/${G_HEADER} - DESTINATION "${CMAKE_BINARY_DIR}/include/grass") + file(COPY ${G_SRC_DIR}/${G_HEADER} DESTINATION "${GISBASE}/include/grass") else() file( GLOB header_list_from_glob @@ -52,11 +51,10 @@ function(build_module) if(NOT header_list_from_glob) message( FATAL_ERROR - "MUST copy '${G_SRC_DIR}/${G_HEADER}' to ${CMAKE_BINARY_DIR}/include/grass" - ) + "MUST copy '${G_SRC_DIR}/${G_HEADER}' to ${GISBASE}/include/grass") endif() foreach(header_I ${header_list_from_glob}) - file(COPY ${header_I} DESTINATION "${CMAKE_BINARY_DIR}/include/grass") + file(COPY ${header_I} DESTINATION "${GISBASE}/include/grass") endforeach() endif() endforeach() @@ -126,8 +124,7 @@ function(build_module) PROPERTIES FOLDER lib VERSION ${GRASS_VERSION_NUMBER} SOVERSION ${GRASS_VERSION_MAJOR}) - set(export_file_name - "${CMAKE_BINARY_DIR}/include/export/${G_NAME}_export.h") + set(export_file_name "${GISBASE}/include/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}) diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt index 4734dd5bdc1..e17cdf9ae5f 100644 --- a/include/CMakeLists.txt +++ b/include/CMakeLists.txt @@ -1,4 +1,3 @@ - file(GLOB_RECURSE SRCHS "*.h") set(include_depends) foreach(srch ${SRCHS}) @@ -17,25 +16,23 @@ endforeach() add_custom_target(copy_header DEPENDS ${include_depends} LIB_PYTHON) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/grass/version.h.in - "${CMAKE_CURRENT_BINARY_DIR}/grass/version.h") + "${GISBASE}/include/grass/version.h") -message(STATUS "Creating ${CMAKE_CURRENT_BINARY_DIR}/grass/config.h") +message(STATUS "Creating ${GISBASE}/include/grass/config.h") configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake.in - "${CMAKE_CURRENT_BINARY_DIR}/grass/config.h") + "${GISBASE}/include/grass/config.h") file(WRITE ${GISBASE}/include/grass/copying.h "") file(STRINGS ${CMAKE_SOURCE_DIR}/COPYING copying_lines) foreach(copying_line ${copying_lines}) - file(APPEND ${GISBASE}/include/grass/copying.h - "\"${copying_line} \\n\"\n") + file(APPEND ${GISBASE}/include/grass/copying.h "\"${copying_line} \\n\"\n") endforeach() file(WRITE ${GISBASE}/include/grass/citing.h "") file(STRINGS ${CMAKE_SOURCE_DIR}/CITING citing_lines) foreach(citing_line ${citing_lines}) - file(APPEND ${GISBASE}/include/grass/citing.h - "\"${citing_line}\\n\"\n") + file(APPEND ${GISBASE}/include/grass/citing.h "\"${citing_line}\\n\"\n") endforeach() # TODO file(READ ${CMAKE_SOURCE_DIR}/config.status config_status_header) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index de02ce3d902..b1d4f94e7b4 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -42,8 +42,8 @@ if(CMAKE_SYSTEM_NAME MATCHES "Linux") target_link_libraries(grass_raster ${DL_LIBRARY}) endif() -configure_file(external/ccmath/ccmath.h - ${CMAKE_BINARY_DIR}/include/grass/ccmath_grass.h COPYONLY) +configure_file(external/ccmath/ccmath.h ${GISBASE}/include/grass/ccmath_grass.h + COPYONLY) build_library_in_subdir(external/ccmath) build_library_in_subdir(external/shapelib NAME grass_shape HEADERS "shapefil.h") diff --git a/lib/vector/dglib/CMakeLists.txt b/lib/vector/dglib/CMakeLists.txt index b342cc4a95b..43fa06cbadb 100644 --- a/lib/vector/dglib/CMakeLists.txt +++ b/lib/vector/dglib/CMakeLists.txt @@ -30,7 +30,7 @@ set(DGL_headers graph_v1.h graph_v2.h) foreach(DGL_header ${DGL_headers}) - file(COPY ${DGL_header} DESTINATION ${CMAKE_BINARY_DIR}/include/grass/dgl) + file(COPY ${DGL_header} DESTINATION ${GISBASE}/include/grass/dgl) endforeach() set(graphlib_SRCS From 7d1db0833f970e9b597983169acf2099dc076075 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sun, 21 Apr 2024 01:19:40 -0600 Subject: [PATCH 106/253] Copy render_cmd.py to GISBASE/etc/d.mon --- display/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/display/CMakeLists.txt b/display/CMakeLists.txt index a98aac2e189..13d2fbd83cb 100644 --- a/display/CMakeLists.txt +++ b/display/CMakeLists.txt @@ -6,6 +6,7 @@ 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 etc) 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) From f0717a695ac21926373d87e93587d65d22e6862c Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sun, 21 Apr 2024 02:46:55 -0600 Subject: [PATCH 107/253] Extend copy_python_files_in_subdir to copy on build event --- .../modules/copy_python_files_in_subdir.cmake | 36 ++++++++++++++----- display/CMakeLists.txt | 2 +- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/cmake/modules/copy_python_files_in_subdir.cmake b/cmake/modules/copy_python_files_in_subdir.cmake index 1f31dd5b04d..29073d43da4 100644 --- a/cmake/modules/copy_python_files_in_subdir.cmake +++ b/cmake/modules/copy_python_files_in_subdir.cmake @@ -9,13 +9,33 @@ COPYRIGHT: (C) 2020 by the GRASS Development Team #]] function(copy_python_files_in_subdir dir_name dst_prefix) + cmake_parse_arguments(G "PRE_BUILD;PRE_LINK;POST_BUILD" "TARGET" "" ${ARGN}) + file(GLOB PY_FILES "${CMAKE_CURRENT_SOURCE_DIR}/${dir_name}/*.py") - string(REPLACE "/" "_" targ_name ${dir_name}) - add_custom_target( - python_${targ_name} - COMMAND ${CMAKE_COMMAND} -E make_directory - ${GISBASE}/${dst_prefix}/${dir_name}/ - COMMAND ${CMAKE_COMMAND} -E copy ${PY_FILES} - ${GISBASE}/${dst_prefix}/${dir_name}/) - set_target_properties(python_${targ_name} PROPERTIES FOLDER lib/python) + + 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 + ${GISBASE}/${dst_prefix}/${dir_name}/ + COMMAND ${CMAKE_COMMAND} -E copy ${PY_FILES} + ${GISBASE}/${dst_prefix}/${dir_name}/) + else() + string(REPLACE "/" "_" targ_name ${dir_name}) + add_custom_target( + python_${targ_name} + COMMAND ${CMAKE_COMMAND} -E make_directory + ${GISBASE}/${dst_prefix}/${dir_name}/ + COMMAND ${CMAKE_COMMAND} -E copy ${PY_FILES} + ${GISBASE}/${dst_prefix}/${dir_name}/) + set_target_properties(python_${targ_name} PROPERTIES FOLDER lib/python) + endif() endfunction() diff --git a/display/CMakeLists.txt b/display/CMakeLists.txt index 13d2fbd83cb..d52f2754961 100644 --- a/display/CMakeLists.txt +++ b/display/CMakeLists.txt @@ -6,7 +6,7 @@ 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 etc) + copy_python_files_in_subdir(d.mon etc 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) From e71e80811ab151870e4839060a3448b0b0376b1b Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sun, 21 Apr 2024 03:11:11 -0600 Subject: [PATCH 108/253] Copy lib/symbol/symbol to GISBASE/etc/symbol --- lib/CMakeLists.txt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index b1d4f94e7b4..d079bb92078 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -186,7 +186,12 @@ build_library_in_subdir( build_library_in_subdir(dspf DEPENDS grass_gis) -build_library_in_subdir(symbol NAME grass_sym DEPENDS grass_raster) +build_library_in_subdir(symbol NAME grass_sym) +add_custom_command( + TARGET grass_sym + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_directory + ${CMAKE_CURRENT_SOURCE_DIR}/symbol/symbol ${GISBASE}/etc/symbol) add_subdirectory(init) From be0ec4bb96ae6a35e2333864c1472cee410c5cfd Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sun, 21 Apr 2024 03:37:06 -0600 Subject: [PATCH 109/253] Copy symbol images to GISBASE/gui/images/symbols --- gui/images/CMakeLists.txt | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/gui/images/CMakeLists.txt b/gui/images/CMakeLists.txt index 06401023d0e..09f6dec0c83 100644 --- a/gui/images/CMakeLists.txt +++ b/gui/images/CMakeLists.txt @@ -11,18 +11,9 @@ endforeach() add_custom_target( gui_images - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/symbols/basic/ - ${GISBASE}/gui/images/symbols/ - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/symbols/demo/ - ${GISBASE}/gui/images/symbols/ - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/symbols/extra/ - ${GISBASE}/gui/images/symbols/ - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/symbols/geology/ - ${GISBASE}/gui/images/symbols/ - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/symbols/legend/ - ${GISBASE}/gui/images/symbols/ - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/symbols/n_arrows/ - ${GISBASE}/gui/images/symbols/ + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/symbols + ${GISBASE}/gui/images/symbols + COMMAND ${CMAKE_COMMAND} -E rm ${GISBASE}/gui/images/symbols/README DEPENDS gui_icons ${output_images}) install(FILES ${GUI_IMAGES} DESTINATION gui/images/) From 038e75df7fd7fe36358097121b1d45bee25684d6 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 07:18:20 -0600 Subject: [PATCH 110/253] Copy fonts and create fontcap --- general/CMakeLists.txt | 1 + lib/fonts/CMakeLists.txt | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/general/CMakeLists.txt b/general/CMakeLists.txt index f2020606b49..43513620766 100644 --- a/general/CMakeLists.txt +++ b/general/CMakeLists.txt @@ -9,6 +9,7 @@ build_program_in_subdir(g.mapset DEPENDS grass_gis) 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 FREETYPE) +add_dependencies(g.mkfontcap fonts) build_program_in_subdir(g.parser DEPENDS grass_gis FREETYPE) build_program_in_subdir(g.pnmcomp DEPENDS grass_gis) if(WITH_LIBPNG) diff --git a/lib/fonts/CMakeLists.txt b/lib/fonts/CMakeLists.txt index 464090415c4..8033c0ae768 100644 --- a/lib/fonts/CMakeLists.txt +++ b/lib/fonts/CMakeLists.txt @@ -1 +1,6 @@ -# TODO +add_custom_target( + fonts + COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/fonts + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/fonts/[a-z]*.[a-z]* ${GISBASE}/fonts + COMMAND ${grass_env_command} ${GISBASE}/bin/g.mkfontcap) From f13852699daebc6d12fb854992bf68cbdd35e781 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 07:23:10 -0600 Subject: [PATCH 111/253] Resolve a dependency loop --- general/CMakeLists.txt | 4 ++++ lib/fonts/CMakeLists.txt | 3 +-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/general/CMakeLists.txt b/general/CMakeLists.txt index 43513620766..1747e435bd6 100644 --- a/general/CMakeLists.txt +++ b/general/CMakeLists.txt @@ -10,6 +10,10 @@ 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 FREETYPE) add_dependencies(g.mkfontcap fonts) +add_custom_command( + TARGET g.mkfontcap + POST_BUILD + COMMAND ${grass_env_command} ${GISBASE}/bin/g.mkfontcap) build_program_in_subdir(g.parser DEPENDS grass_gis FREETYPE) build_program_in_subdir(g.pnmcomp DEPENDS grass_gis) if(WITH_LIBPNG) diff --git a/lib/fonts/CMakeLists.txt b/lib/fonts/CMakeLists.txt index 8033c0ae768..27a0ae8a7eb 100644 --- a/lib/fonts/CMakeLists.txt +++ b/lib/fonts/CMakeLists.txt @@ -2,5 +2,4 @@ add_custom_target( fonts COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/fonts COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/fonts/[a-z]*.[a-z]* ${GISBASE}/fonts - COMMAND ${grass_env_command} ${GISBASE}/bin/g.mkfontcap) + ${CMAKE_CURRENT_SOURCE_DIR}/fonts/[a-z]*.[a-z]* ${GISBASE}/fonts) From b87c014765c1b8b5db79769bfb4cd87a83f0b807 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 08:02:23 -0600 Subject: [PATCH 112/253] Update .github/workflows/cmake.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Edouard Choinière <27212526+echoix@users.noreply.github.com> --- .github/workflows/cmake.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 6b1c528ff50..d7057394236 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -80,7 +80,6 @@ jobs: working-directory: ${{ github.workspace }} - name: Configure run: | - mkdir build cmake ${CMAKE_OPTIONS} -S $GITHUB_WORKSPACE -B $GITHUB_WORKSPACE/build - name: Build run: | From 91b4830a49df19f976de1ac1b15157985175a03e Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 08:04:57 -0600 Subject: [PATCH 113/253] Update .github/workflows/cmake.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Edouard Choinière <27212526+echoix@users.noreply.github.com> --- .github/workflows/cmake.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index d7057394236..e9357e207f7 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -32,7 +32,7 @@ jobs: cache-name: cmake-ubuntu-20.04 steps: - name: Checkout GRASS - uses: actions/checkout@v3 + uses: actions/checkout@v4.1.1 - name: Setup cache uses: actions/cache@v3 id: cache From 8259dca61d27efef8e9a623581cafcc0d03fbeeb Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 08:05:46 -0600 Subject: [PATCH 114/253] Update .github/workflows/cmake.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Edouard Choinière <27212526+echoix@users.noreply.github.com> --- .github/workflows/cmake.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index e9357e207f7..adda83b22f3 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -34,7 +34,7 @@ jobs: - name: Checkout GRASS uses: actions/checkout@v4.1.1 - name: Setup cache - uses: actions/cache@v3 + uses: actions/cache@v4.0.2 id: cache with: path: ${{ github.workspace }}/.ccache From a8747d80d2f61fd049405a43e3409c8a223fd9cc Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 08:07:39 -0600 Subject: [PATCH 115/253] Update .github/workflows/cmake.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Edouard Choinière <27212526+echoix@users.noreply.github.com> --- .github/workflows/cmake.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index adda83b22f3..2b9a0309c8a 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -38,10 +38,10 @@ jobs: id: cache with: path: ${{ github.workspace }}/.ccache - key: ${{ runner.os }}-${{ env.cache-name }}-${{ github.base_ref }}${{ github.ref_name }}-${{ github.run_id }} + key: ${{ env.cache-name }}-${{ runner.os }}-${{ github.base_ref }}${{ github.ref_name }}-${{ github.run_id }} restore-keys: | - ${{ runner.os }}-${{ env.cache-name }}-${{ github.base_ref }} - ${{ runner.os }}-${{ env.cache-name }} + ${{ env.cache-name }}-${{ runner.os }}-${{ github.base_ref }} + ${{ env.cache-name }}-${{ runner.os }} - name: Install CMake 3.11.4 run: | cd ${GITHUB_WORKSPACE} From 59699b423b5899e418bb9f22e685d11e8b1f6090 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 08:07:49 -0600 Subject: [PATCH 116/253] Update .github/workflows/cmake.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Edouard Choinière <27212526+echoix@users.noreply.github.com> --- .github/workflows/cmake.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 2b9a0309c8a..ed6cc4eb5cb 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -70,7 +70,6 @@ jobs: subversion libzstd-dev checkinstall \ libglu1-mesa-dev libxmu-dev \ ghostscript wget -y make ccache g++ - sudo apt-get update -y - name: Configure ccache run: | echo CCACHE_BASEDIR=$PWD >> ${GITHUB_ENV} From 8a2b92fd9ad8de53e7e649d0db402b343ef85ff7 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 08:08:24 -0600 Subject: [PATCH 117/253] Update .github/workflows/cmake.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Edouard Choinière <27212526+echoix@users.noreply.github.com> --- .github/workflows/cmake.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index ed6cc4eb5cb..9976a52faea 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -25,7 +25,7 @@ permissions: jobs: - build-linux-ubuntu-20.04: + build-cmake: runs-on: ubuntu-20.04 env: CMAKE_OPTIONS: -DPython_LOOKUP_VERSION=3.8 -DUSE_CCACHE=ON From 982194d705ec30cfa4fbac238a0ca215488f9bf4 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 08:09:33 -0600 Subject: [PATCH 118/253] Update .github/workflows/cmake.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Edouard Choinière <27212526+echoix@users.noreply.github.com> --- .github/workflows/cmake.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 9976a52faea..1752253e862 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -1,7 +1,7 @@ # inspired by "build GDAL library and to run test with CMake" # from https://github.com/OSGeo/gdal/blob/master/.github/workflows/cmake_builds.yml -name: Build and test with CMake +name: CMake on: push: From 7397ab536226ed12688b81e1258576de093e1c3b Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 08:48:51 -0600 Subject: [PATCH 119/253] Add postgres versions 14-16 --- cmake/find_scripts/FindPostgreSQL.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/find_scripts/FindPostgreSQL.cmake b/cmake/find_scripts/FindPostgreSQL.cmake index e5c6ce0a088..b2260d7b853 100644 --- a/cmake/find_scripts/FindPostgreSQL.cmake +++ b/cmake/find_scripts/FindPostgreSQL.cmake @@ -102,7 +102,7 @@ set(PostgreSQL_ROOT_DIR_MESSAGE "Set the PostgreSQL_ROOT system variable to wher set(PostgreSQL_KNOWN_VERSIONS ${PostgreSQL_ADDITIONAL_VERSIONS} - "13" "12" "11" "10" "9.6" "9.5" "9.4" "9.3" "9.2" "9.1" "9.0" "8.4" "8.3" "8.2" "8.1" "8.0") + "16" "15" "14" "13" "12" "11" "10" "9.6" "9.5" "9.4" "9.3" "9.2" "9.1" "9.0" "8.4" "8.3" "8.2" "8.1" "8.0") # Define additional search paths for root directories. set( PostgreSQL_ROOT_DIRECTORIES From 8580f1180756933702b07f314f49df2e20d05e86 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 08:49:13 -0600 Subject: [PATCH 120/253] Add Findzstd.cmake --- cmake/find_scripts/Findzstd.cmake | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 cmake/find_scripts/Findzstd.cmake diff --git a/cmake/find_scripts/Findzstd.cmake b/cmake/find_scripts/Findzstd.cmake new file mode 100644 index 00000000000..2b2d4428a66 --- /dev/null +++ b/cmake/find_scripts/Findzstd.cmake @@ -0,0 +1,22 @@ +find_package(PkgConfig) +if(PKG_CONFIG_FOUND) + 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() +endif() + +if(zstd_FOUND) + message(STATUS "Found zstd: ${zstd_LIBRARIES}") +endif() From 76b99abef4fd08eafebcfa69b5d5c844add3103a Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 08:55:49 -0600 Subject: [PATCH 121/253] Add grass_gis dependency to symbol (G_malloc) --- lib/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index d079bb92078..8f6fcadcac6 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -186,7 +186,7 @@ build_library_in_subdir( build_library_in_subdir(dspf DEPENDS grass_gis) -build_library_in_subdir(symbol NAME grass_sym) +build_library_in_subdir(symbol NAME grass_sym DEPENDS grass_gis) add_custom_command( TARGET grass_sym POST_BUILD From cb3b4eb24a19a8d413e69b64846e2684688f5a64 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 09:53:44 -0600 Subject: [PATCH 122/253] Address an issue with excluding PNG files --- lib/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 8f6fcadcac6..6248150480e 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -68,7 +68,7 @@ build_library_in_subdir(linkm) file(GLOB pngdriver_SRCS "./pngdriver/*.c") # list(APPEND pngdriver_SRCS "./driver/init.c") if(NOT WITH_LIBPNG) - list(REMOVE_ITEM pngdriver_SRCS "./pngdriver/*_png.c") + list(FILTER pngdriver_SRCS EXCLUDE REGEX "./pngdriver/.*_png.c") endif() build_library_in_subdir( pngdriver From fbc51ae23bbcbc502ced867210e51a1525fdfa0e Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 09:56:08 -0600 Subject: [PATCH 123/253] Revert pngdriver.h; if we need it, should be done in a new PR --- lib/pngdriver/pngdriver.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/lib/pngdriver/pngdriver.h b/lib/pngdriver/pngdriver.h index 24e7eb5c760..d86de42816b 100644 --- a/lib/pngdriver/pngdriver.h +++ b/lib/pngdriver/pngdriver.h @@ -54,17 +54,13 @@ extern void read_image(void); extern void read_ppm(void); extern void read_pgm(void); extern void read_bmp(void); -#ifdef HAVE_PNG_H extern void read_png(void); -#endif extern void write_image(void); extern void write_ppm(void); extern void write_pgm(void); extern void write_bmp(void); -#ifdef HAVE_PNG_H extern void write_png(void); -#endif extern void png_init_color_table(void); extern unsigned int png_get_color(int, int, int, int); From aa4cffd5d23ad2031099f6d954a990b144f7f9c3 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 12:23:45 -0600 Subject: [PATCH 124/253] Require CMake 3.16.0; format to yamllint *manually* (do we have a formatter?) --- .github/workflows/cmake.yml | 133 ++++++++++++++++++------------------ 1 file changed, 67 insertions(+), 66 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 1752253e862..cb4ed9287c0 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -1,6 +1,7 @@ # inspired by "build GDAL library and to run test with CMake" # from https://github.com/OSGeo/gdal/blob/master/.github/workflows/cmake_builds.yml +--- name: CMake on: @@ -14,76 +15,76 @@ on: - 'doc/**' concurrency: - group: ${{ github.workflow }}-${{ github.head_ref || github.ref }} - cancel-in-progress: true + group: ${{ github.workflow }}-${{ github.head_ref || github.ref }} + cancel-in-progress: true env: - CMAKE_UNITY_BUILD: OFF + CMAKE_UNITY_BUILD: OFF permissions: - contents: read # to fetch code (actions/checkout) + contents: read # to fetch code (actions/checkout) jobs: - build-cmake: - runs-on: ubuntu-20.04 - env: - CMAKE_OPTIONS: -DPython_LOOKUP_VERSION=3.8 -DUSE_CCACHE=ON - cache-name: cmake-ubuntu-20.04 - steps: - - name: Checkout GRASS - uses: actions/checkout@v4.1.1 - - name: Setup cache - uses: actions/cache@v4.0.2 - id: cache - with: - path: ${{ github.workspace }}/.ccache - key: ${{ env.cache-name }}-${{ runner.os }}-${{ github.base_ref }}${{ github.ref_name }}-${{ github.run_id }} - restore-keys: | - ${{ env.cache-name }}-${{ runner.os }}-${{ github.base_ref }} - ${{ env.cache-name }}-${{ runner.os }} - - name: Install CMake 3.11.4 - run: | - cd ${GITHUB_WORKSPACE} - wget https://github.com/Kitware/CMake/releases/download/v3.11.4/cmake-3.11.4-Linux-x86_64.tar.gz - tar xzf cmake-3.11.4-Linux-x86_64.tar.gz - echo "CMAKE_DIR=$GITHUB_WORKSPACE/cmake-3.11.4-Linux-x86_64/bin" >> $GITHUB_ENV - echo "$GITHUB_WORKSPACE/cmake-3.11.4-Linux-x86_64/bin" >> $GITHUB_PATH - - run: | - cmake --version - - name: Install dependencies - run: | - sudo add-apt-repository -y ppa:ubuntugis/ubuntugis-unstable - sudo apt-get update - sudo apt-get install -y -q build-essential \ - flex make bison gcc libgcc1 g++ ccache \ - python3 python3-dev \ - python3-opengl python3-wxgtk4.0 \ - python3-dateutil libgsl-dev python3-numpy \ - wx3.0-headers wx-common libwxgtk3.0-gtk3-dev \ - libwxbase3.0-dev libbz2-dev zlib1g-dev gettext \ - libtiff5-dev libpnglite-dev libcairo2 libcairo2-dev \ - sqlite3 libsqlite3-dev \ - libpq-dev libreadline6-dev libfreetype6-dev \ - libfftw3-3 libfftw3-dev \ - libboost-thread-dev libboost-program-options-dev libpdal-dev\ - subversion libzstd-dev checkinstall \ - libglu1-mesa-dev libxmu-dev \ - ghostscript wget -y make ccache g++ - - name: Configure ccache - run: | - echo CCACHE_BASEDIR=$PWD >> ${GITHUB_ENV} - echo CCACHE_DIR=$PWD/.ccache >> ${GITHUB_ENV} - echo CCACHE_MAXSIZE=250M >> ${GITHUB_ENV} - ccache -z - working-directory: ${{ github.workspace }} - - name: Configure - run: | - cmake ${CMAKE_OPTIONS} -S $GITHUB_WORKSPACE -B $GITHUB_WORKSPACE/build - - name: Build - run: | - cd $GITHUB_WORKSPACE/build - cmake --build . -j$(nproc) - - name: ccache statistics - run: ccache -s - + build-cmake: + runs-on: ubuntu-20.04 + env: + CMAKE_OPTIONS: -DPython_LOOKUP_VERSION=3.8 -DUSE_CCACHE=ON + cache-name: cmake-ubuntu-20.04 + steps: + - name: Checkout GRASS + uses: actions/checkout@v4.1.1 + - name: Setup cache + uses: actions/cache@v4.0.2 + id: cache + with: + path: ${{ github.workspace }}/.ccache + key: "${{ env.cache-name }}-${{ runner.os }}-${{ github.base_ref }}\ + ${{ github.ref_name }}-${{ github.run_id }}" + restore-keys: | + ${{ env.cache-name }}-${{ runner.os }}-${{ github.base_ref }} + ${{ env.cache-name }}-${{ runner.os }} + - name: Install CMake 3.16.0 + run: | + cd ${GITHUB_WORKSPACE} + wget https://github.com/Kitware/CMake/releases/download/v3.16.0/cmake-3.16.0-Linux-x86_64.tar.gz + tar xzf cmake-3.16.0-Linux-x86_64.tar.gz + echo "CMAKE_DIR=$GITHUB_WORKSPACE/cmake-3.16.0-Linux-x86_64/bin" >> $GITHUB_ENV + echo "$GITHUB_WORKSPACE/cmake-3.16.0-Linux-x86_64/bin" >> $GITHUB_PATH + - run: | + cmake --version + - name: Install dependencies + run: | + sudo add-apt-repository -y ppa:ubuntugis/ubuntugis-unstable + sudo apt-get update + sudo apt-get install -y -q build-essential \ + flex make bison gcc libgcc1 g++ ccache \ + python3 python3-dev \ + python3-opengl python3-wxgtk4.0 \ + python3-dateutil libgsl-dev python3-numpy \ + wx3.0-headers wx-common libwxgtk3.0-gtk3-dev \ + libwxbase3.0-dev libbz2-dev zlib1g-dev gettext \ + libtiff5-dev libpnglite-dev libcairo2 libcairo2-dev \ + sqlite3 libsqlite3-dev \ + libpq-dev libreadline6-dev libfreetype6-dev \ + libfftw3-3 libfftw3-dev \ + libboost-thread-dev libboost-program-options-dev libpdal-dev\ + subversion libzstd-dev checkinstall \ + libglu1-mesa-dev libxmu-dev \ + ghostscript wget -y make ccache g++ + - name: Configure ccache + run: | + echo CCACHE_BASEDIR=$PWD >> ${GITHUB_ENV} + echo CCACHE_DIR=$PWD/.ccache >> ${GITHUB_ENV} + echo CCACHE_MAXSIZE=250M >> ${GITHUB_ENV} + ccache -z + working-directory: ${{ github.workspace }} + - name: Configure + run: | + cmake ${CMAKE_OPTIONS} -S $GITHUB_WORKSPACE -B $GITHUB_WORKSPACE/build + - name: Build + run: | + cd $GITHUB_WORKSPACE/build + cmake --build . -j$(nproc) + - name: ccache statistics + run: ccache -s From 89ae499ecbcdf52b04471fbe37677d36227f8437 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 13:18:26 -0600 Subject: [PATCH 125/253] CHMOD (cmake 3.19) workaround for 3.16 --- general/CMakeLists.txt | 2 +- lib/init/CMakeLists.txt | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/general/CMakeLists.txt b/general/CMakeLists.txt index 1747e435bd6..4a7afaf4fe6 100644 --- a/general/CMakeLists.txt +++ b/general/CMakeLists.txt @@ -13,7 +13,7 @@ add_dependencies(g.mkfontcap fonts) add_custom_command( TARGET g.mkfontcap POST_BUILD - COMMAND ${grass_env_command} ${GISBASE}/bin/g.mkfontcap) + COMMAND ${grass_env_command} ${GISBASE}/bin/g.mkfontcap -o) build_program_in_subdir(g.parser DEPENDS grass_gis FREETYPE) build_program_in_subdir(g.pnmcomp DEPENDS grass_gis) if(WITH_LIBPNG) diff --git a/lib/init/CMakeLists.txt b/lib/init/CMakeLists.txt index fdac4ba4f06..d6473ad7b3d 100644 --- a/lib/init/CMakeLists.txt +++ b/lib/init/CMakeLists.txt @@ -100,8 +100,27 @@ install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${script_file_name} # For build tree file(TO_NATIVE_PATH ${GISBASE} gisbase_init_dir) file(TO_NATIVE_PATH "${GISBASE}/etc/config" grass_config_dir) + +# cmake < 3.20 configure_file(${script_input_file_name} ${GISBASE}/${script_file_name} @ONLY) +#[[cmake >= 3.20 +configure_file( + ${script_input_file_name} + ${GISBASE}/${script_file_name} + FILE_PERMISSIONS + OWNER_READ + OWNER_WRITE + OWNER_EXECUTE + GROUP_READ + GROUP_EXECUTE + WORLD_READ + WORLD_EXECUTE + @ONLY) +#]] if(UNIX OR MINGW) + # cmake < 3.19 + execute_process(COMMAND chmod a+x ${GISBASE}/${script_file_name}) + #[[cmake == 3.19 file( CHMOD ${GISBASE}/${script_file_name} @@ -113,7 +132,9 @@ if(UNIX OR MINGW) GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) + #]] endif() + file(COPY ${CMAKE_SOURCE_DIR}/demolocation/PERMANENT DESTINATION ${GISBASE}/demolocation/) From a6bc894d1ce67dfc25008d7527a0cc3e78be0f12 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 13:19:40 -0600 Subject: [PATCH 126/253] Use full path to /bin/chmod for security --- lib/init/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/init/CMakeLists.txt b/lib/init/CMakeLists.txt index d6473ad7b3d..369c6009ea4 100644 --- a/lib/init/CMakeLists.txt +++ b/lib/init/CMakeLists.txt @@ -119,7 +119,7 @@ configure_file( #]] if(UNIX OR MINGW) # cmake < 3.19 - execute_process(COMMAND chmod a+x ${GISBASE}/${script_file_name}) + execute_process(COMMAND /bin/chmod a+x ${GISBASE}/${script_file_name}) #[[cmake == 3.19 file( CHMOD From 838effac99e5daefa3cf74828984d8bbcfc361f7 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 13:20:15 -0600 Subject: [PATCH 127/253] chmod 755 instead of chmod a+x --- lib/init/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/init/CMakeLists.txt b/lib/init/CMakeLists.txt index 369c6009ea4..5afa21bf6bc 100644 --- a/lib/init/CMakeLists.txt +++ b/lib/init/CMakeLists.txt @@ -119,7 +119,7 @@ configure_file( #]] if(UNIX OR MINGW) # cmake < 3.19 - execute_process(COMMAND /bin/chmod a+x ${GISBASE}/${script_file_name}) + execute_process(COMMAND /bin/chmod 755 ${GISBASE}/${script_file_name}) #[[cmake == 3.19 file( CHMOD From 3fab7407728457120db5d404bca0da37fd8efbd1 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 15:16:39 -0600 Subject: [PATCH 128/253] Update .github/workflows/cmake.yml Co-authored-by: Nicklas Larsson --- .github/workflows/cmake.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index cb4ed9287c0..c3a18aae25f 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -84,7 +84,6 @@ jobs: cmake ${CMAKE_OPTIONS} -S $GITHUB_WORKSPACE -B $GITHUB_WORKSPACE/build - name: Build run: | - cd $GITHUB_WORKSPACE/build - cmake --build . -j$(nproc) + cmake --build $GITHUB_WORKSPACE/build --verbose -j$(nproc) - name: ccache statistics run: ccache -s From 733553a6e5858c16f0f9d2fe65be3dba94a17a02 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 15:19:04 -0600 Subject: [PATCH 129/253] Update gui/images/CMakeLists.txt Co-authored-by: Nicklas Larsson --- gui/images/CMakeLists.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/gui/images/CMakeLists.txt b/gui/images/CMakeLists.txt index 09f6dec0c83..72dcce79f84 100644 --- a/gui/images/CMakeLists.txt +++ b/gui/images/CMakeLists.txt @@ -9,11 +9,17 @@ foreach(IMG ${GUI_IMAGES}) list(APPEND output_images ${GISBASE}/gui/images/${FILE_NAME}) endforeach() +if(CMAKE_VERSION VERSION_LESS 3.17) + set(RM remove) +else() + set(RM rm) +endif() + add_custom_target( gui_images COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/symbols ${GISBASE}/gui/images/symbols - COMMAND ${CMAKE_COMMAND} -E rm ${GISBASE}/gui/images/symbols/README + COMMAND ${CMAKE_COMMAND} -E ${RM} ${GISBASE}/gui/images/symbols/README DEPENDS gui_icons ${output_images}) install(FILES ${GUI_IMAGES} DESTINATION gui/images/) From 8cdcca8190c97d7cafe9c3329a3c76db5ab51b88 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 15:22:35 -0600 Subject: [PATCH 130/253] Use CMAKE_VERSION VERSION_* instead of comments for CHMOD --- lib/init/CMakeLists.txt | 48 ++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/lib/init/CMakeLists.txt b/lib/init/CMakeLists.txt index 5afa21bf6bc..ba18ea68045 100644 --- a/lib/init/CMakeLists.txt +++ b/lib/init/CMakeLists.txt @@ -101,28 +101,9 @@ install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${script_file_name} file(TO_NATIVE_PATH ${GISBASE} gisbase_init_dir) file(TO_NATIVE_PATH "${GISBASE}/etc/config" grass_config_dir) -# cmake < 3.20 -configure_file(${script_input_file_name} ${GISBASE}/${script_file_name} @ONLY) -#[[cmake >= 3.20 -configure_file( - ${script_input_file_name} - ${GISBASE}/${script_file_name} - FILE_PERMISSIONS - OWNER_READ - OWNER_WRITE - OWNER_EXECUTE - GROUP_READ - GROUP_EXECUTE - WORLD_READ - WORLD_EXECUTE - @ONLY) -#]] -if(UNIX OR MINGW) - # cmake < 3.19 - execute_process(COMMAND /bin/chmod 755 ${GISBASE}/${script_file_name}) - #[[cmake == 3.19 - file( - CHMOD +if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.20) + configure_file( + ${script_input_file_name} ${GISBASE}/${script_file_name} FILE_PERMISSIONS OWNER_READ @@ -131,8 +112,27 @@ if(UNIX OR MINGW) GROUP_READ GROUP_EXECUTE WORLD_READ - WORLD_EXECUTE) - #]] + WORLD_EXECUTE + @ONLY) +else() + configure_file(${script_input_file_name} ${GISBASE}/${script_file_name} @ONLY) + if(UNIX OR MINGW) + if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.19) + file( + CHMOD + ${GISBASE}/${script_file_name} + FILE_PERMISSIONS + OWNER_READ + OWNER_WRITE + OWNER_EXECUTE + GROUP_READ + GROUP_EXECUTE + WORLD_READ + WORLD_EXECUTE) + else() + execute_process(COMMAND /bin/chmod 755 ${GISBASE}/${script_file_name}) + endif() + endif() endif() file(COPY ${CMAKE_SOURCE_DIR}/demolocation/PERMANENT From 6bef1cdb858edb67507da94dbc34a3a5d8116af6 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 16:20:40 -0600 Subject: [PATCH 131/253] Update .github/workflows/cmake.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Edouard Choinière <27212526+echoix@users.noreply.github.com> --- .github/workflows/cmake.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index c3a18aae25f..b989a0c0993 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -72,6 +72,7 @@ jobs: subversion libzstd-dev checkinstall \ libglu1-mesa-dev libxmu-dev \ ghostscript wget -y make ccache g++ + - run: python -m pip install ninja - name: Configure ccache run: | echo CCACHE_BASEDIR=$PWD >> ${GITHUB_ENV} From 454a38f0c8c3210a1354b7209105753a98346ed2 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 19:46:47 -0600 Subject: [PATCH 132/253] Let's try g.mkfontcap -s --- general/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/CMakeLists.txt b/general/CMakeLists.txt index 4a7afaf4fe6..f3b199bab04 100644 --- a/general/CMakeLists.txt +++ b/general/CMakeLists.txt @@ -13,7 +13,7 @@ add_dependencies(g.mkfontcap fonts) add_custom_command( TARGET g.mkfontcap POST_BUILD - COMMAND ${grass_env_command} ${GISBASE}/bin/g.mkfontcap -o) + COMMAND ${grass_env_command} ${GISBASE}/bin/g.mkfontcap -s) build_program_in_subdir(g.parser DEPENDS grass_gis FREETYPE) build_program_in_subdir(g.pnmcomp DEPENDS grass_gis) if(WITH_LIBPNG) From 98b624ae4db4c9f2e488657fe69c51421052e2b2 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 20:04:32 -0600 Subject: [PATCH 133/253] Tell me where please... --- general/CMakeLists.txt | 2 +- general/g.mkfontcap/main.c | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/general/CMakeLists.txt b/general/CMakeLists.txt index f3b199bab04..4a7afaf4fe6 100644 --- a/general/CMakeLists.txt +++ b/general/CMakeLists.txt @@ -13,7 +13,7 @@ add_dependencies(g.mkfontcap fonts) add_custom_command( TARGET g.mkfontcap POST_BUILD - COMMAND ${grass_env_command} ${GISBASE}/bin/g.mkfontcap -s) + COMMAND ${grass_env_command} ${GISBASE}/bin/g.mkfontcap -o) build_program_in_subdir(g.parser DEPENDS grass_gis FREETYPE) build_program_in_subdir(g.pnmcomp DEPENDS grass_gis) if(WITH_LIBPNG) diff --git a/general/g.mkfontcap/main.c b/general/g.mkfontcap/main.c index 8122ba158e5..635b747d09a 100644 --- a/general/g.mkfontcap/main.c +++ b/general/g.mkfontcap/main.c @@ -84,6 +84,7 @@ int main(int argc, char *argv[]) if (G_parser(argc, argv)) exit(EXIT_FAILURE); + fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); if (!tostdout->answer) { const char *gisbase = G_gisbase(); const char *alt_file = getenv("GRASS_FONT_CAP"); @@ -102,6 +103,7 @@ int main(int argc, char *argv[]) } } + fprintf(stderr, "G.MKFONTCAP %d %s\n", __LINE__, fontcapfile); searchdirs = NULL; numsearchdirs = 0; @@ -119,17 +121,22 @@ int main(int argc, char *argv[]) } } i = -1; + fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); while (standarddirs[++i]) add_search_dir(standarddirs[i]); + fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); totalfonts = maxfonts = 0; fontcap = NULL; find_stroke_fonts(); + fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); find_freetype_fonts(); + fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); qsort(fontcap, totalfonts, sizeof(struct GFONT_CAP), compare_fonts); + fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); if (tostdout->answer) outstream = stdout; else { @@ -139,12 +146,14 @@ int main(int argc, char *argv[]) strerror(errno)); } + fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); for (i = 0; i < totalfonts; i++) fprintf(outstream, "%s|%s|%d|%s|%d|%s|\n", fontcap[i].name, fontcap[i].longname, fontcap[i].type, fontcap[i].path, fontcap[i].index, fontcap[i].encoding); fclose(outstream); + fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); exit(EXIT_SUCCESS); } From 82bc972fd637aef2015ce80836623a5799e17b62 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 20:23:06 -0600 Subject: [PATCH 134/253] Add more print lines to g.mkfontcap --- general/g.mkfontcap/stroke_fonts.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/general/g.mkfontcap/stroke_fonts.c b/general/g.mkfontcap/stroke_fonts.c index d94b0f441c0..8a8e667b41d 100644 --- a/general/g.mkfontcap/stroke_fonts.c +++ b/general/g.mkfontcap/stroke_fonts.c @@ -52,44 +52,62 @@ void find_stroke_fonts(void) char **dirlisting; int numfiles, i; + fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); G_asprintf(&dirpath, "%s/fonts", G_gisbase()); dirlisting = G_ls2(dirpath, &numfiles); + fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); G_asprintf(&fonttable, "%s/fonts.table", dirpath); - if (access(fonttable, R_OK) == 0) + if (access(fonttable, R_OK) == 0) { + fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); load_font_descriptions(fonttable); + } + fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); for (i = 0; i < numfiles; i++) { if (!strstr(dirlisting[i], ".hmp")) continue; if (totalfonts >= maxfonts) { + fprintf(stderr, "G.MKFONTCAP %d %d %d\n", __LINE__, totalfonts, + maxfonts); maxfonts += 20; fontcap = G_realloc(fontcap, maxfonts * sizeof(struct GFONT_CAP)); } + fprintf(stderr, "G.MKFONTCAP %d %s; %s\n", __LINE__, + fontcap[totalfonts].path, dirlisting[i]); /* Path */ G_asprintf(&fontcap[totalfonts].path, "%s%c%s", dirpath, HOST_DIRSEP, dirlisting[i]); G_convert_dirseps_to_host(fontcap[totalfonts].path); /* Description & Name */ + fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); fontcap[totalfonts].longname = G_store(get_desc(dirlisting[i])); + fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); *(strstr(dirlisting[i], ".hmp")) = '\0'; + fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); fontcap[totalfonts].name = G_store(dirlisting[i]); + fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); /* Font Type */ fontcap[totalfonts].type = GFONT_STROKE; /* These two probably not relevant */ fontcap[totalfonts].index = 0; + fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); fontcap[totalfonts].encoding = G_store("utf-8"); totalfonts++; + fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); G_free(dirlisting[i]); + fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); } G_free(dirlisting); + fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); if (font_descriptions) free_font_descriptions(); + fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); return; } From b14e5d281c56fc1c0655848754033d2d031eab3e Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 20:39:24 -0600 Subject: [PATCH 135/253] Is it G_asprintf? --- general/g.mkfontcap/stroke_fonts.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/general/g.mkfontcap/stroke_fonts.c b/general/g.mkfontcap/stroke_fonts.c index 8a8e667b41d..2b8c817458d 100644 --- a/general/g.mkfontcap/stroke_fonts.c +++ b/general/g.mkfontcap/stroke_fonts.c @@ -79,8 +79,12 @@ void find_stroke_fonts(void) fontcap[totalfonts].path, dirlisting[i]); /* Path */ + fprintf(stderr, "G.MKFONTCAP %d %p; %s %c %s\n", __LINE__, + fontcap[totalfonts].path, dirpath, HOST_DIRSEP, dirlisting[i]); G_asprintf(&fontcap[totalfonts].path, "%s%c%s", dirpath, HOST_DIRSEP, dirlisting[i]); + fprintf(stderr, "G.MKFONTCAP %d %p; %s\n", __LINE__, + fontcap[totalfonts].path, fontcap[totalfonts].path); G_convert_dirseps_to_host(fontcap[totalfonts].path); /* Description & Name */ fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); From c5336965163108bf30fd21c2904a3f434878f403 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 20:49:14 -0600 Subject: [PATCH 136/253] Memory address seems too high --- general/g.mkfontcap/stroke_fonts.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/general/g.mkfontcap/stroke_fonts.c b/general/g.mkfontcap/stroke_fonts.c index 2b8c817458d..2988dd39b14 100644 --- a/general/g.mkfontcap/stroke_fonts.c +++ b/general/g.mkfontcap/stroke_fonts.c @@ -79,12 +79,14 @@ void find_stroke_fonts(void) fontcap[totalfonts].path, dirlisting[i]); /* Path */ - fprintf(stderr, "G.MKFONTCAP %d %p; %s %c %s\n", __LINE__, + fprintf(stderr, "G.MKFONTCAP %d %p %p %p; %s %c %s\n", __LINE__, + &fontcap[totalfonts].path, &(fontcap[totalfonts].path), fontcap[totalfonts].path, dirpath, HOST_DIRSEP, dirlisting[i]); G_asprintf(&fontcap[totalfonts].path, "%s%c%s", dirpath, HOST_DIRSEP, dirlisting[i]); - fprintf(stderr, "G.MKFONTCAP %d %p; %s\n", __LINE__, - fontcap[totalfonts].path, fontcap[totalfonts].path); + fprintf(stderr, "G.MKFONTCAP %d %p %p; %s\n", __LINE__, + fontcap[totalfonts].path, &fontcap[totalfonts].path, + fontcap[totalfonts].path); G_convert_dirseps_to_host(fontcap[totalfonts].path); /* Description & Name */ fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); From 21d6cabfcffbdac0921aeff003eee6a7eb5a8088 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 20:54:53 -0600 Subject: [PATCH 137/253] Try allocating memory to fontcap.path --- general/g.mkfontcap/stroke_fonts.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/general/g.mkfontcap/stroke_fonts.c b/general/g.mkfontcap/stroke_fonts.c index 2988dd39b14..3537cd938c5 100644 --- a/general/g.mkfontcap/stroke_fonts.c +++ b/general/g.mkfontcap/stroke_fonts.c @@ -82,6 +82,12 @@ void find_stroke_fonts(void) fprintf(stderr, "G.MKFONTCAP %d %p %p %p; %s %c %s\n", __LINE__, &fontcap[totalfonts].path, &(fontcap[totalfonts].path), fontcap[totalfonts].path, dirpath, HOST_DIRSEP, dirlisting[i]); + fontcap[totalfonts].path = G_malloc(10); + fprintf(stderr, "G.MKFONTCAP %d %p %p\n", &fontcap[totalfonts].path, + fontcap[totalfonts].path); + sprintf(fontcap[totalfonts].path, "hello"); + fprintf(stderr, "G.MKFONTCAP %d %p %p %s\n", &fontcap[totalfonts].path, + fontcap[totalfonts].path, fontcap[totalfonts].path); G_asprintf(&fontcap[totalfonts].path, "%s%c%s", dirpath, HOST_DIRSEP, dirlisting[i]); fprintf(stderr, "G.MKFONTCAP %d %p %p; %s\n", __LINE__, From 8819cfb516ef929a7f5b3a0cdf4800f0fa5c4224 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 21:00:56 -0600 Subject: [PATCH 138/253] Do you HAVE_ASPRINTF? --- general/g.mkfontcap/stroke_fonts.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/general/g.mkfontcap/stroke_fonts.c b/general/g.mkfontcap/stroke_fonts.c index 3537cd938c5..11e97908dc5 100644 --- a/general/g.mkfontcap/stroke_fonts.c +++ b/general/g.mkfontcap/stroke_fonts.c @@ -83,11 +83,17 @@ void find_stroke_fonts(void) &fontcap[totalfonts].path, &(fontcap[totalfonts].path), fontcap[totalfonts].path, dirpath, HOST_DIRSEP, dirlisting[i]); fontcap[totalfonts].path = G_malloc(10); - fprintf(stderr, "G.MKFONTCAP %d %p %p\n", &fontcap[totalfonts].path, - fontcap[totalfonts].path); +#ifdef HAVE_ASPRINTF + fprintf(stderr, "HAVE_ASPRINTF\n"); +#else + fprintf(stderr, "NOT HAVE_ASPRINTF\n"); +#endif + fprintf(stderr, "G.MKFONTCAP %d %p %p\n", __LINE__, + &fontcap[totalfonts].path, fontcap[totalfonts].path); sprintf(fontcap[totalfonts].path, "hello"); - fprintf(stderr, "G.MKFONTCAP %d %p %p %s\n", &fontcap[totalfonts].path, - fontcap[totalfonts].path, fontcap[totalfonts].path); + fprintf(stderr, "G.MKFONTCAP %d %p %p %s\n", __LINE__, + &fontcap[totalfonts].path, fontcap[totalfonts].path, + fontcap[totalfonts].path); G_asprintf(&fontcap[totalfonts].path, "%s%c%s", dirpath, HOST_DIRSEP, dirlisting[i]); fprintf(stderr, "G.MKFONTCAP %d %p %p; %s\n", __LINE__, From b20d5a701391132bb027e7d34898299e370f25cb Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 21:22:29 -0600 Subject: [PATCH 139/253] We hit the bug in G_asprintf; ap is undefined as the first call --- general/g.mkfontcap/main.c | 9 --------- general/g.mkfontcap/stroke_fonts.c | 32 +----------------------------- lib/gis/asprintf.c | 9 +++++++++ 3 files changed, 10 insertions(+), 40 deletions(-) diff --git a/general/g.mkfontcap/main.c b/general/g.mkfontcap/main.c index 635b747d09a..8122ba158e5 100644 --- a/general/g.mkfontcap/main.c +++ b/general/g.mkfontcap/main.c @@ -84,7 +84,6 @@ int main(int argc, char *argv[]) if (G_parser(argc, argv)) exit(EXIT_FAILURE); - fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); if (!tostdout->answer) { const char *gisbase = G_gisbase(); const char *alt_file = getenv("GRASS_FONT_CAP"); @@ -103,7 +102,6 @@ int main(int argc, char *argv[]) } } - fprintf(stderr, "G.MKFONTCAP %d %s\n", __LINE__, fontcapfile); searchdirs = NULL; numsearchdirs = 0; @@ -121,22 +119,17 @@ int main(int argc, char *argv[]) } } i = -1; - fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); while (standarddirs[++i]) add_search_dir(standarddirs[i]); - fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); totalfonts = maxfonts = 0; fontcap = NULL; find_stroke_fonts(); - fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); find_freetype_fonts(); - fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); qsort(fontcap, totalfonts, sizeof(struct GFONT_CAP), compare_fonts); - fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); if (tostdout->answer) outstream = stdout; else { @@ -146,14 +139,12 @@ int main(int argc, char *argv[]) strerror(errno)); } - fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); for (i = 0; i < totalfonts; i++) fprintf(outstream, "%s|%s|%d|%s|%d|%s|\n", fontcap[i].name, fontcap[i].longname, fontcap[i].type, fontcap[i].path, fontcap[i].index, fontcap[i].encoding); fclose(outstream); - fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); exit(EXIT_SUCCESS); } diff --git a/general/g.mkfontcap/stroke_fonts.c b/general/g.mkfontcap/stroke_fonts.c index 11e97908dc5..cd3c37cb35a 100644 --- a/general/g.mkfontcap/stroke_fonts.c +++ b/general/g.mkfontcap/stroke_fonts.c @@ -52,45 +52,24 @@ void find_stroke_fonts(void) char **dirlisting; int numfiles, i; - fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); G_asprintf(&dirpath, "%s/fonts", G_gisbase()); dirlisting = G_ls2(dirpath, &numfiles); - fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); G_asprintf(&fonttable, "%s/fonts.table", dirpath); - if (access(fonttable, R_OK) == 0) { - fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); + if (access(fonttable, R_OK) == 0) load_font_descriptions(fonttable); - } - fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); for (i = 0; i < numfiles; i++) { if (!strstr(dirlisting[i], ".hmp")) continue; if (totalfonts >= maxfonts) { - fprintf(stderr, "G.MKFONTCAP %d %d %d\n", __LINE__, totalfonts, - maxfonts); maxfonts += 20; fontcap = G_realloc(fontcap, maxfonts * sizeof(struct GFONT_CAP)); } - fprintf(stderr, "G.MKFONTCAP %d %s; %s\n", __LINE__, - fontcap[totalfonts].path, dirlisting[i]); /* Path */ - fprintf(stderr, "G.MKFONTCAP %d %p %p %p; %s %c %s\n", __LINE__, - &fontcap[totalfonts].path, &(fontcap[totalfonts].path), - fontcap[totalfonts].path, dirpath, HOST_DIRSEP, dirlisting[i]); - fontcap[totalfonts].path = G_malloc(10); -#ifdef HAVE_ASPRINTF - fprintf(stderr, "HAVE_ASPRINTF\n"); -#else - fprintf(stderr, "NOT HAVE_ASPRINTF\n"); -#endif - fprintf(stderr, "G.MKFONTCAP %d %p %p\n", __LINE__, - &fontcap[totalfonts].path, fontcap[totalfonts].path); - sprintf(fontcap[totalfonts].path, "hello"); fprintf(stderr, "G.MKFONTCAP %d %p %p %s\n", __LINE__, &fontcap[totalfonts].path, fontcap[totalfonts].path, fontcap[totalfonts].path); @@ -101,31 +80,22 @@ void find_stroke_fonts(void) fontcap[totalfonts].path); G_convert_dirseps_to_host(fontcap[totalfonts].path); /* Description & Name */ - fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); fontcap[totalfonts].longname = G_store(get_desc(dirlisting[i])); - fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); *(strstr(dirlisting[i], ".hmp")) = '\0'; - fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); fontcap[totalfonts].name = G_store(dirlisting[i]); - fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); /* Font Type */ fontcap[totalfonts].type = GFONT_STROKE; /* These two probably not relevant */ fontcap[totalfonts].index = 0; - fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); fontcap[totalfonts].encoding = G_store("utf-8"); totalfonts++; - fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); G_free(dirlisting[i]); - fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); } G_free(dirlisting); - fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); if (font_descriptions) free_font_descriptions(); - fprintf(stderr, "G.MKFONTCAP %d\n", __LINE__); return; } diff --git a/lib/gis/asprintf.c b/lib/gis/asprintf.c index ea2e0c7f5d4..72b34138da7 100644 --- a/lib/gis/asprintf.c +++ b/lib/gis/asprintf.c @@ -52,10 +52,19 @@ int G_vasprintf(char **out, const char *fmt, va_list ap) * va_start() should be called immediately before vsnprintf(), * and va_end() immediately after vsnprintf() * otherwise there will be memory corruption */ + fprintf(stderr, "G_VASPRINTF %d hitting this bug?\n", __LINE__); count = vsnprintf(buf, size, fmt, ap); + fprintf(stderr, "G_VASPRINTF %d count=%d size=%d\n", __LINE__, count, + size); if (count >= 0 && count < size) break; size *= 2; + fprintf(stderr, + "G_VASPRINTF %d count=%d size=%d why double size when count is " + "already 'the number of characters (excluding the terminating " + "null byte) which would have been written to the final string " + "if enough space had been available.'?\n", + __LINE__, count, size); buf = G_realloc(buf, size); } From 9a465caaf2c729db4e5cdba88933ae9d1edfb539 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 21:56:22 -0600 Subject: [PATCH 140/253] OK, G_vasprintf without HAVE_ASPRINTF is buggy --- general/g.mkfontcap/stroke_fonts.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/general/g.mkfontcap/stroke_fonts.c b/general/g.mkfontcap/stroke_fonts.c index cd3c37cb35a..d94b0f441c0 100644 --- a/general/g.mkfontcap/stroke_fonts.c +++ b/general/g.mkfontcap/stroke_fonts.c @@ -70,14 +70,8 @@ void find_stroke_fonts(void) } /* Path */ - fprintf(stderr, "G.MKFONTCAP %d %p %p %s\n", __LINE__, - &fontcap[totalfonts].path, fontcap[totalfonts].path, - fontcap[totalfonts].path); G_asprintf(&fontcap[totalfonts].path, "%s%c%s", dirpath, HOST_DIRSEP, dirlisting[i]); - fprintf(stderr, "G.MKFONTCAP %d %p %p; %s\n", __LINE__, - fontcap[totalfonts].path, &fontcap[totalfonts].path, - fontcap[totalfonts].path); G_convert_dirseps_to_host(fontcap[totalfonts].path); /* Description & Name */ fontcap[totalfonts].longname = G_store(get_desc(dirlisting[i])); From d4bc714f63434039153585d48f2718e8170ae213 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 22:08:04 -0600 Subject: [PATCH 141/253] Let's try this fix for G_vasprintf --- lib/gis/asprintf.c | 31 ++++++++++--------------------- 1 file changed, 10 insertions(+), 21 deletions(-) diff --git a/lib/gis/asprintf.c b/lib/gis/asprintf.c index 72b34138da7..671e652d1ce 100644 --- a/lib/gis/asprintf.c +++ b/lib/gis/asprintf.c @@ -43,32 +43,21 @@ int G_vasprintf(char **out, const char *fmt, va_list ap) #ifdef HAVE_ASPRINTF return vasprintf(out, fmt, ap); #else + va_list aq; size_t size = strlen(fmt) + 50; char *buf = G_malloc(size); int count; - for (;;) { - /* BUG: according to man vsnprintf, - * va_start() should be called immediately before vsnprintf(), - * and va_end() immediately after vsnprintf() - * otherwise there will be memory corruption */ - fprintf(stderr, "G_VASPRINTF %d hitting this bug?\n", __LINE__); - count = vsnprintf(buf, size, fmt, ap); - fprintf(stderr, "G_VASPRINTF %d count=%d size=%d\n", __LINE__, count, - size); - if (count >= 0 && count < size) - break; - size *= 2; - fprintf(stderr, - "G_VASPRINTF %d count=%d size=%d why double size when count is " - "already 'the number of characters (excluding the terminating " - "null byte) which would have been written to the final string " - "if enough space had been available.'?\n", - __LINE__, count, size); - buf = G_realloc(buf, size); + va_copy(aq, ap); + count = vsnprintf(buf, size, fmt, ap); + if (count++ >= size) { + buf = G_realloc(buf, count); + if (count - 1 == size) + buf[count] = '\0'; + else + vsnprintf(buf, count, fmt, aq); } - - buf = G_realloc(buf, count + 1); + va_end(aq); *out = buf; return count; From 515b6a1408dc0aff78f3113a8a25f69aefcef904 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 22:25:47 -0600 Subject: [PATCH 142/253] Update .github/workflows/cmake.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Edouard Choinière <27212526+echoix@users.noreply.github.com> --- .github/workflows/cmake.yml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index b989a0c0993..d6cdf4f4e83 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -5,14 +5,15 @@ name: CMake on: - push: - paths-ignore: - - 'doc/**' - branches-ignore: - - 'backport**' - pull_request: - paths-ignore: - - 'doc/**' + push: + paths-ignore: + - 'doc/**' + branches: + - main + - releasebranch_* + pull_request: + paths-ignore: + - 'doc/**' concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.ref }} From 50a967d618e213181dda7870a99040fe98e47ea6 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Tue, 23 Apr 2024 07:25:04 -0600 Subject: [PATCH 143/253] Fix check for HAVE_ASPRINTF --- cmake/modules/Configure.cmake | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/cmake/modules/Configure.cmake b/cmake/modules/Configure.cmake index 0b6db9ba25b..eccbc7c7c10 100644 --- a/cmake/modules/Configure.cmake +++ b/cmake/modules/Configure.cmake @@ -146,7 +146,6 @@ struct tm *tp; check_symbol_exists(gethostname "unistd.h" HAVE_GETHOSTNAME) check_symbol_exists(gettimeofday "sys/time.h" HAVE_GETTIMEOFDAY) check_symbol_exists(time "time.h" HAVE_TIME) -check_symbol_exists(asprintf "stdio.h" HAVE_ASPRINTF) check_symbol_exists(putenv "stdlib.h" HAVE_PUTENV) check_symbol_exists(setenv "stdlib.h" HAVE_SETENV) check_symbol_exists(socket "sys/socket.h" HAVE_SOCKET) @@ -162,6 +161,38 @@ check_symbol_exists(drand48 "stdlib.h" HAVE_DRAND48) 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") + + 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}") + check_symbol_exists("${ARG_SYMBOL}" "${ARG_INCLUDES}" "${var_name}") + if($CACHE{${var_name}}) + return() + endif() + endforeach() +endfunction() + +check_symbol_definitions( + SYMBOL + asprintf + INCLUDES + stdio.h + DEFINITIONS + _GNU_SOURCE + _BSD_SOURCE) + # set(HAVE_PBUFFERS 0) set(HAVE_PIXMAPS 0) if(WITH_OPENGL) try_compile( # HAVE_PBUFFERS ${CMAKE_CURRENT_BINARY_DIR} # ${CMAKE_SOURCE_DIR}/cmake/tests/have_pbuffer.c CMAKE_FLAGS From c8de3a3f261c77aae12a4213999d222e5d2fe35b Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Tue, 23 Apr 2024 07:28:49 -0600 Subject: [PATCH 144/253] Fix diglib compile --- lib/vector/diglib/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/vector/diglib/CMakeLists.txt b/lib/vector/diglib/CMakeLists.txt index 85fb9d45a25..14b8fb1a61a 100644 --- a/lib/vector/diglib/CMakeLists.txt +++ b/lib/vector/diglib/CMakeLists.txt @@ -33,4 +33,5 @@ build_module( DEPENDS grass_gmath grass_gis - grass_rtree) + grass_rtree + GDAL) From 0c0a7c4988e0c148fb5aa45b5a9d0cc86a05f562 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Tue, 23 Apr 2024 07:30:10 -0600 Subject: [PATCH 145/253] Update CMakeLists.txt Co-authored-by: Nicklas Larsson --- CMakeLists.txt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 723736ebbf5..d70bf096f2f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,9 +40,13 @@ if(NOT CMAKE_C_STANDARD) set(CMAKE_C_STANDARD_REQUIRED ON) endif() -set(default_option_enabled ON) +set(x11_default_option_enabled ON) +set(nls_default_option_enabled ON) if(WIN32) - set(default_option_enabled OFF) + set(x11_default_option_enabled OFF) + set(nls_default_option_enabled OFF) +elseif(APPLE) + set(x11_default_option_enabled OFF) endif() # Configure CCache if available From 7e6a101283441461db2233fa6a1e93e3bf407ea8 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Tue, 23 Apr 2024 07:30:22 -0600 Subject: [PATCH 146/253] Update CMakeLists.txt Co-authored-by: Nicklas Larsson --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d70bf096f2f..d9c9bdb9c27 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -78,7 +78,7 @@ else() endif() # Graphics options -option(WITH_X11 "Build with X11 support ." ${default_option_enabled}) +option(WITH_X11 "Build with X11 support ." ${x11_default_option_enabled}) option(WITH_OPENGL "Build with opengl support ." ON) option(WITH_CAIRO "Build with cairo support ." ON) option(WITH_LIBPNG "Build with libpng support ." OFF) From 5c16a52d59c3656e7f0347d01f4cdeda96aaf470 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Tue, 23 Apr 2024 07:30:39 -0600 Subject: [PATCH 147/253] Update CMakeLists.txt Co-authored-by: Nicklas Larsson --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d9c9bdb9c27..0313386d946 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -98,7 +98,7 @@ option(WITH_READLINE "Build with Readline support" OFF) # Language options option(WITH_FREETYPE "Build with FreeType support" ON) -option(WITH_NLS "Build with NLS support" ${default_option_enabled}) +option(WITH_NLS "Build with NLS support" ${nls_default_option_enabled}) # Computing options option(WITH_FFTW "Build with FFTW support" ON) From 683c1ad31d24c7e9fa9d57271c1dbc340c6b21b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edouard=20Choini=C3=A8re?= <27212526+echoix@users.noreply.github.com> Date: Thu, 2 May 2024 19:15:07 -0400 Subject: [PATCH 148/253] CI(cmake): Use ninja generator --- .github/workflows/cmake.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index d6cdf4f4e83..e21cd293d74 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -83,7 +83,7 @@ jobs: working-directory: ${{ github.workspace }} - name: Configure run: | - cmake ${CMAKE_OPTIONS} -S $GITHUB_WORKSPACE -B $GITHUB_WORKSPACE/build + cmake ${CMAKE_OPTIONS} -S $GITHUB_WORKSPACE -B $GITHUB_WORKSPACE/build -G Ninja - name: Build run: | cmake --build $GITHUB_WORKSPACE/build --verbose -j$(nproc) From 7a3b557518cbd40e6fd03c56b8fe08dfa7e7576e Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Fri, 24 May 2024 23:57:31 +0200 Subject: [PATCH 149/253] source changes (address separately) --- include/Make/Install.make | 2 +- lib/init/Makefile | 2 +- lib/init/grass.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/include/Make/Install.make b/include/Make/Install.make index b9a5e45e0fc..1fc89f2ba70 100644 --- a/include/Make/Install.make +++ b/include/Make/Install.make @@ -122,7 +122,7 @@ $(DESTDIR)$(INST_DIR) $(DESTDIR)$(UNIX_BIN): $(MAKE_DIR_CMD) $@ $(STARTUP): $(ARCH_DISTDIR)/$(GRASS_NAME).tmp - sed -e 's#'@GISBASE@'#'$(INST_DIR)'#g' \ + sed -e 's#'@SET_GISBASE@'#'$(INST_DIR)'#g' \ -e 's#'@LD_LIBRARY_PATH_VAR@'#'$(LD_LIBRARY_PATH_VAR)'#g' \ -e 's#'@CONFIG_PROJSHARE@'#'$(PROJSHARE)'#g' \ $< > $@ diff --git a/lib/init/Makefile b/lib/init/Makefile index 2db853fce95..c340f3a11d6 100644 --- a/lib/init/Makefile +++ b/lib/init/Makefile @@ -69,7 +69,7 @@ $(ARCH_BINDIR)/$(START_UP): grass.py endif rm -f $@ sed \ - -e 's#@GISBASE@#$(RUN_GISBASE)#' \ + -e 's#@SET_GISBASE@#$(RUN_GISBASE)#' \ -e 's#@GRASS_VERSION_NUMBER@#$(GRASS_VERSION_NUMBER)#' \ -e 's#@GRASS_VERSION_MAJOR@#$(GRASS_VERSION_MAJOR)#' \ -e 's#@GRASS_VERSION_MINOR@#$(GRASS_VERSION_MINOR)#' \ diff --git a/lib/init/grass.py b/lib/init/grass.py index 9d3bb2bb8a6..1eb3f741166 100755 --- a/lib/init/grass.py +++ b/lib/init/grass.py @@ -92,7 +92,7 @@ if "GISBASE" in os.environ and len(os.getenv("GISBASE")) > 0: GISBASE = os.path.normpath(os.environ["GISBASE"]) else: - GISBASE = os.path.normpath("@GISBASE@") + GISBASE = os.path.normpath("@SET_GISBASE@") os.environ["GISBASE"] = GISBASE CMD_NAME = "@START_UP@" GRASS_VERSION = "@GRASS_VERSION_NUMBER@" From c2e2ebb4417ebc73bb8f309a4340bb6bbdb74d04 Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Sat, 25 May 2024 00:00:40 +0200 Subject: [PATCH 150/253] cmake: major update, FHS, dependencies, tests added --- .github/workflows/cmake.yml | 44 +- CMakeLists.txt | 194 ++-- cmake/copy_g_gui_module.cmake | 39 - cmake/ctypesgen.cmake | 33 +- cmake/find_scripts/FindPROJ.cmake | 3 +- cmake/generate_man_pages.cmake | 19 + cmake/locale_strings.cmake | 51 +- cmake/modules/CheckDependentLibraries.cmake | 14 +- cmake/modules/DevelUtils.cmake | 36 + cmake/modules/GRASSInstallDirs.cmake | 111 +++ cmake/modules/build_gui_in_subdir.cmake | 51 +- cmake/modules/build_module.cmake | 82 +- cmake/modules/build_script_in_subdir.cmake | 78 +- .../modules/copy_python_files_in_subdir.cmake | 15 +- cmake/modules/generate_html.cmake | 41 + db/CMakeLists.txt | 61 +- db/drivers/CMakeLists.txt | 26 +- demolocation/grassrc.cmake.in | 4 - display/CMakeLists.txt | 155 ++- doc/CMakeLists.txt | 15 + general/CMakeLists.txt | 33 +- general/manage/lister/CMakeLists.txt | 6 +- gui/CMakeLists.txt | 5 +- gui/icons/CMakeLists.txt | 66 +- gui/images/CMakeLists.txt | 33 +- gui/scripts/CMakeLists.txt | 10 + gui/wxpython/CMakeLists.txt | 37 +- gui/wxpython/docs/CMakeLists.txt | 39 +- imagery/CMakeLists.txt | 156 ++- imagery/i.ortho.photo/CMakeLists.txt | 34 +- include/CMakeLists.txt | 26 +- include/config.h.cmake.in | 428 +++++---- lib/CMakeLists.txt | 79 +- lib/db/CMakeLists.txt | 8 +- lib/db/sqlp/CMakeLists.txt | 2 +- lib/fonts/CMakeLists.txt | 48 +- lib/gis/CMakeLists.txt | 41 +- lib/init/CMakeLists.txt | 124 ++- lib/init/license.txt.in | 11 - lib/proj/CMakeLists.txt | 1 + lib/rst/CMakeLists.txt | 5 + lib/temporal/CMakeLists.txt | 12 +- lib/vector/CMakeLists.txt | 45 +- lib/vector/dglib/CMakeLists.txt | 24 +- lib/vector/diglib/CMakeLists.txt | 3 +- locale/CMakeLists.txt | 34 + man/CMakeLists.txt | 108 ++- misc/CMakeLists.txt | 18 +- ps/CMakeLists.txt | 26 +- python/grass/CMakeLists.txt | 92 +- .../CMakeLists.txt | 21 +- raster/CMakeLists.txt | 368 ++++++-- raster/r.colors.out/CMakeLists.txt | 1 + raster/r.colors/CMakeLists.txt | 8 +- raster/r.li/CMakeLists.txt | 3 +- raster/r.mapcalc/CMakeLists.txt | 5 +- raster/r.sim/CMakeLists.txt | 3 + raster/r.spread/CMakeLists.txt | 3 +- raster/r.univar/CMakeLists.txt | 3 + raster/r.watershed/CMakeLists.txt | 8 +- raster3d/CMakeLists.txt | 75 +- raster3d/r3.flow/CMakeLists.txt | 14 +- scripts/CMakeLists.txt | 72 +- temporal/CMakeLists.txt | 65 +- utils/CMakeLists.txt | 45 +- vector/CMakeLists.txt | 893 ++++++++++++++++-- vector/v.lrs/CMakeLists.txt | 47 +- 67 files changed, 3201 insertions(+), 1059 deletions(-) delete mode 100644 cmake/copy_g_gui_module.cmake create mode 100644 cmake/generate_man_pages.cmake create mode 100644 cmake/modules/DevelUtils.cmake create mode 100644 cmake/modules/GRASSInstallDirs.cmake create mode 100644 cmake/modules/generate_html.cmake delete mode 100644 demolocation/grassrc.cmake.in create mode 100644 gui/scripts/CMakeLists.txt delete mode 100644 lib/init/license.txt.in create mode 100644 locale/CMakeLists.txt diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index e21cd293d74..660dc9c645c 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -4,16 +4,7 @@ --- name: CMake -on: - push: - paths-ignore: - - 'doc/**' - branches: - - main - - releasebranch_* - pull_request: - paths-ignore: - - 'doc/**' +on: [push] concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.ref }} @@ -81,11 +72,40 @@ jobs: echo CCACHE_MAXSIZE=250M >> ${GITHUB_ENV} ccache -z working-directory: ${{ github.workspace }} + - name: Print build environment variables + shell: bash -el {0} + run: | + printenv | sort + gcc --version + ldd --version + - name: Create installation directory + run: | + mkdir $HOME/install - name: Configure run: | - cmake ${CMAKE_OPTIONS} -S $GITHUB_WORKSPACE -B $GITHUB_WORKSPACE/build -G Ninja + cmake ${CMAKE_OPTIONS} -S $GITHUB_WORKSPACE -B $GITHUB_WORKSPACE/build -G Ninja \ + -DCMAKE_INSTALL_PREFIX=$HOME/install -DWITH_NLS=OFF \ + -DCMAKE_C_FLAGS="-I/usr/include -I/usr/include/gdal" \ + -DCMAKE_CXX_FLAGS="-I/usr/include -I/usr/include/gdal" + - name: Print CMakeCache.txt + shell: bash -el {0} + run: | + cat ${GITHUB_WORKSPACE}/build/CMakeCache.txt - name: Build run: | - cmake --build $GITHUB_WORKSPACE/build --verbose -j$(nproc) + cmake --build build --verbose -j$(nproc) + - name: Install + run: | + cmake --install $GITHUB_WORKSPACE/build --verbose + - name: Add the bin directory to PATH + run: | + echo "$HOME/install/bin" >> $GITHUB_PATH + - name: Print installed versions + if: always() + run: .github/workflows/print_versions.sh + - name: Test executing of the grass command + run: .github/workflows/test_simple.sh + - name: Run tests + run: .github/workflows/test_thorough.sh --config .gunittest.cfg - name: ccache statistics run: ccache -s diff --git a/CMakeLists.txt b/CMakeLists.txt index 0313386d946..15e4672be2b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,20 +1,23 @@ -#[[ +#[===========================================================================[ AUTHOR(S): Rashad Kanavath PURPOSE: GRASS GIS root that adds options to activate/deactivate 3rd party libraries COPYRIGHT: (C) 2020-2022 by the GRASS Development Team This program is free software under the GPL (>=v2) Read the file COPYING that comes with GRASS for details. -#]] +#]===========================================================================] -cmake_minimum_required(VERSION 3.11) +cmake_minimum_required(VERSION 3.16) set(CMAKE_DISABLE_IN_SOURCE_BUILD ON) -# if(DEFINED ENV{VCPKG_DEFAULT_TRIPLET} AND NOT DEFINED VCPKG_TARGET_TRIPLET) -# set(VCPKG_TARGET_TRIPLET "$ENV{VCPKG_DEFAULT_TRIPLET}" CACHE STRING "") -# endif() +#[[ +if(DEFINED ENV{VCPKG_DEFAULT_TRIPLET} AND NOT DEFINED VCPKG_TARGET_TRIPLET) +set(VCPKG_TARGET_TRIPLET "$ENV{VCPKG_DEFAULT_TRIPLET}" CACHE STRING "") +endif() +]] project(GRASS) +string(TOLOWER ${PROJECT_NAME} PROJECT_NAME_LOWER) set(BUILD_SHARED_LIBS ON) # message(FATAL_ERROR "VCPKG_TARGET_TRIPLET=${VCPKG_TARGET_TRIPLET}") @@ -22,7 +25,6 @@ if(MSVC) if(BUILD_SHARED_LIBS) set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) endif() - set_property(GLOBAL PROPERTY USE_FOLDERS ON) endif() @@ -119,6 +121,33 @@ option(WITH_LARGEFILES "Build with large file support" ${default_option_enabled}) option(WITH_DOCS "Build documentation" ON) option(WITH_GUI "Build GUI" ON) +option(WITH_FHS "Install with FHS" OFF) + +include(check_target) +include(CheckDependentLibraries) + +include(get_host_arch) +get_host_arch(BUILD_ARCH) + +include(get_versions) +get_versions("include/VERSION" GRASS_VERSION_MAJOR GRASS_VERSION_MINOR + GRASS_VERSION_RELEASE GRASS_VERSION_DATE) + +set(GRASS_VERSION_NUMBER + ${GRASS_VERSION_MAJOR}.${GRASS_VERSION_MINOR}.${GRASS_VERSION_RELEASE}) +message(STATUS "GRASS_VERSION_NUMBER = '${GRASS_VERSION_NUMBER}'") +set(GRASS_VERSION_UPDATE_PKG "0.2") + +# Setup GRASS install directories +include(GRASSInstallDirs) + +# Setup build locations. +if(NOT CMAKE_LIBRARY_OUTPUT_DIRECTORY) + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTDIR}/${GRASS_INSTALL_LIBDIR}) +endif() +if(NOT CMAKE_ARCHIVE_OUTPUT_DIRECTORY) + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${OUTDIR}/${GRASS_INSTALL_LIBDIR}) +endif() if(APPLE) if(POLICY CMP0042) @@ -127,61 +156,40 @@ if(APPLE) set(CMAKE_MACOSX_RPATH TRUE) endif() +set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${GRASS_INSTALL_LIBDIR}") +set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) + +#[[ Probably not needed, but leave it here in case... set(CMAKE_SKIP_BUILD_RPATH FALSE) set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) -set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") -set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir) if("${isSystemDir}" STREQUAL "-1") set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") -endif("${isSystemDir}" STREQUAL "-1") - -set(GISBASE ${CMAKE_BINARY_DIR}/gisbase) -file(TO_NATIVE_PATH "${CMAKE_SOURCE_DIR}" MODULE_TOPDIR) -file(TO_NATIVE_PATH "${GISBASE}" GISBASE_NATIVE) -file(TO_NATIVE_PATH "${GISBASE}/bin" BIN_DIR) -file(TO_NATIVE_PATH "${GISBASE}/lib" LIB_DIR) -file(TO_NATIVE_PATH "${GISBASE}/scripts" SCRIPTS_DIR) -file(TO_NATIVE_PATH "${GISBASE}/etc/config/rc" GISRC) -file(TO_NATIVE_PATH "${GISBASE}/etc/python" ETC_PYTHON_DIR) -file(TO_NATIVE_PATH "${GISBASE}/gui/wxpython" GUI_WXPYTHON_DIR) - -# Setup build locations. -if(NOT CMAKE_LIBRARY_OUTPUT_DIRECTORY) - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${GISBASE}/lib) endif() -if(NOT CMAKE_ARCHIVE_OUTPUT_DIRECTORY) - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${GISBASE}/lib) +]] + +# 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(MAKE_DIRECTORY "${GISBASE}/gui/wxpython") + file(CREATE_LINK ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/wxpython/xml + ${RUNTIME_GISBASE}/gui/wxpython/xml SYMBOLIC) endif() -# XXX: not used for now; setup install directories -set(GISBASE_DIR "grass${GRASS_VERSION_MAJOR}${GRASS_VERSION_MINOR}") -set(GRASS_BIN_DIR "${GISBASE_DIR}/bin") -set(GRASS_LIB_DIR "${GISBASE_DIR}/lib") -set(GRASS_SCRIPTS_DIR "${GISBASE_DIR}/scripts") -set(GRASS_ETC_DIR "${GISBASE_DIR}/etc") -set(GRASS_GUI_DIR "${GISBASE_DIR}/gui") -set(GRASS_DRIVER_DIR "${GISBASE_DIR}/driver") -set(GRASS_FONTS_DIR "${GISBASE_DIR}/fonts") -set(GRASS_UTILS_DIR "${GISBASE_DIR}/utils") -set(GRASS_SHARE_DIR "${GISBASE_DIR}/share") -set(GRASS_INCLUDE_DIR "${GISBASE_DIR}/include") -set(GRASS_DOCS_DIR "${GISBASE_DIR}/docs") -set(GRASS_DEMOLOCATION_DIR "${GISBASE_DIR}/demolocation") - -include(get_host_arch) -get_host_arch(BUILD_ARCH) - -include(get_versions) -get_versions("include/VERSION" GRASS_VERSION_MAJOR GRASS_VERSION_MINOR - GRASS_VERSION_RELEASE GRASS_VERSION_DATE) - -set(GRASS_VERSION_NUMBER - ${GRASS_VERSION_MAJOR}.${GRASS_VERSION_MINOR}.${GRASS_VERSION_RELEASE}) -message(STATUS "GRASS_VERSION_NUMBER = '${GRASS_VERSION_NUMBER}'") -set(GRASS_VERSION_UPDATE_PKG "0.2") - include(set_compiler_flags) set_compiler_flags() include(Configure) @@ -191,8 +199,6 @@ repo_status("${CMAKE_CURRENT_LIST_DIR}") enable_testing() -include(check_target) -include(CheckDependentLibraries) include(build_module) include(build_program) include(build_program_in_subdir) @@ -200,8 +206,12 @@ include(build_library_in_subdir) include(copy_python_files_in_subdir) include(build_script_in_subdir) include(build_gui_in_subdir) +include(generate_html) set(MKHTML_PY ${CMAKE_BINARY_DIR}/utils/mkhtml.py) +set(THUMBNAILS_PY ${CMAKE_BINARY_DIR}/utils/thumbnails.py) +set(HTML2MAN VERSION_NUMBER=${GRASS_VERSION_NUMBER} ${PYTHON_EXECUTABLE} + ${OUTDIR}/${GRASS_INSTALL_UTILSDIR}/g.html2man.py) if(WIN32) set(sep "\;") @@ -215,77 +225,87 @@ set(grass_env_command ${CMAKE_COMMAND} -E env "PATH=${BIN_DIR}${sep}${SCRIPTS_DIR}${env_path}" "PYTHONPATH=${ETC_PYTHON_DIR}${sep}${GUI_WXPYTHON_DIR}${sep}$ENV{PYTHONPATH}" "LD_LIBRARY_PATH=${LIB_DIR}${sep}$ENV{LD_LIBRARY_PATH}" - "GISBASE=${GISBASE_NATIVE}" "GISRC=${GISRC}" "LC_ALL=C" "LANG=C" - "LANGUAGE=C" "MODULE_TOPDIR=${MODULE_TOPDIR}" + "GISBASE=${RUN_GISBASE_NATIVE}" "GISRC=${GISRC}" "LC_ALL=C" "LANG=C" + "LANGUAGE=C" "MODULE_TOPDIR=${MODULE_TOPDIR}" "HTMLDIR=${DOC_DIR}" "VERSION_NUMBER=\"${GRASS_VERSION_NUMBER}\"" "VERSION_DATE=\"${GRASS_VERSION_DATE}\"") set(NO_HTML_DESCR_TARGETS "g.parser;ximgview;test.raster3d.lib") -# include(Configure) + add_subdirectory(include) -include_directories("${GISBASE}/include") -include_directories("${GISBASE}/include/grass") +include_directories("${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}") if(MSVC) include_directories("${CMAKE_SOURCE_DIR}/msvc") endif() -execute_process( - COMMAND ${CMAKE_COMMAND} -E echo "Creating directories in ${GISBASE}" - COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/bin/ - COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/scripts/ - COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/demolocation/ - COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/etc/config/ - COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/driver/db/ - COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/utils/ - COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/lib/ - COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/python/ - COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/etc/lister/ - COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/etc/python/grass/lib - COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/gui/wxpython/xml/ - COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/gui/icons/ - COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/gui/images/ - COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/docs/html/) +# TODO: fix this hack +include_directories(${PostgreSQL_INCLUDE_DIR}) +include_directories(${PROJ_INCLUDE_DIR}) +include_directories(/opt/local/include) +add_subdirectory(python) add_subdirectory(lib) add_subdirectory(utils) set(modules_list) set(ALL_SUBDIRS - general db display + general imagery misc + ps raster raster3d scripts - vector temporal - ps) + vector) foreach(d ${ALL_SUBDIRS}) add_subdirectory(${d}) endforeach() add_custom_target( ALL_MODULES - COMMAND ${CMAKE_COMMAND} -E echo "Building all modules" - DEPENDS ${modules_list}) - -# message(FATAL_ERROR "modules_list=${modules_list}") + DEPENDS ${modules_list} + COMMENT "Building all modules.") if(WITH_GUI) add_subdirectory(gui) endif() -add_subdirectory(python) - if(WITH_DOCS) add_subdirectory(doc) add_subdirectory(man) -endif() # WITH_DOCS +endif() -# add_subdirectory(locale) +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} + BYPRODUCTS ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/colortables + COMMENT "Creating thumbnails" + DEPENDS ALL_MODULES) +install(DIRECTORY ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/colortables + DESTINATION ${GRASS_INSTALL_DOCDIR}) + +set(misc_files + AUTHORS + CHANGES + CITING + contributors_extra.csv + contributors.csv + COPYING + GPL.TXT + INSTALL.md + REQUIREMENTS.md + translators.csv) +install(FILES ${misc_files} DESTINATION ${GRASS_INSTALL_MISCDIR}) + +if(WITH_NLS) + add_subdirectory(locale) +endif() # TODO: To be discussed - add_subdirectory(testsuite) - add_subdirectory(macosx) diff --git a/cmake/copy_g_gui_module.cmake b/cmake/copy_g_gui_module.cmake deleted file mode 100644 index 21fc99559da..00000000000 --- a/cmake/copy_g_gui_module.cmake +++ /dev/null @@ -1,39 +0,0 @@ -#[[ -AUTHOR(S): Rashad Kanavath -PURPOSE: Copy g.gui script plus .bat file if on windows -COPYRIGHT: (C) 2020 by the GRASS Development Team - This program is free software under the GPL (>=v2) - Read the file COPYING that comes with GRASS for details. --DSOURCE_DIR --DGISBASE --DG_NAME --DSRC_SCRIPT_FILE --DBINARY_DIR -#]] - -set(SCRIPT_EXT "") -if(WIN32) - set(SCRIPT_EXT ".py") -endif() - -if(WIN32) - set(PGM_NAME ${G_NAME}) - configure_file(${SOURCE_DIR}/cmake/windows_launch.bat.in - ${GISBASE}/scripts/${G_NAME}.bat @ONLY) -endif(WIN32) - -set(TMP_SCRIPT_FILE ${BINARY_DIR}/CMakeFiles/${G_NAME}${SCRIPT_EXT}) -configure_file(${SRC_SCRIPT_FILE} ${TMP_SCRIPT_FILE} COPYONLY) -file( - COPY ${TMP_SCRIPT_FILE} - DESTINATION ${GISBASE}/scripts/ - FILE_PERMISSIONS - OWNER_READ - OWNER_WRITE - OWNER_EXECUTE - GROUP_READ - GROUP_EXECUTE - WORLD_READ - WORLD_EXECUTE) - -file(REMOVE ${TMP_SCRIPT_FILE}) diff --git a/cmake/ctypesgen.cmake b/cmake/ctypesgen.cmake index 3ad7bb3f3ae..2a8d3fdab4e 100644 --- a/cmake/ctypesgen.cmake +++ b/cmake/ctypesgen.cmake @@ -7,32 +7,29 @@ COPYRIGHT: (C) 2020 by the GRASS Development Team #]] set(ENV{GISRC} - "${BIN_DIR}/demolocation/.grassrc${GRASS_VERSION_MAJOR}${GRASS_VERSION_MINOR}" + "${OUTDIR}/${GRASS_INSTALL_DEMODIR}/.grassrc${GRASS_VERSION_MAJOR}${GRASS_VERSION_MINOR}" +) +set(ENV{GISBASE} "${OUTDIR}/${GISBASE_DIR}") +set(ENV{PATH} + "${OUTDIR}/${GRASS_INSTALL_BINDIR}:${OUTDIR}/${GRASS_INSTALL_SCRIPTDIR}:$ENV{PATH}" ) -set(ENV{GISBASE} "${BIN_DIR}") -set(ENV{PATH} "${BIN_DIR}/bin:${BIN_DIR}/scripts:$ENV{PATH}") set(ENV{PYTHONPATH} - "${BIN_DIR}/gui/wxpython:${BIN_DIR}/etc/python:$ENV{PYTHONPATH}") + "${OUTDIR}/${GRASS_INSTALL_GUIDIR}/wxpython:${OUTDIR}/${GRASS_INSTALL_PYDIR}:$ENV{PYTHONPATH}" +) if(NOT MSVC) - set(ENV{LD_LIBRARY_PATH} "${BIN_DIR}/lib:$ENV{LD_LIBRARY_PATH}") + set(ENV{LD_LIBRARY_PATH} + "${OUTDIR}/${GRASS_INSTALL_LIBDIR}:$ENV{LD_LIBRARY_PATH}") endif() set(ENV{LC_ALL} C) set(LIBRARIES) foreach(LIB ${LIBS}) - if(WIN32) - list(APPEND LIBRARIES "--library=${BIN_DIR}/lib/${LIB}.dll") - elseif(APPLE) - list(APPEND LIBRARIES "--library=${BIN_DIR}/lib/lib${LIB}.so") - else() - # This can be linux or unix - list(APPEND LIBRARIES "--library=${BIN_DIR}/lib/lib${LIB}.so") - endif() + list(APPEND LIBRARIES --library=${LIB}) endforeach() set(HEADERS) foreach(HDR ${HDRS}) - list(APPEND HEADERS "${BIN_DIR}/include/grass/${HDR}") + list(APPEND HEADERS "${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass/${HDR}") endforeach() foreach(req OUT_FILE HDRS LIBS CTYPESGEN_PY COMPILER) @@ -50,17 +47,17 @@ endif() message( STATUS - "Running ${PYTHON_EXECUTABLE} ${CTYPESGEN_PY} --cpp=${CTYPESFLAGS} --includedir=\"${BIN_DIR}/include\" --runtime-libdir=\"${BIN_DIR}/lib\" ${HEADERS} ${LIBRARIES} --output=${OUT_FILE}" + "Running ${PYTHON_EXECUTABLE} ${CTYPESGEN_PY} --cpp=${CTYPESFLAGS} --no-embed-preamble --strip-build-path ${RUNTIME_GISBASE} --includedir=\"${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}\" ${LIBRARIES} ${HEADERS} --output=${OUT_FILE}" ) execute_process( COMMAND ${PYTHON_EXECUTABLE} ${CTYPESGEN_PY} --cpp=${CTYPESFLAGS} - --includedir="${BIN_DIR}/include" --runtime-libdir="${BIN_DIR}/lib" - ${HEADERS} ${LIBRARIES} --output=${OUT_FILE} + --no-embed-preamble --strip-build-path ${RUNTIME_GISBASE} + --includedir="${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}" ${LIBRARIES} ${HEADERS} + --output=${OUT_FILE} OUTPUT_VARIABLE ctypesgen_OV ERROR_VARIABLE ctypesgen_EV RESULT_VARIABLE ctypesgen_RV) - if(ctypesgen_RV) message(FATAL_ERROR "ctypesgen.py: ${ctypesgen_EV} \n ${ctypesgen_OV}") endif() diff --git a/cmake/find_scripts/FindPROJ.cmake b/cmake/find_scripts/FindPROJ.cmake index 03e5e6716e0..58920eed7a9 100644 --- a/cmake/find_scripts/FindPROJ.cmake +++ b/cmake/find_scripts/FindPROJ.cmake @@ -100,6 +100,7 @@ if(PROJ_FOUND) endif() endif() +# ~~~ # find_path(PROJ_INCLUDE_DIR proj.h PATH_SUFFIXES proj) # # find_library(PROJ_LIBRARY_RELEASE NAMES proj_i proj) @@ -114,4 +115,4 @@ endif() # # include(FindPackageHandleStandardArgs) find_package_handle_standard_args( PROJ # DEFAULT_MSG PROJ_LIBRARY PROJ_INCLUDE_DIR ) -# +# ~~~ diff --git a/cmake/generate_man_pages.cmake b/cmake/generate_man_pages.cmake new file mode 100644 index 00000000000..85553ef8629 --- /dev/null +++ b/cmake/generate_man_pages.cmake @@ -0,0 +1,19 @@ +# work in progress... + + +file(GLOB doc_HTMLFILES "${OUTDIR}/${GRASS_INSTALL_DOCDIR}/*.html") + +foreach(html_file ${doc_HTMLFILES}) + get_filename_component(PGM_NAME ${html_file} NAME) + add_custom_command( + TARGET create_man_pages + PRE_BUILD + COMMAND ${HTML2MAN} ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/${PGM_NAME}.html + ${OUTDIR}/${GRASS_INSTALL_MANDIR}/${PGM_NAME}.1 + ) +endforeach() + +#[[ +COMMAND ${HTML2MAN} ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/${PGM_NAME}.html + ${OUTDIR}/${GRASS_INSTALL_MANDIR}/${PGM_NAME}.1 +]] diff --git a/cmake/locale_strings.cmake b/cmake/locale_strings.cmake index 3c31db02053..24360d5e91b 100644 --- a/cmake/locale_strings.cmake +++ b/cmake/locale_strings.cmake @@ -5,22 +5,28 @@ PURPOSE: create translation strings for grass scripts COPYRIGHT: (C) 2020 by the GRASS Development Team This program is free software under the GPL (>=v2) Read the file COPYING that comes with GRASS for details. --DBINARY_DIR= --DG_NAME= --DSRC_SCRIPT_FILE= --DOUTPUT_FILE= --DSOURCE_DIR= + +PARAMS: BINARY_DIR + ETCDIR + GISBASE_DIR + GISRC + GUIDIR + G_NAME + LIBDIR + OUTPUT_FILE + PYDIR + SCRIPTDIR + SOURCE_DIR #]] -set(GISBASE ${BINARY_DIR}/gisbase) file(TO_NATIVE_PATH "${SOURCE_DIR}" MODULE_TOPDIR) -file(TO_NATIVE_PATH "${GISBASE}" GISBASE_NATIVE) -file(TO_NATIVE_PATH "${GISBASE}/bin" BIN_DIR) -file(TO_NATIVE_PATH "${GISBASE}/lib" LIB_DIR) -file(TO_NATIVE_PATH "${GISBASE}/scripts" SCRIPTS_DIR) -file(TO_NATIVE_PATH "${GISBASE}/etc/config/rc" GISRC) -file(TO_NATIVE_PATH "${GISBASE}/etc/python" ETC_PYTHON_DIR) -file(TO_NATIVE_PATH "${GISBASE}/gui/wxpython" GUI_WXPYTHON_DIR) +file(TO_NATIVE_PATH "${GISBASE_DIR}" GISBASE_NATIVE) +file(TO_NATIVE_PATH "${BINARY_DIR}" BIN_DIR) +file(TO_NATIVE_PATH "${LIBDIR}" LIB_DIR) +file(TO_NATIVE_PATH "${SCRIPTDIR}" SCRIPTS_DIR) +file(TO_NATIVE_PATH "${GISRC}" GISRC) +file(TO_NATIVE_PATH "${PYDIR}" ETC_PYTHON_DIR) +file(TO_NATIVE_PATH "${GUIDIR}/wxpython" GUI_WXPYTHON_DIR) if(WIN32) set(sep "\;") @@ -51,25 +57,11 @@ endif() if(WIN32) set(PGM_NAME ${G_NAME}) configure_file(${SOURCE_DIR}/cmake/windows_launch.bat.in - ${GISBASE}/scripts/${G_NAME}.bat @ONLY) + ${SCRIPTDIR}/${G_NAME}.bat @ONLY) endif(WIN32) -set(TMP_SCRIPT_FILE ${BINARY_DIR}/CMakeFiles/${G_NAME}${SCRIPT_EXT}) -configure_file(${SRC_SCRIPT_FILE} ${TMP_SCRIPT_FILE} COPYONLY) -file( - COPY ${TMP_SCRIPT_FILE} - DESTINATION ${GISBASE}/scripts/ - FILE_PERMISSIONS - OWNER_READ - OWNER_WRITE - OWNER_EXECUTE - GROUP_READ - GROUP_EXECUTE - WORLD_READ - WORLD_EXECUTE) - execute_process( - COMMAND ${BIN_DIR}/bin/g.parser -t ${GISBASE}/scripts/${G_NAME}${SCRIPT_EXT} + 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) @@ -84,4 +76,3 @@ endforeach() string(REGEX REPLACE ";" "\n" output_to_write "${output_to_write}") file(WRITE "${OUTPUT_FILE}" "${output_to_write}\n") -file(REMOVE ${TMP_SCRIPT_FILE}) diff --git a/cmake/modules/CheckDependentLibraries.cmake b/cmake/modules/CheckDependentLibraries.cmake index 9d234af783b..e211d930d60 100644 --- a/cmake/modules/CheckDependentLibraries.cmake +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -13,10 +13,11 @@ find_package(FLEX REQUIRED) find_package(BISON REQUIRED) if(UNIX) - find_library(M_LIBRARY m) + find_library(MATH_LIBRARY m) add_library(LIBM INTERFACE IMPORTED GLOBAL) - set_property(TARGET LIBM PROPERTY INTERFACE_LINK_LIBRARIES ${M_LIBRARY}) + set_property(TARGET LIBM PROPERTY INTERFACE_LINK_LIBRARIES ${MATH_LIBRARY}) mark_as_advanced(M_LIBRARY) + message("!!! MATH_LIBRARY: ${MATH_LIBRARY}") endif() find_package(PROJ REQUIRED) @@ -231,6 +232,14 @@ if(WITH_FREETYPE) endif() endif() +if(WITH_NLS) + find_package(Gettext REQUIRED) + if(GETTEXT_FOUND) + set(MSGFMT ${GETTEXT_MSGFMT_EXECUTABLE}) + set(MSGMERGE ${GETTEXT_MSGMERGE_EXECUTABLE}) + endif() +endif() + # Computing options if(WITH_FFTW) find_package(FFTW REQUIRED) @@ -324,6 +333,7 @@ endif() find_package(Python3 REQUIRED) if(Python3_FOUND) set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE}) + set(Python_SITEARCH ${Python3_SITEARCH}) #[[ find_package(PythonLibs REQUIRED) find_package(Numpy) diff --git a/cmake/modules/DevelUtils.cmake b/cmake/modules/DevelUtils.cmake new file mode 100644 index 00000000000..f2ed58ac16c --- /dev/null +++ b/cmake/modules/DevelUtils.cmake @@ -0,0 +1,36 @@ +# From https://stackoverflow.com/a/34292622 + +# Get all propreties that cmake supports +if(NOT 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 "\n" ";" CMAKE_PROPERTY_LIST "${CMAKE_PROPERTY_LIST}") + list(REMOVE_DUPLICATES CMAKE_PROPERTY_LIST) +endif() + +function(print_properties) + message("CMAKE_PROPERTY_LIST = ${CMAKE_PROPERTY_LIST}") +endfunction() + +function(print_target_properties target) + if(NOT TARGET ${target}) + 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$") + continue() + endif() + + get_property(was_set TARGET ${target} PROPERTY ${property} SET) + if(was_set) + get_target_property(value ${target} ${property}) + message("${target} ${property} = ${value}") + endif() + endforeach() +endfunction() diff --git a/cmake/modules/GRASSInstallDirs.cmake b/cmake/modules/GRASSInstallDirs.cmake new file mode 100644 index 00000000000..66177405728 --- /dev/null +++ b/cmake/modules/GRASSInstallDirs.cmake @@ -0,0 +1,111 @@ +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}") + 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}/script") + 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") + 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() + +message(STATUS "GISBASE_DIR ${GISBASE_DIR}") +message(STATUS "GRASS_INSTALL_BINDIR ${GRASS_INSTALL_BINDIR}") +message(STATUS "GRASS_INSTALL_LIBDIR ${GRASS_INSTALL_LIBDIR}") +message(STATUS "GRASS_INSTALL_SCRIPTDIR ${GRASS_INSTALL_SCRIPTDIR}") +message(STATUS "GRASS_INSTALL_SHAREDIR ${GRASS_INSTALL_SHAREDIR}") +message(STATUS "GRASS_INSTALL_ETCDIR ${GRASS_INSTALL_ETCDIR}") +message(STATUS "GRASS_INSTALL_ETCBINDIR ${GRASS_INSTALL_ETCBINDIR}") +message(STATUS "GRASS_INSTALL_PYDIR ${GRASS_INSTALL_PYDIR}") +message(STATUS "GRASS_INSTALL_GUIDIR ${GRASS_INSTALL_GUIDIR}") +message(STATUS "GRASS_INSTALL_GUISCRIPTDIR ${GRASS_INSTALL_GUISCRIPTDIR}") +message(STATUS "GRASS_INSTALL_DRIVERDIR ${GRASS_INSTALL_DRIVERDIR}") +message(STATUS "GRASS_INSTALL_FONTSDIR ${GRASS_INSTALL_FONTSDIR}") +message(STATUS "GRASS_INSTALL_UTILSDIR ${GRASS_INSTALL_UTILSDIR}") +message(STATUS "GRASS_INSTALL_INCLUDEDIR ${GRASS_INSTALL_INCLUDEDIR}") +message(STATUS "GRASS_INSTALL_DOCDIR ${GRASS_INSTALL_DOCDIR}") +message(STATUS "GRASS_INSTALL_DEVDOCDIR ${GRASS_INSTALL_DEVDOCDIR}") +message(STATUS "GRASS_INSTALL_MANDIR ${GRASS_INSTALL_MANDIR}") +message(STATUS "GRASS_INSTALL_DEMODIR ${GRASS_INSTALL_DEMODIR}") +message(STATUS "GRASS_INSTALL_MISCDIR ${GRASS_INSTALL_MISCDIR}") +message(STATUS "GRASS_INSTALL_MAKEFILEDIR ${GRASS_INSTALL_MAKEFILEDIR}") +message(STATUS "GRASS_INSTALL_LOCALEDIR ${GRASS_INSTALL_LOCALEDIR}") + +set(OUTDIR "${CMAKE_BINARY_DIR}/output") +set(GISBASE ${CMAKE_INSTALL_PREFIX}/${GISBASE_DIR}) +set(RUNTIME_GISBASE "${OUTDIR}/${GISBASE_DIR}") + +file(TO_NATIVE_PATH "${CMAKE_SOURCE_DIR}" MODULE_TOPDIR) +file(TO_NATIVE_PATH "${RUNTIME_GISBASE}" RUN_GISBASE_NATIVE) +file(TO_NATIVE_PATH "${OUTDIR}/${GRASS_INSTALL_BINDIR}" BIN_DIR) +file(TO_NATIVE_PATH "${OUTDIR}/${GRASS_INSTALL_LIBDIR}" LIB_DIR) +file(TO_NATIVE_PATH "${OUTDIR}/${GRASS_INSTALL_SCRIPTDIR}" SCRIPTS_DIR) +file(TO_NATIVE_PATH "${OUTDIR}/${GRASS_INSTALL_DOCDIR}" DOC_DIR) +file( + TO_NATIVE_PATH + "${OUTDIR}/${GRASS_INSTALL_DEMODIR}/.grassrc${GRASS_VERSION_MAJOR}${GRASS_VERSION_MINOR}" + GISRC) +file(TO_NATIVE_PATH "${OUTDIR}/${GRASS_INSTALL_PYDIR}" ETC_PYTHON_DIR) +file(TO_NATIVE_PATH "${OUTDIR}/${GRASS_INSTALL_GUIDIR}/wxpython" + GUI_WXPYTHON_DIR) +message("GISBASE ${GISBASE}") +message("GISBASE_NATIVE ${RUN_GISBASE_NATIVE}") + +message("Creating directories in ${GISBASE}") +file(MAKE_DIRECTORY "${OUTDIR}/${GRASS_INSTALL_BINDIR}") +file(MAKE_DIRECTORY "${OUTDIR}/${GRASS_INSTALL_SCRIPTDIR}") +file(MAKE_DIRECTORY "${OUTDIR}/${GRASS_INSTALL_SHAREDIR}") +file(MAKE_DIRECTORY "${OUTDIR}/${GRASS_INSTALL_DEMODIR}") +file(MAKE_DIRECTORY "${OUTDIR}/${GRASS_INSTALL_DRIVERDIR}/db") +file(MAKE_DIRECTORY "${OUTDIR}/${GRASS_INSTALL_UTILSDIR}") +file(MAKE_DIRECTORY "${OUTDIR}/${GRASS_INSTALL_LIBDIR}") +file(MAKE_DIRECTORY "${OUTDIR}/${GRASS_INSTALL_PYDIR}") +file(MAKE_DIRECTORY "${OUTDIR}/${GRASS_INSTALL_ETCBINDIR}/lister") +file(MAKE_DIRECTORY "${OUTDIR}/${GRASS_INSTALL_PYDIR}/grass/lib") +file(MAKE_DIRECTORY "${OUTDIR}/${GRASS_INSTALL_GUIDIR}/wxpython/xml") +file(MAKE_DIRECTORY "${OUTDIR}/${GRASS_INSTALL_GUIDIR}/icons") +file(MAKE_DIRECTORY "${OUTDIR}/${GRASS_INSTALL_GUIDIR}/images") +file(MAKE_DIRECTORY "${OUTDIR}/${GRASS_INSTALL_DOCDIR}") +file(MAKE_DIRECTORY "${OUTDIR}/${GRASS_INSTALL_MANDIR}") diff --git a/cmake/modules/build_gui_in_subdir.cmake b/cmake/modules/build_gui_in_subdir.cmake index 752df2922fd..b733cd9846f 100644 --- a/cmake/modules/build_gui_in_subdir.cmake +++ b/cmake/modules/build_gui_in_subdir.cmake @@ -27,25 +27,27 @@ function(build_gui_in_subdir dir_name) set(SCRIPT_EXT "") if(WIN32) set(SCRIPT_EXT ".py") + set(PGM_NAME ${G_NAME}) + configure_file(${CMAKE_SOURCE_DIR}/cmake/windows_launch.bat.in + ${OUTDIR}/${GRASS_INSTALL_SCRIPTDIR}/${G_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 - ${GISBASE}/gui/wxpython/${G_NAME}/ + "${OUTDIR}/${GRASS_INSTALL_GUIDIR}/wxpython/${G_NAME}" COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PYTHON_FILES} - ${GISBASE}/gui/wxpython/${G_NAME}/ + "${OUTDIR}/${GRASS_INSTALL_GUIDIR}/wxpython/${G_NAME}" COMMAND ${CMAKE_COMMAND} -E touch ${GUI_STAMP_FILE}) - set(OUT_SCRIPT_FILE ${GISBASE}/scripts/${G_TARGET_NAME}${SCRIPT_EXT}) + set(OUT_SCRIPT_FILE + "${OUTDIR}/${GRASS_INSTALL_SCRIPTDIR}/${G_TARGET_NAME}${SCRIPT_EXT}") + add_custom_command( OUTPUT ${OUT_SCRIPT_FILE} - COMMAND - ${CMAKE_COMMAND} -DSOURCE_DIR=${CMAKE_SOURCE_DIR} - -DBINARY_DIR=${CMAKE_BINARY_DIR} -DSRC_SCRIPT_FILE=${SRC_SCRIPT_FILE} - -DG_NAME=${G_TARGET_NAME} -DGISBASE=${GISBASE} -P - ${CMAKE_SOURCE_DIR}/cmake/copy_g_gui_module.cmake + COMMAND ${CMAKE_COMMAND} -E copy ${SRC_SCRIPT_FILE} ${OUT_SCRIPT_FILE} + COMMAND /bin/chmod 755 ${OUT_SCRIPT_FILE} DEPENDS g.parser ${SRC_SCRIPT_FILE}) if(WITH_DOCS) @@ -53,46 +55,52 @@ function(build_gui_in_subdir dir_name) 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} - ${GISBASE}/docs/html/) + "${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 ${GISBASE}/docs/html/${G_TARGET_NAME}.html - DESTINATION docs/html) + 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 ${GISBASE}/scripts| ${G_TARGET_NAME}" + "${html_file} does not exists. ${G_SRC_DIR} \n ${RUNTIME_GISBASE}/scripts| ${G_TARGET_NAME}" ) endif() endif() set(TMP_HTML_FILE ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_TARGET_NAME}.tmp.html) - set(OUT_HTML_FILE ${GISBASE}/docs/html/${G_TARGET_NAME}.html) - set(GUI_HTML_FILE ${GISBASE}/docs/html/wxGUI.${G_NAME}.html) + set(OUT_HTML_FILE ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/${G_TARGET_NAME}.html) + set(GUI_HTML_FILE ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/wxGUI.${G_NAME}.html) add_custom_command( OUTPUT ${OUT_HTML_FILE} + COMMAND ${CMAKE_COMMAND} -E copy ${G_SRC_DIR}/${G_TARGET_NAME}.html + ${CMAKE_CURRENT_BINARY_DIR}/${G_TARGET_NAME}.html COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} - ${GISBASE}/scripts/${G_TARGET_NAME}${SCRIPT_EXT} --html-description > - ${TMP_HTML_FILE} + ${OUTDIR}/${GRASS_INSTALL_SCRIPTDIR}/${G_TARGET_NAME}${SCRIPT_EXT} + --html-description < /dev/null | grep -v + '\|\| ' > ${TMP_HTML_FILE} COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} ${MKHTML_PY} ${G_TARGET_NAME} ${GRASS_VERSION_DATE} > ${OUT_HTML_FILE} COMMENT "Creating ${OUT_HTML_FILE}" COMMAND ${copy_images_command} COMMAND ${CMAKE_COMMAND} -E remove ${TMP_HTML_FILE} + ${CMAKE_CURRENT_BINARY_DIR}/${G_TARGET_NAME}.html COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} ${MKHTML_PY} ${G_TARGET_NAME} ${GRASS_VERSION_DATE} > ${GUI_HTML_FILE} COMMENT "Creating ${GUI_HTML_FILE}" DEPENDS ${OUT_SCRIPT_FILE} GUI_WXPYTHON LIB_PYTHON) - install(FILES ${OUT_HTML_FILE} DESTINATION docs/html/) + install(FILES ${OUT_HTML_FILE} ${GUI_HTML_FILE} + DESTINATION ${GRASS_INSTALL_DOCDIR}) endif() # WITH_DOCS @@ -107,11 +115,12 @@ function(build_gui_in_subdir dir_name) set_target_properties(${G_TARGET_NAME} PROPERTIES FOLDER gui) if(WIN32) - install(PROGRAMS ${GISBASE}/scripts/${G_TARGET_NAME}.bat - DESTINATION scripts) + install(PROGRAMS ${OUTDIR}/${GRASS_INSTALL_SCRIPTDIR}/${G_TARGET_NAME}.bat + DESTINATION ${GRASS_INSTALL_SCRIPTDIR}) endif() - install(PROGRAMS ${GISBASE}/scripts/${G_TARGET_NAME}${SCRIPT_EXT} - DESTINATION scripts) + install( + PROGRAMS ${OUTDIR}/${GRASS_INSTALL_SCRIPTDIR}/${G_TARGET_NAME}${SCRIPT_EXT} + DESTINATION ${GRASS_INSTALL_SCRIPTDIR}) endfunction() diff --git a/cmake/modules/build_module.cmake b/cmake/modules/build_module.cmake index ac644f7719d..ef285b8115e 100644 --- a/cmake/modules/build_module.cmake +++ b/cmake/modules/build_module.cmake @@ -12,7 +12,7 @@ include(GenerateExportHeader) function(build_module) cmake_parse_arguments( G - "EXE" + "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}) @@ -42,7 +42,8 @@ function(build_module) foreach(G_HEADER ${G_HEADERS}) if(EXISTS "${G_SRC_DIR}/${G_HEADER}") - file(COPY ${G_SRC_DIR}/${G_HEADER} DESTINATION "${GISBASE}/include/grass") + file(COPY ${G_SRC_DIR}/${G_HEADER} + DESTINATION "${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass") else() file( GLOB header_list_from_glob @@ -51,10 +52,12 @@ function(build_module) if(NOT header_list_from_glob) message( FATAL_ERROR - "MUST copy '${G_SRC_DIR}/${G_HEADER}' to ${GISBASE}/include/grass") + "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 "${GISBASE}/include/grass") + file(COPY ${header_I} + DESTINATION "${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass") endforeach() endif() endforeach() @@ -83,15 +86,15 @@ function(build_module) set(install_dest "") if(NOT G_RUNTIME_OUTPUT_DIR) if(G_EXE) - set(G_RUNTIME_OUTPUT_DIR "${GISBASE}/bin") - set(install_dest "bin") + set(G_RUNTIME_OUTPUT_DIR "${OUTDIR}/${GRASS_INSTALL_BINDIR}") + set(install_dest "${GRASS_INSTALL_BINDIR}") else() - set(G_RUNTIME_OUTPUT_DIR "${GISBASE}/lib") - set(install_dest "lib") + set(G_RUNTIME_OUTPUT_DIR "${OUTDIR}/${GRASS_INSTALL_LIBDIR}") + set(install_dest "${GRASS_INSTALL_LIBDIR}") endif() else() set(install_dest "${G_RUNTIME_OUTPUT_DIR}") - set(G_RUNTIME_OUTPUT_DIR "${GISBASE}/${install_dest}") + set(G_RUNTIME_OUTPUT_DIR "${OUTDIR}/${install_dest}") endif() if(NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY) @@ -124,7 +127,10 @@ function(build_module) PROPERTIES FOLDER lib VERSION ${GRASS_VERSION_NUMBER} SOVERSION ${GRASS_VERSION_MAJOR}) - set(export_file_name "${GISBASE}/include/export/${G_NAME}_export.h") + + # 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}) @@ -196,9 +202,9 @@ function(build_module) if(interface_def) target_compile_definitions(${G_NAME} PRIVATE "${interface_def}") endif() - target_link_libraries(${G_NAME} ${dep}) + target_link_libraries(${G_NAME} PRIVATE ${dep}) elseif(OpenMP_C_FOUND) - target_link_libraries(${G_NAME} OpenMP::OpenMP_C) + target_link_libraries(${G_NAME} PRIVATE OpenMP::OpenMP_C) endif() endforeach() @@ -210,42 +216,31 @@ function(build_module) endif() endif() - if(WITH_DOCS) - - set(G_HTML_FILE_NAME "${HTML_FILE_NAME}.html") + 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() - set(html_file ${G_SRC_DIR}/${G_HTML_FILE_NAME}) + if(WITH_DOCS AND NOT G_NO_DOCS) set(HTML_FILE) - set(no_docs_list "grass_sqlp;echo;clean_temp;lock;run") - - if(EXISTS ${html_file}) - set(HTML_FILE ${html_file}) - install(FILES ${GISBASE}/docs/html/${G_HTML_FILE_NAME} - DESTINATION docs/html) - else() - file(GLOB html_files ${G_SRC_DIR}/*.html) - if(html_files) - if(NOT ${target_name} IN_LIST no_docs_list) - message( - FATAL_ERROR - "${html_file} does not exists. ${G_SRC_DIR} \n ${G_RUNTIME_OUTPUT_DIR} | ${target_name}" - ) - endif() - endif() + if(EXISTS ${html_file_search}) + set(HTML_FILE ${html_file_search}) + install(FILES ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/${G_HTML_FILE_NAME} + DESTINATION ${GRASS_INSTALL_DOCDIR}) endif() if(NOT HTML_FILE) return() endif() - # message("HTML_FILE=${HTML_FILE}") get_filename_component(HTML_FILE_NAME ${HTML_FILE} NAME) get_filename_component(PGM_SOURCE_DIR ${HTML_FILE} PATH) string(REPLACE ".html" "" PGM_NAME "${HTML_FILE_NAME}") string(REPLACE ".html" ".tmp.html" TMP_HTML_NAME ${HTML_FILE_NAME}) - set(TMP_HTML_FILE ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${TMP_HTML_NAME}) - set(OUT_HTML_FILE ${GISBASE}/docs/html/${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(PGM_EXT "") if(WIN32) @@ -253,27 +248,36 @@ function(build_module) endif() if(RUN_HTML_DESCR) - set(html_descr_command ${G_NAME}${PGM_EXT} --html-description) + set(html_descr_command + ${G_NAME}${PGM_EXT} --html-description < /dev/null | grep -v + '\|\| ') else() set(html_descr_command ${CMAKE_COMMAND} -E echo) endif() - file(GLOB IMG_FILES ${G_SRC_DIR}/*.png ${G_SRC_DIR}/*.jpg) + file( + GLOB IMG_FILES + LIST_DIRECTORIES FALSE + ${G_SRC_DIR}/*.png ${G_SRC_DIR}/*.jpg) if(IMG_FILES) set(copy_images_command ${CMAKE_COMMAND} -E copy ${IMG_FILES} - ${GISBASE}/docs/html/) + ${OUTDIR}/${GRASS_INSTALL_DOCDIR}) + install(FILES ${IMG_FILES} DESTINATION ${GRASS_INSTALL_DOCDIR}) endif() add_custom_command( TARGET ${G_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy ${G_SRC_DIR}/${G_HTML_FILE_NAME} + ${CMAKE_CURRENT_BINARY_DIR}/${G_HTML_FILE_NAME} COMMAND ${grass_env_command} ${html_descr_command} > ${TMP_HTML_FILE} COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} ${MKHTML_PY} ${PGM_NAME} > ${OUT_HTML_FILE} COMMAND ${copy_images_command} COMMAND ${CMAKE_COMMAND} -E remove ${TMP_HTML_FILE} + ${CMAKE_CURRENT_BINARY_DIR}/${G_HTML_FILE_NAME} COMMENT "Creating ${OUT_HTML_FILE}") - + install(FILES ${OUT_HTML_FILE} DESTINATION ${GRASS_INSTALL_DOCDIR}) endif() # WITH_DOCS foreach(test_SOURCE ${G_TEST_SOURCES}) diff --git a/cmake/modules/build_script_in_subdir.cmake b/cmake/modules/build_script_in_subdir.cmake index f6a439fd9db..aee35d3d80f 100644 --- a/cmake/modules/build_script_in_subdir.cmake +++ b/cmake/modules/build_script_in_subdir.cmake @@ -7,10 +7,25 @@ COPYRIGHT: (C) 2020 by the GRASS Development Team #]] function(build_script_in_subdir dir_name) - # build_py_module(NAME ${dir_name}) + + 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}) - set(G_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${G_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) @@ -29,60 +44,88 @@ function(build_script_in_subdir dir_name) set(SCRIPT_EXT ".py") endif() + set(HTML_FILE ${G_SRC_DIR}/${G_NAME}.html) + + 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} -DBINARY_DIR=${CMAKE_BINARY_DIR} -DG_NAME=${G_NAME} - -DSRC_SCRIPT_FILE=${SRC_SCRIPT_FILE} -DSOURCE_DIR=${CMAKE_SOURCE_DIR} - -DOUTPUT_FILE=${TRANSLATE_C_FILE} -P + ${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(HTML_FILE_NAME ${G_NAME}) set(OUT_HTML_FILE "") - if(WITH_DOCS) + 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} - ${GISBASE}/docs/html/) + ${OUTDIR}/${GRASS_INSTALL_DOCDIR}) + install(FILES ${IMG_FILES} DESTINATION ${GRASS_INSTALL_DOCDIR}) endif() set(HTML_FILE ${G_SRC_DIR}/${G_NAME}.html) if(EXISTS ${HTML_FILE}) - install(FILES ${GISBASE}/docs/html/${G_NAME}.html DESTINATION docs/html) + install(FILES ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/${G_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 ${GISBASE}/scripts| ${G_NAME}" + "${html_file} does not exists. ${G_SRC_DIR} \n ${OUTDIR}/${G_DEST_DIR}| ${G_NAME}" ) endif() endif() - set(TMP_HTML_FILE ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_NAME}.tmp.html) - set(OUT_HTML_FILE ${GISBASE}/docs/html/${G_NAME}.html) + set(TMP_HTML_FILE ${CMAKE_CURRENT_BINARY_DIR}/${G_NAME}.tmp.html) + set(OUT_HTML_FILE ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/${G_NAME}.html) 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 ${grass_env_command} ${PYTHON_EXECUTABLE} - ${GISBASE}/scripts/${G_NAME}${SCRIPT_EXT} --html-description > - ${TMP_HTML_FILE} + ${OUTDIR}/${G_DEST_DIR}/${G_NAME}${SCRIPT_EXT} + --html-description < /dev/null | grep -v + '\|\| ' > ${TMP_HTML_FILE} COMMAND ${grass_env_command} ${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}" DEPENDS ${TRANSLATE_C_FILE} LIB_PYTHON) - install(FILES ${OUT_HTML_FILE} DESTINATION docs/html/) + install(FILES ${OUT_HTML_FILE} DESTINATION ${GRASS_INSTALL_DOCDIR}) endif() # WITH_DOCS @@ -95,10 +138,11 @@ function(build_script_in_subdir dir_name) set_target_properties(${G_NAME} PROPERTIES FOLDER scripts) if(WIN32) - install(PROGRAMS ${GISBASE}/scripts/${G_NAME}.bat DESTINATION scripts) + install(PROGRAMS ${OUTDIR}/${G_DEST_DIR}/${G_NAME}.bat + DESTINATION ${G_DEST_DIR}) endif() - install(PROGRAMS ${GISBASE}/scripts/${G_NAME}${SCRIPT_EXT} - DESTINATION scripts) + install(PROGRAMS ${OUTDIR}/${G_DEST_DIR}/${G_NAME}${SCRIPT_EXT} + DESTINATION ${G_DEST_DIR}) endfunction() diff --git a/cmake/modules/copy_python_files_in_subdir.cmake b/cmake/modules/copy_python_files_in_subdir.cmake index 29073d43da4..41058629210 100644 --- a/cmake/modules/copy_python_files_in_subdir.cmake +++ b/cmake/modules/copy_python_files_in_subdir.cmake @@ -25,17 +25,24 @@ function(copy_python_files_in_subdir dir_name dst_prefix) TARGET ${G_TARGET} ${BUILD} COMMAND ${CMAKE_COMMAND} -E make_directory - ${GISBASE}/${dst_prefix}/${dir_name}/ + "${OUTDIR}/${dst_prefix}/${dir_name}" COMMAND ${CMAKE_COMMAND} -E copy ${PY_FILES} - ${GISBASE}/${dst_prefix}/${dir_name}/) + "${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 - ${GISBASE}/${dst_prefix}/${dir_name}/ + "${OUTDIR}/${dst_prefix}/${dir_name}" COMMAND ${CMAKE_COMMAND} -E copy ${PY_FILES} - ${GISBASE}/${dst_prefix}/${dir_name}/) + "${OUTDIR}/${dst_prefix}/${dir_name}") set_target_properties(python_${targ_name} PROPERTIES FOLDER lib/python) endif() endfunction() diff --git a/cmake/modules/generate_html.cmake b/cmake/modules/generate_html.cmake new file mode 100644 index 00000000000..b951164666a --- /dev/null +++ b/cmake/modules/generate_html.cmake @@ -0,0 +1,41 @@ +macro(generate_html) + cmake_parse_arguments(PGM "IMG_NOT" "NAME;SOURCEDIR;TARGET" "" ${ARGN}) + + if(NOT PGM_NAME) + message(FATAL_ERROR "NAME in not set") + endif() + + if(NOT PGM_TARGET) + message(FATAL_ERROR "TARGET in not set") + endif() + + if(NOT PGM_SOURCEDIR) + set(PGM_SOURCEDIR ${CMAKE_CURRENT_SOURCE_DIR}) + endif() + + set(PGM_SOURCE ${PGM_SOURCEDIR}/${PGM_NAME}.html) + + file( + GLOB IMG_FILES + LIST_DIRECTORIES FALSE + ${PGM_SOURCEDIR}/*.png ${PGM_SOURCEDIR}/*.jpg) + if(IMG_FILES AND NOT PGM_IMG_NOT) + set(copy_images_command ${CMAKE_COMMAND} -E copy_if_different ${IMG_FILES} + ${OUTDIR}/${GRASS_INSTALL_DOCDIR}) + install(FILES ${IMG_FILES} DESTINATION ${GRASS_INSTALL_DOCDIR}) + endif() + + add_custom_command( + TARGET ${PGM_TARGET} + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy ${PGM_SOURCE} + ${CMAKE_CURRENT_BINARY_DIR}/${PGM_NAME}.html + COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} ${MKHTML_PY} ${PGM_NAME} > + ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/${PGM_NAME}.html + COMMAND ${copy_images_command} + COMMAND ${CMAKE_COMMAND} -E remove + ${CMAKE_CURRENT_BINARY_DIR}/${PGM_NAME}.html + COMMENT "Creating ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/${PGM_NAME}.[html|1]") + install(FILES ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/${PGM_NAME}.html + DESTINATION ${GRASS_INSTALL_DOCDIR}) +endmacro() diff --git a/db/CMakeLists.txt b/db/CMakeLists.txt index 6693c411aa3..137c86b0c66 100644 --- a/db/CMakeLists.txt +++ b/db/CMakeLists.txt @@ -1,40 +1,73 @@ +set(database_modules_list + db.columns + db.connect + db.copy + db.createdb + db.databases + db.describe + db.drivers + db.dropdb + db.execute + db.login + db.select + db.tables) + +add_custom_target( + ALL_DATABASE_MODULES ALL + DEPENDS ${db_modules_list} + COMMENT "All database modules are built.") + +if(WITH_DOCS) + generate_html(TARGET ALL_DATABASE_MODULES NAME databaseintro) +endif() + set(db_drivers grass_gis) add_subdirectory(drivers) -build_program_in_subdir(db.columns DEPENDS grass_dbmiclient) +build_program_in_subdir(db.columns DEPENDS grass_gis grass_dbmibase + grass_dbmiclient grass_dbmidriver) add_dependencies(db.columns ${db_drivers}) -build_program_in_subdir(db.createdb DEPENDS grass_dbmiclient) +build_program_in_subdir(db.createdb DEPENDS grass_gis grass_dbmibase + grass_dbmiclient grass_dbmidriver) add_dependencies(db.createdb ${db_drivers}) -build_program_in_subdir(db.describe DEPENDS grass_dbmiclient) +build_program_in_subdir(db.describe DEPENDS grass_gis grass_dbmibase + grass_dbmiclient grass_dbmidriver) add_dependencies(db.describe ${db_drivers}) -build_program_in_subdir(db.connect DEPENDS grass_dbmiclient) +build_program_in_subdir(db.connect DEPENDS grass_gis grass_dbmibase + grass_dbmiclient grass_dbmidriver) add_dependencies(db.connect ${db_drivers}) -build_program_in_subdir(db.copy DEPENDS grass_dbmiclient) +build_program_in_subdir(db.copy DEPENDS grass_gis grass_dbmibase + grass_dbmiclient grass_dbmidriver) add_dependencies(db.copy ${db_drivers}) -build_program_in_subdir(db.execute DEPENDS grass_dbmiclient) +build_program_in_subdir(db.execute DEPENDS grass_gis grass_dbmibase + grass_dbmiclient grass_dbmidriver) add_dependencies(db.execute ${db_drivers}) -build_program_in_subdir(db.drivers DEPENDS grass_dbmiclient) +build_program_in_subdir(db.drivers DEPENDS grass_gis grass_dbmibase + grass_dbmiclient grass_dbmidriver) add_dependencies(db.drivers ${db_drivers}) -build_program_in_subdir(db.databases DEPENDS grass_dbmiclient) +build_program_in_subdir(db.databases DEPENDS grass_gis grass_dbmibase + grass_dbmiclient grass_dbmidriver) add_dependencies(db.databases ${db_drivers}) -build_program_in_subdir(db.dropdb DEPENDS grass_dbmiclient) +build_program_in_subdir(db.dropdb DEPENDS grass_gis grass_dbmibase + grass_dbmiclient grass_dbmidriver) add_dependencies(db.dropdb ${db_drivers}) -build_program_in_subdir(db.login DEPENDS grass_dbmiclient) +build_program_in_subdir(db.login DEPENDS grass_gis grass_dbmibase + grass_dbmiclient grass_dbmidriver) add_dependencies(db.login ${db_drivers}) -build_program_in_subdir(db.select DEPENDS grass_dbmiclient) +build_program_in_subdir(db.select DEPENDS grass_gis grass_dbmibase + grass_dbmiclient grass_dbmidriver) add_dependencies(db.select ${db_drivers}) -build_program_in_subdir(db.tables DEPENDS grass_dbmiclient) +build_program_in_subdir(db.tables DEPENDS grass_gis grass_dbmibase + grass_dbmiclient grass_dbmidriver) add_dependencies(db.tables ${db_drivers}) - -# TODO: PGM = databaseintro diff --git a/db/drivers/CMakeLists.txt b/db/drivers/CMakeLists.txt index d6562f2884d..e8ba0eb17f5 100644 --- a/db/drivers/CMakeLists.txt +++ b/db/drivers/CMakeLists.txt @@ -42,6 +42,7 @@ build_program_in_subdir( ${dbf_SRCS} DEPENDS grass_gis + grass_dbmibase grass_dbmidriver grass_shape grass_sqlp @@ -50,7 +51,7 @@ build_program_in_subdir( HTML_FILE_NAME grass-dbf RUNTIME_OUTPUT_DIR - "driver/db/") + "${GRASS_INSTALL_DRIVERDIR}/db") list(APPEND db_drivers dbf) @@ -58,6 +59,7 @@ build_program_in_subdir( ogr DEPENDS grass_gis + grass_dbmibase grass_dbmidriver grass_sqlp GDAL @@ -66,7 +68,7 @@ build_program_in_subdir( HTML_FILE_NAME grass-ogr RUNTIME_OUTPUT_DIR - "driver/db/") + "${GRASS_INSTALL_DRIVERDIR}/db") list(APPEND db_drivers ogr) @@ -83,7 +85,7 @@ build_program_in_subdir( HTML_FILE_NAME grass-odbc RUNTIME_OUTPUT_DIR - "driver/db/") + "${GRASS_INSTALL_DRIVERDIR}/db") if(TARGET ODBC) list(APPEND db_drivers odbc) endif() @@ -92,6 +94,7 @@ build_program_in_subdir( sqlite DEPENDS grass_gis + grass_dbmibase grass_dbmidriver grass_sqlp DEFS @@ -101,7 +104,7 @@ build_program_in_subdir( HTML_FILE_NAME grass-sqlite RUNTIME_OUTPUT_DIR - "driver/db/") + "${GRASS_INSTALL_DRIVERDIR}/db") if(TARGET SQLITE) list(APPEND db_drivers sqlite) @@ -109,8 +112,11 @@ endif() build_program_in_subdir( postgres + NAME + pg DEPENDS grass_gis + grass_dbmibase grass_dbmidriver grass_sqlp DEFS @@ -120,7 +126,7 @@ build_program_in_subdir( HTML_FILE_NAME grass-pg RUNTIME_OUTPUT_DIR - "driver/db/") + "${GRASS_INSTALL_DRIVERDIR}/db") if(TARGET MYSQL) list(APPEND db_drivers mysql) @@ -132,6 +138,7 @@ build_program_in_subdir( ${mysql_SRCS} DEPENDS grass_gis + grass_dbmibase grass_dbmidriver grass_sqlp DEFS @@ -139,12 +146,17 @@ build_program_in_subdir( PRIMARY_DEPENDS MYSQL HTML_FILE_NAME - grass-sql + grass-mysql RUNTIME_OUTPUT_DIR - "driver/db/") + "${GRASS_INSTALL_DRIVERDIR}/db") if(TARGET MYSQL) list(APPEND db_drivers mysql) + + if(WITH_DOCS) + generate_html(TARGET mysql NAME grass-mesql SOURCEDIR + ${CMAKE_CURRENT_SOURCE_DIR}/mysql) + endif() endif() set(db_drivers diff --git a/demolocation/grassrc.cmake.in b/demolocation/grassrc.cmake.in deleted file mode 100644 index 7b46331e401..00000000000 --- a/demolocation/grassrc.cmake.in +++ /dev/null @@ -1,4 +0,0 @@ -GISDBASE: @gisbase_init_dir@ -LOCATION_NAME: demolocation -MAPSET: PERMANENT -GUI: text diff --git a/display/CMakeLists.txt b/display/CMakeLists.txt index d52f2754961..4369a442a6a 100644 --- a/display/CMakeLists.txt +++ b/display/CMakeLists.txt @@ -1,46 +1,151 @@ -build_program_in_subdir(d.barscale DEPENDS grass_sym grass_display grass_gis) -build_program_in_subdir(d.colorlist DEPENDS grass_gis grass_display) -build_program_in_subdir(d.colortable DEPENDS grass_gis grass_display) +set(display_modules_list + d.barscale + d.colorlist + d.colortable + d.erase + d.font + d.fontlist + d.geodesic + d.graph + d.grid + d.his + d.histogram + d.info + d.labels + d.legend + d.legend.vect + d.linegraph + d.mon + d.northarrow + d.path + d.profile + d.rast + d.rast.arrow + d.rast.num + d.redraw + d.rgb + d.rhumbline + d.text + d.title + d.vect + d.vect.chart + d.vect.thematic + d.where) + +if(MSVC) + 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.") + +if(WITH_DOCS) + generate_html(TARGET ALL_DISPLAY_MODULES NAME displaydrivers) +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) +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}) + +build_program_in_subdir(d.colorlist DEPENDS grass_gis grass_display + grass_raster) +build_program_in_subdir(d.colortable DEPENDS grass_gis grass_display + 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 etc TARGET d.mon POST_BUILD) + 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_sym grass_display) -build_program_in_subdir(d.grid DEPENDS grass_gis grass_sym grass_gproj - grass_display) -build_program_in_subdir(d.his DEPENDS grass_gis grass_display) -build_program_in_subdir(d.histogram 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}) +endif() +build_program_in_subdir(d.grid DEPENDS grass_gis grass_symb grass_gproj + grass_display 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) build_program_in_subdir(d.info DEPENDS grass_gis grass_display) -build_program_in_subdir(d.labels DEPENDS grass_gis grass_display) -build_program_in_subdir(d.legend DEPENDS grass_gis grass_display grass_raster3d) -build_program_in_subdir(d.legend.vect DEPENDS grass_gis grass_display grass_sym) -build_program_in_subdir(d.linegraph DEPENDS grass_gis grass_display grass_sym) -build_program_in_subdir(d.northarrow DEPENDS grass_gis grass_display grass_sym) +build_program_in_subdir(d.labels DEPENDS grass_gis grass_display LIBM) +build_program_in_subdir(d.legend DEPENDS grass_gis grass_display grass_raster + grass_raster3d LIBM) +build_program_in_subdir(d.legend.vect DEPENDS grass_gis grass_display + grass_symb LIBM) +build_program_in_subdir(d.linegraph DEPENDS grass_gis grass_display grass_symb + grass_raster) +build_program_in_subdir(d.northarrow DEPENDS grass_gis grass_display grass_symb 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}) +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) +build_program_in_subdir(d.profile DEPENDS grass_gis grass_display grass_raster 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) + 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) build_program_in_subdir(d.rhumbline DEPENDS grass_gis grass_display) -build_program_in_subdir(d.text DEPENDS grass_gis grass_display) -build_program_in_subdir(d.title DEPENDS grass_gis grass_display) -build_program_in_subdir(d.vect DEPENDS grass_gis grass_display grass_vector - grass_sym) -build_program_in_subdir(d.vect.chart DEPENDS grass_gis grass_display - grass_vector grass_sym) +build_program_in_subdir(d.text DEPENDS grass_gis grass_display LIBM) +build_program_in_subdir(d.title DEPENDS grass_gis grass_display grass_raster) build_program_in_subdir( - d.vect.thematic + d.vect DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_display grass_gis + grass_raster + grass_symb + grass_vector + LIBM) +build_program_in_subdir( + d.vect.chart + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver grass_display + grass_gis + grass_symb grass_vector - grass_sym - grass_arraystats) + LIBM) +build_program_in_subdir( + d.vect.thematic + DEPENDS + grass_arraystats + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_display + grass_gis + grass_symb + 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 e69de29bb2d..3b1f073761d 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -0,0 +1,15 @@ +file(GLOB doc_HTMLFILES "*.html") +add_custom_target(ADD_DOC_DOCS ALL COMMENT "Generate doc/html docs.") + +foreach(html_file ${doc_HTMLFILES}) + get_filename_component(filename ${html_file} NAME_WLE) + generate_html(TARGET ADD_DOC_DOCS NAME ${filename} IMG_NOT) +endforeach() + +file( + GLOB IMG_FILES + LIST_DIRECTORIES FALSE + *.png *.jpg) +if(IMG_FILES) + install(FILES ${IMG_FILES} DESTINATION ${GRASS_INSTALL_DOCDIR}) +endif() diff --git a/general/CMakeLists.txt b/general/CMakeLists.txt index 4a7afaf4fe6..a3fe869592b 100644 --- a/general/CMakeLists.txt +++ b/general/CMakeLists.txt @@ -1,9 +1,9 @@ build_program_in_subdir(g.access DEPENDS grass_gis) -build_program_in_subdir(g.copy DEPENDS grass_manage) +build_program_in_subdir(g.copy DEPENDS grass_gis grass_manage) build_program_in_subdir(g.dirseps DEPENDS grass_gis) build_program_in_subdir(g.filename DEPENDS grass_gis) build_program_in_subdir(g.findetc DEPENDS grass_gis) -build_program_in_subdir(g.findfile DEPENDS grass_manage) +build_program_in_subdir(g.findfile DEPENDS grass_gis grass_manage) build_program_in_subdir(g.gisenv DEPENDS grass_gis) build_program_in_subdir(g.mapset DEPENDS grass_gis) build_program_in_subdir(g.mapsets DEPENDS grass_gis grass_parson) @@ -13,23 +13,31 @@ add_dependencies(g.mkfontcap fonts) add_custom_command( TARGET g.mkfontcap POST_BUILD - COMMAND ${grass_env_command} ${GISBASE}/bin/g.mkfontcap -o) + COMMAND ${grass_env_command} ${OUTDIR}/${GRASS_INSTALL_BINDIR}/g.mkfontcap -s + > ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/fontcap) +install(FILES ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/fontcap + DESTINATION ${GRASS_INSTALL_ETCDIR}) build_program_in_subdir(g.parser DEPENDS grass_gis FREETYPE) build_program_in_subdir(g.pnmcomp DEPENDS grass_gis) if(WITH_LIBPNG) build_program_in_subdir(g.ppmtopng DEPENDS grass_gis LIBPNG) endif() -build_program_in_subdir(g.proj DEPENDS grass_gis grass_gproj GDAL) +build_program_in_subdir(g.proj DEPENDS grass_gis grass_gproj GDAL PROJ) +# LIBES = $(GPROJLIB) $(VECTORLIB) $(DIG2LIB) $(RASTER3DLIB) $(RASTERLIB) +# $(GISLIB) $(MATHLIB) $(PROJLIB) build_program_in_subdir( g.region DEPENDS grass_gis grass_gproj grass_vector + grass_raster grass_raster3d - grass_gmath) + grass_gmath + PROJ + LIBM) -build_program_in_subdir(g.rename DEPENDS grass_manage grass_raster) +build_program_in_subdir(g.rename DEPENDS grass_gis grass_manage grass_raster) build_program_in_subdir(g.tempfile DEPENDS grass_gis) build_program_in_subdir( @@ -57,9 +65,16 @@ endif() add_subdirectory(manage/lister) -build_program_in_subdir(g.list DEPENDS grass_manage) +build_program_in_subdir( + g.list + DEPENDS + grass_gis + grass_manage + grass_raster + grass_raster3d + grass_vector) add_dependencies(g.list cell vector) -build_program_in_subdir(g.remove DEPENDS grass_manage grass_raster) +build_program_in_subdir(g.remove DEPENDS grass_gis grass_manage grass_raster) -build_program_in_subdir(g.gui DEPENDS grass_raster) +build_program_in_subdir(g.gui DEPENDS grass_raster grass_gis) diff --git a/general/manage/lister/CMakeLists.txt b/general/manage/lister/CMakeLists.txt index b0ac9a86b19..b167af6082a 100644 --- a/general/manage/lister/CMakeLists.txt +++ b/general/manage/lister/CMakeLists.txt @@ -9,7 +9,8 @@ build_program( grass_gis grass_raster RUNTIME_OUTPUT_DIR - etc/lister) + "${GRASS_INSTALL_ETCDIR}/lister" + NO_DOCS) build_program( NAME @@ -22,4 +23,5 @@ build_program( grass_gis grass_raster RUNTIME_OUTPUT_DIR - etc/lister) + "${GRASS_INSTALL_ETCDIR}/lister" + NO_DOCS) diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt index 815d347c6b9..41d03ee9499 100644 --- a/gui/CMakeLists.txt +++ b/gui/CMakeLists.txt @@ -1,9 +1,8 @@ - add_subdirectory(icons) add_subdirectory(images) -# add_subdirectory(scripts) +add_subdirectory(scripts) add_subdirectory(wxpython) -install(FILES xml/grass-interface.dtd DESTINATION gui/xml) +install(FILES xml/grass-interface.dtd DESTINATION ${GRASS_INSTALL_GUIDIR}/xml) diff --git a/gui/icons/CMakeLists.txt b/gui/icons/CMakeLists.txt index 33374a88dfd..f7100212488 100644 --- a/gui/icons/CMakeLists.txt +++ b/gui/icons/CMakeLists.txt @@ -4,48 +4,58 @@ file(GLOB FLAGS_ICONS "flags/*.png") add_custom_target( make_gui_icons_dirs - COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/gui/icons/grass - COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/gui/icons/flags - COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/docs/html/icons - COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/gui/images/symbols) + 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(output_icons) foreach(ICON ${GUI_ICONS}) get_filename_component(FILE_NAME ${ICON} NAME) add_custom_command( - OUTPUT ${GISBASE}/gui/icons/${FILE_NAME} - COMMAND ${CMAKE_COMMAND} -E copy ${ICON} ${GISBASE}/gui/icons/) - list(APPEND output_icons ${GISBASE}/gui/icons/${FILE_NAME}) + 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 ${GISBASE}/gui/icons/grass/${FILE_NAME} - COMMAND ${CMAKE_COMMAND} -E copy ${ICON} ${GISBASE}/gui/icons/grass/) - list(APPEND output_icons ${GISBASE}/gui/icons/grass/${FILE_NAME}) + 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 ${GISBASE}/docs/html/icons/${FILE_NAME} - COMMAND ${CMAKE_COMMAND} -E copy ${ICON} ${GISBASE}/docs/html/icons/) - list(APPEND output_icons ${GISBASE}/docs/html/icons/${FILE_NAME}) + 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 ${GISBASE}/gui/icons/flags/${FILE_NAME} - COMMAND ${CMAKE_COMMAND} -E copy ${ICON} ${GISBASE}/gui/icons/flags/) - list(APPEND output_icons ${GISBASE}/gui/icons/flags/${FILE_NAME}) + 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}) -install(FILES ${GUI_ICONS} DESTINATION gui/icons) -install(FILES ${GRASS_ICONS} DESTINATION gui/icons/grass) -install(FILES ${FLAGS_ICONS} DESTINATION gui/icons/flags) -install(FILES ${GRASS_ICONS} DESTINATION docs/html/icons) -install(FILES grass.desktop DESTINATION share/applications) +install(FILES ${GUI_ICONS} DESTINATION ${GRASS_INSTALL_GUIDIR}/icons) +install(FILES ${GRASS_ICONS} DESTINATION ${GRASS_INSTALL_GUIDIR}/icons/grass) +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 @@ -64,13 +74,13 @@ foreach( 128 192) set(icon_size "${icon_type}x${icon_type}") - install(FILES grass-${icon_size}.png - DESTINATION share/icons/hicolor/${icon_size}/apps) + install( + FILES grass-${icon_size}.png + DESTINATION ${GRASS_INSTALL_SHAREDIR}/icons/hicolor/${icon_size}/apps + RENAME grass.svg) endforeach() -install( - FILES grass.svg - DESTINATION share/icons/hicolor/scalable/apps - RENAME grass${GRASS_VERSION_MAJOR}${GRASS_VERSION_MINOR}.svg) +install(FILES grass.svg + DESTINATION ${GRASS_INSTALL_SHAREDIR}/icons/hicolor/scalable/apps) -install(FILES grass.appdata.xml DESTINATION share/appdata) +install(FILES grass.appdata.xml DESTINATION ${GRASS_INSTALL_SHAREDIR}/metainfo) diff --git a/gui/images/CMakeLists.txt b/gui/images/CMakeLists.txt index 72dcce79f84..0417626c163 100644 --- a/gui/images/CMakeLists.txt +++ b/gui/images/CMakeLists.txt @@ -4,9 +4,11 @@ set(output_images) foreach(IMG ${GUI_IMAGES}) get_filename_component(FILE_NAME ${IMG} NAME) add_custom_command( - OUTPUT ${GISBASE}/gui/images/${FILE_NAME} - COMMAND ${CMAKE_COMMAND} -E copy ${IMG} ${GISBASE}/gui/images/) - list(APPEND output_images ${GISBASE}/gui/images/${FILE_NAME}) + 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) @@ -18,14 +20,21 @@ endif() add_custom_target( gui_images COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/symbols - ${GISBASE}/gui/images/symbols - COMMAND ${CMAKE_COMMAND} -E ${RM} ${GISBASE}/gui/images/symbols/README + ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/images/symbols + COMMAND ${CMAKE_COMMAND} -E ${RM} + ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/images/symbols/README DEPENDS gui_icons ${output_images}) -install(FILES ${GUI_IMAGES} DESTINATION gui/images/) -install(DIRECTORY symbols/basic DESTINATION gui/images/symbols/) -install(DIRECTORY symbols/demo DESTINATION gui/images/symbols/) -install(DIRECTORY symbols/extra DESTINATION gui/images/symbols/) -install(DIRECTORY symbols/geology DESTINATION gui/images/symbols/) -install(DIRECTORY symbols/legend DESTINATION gui/images/symbols/) -install(DIRECTORY symbols/n_arrows DESTINATION gui/images/symbols/) +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) diff --git a/gui/scripts/CMakeLists.txt b/gui/scripts/CMakeLists.txt new file mode 100644 index 00000000000..7cadce3af5c --- /dev/null +++ b/gui/scripts/CMakeLists.txt @@ -0,0 +1,10 @@ +#[[ +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}) +endforeach() diff --git a/gui/wxpython/CMakeLists.txt b/gui/wxpython/CMakeLists.txt index 6d10450b2c9..27d7db7948a 100644 --- a/gui/wxpython/CMakeLists.txt +++ b/gui/wxpython/CMakeLists.txt @@ -1,6 +1,4 @@ -# missing docs - -set(WXPYTHON_DIR ${GISBASE}/gui/wxpython) +set(WXPYTHON_DIR ${GRASS_INSTALL_GUIDIR}/wxpython) set(gui_lib_DIRS core gui_core @@ -14,7 +12,6 @@ set(gui_lib_DIRS mapwin modules nviz - rdigit startup tools vnet @@ -23,14 +20,14 @@ set(gui_lib_DIRS set(gui_lib_targets) foreach(gui_lib_DIR ${gui_lib_DIRS}) - copy_python_files_in_subdir(${gui_lib_DIR} gui/wxpython) + copy_python_files_in_subdir(${gui_lib_DIR} ${WXPYTHON_DIR}) list(APPEND gui_lib_targets python_${gui_lib_DIR}) endforeach() add_custom_target( GUI_WXPYTHON COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/wxgui.py - ${WXPYTHON_DIR}/ - DEPENDS ${gui_lib_targets}) + ${OUTDIR}/${WXPYTHON_DIR} + DEPENDS ${gui_lib_targets} LIB_PYTHON) set(gui_DIRS animation @@ -46,6 +43,7 @@ set(gui_DIRS rlisetup timeline tplot + rdigit vdigit) set(g_gui_targets) foreach(gui_DIR ${gui_DIRS}) @@ -53,9 +51,11 @@ foreach(gui_DIR ${gui_DIRS}) list(APPEND g_gui_targets "g.gui.${gui_DIR}") endforeach() -add_subdirectory(docs) +if(WITH_DOCS) + add_subdirectory(docs) +endif() -install(FILES README DESTINATION gui/wxpython) +install(FILES README DESTINATION ${GRASS_INSTALL_GUIDIR}/wxpython) # copy all python files gui/ lib/python compile all python files so below target # depends on MODULD_LIST @@ -63,15 +63,18 @@ install(FILES README DESTINATION gui/wxpython) add_custom_target( copy_wxpython_xml COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/xml - ${WXPYTHON_DIR}/xml/ - COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/../xml/grass-interface.dtd ${GISBASE}/gui/ + ${OUTDIR}/${WXPYTHON_DIR}/xml + COMMAND + ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../xml/grass-interface.dtd + ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/xml DEPENDS GUI_WXPYTHON) add_custom_target( compile_python_files - COMMAND ${PYTHON_EXECUTABLE} -m compileall ${GISBASE}/scripts - COMMAND ${PYTHON_EXECUTABLE} -m compileall ${WXPYTHON_DIR} + COMMAND ${PYTHON_EXECUTABLE} -m compileall + ${OUTDIR}/${GRASS_INSTALL_SCRIPTDIR} + COMMAND ${PYTHON_EXECUTABLE} -m compileall ${OUTDIR}/${WXPYTHON_DIR} DEPENDS ALL_MODULES) add_custom_target( @@ -79,7 +82,7 @@ add_custom_target( COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/tools/build_modules_xml.py > - ${WXPYTHON_DIR}/xml/module_items.xml + ${OUTDIR}/${WXPYTHON_DIR}/xml/module_items.xml DEPENDS copy_wxpython_xml compile_python_files ${g_gui_targets} COMMENT "Generating interface description for all modules..." VERBATIM) @@ -96,7 +99,7 @@ add_custom_target( ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/menudata.xml COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/menudata.xml - ${WXPYTHON_DIR}/xml/ + ${OUTDIR}/${WXPYTHON_DIR}/xml DEPENDS build_modules_items_xml) add_custom_target( @@ -112,7 +115,7 @@ add_custom_target( COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/module_tree_menudata.xml - ${WXPYTHON_DIR}/xml/ + ${OUTDIR}/${WXPYTHON_DIR}/xml DEPENDS build_xml_menudata) add_custom_target( diff --git a/gui/wxpython/docs/CMakeLists.txt b/gui/wxpython/docs/CMakeLists.txt index 8e32eee7424..bec5455695a 100644 --- a/gui/wxpython/docs/CMakeLists.txt +++ b/gui/wxpython/docs/CMakeLists.txt @@ -1,13 +1,32 @@ -set(wxpython_html_files) +set(wxpython_html_files + wxGUI.components + wxGUI + wxGUI.iscatt + wxGUI.modules + wxGUI.nviz + wxGUI.toolboxes + wxGUI.vnet) -add_custom_command( - OUTPUT ${GISBASE}/docs/html/wxGUI.components.html - COMMAND - ${grass_env_command} ${PYTHON_EXECUTABLE} ${MKHTML_PY} wxGUI.components - ${GRASS_VERSION_DATE} > ${GISBASE}/docs/html/wxGUI.components.html - COMMENT "Creating ${GISBASE}/docs/html/wxGUI.components.html" - DEPENDS GUI_WXPYTHON LIB_PYTHON) +add_custom_target(wxpython_docs) +add_dependencies(GUI_WXPYTHON wxpython_docs) -list(APPEND wxpython_html_files ${GISBASE}/docs/html/wxGUI.components.html) +foreach(html_file ${wxpython_html_files}) + add_custom_command( + TARGET wxpython_docs + PRE_BUILD DEPENDS LIB_PYTHON + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} ${MKHTML_PY} ${html_file} + > ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/${html_file}.html + BYPRODUCTS ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/${html_file}.html) + install(FILES ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/${html_file}.html + DESTINATION ${GRASS_INSTALL_DOCDIR}) +endforeach() -add_custom_target(wxpython_docs DEPENDS ${wxpython_html_files}) +file( + GLOB img_files + LIST_DIRECTORIES FALSE + *.png *.jpg) + +if(img_files) + install(FILES ${img_files} DESTINATION ${GRASS_INSTALL_DOCDIR}) +endif() diff --git a/imagery/CMakeLists.txt b/imagery/CMakeLists.txt index 6c5a1868844..6786a047ad8 100644 --- a/imagery/CMakeLists.txt +++ b/imagery/CMakeLists.txt @@ -1,7 +1,62 @@ +set(imagery_modules_list + i.albedo + i.aster.toar + i.atcorr + i.biomass + i.cca + i.cluster + i.eb.eta + i.eb.evapfr + i.eb.hsebal01 + i.eb.netrad + i.eb.soilheatflux + i.emissivity + i.evapo.mh + i.evapo.pm + i.evapo.pt + i.evapo.time + i.fft + i.find + i.gensig + i.gensigset + i.group + i.his.rgb + i.ifft + i.landsat.acca + i.landsat.toar + i.maxlik + i.modis.qc + i.pca + i.rectify + i.rgb.his + i.segment + i.signatures + i.smap + i.target + i.topo.corr + i.vi + i.zc) + +# TODO: add i.svm.predict and i.svm.train + +add_custom_target( + ALL_IMAGERY_MODULES ALL + DEPENDS ${imagery_modules_list} + COMMENT "All imagery modules are built.") + +if(WITH_DOCS) + generate_html(TARGET ALL_IMAGERY_MODULES NAME imageryintro) + + 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) build_program_in_subdir(i.aster.toar DEPENDS grass_imagery grass_raster - grass_vector grass_gis) + grass_vector grass_gis LIBM) build_program_in_subdir( i.atcorr @@ -10,13 +65,22 @@ build_program_in_subdir( grass_raster grass_vector grass_gis + grass_btree2 + LIBM SRC_REGEX "*.cpp") build_program_in_subdir(i.biomass DEPENDS grass_imagery grass_raster - grass_vector grass_gis) -build_program_in_subdir(i.cca DEPENDS grass_imagery grass_raster grass_vector - grass_gis) + grass_vector grass_gis LIBM) +build_program_in_subdir( + i.cca + DEPENDS + grass_imagery + grass_raster + grass_vector + grass_gis + grass_gmath + LIBM) build_program_in_subdir( i.cluster DEPENDS @@ -27,26 +91,26 @@ build_program_in_subdir( grass_cluster) build_program_in_subdir(i.eb.evapfr DEPENDS grass_imagery grass_raster - grass_vector grass_gis) + grass_vector grass_gis LIBM) build_program_in_subdir(i.eb.eta DEPENDS grass_imagery grass_raster - grass_vector grass_gis) + grass_vector grass_gis LIBM) build_program_in_subdir(i.eb.hsebal01 DEPENDS grass_imagery grass_raster - grass_vector grass_gis) + grass_vector grass_gis LIBM) build_program_in_subdir(i.eb.netrad DEPENDS grass_imagery grass_raster - grass_vector grass_gis) + grass_vector grass_gis LIBM) build_program_in_subdir(i.eb.soilheatflux DEPENDS grass_imagery grass_raster - grass_vector grass_gis) + grass_vector grass_gis LIBM) build_program_in_subdir(i.evapo.mh DEPENDS grass_imagery grass_raster - grass_vector grass_gis) + grass_vector grass_gis LIBM) build_program_in_subdir(i.evapo.pm DEPENDS grass_imagery grass_raster - grass_vector grass_gis) + grass_vector grass_gis LIBM) build_program_in_subdir(i.evapo.pt DEPENDS grass_imagery grass_raster - grass_vector grass_gis) + grass_vector grass_gis LIBM) build_program_in_subdir(i.evapo.time DEPENDS grass_imagery grass_raster grass_vector grass_gis) build_program_in_subdir(i.emissivity DEPENDS grass_imagery grass_raster - grass_vector grass_gis) + grass_vector grass_gis LIBM) build_program_in_subdir( i.find DEPENDS @@ -57,13 +121,21 @@ build_program_in_subdir( PACKAGE "grassmods" RUNTIME_OUTPUT_DIR - etc) + ${GRASS_INSTALL_ETCDIR} + NO_DOC) build_program_in_subdir(i.gensig DEPENDS grass_imagery grass_raster - grass_vector grass_gis) + grass_vector grass_gis LIBM) -build_program_in_subdir(i.gensigset DEPENDS grass_imagery grass_raster - grass_vector grass_gis) +build_program_in_subdir( + i.gensigset + DEPENDS + grass_imagery + grass_raster + grass_vector + grass_gis + grass_gmath + LIBM) build_program_in_subdir(i.group DEPENDS grass_imagery grass_raster grass_vector grass_gis) @@ -72,16 +144,16 @@ build_program_in_subdir(i.his.rgb DEPENDS grass_imagery grass_raster grass_vector grass_gis) build_program_in_subdir(i.landsat.toar DEPENDS grass_imagery grass_raster - grass_vector grass_gis) + grass_vector grass_gis LIBM) build_program_in_subdir(i.maxlik DEPENDS grass_imagery grass_raster - grass_vector grass_gis) + grass_vector grass_gis LIBM) build_program_in_subdir(i.modis.qc DEPENDS grass_imagery grass_raster grass_vector grass_gis) build_program_in_subdir(i.rectify DEPENDS grass_imagery grass_raster - grass_vector grass_gis) + grass_vector grass_gis LIBM) build_program_in_subdir(i.rgb.his DEPENDS grass_imagery grass_raster grass_vector grass_gis) @@ -93,25 +165,48 @@ build_program_in_subdir( grass_raster grass_vector grass_gis - grass_segment) + grass_segment + LIBM) -build_program_in_subdir(i.smap DEPENDS grass_imagery grass_raster grass_vector - grass_gis) +build_program_in_subdir(i.signatures DEPENDS grass_imagery grass_gis) + +build_program_in_subdir( + i.smap + DEPENDS + grass_imagery + grass_raster + grass_vector + grass_gis + grass_gmath + LIBM) build_program_in_subdir(i.target DEPENDS grass_imagery grass_raster grass_vector grass_gis) build_program_in_subdir(i.topo.corr DEPENDS grass_imagery grass_raster - grass_vector grass_gis) + grass_vector grass_gis LIBM) -build_program_in_subdir(i.pca DEPENDS grass_imagery grass_raster grass_vector - grass_gis) +build_program_in_subdir( + i.pca + DEPENDS + grass_imagery + grass_raster + grass_vector + grass_gis + grass_gmath + LIBM) build_program_in_subdir(i.vi DEPENDS grass_imagery grass_raster grass_vector - grass_gis) + grass_gis LIBM) -build_program_in_subdir(i.zc DEPENDS grass_imagery grass_raster grass_vector - grass_gis) +build_program_in_subdir( + i.zc + DEPENDS + grass_imagery + grass_raster + grass_vector + grass_gis + grass_gmath) build_program_in_subdir( i.fft @@ -133,6 +228,7 @@ build_program_in_subdir( PRIMARY_DEPENDS FFTW) -build_program_in_subdir(i.landsat.acca DEPENDS grass_raster grass_gis) +build_program_in_subdir(i.landsat.acca DEPENDS grass_raster grass_gis LIBM) +# TODO: add generate docs for i.ortho.photo add_subdirectory(i.ortho.photo) diff --git a/imagery/i.ortho.photo/CMakeLists.txt b/imagery/i.ortho.photo/CMakeLists.txt index ec829a3b73b..7036ca88530 100644 --- a/imagery/i.ortho.photo/CMakeLists.txt +++ b/imagery/i.ortho.photo/CMakeLists.txt @@ -7,16 +7,36 @@ build_library_in_subdir( grass_imagery grass_gmath) -build_program_in_subdir(i.ortho.camera DEPENDS grass_iortho) +build_program_in_subdir(i.ortho.camera DEPENDS grass_iortho grass_imagery + grass_gis grass_gmath) -build_program_in_subdir(i.ortho.elev DEPENDS grass_iortho) +build_program_in_subdir(i.ortho.elev DEPENDS grass_iortho grass_imagery + grass_gis grass_gmath) -build_program_in_subdir(i.ortho.init DEPENDS grass_iortho) +build_program_in_subdir( + i.ortho.init + DEPENDS + grass_iortho + grass_imagery + grass_gis + grass_gmath + grass_raster) -build_program_in_subdir(i.ortho.photo DEPENDS grass_iortho) +build_program_in_subdir(i.ortho.photo DEPENDS grass_iortho grass_imagery + grass_gis) -build_program_in_subdir(i.ortho.rectify DEPENDS grass_iortho) +build_program_in_subdir( + i.ortho.rectify + DEPENDS + grass_iortho + grass_imagery + grass_gis + grass_gmath + grass_raster + LIBM) -build_program_in_subdir(i.ortho.target DEPENDS grass_iortho) +build_program_in_subdir(i.ortho.target DEPENDS grass_iortho grass_imagery + grass_gis) -build_program_in_subdir(i.ortho.transform DEPENDS grass_iortho) +build_program_in_subdir(i.ortho.transform DEPENDS grass_iortho grass_imagery + grass_gis grass_gmath LIBM) diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt index e17cdf9ae5f..577fd7bf1eb 100644 --- a/include/CMakeLists.txt +++ b/include/CMakeLists.txt @@ -4,7 +4,7 @@ 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 ${GISBASE}/include/${dsth_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} @@ -16,24 +16,32 @@ endforeach() add_custom_target(copy_header DEPENDS ${include_depends} LIB_PYTHON) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/grass/version.h.in - "${GISBASE}/include/grass/version.h") + "${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass/version.h") -message(STATUS "Creating ${GISBASE}/include/grass/config.h") +message(STATUS "Creating ${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass/config.h") configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake.in - "${GISBASE}/include/grass/config.h") + "${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass/config.h") -file(WRITE ${GISBASE}/include/grass/copying.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 ${GISBASE}/include/grass/copying.h "\"${copying_line} \\n\"\n") + file(APPEND ${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass/copying.h + "\"${copying_line} \\n\"\n") endforeach() -file(WRITE ${GISBASE}/include/grass/citing.h "") +# 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 ${GISBASE}/include/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 ${GISBASE}/include/grass/confparms.h "\"/* */\\n\"") +file(WRITE ${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass/confparms.h + "\"/* */\\n\"") + +install(DIRECTORY ${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/ + DESTINATION ${GRASS_INSTALL_INCLUDEDIR}) diff --git a/include/config.h.cmake.in b/include/config.h.cmake.in index cd2dcf6379d..b5ac2d8ffa4 100644 --- a/include/config.h.cmake.in +++ b/include/config.h.cmake.in @@ -8,250 +8,358 @@ #cmakedefine GDEBUG ${GDEBUG} -/* define _OE_SOCKETS flag (OS/390 sys/socket.h) */ -#cmakedefine _OE_SOCKETS ${_OE_SOCKETS} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_AD2_H ${HAVE_AD2_H} -/* define _REENTRANT flag (for SunOS) */ -#cmakedefine _REENTRANT ${_REENTRANT} +/* Define to 1 if you have the `asprintf' function. */ +#cmakedefine HAVE_ASPRINTF ${HAVE_ASPRINTF} -/* define USE_DELTA_FOR_TZ (for AIX) */ -#cmakedefine USE_DELTA_FOR_TZ ${USE_DELTA_FOR_TZ} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_BZLIB_H ${HAVE_BZLIB_H} -/* define for Windows static build */ -#cmakedefine STATIC_BUILD ${STATIC_BUILD} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_CAIRO_H ${HAVE_CAIRO_H} -/* define if limits.h exists */ -#cmakedefine HAVE_LIMITS_H ${HAVE_LIMITS_H} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_CBLAS_H ${HAVE_CBLAS_H} -/* define if termio.h exists */ -#cmakedefine HAVE_TERMIO_H ${HAVE_TERMIO_H} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_CLAPACK_H ${HAVE_CLAPACK_H} -/* define if termios.h exists */ -#cmakedefine HAVE_TERMIOS_H ${HAVE_TERMIOS_H} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_CL_CL_H ${HAVE_CL_CL_H} -/* define if unistd.h exists */ -#cmakedefine HAVE_UNISTD_H ${HAVE_UNISTD_H} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_DFFTW_H ${HAVE_DFFTW_H} -/* define if values.h exists */ -#cmakedefine HAVE_VALUES_H ${HAVE_VALUES_H} +/* Define to 1 if you have the `drand48' function. */ +#cmakedefine HAVE_DRAND48 ${HAVE_DRAND48} -/* define if zlib.h exists */ -#cmakedefine HAVE_ZLIB_H ${HAVE_ZLIB_H} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_F2C_H ${HAVE_F2C_H} -/* define if bzlib.h exists */ -#cmakedefine HAVE_BZLIB_H ${HAVE_BZLIB_H} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_FFTW3_H ${HAVE_FFTW3_H} -/* define if zstd.h exists */ -#cmakedefine HAVE_ZSTD_H ${HAVE_ZSTD_H} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_FFTW_H ${HAVE_FFTW_H} -/* define if sys/ioctl.h exists */ -#cmakedefine HAVE_SYS_IOCTL_H ${HAVE_SYS_IOCTL_H} +/* Define if fseeko (and presumably ftello) exists and is declared. */ +#cmakedefine HAVE_FSEEKO ${HAVE_FSEEKO} -/* define if sys/mtio.h exists */ -#cmakedefine HAVE_SYS_MTIO_H ${HAVE_SYS_MTIO_H} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_FT2BUILD_H ${HAVE_FT2BUILD_H} -/* define if sys/resource.h exists */ -#cmakedefine HAVE_SYS_RESOURCE_H ${HAVE_SYS_RESOURCE_H} +/* Define to 1 if you have the `ftime' function. */ +#cmakedefine HAVE_FTIME ${HAVE_FTIME} -/* define if sys/time.h exists */ -#cmakedefine HAVE_SYS_TIME_H ${HAVE_SYS_TIME_H} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_G2C_H ${HAVE_G2C_H} -/* define if time.h and sys/time.h can be included together */ -#cmakedefine TIME_WITH_SYS_TIME ${TIME_WITH_SYS_TIME} +/* Define to 1 if GDAL is to be used. */ +#cmakedefine HAVE_GDAL ${HAVE_GDAL} -/* define if sys/timeb.h exists */ -#cmakedefine HAVE_SYS_TIMEB_H ${HAVE_SYS_TIMEB_H} +/* Define to 1 if GEOS is to be used. */ +#cmakedefine HAVE_GEOS ${HAVE_GEOS} -/* define if sys/types.h exists */ -#cmakedefine HAVE_SYS_TYPES_H ${HAVE_SYS_TYPES_H} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_GEOS_C_H ${HAVE_GEOS_C_H} -/* define if sys/utsname.h exists */ -#cmakedefine HAVE_SYS_UTSNAME_H ${HAVE_SYS_UTSNAME_H} +/* Define to 1 if you have the `gethostname' function. */ +#cmakedefine HAVE_GETHOSTNAME ${HAVE_GETHOSTNAME} -/* define if g2c.h exists */ -#cmakedefine HAVE_G2C_H ${HAVE_G2C_H} +/* Define to 1 if you have the `gettimeofday' function. */ +#cmakedefine HAVE_GETTIMEOFDAY ${HAVE_GETTIMEOFDAY} -/* define if f2c.h exists */ -#cmakedefine HAVE_F2C_H ${HAVE_F2C_H} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_GL_GLU_H ${HAVE_GL_GLU_H} -/* define if cblas.h exists */ -#cmakedefine HAVE_CBLAS_H ${HAVE_CBLAS_H} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_GL_GL_H ${HAVE_GL_GL_H} -/* define if clapack.h exists */ -#cmakedefine HAVE_CLAPACK_H ${HAVE_CLAPACK_H} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_ICONV_H ${HAVE_ICONV_H} -/* define if "long long" is available */ -#cmakedefine HAVE_LONG_LONG_INT ${HAVE_LONG_LONG_INT} +/* Define to 1 if "int64_t" is available. */ +#cmakedefine HAVE_INT64_T ${HAVE_INT64_T} -/* Define the return type of signal handlers */ -#define RETSIGTYPE ${RETSIGTYPE} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_INTTYPES_H ${HAVE_INTTYPES_H} -/* define if ftime() exists */ -#cmakedefine HAVE_FTIME ${HAVE_FTIME} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_LANGINFO_H ${HAVE_LANGINFO_H} -/* define if gethostname() exists */ -#cmakedefine HAVE_GETHOSTNAME ${HAVE_GETHOSTNAME} +/* Define to 1 if ATLAS exists. */ +#cmakedefine HAVE_LIBATLAS ${HAVE_LIBATLAS} -/* define if gettimeofday() exists */ -#cmakedefine HAVE_GETTIMEOFDAY ${HAVE_GETTIMEOFDAY} +/* Define to 1 if BLAS exists. */ +#cmakedefine HAVE_LIBBLAS ${HAVE_LIBBLAS} -/* define if lseek() exists */ -#cmakedefine HAVE_LSEEK ${HAVE_LSEEK} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_LIBINTL_H ${HAVE_LIBINTL_H} -/* define if time() exists */ -#cmakedefine HAVE_TIME ${HAVE_TIME} +/* Define to 1 if LAPACK exists. */ +#cmakedefine HAVE_LIBLAPACK ${HAVE_LIBLAPACK} -/* define if uname() exists */ -#cmakedefine HAVE_UNAME ${HAVE_UNAME} +/* Define to 1 if liblas exists. */ +#cmakedefine HAVE_LIBLAS {HAVE_LIBLAS} -/* define if seteuid() exists */ -#cmakedefine HAVE_SETEUID ${HAVE_SETEUID} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_LIBLAS_CAPI_LIBLAS_H ${HAVE_LIBLAS_CAPI_LIBLAS_H} -/* define if setpriority() exists */ -#cmakedefine HAVE_SETPRIORITY ${HAVE_SETPRIORITY} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_LIBPQ_FE_H ${HAVE_LIBPQ_FE_H} -/* define if setreuid() exists */ -#cmakedefine HAVE_SETREUID ${HAVE_SETREUID} +/* Define to 1 if using LIBSVM. */ +#cmakedefine HAVE_LIBSVM ${HAVE_LIBSVM} -/* define if setruid() exists */ -#cmakedefine SETPGRP_VOID ${SETPGRP_VOID} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_LIBSVM_SVM_H ${HAVE_LIBSVM_SVM_H} -/* define if setpgrp() takes no argument */ -#cmakedefine SETPGRP_VOID ${SETPGRP_VOID} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_LIMITS_H ${HAVE_LIMITS_H} -/* define if drand48() exists */ -#cmakedefine HAVE_DRAND48 ${HAVE_DRAND48} +/* Define to 1 if "long long int" is available. */ +#cmakedefine HAVE_LONG_LONG_INT ${HAVE_LONG_LONG_INT} -/* define if nanosleep() exists */ -#cmakedefine HAVE_NANOSLEEP ${HAVE_NANOSLEEP} +/* Define to 1 if you have the `lseek' function. */ +#cmakedefine HAVE_LSEEK ${HAVE_LSEEK} -/* define if asprintf() exists */ -#cmakedefine HAVE_ASPRINTF ${HAVE_ASPRINTF} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_MYSQL_H ${HAVE_MYSQL_H} -/* define if SQLite is to be used */ -#cmakedefine HAVE_SQLITE ${HAVE_SQLITE} +/* Define to 1 if you have the `nanosleep' function. */ +#cmakedefine HAVE_NANOSLEEP ${HAVE_NANOSLEEP} -/* define if postgres is to be used */ -#cmakedefine HAVE_POSTGRES ${HAVE_POSTGRES} +/* Define to 1 if NetCDF exists. */ +#cmakedefine HAVE_NETCDF ${HAVE_NETCDF} -/* define if MySQL is to be used */ -#cmakedefine HAVE_MYSQL_H ${HAVE_MYSQL_H} +/* Define to 1 if you have the `nice' function. */ +#cmakedefine HAVE_NICE ${HAVE_NICE} -/* define if GDAL is to be used */ -#cmakedefine HAVE_GDAL ${HAVE_GDAL} +/* Define to 1 if OGR is to be used. */ +#cmakedefine HAVE_OGR {HAVE_OGR} -/* define if OGR is to be used */ -#cmakedefine HAVE_OGR ${HAVE_OGR} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_OMP_H ${HAVE_OMP_H} -/* define if GEOS is to be used */ -#cmakedefine HAVE_GEOS ${HAVE_GEOS} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_OPENCL_OPENCL_H ${HAVE_OPENCL_OPENCL_H} -/* define if postgres client header exists */ -#cmakedefine HAVE_LIBPQ_FE_H ${HAVE_LIBPQ_FE_H} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_OPENGL_GLU_H ${HAVE_OPENGL_GLU_H} -/* define if PQcmdTuples in lpq */ -#cmakedefine HAVE_PQCMDTUPLES ${HAVE_PQCMDTUPLES} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_OPENGL_GL_H ${HAVE_OPENGL_GL_H} -/* define if ODBC exists */ -#cmakedefine HAVE_SQL_H ${HAVE_SQL_H} +/* Define to 1 if glXCreatePbuffer exists. */ +#cmakedefine HAVE_PBUFFERS ${HAVE_PBUFFERS} -/* define if tiffio.h exists */ -#cmakedefine HAVE_TIFFIO_H ${HAVE_TIFFIO_H} +/* Define to 1 if PDAL exists. */ +#cmakedefine HAVE_PDAL ${HAVE_PDAL} -/* define if NetCDF exists */ -#cmakedefine HAVE_NETCDF ${HAVE_NETCDF} +/* Define to 1 if PDAL NoFilenameWriter is present. */ +#cmakedefine HAVE_PDAL_NOFILENAMEWRITER ${HAVE_PDAL_NOFILENAMEWRITER} + +/* Define to 1 if glXCreateGLXPixmap exists. */ +#cmakedefine HAVE_PIXMAPS ${HAVE_PIXMAPS} -/* define if png.h exists */ +/* Define to 1 if you have the header file. */ #cmakedefine HAVE_PNG_H ${HAVE_PNG_H} -/* define if jpeglib.h exists */ -#cmakedefine HAVE_JPEGLIB_H ${HAVE_JPEGLIB_H} +/* Define to 1 if PostgreSQL is to be used. */ +#cmakedefine HAVE_POSTGRES ${HAVE_POSTGRES} + +/* Define to 1 if PQcmdTuples in lpq. */ +#cmakedefine HAVE_PQCMDTUPLES ${HAVE_PQCMDTUPLES} + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_PROJ_API_H ${HAVE_PROJ_API_H} -/* define if proj.h exists */ -#cmakedefine PROJMAJOR ${PROJMAJOR} +/* Define to 1 if you have the header file. */ #cmakedefine HAVE_PROJ_H ${HAVE_PROJ_H} -/* define if fftw3.h exists */ -#cmakedefine HAVE_FFTW3_H ${HAVE_FFTW3_H} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_PTHREAD_H ${HAVE_PTHREAD_H} -/* define if fftw.h exists */ -#cmakedefine HAVE_FFTW_H ${HAVE_FFTW_H} +/* Define to 1 if you have the `putenv' function. */ +#cmakedefine HAVE_PUTENV ${HAVE_PUTENV} -/* define if dfftw.h exists */ -#cmakedefine HAVE_DFFTW_H ${HAVE_DFFTW_H} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_READLINE_HISTORY_H ${HAVE_READLINE_HISTORY_H} -/* define if BLAS exists */ -#cmakedefine HAVE_LIBBLAS ${HAVE_LIBBLAS} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_READLINE_READLINE_H ${HAVE_READLINE_READLINE_H} -/* define if LAPACK exists */ -#cmakedefine HAVE_LIBLAPACK ${HAVE_LIBLAPACK} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_REGEX_H ${HAVE_REGEX_H} -/* define if ATLAS exists */ -#cmakedefine HAVE_LIBATLAS ${HAVE_LIBATLAS} +/* Define to 1 if you have the `setenv' function. */ +#cmakedefine HAVE_SETENV ${HAVE_SETENV} -/* define if dbm.h exists */ -#cmakedefine HAVE_DBM_H ${HAVE_DBM_H} +/* Define to 1 if you have the `seteuid' function. */ +#cmakedefine HAVE_SETEUID ${HAVE_SETEUID} -/* define if readline exists */ -#cmakedefine HAVE_READLINE_READLINE_H ${HAVE_READLINE_READLINE_H} +/* Define to 1 if you have the `setpriority' function. */ +#cmakedefine HAVE_SETPRIORITY ${HAVE_SETPRIORITY} -/* define if history exists */ -#cmakedefine HAVE_READLINE_HISTORY_H ${HAVE_READLINE_HISTORY_H} +/* Define to 1 if you have the `setreuid' function. */ +#cmakedefine HAVE_SETREUID ${HAVE_SETREUID} -/* define if ft2build.h exists */ -#cmakedefine HAVE_FT2BUILD_H ${HAVE_FT2BUILD_H} +/* Define to 1 if you have the `setruid' function. */ +#cmakedefine HAVE_SETRUID ${HAVE_SETRUID} -/* Whether or not we are using G_socks for display communications */ -#cmakedefine USE_G_SOCKS ${USE_G_SOCKS} +/* define if socket() exists */ +#cmakedefine HAVE_SOCKET ${HAVE_SOCKET} -/* define if X is disabled or unavailable */ -#cmakedefine X_DISPLAY_MISSING ${X_DISPLAY_MISSING} +/* Define to 1 if SQLite is to be used. */ +#cmakedefine HAVE_SQLITE ${HAVE_SQLITE} -/* define if libintl.h exists */ -#cmakedefine HAVE_LIBINTL_H ${HAVE_LIBINTL_H} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SQLITE3_H ${HAVE_SQLITE3_H} -/* define if iconv.h exists */ -#cmakedefine HAVE_ICONV_H ${HAVE_ICONV_H} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SQL_H ${HAVE_SQLITE3_H} -/* define if NLS requested */ -#cmakedefine USE_NLS ${USE_NLS} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDINT_H ${HAVE_STDINT_H} -/* define if putenv() exists */ -#cmakedefine HAVE_PUTENV ${HAVE_PUTENV} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDIO_H ${HAVE_STDIO_H} -/* define if setenv() exists */ -#cmakedefine HAVE_SETENV ${HAVE_SETENV} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDLIB_H ${HAVE_STDLIB_H} -/* define if socket() exists */ -#cmakedefine HAVE_SOCKET ${HAVE_SOCKET} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STRINGS_H ${HAVE_STRINGS_H} -/* define if glXCreatePbuffer exists */ -#cmakedefine HAVE_PBUFFERS ${HAVE_PBUFFERS} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STRING_H ${HAVE_STRING_H} -/* define if glXCreateGLXPixmap exists */ -#cmakedefine HAVE_PIXMAPS ${HAVE_PIXMAPS} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SVM_H ${HAVE_SVM_H} -/* define if OpenGL uses X11 */ -#cmakedefine OPENGL_X11 ${OPENGL_X11} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_IOCTL_H ${HAVE_SYS_IOCTL_H} + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_MTIO_H ${HAVE_SYS_MTIO_H} + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_RESOURCE_H ${HAVE_SYS_RESOURCE_H} + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_STAT_H ${HAVE_SYS_STAT_H} + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_TIMEB_H ${HAVE_SYS_TIMEB_H} + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_TIME_H ${HAVE_SYS_TIME_H} + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_TYPES_H ${HAVE_SYS_TYPES_H} -/* define if OpenGL uses Aqua (MacOS X) */ +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_UTSNAME_H ${HAVE_SYS_UTSNAME_H} + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_TERMIOS_H ${HAVE_TERMIOS_H} + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_TERMIO_H ${HAVE_TERMIO_H} + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_TIFFIO_H ${HAVE_TIFFIO_H} + +/* Define to 1 if you have the `time' function. */ +#cmakedefine HAVE_TIME ${HAVE_TIME} + +/* Define to 1 if you have the `uname' function. */ +#cmakedefine HAVE_UNAME ${HAVE_UNAME} + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_UNISTD_H ${HAVE_UNISTD_H} + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_VALUES_H ${HAVE_VALUES_H} + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_WINDOWS_H ${HAVE_WINDOWS_H} + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_ZLIB_H ${HAVE_ZLIB_H} + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_ZSTD_H ${HAVE_ZSTD_H} + +// TODO: look at this for a more proper fix +/* Define to 1 if OpenGL uses Aqua (MacOS X). */ #cmakedefine OPENGL_AQUA ${OPENGL_AQUA} -#define OPENGL_AGL 1 +#cmakedefine OPENGL_AGL ${OPENGL_AQUA} -/* define if OpenGL uses Windows */ +/* Define to 1 if OpenGL uses Windows. */ #cmakedefine OPENGL_WINDOWS ${OPENGL_WINDOWS} -/* define if regex.h exists */ -#cmakedefine HAVE_REGEX_H ${HAVE_REGEX_H} +/* Define to 1 if OpenGL uses X11. */ +#cmakedefine OPENGL_X11 ${OPENGL_X11} -/* define if pcre.h exists */ -#cmakedefine HAVE_PCRE_H ${HAVE_PCRE_H} +/* Define to the address where bug reports for this package should be sent. */ +#cmakedefine PACKAGE_BUGREPORT ${PACKAGE_BUGREPORT} -/* define if pthread.h exists */ -#cmakedefine HAVE_PTHREAD_H ${HAVE_PTHREAD_H} +/* Define to the full name of this package. */ +#cmakedefine PACKAGE_NAME ${PACKAGE_NAME} -/* define if fseeko() exists */ -#cmakedefine HAVE_FSEEKO ${HAVE_FSEEKO} +/* Define to the full name and version of this package. */ +#cmakedefine PACKAGE_STRING ${PACKAGE_STRING} + +/* Define to the one symbol short name of this package. */ +#cmakedefine PACKAGE_TARNAME ${PACKAGE_TARNAME} + +/* Define to the home page for this package. */ +#cmakedefine PACKAGE_URL ${PACKAGE_URL} + +/* Define to the version of this package. */ +#cmakedefine PACKAGE_VERSION ${PACKAGE_VERSION} + +/* Define to 1 if the `setpgrp' function requires zero arguments. */ +#cmakedefine SETPGRP_VOID ${SETPGRP_VOID} + +/* Define to 1 for Windows static build. */ +#cmakedefine STATIC_BUILD ${STATIC_BUILD} + +/* Define to 1 if all of the C90 standard headers exist (not just the ones + required in a freestanding environment). This macro is provided for + backward compatibility; new code need not use it. */ +#cmakedefine STDC_HEADERS ${STDC_HEADERS} + +/* Define to 1 if NLS requested. */ +#cmakedefine USE_NLS ${USE_NLS} + +/* Define to 1 if using old PROJ version 4 API. */ +#cmakedefine USE_PROJ4API ${USE_PROJ4API} + +/* Define to 1 if the X Window System is missing or not being used. */ +#cmakedefine X_DISPLAY_MISSING ${X_DISPLAY_MISSING} + +/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a + `char[]'. */ +#cmakedefine YYTEXT_POINTER ${YYTEXT_POINTER} + +/* Number of bits in a file offset, on hosts where this is settable. */ +#cmakedefine _FILE_OFFSET_BITS ${_FILE_OFFSET_BITS} + +/* Define to make fseeko visible on some hosts (e.g. glibc 2.2). */ +#cmakedefine _LARGEFILE_SOURCE ${_LARGEFILE_SOURCE} + +/* Define for large files, on AIX-style hosts. */ +#cmakedefine _LARGE_FILES ${_LARGE_FILES} + +/* Define to 1 to enable threading extensions on Solaris. */ +#cmakedefine _POSIX_PTHREAD_SEMANTICS ${_POSIX_PTHREAD_SEMANTICS} + +/* Define to 1 for _REENTRANT flag (for SunOS). */ +#cmakedefine _REENTRANT ${_REENTRANT} /* * configuration information solely dependent on the above diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 6248150480e..bf100e95d27 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -20,30 +20,31 @@ build_library_in_subdir( add_subdirectory(proj) file(GLOB raster_SRCS "./raster/*.c") -# list(APPEND raster_SRCS "./gis/gisinit.c") build_library_in_subdir( raster DEFS - "-DGDAL_DYNAMIC=1;-DGDAL_LINK=1" + "-DGDAL_LINK=1" SOURCES ${raster_SRCS} DEPENDS GDAL PROJ + grass_gis grass_gproj) if(TARGET LAPACK) - target_link_libraries(grass_raster LAPACK) + target_link_libraries(grass_raster PRIVATE LAPACK) endif() if(CMAKE_SYSTEM_NAME MATCHES "Linux") find_library(DL_LIBRARY dl) mark_as_advanced(DL_LIBRARY) - target_link_libraries(grass_raster ${DL_LIBRARY}) + target_link_libraries(grass_raster PRIVATE ${DL_LIBRARY}) endif() -configure_file(external/ccmath/ccmath.h ${GISBASE}/include/grass/ccmath_grass.h - COPYONLY) +configure_file( + 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") @@ -66,7 +67,6 @@ build_library_in_subdir( build_library_in_subdir(linkm) file(GLOB pngdriver_SRCS "./pngdriver/*.c") -# list(APPEND pngdriver_SRCS "./driver/init.c") if(NOT WITH_LIBPNG) list(FILTER pngdriver_SRCS EXCLUDE REGEX "./pngdriver/.*_png.c") endif() @@ -80,26 +80,33 @@ build_library_in_subdir( ZLIB OPTIONAL_DEPENDS LIBPNG) -# INCLUDES "./driver") file(GLOB psdriver_SRCS "./psdriver/*.c") -list(APPEND psdriver_SRCS "./driver/init.c") build_library_in_subdir( psdriver SOURCES ${psdriver_SRCS} DEPENDS grass_driver + grass_gis INCLUDES "./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}) file(GLOB htmldriver_SRCS "./htmldriver/*.c") -list(APPEND htmldriver_SRCS "./driver/init.c") build_library_in_subdir( htmldriver SOURCES ${htmldriver_SRCS} DEPENDS + grass_gis grass_driver INCLUDES "./driver") @@ -107,17 +114,15 @@ build_library_in_subdir( set(_grass_display_DEFS) set(_grass_display_DEPENDS grass_driver grass_raster grass_htmldriver - grass_pngdriver grass_psdriver) + grass_pngdriver grass_psdriver grass_gis) if(WITH_CAIRO) - - set(_cairodriver_DEPENDS CAIRO FREETYPE grass_driver) + set(_cairodriver_DEPENDS CAIRO FREETYPE grass_gis grass_driver ICONV) if(WITH_X11) list(APPEND _cairodriver_DEPENDS X11) endif() file(GLOB cairodriver_SRCS "./cairodriver/*.c") - list(APPEND cairodriver_SRCS "./driver/init.c") build_library_in_subdir(cairodriver DEPENDS ${_cairodriver_DEPENDS} SOURCES ${cairodriver_SRCS}) @@ -141,9 +146,9 @@ add_subdirectory(fonts) add_subdirectory(vector) -build_library_in_subdir(imagery DEPENDS grass_vector) +build_library_in_subdir(imagery DEPENDS grass_gis grass_vector grass_raster) -build_library_in_subdir(cluster DEPENDS grass_imagery) +build_library_in_subdir(cluster DEPENDS grass_imagery grass_gis grass_raster) build_library_in_subdir(rowio DEPENDS grass_gis) @@ -155,14 +160,19 @@ add_subdirectory(rst) build_library_in_subdir( lidar DEPENDS + grass_gis grass_vector grass_raster grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gmath grass_segment HEADERS "lidar.h") -build_library_in_subdir(raster3d DEPENDS grass_raster) +build_library_in_subdir(raster3d NAME grass_raster3d DEPENDS grass_raster + grass_gis) build_program_in_subdir( raster3d/test @@ -179,25 +189,31 @@ build_library_in_subdir( "N_*.h" DEPENDS grass_gis + grass_raster grass_raster3d grass_gmath + LIBM OPTIONAL_DEPENDS OPENMP) build_library_in_subdir(dspf DEPENDS grass_gis) -build_library_in_subdir(symbol NAME grass_sym DEPENDS grass_gis) +build_library_in_subdir(symbol NAME grass_symb DEPENDS grass_gis) add_custom_command( - TARGET grass_sym + TARGET grass_symb POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_directory - ${CMAKE_CURRENT_SOURCE_DIR}/symbol/symbol ${GISBASE}/etc/symbol) + 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) -build_library_in_subdir(cdhc DEPENDS grass_raster) +build_library_in_subdir(cdhc DEPENDS grass_gis grass_raster) -build_library_in_subdir(stats DEPENDS grass_raster) +build_library_in_subdir(stats DEPENDS grass_gis grass_raster) build_library_in_subdir(arraystats DEPENDS grass_gis) @@ -205,10 +221,14 @@ 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 - grass_bitmap OPENGL TIFF) @@ -220,6 +240,7 @@ if(WITH_OPENGL) grass_vector grass_bitmap grass_ogsf + grass_gis OPENGL TIFF) endif() @@ -228,8 +249,10 @@ add_subdirectory(temporal) build_library_in_subdir(iostream SRC_REGEX "*.cpp" DEPENDS grass_gis) -build_library_in_subdir(manage DEPENDS grass_raster grass_vector grass_raster3d) -file(COPY manage/element_list DESTINATION ${GISBASE}/etc) -install(FILES ${GISBASE}/etc/element_list DESTINATION etc) +build_library_in_subdir(manage DEPENDS grass_gis grass_raster grass_vector + grass_raster3d) +file(COPY manage/element_list DESTINATION ${OUTDIR}/${GRASS_INSTALL_ETCDIR}) +install(FILES ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/element_list + DESTINATION ${GRASS_INSTALL_ETCDIR}) -build_library_in_subdir(calc DEPENDS grass_raster) +build_library_in_subdir(calc DEPENDS grass_raster grass_gis) diff --git a/lib/db/CMakeLists.txt b/lib/db/CMakeLists.txt index 5fc3119b06e..e7d4a96b7f7 100644 --- a/lib/db/CMakeLists.txt +++ b/lib/db/CMakeLists.txt @@ -23,17 +23,21 @@ build_library_in_subdir( grass_dbmiclient DEPENDS grass_dbmibase + grass_gis INCLUDES "./dbmi_base") -build_library_in_subdir(stubs NAME grass_dstubs DEPENDS grass_dbmibase) +build_library_in_subdir(stubs NAME grass_dbstubs DEPENDS grass_gis + grass_dbmibase) build_library_in_subdir( dbmi_driver NAME grass_dbmidriver DEPENDS - grass_dstubs + grass_dbmibase + grass_dbstubs + grass_gis INCLUDES "./dbmi_base") diff --git a/lib/db/sqlp/CMakeLists.txt b/lib/db/sqlp/CMakeLists.txt index eeead261d8a..6cdc6a88ac8 100644 --- a/lib/db/sqlp/CMakeLists.txt +++ b/lib/db/sqlp/CMakeLists.txt @@ -10,4 +10,4 @@ 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) -build_module(NAME grass_sqlp SOURCES "${sqlp_SRCS}") +build_module(NAME grass_sqlp SOURCES "${sqlp_SRCS}" NO_DOCS) diff --git a/lib/fonts/CMakeLists.txt b/lib/fonts/CMakeLists.txt index 27a0ae8a7eb..5bfa8020b77 100644 --- a/lib/fonts/CMakeLists.txt +++ b/lib/fonts/CMakeLists.txt @@ -1,5 +1,43 @@ -add_custom_target( - fonts - COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/fonts - COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/fonts/[a-z]*.[a-z]* ${GISBASE}/fonts) +set(font_files + cyrilc.hmp + fonts.table + gothgbt.hmp + gothgrt.hmp + gothitt.hmp + greekc.hmp + greekcs.hmp + greekp.hmp + greeks.hmp + hersh.oc1 + hersh.oc2 + hersh.oc3 + hersh.oc4 + italicc.hmp + italiccs.hmp + italict.hmp + romanc.hmp + romancs.hmp + romand.hmp + romans.hmp + romant.hmp + scriptc.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}) + +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}) +endforeach() + +install(FILES ${font_files} DESTINATION ${GRASS_INSTALL_FONTSDIR}) diff --git a/lib/gis/CMakeLists.txt b/lib/gis/CMakeLists.txt index 315c5b8a79f..f63f07be899 100644 --- a/lib/gis/CMakeLists.txt +++ b/lib/gis/CMakeLists.txt @@ -164,7 +164,7 @@ build_module( BZIP2 ZSTD ICONV - REGEX + # REGEX POSTGRES DEFS "${grass_gis_DEFS}") @@ -172,31 +172,34 @@ build_module( add_custom_command( TARGET grass_gis POST_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/etc/proj + COMMAND ${CMAKE_COMMAND} -E make_directory + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/proj COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/colors - ${GISBASE}/etc/colors/ + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/colors COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/ellipse.table - ${GISBASE}/etc/proj/ + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/proj COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/datum.table - ${GISBASE}/etc/proj/ - COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/datumtransform.table ${GISBASE}/etc/proj/ + ${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 - ${GISBASE}/etc/proj/ + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/proj COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/state27 - ${GISBASE}/etc/proj/ + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/proj COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/state83 - ${GISBASE}/etc/proj/ + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/proj COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/projections - ${GISBASE}/etc/proj/ + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/proj COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/ellipse.table.solar.system ${GISBASE}/etc/proj/ + ${CMAKE_CURRENT_SOURCE_DIR}/ellipse.table.solar.system + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/proj COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/colors.desc - ${GISBASE}/etc/ + ${OUTDIR}/${GRASS_INSTALL_ETCDIR} COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/renamed_options - ${GISBASE}/etc/) -install(DIRECTORY colors DESTINATION etc) + ${OUTDIR}/${GRASS_INSTALL_ETCDIR}) +install(DIRECTORY colors DESTINATION ${GRASS_INSTALL_ETCDIR}) install( FILES ellipse.table ellipse.table.solar.system @@ -206,13 +209,13 @@ install( state27 state83 projections - DESTINATION etc/proj) -install(FILES colors.desc renamed_options DESTINATION etc) + DESTINATION ${GRASS_INSTALL_ETCDIR}/proj) +install(FILES colors.desc renamed_options DESTINATION ${GRASS_INSTALL_ETCDIR}) if(UNIX) - target_link_libraries(grass_gis LIBM) + target_link_libraries(grass_gis PRIVATE LIBM) endif() if(MSVC) - target_link_libraries(grass_gis PCRE) + target_link_libraries(grass_gis PRIVATE PCRE) endif() diff --git a/lib/init/CMakeLists.txt b/lib/init/CMakeLists.txt index ba18ea68045..ad1e6ab1fb7 100644 --- a/lib/init/CMakeLists.txt +++ b/lib/init/CMakeLists.txt @@ -1,10 +1,20 @@ # #for i18N support file(GLOB init_HTMLFILES "*.html") +add_custom_target(ADD_INIT_DOCS ALL COMMENT "Generate init docs.") + +if(WITH_DOCS) + foreach(html_file ${init_HTMLFILES}) + get_filename_component(filename ${html_file} NAME_WLE) + generate_html(TARGET ADD_INIT_DOCS NAME ${filename}) + endforeach() +endif() # START_UP is the variable used in grass.py, grass.sh.in and grass.bat.in -set(START_UP "grass${GRASS_VERSION_MAJOR}${GRASS_VERSION_MINOR}.py") +# set(START_UP "grass${GRASS_VERSION_MAJOR}${GRASS_VERSION_MINOR}.py") +set(START_UP "grass") if(WIN32) + set(START_UP "${START_UP}.py") set(script_file_name "grass.bat") set(script_input_file_name ${script_file_name}.in) else() @@ -13,7 +23,6 @@ else() endif() file(TO_NATIVE_PATH ${CMAKE_BINARY_DIR}/bin BINARY_DIR) - set(CONFIG_PROJSHARE) get_filename_component(PROJ_INSTALL_PREFIX ${PROJ_INCLUDE_DIR} PATH) if(DEFINED ENV{PROJSHARE}) @@ -35,7 +44,7 @@ endif() mark_as_advanced(gdal_share_dir) file(TO_NATIVE_PATH "${gdal_share_dir}/gdal" GDAL_DATA) - +#[==[ if(MSVC) find_path(geotiff_share_dir "epsg_csv" PATH_SUFFIXES share) mark_as_advanced(geotiff_share_dir) @@ -45,24 +54,25 @@ if(MSVC) message(FATAL_ERROR "Cannot find share/epsg_csv.") endif() endif() # MSVC - +]==] get_filename_component(GDAL_DIR ${GDAL_LIBRARY} PATH) get_filename_component(GDAL_DIR ${GDAL_DIR} PATH) file(TO_NATIVE_PATH ${GDAL_DIR}/bin DEPS_DLL_PATH) list(APPEND DLL_PATH_LIST ${DEPS_DLL_PATH}) -file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} GRASS_PYTHON) +# file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} GRASS_PYTHON) # For install tree (first do install tree) -if(UNIX OR MINGW) - if(DEFINED ENV{LD_LIBRARY_PATH}) - set(LD_LIBRARY_PATH_VAR "${CMAKE_INSTALL_PREFIX}/lib:$ENV{LD_LIBRARY_PATH}") - else() - set(LD_LIBRARY_PATH_VAR "${CMAKE_INSTALL_PREFIX}/lib") - endif() +set(LD_LIBRARY_PATH_VAR "LD_LIBRARY_PATH") + +if(APPLE) + set(LD_LIBRARY_PATH_VAR "LD_RUN_PATH") +elseif(WIN32) + set(LD_LIBRARY_PATH_VAR "PATH") endif() +#[==[ SKIP THIS if(WIN32) set(app_data_dir $ENV{APPDATA}) if(NOT EXISTS ${app_data_dir}) @@ -86,16 +96,26 @@ if(NOT MSVC) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/bashrc DESTINATION ${grass_config_dir}) endif() +]==] # configure and install grass.py -configure_file(grass.py ${CMAKE_CURRENT_BINARY_DIR}/etc/${START_UP} @ONLY) -install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/etc/${START_UP} DESTINATION etc) +set(SET_GISBASE ${RUNTIME_GISBASE}) +configure_file(grass.py ${OUTDIR}/${CMAKE_INSTALL_BINDIR}/${START_UP} @ONLY) + +set(SET_GISBASE ${GISBASE}) +configure_file(grass.py ${CMAKE_CURRENT_BINARY_DIR}/${START_UP} @ONLY) +unset(SET_GISBASE) + +install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${START_UP} + DESTINATION ${CMAKE_INSTALL_BINDIR}) +#[====================[ SKIP THIS # configure and install grass wrapper script (grass.bat or grass.sh configure_file(${script_input_file_name} ${CMAKE_CURRENT_BINARY_DIR}/${script_file_name} @ONLY) install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${script_file_name} - DESTINATION bin) + DESTINATION ${CMAKE_INSTALL_BINDIR}) + # For build tree file(TO_NATIVE_PATH ${GISBASE} gisbase_init_dir) @@ -134,14 +154,21 @@ else() endif() endif() endif() +]====================] + +file(TO_NATIVE_PATH "${OUTDIR}/${GISBASE_DIR}" gisbase_init_dir) file(COPY ${CMAKE_SOURCE_DIR}/demolocation/PERMANENT - DESTINATION ${GISBASE}/demolocation/) + DESTINATION ${OUTDIR}/${GRASS_INSTALL_DEMODIR}) -configure_file(${CMAKE_SOURCE_DIR}/demolocation/grassrc.cmake.in - "${grass_config_dir}/rc" @ONLY) +install(DIRECTORY ${CMAKE_SOURCE_DIR}/demolocation/PERMANENT/ + DESTINATION ${GRASS_INSTALL_DEMODIR}/PERMANENT) -file(TO_NATIVE_PATH ${GISBASE}/bin grass_dll_dir) +set(GISDBASE ${OUTDIR}/${GISBASE_DIR}) +configure_file(${CMAKE_SOURCE_DIR}/demolocation/grassrc.tmpl "${GISRC}" @ONLY) +unset(GISDBASE) + +file(TO_NATIVE_PATH ${OUTDIR}/${GRASS_INSTALL_BINDIR} grass_dll_dir) set(DLL_PATH_LIST) list(APPEND DLL_PATH_LIST ${grass_dll_dir}) separate_arguments(DLL_PATH_LIST) @@ -149,21 +176,24 @@ separate_arguments(DLL_PATH_LIST) set(LD_LIBRARY_PATH_VAR) if(UNIX OR MINGW) if(DEFINED ENV{LD_LIBRARY_PATH}) - set(LD_LIBRARY_PATH_VAR "${GISBASE}/lib:$ENV{LD_LIBRARY_PATH}") + set(LD_LIBRARY_PATH_VAR + "${OUTDIR}/${GRASS_INSTALL_LIBDIR}:$ENV{LD_LIBRARY_PATH}") else() - set(LD_LIBRARY_PATH_VAR "${GISBASE}/lib") + set(LD_LIBRARY_PATH_VAR "${OUTDIR}/${GRASS_INSTALL_LIBDIR}") endif() endif() -message(STATUS "GISBASE (build) : ${gisbase_init_dir}") +message(STATUS "GISBASE (build) : ${GISBASE_DIR}") message(STATUS "grass config directory (build): ${grass_config_dir}") +#[[ if(NOT MSVC) configure_file(env.sh ${grass_config_dir}/bashrc @ONLY) - message(STATUS "env variables: ${GISBASE}/etc/config/bashrc") + message(STATUS "env variables: ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/config/bashrc") endif() +]] -configure_file(grass.py ${GISBASE}/etc/${START_UP} @ONLY) -message(STATUS "Startup (build): ${GISBASE}/${script_file_name}") -message(STATUS "gisrc (build): ${GISBASE}/etc/config/rc") +# configure_file(grass.py ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/${START_UP} @ONLY) +# message(STATUS "Startup (build): ${GISBASE}/${script_file_name}") +message(STATUS "gisrc (build): ${GISRC}") # finish installtree and buildtree configurations @@ -175,7 +205,8 @@ build_program( PACKAGE "grasslibs" RUNTIME_OUTPUT_DIR - etc) + ${GRASS_INSTALL_ETCBINDIR} + NO_DOCS) build_program( NAME @@ -185,7 +216,8 @@ build_program( PACKAGE "grasslibs" RUNTIME_OUTPUT_DIR - etc) + ${GRASS_INSTALL_ETCBINDIR} + NO_DOCS) build_program( NAME @@ -197,7 +229,8 @@ build_program( PACKAGE "grasslibs" RUNTIME_OUTPUT_DIR - etc) + ${GRASS_INSTALL_ETCBINDIR} + NO_DOCS) build_program( NAME @@ -210,10 +243,18 @@ build_program( PACKAGE "grasslibs" RUNTIME_OUTPUT_DIR - etc) + ${GRASS_INSTALL_ETCBINDIR} + NO_DOCS) if(MINGW) - build_program(NAME winlocale SOURCES winlocale.c RUNTIME_OUTPUT_DIR etc) + build_program( + NAME + winlocale + SOURCES + winlocale.c + RUNTIME_OUTPUT_DIR + ${GRASS_INSTALL_ETCBINDIR} + NO_DOCS) endif() set(VERSIONNUMBER_CONTENTS "${GRASS_VERSION_NUMBER}") @@ -222,18 +263,17 @@ if(GRASS_VERSION_GIT) "${VERSIONNUMBER_CONTENTS} ${GRASS_VERSION_GIT}") endif() -file(WRITE ${CMAKE_BINARY_DIR}/gisbase/etc/VERSIONNUMBER +file(WRITE ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/VERSIONNUMBER "${VERSIONNUMBER_CONTENTS}") -install(FILES ${CMAKE_BINARY_DIR}/gisbase/etc/VERSIONNUMBER DESTINATION etc) -configure_file(license.txt.in ${CMAKE_BINARY_DIR}/gisbase/etc/license) +install(FILES ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/VERSIONNUMBER + DESTINATION ${GRASS_INSTALL_ETCDIR}) -install(FILES ${CMAKE_BINARY_DIR}/gisbase/etc/VERSIONNUMBER DESTINATION etc) -install(FILES ${CMAKE_BINARY_DIR}/gisbase/etc/license DESTINATION etc) -install(FILES ${CMAKE_BINARY_DIR}/gisbase/etc/lock DESTINATION etc) -install(FILES ${CMAKE_BINARY_DIR}/gisbase/etc/echo DESTINATION etc) -install(FILES ${CMAKE_BINARY_DIR}/gisbase/etc/run DESTINATION etc) -install(FILES ${CMAKE_BINARY_DIR}/gisbase/etc/clean_temp DESTINATION etc) -if(MINGW) - install(FILES ${CMAKE_BINARY_DIR}/gisbase/etc/winlocale DESTINATION etc) -endif() +execute_process( + COMMAND sh ${CMAKE_CURRENT_SOURCE_DIR}/version.sed "${GRASS_VERSION_NUMBER}" + "${GRASS_VERSION_DATE}" "" + INPUT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/license.txt + OUTPUT_FILE ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/license) + +install(FILES ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/license + DESTINATION ${GRASS_INSTALL_ETCDIR}) diff --git a/lib/init/license.txt.in b/lib/init/license.txt.in deleted file mode 100644 index c65922aa07e..00000000000 --- a/lib/init/license.txt.in +++ /dev/null @@ -1,11 +0,0 @@ -Geographic Resources Analysis Support System (GRASS) is Copyright, -1999-@GRASS_VERSION_DATE@ by the GRASS Development Team, and licensed under terms of the -GNU General Public License (GPL) version >=2. - -This GRASS GIS @GRASS_VERSION_NUMBER@ release is coordinated and produced by -the GRASS Development Team with contributions from all over the world. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. diff --git a/lib/proj/CMakeLists.txt b/lib/proj/CMakeLists.txt index bf80e1ddd6c..74f4dff67f3 100644 --- a/lib/proj/CMakeLists.txt +++ b/lib/proj/CMakeLists.txt @@ -12,6 +12,7 @@ build_module( grass_gproj DEPENDS grass_driver + grass_gis GDAL ZLIB PROJ diff --git a/lib/rst/CMakeLists.txt b/lib/rst/CMakeLists.txt index a1f093f2ded..61fb629e2cc 100644 --- a/lib/rst/CMakeLists.txt +++ b/lib/rst/CMakeLists.txt @@ -24,11 +24,16 @@ build_library_in_subdir( grass_interpfl DEPENDS grass_gis + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gmath grass_raster grass_bitmap grass_vector grass_qtree grass_interpdata + LIBM OPTIONAL_DEPENDS OPENMP HEADERS diff --git a/lib/temporal/CMakeLists.txt b/lib/temporal/CMakeLists.txt index 25617170411..7f9f5054963 100644 --- a/lib/temporal/CMakeLists.txt +++ b/lib/temporal/CMakeLists.txt @@ -1,6 +1,12 @@ file(GLOB SQLFILES "SQL/*.sql") foreach(sqlfile ${SQLFILES}) - install(FILES "${sqlfile}" DESTINATION etc/sql) + install(FILES "${sqlfile}" DESTINATION ${GRASS_INSTALL_ETCDIR}/sql) endforeach() -build_library_in_subdir(lib NAME grass_temporal DEPENDS grass_dbmibase - grass_datetime) +build_library_in_subdir( + lib + NAME + grass_temporal + DEPENDS + grass_gis + grass_dbmibase + grass_datetime) diff --git a/lib/vector/CMakeLists.txt b/lib/vector/CMakeLists.txt index 4240de51851..9272e432253 100644 --- a/lib/vector/CMakeLists.txt +++ b/lib/vector/CMakeLists.txt @@ -1,5 +1,3 @@ -# TODO: docs vectorascii PGM = vectorascii - build_library_in_subdir(rtree HEADERS "rtree.h" DEPENDS grass_gis) add_subdirectory(dglib) @@ -10,33 +8,54 @@ build_library_in_subdir( NAME grass_vector DEPENDS - grass_gis - grass_raster - grass_rtree - grass_graph - grass_dig2 - grass_dbmibase + GDAL grass_btree2 + grass_dbmibase grass_dbmiclient + grass_dbmidriver + grass_dig2 + grass_gis + grass_gproj + grass_dgl grass_linkm - grass_gproj) + grass_raster + grass_rtree + OPTIONAL_DEPENDS + GEOS) if(TARGET POSTGRES) - target_link_libraries(grass_vector POSTGRES) + # target_include_directories(grass_vector SYSTEM PUBLIC + # ${PostgreSQL_INCLUDE_DIR}) + target_link_libraries(grass_vector PRIVATE POSTGRES) endif() if(TARGET LAPACK) - target_link_libraries(grass_vector LAPACK) + target_link_libraries(grass_vector PRIVATE LAPACK) endif() -build_library_in_subdir(vedit NAME grass_vedit DEPENDS grass_vector) +build_library_in_subdir( + vedit + NAME + grass_vedit + DEPENDS + grass_gis + grass_vector + grass_dbmibase + grass_dbmiclient + grass_dbmidriver) build_library_in_subdir( neta NAME grass_neta DEPENDS + grass_dbmibase grass_dbmiclient + grass_dbmidriver grass_gis - grass_graph + grass_dgl grass_vector) + +if(WITH_DOCS) + generate_html(TARGET grass_vector NAME vectorascii) +endif() diff --git a/lib/vector/dglib/CMakeLists.txt b/lib/vector/dglib/CMakeLists.txt index 43fa06cbadb..a55e79824c6 100644 --- a/lib/vector/dglib/CMakeLists.txt +++ b/lib/vector/dglib/CMakeLists.txt @@ -21,26 +21,28 @@ set(DGL_headers avl.h - tavl.h graph.h + graph_v1.h + graph_v2.h heap.h - tree.h - type.h helpers.h - graph_v1.h - graph_v2.h) + tavl.h + tree.h + type.h) foreach(DGL_header ${DGL_headers}) - file(COPY ${DGL_header} DESTINATION ${GISBASE}/include/grass/dgl) + file(COPY ${DGL_header} + DESTINATION ${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass/dgl) endforeach() +# file(COPY dgl.h DESTINATION ${OUTDIR}/${GRASS_INSTALL_INCLUDEDIR}/grass) set(graphlib_SRCS avl.c graph.c - graph_v2.c - helpers.c - tree.c graph_v1.c + graph_v2.c heap.c - tavl.c) + helpers.c + tavl.c + tree.c) -build_module(NAME grass_graph SOURCES "${graphlib_SRCS}" HEADERS "dgl.h") +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 14b8fb1a61a..8982afd956b 100644 --- a/lib/vector/diglib/CMakeLists.txt +++ b/lib/vector/diglib/CMakeLists.txt @@ -34,4 +34,5 @@ build_module( grass_gmath grass_gis grass_rtree - GDAL) + GDAL + LIBM) diff --git a/locale/CMakeLists.txt b/locale/CMakeLists.txt new file mode 100644 index 00000000000..ab5fd37a04e --- /dev/null +++ b/locale/CMakeLists.txt @@ -0,0 +1,34 @@ +#[===========================================================================[ + Currently this only installs mo files. + TODO: implement update and creation +#]===========================================================================] + +add_custom_target(generate_mo_files ALL COMMENT "Generate mo files") + +add_custom_command( + TARGET generate_mo_files + PRE_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory + ${OUTDIR}/${GRASS_INSTALL_LOCALEDIR} + BYPRODUCTS ${OUTDIR}/${GRASS_INSTALL_LOCALEDIR}) + +file(GLOB po_files "${CMAKE_CURRENT_SOURCE_DIR}/po/*.po") +foreach(po_file ${po_files}) + get_filename_component(po_file_name ${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_command( + TARGET generate_mo_files + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory + ${OUTDIR}/${GRASS_INSTALL_LOCALEDIR}/${mo_dir} + COMMAND ${MSGFMT} --statistics -o + ${OUTDIR}/${GRASS_INSTALL_LOCALEDIR}/${mo_file} ${po_file} + BYPRODUCTS ${OUTDIR}/${GRASS_INSTALL_LOCALEDIR}/${mo_file} + ${OUTDIR}/${GRASS_INSTALL_LOCALEDIR}/${mo_dir}) +endforeach() + +install(DIRECTORY ${OUTDIR}/${GRASS_INSTALL_LOCALEDIR}/ + DESTINATION ${GRASS_INSTALL_LOCALEDIR}) diff --git a/man/CMakeLists.txt b/man/CMakeLists.txt index 096432ea764..fbc393ded75 100644 --- a/man/CMakeLists.txt +++ b/man/CMakeLists.txt @@ -1,6 +1,106 @@ +add_custom_target( + build_full_index + COMMAND + ${grass_env_command} ${PYTHON_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/build_full_index.py + ${OUTDIR}/${GRASS_INSTALL_DOCDIR} + BYPRODUCTS ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/full_index.html + DEPENDS ALL_MODULES LIB_PYTHON GUI_WXPYTHON + COMMENT "man generation: build full index") + set(data_files - grassdocs.css grass_logo.png grass_icon.png jquery.fixedheadertable.min.js - parser_standard_options.js parser_standard_options.css) + ${CMAKE_CURRENT_SOURCE_DIR}/jquery.fixedheadertable.min.js + ${CMAKE_CURRENT_SOURCE_DIR}/grassdocs.css + ${CMAKE_CURRENT_SOURCE_DIR}/hamburger_menu.svg + ${CMAKE_CURRENT_SOURCE_DIR}/grass_icon.png + ${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) +install(FILES ${data_files} DESTINATION ${GRASS_INSTALL_DOCDIR}) + +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_names build_topics build_keywords build_graphical_index + build_manual_gallery build_class_graphical) +foreach(target_name ${target_names}) + add_custom_target( + ${target_name} + COMMAND + ${grass_env_command} ${PYTHON_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/${target_name}.py + ${OUTDIR}/${GRASS_INSTALL_DOCDIR} + DEPENDS build_index + COMMENT "man generation: ${target_name}") +endforeach() + +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(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}") +endforeach() + +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} ALL_MODULES LIB_PYTHON GUI_WXPYTHON + COMMENT "man generation: check output") -file(COPY ${data_files} DESTINATION docs/html) -install(FILES ${data_files} DESTINATION docs/html) +#[=======[ TODO: implement somehow... +add_custom_target( + create_man_pages ALL + DEPENDS build_check + COMMAND ${CMAKE_COMMAND} -DHTML2MAN=${HTML2MAN} + -DGRASS_INSTALL_DOCDIR=${GRASS_INSTALL_DOCDIR} -DOUTDIR=${OUTDIR} + -DGRASS_INSTALL_MANDIR=${GRASS_INSTALL_MANDIR} -P + ${CMAKE_SOURCE_DIR}/cmake/generate_man_pages.cmake + COMMENT "!!! man generation: create man pages") +]=======] diff --git a/misc/CMakeLists.txt b/misc/CMakeLists.txt index 739c47f6ddf..53f4757eb46 100644 --- a/misc/CMakeLists.txt +++ b/misc/CMakeLists.txt @@ -1,12 +1,22 @@ -build_program_in_subdir(m.cogo DEPENDS grass_gis) +build_program_in_subdir(m.cogo DEPENDS grass_gis LIBM) build_program_in_subdir(m.measure DEPENDS grass_gis) build_program_in_subdir(m.transform DEPENDS grass_gis grass_imagery - grass_raster grass_vector) + grass_raster grass_vector LIBM) if(WITH_OPENGL) - build_program_in_subdir(m.nviz.image DEPENDS grass_gis grass_ogsf grass_nviz) + 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_gis grass_ogsf grass_nviz) + build_program_in_subdir(m.nviz.script DEPENDS grass_display grass_raster + grass_gis LIBM) endif(WITH_OPENGL) diff --git a/ps/CMakeLists.txt b/ps/CMakeLists.txt index 3c1ff397433..7a714ffcc0e 100644 --- a/ps/CMakeLists.txt +++ b/ps/CMakeLists.txt @@ -8,4 +8,28 @@ build_program_in_subdir( grass_imagery grass_vector grass_dbmibase - grass_sym) + grass_dbmiclient + grass_dbmidriver + grass_symb + 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) + +install(DIRECTORY ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/paint + DESTINATION ${GRASS_INSTALL_ETCDIR}) diff --git a/python/grass/CMakeLists.txt b/python/grass/CMakeLists.txt index f7aad47ce65..eeb0be1deb2 100644 --- a/python/grass/CMakeLists.txt +++ b/python/grass/CMakeLists.txt @@ -1,61 +1,47 @@ -copy_python_files_in_subdir(exceptions etc/python/grass) -copy_python_files_in_subdir(gunittest etc/python/grass) -copy_python_files_in_subdir(grassdb etc/python/grass) -copy_python_files_in_subdir(imaging etc/python/grass) -copy_python_files_in_subdir(pydispatch etc/python/grass) -copy_python_files_in_subdir(script etc/python/grass) -copy_python_files_in_subdir(utils etc/python/grass) -copy_python_files_in_subdir(semantic_label etc/python/grass) -copy_python_files_in_subdir(temporal etc/python/grass) -copy_python_files_in_subdir(pygrass etc/python/grass) -copy_python_files_in_subdir(pygrass/messages etc/python/grass) -copy_python_files_in_subdir(pygrass/modules etc/python/grass) -copy_python_files_in_subdir(pygrass/raster etc/python/grass) -copy_python_files_in_subdir(pygrass/vector etc/python/grass) -copy_python_files_in_subdir(pygrass/gis etc/python/grass) -copy_python_files_in_subdir(pygrass/shell etc/python/grass) -copy_python_files_in_subdir(pygrass/tests etc/python/grass) -copy_python_files_in_subdir(pygrass/rpc etc/python/grass) -copy_python_files_in_subdir(pygrass/modules/interface etc/python/grass) -copy_python_files_in_subdir(pygrass/modules/grid etc/python/grass) +set(PYDIRS + app + benchmark + exceptions + grassdb + gunittest + imaging + jupyter + pydispatch + pygrass + pygrass/gis + pygrass/messages + pygrass/modules + pygrass/modules/grid + pygrass/modules/interface + pygrass/raster + pygrass/rpc + pygrass/shell + pygrass/tests + pygrass/vector + script + semantic_label + temporal + utils) -configure_file(script/setup.py - ${CMAKE_BINARY_DIR}/etc/python/grass/script/setup.py COPYONLY) +set(PYDIR_GRASS ${GRASS_INSTALL_PYDIR}/grass) + +foreach(pydir ${PYDIRS}) + copy_python_files_in_subdir(${pydir} ${PYDIR_GRASS}) +endforeach() + +configure_file(__init__.py ${OUTDIR}/${PYDIR_GRASS}/ COPYONLY) +configure_file(script/setup.py ${OUTDIR}/${PYDIR_GRASS}/script/setup.py + COPYONLY) + +set(pydir_targets ${PYDIRS}) +list(TRANSFORM pydir_targets REPLACE "/" "_") +list(TRANSFORM pydir_targets PREPEND "python_") add_custom_target( LIB_PYTHON - COMMAND ${CMAKE_COMMAND} -E echo "#coding=utf-8" > - ${GISBASE}/etc/python/__init__.py - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/__init__.py - ${GISBASE}/etc/python/grass/ - COMMAND - ${CMAKE_COMMAND} -E copy - ${CMAKE_BINARY_DIR}/etc/python/grass/script/setup.py - ${GISBASE}/etc/python/grass/script/ VERBATIM - DEPENDS python_exceptions - python_grassdb - python_imaging - python_pydispatch - python_script - python_semantic_label - python_temporal - python_utils - python_pygrass - python_pygrass_messages - python_pygrass_modules - python_pygrass_modules - python_pygrass_raster - python_pygrass_vector - python_pygrass_gis - python_pygrass_shell - python_pygrass_tests - python_pygrass_rpc - python_pygrass_modules_interface - python_pygrass_modules_grid) - -# TODO: MODULES DISABLED add_subdirectory(ctypes) + DEPENDS ${pydir_targets}) set_target_properties(LIB_PYTHON PROPERTIES FOLDER lib) -install(DIRECTORY ${GISBASE}/etc/python/grass DESTINATION etc/python/grass/) +install(DIRECTORY ${OUTDIR}/${PYDIR_GRASS} DESTINATION ${GRASS_INSTALL_PYDIR}) diff --git a/python/libgrass_interface_generator/CMakeLists.txt b/python/libgrass_interface_generator/CMakeLists.txt index 0f3719e25f7..7c2a429f080 100644 --- a/python/libgrass_interface_generator/CMakeLists.txt +++ b/python/libgrass_interface_generator/CMakeLists.txt @@ -62,11 +62,13 @@ foreach(module ${MODULES}) message(FATAL_ERROR "${module}_HDRS is not set") endif() +#[[ foreach(${module}_LIB ${${module}_LIBS}) if(NOT TARGET ${${module}_LIB}) message(FATAL_ERROR "${${module}_LIB} is not a target") endif() endforeach() +]] if(NOT ${module}_TARGET_NAME) list(GET ${module}_LIBS 0 first_lib) @@ -77,22 +79,31 @@ foreach(module ${MODULES}) message(FATAL_ERROR "${${module}_TARGET_NAME} is not set") endif() - set(output_file "${GISBASE}/etc/python/grass/lib/${module}.py") + set(LIBS_VERSIONED ${${module}_LIBS}) + list(TRANSFORM LIBS_VERSIONED APPEND .${GRASS_VERSION_NUMBER}) + 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} - -DBIN_DIR=${GISBASE} "-DHDRS=${${module}_HDRS}" "-DLIBS=${${module}_LIBS}" - -DOUT_FILE=${output_file} -DGRASS_VERSION_NUMBER=${GRASS_VERSION_NUMBER} - -P ${CMAKE_SOURCE_DIR}/cmake/ctypesgen.cmake + "-DHDRS=${${module}_HDRS}" "-DLIBS=${LIBS_VERSIONED}" -DOUTDIR=${OUTDIR} + -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} + -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 lib/python) - install(FILES ${output_file} DESTINATION etc/python/grass/lib) + install(FILES ${output_file} DESTINATION ${GRASS_INSTALL_PYDIR}/grass/lib) endforeach() diff --git a/raster/CMakeLists.txt b/raster/CMakeLists.txt index 068818d49bd..53a59863b45 100644 --- a/raster/CMakeLists.txt +++ b/raster/CMakeLists.txt @@ -1,11 +1,167 @@ +set(raster_modules_list + r.basins.fill + r.buffer + r.buildvrt + r.carve + r.category + r.circle + r.clump + r.coin + r.colors + r.colors.out + r.composite + r.compress + r.contour + r.cost + r.covar + r.cross + r.describe + r.distance + r.external + r.external.out + r.fill.dir + r.fill.stats + r.flow + r.geomorphon + r.grow.distance + r.gwflow + r.his + r.horizon + r.in.ascii + r.in.bin + r.in.gdal + r.in.gridatb + r.in.lidar + r.in.mat + r.in.pdal + r.in.poly + r.in.xyz + r.info + r.kappa + r.lake + r.latlong + r.li + r.mapcalc + r.mfilter + r.mode + r.neighbors + r.null + r.object.geometry + r.out.ascii + r.out.bin + r.out.gdal + r.out.gridatb + r.out.mat + r.out.mpeg + r.out.pov + r.out.ppm + r.out.ppm3 + r.out.vrml + r.out.vtk + r.param.scale + r.patch + r.path + r.profile + r.proj + r.quant + r.quantile + r.random + r.random.cells + r.random.surface + r.reclass + r.recode + r.region + r.regression.line + r.regression.multi + r.relief + r.report + r.resamp.bspline + r.resamp.filter + r.resamp.interp + r.resamp.rst + r.resamp.stats + r.resample + r.rescale + r.rescale.eq + r.ros + r.series + r.series.accumulate + r.series.interp + r.sim + r.slope.aspect + r.solute.transport + r.spread + r.spreadpath + r.statistics + r.stats + r.stats.quantile + r.stats.zonal + r.stream.extract + r.sun + r.sunhours + r.sunmask + r.support + r.support.stats + r.surf.area + r.surf.contour + r.surf.fractal + r.surf.gauss + r.surf.idw + r.surf.random + r.terraflow + r.texture + r.thin + r.tile + r.timestamp + r.to.rast3 + r.to.rast3elev + r.to.vect + r.topidx + r.topmodel + r.transect + r.univar + r.uslek + r.usler + r.viewshed + r.volume + r.walk + r.water.outlet + r.watershed + r.what + r.what.color) + +if(WITH_LIBPNG) + list(APPEND raster_modules_list r.in.png r.out.png) +endif() + +if(MSVC) + 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.") + +if(WITH_DOCS) + generate_html(TARGET ALL_RASTER_MODULES NAME rasterintro) +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) +build_program_in_subdir(r.buildvrt DEPENDS grass_gis grass_raster grass_gmath LIBM) build_program_in_subdir(r.buffer DEPENDS grass_gis grass_raster) -build_program_in_subdir(r.carve DEPENDS grass_gis grass_raster grass_vector - grass_bitmap) +build_program_in_subdir( + r.carve + DEPENDS + grass_gis + grass_raster + grass_vector + grass_bitmap + grass_dig2 + LIBM) build_program_in_subdir(r.category DEPENDS grass_gis grass_raster) @@ -23,12 +179,21 @@ build_program_in_subdir(r.composite DEPENDS grass_gis grass_raster) build_program_in_subdir(r.compress DEPENDS grass_gis grass_raster) -build_program_in_subdir(r.contour DEPENDS grass_gis grass_raster grass_vector) +build_program_in_subdir( + r.contour + DEPENDS + grass_gis + grass_raster + grass_vector + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + LIBM) build_program_in_subdir(r.cost DEPENDS grass_gis grass_raster grass_segment - grass_vector) + grass_vector LIBM) -build_program_in_subdir(r.covar DEPENDS grass_gis grass_raster) +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) @@ -37,16 +202,21 @@ build_program_in_subdir(r.describe DEPENDS grass_gis grass_raster) build_program_in_subdir(r.distance DEPENDS grass_gis grass_raster) -build_program_in_subdir(r.drain DEPENDS grass_gis grass_raster grass_vector) - -build_program_in_subdir(r.external DEPENDS grass_gis grass_raster grass_imagery - grass_gproj) +build_program_in_subdir( + r.external + DEPENDS + grass_gis + grass_raster + grass_imagery + grass_gproj + GDAL + LIBM) -build_program_in_subdir(r.external.out DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.external.out DEPENDS grass_gis grass_raster GDAL) build_program_in_subdir(r.fill.dir DEPENDS grass_gis grass_raster) -build_program_in_subdir(r.fill.stats DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.fill.stats DEPENDS grass_gis grass_raster LIBM) build_program_in_subdir( r.flow @@ -55,25 +225,34 @@ build_program_in_subdir( grass_raster grass_segment grass_vector - grass_bitmap) + grass_bitmap + LIBM) -build_program_in_subdir(r.geomorphon DEPENDS grass_gis grass_raster grass_gmath) +build_program_in_subdir(r.geomorphon DEPENDS grass_gis grass_raster grass_gmath LIBM) -build_program_in_subdir(r.grow.distance DEPENDS grass_gis grass_raster) +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) +build_program_in_subdir(r.gwflow DEPENDS grass_gis grass_raster grass_gpde + grass_gmath) build_program_in_subdir(r.his DEPENDS grass_gis grass_raster grass_gproj) build_program_in_subdir(r.horizon DEPENDS grass_gis grass_raster grass_gproj - grass_parson) + grass_parson LIBM) build_program_in_subdir(r.in.ascii DEPENDS grass_gis grass_raster) -build_program_in_subdir(r.in.bin DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.in.bin DEPENDS grass_gis grass_raster LIBM) -build_program_in_subdir(r.in.gdal DEPENDS grass_gis grass_raster grass_gproj - grass_imagery) +build_program_in_subdir( + r.in.gdal + DEPENDS + grass_gis + grass_raster + grass_gproj + grass_imagery + GDAL + LIBM) build_program_in_subdir(r.in.gridatb DEPENDS grass_gis grass_raster) @@ -91,6 +270,7 @@ build_program_in_subdir( grass_gmath grass_segment grass_gproj + LIBM PRIMARY_DEPENDS PDAL) @@ -101,12 +281,12 @@ endif() 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) + build_program_in_subdir(r.in.xyz DEPENDS grass_gis grass_raster LIBM) endif() -build_program_in_subdir(r.info TEST_SOURCES "test_r_info.py" DEPENDS grass_gis +build_program_in_subdir(r.info TEST_SOURCES "test_r_info.py" DEPENDS grass_gis LIBM grass_raster) -build_program_in_subdir(r.kappa DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.kappa DEPENDS grass_gis grass_raster LIBM) build_program_in_subdir(r.latlong DEPENDS grass_gis grass_raster grass_gproj) @@ -129,19 +309,31 @@ build_program_in_subdir( grass_gis grass_raster grass_stats + LIBM OPTIONAL_DEPENDS OPENMP) build_program_in_subdir(r.null DEPENDS grass_gis grass_raster) -build_program_in_subdir(r.object.geometry DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.object.geometry DEPENDS grass_gis grass_raster LIBM) build_program_in_subdir(r.out.ascii DEPENDS grass_gis grass_raster) build_program_in_subdir(r.out.bin DEPENDS grass_gis grass_raster) -build_program_in_subdir(r.out.gdal DEPENDS grass_gis grass_raster - grass_dbmibase grass_imagery) +build_program_in_subdir( + r.out.gdal + DEPENDS + grass_gis + grass_gproj + grass_imagery + grass_gis + grass_raster + grass_dbmibase + grass_imagery + GDAL + LIBM + PROJ) set_source_files_properties( r.out.gdal/main.c @@ -172,17 +364,19 @@ build_program_in_subdir( r.param.scale DEPENDS grass_gis + grass_gmath grass_raster grass_interpfl grass_interpdata - grass_qtree) + grass_qtree + LIBM) build_program_in_subdir(r.patch DEPENDS grass_gis grass_raster OPTIONAL_DEPENDS OPENMP) build_program_in_subdir(r.path DEPENDS grass_gis grass_raster grass_vector) -build_program_in_subdir(r.profile DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.profile DEPENDS grass_gis grass_raster LIBM) build_program_in_subdir( r.proj @@ -190,18 +384,28 @@ build_program_in_subdir( grass_gis grass_raster grass_gproj + LIBM OPTIONAL_DEPENDS OPENMP) build_program_in_subdir(r.quant DEPENDS grass_gis grass_raster) -build_program_in_subdir(r.quantile DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.quantile DEPENDS grass_gis grass_raster LIBM) -build_program_in_subdir(r.random DEPENDS grass_gis grass_raster grass_vector) +build_program_in_subdir( + r.random + DEPENDS + grass_gis + grass_raster + grass_vector + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + LIBM) -build_program_in_subdir(r.random.cells DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.random.cells DEPENDS grass_gis grass_raster LIBM) -build_program_in_subdir(r.random.surface DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.random.surface DEPENDS grass_gis grass_raster LIBM) build_program_in_subdir(r.reclass DEPENDS grass_gis grass_raster grass_manage) @@ -209,9 +413,9 @@ 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) +build_program_in_subdir(r.regression.line DEPENDS grass_gis grass_raster LIBM) -build_program_in_subdir(r.regression.multi DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.regression.multi DEPENDS grass_gis grass_raster LIBM) build_program_in_subdir(r.report DEPENDS grass_gis grass_raster) @@ -219,15 +423,17 @@ build_program_in_subdir( r.resamp.bspline DEPENDS grass_gis + grass_gmath grass_raster grass_vector grass_segment - grass_lidar) + grass_lidar + LIBM) -build_program_in_subdir(r.resamp.filter DEPENDS grass_gis grass_raster +build_program_in_subdir(r.resamp.filter DEPENDS grass_gis grass_raster LIBM OPTIONAL_DEPENDS OPENMP) -build_program_in_subdir(r.resamp.interp DEPENDS grass_gis grass_raster +build_program_in_subdir(r.resamp.interp DEPENDS grass_gis grass_raster LIBM OPTIONAL_DEPENDS OPENMP) build_program_in_subdir( @@ -235,12 +441,13 @@ build_program_in_subdir( DEPENDS grass_gis grass_raster + grass_gmath grass_interpfl grass_interpdata grass_qtree) build_program_in_subdir(r.resamp.stats DEPENDS grass_gis grass_raster - grass_stats) + grass_stats LIBM) build_program_in_subdir(r.resample DEPENDS grass_gis grass_raster) @@ -248,7 +455,7 @@ build_program_in_subdir(r.rescale DEPENDS grass_gis grass_raster) build_program_in_subdir(r.rescale.eq DEPENDS grass_gis grass_raster) -build_program_in_subdir(r.ros DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.ros DEPENDS grass_gis grass_raster LIBM) build_program_in_subdir( r.series @@ -271,59 +478,70 @@ build_program_in_subdir( build_program_in_subdir(r.series.interp DEPENDS grass_gis grass_raster grass_stats) -build_program_in_subdir(r.relief DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.relief DEPENDS grass_gis grass_raster LIBM) add_subdirectory(r.sim) -build_program_in_subdir(r.slope.aspect DEPENDS grass_gis grass_raster +build_program_in_subdir(r.slope.aspect DEPENDS grass_gis grass_raster LIBM OPTIONAL_DEPENDS OPENMP) build_program_in_subdir(r.solute.transport DEPENDS grass_gis grass_raster - grass_gmath grass_gpde) + grass_gmath grass_gpde LIBM) add_subdirectory(r.spread) build_program_in_subdir(r.spreadpath DEPENDS grass_gis grass_raster grass_segment) -build_program_in_subdir(r.statistics DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.statistics DEPENDS grass_gis grass_raster LIBM) -build_program_in_subdir(r.stats.zonal DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.stats.zonal DEPENDS grass_gis grass_raster LIBM) -build_program_in_subdir(r.stats.quantile DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.stats.quantile DEPENDS grass_gis grass_raster LIBM) -build_program_in_subdir(r.stats DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.stats DEPENDS grass_gis grass_raster LIBM) -build_program_in_subdir(r.stream.extract DEPENDS grass_gis grass_raster - grass_segment grass_vector) +build_program_in_subdir( + r.stream.extract + DEPENDS + grass_gis + grass_raster + grass_segment + grass_vector + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + LIBM) build_program_in_subdir( r.sun DEPENDS + grass_gis grass_gmath grass_raster grass_gproj + LIBM OPTIONAL_DEPENDS OPENMP) -build_program_in_subdir(r.sunhours DEPENDS grass_gis grass_raster grass_gproj) +build_program_in_subdir(r.sunhours DEPENDS grass_gis grass_raster grass_gproj LIBM) -build_program_in_subdir(r.sunmask DEPENDS grass_gis grass_raster grass_gproj) +build_program_in_subdir(r.sunmask DEPENDS grass_gis grass_raster grass_gproj LIBM) build_program_in_subdir(r.support DEPENDS grass_gis grass_raster) build_program_in_subdir(r.support.stats DEPENDS grass_gis grass_raster) -build_program_in_subdir(r.surf.area DEPENDS grass_gis grass_raster) +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) build_program_in_subdir(r.surf.fractal DEPENDS grass_gis grass_raster - grass_gmath) + grass_gmath LIBM) 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) +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) @@ -334,7 +552,7 @@ else() set(USER_NAME $ENV{USER}) endif() -build_program_in_subdir(r.texture DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.texture DEPENDS grass_gis grass_raster LIBM) build_program_in_subdir(r.thin DEPENDS grass_gis grass_raster grass_rowio) @@ -342,17 +560,27 @@ 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_raster3d) +build_program_in_subdir(r.to.rast3 DEPENDS grass_gis grass_raster + grass_raster3d) -build_program_in_subdir(r.to.rast3elev DEPENDS grass_gis grass_raster3d) +build_program_in_subdir(r.to.rast3elev DEPENDS grass_gis grass_raster + grass_raster3d) -build_program_in_subdir(r.to.vect DEPENDS grass_gis grass_raster grass_vector) +build_program_in_subdir( + r.to.vect + DEPENDS + grass_gis + grass_raster + grass_vector + grass_dbmibase + grass_dbmiclient + grass_dbmidriver) -build_program_in_subdir(r.topidx DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.topidx DEPENDS grass_gis grass_raster LIBM) -build_program_in_subdir(r.topmodel DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.topmodel DEPENDS grass_gis grass_raster LIBM) -build_program_in_subdir(r.transect DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.transect DEPENDS grass_gis grass_raster LIBM) add_subdirectory(r.univar) @@ -360,10 +588,18 @@ build_program_in_subdir(r.uslek DEPENDS grass_gis grass_raster) build_program_in_subdir(r.usler DEPENDS grass_gis grass_raster) -build_program_in_subdir(r.volume DEPENDS grass_gis grass_raster grass_vector) +build_program_in_subdir( + r.volume + DEPENDS + grass_gis + grass_raster + grass_vector + grass_dbmibase + grass_dbmiclient + grass_dbmidriver) build_program_in_subdir(r.walk DEPENDS grass_gis grass_raster grass_segment - grass_vector) + grass_vector LIBM) build_program_in_subdir(r.water.outlet DEPENDS grass_gis grass_raster) @@ -376,10 +612,14 @@ build_program_in_subdir( r.in.lidar DEPENDS grass_gis + grass_vector grass_raster grass_lidar + grass_gproj + grass_segment PRIMARY_DEPENDS - LIBLAS) + LIBLAS + LIBM) add_subdirectory(r.li) @@ -391,6 +631,7 @@ build_program_in_subdir( grass_gis grass_raster grass_iostream + LIBM SRC_REGEX "*.cpp" DEFS @@ -402,6 +643,7 @@ build_program_in_subdir( grass_gis grass_raster grass_iostream + LIBM SRC_REGEX "*.cpp" DEFS diff --git a/raster/r.colors.out/CMakeLists.txt b/raster/r.colors.out/CMakeLists.txt index 0a9c64e8714..0f9f0b2668c 100644 --- a/raster/r.colors.out/CMakeLists.txt +++ b/raster/r.colors.out/CMakeLists.txt @@ -17,4 +17,5 @@ build_program( "${r3_colors_out_SRCS}" DEPENDS grass_gis + grass_raster grass_raster3d) diff --git a/raster/r.colors/CMakeLists.txt b/raster/r.colors/CMakeLists.txt index 084855195f4..16e7ee2a028 100644 --- a/raster/r.colors/CMakeLists.txt +++ b/raster/r.colors/CMakeLists.txt @@ -8,7 +8,9 @@ build_program( "${r_colors_SRCS}" DEPENDS grass_gis - grass_raster3d) + grass_raster + grass_raster3d + LIBM) build_program( NAME @@ -17,4 +19,6 @@ build_program( "${r3_colors_SRCS}" DEPENDS grass_gis - grass_raster3d) + grass_raster + grass_raster3d + LIBM) diff --git a/raster/r.li/CMakeLists.txt b/raster/r.li/CMakeLists.txt index 8444c2459ef..0cac884fd59 100644 --- a/raster/r.li/CMakeLists.txt +++ b/raster/r.li/CMakeLists.txt @@ -26,7 +26,8 @@ build_library_in_subdir( grass_raster HTML_FILE_NAME "r.li.daemon") +generate_html(TARGET grass_rli NAME r.li) foreach(SUBDIR ${SUBDIRS1}) - build_program_in_subdir(${SUBDIR} DEPENDS grass_rli) + 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 7ac43843f80..bd31dcacef3 100644 --- a/raster/r.mapcalc/CMakeLists.txt +++ b/raster/r.mapcalc/CMakeLists.txt @@ -23,9 +23,9 @@ build_program( SOURCES "${r_mapcalc_SRCS}" DEPENDS - grass_gis grass_btree grass_calc + grass_gis grass_raster OPTIONAL_DEPENDS READLINE) @@ -36,9 +36,10 @@ build_program( SOURCES "${r3_mapcalc_SRCS}" DEPENDS - grass_gis grass_btree grass_calc + grass_gis + grass_raster grass_raster3d OPTIONAL_DEPENDS READLINE) diff --git a/raster/r.sim/CMakeLists.txt b/raster/r.sim/CMakeLists.txt index 8e50cc05626..60295c44446 100644 --- a/raster/r.sim/CMakeLists.txt +++ b/raster/r.sim/CMakeLists.txt @@ -3,9 +3,12 @@ build_library_in_subdir( NAME grass_sim DEPENDS + grass_gis grass_datetime grass_raster grass_vector + grass_gmath + LIBM OPTIONAL_DEPENDS OPENMP HEADERS diff --git a/raster/r.spread/CMakeLists.txt b/raster/r.spread/CMakeLists.txt index 46078279c58..3da579c7a1f 100644 --- a/raster/r.spread/CMakeLists.txt +++ b/raster/r.spread/CMakeLists.txt @@ -22,4 +22,5 @@ build_program( DEPENDS grass_gis grass_raster - grass_display) + grass_display + LIBM) diff --git a/raster/r.univar/CMakeLists.txt b/raster/r.univar/CMakeLists.txt index d6c4a30b165..d6e323abad9 100644 --- a/raster/r.univar/CMakeLists.txt +++ b/raster/r.univar/CMakeLists.txt @@ -9,6 +9,7 @@ build_program( DEPENDS grass_gis grass_raster + LIBM OPTIONAL_DEPENDS OPENMP) @@ -19,6 +20,8 @@ build_program( "${r3_univar_SRCS}" DEPENDS grass_gis + grass_raster grass_raster3d + LIBM OPTIONAL_DEPENDS OPENMP) diff --git a/raster/r.watershed/CMakeLists.txt b/raster/r.watershed/CMakeLists.txt index 3a5a883d2d7..d2983df041c 100644 --- a/raster/r.watershed/CMakeLists.txt +++ b/raster/r.watershed/CMakeLists.txt @@ -5,8 +5,10 @@ build_program_in_subdir( grass_raster grass_btree2 grass_gmath + LIBM RUNTIME_OUTPUT_DIR - etc/r.watershed) + ${GRASS_INSTALL_ETCBINDIR}/r.watershed + NO_DOCS) build_program_in_subdir( seg @@ -15,7 +17,9 @@ build_program_in_subdir( grass_raster grass_gmath grass_segment + LIBM RUNTIME_OUTPUT_DIR - etc/r.watershed) + ${GRASS_INSTALL_ETCBINDIR}/r.watershed + 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 f751522d910..0257d747d96 100644 --- a/raster3d/CMakeLists.txt +++ b/raster3d/CMakeLists.txt @@ -1,53 +1,100 @@ -build_program_in_subdir(r3.cross.rast DEPENDS grass_gis grass_raster3d) +set(raster3d_modules_list + r3.cross.rast + r3.flow + r3.gradient + r3.gwflow + r3.in.ascii + r3.in.bin + r3.in.lidar + r3.in.v5d + r3.info + r3.mask + r3.mkdspf + r3.neighbors + r3.null + r3.out.ascii + r3.out.bin + r3.out.netcdf + r3.out.v5d + r3.out.vtk + r3.retile + r3.stats + r3.support + r3.timestamp + r3.to.rast) + +if(MSVC) + 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.") + +if(WITH_DOCS) + generate_html(TARGET ALL_RASTER3D_MODULES NAME raster3dintro) +endif() + +build_program_in_subdir(r3.cross.rast DEPENDS grass_gis grass_raster + grass_raster3d) add_subdirectory(r3.flow) -build_program_in_subdir(r3.gradient DEPENDS grass_gis grass_raster3d) +build_program_in_subdir(r3.gradient DEPENDS grass_gis grass_raster3d LIBM) -build_program_in_subdir(r3.gwflow DEPENDS grass_gis grass_raster3d grass_gpde) +build_program_in_subdir(r3.gwflow DEPENDS grass_gis grass_gmath grass_raster3d + grass_gpde) -build_program_in_subdir(r3.in.ascii DEPENDS grass_gis grass_raster3d) +build_program_in_subdir(r3.in.ascii DEPENDS grass_gis grass_gmath grass_raster + grass_raster3d) -build_program_in_subdir(r3.in.bin DEPENDS grass_gis grass_raster3d) +build_program_in_subdir(r3.in.bin DEPENDS grass_gis grass_raster grass_raster3d) -build_program_in_subdir(r3.info DEPENDS grass_gis grass_raster3d) +build_program_in_subdir(r3.info DEPENDS grass_gis grass_raster grass_raster3d) 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_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) + build_program_in_subdir(r3.out.v5d DEPENDS grass_gis grass_raster3d LIBM) endif() -build_program_in_subdir(r3.retile DEPENDS grass_gis grass_raster3d) +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_raster3d) +build_program_in_subdir(r3.support DEPENDS grass_gis grass_raster + grass_raster3d) build_program_in_subdir(r3.timestamp DEPENDS grass_gis grass_raster3d) -build_program_in_subdir(r3.to.rast DEPENDS grass_gis grass_raster3d) +build_program_in_subdir(r3.to.rast DEPENDS grass_gis grass_raster + grass_raster3d) -build_program_in_subdir(r3.out.vtk DEPENDS grass_gis grass_raster3d) +build_program_in_subdir(r3.out.vtk DEPENDS grass_gis grass_raster + grass_raster3d) build_program_in_subdir(r3.mkdspf DEPENDS grass_gis grass_raster3d grass_gpde - grass_dspf) + grass_dspf LIBM) build_program_in_subdir( r3.in.lidar DEPENDS grass_gis + grass_gproj + grass_raster grass_raster3d grass_segment + LIBM PRIMARY_DEPENDS LIBLAS) @@ -56,5 +103,5 @@ build_program_in_subdir(r3.out.netcdf DEPENDS grass_gis grass_raster3d # mode_t is not available on msvc. Discuss if(NOT MSVC) - build_program_in_subdir(r3.in.v5d DEPENDS grass_gis grass_raster3d) + 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 6fc652e2ec5..961d981b554 100644 --- a/raster3d/r3.flow/CMakeLists.txt +++ b/raster3d/r3.flow/CMakeLists.txt @@ -7,8 +7,13 @@ build_program( "${r3_flow_SRCS}" DEPENDS grass_gis + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_raster grass_raster3d - grass_vector) + grass_vector + LIBM) set(test_r3flow_SRCS test_main.c flowline.c integrate.c interpolate.c voxel_traversal.c) @@ -20,5 +25,10 @@ build_program( "${test_r3flow_SRCS}" DEPENDS grass_gis + grass_raster grass_raster3d - grass_vector) + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_vector + LIBM) diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt index e08cb05d61c..9ae0e4ef0b8 100644 --- a/scripts/CMakeLists.txt +++ b/scripts/CMakeLists.txt @@ -1,15 +1,13 @@ set(script_DIRS - r.shade d.background d.correlate d.frame d.out.file - d.to.rast d.polar d.rast.edit d.rast.leg - d.redraw d.shade + d.to.rast d.what.rast d.what.vect db.dropcolumn @@ -35,11 +33,14 @@ set(script_DIRS r.blend r.buffer.lowmem r.colors.stddev + r.drain r.fillnulls r.grow r.import r.in.aster r.in.srtm + r.in.wms + r.mapcalc.simple r.mask r.out.xyz r.pack @@ -47,6 +48,7 @@ set(script_DIRS r.reclass.area r.rgb r.semantic.label + r.shade r.tileset r.unpack r3.in.xyz @@ -55,12 +57,12 @@ set(script_DIRS v.clip v.db.addcolumn v.db.addtable - v.db.join v.db.dropcolumn v.db.droprow v.db.droptable - v.db.renamecolumn + v.db.join v.db.reconnect.all + v.db.renamecolumn v.db.univar v.db.update v.dissolve @@ -70,46 +72,82 @@ set(script_DIRS v.in.lines v.in.mapgen v.in.wfs + v.pack v.rast.stats v.report - v.pack v.to.lines v.unpack v.what.strds v.what.vect - wxpyimgview - r.mapcalc.simple - r.in.wms) + wxpyimgview) foreach(script_DIR ${script_DIRS}) 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}) + +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}) + +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}) + +# 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 ${CMAKE_BINARY_DIR}/etc/) + DESTINATION ${OUTDIR}/${GRASS_INSTALL_ETCBINDIR}) file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/wxpyimgview/wxpyimgview_gui.py - DESTINATION ${CMAKE_BINARY_DIR}/etc/) + DESTINATION ${OUTDIR}/${GRASS_INSTALL_ETCBINDIR}) add_custom_target( r.in.wms_files - COMMAND ${CMAKE_COMMAND} -E make_directory ${GISBASE}/etc/r.in.wms/ + 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 - ${GISBASE}/etc/r.in.wms/ + ${OUTDIR}/${GRASS_INSTALL_ETCBINDIR}/r.in.wms COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms/wms_cap_parsers.py - ${GISBASE}/etc/r.in.wms/ + ${OUTDIR}/${GRASS_INSTALL_ETCBINDIR}/r.in.wms COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms/wms_drv.py - ${GISBASE}/etc/r.in.wms/ + ${OUTDIR}/${GRASS_INSTALL_ETCBINDIR}/r.in.wms COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms/wms_gdal_drv.py - ${GISBASE}/etc/r.in.wms/ + ${OUTDIR}/${GRASS_INSTALL_ETCBINDIR}/r.in.wms COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/r.in.wms/srs.py - ${GISBASE}/etc/r.in.wms/ + ${OUTDIR}/${GRASS_INSTALL_ETCBINDIR}/r.in.wms DEPENDS v.to.lines) add_dependencies(r.in.wms r.in.wms_files) diff --git a/temporal/CMakeLists.txt b/temporal/CMakeLists.txt index eb62bacb0c1..ae4fc25fab6 100644 --- a/temporal/CMakeLists.txt +++ b/temporal/CMakeLists.txt @@ -1,57 +1,68 @@ -set(temporal_DIRS - t.create +set(temporal_script_modules_list t.copy - t.support - t.topology - t.list + t.create t.info + t.list t.merge - t.upgrade - t.remove - t.sample - t.register - t.unregister - t.rast.accumulate t.rast.accdetect + t.rast.accumulate t.rast.aggregate t.rast.aggregate.ds + t.rast.algebra t.rast.colors t.rast.contour - t.rast.to.rast3 - t.rast.univar + t.rast.export + t.rast.extract + t.rast.gapfill + t.rast.import t.rast.list t.rast.mapcalc - t.rast.algebra t.rast.neighbors - t.rast.series - t.rast.export t.rast.out.vtk - t.rast.import - t.rast.gapfill - t.rast.extract + t.rast.series + t.rast.to.rast3 t.rast.to.vect + t.rast.univar t.rast.what - t.rast3d.list + t.rast3d.algebra t.rast3d.extract + t.rast3d.list t.rast3d.mapcalc - t.rast3d.algebra t.rast3d.univar + t.register + t.remove t.rename + t.sample t.select - t.snap t.shift - t.vect.list + t.snap + t.support + t.topology + t.unregister + t.upgrade + t.vect.algebra t.vect.db.select t.vect.export t.vect.extract - t.vect.algebra t.vect.import - t.vect.what.strds + t.vect.list t.vect.observe.strds - t.vect.univar) + t.vect.univar + 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.") + +if(WITH_DOCS) + generate_html(TARGET ALL_TEMPORAL_MODULES NAME temporalintro) +endif() build_program_in_subdir(t.connect DEPENDS grass_gis grass_temporal) -foreach(temporal_DIR ${temporal_DIRS}) +foreach(temporal_DIR ${temporal_script_modules_list}) build_script_in_subdir(${temporal_DIR}) endforeach() diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt index 63f821d0e76..38039185f83 100644 --- a/utils/CMakeLists.txt +++ b/utils/CMakeLists.txt @@ -1,5 +1,7 @@ file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/mkhtml.py DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) +file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/thumbnails.py + DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/generate_last_commit_file.py DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) @@ -16,7 +18,8 @@ build_program_in_subdir( SOURCES "${current_time_s_ms_SRCS}" RUNTIME_OUTPUT_DIR - etc) + ${GRASS_INSTALL_ETCBINDIR} + NO_DOCS) build_program( NAME @@ -24,17 +27,39 @@ build_program( SOURCES g.echo.c RUNTIME_OUTPUT_DIR - utils + ${GRASS_INSTALL_UTILSDIR} PACKAGE - "NONE") + "NONE" + NO_DOCS) add_dependencies(g.echo python_doc_utils) add_custom_target( python_doc_utils + COMMAND + ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/g.html2man/g.html2man.py + ${OUTDIR}/${GRASS_INSTALL_UTILSDIR} + COMMAND + ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/generate_last_commit_file.py + ${OUTDIR}/${GRASS_INSTALL_UTILSDIR} + COMMAND + ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/g.html2man/g.html2man.py + ${OUTDIR}/${GRASS_INSTALL_UTILSDIR} + COMMAND + ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/g.html2man/ggroff.py + ${OUTDIR}/${GRASS_INSTALL_UTILSDIR} + COMMAND + ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/g.html2man/ghtml.py + ${OUTDIR}/${GRASS_INSTALL_UTILSDIR} COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/mkhtml.py - ${GISBASE}/utils - COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/g.html2man/g.html2man.py ${GISBASE}/utils - COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/g.html2man/ghtml.py ${GISBASE}/utils - COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/g.html2man/ggroff.py ${GISBASE}/utils) + ${OUTDIR}/${GRASS_INSTALL_UTILSDIR}) + +install( + FILES ${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}/g.html2man.py + ${OUTDIR}/${GRASS_INSTALL_UTILSDIR}/ghtml.py + ${OUTDIR}/${GRASS_INSTALL_UTILSDIR}/mkhtml.py + DESTINATION ${GRASS_INSTALL_UTILSDIR}) diff --git a/vector/CMakeLists.txt b/vector/CMakeLists.txt index 6128938a713..e769b7a592b 100644 --- a/vector/CMakeLists.txt +++ b/vector/CMakeLists.txt @@ -1,4 +1,132 @@ -build_program_in_subdir(v.buffer DEPENDS grass_gis grass_vector) +set(vector_modules_list + v.buffer + v.build + v.build.polylines + v.category + v.class + v.clean + v.cluster + v.colors + v.colors.out + v.db.connect + v.db.select + v.decimate + v.delaunay + v.distance + v.drape + v.edit + v.external + v.external.out + v.extract + v.extrude + v.fill.holes + v.generalize + v.hull + v.in.ascii + v.in.db + v.in.dxf + v.in.lidar + v.in.ogr + v.in.pdal + v.in.region + v.info + v.kcv + v.kernel + v.label + v.label.sa + v.lidar.correction + v.lidar.edgedetection + v.lidar.growing + v.lrs.create + v.lrs.label + v.lrs.segment + v.lrs.where + v.mkgrid + v.neighbors + v.net + v.net.alloc + v.net.allpairs + v.net.bridge + v.net.centrality + v.net.components + v.net.connectivity + v.net.distance + v.net.flow + v.net.iso + v.net.path + v.net.salesman + v.net.spanningtree + v.net.steiner + v.net.timetable + v.net.visibility + v.normal + v.out.ascii + v.out.dxf + v.out.lidar + v.out.ogr + v.out.postgis + v.out.pov + v.out.svg + v.out.vtk + v.outlier + v.overlay + v.parallel + v.patch + v.perturb + v.profile + v.proj + v.qcount + v.random + v.reclass + v.rectify + v.sample + v.segment + v.select + v.split + v.support + v.surf.bspline + v.surf.idw + v.surf.rst + v.timestamp + v.to.3d + v.to.db + v.to.points + v.to.rast + v.to.rast3 + v.transform + v.type + v.univar + v.vect.stats + v.vol.rst + v.voronoi + v.what + v.what.rast + v.what.rast3) + +if(WITH_OPENDWG) + list(APPEND vector_modules_list v.in.dwg) +endif() + +add_custom_target( + ALL_VECTOR_MODULES ALL + DEPENDS ${vector_modules_list} + COMMENT "All vector modules are built.") + +if(WITH_DOCS) + generate_html(TARGET ALL_VECTOR_MODULES NAME vectorintro) + generate_html(TARGET ALL_VECTOR_MODULES NAME lrs SOURCEDIR + ${CMAKE_CURRENT_SOURCE_DIR}/v.lrs) +endif() + +build_program_in_subdir( + v.buffer + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_vector + LIBM) build_program_in_subdir(v.build DEPENDS grass_gis grass_vector) @@ -6,45 +134,176 @@ build_program_in_subdir(v.build.polylines DEPENDS grass_gis grass_vector) build_program_in_subdir(v.category DEPENDS grass_gis grass_vector) -build_program_in_subdir(v.class DEPENDS grass_gis grass_vector grass_arraystats) +build_program_in_subdir( + v.class + DEPENDS + grass_arraystats + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_vector) -build_program_in_subdir(v.clean DEPENDS grass_gis grass_vector) +build_program_in_subdir(v.clean DEPENDS grass_gis grass_vector LIBM) -build_program_in_subdir(v.cluster DEPENDS grass_gis grass_vector) +build_program_in_subdir(v.cluster DEPENDS grass_btree2 grass_gis grass_vector LIBM) -build_program_in_subdir(v.colors DEPENDS grass_gis grass_vector grass_raster3d) +build_program_in_subdir( + v.colors + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_raster + grass_raster3d + grass_vector) -build_program_in_subdir(v.colors.out DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.colors.out + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_raster + grass_vector) -build_program_in_subdir(v.db.connect DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.db.connect + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_vector) -build_program_in_subdir(v.db.select DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.db.select + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_vector) -build_program_in_subdir(v.decimate DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.decimate + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_raster + grass_vector) build_program_in_subdir(v.delaunay DEPENDS grass_gis grass_vector) -build_program_in_subdir(v.distance DEPENDS grass_gis grass_vector grass_gmath) +build_program_in_subdir( + v.distance + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_gmath + grass_vector + LIBM) -build_program_in_subdir(v.drape DEPENDS grass_gis grass_vector) +build_program_in_subdir(v.drape DEPENDS grass_gis grass_raster grass_vector) -build_program_in_subdir(v.edit DEPENDS grass_gis grass_vector grass_vedit) +build_program_in_subdir( + v.edit + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_vector + grass_vedit) -build_program_in_subdir(v.extract DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.extract + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_gmath + grass_vector + LIBM) -build_program_in_subdir(v.extrude DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.extrude + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_raster + grass_vector) -build_program_in_subdir(v.generalize DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.fill.holes + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_vector) + +build_program_in_subdir( + v.generalize + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_dgl + grass_dig2 + grass_gis + grass_vector + LIBM) build_program_in_subdir(v.hull DEPENDS grass_gis grass_vector) -build_program_in_subdir(v.info DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.info + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_dig2 + grass_gis + grass_vector) -build_program_in_subdir(v.in.ascii DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.in.ascii + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_vector) -build_program_in_subdir(v.in.db DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.in.db + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_vector + LIBM) -build_program_in_subdir(v.in.dxf DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.in.dxf + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_vector + LIBM) file(GLOB v_in_pdal_SOURCES "v.in.pdal/*.c" "v.in.pdal/main.cpp") build_program_in_subdir( @@ -53,72 +312,213 @@ build_program_in_subdir( "${v_in_pdal_SOURCES}" DEPENDS grass_gis + grass_gproj grass_vector + LIBM PRIMARY_DEPENDS PDAL) -build_program_in_subdir(v.in.region DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.in.region + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_raster + grass_vector) -build_program_in_subdir(v.kcv DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.kcv + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_vector + LIBM) -build_program_in_subdir(v.kernel DEPENDS grass_gis grass_vector) +build_program_in_subdir(v.kernel DEPENDS grass_gis grass_gmath grass_raster + grass_vector LIBM) -build_program_in_subdir(v.label DEPENDS grass_gis grass_vector grass_display) +build_program_in_subdir( + v.label + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_display + grass_gis + grass_vector) -build_program_in_subdir(v.label.sa DEPENDS grass_gis grass_vector grass_display) +build_program_in_subdir( + v.label.sa + DEPENDS + FREETYPE + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_dig2 + grass_display + grass_gis + grass_vector + LIBM) -build_program_in_subdir(v.proj DEPENDS grass_gis grass_vector grass_gproj) +build_program_in_subdir(v.proj DEPENDS grass_gis grass_gproj grass_vector LIBM) build_program_in_subdir(v.profile DEPENDS grass_gis grass_vector) add_subdirectory(v.lrs) -build_program_in_subdir(v.mkgrid DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.mkgrid + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_vector + LIBM) -build_program_in_subdir(v.neighbors DEPENDS grass_gis grass_vector grass_stats) +build_program_in_subdir( + v.neighbors + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_raster + grass_stats + grass_vector + LIBM) -build_program_in_subdir(v.net DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.net + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_vector + LIBM) -build_program_in_subdir(v.net.alloc DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.net.alloc + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_dgl + grass_gis + grass_vector) -build_program_in_subdir(v.net.allpairs DEPENDS grass_gis grass_vector - grass_neta) +build_program_in_subdir( + v.net.allpairs + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_neta + grass_vector) -build_program_in_subdir(v.net.bridge DEPENDS grass_gis grass_vector grass_neta) +build_program_in_subdir(v.net.bridge DEPENDS grass_gis grass_neta grass_vector) -build_program_in_subdir(v.net.centrality DEPENDS grass_gis grass_vector - grass_neta) +build_program_in_subdir( + v.net.centrality + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_dgl + grass_gis + grass_neta + grass_vector) -build_program_in_subdir(v.net.components DEPENDS grass_gis grass_vector - grass_neta) +build_program_in_subdir( + v.net.components + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_neta + grass_vector) -build_program_in_subdir(v.net.connectivity DEPENDS grass_gis grass_vector - grass_neta) +build_program_in_subdir(v.net.connectivity DEPENDS grass_gis grass_neta + grass_vector) -build_program_in_subdir(v.net.distance DEPENDS grass_gis grass_vector - grass_neta) +build_program_in_subdir( + v.net.distance + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_dgl + grass_gis + grass_neta + grass_vector) -build_program_in_subdir(v.net.flow DEPENDS grass_gis grass_vector grass_neta) +build_program_in_subdir( + v.net.flow + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_neta + grass_vector) -build_program_in_subdir(v.net.iso DEPENDS grass_gis grass_vector grass_neta) +build_program_in_subdir( + v.net.iso + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_dgl + grass_gis + grass_vector) -build_program_in_subdir(v.net.path DEPENDS grass_gis grass_vector grass_neta) +build_program_in_subdir( + v.net.path + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_vector) -build_program_in_subdir(v.net.salesman DEPENDS grass_gis grass_vector - grass_neta) +build_program_in_subdir(v.net.salesman DEPENDS grass_gis grass_neta + grass_vector) -build_program_in_subdir(v.net.spanningtree DEPENDS grass_gis grass_vector - grass_neta) +build_program_in_subdir(v.net.spanningtree DEPENDS grass_gis grass_neta + grass_vector) -build_program_in_subdir(v.net.steiner DEPENDS grass_gis grass_vector grass_neta) +build_program_in_subdir(v.net.steiner DEPENDS grass_gis grass_neta grass_vector) -build_program_in_subdir(v.net.timetable DEPENDS grass_gis grass_vector - grass_neta) +build_program_in_subdir( + v.net.timetable + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_neta + grass_vector) -build_program_in_subdir(v.net.visibility DEPENDS grass_gis grass_vector - grass_neta) +build_program_in_subdir(v.net.visibility DEPENDS grass_dgl grass_gis + grass_vector) -build_program_in_subdir(v.normal DEPENDS grass_gis grass_vector grass_cdhc) +build_program_in_subdir( + v.normal + DEPENDS + grass_cdhc + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_vector + LIBM) build_program_in_subdir(v.out.ascii DEPENDS grass_gis grass_vector) @@ -126,127 +526,414 @@ build_program_in_subdir(v.out.dxf DEPENDS grass_gis grass_vector) build_program_in_subdir(v.out.pov DEPENDS grass_gis grass_vector) -build_program_in_subdir(v.out.svg DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.out.svg + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_vector) -build_program_in_subdir(v.out.vtk DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.out.vtk + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_vector) -build_program_in_subdir(v.outlier DEPENDS grass_gis grass_vector grass_lidar) +build_program_in_subdir( + v.outlier + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_gmath + grass_lidar + grass_vector + LIBM) -build_program_in_subdir(v.overlay DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.overlay + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_vector) build_program_in_subdir(v.parallel DEPENDS grass_gis grass_vector) -build_program_in_subdir(v.patch DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.patch + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_vector + LIBM) -build_program_in_subdir(v.perturb DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.perturb + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_vector + LIBM) -build_program_in_subdir(v.split DEPENDS grass_gis grass_vector) +build_program_in_subdir(v.split DEPENDS grass_gis grass_vector LIBM) -build_program_in_subdir(v.qcount DEPENDS grass_gis grass_vector) +build_program_in_subdir(v.qcount DEPENDS grass_gis grass_vector LIBM) -build_program_in_subdir(v.random DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.random + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_vector) -build_program_in_subdir(v.reclass DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.reclass + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_vector) -build_program_in_subdir(v.rectify DEPENDS grass_gis grass_vector grass_imagery) +build_program_in_subdir(v.rectify DEPENDS grass_gis grass_gmath grass_imagery + grass_vector LIBM) -build_program_in_subdir(v.sample DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.sample + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_raster + grass_vector) -build_program_in_subdir(v.segment DEPENDS grass_gis grass_vector) +build_program_in_subdir(v.segment DEPENDS grass_gis grass_vector LIBM) -build_program_in_subdir(v.select DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.select + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_vector) build_program_in_subdir(v.support DEPENDS grass_gis grass_vector) -build_program_in_subdir(v.surf.bspline DEPENDS grass_gis grass_vector - grass_lidar grass_gpde) +build_program_in_subdir( + v.surf.bspline + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_gmath + grass_gpde + grass_lidar + grass_raster + grass_segment + grass_vector + LIBM) -build_program_in_subdir(v.surf.idw DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.surf.idw + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_raster + grass_vector + LIBM) build_program_in_subdir( v.surf.rst DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver grass_gis - grass_vector + grass_gmath grass_interpdata grass_interpfl grass_qtree + grass_vector + LIBM OPTIONAL_DEPENDS OPENMP) -build_program_in_subdir(v.transform DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.transform + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_vector + LIBM) build_program_in_subdir(v.timestamp DEPENDS grass_gis grass_vector) -build_program_in_subdir(v.to.3d DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.to.3d + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_vector) -build_program_in_subdir(v.to.db DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.to.db + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_vector + LIBM) -build_program_in_subdir(v.to.points DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.to.points + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_vector + LIBM) -build_program_in_subdir(v.to.rast DEPENDS grass_gis grass_vector grass_raster) +build_program_in_subdir( + v.to.rast + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_raster + grass_vector + LIBM) -build_program_in_subdir(v.to.rast3 DEPENDS grass_gis grass_vector - grass_raster3d) +build_program_in_subdir( + v.to.rast3 + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_raster3d + grass_vector + LIBM) build_program_in_subdir(v.type DEPENDS grass_gis grass_vector) -build_program_in_subdir(v.univar DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.univar + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_vector + LIBM) -build_program_in_subdir(v.voronoi DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.voronoi + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_dig2 + grass_gis + grass_vector + LIBM) -build_program_in_subdir(v.what DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.what + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_vector) -build_program_in_subdir(v.what.rast DEPENDS grass_gis grass_vector grass_raster) +build_program_in_subdir( + v.what.rast + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_raster + grass_vector) -build_program_in_subdir(v.what.rast3 DEPENDS grass_gis grass_vector - grass_raster3d) +build_program_in_subdir( + v.what.rast3 + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_raster3d + grass_vector) -build_program_in_subdir(v.vect.stats DEPENDS grass_gis grass_vector grass_stats) +build_program_in_subdir( + v.vect.stats + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_stats + grass_vector) -build_program_in_subdir(v.vol.rst DEPENDS grass_gis grass_vector grass_raster3d - grass_bitmap) +build_program_in_subdir( + v.vol.rst + DEPENDS + grass_bitmap + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_raster + grass_raster3d + grass_vector + LIBM) -build_program_in_subdir(v.out.ogr DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.out.ogr + DEPENDS + GDAL + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_gproj + grass_vector + PROJ) -build_program_in_subdir(v.in.ogr DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.in.ogr + DEPENDS + GDAL + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_gproj + grass_vector + LIBM) -build_program_in_subdir(v.external DEPENDS grass_gis grass_vector) +build_program_in_subdir( + v.external + DEPENDS + GDAL + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_gproj + grass_vector + PROJ + OPTIONAL_DEPENDS + POSTGRES) -build_program_in_subdir(v.external.out DEPENDS grass_gis grass_vector) +build_program_in_subdir(v.external.out DEPENDS GDAL grass_gis grass_vector) -build_program_in_subdir(v.in.lidar DEPENDS grass_gis grass_vector - PRIMARY_DEPENDS LIBLAS) +build_program_in_subdir( + v.in.lidar + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_gproj + grass_vector + LIBM + PRIMARY_DEPENDS + LIBLAS) build_program_in_subdir( v.lidar.correction DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver grass_gis - grass_vector + grass_gmath grass_lidar + grass_vector + LIBM PRIMARY_DEPENDS LIBLAS) build_program_in_subdir( v.lidar.edgedetection DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver grass_gis - grass_vector + grass_gmath grass_lidar + grass_vector + LIBM + PRIMARY_DEPENDS + LIBLAS) + +build_program_in_subdir( + v.lidar.growing + DEPENDS grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis grass_gmath + grass_raster + grass_vector PRIMARY_DEPENDS LIBLAS) -build_program_in_subdir(v.lidar.growing DEPENDS grass_gis grass_vector - PRIMARY_DEPENDS LIBLAS) - -build_program_in_subdir(v.out.lidar DEPENDS grass_gis grass_vector - PRIMARY_DEPENDS LIBLAS) +build_program_in_subdir( + v.out.lidar + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_gproj + grass_raster + grass_vector + LIBM + PRIMARY_DEPENDS + LIBLAS) -build_program_in_subdir(v.out.postgis DEPENDS grass_gis grass_vector - PRIMARY_DEPENDS POSTGRES) +build_program_in_subdir( + v.out.postgis + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + grass_gis + grass_vector + PRIMARY_DEPENDS + POSTGRES) if(WITH_OPENDWG) - build_program_in_subdir(v.in.dwg DEPENDS grass_gis grass_vector) + build_program_in_subdir(v.in.dwg DEPENDS grass_gis grass_vector LIBM) endif() diff --git a/vector/v.lrs/CMakeLists.txt b/vector/v.lrs/CMakeLists.txt index 90a0619b96e..81008fbce86 100644 --- a/vector/v.lrs/CMakeLists.txt +++ b/vector/v.lrs/CMakeLists.txt @@ -4,14 +4,51 @@ build_library_in_subdir( grass_lrs DEPENDS grass_gis - grass_vector + grass_dbmibase + grass_dbmiclient + grass_dbmidriver HEADERS "lrs.h") add_dependencies(grass_lrs db.drivers) -build_program_in_subdir(v.lrs.create DEPENDS grass_lrs) +build_program_in_subdir( + v.lrs.create + DEPENDS + grass_lrs + grass_vector + grass_gis + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + LIBM) -build_program_in_subdir(v.lrs.segment DEPENDS grass_lrs) +build_program_in_subdir( + v.lrs.segment + DEPENDS + grass_lrs + grass_vector + grass_gis + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + LIBM) -build_program_in_subdir(v.lrs.label DEPENDS grass_lrs) +build_program_in_subdir( + v.lrs.label + DEPENDS + grass_lrs + grass_vector + grass_gis + grass_dbmibase + grass_dbmiclient + grass_dbmidriver + LIBM) -build_program_in_subdir(v.lrs.where DEPENDS grass_lrs) +build_program_in_subdir( + v.lrs.where + DEPENDS + grass_lrs + grass_vector + grass_gis + grass_dbmibase + grass_dbmiclient + grass_dbmidriver) From dc0ef0968b4b40782b247d1055dd54c9a756f285 Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Sat, 25 May 2024 00:24:59 +0200 Subject: [PATCH 151/253] CI: restore original state --- .github/workflows/cmake.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 660dc9c645c..bcc59d1380d 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -4,7 +4,16 @@ --- name: CMake -on: [push] +on: + push: + paths-ignore: + - 'doc/**' + branches: + - main + - releasebranch_* + pull_request: + paths-ignore: + - 'doc/**' concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.ref }} From 4bfea82b0c72235fcb8d3643900854580f086afa Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Mon, 15 Jul 2024 17:12:47 -0600 Subject: [PATCH 152/253] Added parson to r.info, r.profile, v.info --- raster/CMakeLists.txt | 4 ++-- vector/CMakeLists.txt | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/raster/CMakeLists.txt b/raster/CMakeLists.txt index 53a59863b45..5e36e052ab2 100644 --- a/raster/CMakeLists.txt +++ b/raster/CMakeLists.txt @@ -284,7 +284,7 @@ if(NOT MSVC) build_program_in_subdir(r.in.xyz DEPENDS grass_gis grass_raster LIBM) endif() build_program_in_subdir(r.info TEST_SOURCES "test_r_info.py" DEPENDS grass_gis LIBM - grass_raster) + grass_raster grass_parson) build_program_in_subdir(r.kappa DEPENDS grass_gis grass_raster LIBM) @@ -376,7 +376,7 @@ build_program_in_subdir(r.patch DEPENDS grass_gis grass_raster OPTIONAL_DEPENDS build_program_in_subdir(r.path DEPENDS grass_gis grass_raster grass_vector) -build_program_in_subdir(r.profile DEPENDS grass_gis grass_raster LIBM) +build_program_in_subdir(r.profile DEPENDS grass_gis grass_raster grass_parson LIBM) build_program_in_subdir( r.proj diff --git a/vector/CMakeLists.txt b/vector/CMakeLists.txt index e769b7a592b..4f10da34d6e 100644 --- a/vector/CMakeLists.txt +++ b/vector/CMakeLists.txt @@ -274,7 +274,8 @@ build_program_in_subdir( grass_dbmidriver grass_dig2 grass_gis - grass_vector) + grass_vector + grass_parson) build_program_in_subdir( v.in.ascii From 9135c6b7f27e9251ff7e5ee53c803073912deb69 Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Wed, 17 Jul 2024 17:28:28 -0600 Subject: [PATCH 153/253] Fixed Building grass with Ubuntu System Libraries and cmake --- display/CMakeLists.txt | 11 +- general/CMakeLists.txt | 4 +- general/manage/lister/CMakeLists.txt | 1 + lib/CMakeLists.txt | 11 +- lib/rst/CMakeLists.txt | 1 + lib/vector/CMakeLists.txt | 6 +- misc/CMakeLists.txt | 4 +- ps/CMakeLists.txt | 1 + .../CMakeLists.txt | 2 +- raster/CMakeLists.txt | 37 ++-- raster/r.sim/CMakeLists.txt | 3 + raster3d/r3.flow/CMakeLists.txt | 2 + vector/CMakeLists.txt | 183 ++++++++++++------ vector/v.lrs/CMakeLists.txt | 6 +- 14 files changed, 184 insertions(+), 88 deletions(-) diff --git a/display/CMakeLists.txt b/display/CMakeLists.txt index 4369a442a6a..3fc11e8674c 100644 --- a/display/CMakeLists.txt +++ b/display/CMakeLists.txt @@ -81,7 +81,7 @@ if(WITH_DOCS) DESTINATION ${GRASS_INSTALL_DOCDIR}) endif() build_program_in_subdir(d.grid DEPENDS grass_gis grass_symb grass_gproj - grass_display LIBM) + grass_display GDAL 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) @@ -103,7 +103,7 @@ if(WITH_DOCS) 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.path DEPENDS grass_gis grass_display grass_vector GDAL) build_program_in_subdir(d.profile DEPENDS grass_gis grass_display grass_raster 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 @@ -125,6 +125,7 @@ build_program_in_subdir( grass_raster grass_symb grass_vector + GDAL LIBM) build_program_in_subdir( d.vect.chart @@ -136,6 +137,7 @@ build_program_in_subdir( grass_gis grass_symb grass_vector + GDAL LIBM) build_program_in_subdir( d.vect.thematic @@ -147,5 +149,6 @@ build_program_in_subdir( grass_display grass_gis grass_symb - grass_vector) -build_program_in_subdir(d.where DEPENDS grass_gis grass_display grass_gproj) + grass_vector + GDAL) +build_program_in_subdir(d.where DEPENDS grass_gis grass_display grass_gproj GDAL) diff --git a/general/CMakeLists.txt b/general/CMakeLists.txt index a3fe869592b..b6d83d6265b 100644 --- a/general/CMakeLists.txt +++ b/general/CMakeLists.txt @@ -35,6 +35,7 @@ build_program_in_subdir( grass_raster3d grass_gmath PROJ + GDAL LIBM) build_program_in_subdir(g.rename DEPENDS grass_gis grass_manage grass_raster) @@ -72,7 +73,8 @@ build_program_in_subdir( grass_manage grass_raster grass_raster3d - grass_vector) + grass_vector + GDAL) 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..a7e9359bcd7 100644 --- a/general/manage/lister/CMakeLists.txt +++ b/general/manage/lister/CMakeLists.txt @@ -22,6 +22,7 @@ build_program( grass_dbmibase grass_gis grass_raster + GDAL RUNTIME_OUTPUT_DIR "${GRASS_INSTALL_ETCDIR}/lister" NO_DOCS) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index bf100e95d27..bb9258ac353 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -146,7 +146,7 @@ add_subdirectory(fonts) add_subdirectory(vector) -build_library_in_subdir(imagery DEPENDS grass_gis grass_vector grass_raster) +build_library_in_subdir(imagery DEPENDS grass_gis grass_vector grass_raster GDAL) build_library_in_subdir(cluster DEPENDS grass_imagery grass_gis grass_raster) @@ -168,6 +168,7 @@ build_library_in_subdir( grass_dbmidriver grass_gmath grass_segment + GDAL HEADERS "lidar.h") @@ -181,7 +182,8 @@ build_program_in_subdir( DEPENDS grass_gis grass_raster3d - grass_raster) + grass_raster + GDAL) build_library_in_subdir( gpde @@ -217,7 +219,7 @@ build_library_in_subdir(stats DEPENDS grass_gis grass_raster) build_library_in_subdir(arraystats DEPENDS grass_gis) -if(WITH_OPENGL) +if(WITH_OPENGL AND OPENGL_GLU_FOUND AND OpenGL_GLX_FOUND) build_library_in_subdir( ogsf DEPENDS @@ -229,6 +231,7 @@ if(WITH_OPENGL) grass_raster grass_raster3d grass_vector + GDAL OPENGL TIFF) @@ -250,7 +253,7 @@ 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) + grass_raster3d GDAL) file(COPY manage/element_list DESTINATION ${OUTDIR}/${GRASS_INSTALL_ETCDIR}) install(FILES ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/element_list DESTINATION ${GRASS_INSTALL_ETCDIR}) diff --git a/lib/rst/CMakeLists.txt b/lib/rst/CMakeLists.txt index 61fb629e2cc..b555d701dce 100644 --- a/lib/rst/CMakeLists.txt +++ b/lib/rst/CMakeLists.txt @@ -33,6 +33,7 @@ build_library_in_subdir( grass_vector grass_qtree grass_interpdata + GDAL LIBM OPTIONAL_DEPENDS OPENMP diff --git a/lib/vector/CMakeLists.txt b/lib/vector/CMakeLists.txt index 9272e432253..083b489d8f7 100644 --- a/lib/vector/CMakeLists.txt +++ b/lib/vector/CMakeLists.txt @@ -42,7 +42,8 @@ build_library_in_subdir( grass_vector grass_dbmibase grass_dbmiclient - grass_dbmidriver) + grass_dbmidriver + GDAL) build_library_in_subdir( neta @@ -54,7 +55,8 @@ build_library_in_subdir( grass_dbmidriver grass_gis grass_dgl - grass_vector) + grass_vector + GDAL) if(WITH_DOCS) generate_html(TARGET grass_vector NAME vectorascii) diff --git a/misc/CMakeLists.txt b/misc/CMakeLists.txt index 53f4757eb46..1319f76836d 100644 --- a/misc/CMakeLists.txt +++ b/misc/CMakeLists.txt @@ -5,7 +5,7 @@ build_program_in_subdir(m.measure DEPENDS grass_gis) build_program_in_subdir(m.transform DEPENDS grass_gis grass_imagery grass_raster grass_vector LIBM) -if(WITH_OPENGL) +if(TARGET grass_ogsf) build_program_in_subdir( m.nviz.image DEPENDS @@ -19,4 +19,4 @@ if(WITH_OPENGL) build_program_in_subdir(m.nviz.script DEPENDS grass_display grass_raster grass_gis LIBM) -endif(WITH_OPENGL) +endif(TARGET grass_ogsf) diff --git a/ps/CMakeLists.txt b/ps/CMakeLists.txt index 7a714ffcc0e..fed179fe016 100644 --- a/ps/CMakeLists.txt +++ b/ps/CMakeLists.txt @@ -11,6 +11,7 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver grass_symb + GDAL LIBM) add_custom_command( diff --git a/python/libgrass_interface_generator/CMakeLists.txt b/python/libgrass_interface_generator/CMakeLists.txt index 7c2a429f080..129320cf1ff 100644 --- a/python/libgrass_interface_generator/CMakeLists.txt +++ b/python/libgrass_interface_generator/CMakeLists.txt @@ -18,7 +18,7 @@ set(MODULES rowio temporal) -if(WITH_OPENGL) +if(TARGET grass_ogsf) list(APPEND MODULES ogsf nviz) endif() diff --git a/raster/CMakeLists.txt b/raster/CMakeLists.txt index 5e36e052ab2..534e4133b1d 100644 --- a/raster/CMakeLists.txt +++ b/raster/CMakeLists.txt @@ -161,6 +161,7 @@ build_program_in_subdir( grass_vector grass_bitmap grass_dig2 + GDAL LIBM) build_program_in_subdir(r.category DEPENDS grass_gis grass_raster) @@ -188,10 +189,11 @@ build_program_in_subdir( grass_dbmibase grass_dbmiclient grass_dbmidriver + GDAL LIBM) build_program_in_subdir(r.cost DEPENDS grass_gis grass_raster grass_segment - grass_vector LIBM) + grass_vector GDAL LIBM) build_program_in_subdir(r.covar DEPENDS grass_gis grass_raster LIBM) @@ -226,6 +228,7 @@ build_program_in_subdir( grass_segment grass_vector grass_bitmap + GDAL LIBM) build_program_in_subdir(r.geomorphon DEPENDS grass_gis grass_raster grass_gmath LIBM) @@ -238,7 +241,7 @@ build_program_in_subdir(r.gwflow DEPENDS grass_gis grass_raster grass_gpde build_program_in_subdir(r.his DEPENDS grass_gis grass_raster grass_gproj) build_program_in_subdir(r.horizon DEPENDS grass_gis grass_raster grass_gproj - grass_parson LIBM) + grass_parson GDAL LIBM) build_program_in_subdir(r.in.ascii DEPENDS grass_gis grass_raster) @@ -270,6 +273,7 @@ build_program_in_subdir( grass_gmath grass_segment grass_gproj + GDAL LIBM PRIMARY_DEPENDS PDAL) @@ -288,7 +292,7 @@ build_program_in_subdir(r.info TEST_SOURCES "test_r_info.py" DEPENDS grass_gis L build_program_in_subdir(r.kappa DEPENDS grass_gis grass_raster LIBM) -build_program_in_subdir(r.latlong DEPENDS grass_gis grass_raster grass_gproj) +build_program_in_subdir(r.latlong DEPENDS grass_gis grass_raster grass_gproj GDAL) build_program_in_subdir(r.lake DEPENDS grass_gis grass_raster) @@ -374,7 +378,7 @@ build_program_in_subdir( build_program_in_subdir(r.patch DEPENDS grass_gis grass_raster OPTIONAL_DEPENDS OPENMP) -build_program_in_subdir(r.path DEPENDS grass_gis grass_raster grass_vector) +build_program_in_subdir(r.path DEPENDS grass_gis grass_raster grass_vector GDAL) build_program_in_subdir(r.profile DEPENDS grass_gis grass_raster grass_parson LIBM) @@ -384,6 +388,7 @@ build_program_in_subdir( grass_gis grass_raster grass_gproj + GDAL LIBM OPTIONAL_DEPENDS OPENMP) @@ -401,6 +406,7 @@ build_program_in_subdir( grass_dbmibase grass_dbmiclient grass_dbmidriver + GDAL LIBM) build_program_in_subdir(r.random.cells DEPENDS grass_gis grass_raster LIBM) @@ -411,7 +417,7 @@ build_program_in_subdir(r.reclass DEPENDS grass_gis grass_raster grass_manage) 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.region DEPENDS grass_gis grass_raster grass_vector GDAL) build_program_in_subdir(r.regression.line DEPENDS grass_gis grass_raster LIBM) @@ -428,6 +434,7 @@ build_program_in_subdir( grass_vector grass_segment grass_lidar + GDAL LIBM) build_program_in_subdir(r.resamp.filter DEPENDS grass_gis grass_raster LIBM @@ -444,7 +451,9 @@ build_program_in_subdir( grass_gmath grass_interpfl grass_interpdata - grass_qtree) + grass_qtree + GDAL) + build_program_in_subdir(r.resamp.stats DEPENDS grass_gis grass_raster grass_stats LIBM) @@ -511,6 +520,7 @@ build_program_in_subdir( grass_dbmibase grass_dbmiclient grass_dbmidriver + GDAL LIBM) build_program_in_subdir( @@ -520,13 +530,14 @@ build_program_in_subdir( grass_gmath grass_raster grass_gproj + GDAL LIBM OPTIONAL_DEPENDS OPENMP) -build_program_in_subdir(r.sunhours DEPENDS grass_gis grass_raster grass_gproj LIBM) +build_program_in_subdir(r.sunhours DEPENDS grass_gis grass_raster grass_gproj GDAL LIBM) -build_program_in_subdir(r.sunmask DEPENDS grass_gis grass_raster grass_gproj LIBM) +build_program_in_subdir(r.sunmask DEPENDS grass_gis grass_raster grass_gproj GDAL LIBM) build_program_in_subdir(r.support DEPENDS grass_gis grass_raster) @@ -574,7 +585,8 @@ build_program_in_subdir( grass_vector grass_dbmibase grass_dbmiclient - grass_dbmidriver) + grass_dbmidriver + GDAL) build_program_in_subdir(r.topidx DEPENDS grass_gis grass_raster LIBM) @@ -596,15 +608,16 @@ build_program_in_subdir( grass_vector grass_dbmibase grass_dbmiclient - grass_dbmidriver) + grass_dbmidriver + GDAL) build_program_in_subdir(r.walk DEPENDS grass_gis grass_raster grass_segment - grass_vector LIBM) + grass_vector GDAL 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 GDAL) build_program_in_subdir(r.what.color DEPENDS grass_gis grass_raster) diff --git a/raster/r.sim/CMakeLists.txt b/raster/r.sim/CMakeLists.txt index 60295c44446..904eecae8a0 100644 --- a/raster/r.sim/CMakeLists.txt +++ b/raster/r.sim/CMakeLists.txt @@ -8,6 +8,7 @@ build_library_in_subdir( grass_raster grass_vector grass_gmath + GDAL LIBM OPTIONAL_DEPENDS OPENMP @@ -21,6 +22,7 @@ build_program_in_subdir( grass_gis grass_gmath grass_sim + GDAL OPTIONAL_DEPENDS OPENMP INCLUDES @@ -32,6 +34,7 @@ build_program_in_subdir( grass_gis grass_gmath grass_sim + GDAL OPTIONAL_DEPENDS OPENMP INCLUDES diff --git a/raster3d/r3.flow/CMakeLists.txt b/raster3d/r3.flow/CMakeLists.txt index 961d981b554..cc7d9258981 100644 --- a/raster3d/r3.flow/CMakeLists.txt +++ b/raster3d/r3.flow/CMakeLists.txt @@ -13,6 +13,7 @@ build_program( grass_raster grass_raster3d grass_vector + GDAL LIBM) set(test_r3flow_SRCS test_main.c flowline.c integrate.c interpolate.c @@ -31,4 +32,5 @@ build_program( grass_dbmiclient grass_dbmidriver grass_vector + GDAL LIBM) diff --git a/vector/CMakeLists.txt b/vector/CMakeLists.txt index 4f10da34d6e..b4165637b57 100644 --- a/vector/CMakeLists.txt +++ b/vector/CMakeLists.txt @@ -126,13 +126,14 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_vector + GDAL LIBM) -build_program_in_subdir(v.build DEPENDS grass_gis grass_vector) +build_program_in_subdir(v.build DEPENDS grass_gis grass_vector GDAL) -build_program_in_subdir(v.build.polylines DEPENDS grass_gis grass_vector) +build_program_in_subdir(v.build.polylines DEPENDS grass_gis grass_vector GDAL) -build_program_in_subdir(v.category DEPENDS grass_gis grass_vector) +build_program_in_subdir(v.category DEPENDS grass_gis grass_vector GDAL) build_program_in_subdir( v.class @@ -142,11 +143,12 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver grass_gis - grass_vector) + grass_vector + GDAL) -build_program_in_subdir(v.clean DEPENDS grass_gis grass_vector LIBM) +build_program_in_subdir(v.clean DEPENDS grass_gis grass_vector GDAL LIBM) -build_program_in_subdir(v.cluster DEPENDS grass_btree2 grass_gis grass_vector LIBM) +build_program_in_subdir(v.cluster DEPENDS grass_btree2 grass_gis grass_vector GDAL LIBM) build_program_in_subdir( v.colors @@ -157,7 +159,8 @@ build_program_in_subdir( grass_gis grass_raster grass_raster3d - grass_vector) + grass_vector + GDAL) build_program_in_subdir( v.colors.out @@ -167,7 +170,8 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_raster - grass_vector) + grass_vector + GDAL) build_program_in_subdir( v.db.connect @@ -176,7 +180,8 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver grass_gis - grass_vector) + grass_vector + GDAL) build_program_in_subdir( v.db.select @@ -185,7 +190,8 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver grass_gis - grass_vector) + grass_vector + GDAL) build_program_in_subdir( v.decimate @@ -195,9 +201,10 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_raster - grass_vector) + grass_vector + GDAL) -build_program_in_subdir(v.delaunay DEPENDS grass_gis grass_vector) +build_program_in_subdir(v.delaunay DEPENDS grass_gis grass_vector GDAL) build_program_in_subdir( v.distance @@ -208,9 +215,10 @@ build_program_in_subdir( grass_gis grass_gmath grass_vector + GDAL LIBM) -build_program_in_subdir(v.drape DEPENDS grass_gis grass_raster grass_vector) +build_program_in_subdir(v.drape DEPENDS grass_gis grass_raster grass_vector GDAL) build_program_in_subdir( v.edit @@ -220,7 +228,8 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_vector - grass_vedit) + grass_vedit + GDAL) build_program_in_subdir( v.extract @@ -231,6 +240,7 @@ build_program_in_subdir( grass_gis grass_gmath grass_vector + GDAL LIBM) build_program_in_subdir( @@ -241,7 +251,8 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_raster - grass_vector) + grass_vector + GDAL) build_program_in_subdir( v.fill.holes @@ -250,7 +261,8 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver grass_gis - grass_vector) + grass_vector + GDAL) build_program_in_subdir( v.generalize @@ -262,9 +274,10 @@ build_program_in_subdir( grass_dig2 grass_gis grass_vector + GDAL LIBM) -build_program_in_subdir(v.hull DEPENDS grass_gis grass_vector) +build_program_in_subdir(v.hull DEPENDS grass_gis grass_vector GDAL) build_program_in_subdir( v.info @@ -275,7 +288,8 @@ build_program_in_subdir( grass_dig2 grass_gis grass_vector - grass_parson) + grass_parson + GDAL) build_program_in_subdir( v.in.ascii @@ -284,7 +298,8 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver grass_gis - grass_vector) + grass_vector + GDAL) build_program_in_subdir( v.in.db @@ -294,6 +309,7 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_vector + GDAL LIBM) build_program_in_subdir( @@ -304,6 +320,7 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_vector + GDAL LIBM) file(GLOB v_in_pdal_SOURCES "v.in.pdal/*.c" "v.in.pdal/main.cpp") @@ -315,6 +332,7 @@ build_program_in_subdir( grass_gis grass_gproj grass_vector + GDAL LIBM PRIMARY_DEPENDS PDAL) @@ -327,7 +345,8 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_raster - grass_vector) + grass_vector + GDAL) build_program_in_subdir( v.kcv @@ -337,10 +356,11 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_vector + GDAL LIBM) build_program_in_subdir(v.kernel DEPENDS grass_gis grass_gmath grass_raster - grass_vector LIBM) + grass_vector GDAL LIBM) build_program_in_subdir( v.label @@ -350,7 +370,8 @@ build_program_in_subdir( grass_dbmidriver grass_display grass_gis - grass_vector) + grass_vector + GDAL) build_program_in_subdir( v.label.sa @@ -363,11 +384,12 @@ build_program_in_subdir( grass_display grass_gis grass_vector + GDAL LIBM) -build_program_in_subdir(v.proj DEPENDS grass_gis grass_gproj grass_vector LIBM) +build_program_in_subdir(v.proj DEPENDS grass_gis grass_gproj grass_vector GDAL LIBM) -build_program_in_subdir(v.profile DEPENDS grass_gis grass_vector) +build_program_in_subdir(v.profile DEPENDS grass_gis grass_vector GDAL) add_subdirectory(v.lrs) @@ -379,6 +401,7 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_vector + GDAL LIBM) build_program_in_subdir( @@ -391,6 +414,7 @@ build_program_in_subdir( grass_raster grass_stats grass_vector + GDAL LIBM) build_program_in_subdir( @@ -401,6 +425,7 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_vector + GDAL LIBM) build_program_in_subdir( @@ -411,7 +436,8 @@ build_program_in_subdir( grass_dbmidriver grass_dgl grass_gis - grass_vector) + grass_vector + GDAL) build_program_in_subdir( v.net.allpairs @@ -421,9 +447,10 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_neta - grass_vector) + grass_vector + GDAL) -build_program_in_subdir(v.net.bridge DEPENDS grass_gis grass_neta grass_vector) +build_program_in_subdir(v.net.bridge DEPENDS grass_gis grass_neta grass_vector GDAL) build_program_in_subdir( v.net.centrality @@ -434,7 +461,8 @@ build_program_in_subdir( grass_dgl grass_gis grass_neta - grass_vector) + grass_vector + GDAL) build_program_in_subdir( v.net.components @@ -444,10 +472,11 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_neta - grass_vector) + grass_vector + GDAL) build_program_in_subdir(v.net.connectivity DEPENDS grass_gis grass_neta - grass_vector) + grass_vector GDAL) build_program_in_subdir( v.net.distance @@ -458,7 +487,8 @@ build_program_in_subdir( grass_dgl grass_gis grass_neta - grass_vector) + grass_vector + GDAL) build_program_in_subdir( v.net.flow @@ -468,7 +498,8 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_neta - grass_vector) + grass_vector + GDAL) build_program_in_subdir( v.net.iso @@ -478,7 +509,8 @@ build_program_in_subdir( grass_dbmidriver grass_dgl grass_gis - grass_vector) + grass_vector + GDAL) build_program_in_subdir( v.net.path @@ -487,15 +519,16 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver grass_gis - grass_vector) + grass_vector + GDAL) build_program_in_subdir(v.net.salesman DEPENDS grass_gis grass_neta - grass_vector) + grass_vector GDAL) build_program_in_subdir(v.net.spanningtree DEPENDS grass_gis grass_neta - grass_vector) + grass_vector GDAL) -build_program_in_subdir(v.net.steiner DEPENDS grass_gis grass_neta grass_vector) +build_program_in_subdir(v.net.steiner DEPENDS grass_gis grass_neta grass_vector GDAL) build_program_in_subdir( v.net.timetable @@ -505,10 +538,11 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_neta - grass_vector) + grass_vector + GDAL) build_program_in_subdir(v.net.visibility DEPENDS grass_dgl grass_gis - grass_vector) + grass_vector GDAL) build_program_in_subdir( v.normal @@ -519,13 +553,14 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_vector + GDAL LIBM) -build_program_in_subdir(v.out.ascii DEPENDS grass_gis grass_vector) +build_program_in_subdir(v.out.ascii DEPENDS grass_gis grass_vector GDAL) -build_program_in_subdir(v.out.dxf DEPENDS grass_gis grass_vector) +build_program_in_subdir(v.out.dxf DEPENDS grass_gis grass_vector GDAL) -build_program_in_subdir(v.out.pov DEPENDS grass_gis grass_vector) +build_program_in_subdir(v.out.pov DEPENDS grass_gis grass_vector GDAL) build_program_in_subdir( v.out.svg @@ -534,7 +569,8 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver grass_gis - grass_vector) + grass_vector + GDAL) build_program_in_subdir( v.out.vtk @@ -543,7 +579,8 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver grass_gis - grass_vector) + grass_vector + GDAL) build_program_in_subdir( v.outlier @@ -555,6 +592,7 @@ build_program_in_subdir( grass_gmath grass_lidar grass_vector + GDAL LIBM) build_program_in_subdir( @@ -564,9 +602,10 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver grass_gis - grass_vector) + grass_vector + GDAL) -build_program_in_subdir(v.parallel DEPENDS grass_gis grass_vector) +build_program_in_subdir(v.parallel DEPENDS grass_gis grass_vector GDAL) build_program_in_subdir( v.patch @@ -576,6 +615,7 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_vector + GDAL LIBM) build_program_in_subdir( @@ -586,11 +626,12 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_vector + GDAL LIBM) -build_program_in_subdir(v.split DEPENDS grass_gis grass_vector LIBM) +build_program_in_subdir(v.split DEPENDS grass_gis grass_vector GDAL LIBM) -build_program_in_subdir(v.qcount DEPENDS grass_gis grass_vector LIBM) +build_program_in_subdir(v.qcount DEPENDS grass_gis grass_vector GDAL LIBM) build_program_in_subdir( v.random @@ -599,7 +640,8 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver grass_gis - grass_vector) + grass_vector + GDAL) build_program_in_subdir( v.reclass @@ -608,10 +650,11 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver grass_gis - grass_vector) + grass_vector + GDAL) build_program_in_subdir(v.rectify DEPENDS grass_gis grass_gmath grass_imagery - grass_vector LIBM) + grass_vector GDAL LIBM) build_program_in_subdir( v.sample @@ -621,9 +664,10 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_raster - grass_vector) + grass_vector + GDAL) -build_program_in_subdir(v.segment DEPENDS grass_gis grass_vector LIBM) +build_program_in_subdir(v.segment DEPENDS grass_gis grass_vector GDAL LIBM) build_program_in_subdir( v.select @@ -632,9 +676,10 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver grass_gis - grass_vector) + grass_vector + GDAL) -build_program_in_subdir(v.support DEPENDS grass_gis grass_vector) +build_program_in_subdir(v.support DEPENDS grass_gis grass_vector GDAL) build_program_in_subdir( v.surf.bspline @@ -649,6 +694,7 @@ build_program_in_subdir( grass_raster grass_segment grass_vector + GDAL LIBM) build_program_in_subdir( @@ -660,6 +706,7 @@ build_program_in_subdir( grass_gis grass_raster grass_vector + GDAL LIBM) build_program_in_subdir( @@ -674,6 +721,7 @@ build_program_in_subdir( grass_interpfl grass_qtree grass_vector + GDAL LIBM OPTIONAL_DEPENDS OPENMP) @@ -686,6 +734,7 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_vector + GDAL LIBM) build_program_in_subdir(v.timestamp DEPENDS grass_gis grass_vector) @@ -697,7 +746,8 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver grass_gis - grass_vector) + grass_vector + GDAL) build_program_in_subdir( v.to.db @@ -707,6 +757,7 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_vector + GDAL LIBM) build_program_in_subdir( @@ -717,6 +768,7 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_vector + GDAL LIBM) build_program_in_subdir( @@ -728,6 +780,7 @@ build_program_in_subdir( grass_gis grass_raster grass_vector + GDAL LIBM) build_program_in_subdir( @@ -739,9 +792,10 @@ build_program_in_subdir( grass_gis grass_raster3d grass_vector + GDAL LIBM) -build_program_in_subdir(v.type DEPENDS grass_gis grass_vector) +build_program_in_subdir(v.type DEPENDS grass_gis grass_vector GDAL) build_program_in_subdir( v.univar @@ -751,6 +805,7 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_vector + GDAL LIBM) build_program_in_subdir( @@ -762,6 +817,7 @@ build_program_in_subdir( grass_dig2 grass_gis grass_vector + GDAL LIBM) build_program_in_subdir( @@ -771,7 +827,8 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver grass_gis - grass_vector) + grass_vector + GDAL) build_program_in_subdir( v.what.rast @@ -781,7 +838,8 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_raster - grass_vector) + grass_vector + GDAL) build_program_in_subdir( v.what.rast3 @@ -791,7 +849,8 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_raster3d - grass_vector) + grass_vector + GDAL) build_program_in_subdir( v.vect.stats @@ -801,7 +860,8 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_stats - grass_vector) + grass_vector + GDAL) build_program_in_subdir( v.vol.rst @@ -814,6 +874,7 @@ build_program_in_subdir( grass_raster grass_raster3d grass_vector + GDAL LIBM) build_program_in_subdir( diff --git a/vector/v.lrs/CMakeLists.txt b/vector/v.lrs/CMakeLists.txt index 81008fbce86..46087487d70 100644 --- a/vector/v.lrs/CMakeLists.txt +++ b/vector/v.lrs/CMakeLists.txt @@ -19,6 +19,7 @@ build_program_in_subdir( grass_dbmibase grass_dbmiclient grass_dbmidriver + GDAL LIBM) build_program_in_subdir( @@ -30,6 +31,7 @@ build_program_in_subdir( grass_dbmibase grass_dbmiclient grass_dbmidriver + GDAL LIBM) build_program_in_subdir( @@ -41,6 +43,7 @@ build_program_in_subdir( grass_dbmibase grass_dbmiclient grass_dbmidriver + GDAL LIBM) build_program_in_subdir( @@ -51,4 +54,5 @@ build_program_in_subdir( grass_gis grass_dbmibase grass_dbmiclient - grass_dbmidriver) + grass_dbmidriver + GDAL) From fc321cb10674bd60304c549a31c6082683f5f4da Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Mon, 29 Jul 2024 17:20:13 -0600 Subject: [PATCH 154/253] Added parson to r.univar, r3.univar, v.univar --- raster/r.univar/CMakeLists.txt | 2 ++ vector/CMakeLists.txt | 1 + 2 files changed, 3 insertions(+) diff --git a/raster/r.univar/CMakeLists.txt b/raster/r.univar/CMakeLists.txt index d6e323abad9..7db873ac479 100644 --- a/raster/r.univar/CMakeLists.txt +++ b/raster/r.univar/CMakeLists.txt @@ -9,6 +9,7 @@ build_program( DEPENDS grass_gis grass_raster + grass_parson LIBM OPTIONAL_DEPENDS OPENMP) @@ -22,6 +23,7 @@ build_program( grass_gis grass_raster grass_raster3d + grass_parson LIBM OPTIONAL_DEPENDS OPENMP) diff --git a/vector/CMakeLists.txt b/vector/CMakeLists.txt index b4165637b57..afdc9ab47bf 100644 --- a/vector/CMakeLists.txt +++ b/vector/CMakeLists.txt @@ -805,6 +805,7 @@ build_program_in_subdir( grass_dbmidriver grass_gis grass_vector + grass_parson GDAL LIBM) From a07ca356ca6f2314ca128b08b64cd123b5f3ca8e Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Fri, 6 Sep 2024 13:20:15 -0700 Subject: [PATCH 155/253] Fixed LIBM target issue and added the missing file gettimeoftheday c file --- cmake/modules/CheckDependentLibraries.cmake | 11 ++- utils/timer/msvc/gettimeofday.c | 75 +++++++++++++++++++++ 2 files changed, 79 insertions(+), 7 deletions(-) create mode 100644 utils/timer/msvc/gettimeofday.c diff --git a/cmake/modules/CheckDependentLibraries.cmake b/cmake/modules/CheckDependentLibraries.cmake index e211d930d60..4c2d33f124a 100644 --- a/cmake/modules/CheckDependentLibraries.cmake +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -12,13 +12,10 @@ 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) - message("!!! MATH_LIBRARY: ${MATH_LIBRARY}") -endif() +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) find_package(PROJ REQUIRED) if(PROJ_FOUND) diff --git a/utils/timer/msvc/gettimeofday.c b/utils/timer/msvc/gettimeofday.c new file mode 100644 index 00000000000..1e00f7ee149 --- /dev/null +++ b/utils/timer/msvc/gettimeofday.c @@ -0,0 +1,75 @@ +/* + * win32gettimeofday.c + * Win32 gettimeofday() replacement + * + * src/port/win32gettimeofday.c + * + * Copyright (c) 2003 SRA, Inc. + * Copyright (c) 2003 SKC, Inc. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without a + * written agreement is hereby granted, provided that the above + * copyright notice and this paragraph and the following two + * paragraphs appear in all copies. + * + * IN NO EVENT SHALL THE AUTHOR BE LIABLE TO ANY PARTY FOR DIRECT, + * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING + * LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS + * DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE AUTHOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS + * IS" BASIS, AND THE AUTHOR HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, + * SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + */ + +#include "c.h" + +#include + +#include + +/* FILETIME of Jan 1 1970 00:00:00, the PostgreSQL epoch */ +static const unsigned __int64 epoch = UINT64CONST(116444736000000000); + +/* + * FILETIME represents the number of 100-nanosecond intervals since + * January 1, 1601 (UTC). + */ +#define FILETIME_UNITS_PER_SEC 10000000L +#define FILETIME_UNITS_PER_USEC 10 + + +/* + * timezone information is stored outside the kernel so tzp isn't used anymore. + * + * Note: this function is not for Win32 high precision timing purposes. See + * elapsed_time(). + */ +int +gettimeofday(struct timeval *tp, void *tzp) +{ + FILETIME file_time; + ULARGE_INTEGER ularge; + + /* + * POSIX declines to define what tzp points to, saying "If tzp is not a + * null pointer, the behavior is unspecified". Let's take this + * opportunity to verify that noplace in Postgres tries to use any + * unportable behavior. + */ + Assert(tzp == NULL); + + GetSystemTimePreciseAsFileTime(&file_time); + ularge.LowPart = file_time.dwLowDateTime; + ularge.HighPart = file_time.dwHighDateTime; + + tp->tv_sec = (long) ((ularge.QuadPart - epoch) / FILETIME_UNITS_PER_SEC); + tp->tv_usec = (long) (((ularge.QuadPart - epoch) % FILETIME_UNITS_PER_SEC) + / FILETIME_UNITS_PER_USEC); + + return 0; +} From e4e78dabc7a52d6fb389f7b1aaff8464c5ee06cd Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Thu, 12 Sep 2024 12:02:57 -0700 Subject: [PATCH 156/253] Fixed Windows Environment Path Issue and Relocated all msvc files from modules to common directory and Fixed __attribute__ issue in glocale.h(MSVC) --- CMakeLists.txt | 6 +++--- include/grass/defs/glocale.h | 5 +++++ lib/db/CMakeLists.txt | 4 ++-- {lib/db/dbmi_base/msvc => msvc}/dirent.c | 0 {lib/db/dbmi_base/msvc => msvc}/dirent.h | 0 {utils/timer/msvc => msvc}/gettimeofday.c | 0 utils/CMakeLists.txt | 2 +- 7 files changed, 11 insertions(+), 6 deletions(-) rename {lib/db/dbmi_base/msvc => msvc}/dirent.c (100%) rename {lib/db/dbmi_base/msvc => msvc}/dirent.h (100%) rename {utils/timer/msvc => msvc}/gettimeofday.c (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 15e4672be2b..7232494e7eb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -215,14 +215,14 @@ set(HTML2MAN VERSION_NUMBER=${GRASS_VERSION_NUMBER} ${PYTHON_EXECUTABLE} if(WIN32) set(sep "\;") - set(env_path "") else() set(sep ":") - set(env_path ":$ENV{PATH}") endif() +set(env_path "$ENV{PATH}") + set(grass_env_command - ${CMAKE_COMMAND} -E env "PATH=${BIN_DIR}${sep}${SCRIPTS_DIR}${env_path}" + ${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" diff --git a/include/grass/defs/glocale.h b/include/grass/defs/glocale.h index a14b2e4cebe..b153afe21d5 100644 --- a/include/grass/defs/glocale.h +++ b/include/grass/defs/glocale.h @@ -1,6 +1,11 @@ #ifndef GRASS_GLOCALEDEFS_H #define GRASS_GLOCALEDEFS_H +#if !defined __GNUC__ || __GNUC__ < 2 +#undef __attribute__ +#define __attribute__(x) +#endif + extern void G_init_locale(void); extern char *G_gettext(const char *, const char *) __attribute__((format_arg(2))); diff --git a/lib/db/CMakeLists.txt b/lib/db/CMakeLists.txt index e7d4a96b7f7..fb61243b6f2 100644 --- a/lib/db/CMakeLists.txt +++ b/lib/db/CMakeLists.txt @@ -1,7 +1,7 @@ file(GLOB dbmibase_SRCS "./dbmi_base/*.c") if(MSVC) - set(dbmibase_INCLUDES "./dbmi_base" "./dbmi_base/msvc") - list(APPEND dbmibase_SRCS "./dbmi_base/msvc/dirent.c") + set(dbmibase_INCLUDES "./dbmi_base" "../../msvc") + list(APPEND dbmibase_SRCS "../../msvc/dirent.c") endif() build_library_in_subdir( diff --git a/lib/db/dbmi_base/msvc/dirent.c b/msvc/dirent.c similarity index 100% rename from lib/db/dbmi_base/msvc/dirent.c rename to msvc/dirent.c diff --git a/lib/db/dbmi_base/msvc/dirent.h b/msvc/dirent.h similarity index 100% rename from lib/db/dbmi_base/msvc/dirent.h rename to msvc/dirent.h diff --git a/utils/timer/msvc/gettimeofday.c b/msvc/gettimeofday.c similarity index 100% rename from utils/timer/msvc/gettimeofday.c rename to msvc/gettimeofday.c diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt index 38039185f83..41aff9466c8 100644 --- a/utils/CMakeLists.txt +++ b/utils/CMakeLists.txt @@ -7,7 +7,7 @@ file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/generate_last_commit_file.py set(current_time_s_ms_SRCS "timer/main.c") if(MSVC) - list(APPEND current_time_s_ms_SRCS "timer/msvc/gettimeofday.c") + list(APPEND current_time_s_ms_SRCS "../msvc/gettimeofday.c") endif() build_program_in_subdir( timer From 9711c1fb92e094c7ec124ec3b22fc995e031c96f Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 14 Sep 2024 21:57:13 -0600 Subject: [PATCH 157/253] msvc/gettimeofday.c: clang-formatted --- msvc/gettimeofday.c | 38 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/msvc/gettimeofday.c b/msvc/gettimeofday.c index 1e00f7ee149..407460e2740 100644 --- a/msvc/gettimeofday.c +++ b/msvc/gettimeofday.c @@ -39,37 +39,35 @@ static const unsigned __int64 epoch = UINT64CONST(116444736000000000); * FILETIME represents the number of 100-nanosecond intervals since * January 1, 1601 (UTC). */ -#define FILETIME_UNITS_PER_SEC 10000000L +#define FILETIME_UNITS_PER_SEC 10000000L #define FILETIME_UNITS_PER_USEC 10 - /* * timezone information is stored outside the kernel so tzp isn't used anymore. * * Note: this function is not for Win32 high precision timing purposes. See * elapsed_time(). */ -int -gettimeofday(struct timeval *tp, void *tzp) +int gettimeofday(struct timeval *tp, void *tzp) { - FILETIME file_time; - ULARGE_INTEGER ularge; + FILETIME file_time; + ULARGE_INTEGER ularge; - /* - * POSIX declines to define what tzp points to, saying "If tzp is not a - * null pointer, the behavior is unspecified". Let's take this - * opportunity to verify that noplace in Postgres tries to use any - * unportable behavior. - */ - Assert(tzp == NULL); + /* + * POSIX declines to define what tzp points to, saying "If tzp is not a + * null pointer, the behavior is unspecified". Let's take this + * opportunity to verify that noplace in Postgres tries to use any + * unportable behavior. + */ + Assert(tzp == NULL); - GetSystemTimePreciseAsFileTime(&file_time); - ularge.LowPart = file_time.dwLowDateTime; - ularge.HighPart = file_time.dwHighDateTime; + GetSystemTimePreciseAsFileTime(&file_time); + ularge.LowPart = file_time.dwLowDateTime; + ularge.HighPart = file_time.dwHighDateTime; - tp->tv_sec = (long) ((ularge.QuadPart - epoch) / FILETIME_UNITS_PER_SEC); - tp->tv_usec = (long) (((ularge.QuadPart - epoch) % FILETIME_UNITS_PER_SEC) - / FILETIME_UNITS_PER_USEC); + tp->tv_sec = (long)((ularge.QuadPart - epoch) / FILETIME_UNITS_PER_SEC); + tp->tv_usec = (long)(((ularge.QuadPart - epoch) % FILETIME_UNITS_PER_SEC) / + FILETIME_UNITS_PER_USEC); - return 0; + return 0; } From b58ffe168bbdb7d95ad2e3645a7c30e1edb5d6a6 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 14 Sep 2024 23:11:28 -0600 Subject: [PATCH 158/253] Include all C files for lib/gis --- lib/gis/CMakeLists.txt | 148 +---------------------------------------- 1 file changed, 3 insertions(+), 145 deletions(-) diff --git a/lib/gis/CMakeLists.txt b/lib/gis/CMakeLists.txt index f63f07be899..8a1e63ca1e5 100644 --- a/lib/gis/CMakeLists.txt +++ b/lib/gis/CMakeLists.txt @@ -1,149 +1,7 @@ -set(gislib_SRCS - adj_cellhd.c - aprintf.c - copy_dir.c - get_ellipse.c - ll_scan.c - open_misc.c - proj3.c - units.c - alloc.c - copy_file.c - get_projinfo.c - locale.c - overwrite.c - put_window.c - user_config.c - area.c - counter.c - get_window.c - location.c - pager.c - putenv.c - verbose.c - area_ellipse.c - date.c - getl.c - lrand48.c - parser.c - radii.c - view.c - area_poly1.c - datum.c - gisbase.c - ls.c - parser_dependencies.c - rd_cellhd.c - whoami.c - area_poly2.c - debug.c - gisdbase.c - ls_filter.c - parser_help.c - remove.c - win32_pipes.c - area_sphere.c - distance.c - gisinit.c - lz4.c - parser_html.c - rename.c - wind_2_box.c - ascii_chk.c - done_msg.c - handler.c - mach_name.c - parser_interface.c - rhumbline.c - wind_format.c - asprintf.c - endian.c - home.c - make_loc.c - parser_rest_md.c - rotate.c - wind_in.c - basename.c - env.c - ilist.c - make_mapset.c - parser_script.c - seek.c - wind_limits.c - bres_line.c - error.c - intersect.c - mapcase.c - parser_standard_options.c - set_window.c - wind_overlap.c - clicker.c - file_name.c - is.c - mapset.c - parser_wps.c - short_way.c - wind_scan.c - cmprbzip.c - find_etc.c - key_value1.c - mapset_msc.c - paths.c - sleep.c - window_map.c - cmprlz4.c - find_file.c - key_value2.c - mapset_nme.c - percent.c - snprintf.c - worker.c - cmprrle.c - find_rast.c - key_value3.c - mkstemp.c - plot.c - spawn.c - wr_cellhd.c - cmprzlib.c - find_rast3d.c - key_value4.c - myname.c - pole_in_poly.c - strings.c - writ_zeros.c - color_rules.c - find_vect.c - legal_name.c - named_colr.c - popen.c - tempfile.c - xdr.c - color_str.c - compress.c - line_dist.c - nl_to_spaces.c - progrm_nme.c - timestamp.c - zero.c - commas.c - geodesic.c - list.c - nme_in_mps.c - proj1.c - token.c - zone.c - geodist.c - ll_format.c - open.c - proj2.c - trim_dec.c - parser_json.c - cmprzstd.c - compress.c) +file(GLOB gislib_SRCS "*.c") -if(MINGW) - list(APPEND gislib_SRCS "fmode.c") +if(NOT MINGW) + list(FILTER gislib_SRCS EXCLUDE REGEX [[.*/fmode\.c$]]) endif() set(grass_gis_DEFS "-DGRASS_VERSION_DATE=\"${GRASS_VERSION_DATE}\"") From c236dc63f147e39ad852c2f00690c707f008579d Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 14 Sep 2024 23:12:43 -0600 Subject: [PATCH 159/253] Use bracket arguments for REGEX --- lib/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index bb9258ac353..000412dc338 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -68,7 +68,7 @@ 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 From 7f96e5e80017946efd94c84479023ea28883b88e Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 14 Sep 2024 23:24:15 -0600 Subject: [PATCH 160/253] Add more parson dependency --- db/CMakeLists.txt | 2 +- general/CMakeLists.txt | 1 + raster/CMakeLists.txt | 6 +++--- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/db/CMakeLists.txt b/db/CMakeLists.txt index 137c86b0c66..e706d844d29 100644 --- a/db/CMakeLists.txt +++ b/db/CMakeLists.txt @@ -33,7 +33,7 @@ build_program_in_subdir(db.createdb DEPENDS grass_gis grass_dbmibase add_dependencies(db.createdb ${db_drivers}) build_program_in_subdir(db.describe DEPENDS grass_gis grass_dbmibase - grass_dbmiclient grass_dbmidriver) + grass_dbmiclient grass_dbmidriver grass_parson) add_dependencies(db.describe ${db_drivers}) build_program_in_subdir(db.connect DEPENDS grass_gis grass_dbmibase diff --git a/general/CMakeLists.txt b/general/CMakeLists.txt index b6d83d6265b..13f3899ec25 100644 --- a/general/CMakeLists.txt +++ b/general/CMakeLists.txt @@ -34,6 +34,7 @@ build_program_in_subdir( grass_raster grass_raster3d grass_gmath + grass_parson PROJ GDAL LIBM) diff --git a/raster/CMakeLists.txt b/raster/CMakeLists.txt index 534e4133b1d..8e09c044582 100644 --- a/raster/CMakeLists.txt +++ b/raster/CMakeLists.txt @@ -164,7 +164,7 @@ build_program_in_subdir( GDAL LIBM) -build_program_in_subdir(r.category DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.category DEPENDS grass_gis grass_raster grass_parson) build_program_in_subdir(r.circle DEPENDS grass_gis grass_raster) @@ -319,7 +319,7 @@ build_program_in_subdir( build_program_in_subdir(r.null DEPENDS grass_gis grass_raster) -build_program_in_subdir(r.object.geometry DEPENDS grass_gis grass_raster LIBM) +build_program_in_subdir(r.object.geometry DEPENDS grass_gis grass_raster grass_parson LIBM) build_program_in_subdir(r.out.ascii DEPENDS grass_gis grass_raster) @@ -423,7 +423,7 @@ build_program_in_subdir(r.regression.line DEPENDS grass_gis grass_raster LIBM) build_program_in_subdir(r.regression.multi DEPENDS grass_gis grass_raster LIBM) -build_program_in_subdir(r.report DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.report DEPENDS grass_gis grass_raster grass_parson) build_program_in_subdir( r.resamp.bspline From 5db6d60e12104fb7cac8e6f24b249b9bb99a5e57 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sun, 15 Sep 2024 01:29:20 -0600 Subject: [PATCH 161/253] ctypegen: Do not link against versioned libs because lib names are now libgrass_*.so.VERSION not libgrass_*.VERSION.so and run.py cannot find libgrass_*.VERSION anymore --- python/libgrass_interface_generator/CMakeLists.txt | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/python/libgrass_interface_generator/CMakeLists.txt b/python/libgrass_interface_generator/CMakeLists.txt index 129320cf1ff..b79c9a34110 100644 --- a/python/libgrass_interface_generator/CMakeLists.txt +++ b/python/libgrass_interface_generator/CMakeLists.txt @@ -79,9 +79,6 @@ foreach(module ${MODULES}) message(FATAL_ERROR "${${module}_TARGET_NAME} is not set") endif() - set(LIBS_VERSIONED ${${module}_LIBS}) - list(TRANSFORM LIBS_VERSIONED APPEND .${GRASS_VERSION_NUMBER}) - set(output_file "${OUTDIR}/${GRASS_INSTALL_PYDIR}/grass/lib/${module}.py") add_custom_command( OUTPUT ${output_file} @@ -89,7 +86,7 @@ foreach(module ${MODULES}) COMMAND ${CMAKE_COMMAND} -DCTYPESGEN_PY=${CMAKE_CURRENT_SOURCE_DIR}/run.py -DPython_EXECUTABLE=${Python_EXECUTABLE} -DCOMPILER=${CMAKE_C_COMPILER} - "-DHDRS=${${module}_HDRS}" "-DLIBS=${LIBS_VERSIONED}" -DOUTDIR=${OUTDIR} + "-DHDRS=${${module}_HDRS}" "-DLIBS=${${module}_LIBS}" -DOUTDIR=${OUTDIR} -DGRASS_INSTALL_INCLUDEDIR=${GRASS_INSTALL_INCLUDEDIR} -DGRASS_INSTALL_SCRIPTDIR=${GRASS_INSTALL_SCRIPTDIR} -DGRASS_INSTALL_DEMODIR=${GRASS_INSTALL_DEMODIR} From 0afe106b6cfd45ad8a96e116b9bdf99bf5f08146 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sun, 15 Sep 2024 01:52:48 -0600 Subject: [PATCH 162/253] libgrass_interface_generator depends on grass_ogsf; build libs first --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7232494e7eb..0168a2e60b8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -244,8 +244,8 @@ include_directories(${PostgreSQL_INCLUDE_DIR}) include_directories(${PROJ_INCLUDE_DIR}) include_directories(/opt/local/include) -add_subdirectory(python) add_subdirectory(lib) +add_subdirectory(python) add_subdirectory(utils) set(modules_list) From 38f49678ccdeb382cbdec82c13398f7fc8ecc1fd Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sun, 15 Sep 2024 09:44:34 -0600 Subject: [PATCH 163/253] msvc/gettimeofday.c: Add the original URL --- msvc/gettimeofday.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/msvc/gettimeofday.c b/msvc/gettimeofday.c index 407460e2740..f29d043d173 100644 --- a/msvc/gettimeofday.c +++ b/msvc/gettimeofday.c @@ -1,4 +1,7 @@ /* + * Copied and clang-formatted from + * https://github.com/postgres/postgres/blob/master/src/port/win32gettimeofday.c + * * win32gettimeofday.c * Win32 gettimeofday() replacement * From 3f5df0fbd05f73780650c7519ae2b343e07589a9 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Tue, 17 Sep 2024 22:18:17 -0600 Subject: [PATCH 164/253] Use the SDRangel version of gettimeofday.c because c.h is postgres-only --- msvc/gettimeofday.c | 94 ++++++++++++++------------------------------- 1 file changed, 29 insertions(+), 65 deletions(-) diff --git a/msvc/gettimeofday.c b/msvc/gettimeofday.c index f29d043d173..b92472fb283 100644 --- a/msvc/gettimeofday.c +++ b/msvc/gettimeofday.c @@ -1,76 +1,40 @@ -/* - * Copied and clang-formatted from - * https://github.com/postgres/postgres/blob/master/src/port/win32gettimeofday.c - * - * win32gettimeofday.c - * Win32 gettimeofday() replacement - * - * src/port/win32gettimeofday.c - * - * Copyright (c) 2003 SRA, Inc. - * Copyright (c) 2003 SKC, Inc. - * - * Permission to use, copy, modify, and distribute this software and - * its documentation for any purpose, without fee, and without a - * written agreement is hereby granted, provided that the above - * copyright notice and this paragraph and the following two - * paragraphs appear in all copies. - * - * IN NO EVENT SHALL THE AUTHOR BE LIABLE TO ANY PARTY FOR DIRECT, - * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING - * LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS - * DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * - * THE AUTHOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS - * IS" BASIS, AND THE AUTHOR HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, - * SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +/* Adopted from GPL-3 SDRangel + * https://github.com/f4exb/sdrangel/blob/master/custom/windows/windows_time.h */ -#include "c.h" - -#include - -#include - -/* FILETIME of Jan 1 1970 00:00:00, the PostgreSQL epoch */ -static const unsigned __int64 epoch = UINT64CONST(116444736000000000); - /* - * FILETIME represents the number of 100-nanosecond intervals since - * January 1, 1601 (UTC). + * missing gettimeofday implementation + * for windows; based on postgresql */ -#define FILETIME_UNITS_PER_SEC 10000000L -#define FILETIME_UNITS_PER_USEC 10 -/* - * timezone information is stored outside the kernel so tzp isn't used anymore. - * - * Note: this function is not for Win32 high precision timing purposes. See - * elapsed_time(). - */ -int gettimeofday(struct timeval *tp, void *tzp) -{ - FILETIME file_time; - ULARGE_INTEGER ularge; +#define WIN32_LEAN_AND_MEAN /* stops windows.h including winsock.h; timeval \ + redefine */ +#include +#include /* portable: uint64_t MSVC: __int64 */ - /* - * POSIX declines to define what tzp points to, saying "If tzp is not a - * null pointer, the behavior is unspecified". Let's take this - * opportunity to verify that noplace in Postgres tries to use any - * unportable behavior. - */ - Assert(tzp == NULL); +/* MSVC defines this in winsock2.h!? */ +typedef struct timeval { + long tv_sec; + long tv_usec; +} timeval; - GetSystemTimePreciseAsFileTime(&file_time); - ularge.LowPart = file_time.dwLowDateTime; - ularge.HighPart = file_time.dwHighDateTime; +int gettimeofday(struct timeval *tp, struct timezone *tzp) +{ + /* Note: some broken versions only have 8 trailing zero's, the correct epoch + * has 9 trailing zero's This magic number is the number of 100 nanosecond + * intervals since January 1, 1601 (UTC) until 00:00:00 January 1, 1970 */ + static const uint64_t EPOCH = ((uint64_t)116444736000000000ULL); + + SYSTEMTIME system_time; + FILETIME file_time; + uint64_t time; - tp->tv_sec = (long)((ularge.QuadPart - epoch) / FILETIME_UNITS_PER_SEC); - tp->tv_usec = (long)(((ularge.QuadPart - epoch) % FILETIME_UNITS_PER_SEC) / - FILETIME_UNITS_PER_USEC); + GetSystemTime(&system_time); + SystemTimeToFileTime(&system_time, &file_time); + time = ((uint64_t)file_time.dwLowDateTime); + time += ((uint64_t)file_time.dwHighDateTime) << 32; + tp->tv_sec = (long)((time - EPOCH) / 10000000L); + tp->tv_usec = (long)(system_time.wMilliseconds * 1000); return 0; } From 46855713ea3c0c27173466364c3a8d750e5aad6d Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Tue, 17 Sep 2024 22:29:52 -0600 Subject: [PATCH 165/253] gettimeofday.c: comment --- msvc/gettimeofday.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/msvc/gettimeofday.c b/msvc/gettimeofday.c index b92472fb283..34b2016ebd2 100644 --- a/msvc/gettimeofday.c +++ b/msvc/gettimeofday.c @@ -7,8 +7,8 @@ * for windows; based on postgresql */ -#define WIN32_LEAN_AND_MEAN /* stops windows.h including winsock.h; timeval \ - redefine */ +#define WIN32_LEAN_AND_MEAN /* stops windows.h including winsock.h; \ + * timeval redefine */ #include #include /* portable: uint64_t MSVC: __int64 */ From 9b53e792da27121e86b62defa312065a36d9fe9e Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Thu, 19 Sep 2024 12:32:19 -0700 Subject: [PATCH 166/253] Added --openmp:llvm flag to utilize latest version for min/max reductions --- cmake/modules/CheckDependentLibraries.cmake | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cmake/modules/CheckDependentLibraries.cmake b/cmake/modules/CheckDependentLibraries.cmake index 4c2d33f124a..7123c0dfcf0 100644 --- a/cmake/modules/CheckDependentLibraries.cmake +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -269,6 +269,10 @@ endif() if(WITH_OPENMP) find_package(OpenMP REQUIRED) + if(MSVC AND OPENMP_FOUND) + # for min/max reduction + add_compile_options(-openmp:llvm) + endif() endif() # Data format options From dda0b0bc1cf5d607b0a35208ff6e184479f907f4 Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Mon, 23 Sep 2024 10:11:51 -0700 Subject: [PATCH 167/253] Fixed Error: Unresolved External Symbol opendir, closedir, readdir in gis module --- lib/gis/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/gis/CMakeLists.txt b/lib/gis/CMakeLists.txt index 8a1e63ca1e5..b2b6bd76b70 100644 --- a/lib/gis/CMakeLists.txt +++ b/lib/gis/CMakeLists.txt @@ -7,11 +7,15 @@ 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 "../../msvc") + list(APPEND gislib_SRCS "../../msvc/dirent.c") endif() build_module( NAME grass_gis + INCLUDES + ${gislib_INCLUDES} SOURCES "${gislib_SRCS}" DEPENDS From 79850734965bd11f2ef5b4e275421c260f8d0b9f Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Mon, 23 Sep 2024 11:18:51 -0700 Subject: [PATCH 168/253] Replace LIBM with ${LIBM} for MSVC where math library is not needed --- cmake/modules/CheckDependentLibraries.cmake | 11 +- display/CMakeLists.txt | 24 ++--- general/CMakeLists.txt | 2 +- imagery/CMakeLists.txt | 48 ++++----- imagery/i.ortho.photo/CMakeLists.txt | 4 +- lib/CMakeLists.txt | 2 +- lib/gis/CMakeLists.txt | 2 +- lib/rst/CMakeLists.txt | 2 +- lib/vector/diglib/CMakeLists.txt | 2 +- misc/CMakeLists.txt | 6 +- ps/CMakeLists.txt | 2 +- raster/CMakeLists.txt | 112 ++++++++++---------- raster/r.coin/format.c | 2 +- raster/r.colors/CMakeLists.txt | 4 +- raster/r.li/CMakeLists.txt | 2 +- raster/r.sim/CMakeLists.txt | 2 +- raster/r.spread/CMakeLists.txt | 2 +- raster/r.sun/main.c | 2 + raster/r.univar/CMakeLists.txt | 4 +- raster/r.watershed/CMakeLists.txt | 4 +- raster3d/CMakeLists.txt | 10 +- raster3d/r3.flow/CMakeLists.txt | 4 +- vector/CMakeLists.txt | 82 +++++++------- vector/v.lrs/CMakeLists.txt | 6 +- 24 files changed, 173 insertions(+), 168 deletions(-) diff --git a/cmake/modules/CheckDependentLibraries.cmake b/cmake/modules/CheckDependentLibraries.cmake index 7123c0dfcf0..7b485d831fa 100644 --- a/cmake/modules/CheckDependentLibraries.cmake +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -12,10 +12,13 @@ find_package(FLEX REQUIRED) find_package(BISON REQUIRED) -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) +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) +endif() find_package(PROJ REQUIRED) if(PROJ_FOUND) diff --git a/display/CMakeLists.txt b/display/CMakeLists.txt index 3fc11e8674c..72ee05404ce 100644 --- a/display/CMakeLists.txt +++ b/display/CMakeLists.txt @@ -62,7 +62,7 @@ install(DIRECTORY ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/barscales build_program_in_subdir(d.colorlist DEPENDS grass_gis grass_display 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) @@ -81,19 +81,19 @@ if(WITH_DOCS) DESTINATION ${GRASS_INSTALL_DOCDIR}) endif() build_program_in_subdir(d.grid DEPENDS grass_gis grass_symb grass_gproj - grass_display GDAL LIBM) + grass_display GDAL ${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(d.labels DEPENDS grass_gis grass_display ${LIBM}) build_program_in_subdir(d.legend DEPENDS grass_gis grass_display grass_raster - grass_raster3d LIBM) + grass_raster3d ${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) -build_program_in_subdir(d.northarrow DEPENDS grass_gis grass_display grass_symb LIBM) +build_program_in_subdir(d.northarrow DEPENDS grass_gis grass_display grass_symb ${LIBM}) if(WITH_DOCS) file(MAKE_DIRECTORY ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/northarrows) file(GLOB d_northarrow_png @@ -104,15 +104,15 @@ if(WITH_DOCS) DESTINATION ${GRASS_INSTALL_DOCDIR}) endif() build_program_in_subdir(d.path DEPENDS grass_gis grass_display grass_vector GDAL) -build_program_in_subdir(d.profile DEPENDS grass_gis grass_display grass_raster LIBM) +build_program_in_subdir(d.profile DEPENDS grass_gis grass_display grass_raster ${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) build_program_in_subdir(d.rhumbline DEPENDS grass_gis grass_display) -build_program_in_subdir(d.text DEPENDS grass_gis grass_display LIBM) +build_program_in_subdir(d.text DEPENDS grass_gis grass_display ${LIBM}) build_program_in_subdir(d.title DEPENDS grass_gis grass_display grass_raster) build_program_in_subdir( d.vect @@ -126,7 +126,7 @@ build_program_in_subdir( grass_symb grass_vector GDAL - LIBM) + ${LIBM}) build_program_in_subdir( d.vect.chart DEPENDS @@ -138,7 +138,7 @@ build_program_in_subdir( grass_symb grass_vector GDAL - LIBM) + ${LIBM}) build_program_in_subdir( d.vect.thematic DEPENDS diff --git a/general/CMakeLists.txt b/general/CMakeLists.txt index 13f3899ec25..78ae72538e7 100644 --- a/general/CMakeLists.txt +++ b/general/CMakeLists.txt @@ -37,7 +37,7 @@ build_program_in_subdir( grass_parson PROJ GDAL - LIBM) + ${LIBM}) build_program_in_subdir(g.rename DEPENDS grass_gis grass_manage grass_raster) build_program_in_subdir(g.tempfile DEPENDS grass_gis) diff --git a/imagery/CMakeLists.txt b/imagery/CMakeLists.txt index 6786a047ad8..121bafeaf4a 100644 --- a/imagery/CMakeLists.txt +++ b/imagery/CMakeLists.txt @@ -56,7 +56,7 @@ endif() build_program_in_subdir(i.albedo DEPENDS grass_imagery grass_raster 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 @@ -66,12 +66,12 @@ build_program_in_subdir( grass_vector grass_gis grass_btree2 - LIBM + ${LIBM} SRC_REGEX "*.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 @@ -80,7 +80,7 @@ build_program_in_subdir( grass_vector grass_gis grass_gmath - LIBM) + ${LIBM}) build_program_in_subdir( i.cluster DEPENDS @@ -91,26 +91,26 @@ build_program_in_subdir( 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) 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 @@ -125,7 +125,7 @@ build_program_in_subdir( 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 @@ -135,7 +135,7 @@ 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) @@ -144,16 +144,16 @@ build_program_in_subdir(i.his.rgb DEPENDS grass_imagery grass_raster 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) 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) @@ -166,7 +166,7 @@ build_program_in_subdir( grass_vector grass_gis grass_segment - LIBM) + ${LIBM}) build_program_in_subdir(i.signatures DEPENDS grass_imagery grass_gis) @@ -178,13 +178,13 @@ 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) 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 @@ -194,10 +194,10 @@ 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}) build_program_in_subdir( i.zc @@ -228,7 +228,7 @@ build_program_in_subdir( PRIMARY_DEPENDS FFTW) -build_program_in_subdir(i.landsat.acca DEPENDS grass_raster grass_gis LIBM) +build_program_in_subdir(i.landsat.acca DEPENDS grass_raster grass_gis ${LIBM}) # TODO: add generate docs for i.ortho.photo add_subdirectory(i.ortho.photo) diff --git a/imagery/i.ortho.photo/CMakeLists.txt b/imagery/i.ortho.photo/CMakeLists.txt index 7036ca88530..9abcd4a6496 100644 --- a/imagery/i.ortho.photo/CMakeLists.txt +++ b/imagery/i.ortho.photo/CMakeLists.txt @@ -33,10 +33,10 @@ 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) 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/lib/CMakeLists.txt b/lib/CMakeLists.txt index 000412dc338..341fa58505a 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -194,7 +194,7 @@ build_library_in_subdir( grass_raster grass_raster3d grass_gmath - LIBM + ${LIBM} OPTIONAL_DEPENDS OPENMP) diff --git a/lib/gis/CMakeLists.txt b/lib/gis/CMakeLists.txt index b2b6bd76b70..38bc8350f98 100644 --- a/lib/gis/CMakeLists.txt +++ b/lib/gis/CMakeLists.txt @@ -75,7 +75,7 @@ install( install(FILES colors.desc renamed_options DESTINATION ${GRASS_INSTALL_ETCDIR}) if(UNIX) - target_link_libraries(grass_gis PRIVATE LIBM) + target_link_libraries(grass_gis PRIVATE ${LIBM}) endif() if(MSVC) diff --git a/lib/rst/CMakeLists.txt b/lib/rst/CMakeLists.txt index b555d701dce..47bf990412a 100644 --- a/lib/rst/CMakeLists.txt +++ b/lib/rst/CMakeLists.txt @@ -34,7 +34,7 @@ build_library_in_subdir( grass_qtree grass_interpdata GDAL - LIBM + ${LIBM} OPTIONAL_DEPENDS OPENMP HEADERS diff --git a/lib/vector/diglib/CMakeLists.txt b/lib/vector/diglib/CMakeLists.txt index 8982afd956b..8ee96029c77 100644 --- a/lib/vector/diglib/CMakeLists.txt +++ b/lib/vector/diglib/CMakeLists.txt @@ -35,4 +35,4 @@ build_module( grass_gis grass_rtree GDAL - LIBM) + ${LIBM}) diff --git a/misc/CMakeLists.txt b/misc/CMakeLists.txt index 1319f76836d..8cf3002227f 100644 --- a/misc/CMakeLists.txt +++ b/misc/CMakeLists.txt @@ -1,9 +1,9 @@ -build_program_in_subdir(m.cogo DEPENDS grass_gis LIBM) +build_program_in_subdir(m.cogo DEPENDS grass_gis ${LIBM}) build_program_in_subdir(m.measure DEPENDS grass_gis) 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( @@ -18,5 +18,5 @@ if(TARGET grass_ogsf) grass_dbmidriver) build_program_in_subdir(m.nviz.script DEPENDS grass_display grass_raster - grass_gis LIBM) + grass_gis ${LIBM}) endif(TARGET grass_ogsf) diff --git a/ps/CMakeLists.txt b/ps/CMakeLists.txt index fed179fe016..ee7fa452dc6 100644 --- a/ps/CMakeLists.txt +++ b/ps/CMakeLists.txt @@ -12,7 +12,7 @@ build_program_in_subdir( grass_dbmidriver grass_symb GDAL - LIBM) + ${LIBM}) add_custom_command( TARGET ps.map diff --git a/raster/CMakeLists.txt b/raster/CMakeLists.txt index 8e09c044582..bd6b5d1d07b 100644 --- a/raster/CMakeLists.txt +++ b/raster/CMakeLists.txt @@ -149,7 +149,7 @@ 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) +build_program_in_subdir(r.buildvrt DEPENDS grass_gis grass_raster grass_gmath ${LIBM}) build_program_in_subdir(r.buffer DEPENDS grass_gis grass_raster) @@ -162,7 +162,7 @@ build_program_in_subdir( grass_bitmap grass_dig2 GDAL - LIBM) + ${LIBM}) build_program_in_subdir(r.category DEPENDS grass_gis grass_raster grass_parson) @@ -190,12 +190,12 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver GDAL - LIBM) + ${LIBM}) build_program_in_subdir(r.cost DEPENDS grass_gis grass_raster grass_segment - grass_vector GDAL LIBM) + grass_vector GDAL ${LIBM}) -build_program_in_subdir(r.covar DEPENDS grass_gis grass_raster 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) @@ -212,13 +212,13 @@ build_program_in_subdir( grass_imagery grass_gproj GDAL - LIBM) + ${LIBM}) build_program_in_subdir(r.external.out DEPENDS grass_gis grass_raster GDAL) build_program_in_subdir(r.fill.dir DEPENDS grass_gis grass_raster) -build_program_in_subdir(r.fill.stats DEPENDS grass_gis grass_raster LIBM) +build_program_in_subdir(r.fill.stats DEPENDS grass_gis grass_raster ${LIBM}) build_program_in_subdir( r.flow @@ -229,11 +229,11 @@ build_program_in_subdir( grass_vector grass_bitmap GDAL - LIBM) + ${LIBM}) -build_program_in_subdir(r.geomorphon DEPENDS grass_gis grass_raster grass_gmath LIBM) +build_program_in_subdir(r.geomorphon DEPENDS grass_gis grass_raster grass_gmath ${LIBM}) -build_program_in_subdir(r.grow.distance DEPENDS grass_gis grass_raster 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) @@ -241,11 +241,11 @@ build_program_in_subdir(r.gwflow DEPENDS grass_gis grass_raster grass_gpde build_program_in_subdir(r.his DEPENDS grass_gis grass_raster grass_gproj) build_program_in_subdir(r.horizon DEPENDS grass_gis grass_raster grass_gproj - grass_parson GDAL LIBM) + grass_parson GDAL ${LIBM}) build_program_in_subdir(r.in.ascii DEPENDS grass_gis grass_raster) -build_program_in_subdir(r.in.bin DEPENDS grass_gis grass_raster LIBM) +build_program_in_subdir(r.in.bin DEPENDS grass_gis grass_raster ${LIBM}) build_program_in_subdir( r.in.gdal @@ -255,7 +255,7 @@ build_program_in_subdir( grass_gproj grass_imagery GDAL - LIBM) + ${LIBM}) build_program_in_subdir(r.in.gridatb DEPENDS grass_gis grass_raster) @@ -274,7 +274,7 @@ build_program_in_subdir( grass_segment grass_gproj GDAL - LIBM + ${LIBM} PRIMARY_DEPENDS PDAL) @@ -285,12 +285,12 @@ endif() 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 TEST_SOURCES "test_r_info.py" DEPENDS grass_gis LIBM +build_program_in_subdir(r.info TEST_SOURCES "test_r_info.py" DEPENDS grass_gis ${LIBM} grass_raster grass_parson) -build_program_in_subdir(r.kappa DEPENDS grass_gis grass_raster LIBM) +build_program_in_subdir(r.kappa DEPENDS grass_gis grass_raster ${LIBM}) build_program_in_subdir(r.latlong DEPENDS grass_gis grass_raster grass_gproj GDAL) @@ -313,13 +313,13 @@ build_program_in_subdir( grass_gis grass_raster grass_stats - LIBM + ${LIBM} OPTIONAL_DEPENDS OPENMP) 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) +build_program_in_subdir(r.object.geometry DEPENDS grass_gis grass_raster grass_parson ${LIBM}) build_program_in_subdir(r.out.ascii DEPENDS grass_gis grass_raster) @@ -336,7 +336,7 @@ build_program_in_subdir( grass_dbmibase grass_imagery GDAL - LIBM + ${LIBM} PROJ) set_source_files_properties( @@ -373,14 +373,14 @@ 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) build_program_in_subdir(r.path DEPENDS grass_gis grass_raster grass_vector GDAL) -build_program_in_subdir(r.profile DEPENDS grass_gis grass_raster grass_parson LIBM) +build_program_in_subdir(r.profile DEPENDS grass_gis grass_raster grass_parson ${LIBM}) build_program_in_subdir( r.proj @@ -389,13 +389,13 @@ build_program_in_subdir( grass_raster grass_gproj GDAL - LIBM + ${LIBM} OPTIONAL_DEPENDS OPENMP) build_program_in_subdir(r.quant DEPENDS grass_gis grass_raster) -build_program_in_subdir(r.quantile DEPENDS grass_gis grass_raster LIBM) +build_program_in_subdir(r.quantile DEPENDS grass_gis grass_raster ${LIBM}) build_program_in_subdir( r.random @@ -407,11 +407,11 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver GDAL - LIBM) + ${LIBM}) -build_program_in_subdir(r.random.cells DEPENDS grass_gis grass_raster LIBM) +build_program_in_subdir(r.random.cells DEPENDS grass_gis grass_raster ${LIBM}) -build_program_in_subdir(r.random.surface DEPENDS grass_gis grass_raster LIBM) +build_program_in_subdir(r.random.surface DEPENDS grass_gis grass_raster ${LIBM}) build_program_in_subdir(r.reclass DEPENDS grass_gis grass_raster grass_manage) @@ -419,9 +419,9 @@ build_program_in_subdir(r.recode DEPENDS grass_gis grass_raster) build_program_in_subdir(r.region DEPENDS grass_gis grass_raster grass_vector GDAL) -build_program_in_subdir(r.regression.line DEPENDS grass_gis grass_raster LIBM) +build_program_in_subdir(r.regression.line DEPENDS grass_gis grass_raster ${LIBM}) -build_program_in_subdir(r.regression.multi DEPENDS grass_gis grass_raster LIBM) +build_program_in_subdir(r.regression.multi DEPENDS grass_gis grass_raster ${LIBM}) build_program_in_subdir(r.report DEPENDS grass_gis grass_raster grass_parson) @@ -435,12 +435,12 @@ build_program_in_subdir( grass_segment grass_lidar GDAL - LIBM) + ${LIBM}) -build_program_in_subdir(r.resamp.filter DEPENDS grass_gis grass_raster LIBM +build_program_in_subdir(r.resamp.filter DEPENDS grass_gis grass_raster ${LIBM} OPTIONAL_DEPENDS OPENMP) -build_program_in_subdir(r.resamp.interp DEPENDS grass_gis grass_raster LIBM +build_program_in_subdir(r.resamp.interp DEPENDS grass_gis grass_raster ${LIBM} OPTIONAL_DEPENDS OPENMP) build_program_in_subdir( @@ -456,7 +456,7 @@ build_program_in_subdir( 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) @@ -464,7 +464,7 @@ build_program_in_subdir(r.rescale DEPENDS grass_gis grass_raster) build_program_in_subdir(r.rescale.eq DEPENDS grass_gis grass_raster) -build_program_in_subdir(r.ros DEPENDS grass_gis grass_raster LIBM) +build_program_in_subdir(r.ros DEPENDS grass_gis grass_raster ${LIBM}) build_program_in_subdir( r.series @@ -487,28 +487,28 @@ build_program_in_subdir( build_program_in_subdir(r.series.interp DEPENDS grass_gis grass_raster grass_stats) -build_program_in_subdir(r.relief DEPENDS grass_gis grass_raster LIBM) +build_program_in_subdir(r.relief DEPENDS grass_gis grass_raster ${LIBM}) add_subdirectory(r.sim) -build_program_in_subdir(r.slope.aspect DEPENDS grass_gis grass_raster LIBM +build_program_in_subdir(r.slope.aspect DEPENDS grass_gis grass_raster ${LIBM} OPTIONAL_DEPENDS OPENMP) build_program_in_subdir(r.solute.transport DEPENDS grass_gis grass_raster - grass_gmath grass_gpde LIBM) + grass_gmath grass_gpde ${LIBM}) add_subdirectory(r.spread) build_program_in_subdir(r.spreadpath DEPENDS grass_gis grass_raster grass_segment) -build_program_in_subdir(r.statistics DEPENDS grass_gis grass_raster LIBM) +build_program_in_subdir(r.statistics DEPENDS grass_gis grass_raster ${LIBM}) -build_program_in_subdir(r.stats.zonal DEPENDS grass_gis grass_raster LIBM) +build_program_in_subdir(r.stats.zonal DEPENDS grass_gis grass_raster ${LIBM}) -build_program_in_subdir(r.stats.quantile DEPENDS grass_gis grass_raster LIBM) +build_program_in_subdir(r.stats.quantile DEPENDS grass_gis grass_raster ${LIBM}) -build_program_in_subdir(r.stats DEPENDS grass_gis grass_raster LIBM) +build_program_in_subdir(r.stats DEPENDS grass_gis grass_raster ${LIBM}) build_program_in_subdir( r.stream.extract @@ -521,7 +521,7 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver GDAL - LIBM) + ${LIBM}) build_program_in_subdir( r.sun @@ -531,28 +531,28 @@ build_program_in_subdir( grass_raster grass_gproj GDAL - LIBM + ${LIBM} OPTIONAL_DEPENDS OPENMP) -build_program_in_subdir(r.sunhours DEPENDS grass_gis grass_raster grass_gproj GDAL LIBM) +build_program_in_subdir(r.sunhours DEPENDS grass_gis grass_raster grass_gproj GDAL ${LIBM}) -build_program_in_subdir(r.sunmask DEPENDS grass_gis grass_raster grass_gproj GDAL LIBM) +build_program_in_subdir(r.sunmask DEPENDS grass_gis grass_raster grass_gproj GDAL ${LIBM}) build_program_in_subdir(r.support DEPENDS grass_gis grass_raster) build_program_in_subdir(r.support.stats DEPENDS grass_gis grass_raster) -build_program_in_subdir(r.surf.area DEPENDS grass_gis grass_raster LIBM) +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) build_program_in_subdir(r.surf.fractal DEPENDS grass_gis grass_raster - grass_gmath LIBM) + grass_gmath ${LIBM}) 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.idw DEPENDS grass_gis grass_raster ${LIBM}) build_program_in_subdir(r.surf.random DEPENDS grass_gis grass_raster grass_gmath) @@ -563,7 +563,7 @@ else() set(USER_NAME $ENV{USER}) endif() -build_program_in_subdir(r.texture DEPENDS grass_gis grass_raster LIBM) +build_program_in_subdir(r.texture DEPENDS grass_gis grass_raster ${LIBM}) build_program_in_subdir(r.thin DEPENDS grass_gis grass_raster grass_rowio) @@ -588,11 +588,11 @@ build_program_in_subdir( grass_dbmidriver GDAL) -build_program_in_subdir(r.topidx DEPENDS grass_gis grass_raster LIBM) +build_program_in_subdir(r.topidx DEPENDS grass_gis grass_raster ${LIBM}) -build_program_in_subdir(r.topmodel DEPENDS grass_gis grass_raster LIBM) +build_program_in_subdir(r.topmodel DEPENDS grass_gis grass_raster ${LIBM}) -build_program_in_subdir(r.transect DEPENDS grass_gis grass_raster LIBM) +build_program_in_subdir(r.transect DEPENDS grass_gis grass_raster ${LIBM}) add_subdirectory(r.univar) @@ -612,7 +612,7 @@ build_program_in_subdir( GDAL) build_program_in_subdir(r.walk DEPENDS grass_gis grass_raster grass_segment - grass_vector GDAL LIBM) + grass_vector GDAL ${LIBM}) build_program_in_subdir(r.water.outlet DEPENDS grass_gis grass_raster) @@ -632,7 +632,7 @@ build_program_in_subdir( grass_segment PRIMARY_DEPENDS LIBLAS - LIBM) + ${LIBM}) add_subdirectory(r.li) @@ -644,7 +644,7 @@ build_program_in_subdir( grass_gis grass_raster grass_iostream - LIBM + ${LIBM} SRC_REGEX "*.cpp" DEFS @@ -656,7 +656,7 @@ build_program_in_subdir( grass_gis grass_raster grass_iostream - LIBM + ${LIBM} SRC_REGEX "*.cpp" DEFS diff --git a/raster/r.coin/format.c b/raster/r.coin/format.c index 412e2d0c4c3..5101e5a5f2a 100644 --- a/raster/r.coin/format.c +++ b/raster/r.coin/format.c @@ -27,7 +27,7 @@ int format_double(double v, char *buf, int n) sprintf(fmt, "%%%d.2lf", n); sprintf(buf, fmt, v); - for (k = n; (ssize_t)strlen(buf) > n; k--) { + for (k = n; (size_t)strlen(buf) > n; k--) { sprintf(fmt, "%%%d.%dg", n, k); sprintf(buf, fmt, v); } diff --git a/raster/r.colors/CMakeLists.txt b/raster/r.colors/CMakeLists.txt index 16e7ee2a028..c810b7e9efd 100644 --- a/raster/r.colors/CMakeLists.txt +++ b/raster/r.colors/CMakeLists.txt @@ -10,7 +10,7 @@ build_program( grass_gis grass_raster grass_raster3d - LIBM) + ${LIBM}) build_program( NAME @@ -21,4 +21,4 @@ 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 0cac884fd59..1a1897ede0c 100644 --- a/raster/r.li/CMakeLists.txt +++ b/raster/r.li/CMakeLists.txt @@ -29,5 +29,5 @@ build_library_in_subdir( generate_html(TARGET grass_rli NAME r.li) 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.sim/CMakeLists.txt b/raster/r.sim/CMakeLists.txt index 904eecae8a0..bad1bf8e9aa 100644 --- a/raster/r.sim/CMakeLists.txt +++ b/raster/r.sim/CMakeLists.txt @@ -9,7 +9,7 @@ build_library_in_subdir( grass_vector grass_gmath GDAL - LIBM + ${LIBM} OPTIONAL_DEPENDS OPENMP HEADERS diff --git a/raster/r.spread/CMakeLists.txt b/raster/r.spread/CMakeLists.txt index 3da579c7a1f..3187fe6be15 100644 --- a/raster/r.spread/CMakeLists.txt +++ b/raster/r.spread/CMakeLists.txt @@ -23,4 +23,4 @@ build_program( grass_gis grass_raster grass_display - LIBM) + ${LIBM}) diff --git a/raster/r.sun/main.c b/raster/r.sun/main.c index e325cb637f0..7311fe8b05a 100644 --- a/raster/r.sun/main.c +++ b/raster/r.sun/main.c @@ -117,8 +117,10 @@ struct History hist; int INPUT_part(int offset, double *zmax); int OUTGR(void); +#if 0 int min(int, int); int max(int, int); +#endif /*void cube(int, int); void (*func) (int, int); */ diff --git a/raster/r.univar/CMakeLists.txt b/raster/r.univar/CMakeLists.txt index 7db873ac479..c2979a42b47 100644 --- a/raster/r.univar/CMakeLists.txt +++ b/raster/r.univar/CMakeLists.txt @@ -10,7 +10,7 @@ build_program( grass_gis grass_raster grass_parson - LIBM + ${LIBM} OPTIONAL_DEPENDS OPENMP) @@ -24,6 +24,6 @@ build_program( grass_raster grass_raster3d grass_parson - LIBM + ${LIBM} OPTIONAL_DEPENDS OPENMP) diff --git a/raster/r.watershed/CMakeLists.txt b/raster/r.watershed/CMakeLists.txt index d2983df041c..c99dcc96815 100644 --- a/raster/r.watershed/CMakeLists.txt +++ b/raster/r.watershed/CMakeLists.txt @@ -5,7 +5,7 @@ build_program_in_subdir( grass_raster grass_btree2 grass_gmath - LIBM + ${LIBM} RUNTIME_OUTPUT_DIR ${GRASS_INSTALL_ETCBINDIR}/r.watershed NO_DOCS) @@ -17,7 +17,7 @@ build_program_in_subdir( grass_raster grass_gmath grass_segment - LIBM + ${LIBM} RUNTIME_OUTPUT_DIR ${GRASS_INSTALL_ETCBINDIR}/r.watershed NO_DOCS) diff --git a/raster3d/CMakeLists.txt b/raster3d/CMakeLists.txt index 0257d747d96..6ccddda3d21 100644 --- a/raster3d/CMakeLists.txt +++ b/raster3d/CMakeLists.txt @@ -41,7 +41,7 @@ build_program_in_subdir(r3.cross.rast DEPENDS grass_gis grass_raster add_subdirectory(r3.flow) -build_program_in_subdir(r3.gradient DEPENDS grass_gis grass_raster3d LIBM) +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) @@ -65,7 +65,7 @@ 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) @@ -84,7 +84,7 @@ build_program_in_subdir(r3.out.vtk DEPENDS grass_gis grass_raster 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 @@ -94,7 +94,7 @@ build_program_in_subdir( grass_raster grass_raster3d grass_segment - LIBM + ${LIBM} PRIMARY_DEPENDS LIBLAS) @@ -103,5 +103,5 @@ build_program_in_subdir(r3.out.netcdf DEPENDS grass_gis grass_raster3d # 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 cc7d9258981..2ca58d8bb8c 100644 --- a/raster3d/r3.flow/CMakeLists.txt +++ b/raster3d/r3.flow/CMakeLists.txt @@ -14,7 +14,7 @@ build_program( grass_raster3d grass_vector GDAL - LIBM) + ${LIBM}) set(test_r3flow_SRCS test_main.c flowline.c integrate.c interpolate.c voxel_traversal.c) @@ -33,4 +33,4 @@ build_program( grass_dbmidriver grass_vector GDAL - LIBM) + ${LIBM}) diff --git a/vector/CMakeLists.txt b/vector/CMakeLists.txt index afdc9ab47bf..506ccf4ea40 100644 --- a/vector/CMakeLists.txt +++ b/vector/CMakeLists.txt @@ -127,7 +127,7 @@ build_program_in_subdir( grass_gis grass_vector GDAL - LIBM) + ${LIBM}) build_program_in_subdir(v.build DEPENDS grass_gis grass_vector GDAL) @@ -146,9 +146,9 @@ build_program_in_subdir( grass_vector GDAL) -build_program_in_subdir(v.clean DEPENDS grass_gis grass_vector GDAL LIBM) +build_program_in_subdir(v.clean DEPENDS grass_gis grass_vector GDAL ${LIBM}) -build_program_in_subdir(v.cluster DEPENDS grass_btree2 grass_gis grass_vector GDAL LIBM) +build_program_in_subdir(v.cluster DEPENDS grass_btree2 grass_gis grass_vector GDAL ${LIBM}) build_program_in_subdir( v.colors @@ -216,7 +216,7 @@ build_program_in_subdir( grass_gmath grass_vector GDAL - LIBM) + ${LIBM}) build_program_in_subdir(v.drape DEPENDS grass_gis grass_raster grass_vector GDAL) @@ -241,7 +241,7 @@ build_program_in_subdir( grass_gmath grass_vector GDAL - LIBM) + ${LIBM}) build_program_in_subdir( v.extrude @@ -275,7 +275,7 @@ build_program_in_subdir( grass_gis grass_vector GDAL - LIBM) + ${LIBM}) build_program_in_subdir(v.hull DEPENDS grass_gis grass_vector GDAL) @@ -310,7 +310,7 @@ build_program_in_subdir( grass_gis grass_vector GDAL - LIBM) + ${LIBM}) build_program_in_subdir( v.in.dxf @@ -321,7 +321,7 @@ build_program_in_subdir( grass_gis grass_vector GDAL - LIBM) + ${LIBM}) file(GLOB v_in_pdal_SOURCES "v.in.pdal/*.c" "v.in.pdal/main.cpp") build_program_in_subdir( @@ -333,7 +333,7 @@ build_program_in_subdir( grass_gproj grass_vector GDAL - LIBM + ${LIBM} PRIMARY_DEPENDS PDAL) @@ -357,10 +357,10 @@ build_program_in_subdir( grass_gis grass_vector GDAL - LIBM) + ${LIBM}) build_program_in_subdir(v.kernel DEPENDS grass_gis grass_gmath grass_raster - grass_vector GDAL LIBM) + grass_vector GDAL ${LIBM}) build_program_in_subdir( v.label @@ -385,9 +385,9 @@ build_program_in_subdir( grass_gis grass_vector GDAL - LIBM) + ${LIBM}) -build_program_in_subdir(v.proj DEPENDS grass_gis grass_gproj grass_vector GDAL LIBM) +build_program_in_subdir(v.proj DEPENDS grass_gis grass_gproj grass_vector GDAL ${LIBM}) build_program_in_subdir(v.profile DEPENDS grass_gis grass_vector GDAL) @@ -402,7 +402,7 @@ build_program_in_subdir( grass_gis grass_vector GDAL - LIBM) + ${LIBM}) build_program_in_subdir( v.neighbors @@ -415,7 +415,7 @@ build_program_in_subdir( grass_stats grass_vector GDAL - LIBM) + ${LIBM}) build_program_in_subdir( v.net @@ -426,7 +426,7 @@ build_program_in_subdir( grass_gis grass_vector GDAL - LIBM) + ${LIBM}) build_program_in_subdir( v.net.alloc @@ -554,7 +554,7 @@ build_program_in_subdir( grass_gis grass_vector GDAL - LIBM) + ${LIBM}) build_program_in_subdir(v.out.ascii DEPENDS grass_gis grass_vector GDAL) @@ -593,7 +593,7 @@ build_program_in_subdir( grass_lidar grass_vector GDAL - LIBM) + ${LIBM}) build_program_in_subdir( v.overlay @@ -616,7 +616,7 @@ build_program_in_subdir( grass_gis grass_vector GDAL - LIBM) + ${LIBM}) build_program_in_subdir( v.perturb @@ -627,11 +627,11 @@ build_program_in_subdir( grass_gis grass_vector GDAL - LIBM) + ${LIBM}) -build_program_in_subdir(v.split DEPENDS grass_gis grass_vector GDAL LIBM) +build_program_in_subdir(v.split DEPENDS grass_gis grass_vector GDAL ${LIBM}) -build_program_in_subdir(v.qcount DEPENDS grass_gis grass_vector GDAL LIBM) +build_program_in_subdir(v.qcount DEPENDS grass_gis grass_vector GDAL ${LIBM}) build_program_in_subdir( v.random @@ -654,7 +654,7 @@ build_program_in_subdir( GDAL) build_program_in_subdir(v.rectify DEPENDS grass_gis grass_gmath grass_imagery - grass_vector GDAL LIBM) + grass_vector GDAL ${LIBM}) build_program_in_subdir( v.sample @@ -667,7 +667,7 @@ build_program_in_subdir( grass_vector GDAL) -build_program_in_subdir(v.segment DEPENDS grass_gis grass_vector GDAL LIBM) +build_program_in_subdir(v.segment DEPENDS grass_gis grass_vector GDAL ${LIBM}) build_program_in_subdir( v.select @@ -695,7 +695,7 @@ build_program_in_subdir( grass_segment grass_vector GDAL - LIBM) + ${LIBM}) build_program_in_subdir( v.surf.idw @@ -707,7 +707,7 @@ build_program_in_subdir( grass_raster grass_vector GDAL - LIBM) + ${LIBM}) build_program_in_subdir( v.surf.rst @@ -722,7 +722,7 @@ build_program_in_subdir( grass_qtree grass_vector GDAL - LIBM + ${LIBM} OPTIONAL_DEPENDS OPENMP) @@ -735,7 +735,7 @@ build_program_in_subdir( grass_gis grass_vector GDAL - LIBM) + ${LIBM}) build_program_in_subdir(v.timestamp DEPENDS grass_gis grass_vector) @@ -758,7 +758,7 @@ build_program_in_subdir( grass_gis grass_vector GDAL - LIBM) + ${LIBM}) build_program_in_subdir( v.to.points @@ -769,7 +769,7 @@ build_program_in_subdir( grass_gis grass_vector GDAL - LIBM) + ${LIBM}) build_program_in_subdir( v.to.rast @@ -781,7 +781,7 @@ build_program_in_subdir( grass_raster grass_vector GDAL - LIBM) + ${LIBM}) build_program_in_subdir( v.to.rast3 @@ -793,7 +793,7 @@ build_program_in_subdir( grass_raster3d grass_vector GDAL - LIBM) + ${LIBM}) build_program_in_subdir(v.type DEPENDS grass_gis grass_vector GDAL) @@ -807,7 +807,7 @@ build_program_in_subdir( grass_vector grass_parson GDAL - LIBM) + ${LIBM}) build_program_in_subdir( v.voronoi @@ -819,7 +819,7 @@ build_program_in_subdir( grass_gis grass_vector GDAL - LIBM) + ${LIBM}) build_program_in_subdir( v.what @@ -876,7 +876,7 @@ build_program_in_subdir( grass_raster3d grass_vector GDAL - LIBM) + ${LIBM}) build_program_in_subdir( v.out.ogr @@ -900,7 +900,7 @@ build_program_in_subdir( grass_gis grass_gproj grass_vector - LIBM) + ${LIBM}) build_program_in_subdir( v.external @@ -927,7 +927,7 @@ build_program_in_subdir( grass_gis grass_gproj grass_vector - LIBM + ${LIBM} PRIMARY_DEPENDS LIBLAS) @@ -941,7 +941,7 @@ build_program_in_subdir( grass_gmath grass_lidar grass_vector - LIBM + ${LIBM} PRIMARY_DEPENDS LIBLAS) @@ -955,7 +955,7 @@ build_program_in_subdir( grass_gmath grass_lidar grass_vector - LIBM + ${LIBM} PRIMARY_DEPENDS LIBLAS) @@ -982,7 +982,7 @@ build_program_in_subdir( grass_gproj grass_raster grass_vector - LIBM + ${LIBM} PRIMARY_DEPENDS LIBLAS) @@ -998,5 +998,5 @@ build_program_in_subdir( POSTGRES) if(WITH_OPENDWG) - build_program_in_subdir(v.in.dwg DEPENDS grass_gis grass_vector LIBM) + build_program_in_subdir(v.in.dwg DEPENDS grass_gis grass_vector ${LIBM}) endif() diff --git a/vector/v.lrs/CMakeLists.txt b/vector/v.lrs/CMakeLists.txt index 46087487d70..ebfd88f97f1 100644 --- a/vector/v.lrs/CMakeLists.txt +++ b/vector/v.lrs/CMakeLists.txt @@ -20,7 +20,7 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver GDAL - LIBM) + ${LIBM}) build_program_in_subdir( v.lrs.segment @@ -32,7 +32,7 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver GDAL - LIBM) + ${LIBM}) build_program_in_subdir( v.lrs.label @@ -44,7 +44,7 @@ build_program_in_subdir( grass_dbmiclient grass_dbmidriver GDAL - LIBM) + ${LIBM}) build_program_in_subdir( v.lrs.where From 953bf9be4bbcff1af73699fb83544f70b8c6b094 Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Wed, 25 Sep 2024 17:27:50 -0700 Subject: [PATCH 169/253] Fixed Environment Path Separator issue in windows by replacing ; with \; --- CMakeLists.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0168a2e60b8..702309b3c60 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -213,14 +213,15 @@ set(THUMBNAILS_PY ${CMAKE_BINARY_DIR}/utils/thumbnails.py) set(HTML2MAN VERSION_NUMBER=${GRASS_VERSION_NUMBER} ${PYTHON_EXECUTABLE} ${OUTDIR}/${GRASS_INSTALL_UTILSDIR}/g.html2man.py) +set(env_path "$ENV{PATH}") + if(WIN32) set(sep "\;") + string(REPLACE ";" "${sep}" env_path "${env_path}") else() set(sep ":") endif() -set(env_path "$ENV{PATH}") - 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}" From 487806664dbccbb7a93625366dd3307e4ed3e959 Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Tue, 1 Oct 2024 15:52:09 -0700 Subject: [PATCH 170/253] Added Grass GIS dependency to wxpython docs --- gui/wxpython/docs/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gui/wxpython/docs/CMakeLists.txt b/gui/wxpython/docs/CMakeLists.txt index bec5455695a..a257457fd0b 100644 --- a/gui/wxpython/docs/CMakeLists.txt +++ b/gui/wxpython/docs/CMakeLists.txt @@ -7,7 +7,7 @@ set(wxpython_html_files wxGUI.toolboxes wxGUI.vnet) -add_custom_target(wxpython_docs) +add_custom_target(wxpython_docs DEPENDS grass_gis) add_dependencies(GUI_WXPYTHON wxpython_docs) foreach(html_file ${wxpython_html_files}) From eaf0a9be85f38a5f5cf4e114f1752cf13d64096c Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Tue, 1 Oct 2024 15:59:07 -0700 Subject: [PATCH 171/253] Added grep alternative findstr to windows and replaced /dev/null with windows null device --- cmake/modules/build_module.cmake | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/cmake/modules/build_module.cmake b/cmake/modules/build_module.cmake index ef285b8115e..2bebe685f78 100644 --- a/cmake/modules/build_module.cmake +++ b/cmake/modules/build_module.cmake @@ -248,9 +248,15 @@ function(build_module) endif() if(RUN_HTML_DESCR) - set(html_descr_command - ${G_NAME}${PGM_EXT} --html-description < /dev/null | grep -v - '\|\| ') + if(WIN32) + set(html_descr_command + ${G_NAME}${PGM_EXT} --html-description < nul | findstr /V + "\|\| ") + else() + set(html_descr_command + ${G_NAME}${PGM_EXT} --html-description < /dev/null | grep -v + '\|\| ') + endif() else() set(html_descr_command ${CMAKE_COMMAND} -E echo) endif() From a12643f83974350bdc13b9be280b8c8fe33e7f21 Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Thu, 3 Oct 2024 09:49:40 -0700 Subject: [PATCH 172/253] Fixed Unresolved external symbol G__ due to export issue in windows --- lib/gis/G.h | 8 +++++++- lib/gis/gisinit.c | 5 ++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/gis/G.h b/lib/gis/G.h index 0cbfb5dbaaa..d2e31051797 100644 --- a/lib/gis/G.h +++ b/lib/gis/G.h @@ -1,6 +1,12 @@ #include #include +#ifdef GRASS_CMAKE_BUILD +#include +#else +#define GRASS_GIS_EXPORT +#endif + struct G__ /* Structure of library globals */ { struct Cell_head window; /* Contains the current window */ @@ -9,4 +15,4 @@ struct G__ /* Structure of library globals */ int compression_level; /* zlib compression level */ }; -extern struct G__ G__; /* allocated in gisinit */ +GRASS_GIS_EXPORT extern struct G__ G__; /* allocated in gisinit */ diff --git a/lib/gis/gisinit.c b/lib/gis/gisinit.c index 9ae04ac2f56..6cec20b7150 100644 --- a/lib/gis/gisinit.c +++ b/lib/gis/gisinit.c @@ -26,12 +26,15 @@ #include "G.h" #include "gis_local_proto.h" +#if 0 #ifdef GRASS_CMAKE_BUILD #include #else #define GRASS_GIS_EXPORT #endif -struct G__ G__; +#endif + +GRASS_GIS_EXPORT struct G__ G__; /** initialized is set to 1 when engine is initialized */ /* GRASS_GIS_EXPORT static int initialized on windows msvc throws below error. From 7b5e0fec61d68c18b067b6c488b4ba86f375ab62 Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Wed, 9 Oct 2024 10:37:10 -0700 Subject: [PATCH 173/253] Fixed export issue of global variables in driver module. These variables are used in cairodriver --- lib/driver/driver.h | 22 ++++++++++++++-------- lib/driver/init.c | 16 ++++++++-------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/lib/driver/driver.h b/lib/driver/driver.h index 5a757a323da..9a9763d456b 100644 --- a/lib/driver/driver.h +++ b/lib/driver/driver.h @@ -3,18 +3,24 @@ #include -extern int screen_width; -extern int screen_height; +#ifdef GRASS_CMAKE_BUILD +#include +#else +#define GRASS_DRIVER_EXPORT +#endif -extern double cur_x; -extern double cur_y; +GRASS_DRIVER_EXPORT extern int screen_width; +GRASS_DRIVER_EXPORT extern int screen_height; -extern double text_size_x; -extern double text_size_y; -extern double text_rotation; +GRASS_DRIVER_EXPORT extern double cur_x; +GRASS_DRIVER_EXPORT extern double cur_y; + +GRASS_DRIVER_EXPORT extern double text_size_x; +GRASS_DRIVER_EXPORT extern double text_size_y; +GRASS_DRIVER_EXPORT extern double text_rotation; extern double text_sinrot; extern double text_cosrot; -extern int matrix_valid; +GRASS_DRIVER_EXPORT extern int matrix_valid; extern struct GFONT_CAP *ftcap; diff --git a/lib/driver/init.c b/lib/driver/init.c index c170037e88b..0cddc814ca9 100644 --- a/lib/driver/init.c +++ b/lib/driver/init.c @@ -26,18 +26,18 @@ const struct driver *driver; struct GFONT_CAP *ftcap; -int screen_width; -int screen_height; +GRASS_DRIVER_EXPORT int screen_width; +GRASS_DRIVER_EXPORT int screen_height; -double cur_x; -double cur_y; +GRASS_DRIVER_EXPORT double cur_x; +GRASS_DRIVER_EXPORT double cur_y; -double text_size_x; -double text_size_y; -double text_rotation; +GRASS_DRIVER_EXPORT double text_size_x; +GRASS_DRIVER_EXPORT double text_size_y; +GRASS_DRIVER_EXPORT double text_rotation; double text_sinrot; double text_cosrot; -int matrix_valid; +GRASS_DRIVER_EXPORT int matrix_valid; /*! \brief Initialize display driver From 5cf574190fd8a03c5e32ecb680327a11db6ec51f Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Mon, 14 Oct 2024 14:38:25 -0700 Subject: [PATCH 174/253] Fixed db link issue --- db/drivers/CMakeLists.txt | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/db/drivers/CMakeLists.txt b/db/drivers/CMakeLists.txt index e8ba0eb17f5..4039cd529b6 100644 --- a/db/drivers/CMakeLists.txt +++ b/db/drivers/CMakeLists.txt @@ -42,7 +42,8 @@ build_program_in_subdir( ${dbf_SRCS} DEPENDS grass_gis - grass_dbmibase + grass_dbstubs + grass_dbmibase # TODO: REMOVEME later because dbmidriver depends on dbmibase grass_dbmidriver grass_shape grass_sqlp @@ -59,7 +60,8 @@ build_program_in_subdir( ogr DEPENDS grass_gis - grass_dbmibase + grass_dbstubs + grass_dbmibase # TODO: REMOVEME later because dbmidriver depends on dbmibase grass_dbmidriver grass_sqlp GDAL @@ -76,6 +78,7 @@ build_program_in_subdir( odbc DEPENDS grass_gis + grass_dbstubs grass_dbmidriver grass_sqlp DEFS @@ -94,7 +97,8 @@ build_program_in_subdir( sqlite DEPENDS grass_gis - grass_dbmibase + grass_dbstubs + grass_dbmibase # TODO: REMOVEME later because dbmidriver depends on dbmibase grass_dbmidriver grass_sqlp DEFS @@ -116,7 +120,8 @@ build_program_in_subdir( pg DEPENDS grass_gis - grass_dbmibase + grass_dbstubs + grass_dbmibase # TODO: REMOVEME later because dbmidriver depends on dbmibase grass_dbmidriver grass_sqlp DEFS @@ -128,8 +133,8 @@ build_program_in_subdir( RUNTIME_OUTPUT_DIR "${GRASS_INSTALL_DRIVERDIR}/db") -if(TARGET MYSQL) - list(APPEND db_drivers mysql) +if(TARGET POSTGRES) + list(APPEND db_drivers pg) endif() build_program_in_subdir( @@ -138,7 +143,8 @@ build_program_in_subdir( ${mysql_SRCS} DEPENDS grass_gis - grass_dbmibase + grass_dbstubs + grass_dbmibase # TODO: REMOVEME later because dbmidriver depends on dbmibase grass_dbmidriver grass_sqlp DEFS From e16a65a58b4ff7c7c3de96280bb92a28204e79a5 Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Mon, 14 Oct 2024 14:48:49 -0700 Subject: [PATCH 175/253] Removed TODO comments as it is required to add all dependencies while building program --- db/drivers/CMakeLists.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/db/drivers/CMakeLists.txt b/db/drivers/CMakeLists.txt index 4039cd529b6..e6a5c709ff3 100644 --- a/db/drivers/CMakeLists.txt +++ b/db/drivers/CMakeLists.txt @@ -43,7 +43,7 @@ build_program_in_subdir( DEPENDS grass_gis grass_dbstubs - grass_dbmibase # TODO: REMOVEME later because dbmidriver depends on dbmibase + grass_dbmibase grass_dbmidriver grass_shape grass_sqlp @@ -61,7 +61,7 @@ build_program_in_subdir( DEPENDS grass_gis grass_dbstubs - grass_dbmibase # TODO: REMOVEME later because dbmidriver depends on dbmibase + grass_dbmibase grass_dbmidriver grass_sqlp GDAL @@ -98,7 +98,7 @@ build_program_in_subdir( DEPENDS grass_gis grass_dbstubs - grass_dbmibase # TODO: REMOVEME later because dbmidriver depends on dbmibase + grass_dbmibase grass_dbmidriver grass_sqlp DEFS @@ -121,7 +121,7 @@ build_program_in_subdir( DEPENDS grass_gis grass_dbstubs - grass_dbmibase # TODO: REMOVEME later because dbmidriver depends on dbmibase + grass_dbmibase grass_dbmidriver grass_sqlp DEFS @@ -144,7 +144,7 @@ build_program_in_subdir( DEPENDS grass_gis grass_dbstubs - grass_dbmibase # TODO: REMOVEME later because dbmidriver depends on dbmibase + grass_dbmibase grass_dbmidriver grass_sqlp DEFS From abaa8cd74763303454a1d62a194a5e76c3141cb6 Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Tue, 22 Oct 2024 15:23:28 -0700 Subject: [PATCH 176/253] Added Default Build Type as DEBUG for Windows and Removed find_library_suffix for windows, as conda libraries donot have build type suffix --- CMakeLists.txt | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 702309b3c60..a3cb1eecc70 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -70,13 +70,20 @@ endif() if(CMAKE_BUILD_TYPE) set(grass_build_type "${CMAKE_BUILD_TYPE}") - 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") + 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() else() set(find_library_suffix "") + if(MSVC) + set(CMAKE_BUILD_TYPE "DEBUG") + endif() endif() # Graphics options From c3d07749631b8fd94c75eb2f08a08e8e20395e25 Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Tue, 22 Oct 2024 15:25:18 -0700 Subject: [PATCH 177/253] Included LD Library PATH for windows in PATH --- CMakeLists.txt | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a3cb1eecc70..a51d6f98308 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -225,11 +225,21 @@ set(env_path "$ENV{PATH}") if(WIN32) set(sep "\;") string(REPLACE ";" "${sep}" env_path "${env_path}") + string(APPEND BIN_DIR "\\${CMAKE_BUILD_TYPE}") + string(APPEND LIB_DIR "\\${CMAKE_BUILD_TYPE}") + 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}" + "GISBASE=${RUN_GISBASE_NATIVE}" "GISRC=${GISRC}" "LC_ALL=C" "LANG=C" + "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}\"") + message(STATUS "Command ${grass_env_command}") else() set(sep ":") -endif() - -set(grass_env_command + 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}" @@ -237,6 +247,7 @@ set(grass_env_command "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") From ad92759b31f2dae6e080cb468c01f642685d3ab5 Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Wed, 23 Oct 2024 14:30:29 -0700 Subject: [PATCH 178/253] ctime is used for Windows. So replaced mingw32 with win32 --- raster/r.terraflow/flow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/raster/r.terraflow/flow.cpp b/raster/r.terraflow/flow.cpp index 83b7de0c378..a6bed97975e 100644 --- a/raster/r.terraflow/flow.cpp +++ b/raster/r.terraflow/flow.cpp @@ -62,7 +62,7 @@ void computeFlowAccumulation(AMI_STREAM *fillStream, perror("time"); exit(1); } -#ifdef __MINGW32__ +#ifdef _WIN32 strcpy(buf, ctime(&t)); #else ctime_r(&t, buf); From e73bbb76ec9377f46038e17c3494bd6c5a0c1c54 Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Wed, 23 Oct 2024 15:32:11 -0700 Subject: [PATCH 179/253] Iterator should be declared outside pragma block --- raster/r.horizon/main.c | 4 +++- raster/r.univar/r.univar_main.c | 5 +++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/raster/r.horizon/main.c b/raster/r.horizon/main.c index 576f85f3afa..809d12b538a 100644 --- a/raster/r.horizon/main.c +++ b/raster/r.horizon/main.c @@ -1187,9 +1187,11 @@ void calculate_raster_mode(const Settings *settings, const Geometry *geometry, G_message( _("Calculating map %01d of %01d (angle %.2f, raster map <%s>)"), (k + 1), arrayNumInt, angle_deg, shad_filename); + + int j; #pragma omp parallel for schedule(static, 1) default(shared) - for (int j = hor_row_start; j < hor_row_end; j++) { + for (j = hor_row_start; j < hor_row_end; j++) { G_percent(j - hor_row_start, hor_numrows - 1, 2); for (int i = hor_col_start; i < hor_col_end; i++) { OriginPoint origin_point; diff --git a/raster/r.univar/r.univar_main.c b/raster/r.univar/r.univar_main.c index e56301a1364..e1890620cb8 100644 --- a/raster/r.univar/r.univar_main.c +++ b/raster/r.univar/r.univar_main.c @@ -370,6 +370,7 @@ static void process_raster(univar_stat *stats, thread_workspace *tw, #endif int computed = 0; + int row; #pragma omp parallel { @@ -394,9 +395,9 @@ static void process_raster(univar_stat *stats, thread_workspace *tw, zd->bucket.fcells = NULL; zd->bucket.dcells = NULL; } - + #pragma omp for - for (int row = 0; row < rows; row++) { + for (row = 0; row < rows; row++) { thread_workspace *w = &tw[t_id]; Rast_get_row(w->fd, w->raster_row, row, map_type); From 6fd4297f150c2ebcfb9aeae9691c071fe77ffa19 Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Thu, 31 Oct 2024 15:05:07 -0700 Subject: [PATCH 180/253] Removed extra build mode directory for windows due to multiple issues --- CMakeLists.txt | 11 ++++++----- cmake/modules/build_module.cmake | 5 ++++- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a51d6f98308..c7168c61287 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -149,10 +149,14 @@ set(GRASS_VERSION_UPDATE_PKG "0.2") include(GRASSInstallDirs) # Setup build locations. -if(NOT CMAKE_LIBRARY_OUTPUT_DIRECTORY) +if(MSVC) + 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}) endif() -if(NOT CMAKE_ARCHIVE_OUTPUT_DIRECTORY) +if(MSVC) + 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}) endif() @@ -225,8 +229,6 @@ set(env_path "$ENV{PATH}") if(WIN32) set(sep "\;") string(REPLACE ";" "${sep}" env_path "${env_path}") - string(APPEND BIN_DIR "\\${CMAKE_BUILD_TYPE}") - string(APPEND LIB_DIR "\\${CMAKE_BUILD_TYPE}") 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}" @@ -236,7 +238,6 @@ if(WIN32) "LANGUAGE=C" "VERSION_NUMBER=\"${GRASS_VERSION_NUMBER}\"" "VERSION_DATE=\"${GRASS_VERSION_DATE}\"") - message(STATUS "Command ${grass_env_command}") else() set(sep ":") set(grass_env_command diff --git a/cmake/modules/build_module.cmake b/cmake/modules/build_module.cmake index 2bebe685f78..94fd7b5c458 100644 --- a/cmake/modules/build_module.cmake +++ b/cmake/modules/build_module.cmake @@ -97,7 +97,10 @@ function(build_module) set(G_RUNTIME_OUTPUT_DIR "${OUTDIR}/${install_dest}") endif() - if(NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY) + if(MSVC) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE} ${G_RUNTIME_OUTPUT_DIR}) + message(STATUS "HAHA ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE}}") + elseif(NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${G_RUNTIME_OUTPUT_DIR}) endif() From 531d277a8437aeee72109ba9738e76e34097143d Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Thu, 31 Oct 2024 15:08:15 -0700 Subject: [PATCH 181/253] Multiple instructions in single line created access violation, so separated instructions into multiple lines. Added stdlib for malloc --- msvc/dirent.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/msvc/dirent.c b/msvc/dirent.c index 44f7a6a7d29..981f35fa2cb 100644 --- a/msvc/dirent.c +++ b/msvc/dirent.c @@ -1,4 +1,4 @@ - +#include #include #include #include @@ -20,10 +20,11 @@ DIR *opendir(const char *name) size_t base_length = strlen(name); const char *all = /* search pattern must end with suitable wildcard */ strchr("/\\", name[base_length - 1]) ? "*" : "/*"; - - if ((dir = (DIR *)malloc(sizeof *dir)) != 0 && + dir = (DIR *)malloc(sizeof *dir); + if (dir != 0 && (dir->name = (char *)malloc(base_length + strlen(all) + 1)) != 0) { - strcat(strcpy(dir->name, name), all); + strcpy(dir->name, name); + strcat(dir->name, all); if ((dir->handle = (handle_type)_findfirst(dir->name, &dir->info)) != -1) { From 489e07a3c1895a3de2b930e38d4ef2973ff7db3d Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Thu, 31 Oct 2024 15:24:17 -0700 Subject: [PATCH 182/253] Removed message statement --- cmake/modules/build_module.cmake | 1 - 1 file changed, 1 deletion(-) diff --git a/cmake/modules/build_module.cmake b/cmake/modules/build_module.cmake index 94fd7b5c458..a1d80e3157d 100644 --- a/cmake/modules/build_module.cmake +++ b/cmake/modules/build_module.cmake @@ -99,7 +99,6 @@ function(build_module) if(MSVC) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE} ${G_RUNTIME_OUTPUT_DIR}) - message(STATUS "HAHA ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CMAKE_BUILD_TYPE}}") elseif(NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${G_RUNTIME_OUTPUT_DIR}) endif() From 309440cdde8ce0ab416bd10db74732693d873c24 Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Thu, 31 Oct 2024 15:25:59 -0700 Subject: [PATCH 183/253] Windows equivalent of strtok_r is strtok_s. So, replaced it --- display/d.vect/legend.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/display/d.vect/legend.c b/display/d.vect/legend.c index 6a0b56b3a06..d522332babc 100644 --- a/display/d.vect/legend.c +++ b/display/d.vect/legend.c @@ -14,8 +14,11 @@ void write_into_legfile(struct Map_info *Map, int type, const char *leglab, char map[GNAME_MAX]; char *ptr; strcpy(map, name_map); +#ifdef _MSC_VER + strtok_s(map, "@", &ptr); +#else strtok_r(map, "@", &ptr); - +#endif if (size_column) size = "-1"; From 16e30a9cafe728792ff2fc8ace41940aa59f4246 Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Thu, 7 Nov 2024 13:01:29 -0800 Subject: [PATCH 184/253] Fixed Python variable typo --- python/libgrass_interface_generator/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/libgrass_interface_generator/CMakeLists.txt b/python/libgrass_interface_generator/CMakeLists.txt index b79c9a34110..97d587bd7cd 100644 --- a/python/libgrass_interface_generator/CMakeLists.txt +++ b/python/libgrass_interface_generator/CMakeLists.txt @@ -85,7 +85,7 @@ foreach(module ${MODULES}) DEPENDS ${${module}_LIBS} COMMAND ${CMAKE_COMMAND} -DCTYPESGEN_PY=${CMAKE_CURRENT_SOURCE_DIR}/run.py - -DPython_EXECUTABLE=${Python_EXECUTABLE} -DCOMPILER=${CMAKE_C_COMPILER} + -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE} -DCOMPILER=${CMAKE_C_COMPILER} "-DHDRS=${${module}_HDRS}" "-DLIBS=${${module}_LIBS}" -DOUTDIR=${OUTDIR} -DGRASS_INSTALL_INCLUDEDIR=${GRASS_INSTALL_INCLUDEDIR} -DGRASS_INSTALL_SCRIPTDIR=${GRASS_INSTALL_SCRIPTDIR} From 9820712973f081ce05b26f836272167551f430b4 Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Mon, 11 Nov 2024 10:24:19 -0800 Subject: [PATCH 185/253] changes mixed case python variables in cmake to uppercase to maintain consistency --- cmake/modules/CheckDependentLibraries.cmake | 2 +- cmake/modules/GRASSInstallDirs.cmake | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/modules/CheckDependentLibraries.cmake b/cmake/modules/CheckDependentLibraries.cmake index 7b485d831fa..17113b4f61b 100644 --- a/cmake/modules/CheckDependentLibraries.cmake +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -337,7 +337,7 @@ endif() find_package(Python3 REQUIRED) if(Python3_FOUND) set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE}) - set(Python_SITEARCH ${Python3_SITEARCH}) + set(PYTHON_SITEARCH ${Python3_SITEARCH}) #[[ find_package(PythonLibs REQUIRED) find_package(Numpy) diff --git a/cmake/modules/GRASSInstallDirs.cmake b/cmake/modules/GRASSInstallDirs.cmake index 66177405728..0d1b38676da 100644 --- a/cmake/modules/GRASSInstallDirs.cmake +++ b/cmake/modules/GRASSInstallDirs.cmake @@ -10,7 +10,7 @@ if(WITH_FHS) "${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_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") From 8b1e8240b2993ab14fa5b75748ec59a990ec04a9 Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Tue, 12 Nov 2024 11:29:48 -0800 Subject: [PATCH 186/253] isolated chmod only for UNIX and replaced /dev/null, grep with nul, findstr for windows --- cmake/modules/build_gui_in_subdir.cmake | 29 +++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/cmake/modules/build_gui_in_subdir.cmake b/cmake/modules/build_gui_in_subdir.cmake index b733cd9846f..98a3ca49a1a 100644 --- a/cmake/modules/build_gui_in_subdir.cmake +++ b/cmake/modules/build_gui_in_subdir.cmake @@ -44,11 +44,18 @@ function(build_gui_in_subdir dir_name) 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() if(WITH_DOCS) @@ -79,6 +86,27 @@ function(build_gui_in_subdir dir_name) set(OUT_HTML_FILE ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/${G_TARGET_NAME}.html) set(GUI_HTML_FILE ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/wxGUI.${G_NAME}.html) + if(WIN32) + add_custom_command( + OUTPUT ${OUT_HTML_FILE} + COMMAND ${CMAKE_COMMAND} -E copy ${G_SRC_DIR}/${G_TARGET_NAME}.html + ${CMAKE_CURRENT_BINARY_DIR}/${G_TARGET_NAME}.html + COMMAND + ${grass_env_command} ${PYTHON_EXECUTABLE} + ${OUTDIR}/${GRASS_INSTALL_SCRIPTDIR}/${G_TARGET_NAME}${SCRIPT_EXT} + --html-description < nul | findstr /V + "\|\| " > ${TMP_HTML_FILE} + COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} ${MKHTML_PY} + ${G_TARGET_NAME} ${GRASS_VERSION_DATE} > ${OUT_HTML_FILE} + COMMENT "Creating ${OUT_HTML_FILE}" + COMMAND ${copy_images_command} + COMMAND ${CMAKE_COMMAND} -E remove ${TMP_HTML_FILE} + ${CMAKE_CURRENT_BINARY_DIR}/${G_TARGET_NAME}.html + COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} ${MKHTML_PY} + ${G_TARGET_NAME} ${GRASS_VERSION_DATE} > ${GUI_HTML_FILE} + COMMENT "Creating ${GUI_HTML_FILE}" + DEPENDS ${OUT_SCRIPT_FILE} GUI_WXPYTHON LIB_PYTHON) + else() add_custom_command( OUTPUT ${OUT_HTML_FILE} COMMAND ${CMAKE_COMMAND} -E copy ${G_SRC_DIR}/${G_TARGET_NAME}.html @@ -98,6 +126,7 @@ function(build_gui_in_subdir dir_name) ${G_TARGET_NAME} ${GRASS_VERSION_DATE} > ${GUI_HTML_FILE} COMMENT "Creating ${GUI_HTML_FILE}" DEPENDS ${OUT_SCRIPT_FILE} GUI_WXPYTHON LIB_PYTHON) + endif() install(FILES ${OUT_HTML_FILE} ${GUI_HTML_FILE} DESTINATION ${GRASS_INSTALL_DOCDIR}) From 1cf4c1b34efc46b779fc041e4b9003143e65ae2b Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Wed, 13 Nov 2024 12:26:33 -0800 Subject: [PATCH 187/253] Updated grep with findstr for windows compatibility --- cmake/modules/build_script_in_subdir.cmake | 51 +++++++++++++++------- 1 file changed, 35 insertions(+), 16 deletions(-) diff --git a/cmake/modules/build_script_in_subdir.cmake b/cmake/modules/build_script_in_subdir.cmake index aee35d3d80f..24a92db9ebe 100644 --- a/cmake/modules/build_script_in_subdir.cmake +++ b/cmake/modules/build_script_in_subdir.cmake @@ -108,22 +108,41 @@ function(build_script_in_subdir dir_name) set(TMP_HTML_FILE ${CMAKE_CURRENT_BINARY_DIR}/${G_NAME}.tmp.html) set(OUT_HTML_FILE ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/${G_NAME}.html) - 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 - ${grass_env_command} ${PYTHON_EXECUTABLE} - ${OUTDIR}/${G_DEST_DIR}/${G_NAME}${SCRIPT_EXT} - --html-description < /dev/null | grep -v - '\|\| ' > ${TMP_HTML_FILE} - COMMAND ${grass_env_command} ${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}" - DEPENDS ${TRANSLATE_C_FILE} LIB_PYTHON) + if(WIN32) + 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 + ${grass_env_command} ${PYTHON_EXECUTABLE} + ${OUTDIR}/${G_DEST_DIR}/${G_NAME}${SCRIPT_EXT} + --html-description < nul | findstr /V + "\|\| " > ${TMP_HTML_FILE} + COMMAND ${grass_env_command} ${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}" + DEPENDS ${TRANSLATE_C_FILE} LIB_PYTHON) + else() + 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 + ${grass_env_command} ${PYTHON_EXECUTABLE} + ${OUTDIR}/${G_DEST_DIR}/${G_NAME}${SCRIPT_EXT} + --html-description < /dev/null | grep -v + '\|\| ' > ${TMP_HTML_FILE} + COMMAND ${grass_env_command} ${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}" + DEPENDS ${TRANSLATE_C_FILE} LIB_PYTHON) + endif() install(FILES ${OUT_HTML_FILE} DESTINATION ${GRASS_INSTALL_DOCDIR}) From 26e93722f45911a521dd206cf51b76dd3f260bbb Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Wed, 13 Nov 2024 13:59:24 -0800 Subject: [PATCH 188/253] Resolved external variable link issue in windows for v.surf.rst using export --- lib/rst/interp_float/interpf.h | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/lib/rst/interp_float/interpf.h b/lib/rst/interp_float/interpf.h index a4055a41e8a..1ab6344c37c 100644 --- a/lib/rst/interp_float/interpf.h +++ b/lib/rst/interp_float/interpf.h @@ -12,6 +12,11 @@ #include #include #include +#ifdef GRASS_CMAKE_BUILD +#include +#else +#define GRASS_INTERPFL_EXPORT +#endif /* for resample program */ struct fcell_triple { @@ -22,21 +27,21 @@ struct fcell_triple { }; #ifdef POINT2D_C -struct line_pnts *Pnts; -struct line_cats *Cats2; -dbDriver *driver2; -dbString sql2; -struct Map_info Map2; -struct field_info *ff; -int count; +GRASS_INTERPFL_EXPORT struct line_pnts *Pnts; +GRASS_INTERPFL_EXPORT struct line_cats *Cats2; +GRASS_INTERPFL_EXPORT dbDriver *driver2; +GRASS_INTERPFL_EXPORT dbString sql2; +GRASS_INTERPFL_EXPORT struct Map_info Map2; +GRASS_INTERPFL_EXPORT struct field_info *ff; +GRASS_INTERPFL_EXPORT int count; #else -extern struct line_pnts *Pnts; -extern struct line_cats *Cats2; -extern dbDriver *driver2; -extern dbString sql2; -extern struct Map_info Map2; -extern struct field_info *ff; -extern int count; +GRASS_INTERPFL_EXPORT extern struct line_pnts *Pnts; +GRASS_INTERPFL_EXPORT extern struct line_cats *Cats2; +GRASS_INTERPFL_EXPORT extern dbDriver *driver2; +GRASS_INTERPFL_EXPORT extern dbString sql2; +GRASS_INTERPFL_EXPORT extern struct Map_info Map2; +GRASS_INTERPFL_EXPORT extern struct field_info *ff; +GRASS_INTERPFL_EXPORT extern int count; #endif struct interp_params; From f3bb46995c383ddc44ea09da4a9b7c00a1299d52 Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Mon, 25 Nov 2024 15:02:37 -0800 Subject: [PATCH 189/253] Optimized NULL device Path, SEARCH command, HTML search string in Cmake commands --- CMakeLists.txt | 6 +++ cmake/modules/build_gui_in_subdir.cmake | 28 ++---------- cmake/modules/build_module.cmake | 12 ++--- cmake/modules/build_script_in_subdir.cmake | 51 +++++++--------------- 4 files changed, 29 insertions(+), 68 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c7168c61287..158f9d980e6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -227,6 +227,9 @@ set(HTML2MAN VERSION_NUMBER=${GRASS_VERSION_NUMBER} ${PYTHON_EXECUTABLE} set(env_path "$ENV{PATH}") if(WIN32) + set(NULL_DEVICE nul) + set(SEARCH_COMMAND findstr /v) + set(HTML_SEARCH_STR "\"\|\| \"") set(sep "\;") string(REPLACE ";" "${sep}" env_path "${env_path}") set(grass_env_command @@ -239,6 +242,9 @@ if(WIN32) "VERSION_NUMBER=\"${GRASS_VERSION_NUMBER}\"" "VERSION_DATE=\"${GRASS_VERSION_DATE}\"") else() + set(NULL_DEVICE /dev/null) + set(SEARCH_COMMAND grep -v) + set(HTML_SEARCH_STR "\'\|\| \'") set(sep ":") set(grass_env_command ${CMAKE_COMMAND} -E env "PATH=${BIN_DIR}${sep}${SCRIPTS_DIR}${sep}${env_path}" diff --git a/cmake/modules/build_gui_in_subdir.cmake b/cmake/modules/build_gui_in_subdir.cmake index 98a3ca49a1a..578c9565df0 100644 --- a/cmake/modules/build_gui_in_subdir.cmake +++ b/cmake/modules/build_gui_in_subdir.cmake @@ -86,27 +86,7 @@ function(build_gui_in_subdir dir_name) set(OUT_HTML_FILE ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/${G_TARGET_NAME}.html) set(GUI_HTML_FILE ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/wxGUI.${G_NAME}.html) - if(WIN32) - add_custom_command( - OUTPUT ${OUT_HTML_FILE} - COMMAND ${CMAKE_COMMAND} -E copy ${G_SRC_DIR}/${G_TARGET_NAME}.html - ${CMAKE_CURRENT_BINARY_DIR}/${G_TARGET_NAME}.html - COMMAND - ${grass_env_command} ${PYTHON_EXECUTABLE} - ${OUTDIR}/${GRASS_INSTALL_SCRIPTDIR}/${G_TARGET_NAME}${SCRIPT_EXT} - --html-description < nul | findstr /V - "\|\| " > ${TMP_HTML_FILE} - COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} ${MKHTML_PY} - ${G_TARGET_NAME} ${GRASS_VERSION_DATE} > ${OUT_HTML_FILE} - COMMENT "Creating ${OUT_HTML_FILE}" - COMMAND ${copy_images_command} - COMMAND ${CMAKE_COMMAND} -E remove ${TMP_HTML_FILE} - ${CMAKE_CURRENT_BINARY_DIR}/${G_TARGET_NAME}.html - COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} ${MKHTML_PY} - ${G_TARGET_NAME} ${GRASS_VERSION_DATE} > ${GUI_HTML_FILE} - COMMENT "Creating ${GUI_HTML_FILE}" - DEPENDS ${OUT_SCRIPT_FILE} GUI_WXPYTHON LIB_PYTHON) - else() + add_custom_command( OUTPUT ${OUT_HTML_FILE} COMMAND ${CMAKE_COMMAND} -E copy ${G_SRC_DIR}/${G_TARGET_NAME}.html @@ -114,8 +94,8 @@ function(build_gui_in_subdir dir_name) COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} ${OUTDIR}/${GRASS_INSTALL_SCRIPTDIR}/${G_TARGET_NAME}${SCRIPT_EXT} - --html-description < /dev/null | grep -v - '\|\| ' > ${TMP_HTML_FILE} + --html-description < ${NULL_DEVICE} | ${SEARCH_COMMAND} + ${HTML_SEARCH_STR} > ${TMP_HTML_FILE} COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} ${MKHTML_PY} ${G_TARGET_NAME} ${GRASS_VERSION_DATE} > ${OUT_HTML_FILE} COMMENT "Creating ${OUT_HTML_FILE}" @@ -126,7 +106,7 @@ function(build_gui_in_subdir dir_name) ${G_TARGET_NAME} ${GRASS_VERSION_DATE} > ${GUI_HTML_FILE} COMMENT "Creating ${GUI_HTML_FILE}" DEPENDS ${OUT_SCRIPT_FILE} GUI_WXPYTHON LIB_PYTHON) - endif() + install(FILES ${OUT_HTML_FILE} ${GUI_HTML_FILE} DESTINATION ${GRASS_INSTALL_DOCDIR}) diff --git a/cmake/modules/build_module.cmake b/cmake/modules/build_module.cmake index a1d80e3157d..cdaf0728e35 100644 --- a/cmake/modules/build_module.cmake +++ b/cmake/modules/build_module.cmake @@ -250,15 +250,9 @@ function(build_module) endif() if(RUN_HTML_DESCR) - if(WIN32) - set(html_descr_command - ${G_NAME}${PGM_EXT} --html-description < nul | findstr /V - "\|\| ") - else() - set(html_descr_command - ${G_NAME}${PGM_EXT} --html-description < /dev/null | grep -v - '\|\| ') - endif() + set(html_descr_command + ${G_NAME}${PGM_EXT} --html-description < ${NULL_DEVICE} | ${SEARCH_COMMAND} + ${HTML_SEARCH_STR}) else() set(html_descr_command ${CMAKE_COMMAND} -E echo) endif() diff --git a/cmake/modules/build_script_in_subdir.cmake b/cmake/modules/build_script_in_subdir.cmake index 24a92db9ebe..95fa518ec0b 100644 --- a/cmake/modules/build_script_in_subdir.cmake +++ b/cmake/modules/build_script_in_subdir.cmake @@ -108,41 +108,22 @@ function(build_script_in_subdir dir_name) set(TMP_HTML_FILE ${CMAKE_CURRENT_BINARY_DIR}/${G_NAME}.tmp.html) set(OUT_HTML_FILE ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/${G_NAME}.html) - if(WIN32) - 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 - ${grass_env_command} ${PYTHON_EXECUTABLE} - ${OUTDIR}/${G_DEST_DIR}/${G_NAME}${SCRIPT_EXT} - --html-description < nul | findstr /V - "\|\| " > ${TMP_HTML_FILE} - COMMAND ${grass_env_command} ${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}" - DEPENDS ${TRANSLATE_C_FILE} LIB_PYTHON) - else() - 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 - ${grass_env_command} ${PYTHON_EXECUTABLE} - ${OUTDIR}/${G_DEST_DIR}/${G_NAME}${SCRIPT_EXT} - --html-description < /dev/null | grep -v - '\|\| ' > ${TMP_HTML_FILE} - COMMAND ${grass_env_command} ${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}" - DEPENDS ${TRANSLATE_C_FILE} LIB_PYTHON) - 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 + ${grass_env_command} ${PYTHON_EXECUTABLE} + ${OUTDIR}/${G_DEST_DIR}/${G_NAME}${SCRIPT_EXT} + --html-description < ${NULL_DEVICE} | ${SEARCH_COMMAND} + ${HTML_SEARCH_STR} > ${TMP_HTML_FILE} + COMMAND ${grass_env_command} ${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}" + DEPENDS ${TRANSLATE_C_FILE} LIB_PYTHON) install(FILES ${OUT_HTML_FILE} DESTINATION ${GRASS_INSTALL_DOCDIR}) From 340cc5d66cd86dc638a2e0bb4b45e51c7d5a3a77 Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Mon, 25 Nov 2024 15:39:36 -0800 Subject: [PATCH 190/253] Prepended "g.gui." to all gui output bat files --- cmake/modules/build_gui_in_subdir.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/modules/build_gui_in_subdir.cmake b/cmake/modules/build_gui_in_subdir.cmake index 578c9565df0..d88032bfd68 100644 --- a/cmake/modules/build_gui_in_subdir.cmake +++ b/cmake/modules/build_gui_in_subdir.cmake @@ -29,7 +29,7 @@ function(build_gui_in_subdir dir_name) set(SCRIPT_EXT ".py") set(PGM_NAME ${G_NAME}) configure_file(${CMAKE_SOURCE_DIR}/cmake/windows_launch.bat.in - ${OUTDIR}/${GRASS_INSTALL_SCRIPTDIR}/${G_NAME}.bat @ONLY) + ${OUTDIR}/${GRASS_INSTALL_SCRIPTDIR}/${G_TARGET_NAME}.bat @ONLY) endif() set(GUI_STAMP_FILE ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${G_NAME}.stamp) From f4c5b5447748d533f1275b65d22f0cb6cdb3a797 Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Mon, 25 Nov 2024 15:45:30 -0800 Subject: [PATCH 191/253] Fixed Target Level Dependency for build modules items xml --- gui/wxpython/CMakeLists.txt | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/gui/wxpython/CMakeLists.txt b/gui/wxpython/CMakeLists.txt index 27d7db7948a..5c6b0d34da2 100644 --- a/gui/wxpython/CMakeLists.txt +++ b/gui/wxpython/CMakeLists.txt @@ -67,25 +67,30 @@ add_custom_target( COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../xml/grass-interface.dtd - ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/xml - DEPENDS GUI_WXPYTHON) + ${OUTDIR}/${GRASS_INSTALL_GUIDIR}/xml) + +add_dependencies(copy_wxpython_xml GUI_WXPYTHON) add_custom_target( compile_python_files COMMAND ${PYTHON_EXECUTABLE} -m compileall ${OUTDIR}/${GRASS_INSTALL_SCRIPTDIR} - COMMAND ${PYTHON_EXECUTABLE} -m compileall ${OUTDIR}/${WXPYTHON_DIR} - DEPENDS ALL_MODULES) + COMMAND ${PYTHON_EXECUTABLE} -m compileall ${OUTDIR}/${WXPYTHON_DIR}) + +add_dependencies(compile_python_files ALL_MODULES) + +add_custom_command( + OUTPUT "${OUTDIR}/${WXPYTHON_DIR}/xml/module_items.xml" + COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/tools/build_modules_xml.py + COMMENT "Generating interface description for all modules..." +) add_custom_target( build_modules_items_xml - COMMAND - ${grass_env_command} ${PYTHON_EXECUTABLE} - ${CMAKE_CURRENT_SOURCE_DIR}/tools/build_modules_xml.py > - ${OUTDIR}/${WXPYTHON_DIR}/xml/module_items.xml - DEPENDS copy_wxpython_xml compile_python_files ${g_gui_targets} - COMMENT "Generating interface description for all modules..." - VERBATIM) + DEPENDS "${OUTDIR}/${WXPYTHON_DIR}/xml/module_items.xml") + +add_dependencies(build_modules_items_xml copy_wxpython_xml compile_python_files ${g_gui_targets}) add_custom_target( build_xml_menudata From 4069654ca40ff14828372298981e7d92eff14e95 Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Tue, 3 Dec 2024 12:30:58 -0800 Subject: [PATCH 192/253] FIXED GRASS_PYTHON env value empty issue in bat files. FIXED TARGET NAME conflict. FIXED OUTPUT redirect to file issue --- CMakeLists.txt | 2 +- cmake/modules/build_gui_in_subdir.cmake | 2 +- gui/wxpython/CMakeLists.txt | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 158f9d980e6..c72ed4bd8e6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -235,7 +235,7 @@ if(WIN32) 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}" - "GISBASE=${RUN_GISBASE_NATIVE}" "GISRC=${GISRC}" "LC_ALL=C" "LANG=C" + "GRASS_PYTHON=${PYTHON_EXECUTABLE}" "GISBASE=${RUN_GISBASE_NATIVE}" "GISRC=${GISRC}" "LC_ALL=C" "LANG=C" "LANGUAGE=C" "MODULE_TOPDIR=${MODULE_TOPDIR}" "HTMLDIR=${DOC_DIR}" "LC_ALL=C" "LANG=C" "LANGUAGE=C" diff --git a/cmake/modules/build_gui_in_subdir.cmake b/cmake/modules/build_gui_in_subdir.cmake index d88032bfd68..543ae8c04f9 100644 --- a/cmake/modules/build_gui_in_subdir.cmake +++ b/cmake/modules/build_gui_in_subdir.cmake @@ -27,7 +27,7 @@ function(build_gui_in_subdir dir_name) set(SCRIPT_EXT "") if(WIN32) set(SCRIPT_EXT ".py") - set(PGM_NAME ${G_NAME}) + 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() diff --git a/gui/wxpython/CMakeLists.txt b/gui/wxpython/CMakeLists.txt index 5c6b0d34da2..e730c551ab4 100644 --- a/gui/wxpython/CMakeLists.txt +++ b/gui/wxpython/CMakeLists.txt @@ -82,7 +82,8 @@ add_dependencies(compile_python_files ALL_MODULES) add_custom_command( OUTPUT "${OUTDIR}/${WXPYTHON_DIR}/xml/module_items.xml" COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} - ${CMAKE_CURRENT_SOURCE_DIR}/tools/build_modules_xml.py + ${CMAKE_CURRENT_SOURCE_DIR}/tools/build_modules_xml.py > + "${OUTDIR}/${WXPYTHON_DIR}/xml/module_items.xml" COMMENT "Generating interface description for all modules..." ) From b793d10e8e33733dd681e205996625be1d07c1a5 Mon Sep 17 00:00:00 2001 From: KandelN <075bce084.nelson@pcampus.edu.np> Date: Tue, 3 Dec 2024 16:09:06 -0700 Subject: [PATCH 193/253] Fix unistd indentifiers by including unistd header --- vector/v.in.pdal/main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/vector/v.in.pdal/main.cpp b/vector/v.in.pdal/main.cpp index 0f48e1d5fea..6886328b6d4 100644 --- a/vector/v.in.pdal/main.cpp +++ b/vector/v.in.pdal/main.cpp @@ -36,6 +36,7 @@ extern "C" { #include #include #include +#include } extern "C" { From e598b03f907697b12912c59ca29b9528b0ea2a32 Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Thu, 5 Dec 2024 13:07:00 -0800 Subject: [PATCH 194/253] Fixed V.Profile issue of unresolved external symbol for db methods --- vector/CMakeLists.txt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/vector/CMakeLists.txt b/vector/CMakeLists.txt index 506ccf4ea40..096662c6d45 100644 --- a/vector/CMakeLists.txt +++ b/vector/CMakeLists.txt @@ -389,7 +389,14 @@ build_program_in_subdir( build_program_in_subdir(v.proj DEPENDS grass_gis grass_gproj grass_vector GDAL ${LIBM}) -build_program_in_subdir(v.profile DEPENDS grass_gis grass_vector GDAL) +build_program_in_subdir( + v.profile + DEPENDS + grass_dbmibase + grass_dbmiclient + grass_gis + grass_vector + GDAL) add_subdirectory(v.lrs) From 987746b75ec47ed1c603a198d446a8004f601b96 Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Thu, 5 Dec 2024 14:17:39 -0800 Subject: [PATCH 195/253] Fixed r3.mapcalc unresolved external symbol columns --- raster/r.mapcalc/map3.c | 1 + 1 file changed, 1 insertion(+) diff --git a/raster/r.mapcalc/map3.c b/raster/r.mapcalc/map3.c index c9683148275..e8c5fb77023 100644 --- a/raster/r.mapcalc/map3.c +++ b/raster/r.mapcalc/map3.c @@ -18,6 +18,7 @@ /****************************************************************************/ static void prepare_region_from_maps(expression **, int, int); +int columns; RASTER3D_Region current_region3; void setup_region(void) From cabbbfa2f88e77845489d34a3172db8eceb16682 Mon Sep 17 00:00:00 2001 From: KandelN <075bce084.nelson@pcampus.edu.np> Date: Fri, 6 Dec 2024 15:05:31 -0700 Subject: [PATCH 196/253] Fixed BuildPSO parameters parsing in windows --- man/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/man/CMakeLists.txt b/man/CMakeLists.txt index fbc393ded75..7633c9f3532 100644 --- a/man/CMakeLists.txt +++ b/man/CMakeLists.txt @@ -55,7 +55,7 @@ add_custom_target( ${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"' + "id='opts_table' class='scroolTable'" DEPENDS ${target_names} COMMENT "man generation: parser standard options") From a6f16e174b30b231ecbcb2629c36f404ed17d1b7 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 15 Feb 2025 20:37:44 -0700 Subject: [PATCH 197/253] Support for conda install openblas on Windows --- cmake/modules/CheckDependentLibraries.cmake | 10 ++++++++++ lib/gmath/la.c | 7 +++++++ 2 files changed, 17 insertions(+) diff --git a/cmake/modules/CheckDependentLibraries.cmake b/cmake/modules/CheckDependentLibraries.cmake index 17113b4f61b..aa1f1f1a9b6 100644 --- a/cmake/modules/CheckDependentLibraries.cmake +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -252,12 +252,20 @@ if(WITH_FFTW) endif() endif() +if(WIN32) + set(BLA_PREFER_PKGCONFIG ON) + set(BLA_PKGCONFIG_BLAS "openblas") + set(BLA_PKGCONFIG_LAPACK "openblas") +endif() + if(WITH_BLAS) find_package(BLAS REQUIRED) if(BLAS_FOUND) add_library(BLAS INTERFACE IMPORTED GLOBAL) set_property(TARGET BLAS PROPERTY INTERFACE_LINK_LIBRARIES ${BLAS_LIBRARIES}) + set_property(TARGET BLAS PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${BLAS_INCLUDE_DIRS}) endif() endif() @@ -267,6 +275,8 @@ if(WITH_LAPACK) add_library(LAPACK INTERFACE IMPORTED GLOBAL) set_property(TARGET LAPACK PROPERTY INTERFACE_LINK_LIBRARIES ${LAPACK_LIBRARIES}) + set_property(TARGET LAPACK PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${LAPACK_INCLUDE_DIRS}) endif() endif() diff --git a/lib/gmath/la.c b/lib/gmath/la.c index 5696a174bda..13b4d581b26 100644 --- a/lib/gmath/la.c +++ b/lib/gmath/la.c @@ -31,6 +31,13 @@ #include #include +#if defined(_MSC_VER) + #include + #define LAPACK_COMPLEX_CUSTOM + #define lapack_complex_float _Fcomplex + #define lapack_complex_double _Dcomplex +#endif + #include #if defined(HAVE_CBLAS_ATLAS_H) #include From 8659d2e41c686074467284447ed8d7ee9a45bcb9 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 15 Feb 2025 20:53:43 -0700 Subject: [PATCH 198/253] Add grass_parson dependency to r.colors.out --- raster/r.colors.out/CMakeLists.txt | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/raster/r.colors.out/CMakeLists.txt b/raster/r.colors.out/CMakeLists.txt index 0f9f0b2668c..9b835dc9344 100644 --- a/raster/r.colors.out/CMakeLists.txt +++ b/raster/r.colors.out/CMakeLists.txt @@ -1,5 +1,5 @@ -set(r_colors_out_SRCS raster_main.c) -set(r3_colors_out_SRCS raster3d_main.c) +set(r_colors_out_SRCS raster_main.c prt_json.c) +set(r3_colors_out_SRCS raster3d_main.c prt_json.c) build_program( NAME @@ -8,7 +8,8 @@ build_program( "${r_colors_out_SRCS}" DEPENDS grass_gis - grass_raster) + grass_raster + grass_parson) build_program( NAME @@ -18,4 +19,5 @@ build_program( DEPENDS grass_gis grass_raster - grass_raster3d) + grass_raster3d + grass_parson) From f25279d43467a8c4fa2c25800f41c52e740351b0 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 15 Feb 2025 21:04:08 -0700 Subject: [PATCH 199/253] Add grass_raster dependency for Rast_mask_is_present --- raster/r.sim/CMakeLists.txt | 2 ++ vector/CMakeLists.txt | 1 + 2 files changed, 3 insertions(+) diff --git a/raster/r.sim/CMakeLists.txt b/raster/r.sim/CMakeLists.txt index bad1bf8e9aa..2191d4c4bf6 100644 --- a/raster/r.sim/CMakeLists.txt +++ b/raster/r.sim/CMakeLists.txt @@ -22,6 +22,7 @@ build_program_in_subdir( grass_gis grass_gmath grass_sim + grass_raster GDAL OPTIONAL_DEPENDS OPENMP @@ -34,6 +35,7 @@ build_program_in_subdir( grass_gis grass_gmath grass_sim + grass_raster GDAL OPTIONAL_DEPENDS OPENMP diff --git a/vector/CMakeLists.txt b/vector/CMakeLists.txt index 096662c6d45..bb69e271c2f 100644 --- a/vector/CMakeLists.txt +++ b/vector/CMakeLists.txt @@ -728,6 +728,7 @@ build_program_in_subdir( grass_interpfl grass_qtree grass_vector + grass_raster GDAL ${LIBM} OPTIONAL_DEPENDS From d26b3c719ecb9739dafe53e3113f7174aa161a1f Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 15 Feb 2025 21:21:59 -0700 Subject: [PATCH 200/253] Add find scripts for BLAS and LAPACK to support pkg-config openblas on Windows --- cmake/find_scripts/FindBLAS.cmake | 1426 +++++++++++++++++++++++++++ cmake/find_scripts/FindLAPACK.cmake | 817 +++++++++++++++ 2 files changed, 2243 insertions(+) create mode 100644 cmake/find_scripts/FindBLAS.cmake create mode 100644 cmake/find_scripts/FindLAPACK.cmake diff --git a/cmake/find_scripts/FindBLAS.cmake b/cmake/find_scripts/FindBLAS.cmake new file mode 100644 index 00000000000..2dc12b19344 --- /dev/null +++ b/cmake/find_scripts/FindBLAS.cmake @@ -0,0 +1,1426 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +#[=======================================================================[.rst: +FindBLAS +-------- + +Find Basic Linear Algebra Subprograms (BLAS) library + +This module finds an installed Fortran library that implements the +`BLAS linear-algebra interface`_. + +At least one of the ``C``, ``CXX``, or ``Fortran`` languages must be enabled. + +.. _`BLAS linear-algebra interface`: https://netlib.org/blas/ + +Input Variables +^^^^^^^^^^^^^^^ + +The following variables may be set to influence this module's behavior: + +``BLA_STATIC`` + if ``ON`` use static linkage + +``BLA_VENDOR`` + Set to one of the :ref:`BLAS/LAPACK Vendors` to search for BLAS only + from the specified vendor. If not set, all vendors are considered. + +``BLA_F95`` + if ``ON`` tries to find the BLAS95 interfaces + +``BLA_PREFER_PKGCONFIG`` + .. versionadded:: 3.11 + + if set ``pkg-config`` will be used to search for a BLAS library first + and if one is found that is preferred + +``BLA_PKGCONFIG_BLAS`` + .. versionadded:: 3.25 + + If set, the ``pkg-config`` method will look for this module name instead of + just ``blas``. + +``BLA_SIZEOF_INTEGER`` + .. versionadded:: 3.22 + + Specify the BLAS/LAPACK library integer size: + + ``4`` + Search for a BLAS/LAPACK with 32-bit integer interfaces. + ``8`` + Search for a BLAS/LAPACK with 64-bit integer interfaces. + ``ANY`` + Search for any BLAS/LAPACK. + Most likely, a BLAS/LAPACK with 32-bit integer interfaces will be found. + +Imported targets +^^^^^^^^^^^^^^^^ + +This module defines the following :prop_tgt:`IMPORTED` targets: + +``BLAS::BLAS`` + .. versionadded:: 3.18 + + The libraries to use for BLAS, if found. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module defines the following variables: + +``BLAS_FOUND`` + library implementing the BLAS interface is found +``BLAS_LINKER_FLAGS`` + uncached list of required linker flags (excluding ``-l`` and ``-L``). +``BLAS_LIBRARIES`` + uncached list of libraries (using full path name) to link against + to use BLAS (may be empty if compiler implicitly links BLAS) +``BLAS95_LIBRARIES`` + uncached list of libraries (using full path name) to link against + to use BLAS95 interface +``BLAS95_FOUND`` + library implementing the BLAS95 interface is found + +.. _`BLAS/LAPACK Vendors`: + +BLAS/LAPACK Vendors +^^^^^^^^^^^^^^^^^^^ + +``Generic`` + Generic reference implementation + +``ACML``, ``ACML_MP``, ``ACML_GPU`` + AMD Core Math Library + +``AOCL``, ``AOCL_mt`` + .. versionadded:: 3.27 + + AMD Optimizing CPU Libraries + +``Apple``, ``NAS`` + Apple BLAS (Accelerate), and Apple NAS (vecLib) + +``Arm``, ``Arm_mp``, ``Arm_ilp64``, ``Arm_ilp64_mp`` + .. versionadded:: 3.18 + + Arm Performance Libraries + +``ATLAS`` + Automatically Tuned Linear Algebra Software + +``CXML``, ``DXML`` + Compaq/Digital Extended Math Library + +``EML``, ``EML_mt`` + .. versionadded:: 3.20 + + Elbrus Math Library + +``FLAME`` + .. versionadded:: 3.11 + + BLIS Framework + +``FlexiBLAS`` + .. versionadded:: 3.19 + +``Fujitsu_SSL2``, ``Fujitsu_SSL2BLAMP``, ``Fujitsu_SSL2SVE``, ``Fujitsu_SSL2BLAMPSVE`` + .. versionadded:: 3.20 + + Fujitsu SSL2 serial and parallel blas/lapack with SVE instructions + +``Goto`` + GotoBLAS + +``IBMESSL``, ``IBMESSL_SMP`` + + IBM Engineering and Scientific Subroutine Library + +``Intel`` + Intel MKL 32 bit and 64 bit obsolete versions + +``Intel10_32`` + Intel MKL v10 32 bit, threaded code + +``Intel10_64lp`` + Intel MKL v10+ 64 bit, threaded code, lp64 model + +``Intel10_64lp_seq`` + Intel MKL v10+ 64 bit, sequential code, lp64 model + +``Intel10_64ilp`` + .. versionadded:: 3.13 + + Intel MKL v10+ 64 bit, threaded code, ilp64 model + +``Intel10_64ilp_seq`` + .. versionadded:: 3.13 + + Intel MKL v10+ 64 bit, sequential code, ilp64 model + +``Intel10_64_dyn`` + .. versionadded:: 3.17 + + Intel MKL v10+ 64 bit, single dynamic library + +``libblastrampoline`` + .. versionadded:: 3.30 + + A BLAS/LAPACK demuxing library using PLT trampolines + +``NVHPC`` + .. versionadded:: 3.21 + + NVIDIA HPC SDK + +``OpenBLAS`` + .. versionadded:: 3.6 + +``PhiPACK`` + Portable High Performance ANSI C (PHiPAC) + +``SCSL``, ``SCSL_mp`` + Scientific Computing Software Library + +``SGIMATH`` + SGI Scientific Mathematical Library + +``SunPerf`` + Sun Performance Library + +.. _`Intel MKL`: + +Intel MKL +^^^^^^^^^ + +To use the Intel MKL implementation of BLAS, a project must enable at least +one of the ``C`` or ``CXX`` languages. Set ``BLA_VENDOR`` to an Intel MKL +variant either on the command-line as ``-DBLA_VENDOR=Intel10_64lp`` or in +project code: + +.. code-block:: cmake + + set(BLA_VENDOR Intel10_64lp) + find_package(BLAS) + +In order to build a project using Intel MKL, and end user must first +establish an Intel MKL environment: + +Intel oneAPI + Source the full Intel environment script: + + .. code-block:: shell + + . /opt/intel/oneapi/setvars.sh + + Or, source the MKL component environment script: + + .. code-block:: shell + + . /opt/intel/oneapi/mkl/latest/env/vars.sh + +Intel Classic + Source the full Intel environment script: + + .. code-block:: shell + + . /opt/intel/bin/compilervars.sh intel64 + + Or, source the MKL component environment script: + + .. code-block:: shell + + . /opt/intel/mkl/bin/mklvars.sh intel64 + +The above environment scripts set the ``MKLROOT`` environment variable +to the top of the MKL installation. They also add the location of the +runtime libraries to the dynamic library loader environment variable for +your platform (e.g. ``LD_LIBRARY_PATH``). This is necessary for programs +linked against MKL to run. + +.. note:: + + As of Intel oneAPI 2021.2, loading only the MKL component does not + make all of its dependencies available. In particular, the ``iomp5`` + library must be available separately, or provided by also loading + the compiler component environment: + + .. code-block:: shell + + . /opt/intel/oneapi/compiler/latest/env/vars.sh + +#]=======================================================================] + +# The approach follows that of the ``autoconf`` macro file, ``acx_blas.m4`` +# (distributed at http://ac-archive.sourceforge.net/ac-archive/acx_blas.html). + +# Check the language being used +if(NOT (CMAKE_C_COMPILER_LOADED OR CMAKE_CXX_COMPILER_LOADED OR CMAKE_Fortran_COMPILER_LOADED)) + if(BLAS_FIND_REQUIRED) + message(FATAL_ERROR "FindBLAS requires Fortran, C, or C++ to be enabled.") + else() + message(STATUS "Looking for BLAS... - NOT found (Unsupported languages)") + return() + endif() +endif() + +function(_add_blas_target) + if(BLAS_FOUND AND NOT TARGET BLAS::BLAS) + add_library(BLAS::BLAS INTERFACE IMPORTED) + if(BLAS_LIBRARIES) + set_target_properties(BLAS::BLAS PROPERTIES + INTERFACE_LINK_LIBRARIES "${BLAS_LIBRARIES}" + ) + endif() + if(BLAS_LINKER_FLAGS) + set_target_properties(BLAS::BLAS PROPERTIES + INTERFACE_LINK_OPTIONS "${BLAS_LINKER_FLAGS}" + ) + endif() + endif() +endfunction() + +if(CMAKE_Fortran_COMPILER_LOADED) + include(CheckFortranFunctionExists) +else() + include(CheckFunctionExists) +endif() +include(FindPackageHandleStandardArgs) + +if(BLA_PREFER_PKGCONFIG) + if(NOT BLA_PKGCONFIG_BLAS) + set(BLA_PKGCONFIG_BLAS "blas") + endif() + find_package(PkgConfig QUIET) + if(PKG_CONFIG_FOUND) + pkg_check_modules(PKGC_BLAS QUIET ${BLA_PKGCONFIG_BLAS}) + if(PKGC_BLAS_FOUND) + set(BLAS_FOUND ${PKGC_BLAS_FOUND}) + set(BLAS_LIBRARIES "${PKGC_BLAS_LINK_LIBRARIES}") + set(BLAS_INCLUDE_DIRS "${PKGC_BLAS_INCLUDE_DIRS}") + _add_blas_target() + return() + endif() + endif() +endif() + +# TODO: move this stuff to a separate module + +function(CHECK_BLAS_LIBRARIES LIBRARIES _prefix _name _flags _list _deps _addlibdir _subdirs) + # This function checks for the existence of the combination of libraries + # given by _list. If the combination is found, this checks whether can link + # against that library combination using the name of a routine given by _name + # using the linker flags given by _flags. If the combination of libraries is + # found and passes the link test, ${LIBRARIES} is set to the list of complete + # library paths that have been found. Otherwise, ${LIBRARIES} is set to FALSE. + + set(_libraries_work TRUE) + set(_libraries) + set(_combined_name) + + if(BLA_STATIC) + if(WIN32) + set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES}) + else() + set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) + endif() + else() + if(CMAKE_SYSTEM_NAME STREQUAL "Linux") + # for ubuntu's libblas3gf and liblapack3gf packages + set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES} .so.3gf) + endif() + endif() + + set(_extaddlibdir "${_addlibdir}") + if(WIN32) + list(APPEND _extaddlibdir ENV LIB) + elseif(APPLE) + list(APPEND _extaddlibdir ENV DYLD_LIBRARY_PATH) + else() + list(APPEND _extaddlibdir ENV LD_LIBRARY_PATH) + endif() + list(APPEND _extaddlibdir "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}") + + foreach(_library ${_list}) + if(_library MATCHES "^-") + # Respect linker flags as-is (required by MKL) + list(APPEND _libraries "${_library}") + else() + string(REGEX REPLACE "[^A-Za-z0-9]" "_" _lib_var "${_library}") + string(APPEND _combined_name "_${_lib_var}") + if(NOT "${_deps}" STREQUAL "") + string(APPEND _combined_name "_deps") + endif() + if(_libraries_work) + find_library(${_prefix}_${_lib_var}_LIBRARY + NAMES ${_library} + NAMES_PER_DIR + PATHS ${_extaddlibdir} + PATH_SUFFIXES ${_subdirs} + ) + mark_as_advanced(${_prefix}_${_lib_var}_LIBRARY) + list(APPEND _libraries ${${_prefix}_${_lib_var}_LIBRARY}) + set(_libraries_work ${${_prefix}_${_lib_var}_LIBRARY}) + endif() + endif() + endforeach() + + foreach(_flag ${_flags}) + string(REGEX REPLACE "[^A-Za-z0-9]" "_" _flag_var "${_flag}") + string(APPEND _combined_name "_${_flag_var}") + endforeach() + if(_libraries_work) + # Test this combination of libraries. + set(CMAKE_REQUIRED_LIBRARIES ${_flags} ${_libraries} ${_deps}) + set(CMAKE_REQUIRED_QUIET ${BLAS_FIND_QUIETLY}) + if(CMAKE_Fortran_COMPILER_LOADED) + check_fortran_function_exists("${_name}" ${_prefix}${_combined_name}_WORKS) + else() + check_function_exists("${_name}_" ${_prefix}${_combined_name}_WORKS) + endif() + set(CMAKE_REQUIRED_LIBRARIES) + set(_libraries_work ${${_prefix}${_combined_name}_WORKS}) + endif() + + if(_libraries_work) + if("${_list}" STREQUAL "") + set(_libraries "${LIBRARIES}-PLACEHOLDER-FOR-EMPTY-LIBRARIES") + else() + list(APPEND _libraries ${_deps}) + endif() + else() + set(_libraries FALSE) + endif() + set(${LIBRARIES} "${_libraries}" PARENT_SCOPE) +endfunction() + +set(BLAS_LINKER_FLAGS) +set(BLAS_LIBRARIES) +set(BLAS95_LIBRARIES) +set(_blas_fphsa_req_var BLAS_LIBRARIES) +if(NOT BLA_VENDOR) + if(NOT "$ENV{BLA_VENDOR}" STREQUAL "") + set(BLA_VENDOR "$ENV{BLA_VENDOR}") + else() + set(BLA_VENDOR "All") + endif() +endif() + +if(NOT BLA_SIZEOF_INTEGER) + # in the reality we do not know which API of BLAS/LAPACK is masked in library + set(_blas_sizeof_integer "ANY") +elseif((BLA_SIZEOF_INTEGER STREQUAL "ANY") OR + (BLA_SIZEOF_INTEGER STREQUAL "4") OR + (BLA_SIZEOF_INTEGER STREQUAL "8")) + set(_blas_sizeof_integer ${BLA_SIZEOF_INTEGER}) +else() + message(FATAL_ERROR "BLA_SIZEOF_INTEGER can have only , ANY, 4, or 8 values") +endif() + +# Implicitly linked BLAS libraries? +if(BLA_VENDOR STREQUAL "All") + if(NOT BLAS_LIBRARIES) + check_blas_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "" + "" + "" + "" + ) + endif() + if(BLAS_WORKS) + # Give a more helpful "found" message + set(BLAS_WORKS "implicitly linked") + set(_blas_fphsa_req_var BLAS_WORKS) + endif() +endif() + +# BLAS in the Intel MKL 10+ library? +if(BLA_VENDOR MATCHES "Intel" OR BLA_VENDOR STREQUAL "All") + if(NOT BLAS_LIBRARIES) + if(CMAKE_C_COMPILER_LOADED OR CMAKE_CXX_COMPILER_LOADED) + # System-specific settings + if(WIN32) + if(BLA_STATIC) + set(BLAS_mkl_DLL_SUFFIX "") + else() + set(BLAS_mkl_DLL_SUFFIX "_dll") + endif() + else() + if(BLA_STATIC) + set(BLAS_mkl_START_GROUP "-Wl,--start-group") + set(BLAS_mkl_END_GROUP "-Wl,--end-group") + else() + set(BLAS_mkl_START_GROUP "") + set(BLAS_mkl_END_GROUP "") + endif() + # Switch to GNU Fortran support layer if needed (but not on Apple, where MKL does not provide it) + if(CMAKE_Fortran_COMPILER_LOADED AND (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" OR CMAKE_Fortran_COMPILER_ID STREQUAL "LCC") AND NOT APPLE) + set(BLAS_mkl_INTFACE "gf") + set(BLAS_mkl_THREADING "gnu") + set(BLAS_mkl_OMP "gomp") + else() + set(BLAS_mkl_INTFACE "intel") + set(BLAS_mkl_THREADING "intel") + set(BLAS_mkl_OMP "iomp5") + endif() + set(BLAS_mkl_LM "-lm") + set(BLAS_mkl_LDL "-ldl") + endif() + + if(BLAS_FIND_QUIETLY OR NOT BLAS_FIND_REQUIRED) + find_package(Threads) + else() + find_package(Threads REQUIRED) + endif() + + if(_blas_sizeof_integer EQUAL 8) + set(BLAS_mkl_ILP_MODE "ilp64") + elseif(_blas_sizeof_integer EQUAL 4) + set(BLAS_mkl_ILP_MODE "lp64") + else() + if(BLA_VENDOR MATCHES "_64ilp") + set(BLAS_mkl_ILP_MODE "ilp64") + else() + set(BLAS_mkl_ILP_MODE "lp64") + endif() + endif() + + set(BLAS_SEARCH_LIBS "") + + if(BLA_F95) + set(BLAS_mkl_SEARCH_SYMBOL "sgemm_f95") + set(_BLAS_LIBRARIES BLAS95_LIBRARIES) + if(WIN32) + # Find the main file (32-bit or 64-bit) + set(BLAS_SEARCH_LIBS_WIN_MAIN "") + if(BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All") + list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN + "mkl_blas95${BLAS_mkl_DLL_SUFFIX} mkl_intel_c${BLAS_mkl_DLL_SUFFIX}") + endif() + + if(BLA_VENDOR MATCHES "^Intel10_64i?lp" OR BLA_VENDOR STREQUAL "All") + list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN + "mkl_blas95_${BLAS_mkl_ILP_MODE}${BLAS_mkl_DLL_SUFFIX} mkl_intel_${BLAS_mkl_ILP_MODE}${BLAS_mkl_DLL_SUFFIX}") + endif() + + # Add threading/sequential libs + set(BLAS_SEARCH_LIBS_WIN_THREAD "") + if(BLA_VENDOR MATCHES "^Intel10_64i?lp$" OR BLA_VENDOR STREQUAL "All") + # old version + list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD + "libguide40 mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}") + # mkl >= 10.3 + list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD + "libiomp5md mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}") + endif() + if(BLA_VENDOR MATCHES "^Intel10_64i?lp_seq$" OR BLA_VENDOR STREQUAL "All") + list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD + "mkl_sequential${BLAS_mkl_DLL_SUFFIX}") + endif() + + # Cartesian product of the above + foreach(MAIN ${BLAS_SEARCH_LIBS_WIN_MAIN}) + foreach(THREAD ${BLAS_SEARCH_LIBS_WIN_THREAD}) + list(APPEND BLAS_SEARCH_LIBS + "${MAIN} ${THREAD} mkl_core${BLAS_mkl_DLL_SUFFIX}") + endforeach() + endforeach() + else() + if(BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All") + # old version + list(APPEND BLAS_SEARCH_LIBS + "mkl_blas95 mkl_${BLAS_mkl_INTFACE} mkl_${BLAS_mkl_THREADING}_thread mkl_core guide") + + # mkl >= 10.3 + list(APPEND BLAS_SEARCH_LIBS + "${BLAS_mkl_START_GROUP} mkl_blas95 mkl_${BLAS_mkl_INTFACE} mkl_${BLAS_mkl_THREADING}_thread mkl_core ${BLAS_mkl_END_GROUP} ${BLAS_mkl_OMP}") + endif() + if(BLA_VENDOR MATCHES "^Intel10_64i?lp$" OR BLA_VENDOR STREQUAL "All") + # old version + list(APPEND BLAS_SEARCH_LIBS + "mkl_blas95 mkl_${BLAS_mkl_INTFACE}_${BLAS_mkl_ILP_MODE} mkl_${BLAS_mkl_THREADING}_thread mkl_core guide") + + # mkl >= 10.3 + list(APPEND BLAS_SEARCH_LIBS + "${BLAS_mkl_START_GROUP} mkl_blas95_${BLAS_mkl_ILP_MODE} mkl_${BLAS_mkl_INTFACE}_${BLAS_mkl_ILP_MODE} mkl_${BLAS_mkl_THREADING}_thread mkl_core ${BLAS_mkl_END_GROUP} ${BLAS_mkl_OMP}") + endif() + if(BLA_VENDOR MATCHES "^Intel10_64i?lp_seq$" OR BLA_VENDOR STREQUAL "All") + list(APPEND BLAS_SEARCH_LIBS + "${BLAS_mkl_START_GROUP} mkl_blas95_${BLAS_mkl_ILP_MODE} mkl_${BLAS_mkl_INTFACE}_${BLAS_mkl_ILP_MODE} mkl_sequential mkl_core ${BLAS_mkl_END_GROUP}") + endif() + endif() + else() + set(BLAS_mkl_SEARCH_SYMBOL sgemm) + set(_BLAS_LIBRARIES BLAS_LIBRARIES) + if(WIN32) + # Find the main file (32-bit or 64-bit) + set(BLAS_SEARCH_LIBS_WIN_MAIN "") + if(BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All") + list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN + "mkl_intel_c${BLAS_mkl_DLL_SUFFIX}") + endif() + if(BLA_VENDOR MATCHES "^Intel10_64i?lp" OR BLA_VENDOR STREQUAL "All") + list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN + "mkl_intel_${BLAS_mkl_ILP_MODE}${BLAS_mkl_DLL_SUFFIX}") + endif() + + # Add threading/sequential libs + set(BLAS_SEARCH_LIBS_WIN_THREAD "") + if(BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All") + list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD + "libiomp5md mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}") + endif() + if(BLA_VENDOR MATCHES "^Intel10_64i?lp$" OR BLA_VENDOR STREQUAL "All") + # old version + list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD + "libguide40 mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}") + # mkl >= 10.3 + list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD + "libiomp5md mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}") + endif() + if(BLA_VENDOR MATCHES "^Intel10_64i?lp_seq$" OR BLA_VENDOR STREQUAL "All") + list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD + "mkl_sequential${BLAS_mkl_DLL_SUFFIX}") + endif() + + # Cartesian product of the above + foreach(MAIN ${BLAS_SEARCH_LIBS_WIN_MAIN}) + foreach(THREAD ${BLAS_SEARCH_LIBS_WIN_THREAD}) + list(APPEND BLAS_SEARCH_LIBS + "${MAIN} ${THREAD} mkl_core${BLAS_mkl_DLL_SUFFIX}") + endforeach() + endforeach() + else() + if(BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All") + # old version + list(APPEND BLAS_SEARCH_LIBS + "mkl_${BLAS_mkl_INTFACE} mkl_${BLAS_mkl_THREADING}_thread mkl_core guide") + + # mkl >= 10.3 + list(APPEND BLAS_SEARCH_LIBS + "${BLAS_mkl_START_GROUP} mkl_${BLAS_mkl_INTFACE} mkl_${BLAS_mkl_THREADING}_thread mkl_core ${BLAS_mkl_END_GROUP} ${BLAS_mkl_OMP}") + endif() + if(BLA_VENDOR MATCHES "^Intel10_64i?lp$" OR BLA_VENDOR STREQUAL "All") + # old version + list(APPEND BLAS_SEARCH_LIBS + "mkl_${BLAS_mkl_INTFACE}_${BLAS_mkl_ILP_MODE} mkl_${BLAS_mkl_THREADING}_thread mkl_core guide") + + # mkl >= 10.3 + list(APPEND BLAS_SEARCH_LIBS + "${BLAS_mkl_START_GROUP} mkl_${BLAS_mkl_INTFACE}_${BLAS_mkl_ILP_MODE} mkl_${BLAS_mkl_THREADING}_thread mkl_core ${BLAS_mkl_END_GROUP} ${BLAS_mkl_OMP}") + endif() + if(BLA_VENDOR MATCHES "^Intel10_64i?lp_seq$" OR BLA_VENDOR STREQUAL "All") + list(APPEND BLAS_SEARCH_LIBS + "${BLAS_mkl_START_GROUP} mkl_${BLAS_mkl_INTFACE}_${BLAS_mkl_ILP_MODE} mkl_sequential mkl_core ${BLAS_mkl_END_GROUP}") + endif() + + #older versions of intel mkl libs + if(BLA_VENDOR STREQUAL "Intel" OR BLA_VENDOR STREQUAL "All") + list(APPEND BLAS_SEARCH_LIBS + "mkl") + list(APPEND BLAS_SEARCH_LIBS + "mkl_ia32") + list(APPEND BLAS_SEARCH_LIBS + "mkl_em64t") + endif() + endif() + endif() + + if(BLA_VENDOR MATCHES "^Intel10_64_dyn$" OR BLA_VENDOR STREQUAL "All") + # mkl >= 10.3 with single dynamic library + list(APPEND BLAS_SEARCH_LIBS + "mkl_rt") + endif() + + # MKL uses a multitude of partially platform-specific subdirectories: + if(BLA_VENDOR STREQUAL "Intel10_32") + set(BLAS_mkl_ARCH_NAME "ia32") + else() + set(BLAS_mkl_ARCH_NAME "intel64") + endif() + if(WIN32) + set(BLAS_mkl_OS_NAME "win") + elseif(APPLE) + set(BLAS_mkl_OS_NAME "mac") + else() + set(BLAS_mkl_OS_NAME "lin") + endif() + if(DEFINED ENV{MKLROOT}) + file(TO_CMAKE_PATH "$ENV{MKLROOT}" BLAS_mkl_MKLROOT) + # If MKLROOT points to the subdirectory 'mkl', use the parent directory instead + # so we can better detect other relevant libraries in 'compiler' or 'tbb': + get_filename_component(BLAS_mkl_MKLROOT_LAST_DIR "${BLAS_mkl_MKLROOT}" NAME) + if(BLAS_mkl_MKLROOT_LAST_DIR STREQUAL "mkl") + get_filename_component(BLAS_mkl_MKLROOT "${BLAS_mkl_MKLROOT}" DIRECTORY) + endif() + endif() + set(BLAS_mkl_LIB_PATH_SUFFIXES + "compiler/lib" "compiler/lib/${BLAS_mkl_ARCH_NAME}_${BLAS_mkl_OS_NAME}" + "compiler/lib/${BLAS_mkl_ARCH_NAME}" + "mkl/lib" "mkl/lib/${BLAS_mkl_ARCH_NAME}_${BLAS_mkl_OS_NAME}" + "mkl/lib/${BLAS_mkl_ARCH_NAME}" + "lib" "lib/${BLAS_mkl_ARCH_NAME}_${BLAS_mkl_OS_NAME}" + "lib/${BLAS_mkl_ARCH_NAME}" + ) + + foreach(_search ${BLAS_SEARCH_LIBS}) + string(REPLACE " " ";" _search ${_search}) + if(NOT ${_BLAS_LIBRARIES}) + check_blas_libraries( + ${_BLAS_LIBRARIES} + BLAS + ${BLAS_mkl_SEARCH_SYMBOL} + "" + "${_search}" + "${CMAKE_THREAD_LIBS_INIT};${BLAS_mkl_LM};${BLAS_mkl_LDL}" + "${BLAS_mkl_MKLROOT}" + "${BLAS_mkl_LIB_PATH_SUFFIXES}" + ) + endif() + endforeach() + + unset(_search) + unset(BLAS_mkl_ILP_MODE) + unset(BLAS_mkl_INTFACE) + unset(BLAS_mkl_THREADING) + unset(BLAS_mkl_OMP) + unset(BLAS_mkl_DLL_SUFFIX) + unset(BLAS_mkl_LM) + unset(BLAS_mkl_LDL) + unset(BLAS_mkl_MKLROOT) + unset(BLAS_mkl_MKLROOT_LAST_DIR) + unset(BLAS_mkl_ARCH_NAME) + unset(BLAS_mkl_OS_NAME) + unset(BLAS_mkl_LIB_PATH_SUFFIXES) + endif() + endif() +endif() + +if(BLA_F95) + find_package_handle_standard_args(BLAS REQUIRED_VARS BLAS95_LIBRARIES) + set(BLAS95_FOUND ${BLAS_FOUND}) + if(BLAS_FOUND) + set(BLAS_LIBRARIES "${BLAS95_LIBRARIES}") + endif() +endif() + +# gotoblas? (http://www.tacc.utexas.edu/tacc-projects/gotoblas2) +if(BLA_VENDOR STREQUAL "Goto" OR BLA_VENDOR STREQUAL "All") + if(NOT BLAS_LIBRARIES) + check_blas_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "goto2" + "" + "" + "" + ) + endif() +endif() + +# FlexiBLAS? (http://www.mpi-magdeburg.mpg.de/mpcsc/software/FlexiBLAS/) +if(BLA_VENDOR STREQUAL "FlexiBLAS" OR BLA_VENDOR STREQUAL "All") + set(_blas_flexiblas_lib "flexiblas") + + if(_blas_sizeof_integer EQUAL 8) + string(APPEND _blas_flexiblas_lib "64") + endif() + + if(NOT BLAS_LIBRARIES) + check_blas_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "${_blas_flexiblas_lib}" + "" + "" + "" + ) + endif() + + unset(_blas_flexiblas_lib) +endif() + +# OpenBLAS? (http://www.openblas.net) +if(BLA_VENDOR STREQUAL "OpenBLAS" OR BLA_VENDOR STREQUAL "All") + set(_blas_openblas_lib "openblas") + + if(_blas_sizeof_integer EQUAL 8) + if(MINGW) + string(APPEND _blas_openblas_lib "_64") + else() + string(APPEND _blas_openblas_lib "64") + endif() + endif() + + if(NOT BLAS_LIBRARIES) + check_blas_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "${_blas_openblas_lib}" + "" + "" + "" + ) + endif() + if(NOT BLAS_LIBRARIES AND (CMAKE_C_COMPILER_LOADED OR CMAKE_CXX_COMPILER_LOADED)) + if(BLAS_FIND_QUIETLY OR NOT BLAS_FIND_REQUIRED) + find_package(Threads) + else() + find_package(Threads REQUIRED) + endif() + set(_threadlibs "${CMAKE_THREAD_LIBS_INIT}") + if(BLA_STATIC) + if (CMAKE_C_COMPILER_LOADED) + find_package(OpenMP QUIET COMPONENTS C) + list(PREPEND _threadlibs "${OpenMP_C_LIBRARIES}") + elseif(CMAKE_CXX_COMPILER_LOADED) + find_package(OpenMP QUIET COMPONENTS CXX) + list(PREPEND _threadlibs "${OpenMP_CXX_LIBRARIES}") + endif() + endif() + check_blas_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "${_blas_openblas_lib}" + "${_threadlibs}" + "" + "" + ) + unset(_threadlibs) + endif() + + unset(_blas_openblas_lib) +endif() + +# ArmPL blas library? (https://developer.arm.com/tools-and-software/server-and-hpc/compile/arm-compiler-for-linux/arm-performance-libraries) +if(BLA_VENDOR MATCHES "Arm" OR BLA_VENDOR STREQUAL "All") + + # Check for 64bit Integer support + if(_blas_sizeof_integer EQUAL 8) + set(_blas_armpl_lib "armpl_ilp64") + elseif(_blas_sizeof_integer EQUAL 4) + set(_blas_armpl_lib "armpl_lp64") + else() + if(BLA_VENDOR MATCHES "_ilp64") + set(_blas_armpl_lib "armpl_ilp64") + else() + set(_blas_armpl_lib "armpl_lp64") + endif() + endif() + + # Check for OpenMP support, VIA BLA_VENDOR of Arm_mp or Arm_ipl64_mp + if(BLA_VENDOR MATCHES "_mp") + string(APPEND _blas_armpl_lib "_mp") + endif() + + if(NOT BLAS_LIBRARIES) + check_blas_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "${_blas_armpl_lib}" + "" + "" + "" + ) + endif() + unset(_blas_armpl_lib) +endif() + +# FLAME's blis library? (https://github.com/flame/blis) +if(BLA_VENDOR STREQUAL "FLAME" OR BLA_VENDOR STREQUAL "All") + set(_blas_flame_lib "blis") + + if(_blas_sizeof_integer EQUAL 8) + string(APPEND _blas_flame_lib "64") + endif() + + if(NOT BLAS_LIBRARIES) + check_blas_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "${_blas_flame_lib}" + "" + "" + "" + ) + endif() + + unset(_blas_flame_lib) +endif() + +# AOCL's blis library? (https://developer.amd.com/amd-aocl/) +if(BLA_VENDOR MATCHES "AOCL" OR BLA_VENDOR STREQUAL "All") + set(_blas_aocl_lib "blis") + + if(_blas_sizeof_integer EQUAL 8) + set(_blas_aocl_subdir "ILP64") + else() + set(_blas_aocl_subdir "LP64") + endif() + + # Check for multi-threaded support + if(BLA_VENDOR MATCHES "_mt") + string(APPEND _blas_aocl_lib "-mt") + endif() + + if(NOT BLAS_LIBRARIES) + check_blas_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "${_blas_aocl_lib}" + "" + "" + "${_blas_aocl_subdir}" + ) + endif() + + unset(_blas_aocl_lib) + unset(_blas_aocl_subdir) +endif() + +# BLAS in the ATLAS library? (http://math-atlas.sourceforge.net/) +if(BLA_VENDOR STREQUAL "ATLAS" OR BLA_VENDOR STREQUAL "All") + if(NOT BLAS_LIBRARIES) + check_blas_libraries( + BLAS_LIBRARIES + BLAS + dgemm + "" + "blas;f77blas;atlas" + "" + "" + "" + ) + endif() +endif() + +# BLAS in PhiPACK libraries? (requires generic BLAS lib, too) +if(BLA_VENDOR STREQUAL "PhiPACK" OR BLA_VENDOR STREQUAL "All") + if(NOT BLAS_LIBRARIES) + check_blas_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "sgemm;dgemm;blas" + "" + "" + "" + ) + endif() +endif() + +# BLAS in Alpha CXML library? +if(BLA_VENDOR STREQUAL "CXML" OR BLA_VENDOR STREQUAL "All") + if(_blas_sizeof_integer EQUAL 8) + if(BLA_VENDOR STREQUAL "CXML") + message(FATAL_ERROR "CXML does not support Int64 type") + endif() + else() + if(NOT BLAS_LIBRARIES) + check_blas_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "cxml" + "" + "" + "" + ) + endif() + endif() +endif() + +# BLAS in Alpha DXML library? (now called CXML, see above) +if(BLA_VENDOR STREQUAL "DXML" OR BLA_VENDOR STREQUAL "All") + if(_blas_sizeof_integer EQUAL 8) + if(BLA_VENDOR STREQUAL "DXML") + message(FATAL_ERROR "DXML does not support Int64 type") + endif() + else() + if(NOT BLAS_LIBRARIES) + check_blas_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "dxml" + "" + "" + "" + ) + endif() + endif() +endif() + +# BLAS in Sun Performance library? +if(BLA_VENDOR STREQUAL "SunPerf" OR BLA_VENDOR STREQUAL "All") + if(NOT BLAS_LIBRARIES) + check_blas_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "-xlic_lib=sunperf" + "sunperf;sunmath" + "" + "" + "" + ) + if(BLAS_LIBRARIES) + set(BLAS_LINKER_FLAGS "-xlic_lib=sunperf") + endif() + endif() +endif() + +# BLAS in SCSL library? (SGI/Cray Scientific Library) +if(BLA_VENDOR MATCHES "SCSL" OR BLA_VENDOR STREQUAL "All") + set(_blas_scsl_lib "scs") + + if(_blas_sizeof_integer EQUAL 8) + string(APPEND _blas_scsl_lib "_i8") + endif() + if(BLA_VENDOR MATCHES "_mp") + string(APPEND _blas_scsl_lib "_mp") + endif() + + if(NOT BLAS_LIBRARIES) + check_blas_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "${_blas_scsl_lib}" + "" + "" + "" + ) + endif() + + unset(_blas_scsl_lib) +endif() + +# BLAS in SGIMATH library? +if(BLA_VENDOR STREQUAL "SGIMATH" OR BLA_VENDOR STREQUAL "All") + if(NOT BLAS_LIBRARIES) + check_blas_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "complib.sgimath" + "" + "" + "" + ) + endif() +endif() + +# BLAS in IBM ESSL library? +if(BLA_VENDOR MATCHES "IBMESSL" OR BLA_VENDOR STREQUAL "All") + set(_blas_essl_lib "essl") + + if(BLA_VENDOR MATCHES "_SMP") + string(APPEND _blas_essl_lib "smp") + endif() + if(_blas_sizeof_integer EQUAL 8) + string(APPEND _blas_essl_lib "6464") + endif() + + if(NOT BLAS_LIBRARIES) + check_blas_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "${_blas_essl_lib}" + "" + "" + "" + ) + endif() + + unset(_blas_essl_lib) +endif() + +# BLAS in acml library? +if(BLA_VENDOR MATCHES "ACML" OR BLA_VENDOR STREQUAL "All") + if(((BLA_VENDOR STREQUAL "ACML") AND (NOT BLAS_ACML_LIB_DIRS)) OR + ((BLA_VENDOR STREQUAL "ACML_MP") AND (NOT BLAS_ACML_MP_LIB_DIRS)) OR + ((BLA_VENDOR STREQUAL "ACML_GPU") AND (NOT BLAS_ACML_GPU_LIB_DIRS)) + ) + # try to find acml in "standard" paths + if(WIN32) + file(GLOB _ACML_ROOT "C:/AMD/acml*/ACML-EULA.txt") + else() + file(GLOB _ACML_ROOT "/opt/acml*/ACML-EULA.txt") + endif() + if(WIN32) + file(GLOB _ACML_GPU_ROOT "C:/AMD/acml*/GPGPUexamples") + else() + file(GLOB _ACML_GPU_ROOT "/opt/acml*/GPGPUexamples") + endif() + list(GET _ACML_ROOT 0 _ACML_ROOT) + list(GET _ACML_GPU_ROOT 0 _ACML_GPU_ROOT) + if(_ACML_ROOT) + get_filename_component(_ACML_ROOT ${_ACML_ROOT} PATH) + if(_blas_sizeof_integer EQUAL 8) + set(_ACML_PATH_SUFFIX "_int64") + else() + set(_ACML_PATH_SUFFIX "") + endif() + if(CMAKE_Fortran_COMPILER_ID STREQUAL "Intel") + set(_ACML_COMPILER32 "ifort32") + set(_ACML_COMPILER64 "ifort64") + elseif(CMAKE_Fortran_COMPILER_ID STREQUAL "IntelLLVM") + # 32-bit not supported + set(_ACML_COMPILER64 "ifx") + elseif(CMAKE_Fortran_COMPILER_ID STREQUAL "SunPro") + set(_ACML_COMPILER32 "sun32") + set(_ACML_COMPILER64 "sun64") + elseif(CMAKE_Fortran_COMPILER_ID STREQUAL "PGI") + set(_ACML_COMPILER32 "pgi32") + if(WIN32) + set(_ACML_COMPILER64 "win64") + else() + set(_ACML_COMPILER64 "pgi64") + endif() + elseif(CMAKE_Fortran_COMPILER_ID STREQUAL "Open64") + # 32 bit builds not supported on Open64 but for code simplicity + # We'll just use the same directory twice + set(_ACML_COMPILER32 "open64_64") + set(_ACML_COMPILER64 "open64_64") + elseif(CMAKE_Fortran_COMPILER_ID STREQUAL "NAG") + set(_ACML_COMPILER32 "nag32") + set(_ACML_COMPILER64 "nag64") + else() + set(_ACML_COMPILER32 "gfortran32") + set(_ACML_COMPILER64 "gfortran64") + endif() + + if(BLA_VENDOR STREQUAL "ACML_MP") + set(_ACML_MP_LIB_DIRS + "${_ACML_ROOT}/${_ACML_COMPILER32}_mp${_ACML_PATH_SUFFIX}/lib" + "${_ACML_ROOT}/${_ACML_COMPILER64}_mp${_ACML_PATH_SUFFIX}/lib") + else() + set(_ACML_LIB_DIRS + "${_ACML_ROOT}/${_ACML_COMPILER32}${_ACML_PATH_SUFFIX}/lib" + "${_ACML_ROOT}/${_ACML_COMPILER64}${_ACML_PATH_SUFFIX}/lib") + endif() + endif() +elseif(BLAS_${BLA_VENDOR}_LIB_DIRS) + set(_${BLA_VENDOR}_LIB_DIRS ${BLAS_${BLA_VENDOR}_LIB_DIRS}) +endif() + +if(BLA_VENDOR STREQUAL "ACML_MP") + foreach(BLAS_ACML_MP_LIB_DIRS ${_ACML_MP_LIB_DIRS}) + check_blas_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" "acml_mp;acml_mv" "" ${BLAS_ACML_MP_LIB_DIRS} "" + ) + if(BLAS_LIBRARIES) + break() + endif() + endforeach() +elseif(BLA_VENDOR STREQUAL "ACML_GPU") + foreach(BLAS_ACML_GPU_LIB_DIRS ${_ACML_GPU_LIB_DIRS}) + check_blas_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" "acml;acml_mv;CALBLAS" "" ${BLAS_ACML_GPU_LIB_DIRS} "" + ) + if(BLAS_LIBRARIES) + break() + endif() + endforeach() +else() + foreach(BLAS_ACML_LIB_DIRS ${_ACML_LIB_DIRS}) + check_blas_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" "acml;acml_mv" "" ${BLAS_ACML_LIB_DIRS} "" + ) + if(BLAS_LIBRARIES) + break() + endif() + endforeach() +endif() + +# Either acml or acml_mp should be in LD_LIBRARY_PATH but not both +if(NOT BLAS_LIBRARIES) + check_blas_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "acml;acml_mv" + "" + "" + "" + ) +endif() +if(NOT BLAS_LIBRARIES) + check_blas_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "acml_mp;acml_mv" + "" + "" + "" + ) +endif() +if(NOT BLAS_LIBRARIES) + check_blas_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "acml;acml_mv;CALBLAS" + "" + "" + "" + ) +endif() +endif() # ACML + +# Apple BLAS library? +if(BLA_VENDOR STREQUAL "Apple" OR BLA_VENDOR STREQUAL "All") + if(_blas_sizeof_integer EQUAL 8) + if(BLA_VENDOR STREQUAL "Apple") + message(FATAL_ERROR "Accelerate Framework does not support Int64 type") + endif() + else() + if(NOT BLAS_LIBRARIES) + check_blas_libraries( + BLAS_LIBRARIES + BLAS + dgemm + "" + "Accelerate" + "" + "" + "" + ) + endif() + endif() +endif() + +# Apple NAS (vecLib) library? +if(BLA_VENDOR STREQUAL "NAS" OR BLA_VENDOR STREQUAL "All") + if(_blas_sizeof_integer EQUAL 8) + if(BLA_VENDOR STREQUAL "NAS") + message(FATAL_ERROR "Accelerate Framework does not support Int64 type") + endif() + else() + if(NOT BLAS_LIBRARIES) + check_blas_libraries( + BLAS_LIBRARIES + BLAS + dgemm + "" + "vecLib" + "" + "" + "" + ) + endif() + endif() +endif() + +# Elbrus Math Library? +if(BLA_VENDOR MATCHES "EML" OR BLA_VENDOR STREQUAL "All") + + set(_blas_eml_lib "eml") + + if(_blas_sizeof_integer EQUAL 8) + string(APPEND _blas_eml_lib "_ilp64") + endif() + # Check for OpenMP support, VIA BLA_VENDOR of eml_mt + if(BLA_VENDOR MATCHES "_mt") + string(APPEND _blas_eml_lib "_mt") + endif() + + if(NOT BLAS_LIBRARIES) + check_blas_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "${_blas_eml_lib}" + "" + "" + "" + ) + endif() + unset(_blas_eml_lib) +endif() + +# Fujitsu SSL2 Library? +if(NOT BLAS_LIBRARIES + AND (BLA_VENDOR MATCHES "^Fujitsu_SSL2" OR BLA_VENDOR STREQUAL "All")) + set(_blas_fjlapack_lib "fjlapack") + set(_blas_fjlapack_flags "-Kopenmp") + + if(BLA_VENDOR MATCHES "BLAMP") + string(APPEND _blas_fjlapack_lib "ex") + endif() + if(BLA_VENDOR MATCHES "SVE") + string(APPEND _blas_fjlapack_lib "sve") + endif() + if(_blas_sizeof_integer EQUAL 8) + string(APPEND _blas_fjlapack_lib "_ilp64") + endif() + + if(NOT BLAS_LIBRARIES) + check_blas_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "${_blas_fjlapack_flags}" + "${_blas_fjlapack_lib}" + "" + "" + "" + ) + if(BLAS_LIBRARIES) + set(BLAS_LINKER_FLAGS ${_blas_fjlapack_flags}) + endif() + endif() + + unset(_blas_fjlapack_flags) + unset(_blas_fjlapack_lib) +endif() + +# BLAS in nVidia HPC SDK? (https://developer.nvidia.com/hpc-sdk) +if(BLA_VENDOR STREQUAL "NVHPC" OR BLA_VENDOR STREQUAL "All") + set(_blas_nvhpc_lib "blas") + + if(_blas_sizeof_integer EQUAL 8) + string(APPEND _blas_nvhpc_lib "_ilp64") + elseif(_blas_sizeof_integer EQUAL 4) + string(APPEND _blas_nvhpc_lib "_lp64") + endif() + + if(NOT BLAS_LIBRARIES) + check_blas_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "${_blas_nvhpc_lib}" + "" + "" + "" + ) + endif() + + # an additional check for NVHPC 2020 + # which does not have differentiation + # between lp64 and ilp64 modes + if(NOT BLAS_LIBRARIES AND NOT _blas_sizeof_integer EQUAL 8) + set(_blas_nvhpc_lib "blas") + + check_blas_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "${_blas_nvhpc_lib}" + "" + "" + "" + ) + endif() + + unset(_blas_nvhpc_lib) +endif() + +# libblastrampoline? (https://github.com/JuliaLinearAlgebra/libblastrampoline/tree/main) +if(BLA_VENDOR STREQUAL "libblastrampoline" OR BLA_VENDOR STREQUAL "All") + set(_blas_libblastrampoline_lib "blastrampoline") + + if(WIN32) + # Windows appends the version number to the library + string(APPEND _blas_libblastrampoline_lib "-5") + endif() + + if(NOT BLAS_LIBRARIES) + check_blas_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "${_blas_libblastrampoline_lib}" + "" + "" + "" + ) + endif() + + unset(_blas_libblastrampoline_lib) +endif() + +# Generic BLAS library? +if(BLA_VENDOR STREQUAL "Generic" OR + BLA_VENDOR STREQUAL "All") + set(_blas_generic_lib "blas") + + if(_blas_sizeof_integer EQUAL 8) + string(APPEND _blas_generic_lib "64") + endif() + + if(NOT BLAS_LIBRARIES) + check_blas_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "${_blas_generic_lib}" + "" + "" + "" + ) + endif() + + unset(_blas_generic_lib) +endif() + +# On compilers that implicitly link BLAS (i.e. CrayPrgEnv) we used a +# placeholder for empty BLAS_LIBRARIES to get through our logic above. +if(BLAS_LIBRARIES STREQUAL "BLAS_LIBRARIES-PLACEHOLDER-FOR-EMPTY-LIBRARIES") + set(BLAS_LIBRARIES "") +endif() + +if(NOT BLA_F95) + find_package_handle_standard_args(BLAS REQUIRED_VARS ${_blas_fphsa_req_var}) +endif() + +_add_blas_target() +unset(_blas_fphsa_req_var) +unset(_blas_sizeof_integer) +unset(_BLAS_LIBRARIES) diff --git a/cmake/find_scripts/FindLAPACK.cmake b/cmake/find_scripts/FindLAPACK.cmake new file mode 100644 index 00000000000..8c2094b8edf --- /dev/null +++ b/cmake/find_scripts/FindLAPACK.cmake @@ -0,0 +1,817 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +#[=======================================================================[.rst: +FindLAPACK +---------- + +Find Linear Algebra PACKage (LAPACK) library + +This module finds an installed Fortran library that implements the +`LAPACK linear-algebra interface`_. + +At least one of the ``C``, ``CXX``, or ``Fortran`` languages must be enabled. + +.. _`LAPACK linear-algebra interface`: https://netlib.org/lapack/ + +Input Variables +^^^^^^^^^^^^^^^ + +The following variables may be set to influence this module's behavior: + +``BLA_STATIC`` + if ``ON`` use static linkage + +``BLA_VENDOR`` + Set to one of the :ref:`BLAS/LAPACK Vendors` to search for BLAS only + from the specified vendor. If not set, all vendors are considered. + +``BLA_F95`` + if ``ON`` tries to find the BLAS95/LAPACK95 interfaces + +``BLA_PREFER_PKGCONFIG`` + .. versionadded:: 3.20 + + if set ``pkg-config`` will be used to search for a LAPACK library first + and if one is found that is preferred + +``BLA_PKGCONFIG_LAPACK`` + .. versionadded:: 3.25 + + If set, the ``pkg-config`` method will look for this module name instead of + just ``lapack``. + + +``BLA_SIZEOF_INTEGER`` + .. versionadded:: 3.22 + + Specify the BLAS/LAPACK library integer size: + + ``4`` + Search for a BLAS/LAPACK with 32-bit integer interfaces. + ``8`` + Search for a BLAS/LAPACK with 64-bit integer interfaces. + ``ANY`` + Search for any BLAS/LAPACK. + Most likely, a BLAS/LAPACK with 32-bit integer interfaces will be found. + +Imported targets +^^^^^^^^^^^^^^^^ + +This module defines the following :prop_tgt:`IMPORTED` targets: + +``LAPACK::LAPACK`` + .. versionadded:: 3.18 + + The libraries to use for LAPACK, if found. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module defines the following variables: + +``LAPACK_FOUND`` + library implementing the LAPACK interface is found +``LAPACK_LINKER_FLAGS`` + uncached list of required linker flags (excluding ``-l`` and ``-L``). +``LAPACK_LIBRARIES`` + uncached list of libraries (using full path name) to link against + to use LAPACK +``LAPACK95_LIBRARIES`` + uncached list of libraries (using full path name) to link against + to use LAPACK95 +``LAPACK95_FOUND`` + library implementing the LAPACK95 interface is found + +Intel MKL +^^^^^^^^^ + +To use the Intel MKL implementation of LAPACK, a project must enable at least +one of the ``C`` or ``CXX`` languages. Set ``BLA_VENDOR`` to an Intel MKL +variant either on the command-line as ``-DBLA_VENDOR=Intel10_64lp`` or in +project code: + +.. code-block:: cmake + + set(BLA_VENDOR Intel10_64lp) + find_package(LAPACK) + +In order to build a project using Intel MKL, and end user must first +establish an Intel MKL environment. See the :module:`FindBLAS` module +section on :ref:`Intel MKL` for details. + +#]=======================================================================] + +# The approach follows that of the ``autoconf`` macro file, ``acx_lapack.m4`` +# (distributed at http://ac-archive.sourceforge.net/ac-archive/acx_lapack.html). + +if(CMAKE_Fortran_COMPILER_LOADED) + include(CheckFortranFunctionExists) +else() + include(CheckFunctionExists) +endif() +include(FindPackageHandleStandardArgs) + +function(_add_lapack_target) + if(LAPACK_FOUND AND NOT TARGET LAPACK::LAPACK) + add_library(LAPACK::LAPACK INTERFACE IMPORTED) + + # Filter out redundant BLAS info and replace with the BLAS target + set(_lapack_libs "${LAPACK_LIBRARIES}") + set(_lapack_flags "${LAPACK_LINKER_FLAGS}") + if(TARGET BLAS::BLAS) + if(_lapack_libs AND BLAS_LIBRARIES) + foreach(_blas_lib IN LISTS BLAS_LIBRARIES) + list(REMOVE_ITEM _lapack_libs "${_blas_lib}") + endforeach() + endif() + if(_lapack_flags AND BLAS_LINKER_FLAGS) + foreach(_blas_flag IN LISTS BLAS_LINKER_FLAGS) + list(REMOVE_ITEM _lapack_flags "${_blas_flag}") + endforeach() + endif() + list(APPEND _lapack_libs BLAS::BLAS) + endif() + if(_lapack_libs) + set_target_properties(LAPACK::LAPACK PROPERTIES + INTERFACE_LINK_LIBRARIES "${_lapack_libs}" + ) + endif() + if(_lapack_flags) + set_target_properties(LAPACK::LAPACK PROPERTIES + INTERFACE_LINK_OPTIONS "${_lapack_flags}" + ) + endif() + endif() +endfunction() + +# TODO: move this stuff to a separate module + +function(CHECK_LAPACK_LIBRARIES LIBRARIES _prefix _name _flags _list _deps _addlibdir _subdirs _blas) + # This function checks for the existence of the combination of libraries + # given by _list. If the combination is found, this checks whether can link + # against that library combination using the name of a routine given by _name + # using the linker flags given by _flags. If the combination of libraries is + # found and passes the link test, ${LIBRARIES} is set to the list of complete + # library paths that have been found. Otherwise, ${LIBRARIES} is set to FALSE. + + set(_libraries_work TRUE) + set(_libraries) + set(_combined_name) + + if(BLA_STATIC) + if(WIN32) + set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES}) + else() + set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) + endif() + else() + if(CMAKE_SYSTEM_NAME STREQUAL "Linux") + # for ubuntu's libblas3gf and liblapack3gf packages + set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES} .so.3gf) + endif() + endif() + + set(_extaddlibdir "${_addlibdir}") + if(WIN32) + list(APPEND _extaddlibdir ENV LIB) + elseif(APPLE) + list(APPEND _extaddlibdir ENV DYLD_LIBRARY_PATH) + else() + list(APPEND _extaddlibdir ENV LD_LIBRARY_PATH) + endif() + list(APPEND _extaddlibdir "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}") + + foreach(_library ${_list}) + if(_library MATCHES "^-") + # Respect linker flags as-is (required by MKL) + list(APPEND _libraries "${_library}") + else() + string(REGEX REPLACE "[^A-Za-z0-9]" "_" _lib_var "${_library}") + string(APPEND _combined_name "_${_lib_var}") + if(NOT "${_deps}" STREQUAL "") + string(APPEND _combined_name "_deps") + endif() + if(_libraries_work) + find_library(${_prefix}_${_lib_var}_LIBRARY + NAMES ${_library} + NAMES_PER_DIR + PATHS ${_extaddlibdir} + PATH_SUFFIXES ${_subdirs} + ) + mark_as_advanced(${_prefix}_${_lib_var}_LIBRARY) + list(APPEND _libraries ${${_prefix}_${_lib_var}_LIBRARY}) + set(_libraries_work ${${_prefix}_${_lib_var}_LIBRARY}) + endif() + endif() + endforeach() + + foreach(_flag ${_flags}) + string(REGEX REPLACE "[^A-Za-z0-9]" "_" _flag_var "${_flag}") + string(APPEND _combined_name "_${_flag_var}") + endforeach() + if(_libraries_work) + # Test this combination of libraries. + set(CMAKE_REQUIRED_LIBRARIES ${_flags} ${_libraries} ${_blas} ${_deps}) + set(CMAKE_REQUIRED_QUIET ${LAPACK_FIND_QUIETLY}) + if(CMAKE_Fortran_COMPILER_LOADED) + check_fortran_function_exists("${_name}" ${_prefix}${_combined_name}_WORKS) + else() + check_function_exists("${_name}_" ${_prefix}${_combined_name}_WORKS) + endif() + set(CMAKE_REQUIRED_LIBRARIES) + set(_libraries_work ${${_prefix}${_combined_name}_WORKS}) + endif() + + if(_libraries_work) + if("${_list}${_blas}" STREQUAL "") + set(_libraries "${LIBRARIES}-PLACEHOLDER-FOR-EMPTY-LIBRARIES") + else() + list(APPEND _libraries ${_blas} ${_deps}) + endif() + else() + set(_libraries FALSE) + endif() + set(${LIBRARIES} "${_libraries}" PARENT_SCOPE) +endfunction() + +macro(_lapack_find_dependency dep) + set(_lapack_quiet_arg) + if(LAPACK_FIND_QUIETLY) + set(_lapack_quiet_arg QUIET) + endif() + set(_lapack_required_arg) + if(LAPACK_FIND_REQUIRED) + set(_lapack_required_arg REQUIRED) + endif() + find_package(${dep} ${ARGN} + ${_lapack_quiet_arg} + ${_lapack_required_arg} + ) + if (NOT ${dep}_FOUND) + set(LAPACK_NOT_FOUND_MESSAGE "LAPACK could not be found because dependency ${dep} could not be found.") + endif() + + set(_lapack_required_arg) + set(_lapack_quiet_arg) +endmacro() + +set(LAPACK_LINKER_FLAGS) +set(LAPACK_LIBRARIES) +set(LAPACK95_LIBRARIES) +set(_lapack_fphsa_req_var LAPACK_LIBRARIES) + +# Check the language being used +if(NOT (CMAKE_C_COMPILER_LOADED OR CMAKE_CXX_COMPILER_LOADED OR CMAKE_Fortran_COMPILER_LOADED)) + set(LAPACK_NOT_FOUND_MESSAGE + "FindLAPACK requires Fortran, C, or C++ to be enabled.") +endif() + +if(NOT BLA_SIZEOF_INTEGER) + # in the reality we do not know which API of BLAS/LAPACK is masked in library + set(_lapack_sizeof_integer "ANY") +elseif((BLA_SIZEOF_INTEGER STREQUAL "ANY") OR + (BLA_SIZEOF_INTEGER STREQUAL "4") OR + (BLA_SIZEOF_INTEGER STREQUAL "8")) + set(_lapack_sizeof_integer ${BLA_SIZEOF_INTEGER}) +else() + message(FATAL_ERROR "BLA_SIZEOF_INTEGER can have only , ANY, 4, or 8 values") +endif() + +# Load BLAS +if(NOT LAPACK_NOT_FOUND_MESSAGE) + _lapack_find_dependency(BLAS) +endif() + +# Search with pkg-config if specified +if(BLA_PREFER_PKGCONFIG) + if(NOT BLA_PKGCONFIG_LAPACK) + set(BLA_PKGCONFIG_LAPACK "lapack") + endif() + find_package(PkgConfig QUIET) + if(PKG_CONFIG_FOUND) + pkg_check_modules(PKGC_LAPACK QUIET ${BLA_PKGCONFIG_LAPACK}) + if(PKGC_LAPACK_FOUND) + set(LAPACK_FOUND TRUE) + set(LAPACK_LIBRARIES "${PKGC_LAPACK_LINK_LIBRARIES}") + set(LAPACK_INCLUDE_DIRS "${PKGC_LAPACK_INCLUDE_DIRS}") + if (BLAS_LIBRARIES) + list(APPEND LAPACK_LIBRARIES "${BLAS_LIBRARIES}") + list(APPEND LAPACK_INCLUDE_DIRS "${BLAS_INCLUDE_DIRS}") + endif() + _add_lapack_target() + return() + endif() + endif() +endif() + +# Search for different LAPACK distributions if BLAS is found +if(NOT LAPACK_NOT_FOUND_MESSAGE) + set(LAPACK_LINKER_FLAGS ${BLAS_LINKER_FLAGS}) + if(NOT BLA_VENDOR) + if(NOT "$ENV{BLA_VENDOR}" STREQUAL "") + set(BLA_VENDOR "$ENV{BLA_VENDOR}") + else() + set(BLA_VENDOR "All") + endif() + endif() + + # LAPACK in the Intel MKL 10+ library? + if(NOT LAPACK_LIBRARIES + AND (BLA_VENDOR MATCHES "Intel" OR BLA_VENDOR STREQUAL "All") + AND (CMAKE_C_COMPILER_LOADED OR CMAKE_CXX_COMPILER_LOADED)) + # System-specific settings + if(NOT WIN32) + set(LAPACK_mkl_LM "-lm") + set(LAPACK_mkl_LDL "-ldl") + endif() + + _lapack_find_dependency(Threads) + + if(_lapack_sizeof_integer EQUAL 8) + set(LAPACK_mkl_ILP_MODE "ilp64") + elseif(_lapack_sizeof_integer EQUAL 4) + set(LAPACK_mkl_ILP_MODE "lp64") + else() + if(BLA_VENDOR MATCHES "_64ilp") + set(LAPACK_mkl_ILP_MODE "ilp64") + else() + set(LAPACK_mkl_ILP_MODE "lp64") + endif() + endif() + + set(LAPACK_SEARCH_LIBS "") + + if(BLA_F95) + set(LAPACK_mkl_SEARCH_SYMBOL "cheev_f95") + set(_LAPACK_LIBRARIES LAPACK95_LIBRARIES) + set(_BLAS_LIBRARIES ${BLAS95_LIBRARIES}) + + # old + list(APPEND LAPACK_SEARCH_LIBS + "mkl_lapack95") + # new >= 10.3 + list(APPEND LAPACK_SEARCH_LIBS + "mkl_intel_c") + list(APPEND LAPACK_SEARCH_LIBS + "mkl_lapack95_${LAPACK_mkl_ILP_MODE}") + else() + set(LAPACK_mkl_SEARCH_SYMBOL "cheev") + set(_LAPACK_LIBRARIES LAPACK_LIBRARIES) + set(_BLAS_LIBRARIES ${BLAS_LIBRARIES}) + + # old and new >= 10.3 + list(APPEND LAPACK_SEARCH_LIBS + "mkl_lapack") + endif() + + # MKL uses a multitude of partially platform-specific subdirectories: + if(BLA_VENDOR STREQUAL "Intel10_32") + set(LAPACK_mkl_ARCH_NAME "ia32") + else() + set(LAPACK_mkl_ARCH_NAME "intel64") + endif() + if(WIN32) + set(LAPACK_mkl_OS_NAME "win") + elseif(APPLE) + set(LAPACK_mkl_OS_NAME "mac") + else() + set(LAPACK_mkl_OS_NAME "lin") + endif() + if(DEFINED ENV{MKLROOT}) + file(TO_CMAKE_PATH "$ENV{MKLROOT}" LAPACK_mkl_MKLROOT) + # If MKLROOT points to the subdirectory 'mkl', use the parent directory instead + # so we can better detect other relevant libraries in 'compiler' or 'tbb': + get_filename_component(LAPACK_mkl_MKLROOT_LAST_DIR "${LAPACK_mkl_MKLROOT}" NAME) + if(LAPACK_mkl_MKLROOT_LAST_DIR STREQUAL "mkl") + get_filename_component(LAPACK_mkl_MKLROOT "${LAPACK_mkl_MKLROOT}" DIRECTORY) + endif() + endif() + set(LAPACK_mkl_LIB_PATH_SUFFIXES + "compiler/lib" "compiler/lib/${LAPACK_mkl_ARCH_NAME}_${LAPACK_mkl_OS_NAME}" + "compiler/lib/${LAPACK_mkl_ARCH_NAME}" + "mkl/lib" "mkl/lib/${LAPACK_mkl_ARCH_NAME}_${LAPACK_mkl_OS_NAME}" + "mkl/lib/${LAPACK_mkl_ARCH_NAME}" + "lib" "lib/${LAPACK_mkl_ARCH_NAME}_${LAPACK_mkl_OS_NAME}" + "lib/${LAPACK_mkl_ARCH_NAME}" + ) + + # First try empty lapack libs (implicitly linked or automatic from BLAS) + if(NOT ${_LAPACK_LIBRARIES}) + check_lapack_libraries( + ${_LAPACK_LIBRARIES} + LAPACK + ${LAPACK_mkl_SEARCH_SYMBOL} + "" + "" + "${CMAKE_THREAD_LIBS_INIT};${LAPACK_mkl_LM};${LAPACK_mkl_LDL}" + "${LAPACK_mkl_MKLROOT}" + "${LAPACK_mkl_LIB_PATH_SUFFIXES}" + "${_BLAS_LIBRARIES}" + ) + if(LAPACK_WORKS AND NOT _BLAS_LIBRARIES) + # Give a more helpful "found" message + set(LAPACK_WORKS "implicitly linked") + set(_lapack_fphsa_req_var LAPACK_WORKS) + endif() + endif() + + # Then try the search libs + foreach(_search ${LAPACK_SEARCH_LIBS}) + string(REPLACE " " ";" _search ${_search}) + if(NOT ${_LAPACK_LIBRARIES}) + check_lapack_libraries( + ${_LAPACK_LIBRARIES} + LAPACK + ${LAPACK_mkl_SEARCH_SYMBOL} + "" + "${_search}" + "${CMAKE_THREAD_LIBS_INIT};${LAPACK_mkl_LM};${LAPACK_mkl_LDL}" + "${LAPACK_mkl_MKLROOT}" + "${LAPACK_mkl_LIB_PATH_SUFFIXES}" + "${_BLAS_LIBRARIES}" + ) + endif() + endforeach() + + unset(_search) + unset(LAPACK_mkl_ILP_MODE) + unset(LAPACK_mkl_SEARCH_SYMBOL) + unset(LAPACK_mkl_LM) + unset(LAPACK_mkl_LDL) + unset(LAPACK_mkl_MKLROOT) + unset(LAPACK_mkl_ARCH_NAME) + unset(LAPACK_mkl_OS_NAME) + unset(LAPACK_mkl_LIB_PATH_SUFFIXES) + endif() + + # gotoblas? (http://www.tacc.utexas.edu/tacc-projects/gotoblas2) + if(NOT LAPACK_LIBRARIES + AND (BLA_VENDOR STREQUAL "Goto" OR BLA_VENDOR STREQUAL "All")) + check_lapack_libraries( + LAPACK_LIBRARIES + LAPACK + cheev + "" + "goto2" + "" + "" + "" + "${BLAS_LIBRARIES}" + ) + endif() + + # FlexiBLAS? (http://www.mpi-magdeburg.mpg.de/mpcsc/software/FlexiBLAS/) + if(NOT LAPACK_LIBRARIES + AND (BLA_VENDOR STREQUAL "FlexiBLAS" OR BLA_VENDOR STREQUAL "All")) + set(_lapack_flexiblas_lib "flexiblas") + + if(_lapack_sizeof_integer EQUAL 8) + string(APPEND _lapack_flexiblas_lib "64") + endif() + + check_lapack_libraries( + LAPACK_LIBRARIES + LAPACK + cheev + "" + "${_lapack_flexiblas_lib}" + "" + "" + "" + "${BLAS_LIBRARIES}" + ) + + unset(_lapack_flexiblas_lib) + endif() + + # OpenBLAS? (http://www.openblas.net) + if(NOT LAPACK_LIBRARIES + AND (BLA_VENDOR STREQUAL "OpenBLAS" OR BLA_VENDOR STREQUAL "All")) + set(_lapack_openblas_lib "openblas") + + if(_lapack_sizeof_integer EQUAL 8) + if(MINGW) + string(APPEND _lapack_openblas_lib "_64") + else() + string(APPEND _lapack_openblas_lib "64") + endif() + endif() + + check_lapack_libraries( + LAPACK_LIBRARIES + LAPACK + cheev + "" + "${_lapack_openblas_lib}" + "" + "" + "" + "${BLAS_LIBRARIES}" + ) + + unset(_lapack_openblas_lib) + endif() + + # ArmPL? (https://developer.arm.com/tools-and-software/server-and-hpc/compile/arm-compiler-for-linux/arm-performance-libraries) + if(NOT LAPACK_LIBRARIES + AND (BLA_VENDOR MATCHES "Arm" OR BLA_VENDOR STREQUAL "All")) + # Check for 64bit Integer support + if(_lapack_sizeof_integer EQUAL 8) + set(LAPACK_armpl_LIB "armpl_ilp64") + elseif(_lapack_sizeof_integer EQUAL 4) + set(LAPACK_armpl_LIB "armpl_lp64") + else() + if(BLA_VENDOR MATCHES "_ilp64") + set(LAPACK_armpl_LIB "armpl_ilp64") + else() + set(LAPACK_armpl_LIB "armpl_lp64") + endif() + endif() + + # Check for OpenMP support, VIA BLA_VENDOR of Arm_mp or Arm_ipl64_mp + if(BLA_VENDOR MATCHES "_mp") + string(APPEND LAPACK_armpl_LIB "_mp") + endif() + + check_lapack_libraries( + LAPACK_LIBRARIES + LAPACK + cheev + "" + "${LAPACK_armpl_LIB}" + "" + "" + "" + "${BLAS_LIBRARIES}" + ) + endif() + + # FLAME's blis library? (https://github.com/flame/blis) + if(NOT LAPACK_LIBRARIES + AND (BLA_VENDOR STREQUAL "FLAME" OR BLA_VENDOR STREQUAL "All")) + if(_lapack_sizeof_integer EQUAL 8) + if(BLA_VENDOR STREQUAL "FLAME") + message(FATAL_ERROR "libFLAME does not support Int64 type") + endif() + else() + check_lapack_libraries( + LAPACK_LIBRARIES + LAPACK + cheev + "" + "flame" + "" + "" + "" + "${BLAS_LIBRARIES}" + ) + endif() + endif() + + # AOCL? (https://developer.amd.com/amd-aocl/) + if(NOT LAPACK_LIBRARIES + AND (BLA_VENDOR MATCHES "AOCL" OR BLA_VENDOR STREQUAL "All")) + if(_lapack_sizeof_integer EQUAL 8) + set(_lapack_aocl_subdir "ILP64") + else() + set(_lapack_aocl_subdir "LP64") + endif() + + check_lapack_libraries( + LAPACK_LIBRARIES + LAPACK + cheev + "" + "flame" + "-fopenmp" + "" + "${_lapack_aocl_subdir}" + "${BLAS_LIBRARIES}" + ) + unset(_lapack_aocl_subdir) + endif() + + # LAPACK in SCSL library? (SGI/Cray Scientific Library) + if(NOT LAPACK_LIBRARIES + AND (BLA_VENDOR MATCHES "SCSL" OR BLA_VENDOR STREQUAL "All")) + set(_lapack_scsl_lib "scs") + + if(_lapack_sizeof_integer EQUAL 8) + string(APPEND _lapack_scsl_lib "_i8") + endif() + # Check for OpenMP support, VIA BLA_VENDOR of scs_mp + if(BLA_VENDOR MATCHES "_mp") + string(APPEND _lapack_scsl_lib "_mp") + endif() + + check_lapack_libraries( + LAPACK_LIBRARIES + LAPACK + cheev + "" + "${_lapack_scsl_lib}" + "" + "" + "" + "${BLAS_LIBRARIES}" + ) + unset(_lapack_scsl_lib) + endif() + + # BLAS in acml library? + if(BLA_VENDOR MATCHES "ACML" OR BLA_VENDOR STREQUAL "All") + if(BLAS_LIBRARIES MATCHES ".+acml.+") + set(LAPACK_LIBRARIES ${BLAS_LIBRARIES}) + endif() + endif() + + # Apple LAPACK library? + if(NOT LAPACK_LIBRARIES + AND (BLA_VENDOR STREQUAL "Apple" OR BLA_VENDOR STREQUAL "All")) + if(_lapack_sizeof_integer EQUAL 8) + if(BLA_VENDOR STREQUAL "Apple") + message(FATAL_ERROR "Accelerate Framework does not support Int64 type") + endif() + else() + check_lapack_libraries( + LAPACK_LIBRARIES + LAPACK + cheev + "" + "Accelerate" + "" + "" + "" + "${BLAS_LIBRARIES}" + ) + endif() + endif() + + # Apple NAS (vecLib) library? + if(NOT LAPACK_LIBRARIES + AND (BLA_VENDOR STREQUAL "NAS" OR BLA_VENDOR STREQUAL "All")) + if(_lapack_sizeof_integer EQUAL 8) + if(BLA_VENDOR STREQUAL "NAS") + message(FATAL_ERROR "Accelerate Framework does not support Int64 type") + endif() + else() + check_lapack_libraries( + LAPACK_LIBRARIES + LAPACK + cheev + "" + "vecLib" + "" + "" + "" + "${BLAS_LIBRARIES}" + ) + endif() + endif() + + # Elbrus Math Library? + if(NOT LAPACK_LIBRARIES + AND (BLA_VENDOR MATCHES "EML" OR BLA_VENDOR STREQUAL "All")) + if(BLAS_LIBRARIES MATCHES "eml.+") + set(LAPACK_LIBRARIES ${BLAS_LIBRARIES}) + endif() + endif() + + # Fujitsu SSL2 Library? + if(NOT LAPACK_LIBRARIES + AND (BLA_VENDOR MATCHES "Fujitsu_SSL2" OR BLA_VENDOR STREQUAL "All")) + if(BLAS_LIBRARIES MATCHES "fjlapack.+") + set(LAPACK_LIBRARIES ${BLAS_LIBRARIES}) + set(LAPACK_LINKER_FLAGS ${BLAS_LINKER_FLAGS}) + endif() + endif() + + # LAPACK in IBM ESSL library? + if(NOT LAPACK_LIBRARIES + AND (BLA_VENDOR MATCHES "IBMESSL" OR BLA_VENDOR STREQUAL "All")) + if(BLAS_LIBRARIES MATCHES "essl.+") + set(LAPACK_LIBRARIES ${BLAS_LIBRARIES}) + endif() + endif() + + # NVHPC Library? + + if(NOT LAPACK_LIBRARIES + AND (BLA_VENDOR MATCHES "NVHPC" OR BLA_VENDOR STREQUAL "All")) + set(_lapack_nvhpc_lib "lapack") + + if(_lapack_sizeof_integer EQUAL 8) + string(APPEND _lapack_nvhpc_lib "_ilp64") + elseif(_lapack_sizeof_integer EQUAL 4) + string(APPEND _lapack_nvhpc_lib "_lp64") + endif() + set(_lapack_nvhpc_flags) + if(";${CMAKE_C_COMPILER_ID};${CMAKE_CXX_COMPILER_ID};${CMAKE_Fortran_COMPILER_ID};" MATCHES ";(NVHPC|PGI);") + set(_lapack_nvhpc_flags "-fortranlibs") + endif() + + check_lapack_libraries( + LAPACK_LIBRARIES + LAPACK + cheev + "" + "${_lapack_nvhpc_lib}" + "${_lapack_nvhpc_flags}" + "" + "" + "${BLAS_LIBRARIES}" + ) + + # an additional check for NVHPC 2020 + # which does not have differentiation + # between lp64 and ilp64 modes + if(NOT LAPACK_LIBRARIES AND NOT _lapack_sizeof_integer EQUAL 8) + set(_lapack_nvhpc_lib "lapack") + + check_lapack_libraries( + LAPACK_LIBRARIES + LAPACK + cheev + "" + "${_lapack_nvhpc_lib}" + "${_lapack_nvhpc_flags}" + "" + "" + "${BLAS_LIBRARIES}" + ) + endif() + + unset(_lapack_nvhpc_lib) + unset(_lapack_nvhpc_flags) + endif() + + # libblastrampoline? (https://github.com/JuliaLinearAlgebra/libblastrampoline/tree/main) + if(NOT LAPACK_LIBRARIES + AND (BLA_VENDOR STREQUAL "libblastrampoline" OR BLA_VENDOR STREQUAL "All")) + if(BLAS_LIBRARIES MATCHES "blastrampoline.+") + set(LAPACK_LIBRARIES ${BLAS_LIBRARIES}) + endif() + endif() + + # Generic LAPACK library? + if(NOT LAPACK_LIBRARIES + AND (BLA_VENDOR STREQUAL "Generic" + OR BLA_VENDOR STREQUAL "ATLAS" + OR BLA_VENDOR STREQUAL "All")) + set(_lapack_generic_lib "lapack") + if(BLA_STATIC) + # We do not know for sure how the LAPACK reference implementation + # is built on this host. Guess typical dependencies. + set(_lapack_generic_deps "-lgfortran;-lm") + else() + set(_lapack_generic_deps "") + endif() + + if(_lapack_sizeof_integer EQUAL 8) + string(APPEND _lapack_generic_lib "64") + endif() + + check_lapack_libraries( + LAPACK_LIBRARIES + LAPACK + cheev + "" + "${_lapack_generic_lib}" + "${_lapack_generic_deps}" + "" + "" + "${BLAS_LIBRARIES}" + ) + + unset(_lapack_generic_deps) + unset(_lapack_generic_lib) + endif() +endif() + +if(BLA_F95) + set(LAPACK_LIBRARIES "${LAPACK95_LIBRARIES}") +endif() + +if(LAPACK_NOT_FOUND_MESSAGE) + set(LAPACK_NOT_FOUND_MESSAGE + REASON_FAILURE_MESSAGE ${LAPACK_NOT_FOUND_MESSAGE}) +endif() +find_package_handle_standard_args(LAPACK REQUIRED_VARS ${_lapack_fphsa_req_var} + ${LAPACK_NOT_FOUND_MESSAGE}) +unset(LAPACK_NOT_FOUND_MESSAGE) + +if(BLA_F95) + set(LAPACK95_FOUND ${LAPACK_FOUND}) +endif() + +# On compilers that implicitly link LAPACK (such as ftn, cc, and CC on Cray HPC machines) +# we used a placeholder for empty LAPACK_LIBRARIES to get through our logic above. +if(LAPACK_LIBRARIES STREQUAL "LAPACK_LIBRARIES-PLACEHOLDER-FOR-EMPTY-LIBRARIES") + set(LAPACK_LIBRARIES "") +endif() + +_add_lapack_target() +unset(_lapack_fphsa_req_var) +unset(_lapack_sizeof_integer) +unset(_LAPACK_LIBRARIES) From bb646107c4d0179fd9421774e74c834b41be00c2 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 15 Feb 2025 21:56:28 -0700 Subject: [PATCH 201/253] Workaround (to be removed later once the MSVC NAN bugfix is released) for a constant NAN --- vector/CMakeLists.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/vector/CMakeLists.txt b/vector/CMakeLists.txt index bb69e271c2f..0ff42b8c395 100644 --- a/vector/CMakeLists.txt +++ b/vector/CMakeLists.txt @@ -805,6 +805,15 @@ build_program_in_subdir( build_program_in_subdir(v.type DEPENDS grass_gis grass_vector GDAL) +# XXX: to workaround an MSVC bug where NAN is not a contant +# v.univar\main.c(77,8): error C2099: initializer is not a constant +# REMOVEME later once the fix is released +# https://developercommunity.visualstudio.com/t/NAN-is-no-longer-compile-time-constant-i/10688907#T-N10849410 +set(use_math_DEFS "") +if(WIN32) + set(use_math_DEFS "-D_UCRT_NOISY_NAN") +endif() + build_program_in_subdir( v.univar DEPENDS From 7ef9235221056d4f8fa91519d2bb4c5ae34a69fd Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 15 Feb 2025 22:10:06 -0700 Subject: [PATCH 202/253] Workaround (to be removed later once the MSVC NAN bugfix is released) for a constant NAN --- vector/CMakeLists.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/vector/CMakeLists.txt b/vector/CMakeLists.txt index 0ff42b8c395..fbff16d3386 100644 --- a/vector/CMakeLists.txt +++ b/vector/CMakeLists.txt @@ -809,13 +809,15 @@ build_program_in_subdir(v.type DEPENDS grass_gis grass_vector GDAL) # v.univar\main.c(77,8): error C2099: initializer is not a constant # REMOVEME later once the fix is released # https://developercommunity.visualstudio.com/t/NAN-is-no-longer-compile-time-constant-i/10688907#T-N10849410 -set(use_math_DEFS "") +set(noisy_nan_DEFS "") if(WIN32) - set(use_math_DEFS "-D_UCRT_NOISY_NAN") + set(noisy_nan_DEFS "-D_UCRT_NOISY_NAN") endif() build_program_in_subdir( v.univar + DEFS + "${noisy_nan_DEFS}" DEPENDS grass_dbmibase grass_dbmiclient From adebaedf274a0b03be8f6dd891b74564d1e22c09 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 15 Feb 2025 22:13:00 -0700 Subject: [PATCH 203/253] Workaround (to be removed later once the MSVC NAN bugfix is released) for a constant NAN --- vector/CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/vector/CMakeLists.txt b/vector/CMakeLists.txt index fbff16d3386..a70e3a23b68 100644 --- a/vector/CMakeLists.txt +++ b/vector/CMakeLists.txt @@ -809,15 +809,15 @@ build_program_in_subdir(v.type DEPENDS grass_gis grass_vector GDAL) # v.univar\main.c(77,8): error C2099: initializer is not a constant # REMOVEME later once the fix is released # https://developercommunity.visualstudio.com/t/NAN-is-no-longer-compile-time-constant-i/10688907#T-N10849410 -set(noisy_nan_DEFS "") +set(ucrt_noisy_nan_DEFS "") if(WIN32) - set(noisy_nan_DEFS "-D_UCRT_NOISY_NAN") + set(ucrt_noisy_nan_DEFS "-D_UCRT_NOISY_NAN") endif() build_program_in_subdir( v.univar DEFS - "${noisy_nan_DEFS}" + "${ucrt_noisy_nan_DEFS}" DEPENDS grass_dbmibase grass_dbmiclient From 16e367fa36119b1cb4fa02ebf9a663e3d847c4e0 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sun, 16 Feb 2025 00:11:11 -0700 Subject: [PATCH 204/253] get rid of D9025 warning: overriding /openmp with /openmp:llvm on Windows --- cmake/modules/CheckDependentLibraries.cmake | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/cmake/modules/CheckDependentLibraries.cmake b/cmake/modules/CheckDependentLibraries.cmake index aa1f1f1a9b6..e42c6a8acb8 100644 --- a/cmake/modules/CheckDependentLibraries.cmake +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -281,8 +281,14 @@ if(WITH_LAPACK) 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(MSVC AND OPENMP_FOUND) + 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 add_compile_options(-openmp:llvm) endif() From 1976a584130c24598b5cc91cb893d923c053a44c Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sun, 16 Feb 2025 01:34:03 -0700 Subject: [PATCH 205/253] Add missing HAVE_PCRE_H to config.h --- include/config.h.cmake.in | 3 +++ include/grass/config.h.in | 3 +++ 2 files changed, 6 insertions(+) diff --git a/include/config.h.cmake.in b/include/config.h.cmake.in index b5ac2d8ffa4..74a81915b7a 100644 --- a/include/config.h.cmake.in +++ b/include/config.h.cmake.in @@ -194,6 +194,9 @@ /* Define to 1 if you have the header file. */ #cmakedefine HAVE_REGEX_H ${HAVE_REGEX_H} +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_PCRE_H ${HAVE_PCRE_H} + /* Define to 1 if you have the `setenv' function. */ #cmakedefine HAVE_SETENV ${HAVE_SETENV} diff --git a/include/grass/config.h.in b/include/grass/config.h.in index 8e5eb161a45..0ea8a32cd3f 100644 --- a/include/grass/config.h.in +++ b/include/grass/config.h.in @@ -185,6 +185,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_REGEX_H +/* Define to 1 if you have the header file. */ +#undef HAVE_PCRE_H + /* Define to 1 if you have the `setenv' function. */ #undef HAVE_SETENV From 7d862f0b7d667fb69f05dc793e9210634ee461e5 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sun, 16 Feb 2025 01:39:58 -0700 Subject: [PATCH 206/253] Remove duplicate PCRE code --- lib/gis/ls_filter.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/lib/gis/ls_filter.c b/lib/gis/ls_filter.c index f6dba0319e0..5474a371451 100644 --- a/lib/gis/ls_filter.c +++ b/lib/gis/ls_filter.c @@ -157,14 +157,6 @@ static int re_filter(const char *filename, void *closure) int pcreExecRet; pcre *pcre_regex = closure; - /* Optimize the regex */ - pcreExtra = pcre_study(pcre_regex, 0, &pcreErrorStr); - pcreExecRet = pcre_exec(pcre_regex, pcreExtra, filename, - strlen(filename), /* length of string */ - 0, /* Start looking at this point */ - 0, /* OPTIONS */ - NULL, 0); /* Length of subStrVec */ - /* Optimize the regex */ pcreExtra = pcre_study(pcre_regex, 0, &pcreErrorStr); pcreExecRet = pcre_exec(pcre_regex, pcreExtra, filename, From 27e5a44337d3147820cf0bff68ddf2c43249ff1b Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sun, 16 Feb 2025 15:52:01 -0700 Subject: [PATCH 207/253] Remove unnecessary SOURCES cmake arguments; Add wrapper functions for MSVC _open() and _creat() to convert UN*X permission mode --- general/g.remove/main.c | 1 + include/config.h.cmake.in | 4 ++-- lib/CMakeLists.txt | 13 +------------ lib/gis/CMakeLists.txt | 2 +- msvc/creat.c | 23 +++++++++++++++++++++++ msvc/io.h | 38 ++++++++++++++++++++++++++++++++++++++ msvc/open.c | 38 ++++++++++++++++++++++++++++++++++++++ 7 files changed, 104 insertions(+), 15 deletions(-) create mode 100644 msvc/creat.c create mode 100644 msvc/io.h create mode 100644 msvc/open.c diff --git a/general/g.remove/main.c b/general/g.remove/main.c index 90c08671977..12bf7dc3d59 100644 --- a/general/g.remove/main.c +++ b/general/g.remove/main.c @@ -173,6 +173,7 @@ int main(int argc, char *argv[]) } if (!filter) G_fatal_error(_("Unable to compile pattern <%s>"), pattern); + exit(0); if (exclude) { if ((flag.regex->answer || flag.extended->answer) && diff --git a/include/config.h.cmake.in b/include/config.h.cmake.in index 74a81915b7a..9d845fecef0 100644 --- a/include/config.h.cmake.in +++ b/include/config.h.cmake.in @@ -406,13 +406,13 @@ #define strncasecmp _strnicmp #define strcasecmp _stricmp #define fdopen _fdopen -#define open _open +/* _open() and _creat() are wrapped by msvc/open.c and msvc/creat.c, +* respectively, for compatible permission mode */ #define read _read #define write _write #define close _close #define unlink _unlink #define getpid _getpid -#define creat _creat /* define gid_t type */ typedef @GID_TYPE@ gid_t; diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 341fa58505a..87e4268ba38 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -19,13 +19,10 @@ build_library_in_subdir( add_subdirectory(proj) -file(GLOB raster_SRCS "./raster/*.c") build_library_in_subdir( raster DEFS "-DGDAL_LINK=1" - SOURCES - ${raster_SRCS} DEPENDS GDAL PROJ @@ -81,11 +78,8 @@ build_library_in_subdir( OPTIONAL_DEPENDS LIBPNG) -file(GLOB psdriver_SRCS "./psdriver/*.c") build_library_in_subdir( psdriver - SOURCES - ${psdriver_SRCS} DEPENDS grass_driver grass_gis @@ -100,11 +94,8 @@ add_custom_command( install(FILES ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/psdriver.ps DESTINATION ${GRASS_INSTALL_ETCDIR}) -file(GLOB htmldriver_SRCS "./htmldriver/*.c") build_library_in_subdir( htmldriver - SOURCES - ${htmldriver_SRCS} DEPENDS grass_gis grass_driver @@ -122,9 +113,7 @@ if(WITH_CAIRO) list(APPEND _cairodriver_DEPENDS X11) endif() - file(GLOB cairodriver_SRCS "./cairodriver/*.c") - build_library_in_subdir(cairodriver DEPENDS ${_cairodriver_DEPENDS} SOURCES - ${cairodriver_SRCS}) + build_library_in_subdir(cairodriver DEPENDS ${_cairodriver_DEPENDS}) set(_grass_display_DEFS "-DUSE_CAIRO") list(APPEND _grass_display_DEPENDS grass_cairodriver) diff --git a/lib/gis/CMakeLists.txt b/lib/gis/CMakeLists.txt index 38bc8350f98..0825d975ad8 100644 --- a/lib/gis/CMakeLists.txt +++ b/lib/gis/CMakeLists.txt @@ -8,7 +8,7 @@ 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 "../../msvc") - list(APPEND gislib_SRCS "../../msvc/dirent.c") + list(APPEND gislib_SRCS "../../msvc/dirent.c;../../msvc/open.c;../../msvc/creat.c") endif() build_module( diff --git a/msvc/creat.c b/msvc/creat.c new file mode 100644 index 00000000000..e08287ab5d4 --- /dev/null +++ b/msvc/creat.c @@ -0,0 +1,23 @@ +/*! + * \file msvc/creat.c + * + * \brief A wrapper function for MSVC _creat() that converts permission mode. + * + * (C) 2025 by the GRASS Development Team + * + * This program is free software under the GNU General Public License (>=v2). + * Read the file COPYING that comes with GRASS for details. + * + * \author Huidae Cho + * + * \date 2025 + */ + +#include +#include + +int __creat(const char *pathname, int mode) +{ + return _creat(pathname, + (mode & 0400 ? _S_IREAD : 0) | (mode & 0200 ? _S_IWRITE : 0)); +} diff --git a/msvc/io.h b/msvc/io.h new file mode 100644 index 00000000000..fb325751158 --- /dev/null +++ b/msvc/io.h @@ -0,0 +1,38 @@ +/*! + * \file msvc/io.h + * + * \brief Header file for msvc/open.c and msvc/creat.c + * + * (C) 2025 by the GRASS Development Team + * + * This program is free software under the GNU General Public License (>=v2). + * Read the file COPYING that comes with GRASS for details. + * + * \author Huidae Cho + * + * \date 2025 + */ + +#ifndef GRASS_MSVC_IO_H +#define GRASS_MSVC_IO_H + +#include <../ucrt/io.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* these wrapper functions convert UN*X permission mode for MSVC */ +int __open(const char *, int, ...); +int __creat(const char *, int); + +#ifdef __cplusplus +} +#endif + +#define open __open +#define creat __creat + +#define O_TMPFILE O_TEMPORARY + +#endif diff --git a/msvc/open.c b/msvc/open.c new file mode 100644 index 00000000000..41376c59f4a --- /dev/null +++ b/msvc/open.c @@ -0,0 +1,38 @@ +/*! + * \file msvc/open.c + * + * \brief A wrapper function for MSVC _open() that converts permission mode. + * + * (C) 2025 by the GRASS Development Team + * + * This program is free software under the GNU General Public License (>=v2). + * Read the file COPYING that comes with GRASS for details. + * + * \author Huidae Cho + * + * \date 2025 + */ + +#include +#include +#include + +#define O_TMPFILE O_TEMPORARY + +int __open(const char *pathname, int flags, ...) +{ + if (flags & (O_CREAT | O_TMPFILE)) { + va_list ap; + int mode; + + va_start(ap, flags); + mode = va_arg(ap, int); + va_end(ap); + + return _open(pathname, flags, + (mode & 0400 ? _S_IREAD : 0) | + (mode & 0200 ? _S_IWRITE : 0)); + } + + return _open(pathname, flags); +} From dc58fa4c2c7d6055a82226bb251e6025ea7cd409 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sun, 16 Feb 2025 15:52:20 -0700 Subject: [PATCH 208/253] Remove unnecessary SOURCES cmake arguments; Add wrapper functions for MSVC _open() and _creat() to convert UN*X permission mode --- general/g.remove/main.c | 1 - 1 file changed, 1 deletion(-) diff --git a/general/g.remove/main.c b/general/g.remove/main.c index 12bf7dc3d59..90c08671977 100644 --- a/general/g.remove/main.c +++ b/general/g.remove/main.c @@ -173,7 +173,6 @@ int main(int argc, char *argv[]) } if (!filter) G_fatal_error(_("Unable to compile pattern <%s>"), pattern); - exit(0); if (exclude) { if ((flag.regex->answer || flag.extended->answer) && From 5dc0feb1f023f8e4cfd5791e23c2ee175ea96e31 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sun, 16 Feb 2025 15:59:08 -0700 Subject: [PATCH 209/253] Do not double free ls filter regex --- lib/gis/ls_filter.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/gis/ls_filter.c b/lib/gis/ls_filter.c index 5474a371451..03ac3109183 100644 --- a/lib/gis/ls_filter.c +++ b/lib/gis/ls_filter.c @@ -273,6 +273,4 @@ void G_free_ls_filter(void *regex) #ifdef HAVE_PCRE_H pcre_free(regex); #endif - - G_free(regex); } From d7d0ead70b7b07122c79d9258d10406e71dbd2c2 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sun, 16 Feb 2025 17:13:49 -0700 Subject: [PATCH 210/253] Generate htmls after Python lib --- doc/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 3b1f073761d..1717479ebad 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -1,5 +1,5 @@ file(GLOB doc_HTMLFILES "*.html") -add_custom_target(ADD_DOC_DOCS ALL COMMENT "Generate doc/html docs.") +add_custom_target(ADD_DOC_DOCS ALL COMMENT "Generate doc/html docs." DEPENDS LIB_PYTHON) foreach(html_file ${doc_HTMLFILES}) get_filename_component(filename ${html_file} NAME_WLE) From d2a58dfc3424642a875319fb79c0e31e9bd4e51c Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sun, 16 Feb 2025 21:15:24 -0700 Subject: [PATCH 211/253] Fix large file support option; Support LFS for MSVC --- CMakeLists.txt | 3 ++- include/config.h.cmake.in | 17 +++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c72ed4bd8e6..cf7c2c7de7b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -50,6 +50,7 @@ if(WIN32) elseif(APPLE) set(x11_default_option_enabled OFF) endif() +set(lfs_default_option_enabled ON) # Configure CCache if available if(NOT MSVC) @@ -125,7 +126,7 @@ option(WITH_OPENDWG "Build with OpenDWG support" OFF) # Other options option(WITH_LARGEFILES "Build with large file support" - ${default_option_enabled}) + ${lfs_default_option_enabled}) option(WITH_DOCS "Build documentation" ON) option(WITH_GUI "Build GUI" ON) option(WITH_FHS "Install with FHS" OFF) diff --git a/include/config.h.cmake.in b/include/config.h.cmake.in index 9d845fecef0..9fcf689ea3c 100644 --- a/include/config.h.cmake.in +++ b/include/config.h.cmake.in @@ -377,12 +377,12 @@ * Defines needed to get large file support - from cdrtools-2.01 */ -#define HAVE_LARGEFILES ${HAVE_LARGEFILES} +#cmakedefine HAVE_LARGEFILES ${HAVE_LARGEFILES} /* define if langinfo.h exists */ #cmakedefine HAVE_LANGINFO_H ${HAVE_LANGINFO_H} -#if defined(__MINGW32__) && (!defined(_FILE_OFFSET_BITS) || (_FILE_OFFSET_BITS != 64)) +#if defined(__MINGW32__) && defined(HAVE_LARGEFILES) && (!defined(_FILE_OFFSET_BITS) || (_FILE_OFFSET_BITS != 64)) /* add/remove as needed */ /* redefine off_t */ #include @@ -403,6 +403,19 @@ #endif /* MINGW32 LFS */ #ifdef _MSC_VER + +#ifdef HAVE_LARGEFILES +#define off_t __int64 +#include +#define fseek _fseeki64 +#define ftell _ftelli64 +#include +#define lseek _lseeki64 +#include +#define stat _stati64 +#define fstat _fstati64 +#endif /* _MSC_VER LFS */ + #define strncasecmp _strnicmp #define strcasecmp _stricmp #define fdopen _fdopen From 724efadb8c4ec0883995e08dc0152d3c7010746b Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sun, 16 Feb 2025 23:35:49 -0700 Subject: [PATCH 212/253] Binary mode for file I/O on Windows --- lib/gis/CMakeLists.txt | 2 +- lib/gis/gisinit.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/gis/CMakeLists.txt b/lib/gis/CMakeLists.txt index 0825d975ad8..a855326c0d8 100644 --- a/lib/gis/CMakeLists.txt +++ b/lib/gis/CMakeLists.txt @@ -1,6 +1,6 @@ file(GLOB gislib_SRCS "*.c") -if(NOT MINGW) +if(NOT WIN32) list(FILTER gislib_SRCS EXCLUDE REGEX [[.*/fmode\.c$]]) endif() diff --git a/lib/gis/gisinit.c b/lib/gis/gisinit.c index 6cec20b7150..f749eb8753f 100644 --- a/lib/gis/gisinit.c +++ b/lib/gis/gisinit.c @@ -161,7 +161,7 @@ static int gisinit(void) { char *zlib; -#ifdef __MINGW32__ +#if defined(_MSC_VER) || defined(__MINGW32__) _fmode = O_BINARY; #endif /* Mark window as not set */ From ae76a10f3f3b19be1c32d6ada242004f3f9fb1eb Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sun, 16 Feb 2025 23:52:35 -0700 Subject: [PATCH 213/253] Fix off_t error --- include/config.h.cmake.in | 1 + 1 file changed, 1 insertion(+) diff --git a/include/config.h.cmake.in b/include/config.h.cmake.in index 9fcf689ea3c..4c299177794 100644 --- a/include/config.h.cmake.in +++ b/include/config.h.cmake.in @@ -405,6 +405,7 @@ #ifdef _MSC_VER #ifdef HAVE_LARGEFILES +#include #define off_t __int64 #include #define fseek _fseeki64 From 2927cec71b043fc3bd6ba46517ec1df5eb662a65 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 17 Feb 2025 12:29:25 -0700 Subject: [PATCH 214/253] Remove non-existing files from r.colors.out --- raster/r.colors.out/CMakeLists.txt | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/raster/r.colors.out/CMakeLists.txt b/raster/r.colors.out/CMakeLists.txt index 9b835dc9344..9e3d0a593d7 100644 --- a/raster/r.colors.out/CMakeLists.txt +++ b/raster/r.colors.out/CMakeLists.txt @@ -1,11 +1,8 @@ -set(r_colors_out_SRCS raster_main.c prt_json.c) -set(r3_colors_out_SRCS raster3d_main.c prt_json.c) - build_program( NAME r.colors.out SOURCES - "${r_colors_out_SRCS}" + raster_main.c DEPENDS grass_gis grass_raster @@ -15,7 +12,7 @@ build_program( NAME r3.colors.out SOURCES - "${r3_colors_out_SRCS}" + raster3d_main.c DEPENDS grass_gis grass_raster From 506d8fc0f3548f287cf847bf6817ff4d991b5449 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 17 Feb 2025 12:34:02 -0700 Subject: [PATCH 215/253] Add gjson.h --- lib/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 87e4268ba38..79d28db6831 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -46,7 +46,7 @@ build_library_in_subdir(external/ccmath) build_library_in_subdir(external/shapelib NAME grass_shape HEADERS "shapefil.h") -build_library_in_subdir(external/parson NAME grass_parson HEADERS "parson.h") +build_library_in_subdir(external/parson NAME grass_parson HEADERS "gjson.h" "parson.h") build_library_in_subdir( gmath From 4b2574e866512fe16476dc8bf59a67e9a9b3232d Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 17 Feb 2025 12:43:56 -0700 Subject: [PATCH 216/253] Move grass_parson above grass_raster (dependency) --- lib/CMakeLists.txt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 79d28db6831..effe54a5e4f 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -19,6 +19,8 @@ build_library_in_subdir( add_subdirectory(proj) +build_library_in_subdir(external/parson NAME grass_parson HEADERS "gjson.h" "parson.h") + build_library_in_subdir( raster DEFS @@ -27,7 +29,8 @@ build_library_in_subdir( GDAL PROJ grass_gis - grass_gproj) + grass_gproj + grass_parson) if(TARGET LAPACK) target_link_libraries(grass_raster PRIVATE LAPACK) @@ -46,8 +49,6 @@ build_library_in_subdir(external/ccmath) build_library_in_subdir(external/shapelib NAME grass_shape HEADERS "shapefil.h") -build_library_in_subdir(external/parson NAME grass_parson HEADERS "gjson.h" "parson.h") - build_library_in_subdir( gmath DEPENDS From ca700354c598e89800a53a1ee7db81d9d266713b Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 17 Feb 2025 12:45:49 -0700 Subject: [PATCH 217/253] Add grass_parson to r.describe --- raster/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/raster/CMakeLists.txt b/raster/CMakeLists.txt index bd6b5d1d07b..995b0fb737a 100644 --- a/raster/CMakeLists.txt +++ b/raster/CMakeLists.txt @@ -200,7 +200,7 @@ 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) -build_program_in_subdir(r.describe DEPENDS grass_gis grass_raster) +build_program_in_subdir(r.describe DEPENDS grass_gis grass_raster grass_parson) build_program_in_subdir(r.distance DEPENDS grass_gis grass_raster) From 9f0fa23e8acef64e7150a83212b656f9510c275c Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 17 Feb 2025 12:47:04 -0700 Subject: [PATCH 218/253] Add LIBM to r.path --- raster/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/raster/CMakeLists.txt b/raster/CMakeLists.txt index 995b0fb737a..21ee29a9368 100644 --- a/raster/CMakeLists.txt +++ b/raster/CMakeLists.txt @@ -378,7 +378,7 @@ build_program_in_subdir( build_program_in_subdir(r.patch DEPENDS grass_gis grass_raster OPTIONAL_DEPENDS OPENMP) -build_program_in_subdir(r.path DEPENDS grass_gis grass_raster grass_vector GDAL) +build_program_in_subdir(r.path DEPENDS grass_gis grass_raster grass_vector GDAL ${LIBM}) build_program_in_subdir(r.profile DEPENDS grass_gis grass_raster grass_parson ${LIBM}) From 57081eab8fbb3f313f5a2ddf431158afbcef5497 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 17 Feb 2025 12:51:22 -0700 Subject: [PATCH 219/253] if WITH_DOCS for r.li html --- raster/r.li/CMakeLists.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/raster/r.li/CMakeLists.txt b/raster/r.li/CMakeLists.txt index 1a1897ede0c..0568d8b9431 100644 --- a/raster/r.li/CMakeLists.txt +++ b/raster/r.li/CMakeLists.txt @@ -26,7 +26,10 @@ build_library_in_subdir( grass_raster HTML_FILE_NAME "r.li.daemon") -generate_html(TARGET grass_rli NAME r.li) + +if(WITH_DOCS) + generate_html(TARGET ALL_RASTER_MODULES NAME r.li) +endif() foreach(SUBDIR ${SUBDIRS1}) build_program_in_subdir(${SUBDIR} DEPENDS grass_gis grass_rli grass_raster ${LIBM}) From a865adc347cf65fa1ee45ff4e59e4ba995bb2559 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 17 Feb 2025 12:52:14 -0700 Subject: [PATCH 220/253] Add grass_parson to v.distance --- vector/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/vector/CMakeLists.txt b/vector/CMakeLists.txt index a70e3a23b68..6afc477f806 100644 --- a/vector/CMakeLists.txt +++ b/vector/CMakeLists.txt @@ -215,6 +215,7 @@ build_program_in_subdir( grass_gis grass_gmath grass_vector + grass_parson GDAL ${LIBM}) @@ -390,7 +391,7 @@ build_program_in_subdir( build_program_in_subdir(v.proj DEPENDS grass_gis grass_gproj grass_vector GDAL ${LIBM}) build_program_in_subdir( - v.profile + v.profile DEPENDS grass_dbmibase grass_dbmiclient From 47f707ce5d056ace584292ce372351b74b4aaa62 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 17 Feb 2025 12:57:25 -0700 Subject: [PATCH 221/253] Add output directory to thumbnails.py --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index cf7c2c7de7b..3fd80c1abc0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -311,6 +311,7 @@ add_custom_target( 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) From 57787b18dfedf8ae0532635db70d915e3e3ad6f2 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 17 Feb 2025 21:13:39 -0700 Subject: [PATCH 222/253] Document generation --- CMakeLists.txt | 2 ++ cmake/modules/GRASSInstallDirs.cmake | 5 +++++ raster/r.li/CMakeLists.txt | 2 +- utils/CMakeLists.txt | 23 +++++++++++++++++++++-- 4 files changed, 29 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3fd80c1abc0..a54782de085 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -237,6 +237,7 @@ if(WIN32) ${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" @@ -252,6 +253,7 @@ else() "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}\"") diff --git a/cmake/modules/GRASSInstallDirs.cmake b/cmake/modules/GRASSInstallDirs.cmake index 0d1b38676da..bd8f1eb142e 100644 --- a/cmake/modules/GRASSInstallDirs.cmake +++ b/cmake/modules/GRASSInstallDirs.cmake @@ -22,6 +22,8 @@ if(WITH_FHS) set(GRASS_INSTALL_DEVDOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/doc/${PROJECT_NAME_LOWER}-dev-doc") set(GRASS_INSTALL_MANDIR "${CMAKE_INSTALL_MANDIR}") + 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") @@ -45,6 +47,7 @@ else() set(GRASS_INSTALL_DOCDIR "${GISBASE_DIR}/docs/html") set(GRASS_INSTALL_DEVDOCDIR "${GISBASE_DIR}/html") set(GRASS_INSTALL_MANDIR "${GISBASE_DIR}/docs/man") + 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") @@ -68,6 +71,7 @@ message(STATUS "GRASS_INSTALL_INCLUDEDIR ${GRASS_INSTALL_INCLUDEDIR}") message(STATUS "GRASS_INSTALL_DOCDIR ${GRASS_INSTALL_DOCDIR}") message(STATUS "GRASS_INSTALL_DEVDOCDIR ${GRASS_INSTALL_DEVDOCDIR}") message(STATUS "GRASS_INSTALL_MANDIR ${GRASS_INSTALL_MANDIR}") +message(STATUS "GRASS_INSTALL_MKDOCSDIR ${GRASS_INSTALL_MKDOCSDIR}") message(STATUS "GRASS_INSTALL_DEMODIR ${GRASS_INSTALL_DEMODIR}") message(STATUS "GRASS_INSTALL_MISCDIR ${GRASS_INSTALL_MISCDIR}") message(STATUS "GRASS_INSTALL_MAKEFILEDIR ${GRASS_INSTALL_MAKEFILEDIR}") @@ -109,3 +113,4 @@ file(MAKE_DIRECTORY "${OUTDIR}/${GRASS_INSTALL_GUIDIR}/icons") file(MAKE_DIRECTORY "${OUTDIR}/${GRASS_INSTALL_GUIDIR}/images") file(MAKE_DIRECTORY "${OUTDIR}/${GRASS_INSTALL_DOCDIR}") file(MAKE_DIRECTORY "${OUTDIR}/${GRASS_INSTALL_MANDIR}") +file(MAKE_DIRECTORY "${OUTDIR}/${GRASS_INSTALL_MKDOCSDIR}/source") diff --git a/raster/r.li/CMakeLists.txt b/raster/r.li/CMakeLists.txt index 0568d8b9431..eae49565492 100644 --- a/raster/r.li/CMakeLists.txt +++ b/raster/r.li/CMakeLists.txt @@ -28,7 +28,7 @@ build_library_in_subdir( "r.li.daemon") if(WITH_DOCS) - generate_html(TARGET ALL_RASTER_MODULES NAME r.li) + generate_html(TARGET grass_rli NAME r.li) endif() foreach(SUBDIR ${SUBDIRS1}) diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt index 41aff9466c8..8f0c2f53481 100644 --- a/utils/CMakeLists.txt +++ b/utils/CMakeLists.txt @@ -1,5 +1,11 @@ file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/mkhtml.py DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) +file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/mkdocs.py + DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) +file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/mkmarkdown.py + DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) +file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/mkrest.py + DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/thumbnails.py DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/generate_last_commit_file.py @@ -52,8 +58,18 @@ add_custom_target( COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/g.html2man/ghtml.py ${OUTDIR}/${GRASS_INSTALL_UTILSDIR} - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/mkhtml.py - ${OUTDIR}/${GRASS_INSTALL_UTILSDIR}) + COMMAND + ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/mkhtml.py + ${OUTDIR}/${GRASS_INSTALL_UTILSDIR} + COMMAND + ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/mkdocs.py + ${OUTDIR}/${GRASS_INSTALL_UTILSDIR} + COMMAND + ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/mkmarkdown.py + ${OUTDIR}/${GRASS_INSTALL_UTILSDIR} + COMMAND + ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/mkrest.py + ${OUTDIR}/${GRASS_INSTALL_UTILSDIR}) install( FILES ${OUTDIR}/${GRASS_INSTALL_UTILSDIR}/g.html2man.py @@ -62,4 +78,7 @@ install( ${OUTDIR}/${GRASS_INSTALL_UTILSDIR}/g.html2man.py ${OUTDIR}/${GRASS_INSTALL_UTILSDIR}/ghtml.py ${OUTDIR}/${GRASS_INSTALL_UTILSDIR}/mkhtml.py + ${OUTDIR}/${GRASS_INSTALL_UTILSDIR}/mkdocs.py + ${OUTDIR}/${GRASS_INSTALL_UTILSDIR}/mkmarkdown.py + ${OUTDIR}/${GRASS_INSTALL_UTILSDIR}/mkrest.py DESTINATION ${GRASS_INSTALL_UTILSDIR}) From 8b0d27849af67eb9330270c37b8f1892efdb46ca Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 17 Feb 2025 21:41:45 -0700 Subject: [PATCH 223/253] Update man/build_*.py arguments --- man/CMakeLists.txt | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/man/CMakeLists.txt b/man/CMakeLists.txt index 7633c9f3532..03a3176988b 100644 --- a/man/CMakeLists.txt +++ b/man/CMakeLists.txt @@ -1,9 +1,11 @@ +string(TIMESTAMP YEAR %Y) + add_custom_target( build_full_index COMMAND ${grass_env_command} ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/build_full_index.py - ${OUTDIR}/${GRASS_INSTALL_DOCDIR} + ${YEAR} BYPRODUCTS ${OUTDIR}/${GRASS_INSTALL_DOCDIR}/full_index.html DEPENDS ALL_MODULES LIB_PYTHON GUI_WXPYTHON COMMENT "man generation: build full index") @@ -36,18 +38,27 @@ add_custom_target( COMMENT "man generation: build index") set(target_names build_topics build_keywords build_graphical_index - build_manual_gallery build_class_graphical) + 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 - ${OUTDIR}/${GRASS_INSTALL_DOCDIR} DEPENDS build_index COMMENT "man generation: ${target_name}") 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") + add_custom_target( build_pso COMMAND From a18be5b237503bd2262a8a0dd5e977b20e0cc0c2 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Tue, 18 Feb 2025 07:13:37 -0700 Subject: [PATCH 224/253] Restore lib/gis/asprintf.c --- lib/gis/asprintf.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/lib/gis/asprintf.c b/lib/gis/asprintf.c index 671e652d1ce..ea2e0c7f5d4 100644 --- a/lib/gis/asprintf.c +++ b/lib/gis/asprintf.c @@ -43,21 +43,23 @@ int G_vasprintf(char **out, const char *fmt, va_list ap) #ifdef HAVE_ASPRINTF return vasprintf(out, fmt, ap); #else - va_list aq; size_t size = strlen(fmt) + 50; char *buf = G_malloc(size); int count; - va_copy(aq, ap); - count = vsnprintf(buf, size, fmt, ap); - if (count++ >= size) { - buf = G_realloc(buf, count); - if (count - 1 == size) - buf[count] = '\0'; - else - vsnprintf(buf, count, fmt, aq); + for (;;) { + /* BUG: according to man vsnprintf, + * va_start() should be called immediately before vsnprintf(), + * and va_end() immediately after vsnprintf() + * otherwise there will be memory corruption */ + count = vsnprintf(buf, size, fmt, ap); + if (count >= 0 && count < size) + break; + size *= 2; + buf = G_realloc(buf, size); } - va_end(aq); + + buf = G_realloc(buf, count + 1); *out = buf; return count; From c051ce7e84af22aa8a9e83fda495303db37f18be Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Tue, 18 Feb 2025 07:16:02 -0700 Subject: [PATCH 225/253] Redefine lseek for MSVC from config.h only --- include/config.h.cmake.in | 1 + msvc/unistd.h | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/config.h.cmake.in b/include/config.h.cmake.in index 4c299177794..55c1da08e3d 100644 --- a/include/config.h.cmake.in +++ b/include/config.h.cmake.in @@ -411,6 +411,7 @@ #define fseek _fseeki64 #define ftell _ftelli64 #include +#undef lseek #define lseek _lseeki64 #include #define stat _stati64 diff --git a/msvc/unistd.h b/msvc/unistd.h index a3370ffaa67..ff162826281 100644 --- a/msvc/unistd.h +++ b/msvc/unistd.h @@ -33,7 +33,6 @@ #define getcwd _getcwd #define chdir _chdir #define isatty _isatty -#define lseek _lseek /* read, write, and close are NOT being #defined here, * because while there are file handle specific versions for Windows, * they probably don't work for sockets. @@ -56,4 +55,4 @@ typedef unsigned __int16 uint16_t; typedef unsigned __int32 uint32_t; typedef unsigned __int64 uint64_t; -#endif /* unistd.h */ \ No newline at end of file +#endif /* unistd.h */ From 804e0d5737eab47a6420781699f5652f046fbb6a Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Tue, 18 Feb 2025 08:14:40 -0700 Subject: [PATCH 226/253] Copyright block with author list (CMakeLists.txt and *.cmake only) in chronogical order --- CMakeLists.txt | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a54782de085..8f5ca728883 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,11 +1,19 @@ -#[===========================================================================[ -AUTHOR(S): Rashad Kanavath -PURPOSE: GRASS GIS root that adds options to activate/deactivate - 3rd party libraries -COPYRIGHT: (C) 2020-2022 by the GRASS Development Team - This program is free software under the GPL (>=v2) - Read the file COPYING that comes with GRASS for details. -#]===========================================================================] +################################################################################ +# +# AUTHOR(S): Rashad Kanavath (original author), +# Markus Neteler, Loïc Bartoletti, Aaron Saw, Nicklas Larsson, +# Huidae Cho, Mahesh Maddineni, Kandel Nelson +# +# PURPOSE: CMakeLists.txt root that adds options to activate/deactivate +# 3rd party libraries +# +# COPYRIGHT: (C) 2020-2025 by the GRASS Development Team +# +# This program is free software under the GNU General Public +# License (>=v2). Read the file COPYING that comes with GRASS +# for details. +# +################################################################################ cmake_minimum_required(VERSION 3.16) set(CMAKE_DISABLE_IN_SOURCE_BUILD ON) From 5174435c99ab78a3ad4889220e172cc5e25f53af Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Tue, 18 Feb 2025 08:36:34 -0700 Subject: [PATCH 227/253] Restore ssize_t for raster/r.coin/format.c --- raster/r.coin/format.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/raster/r.coin/format.c b/raster/r.coin/format.c index 5101e5a5f2a..412e2d0c4c3 100644 --- a/raster/r.coin/format.c +++ b/raster/r.coin/format.c @@ -27,7 +27,7 @@ int format_double(double v, char *buf, int n) sprintf(fmt, "%%%d.2lf", n); sprintf(buf, fmt, v); - for (k = n; (size_t)strlen(buf) > n; k--) { + for (k = n; (ssize_t)strlen(buf) > n; k--) { sprintf(fmt, "%%%d.%dg", n, k); sprintf(buf, fmt, v); } From e56dfc11236eb92671b2b49ae4d4364a6cc13e0f Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Tue, 18 Feb 2025 08:39:55 -0700 Subject: [PATCH 228/253] Add newline at the end of msvc/strings.h --- msvc/strings.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/msvc/strings.h b/msvc/strings.h index dcf9ed87b7f..12d39f1a473 100644 --- a/msvc/strings.h +++ b/msvc/strings.h @@ -2,4 +2,4 @@ #ifndef _INC_STRINGS_H #define _INC_STRINGS_H 1 #include -#endif \ No newline at end of file +#endif From f05e43820d80e990cc706b2a089eb519077716df Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Tue, 18 Feb 2025 08:51:11 -0700 Subject: [PATCH 229/253] Remove #if 0 block from raster/r.sun/main.c; min()/max() not used at all --- raster/r.sun/main.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/raster/r.sun/main.c b/raster/r.sun/main.c index 7311fe8b05a..4ddd6fa6ff8 100644 --- a/raster/r.sun/main.c +++ b/raster/r.sun/main.c @@ -117,10 +117,6 @@ struct History hist; int INPUT_part(int offset, double *zmax); int OUTGR(void); -#if 0 -int min(int, int); -int max(int, int); -#endif /*void cube(int, int); void (*func) (int, int); */ From 61a526f289b1461f96ea7076ef2162f40a503bb8 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Tue, 18 Feb 2025 09:10:53 -0700 Subject: [PATCH 230/253] r.mapcalc: Move columns to evaluate.c --- raster/r.mapcalc/evaluate.c | 2 +- raster/r.mapcalc/map.c | 1 - raster/r.mapcalc/map3.c | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/raster/r.mapcalc/evaluate.c b/raster/r.mapcalc/evaluate.c index d8eadc73731..e5c2dcdd9d7 100644 --- a/raster/r.mapcalc/evaluate.c +++ b/raster/r.mapcalc/evaluate.c @@ -13,7 +13,7 @@ /****************************************************************************/ int current_depth, current_row; -int depths, rows; +int depths, rows, columns; /* Local variables for map management */ static expression **map_list = NULL; diff --git a/raster/r.mapcalc/map.c b/raster/r.mapcalc/map.c index 118453c0610..65bb85df170 100644 --- a/raster/r.mapcalc/map.c +++ b/raster/r.mapcalc/map.c @@ -22,7 +22,6 @@ /****************************************************************************/ static void prepare_region_from_maps(expression **, int, int); -int columns; struct Cell_head current_region2; void setup_region(void) diff --git a/raster/r.mapcalc/map3.c b/raster/r.mapcalc/map3.c index e8c5fb77023..c9683148275 100644 --- a/raster/r.mapcalc/map3.c +++ b/raster/r.mapcalc/map3.c @@ -18,7 +18,6 @@ /****************************************************************************/ static void prepare_region_from_maps(expression **, int, int); -int columns; RASTER3D_Region current_region3; void setup_region(void) From 8be66ad743066c73eb781e2024be53f2884ed30e Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Tue, 18 Feb 2025 12:32:01 -0700 Subject: [PATCH 231/253] Remove test for GDAL<2.3 (not supported now) --- include/grass/defs/gis.h | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/include/grass/defs/gis.h b/include/grass/defs/gis.h index f6a2c911ec9..8bacb260cc2 100644 --- a/include/grass/defs/gis.h +++ b/include/grass/defs/gis.h @@ -72,27 +72,6 @@ #define RELDIR "?" #endif -/* GDAL < 2.3 does not define HAVE_LONG_LONG when compiled with - * Visual Studio as for OSGeo4W, even though long long is available, - * and GIntBig falls back to long which is on Windows always 4 bytes. - * This patch ensures that GIntBig is defined as long long (8 bytes) - * if GDAL is compiled with Visual Studio and GRASS is compiled with - * MinGW. This patch must be applied before other GDAL/OGR headers are - * included, as done by gprojects.h and vector.h */ -#ifndef _MSC_VER -#if defined(__MINGW32__) && HAVE_GDAL -#include -#if GDAL_VERSION_NUM < 2030000 -#include -/* HAVE_LONG_LONG_INT comes from GRASS - * HAVE_LONG_LONG comes from GDAL */ -#if HAVE_LONG_LONG_INT && !defined(HAVE_LONG_LONG) -#define HAVE_LONG_LONG 1 -#endif -#endif -#endif -#endif /* _MSC_VER */ - /* adj_cellhd.c */ void G_adjust_Cell_head(struct Cell_head *, int, int); void G_adjust_Cell_head3(struct Cell_head *, int, int, int); From 310c7e576e8b0d344efc419478e1b384da63aaa0 Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Wed, 19 Feb 2025 09:07:46 +0100 Subject: [PATCH 232/253] CI: update actions/cache to 4.2.1 --- .github/workflows/cmake.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index bcc59d1380d..acfa9e4e97c 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -36,7 +36,7 @@ jobs: - name: Checkout GRASS uses: actions/checkout@v4.1.1 - name: Setup cache - uses: actions/cache@v4.0.2 + uses: actions/cache@v4.2.1 id: cache with: path: ${{ github.workspace }}/.ccache From c63eb259ed0171a30f97d591eada4a526675e011 Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Wed, 19 Feb 2025 09:15:36 +0100 Subject: [PATCH 233/253] Apply clang-format --- lib/gmath/la.c | 8 ++++---- lib/rst/interp_float/interpf.h | 4 ++-- raster/r.horizon/main.c | 2 +- raster/r.univar/r.univar_main.c | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/gmath/la.c b/lib/gmath/la.c index 13b4d581b26..8cad2028241 100644 --- a/lib/gmath/la.c +++ b/lib/gmath/la.c @@ -32,10 +32,10 @@ #include #if defined(_MSC_VER) - #include - #define LAPACK_COMPLEX_CUSTOM - #define lapack_complex_float _Fcomplex - #define lapack_complex_double _Dcomplex +#include +#define LAPACK_COMPLEX_CUSTOM +#define lapack_complex_float _Fcomplex +#define lapack_complex_double _Dcomplex #endif #include diff --git a/lib/rst/interp_float/interpf.h b/lib/rst/interp_float/interpf.h index 1ab6344c37c..241c4937e91 100644 --- a/lib/rst/interp_float/interpf.h +++ b/lib/rst/interp_float/interpf.h @@ -35,8 +35,8 @@ GRASS_INTERPFL_EXPORT struct Map_info Map2; GRASS_INTERPFL_EXPORT struct field_info *ff; GRASS_INTERPFL_EXPORT int count; #else -GRASS_INTERPFL_EXPORT extern struct line_pnts *Pnts; -GRASS_INTERPFL_EXPORT extern struct line_cats *Cats2; +GRASS_INTERPFL_EXPORT extern struct line_pnts *Pnts; +GRASS_INTERPFL_EXPORT extern struct line_cats *Cats2; GRASS_INTERPFL_EXPORT extern dbDriver *driver2; GRASS_INTERPFL_EXPORT extern dbString sql2; GRASS_INTERPFL_EXPORT extern struct Map_info Map2; diff --git a/raster/r.horizon/main.c b/raster/r.horizon/main.c index 809d12b538a..4b675b13911 100644 --- a/raster/r.horizon/main.c +++ b/raster/r.horizon/main.c @@ -1187,7 +1187,7 @@ void calculate_raster_mode(const Settings *settings, const Geometry *geometry, G_message( _("Calculating map %01d of %01d (angle %.2f, raster map <%s>)"), (k + 1), arrayNumInt, angle_deg, shad_filename); - + int j; #pragma omp parallel for schedule(static, 1) default(shared) diff --git a/raster/r.univar/r.univar_main.c b/raster/r.univar/r.univar_main.c index e1890620cb8..7a3cbc0c7c4 100644 --- a/raster/r.univar/r.univar_main.c +++ b/raster/r.univar/r.univar_main.c @@ -395,7 +395,7 @@ static void process_raster(univar_stat *stats, thread_workspace *tw, zd->bucket.fcells = NULL; zd->bucket.dcells = NULL; } - + #pragma omp for for (row = 0; row < rows; row++) { thread_workspace *w = &tw[t_id]; From 5a8f4accd2266af04a7d9f99eaedef6617a05fdb Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Wed, 19 Feb 2025 11:27:43 +0100 Subject: [PATCH 234/253] CI: update ubuntu and python; drop ccache --- .github/workflows/cmake.yml | 33 ++++++++------------------------- 1 file changed, 8 insertions(+), 25 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index acfa9e4e97c..6262832e612 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -28,23 +28,16 @@ permissions: jobs: build-cmake: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 env: - CMAKE_OPTIONS: -DPython_LOOKUP_VERSION=3.8 -DUSE_CCACHE=ON - cache-name: cmake-ubuntu-20.04 + PythonVersion: 3.9 steps: - name: Checkout GRASS uses: actions/checkout@v4.1.1 - - name: Setup cache - uses: actions/cache@v4.2.1 - id: cache + - name: Set up Python + uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 with: - path: ${{ github.workspace }}/.ccache - key: "${{ env.cache-name }}-${{ runner.os }}-${{ github.base_ref }}\ - ${{ github.ref_name }}-${{ github.run_id }}" - restore-keys: | - ${{ env.cache-name }}-${{ runner.os }}-${{ github.base_ref }} - ${{ env.cache-name }}-${{ runner.os }} + python-version: ${{ env.PythonVersion }} - name: Install CMake 3.16.0 run: | cd ${GITHUB_WORKSPACE} @@ -59,7 +52,7 @@ jobs: sudo add-apt-repository -y ppa:ubuntugis/ubuntugis-unstable sudo apt-get update sudo apt-get install -y -q build-essential \ - flex make bison gcc libgcc1 g++ ccache \ + flex make bison gcc libgcc1 g++ \ python3 python3-dev \ python3-opengl python3-wxgtk4.0 \ python3-dateutil libgsl-dev python3-numpy \ @@ -72,14 +65,8 @@ jobs: libboost-thread-dev libboost-program-options-dev libpdal-dev\ subversion libzstd-dev checkinstall \ libglu1-mesa-dev libxmu-dev \ - ghostscript wget -y make ccache g++ + ghostscript wget -y make g++ - run: python -m pip install ninja - - name: Configure ccache - run: | - echo CCACHE_BASEDIR=$PWD >> ${GITHUB_ENV} - echo CCACHE_DIR=$PWD/.ccache >> ${GITHUB_ENV} - echo CCACHE_MAXSIZE=250M >> ${GITHUB_ENV} - ccache -z working-directory: ${{ github.workspace }} - name: Print build environment variables shell: bash -el {0} @@ -93,9 +80,7 @@ jobs: - name: Configure run: | cmake ${CMAKE_OPTIONS} -S $GITHUB_WORKSPACE -B $GITHUB_WORKSPACE/build -G Ninja \ - -DCMAKE_INSTALL_PREFIX=$HOME/install -DWITH_NLS=OFF \ - -DCMAKE_C_FLAGS="-I/usr/include -I/usr/include/gdal" \ - -DCMAKE_CXX_FLAGS="-I/usr/include -I/usr/include/gdal" + -DCMAKE_INSTALL_PREFIX=$HOME/install -DWITH_NLS=OFF - name: Print CMakeCache.txt shell: bash -el {0} run: | @@ -116,5 +101,3 @@ jobs: run: .github/workflows/test_simple.sh - name: Run tests run: .github/workflows/test_thorough.sh --config .gunittest.cfg - - name: ccache statistics - run: ccache -s From f166534d68b9c9ec2e387cb8f269ebaddb39c0fe Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Wed, 19 Feb 2025 12:48:08 +0100 Subject: [PATCH 235/253] CI: use dependencies from ubuntu workflow --- .github/workflows/cmake.yml | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 6262832e612..d4c3fb0387f 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -49,23 +49,10 @@ jobs: cmake --version - name: Install dependencies run: | - sudo add-apt-repository -y ppa:ubuntugis/ubuntugis-unstable - sudo apt-get update - sudo apt-get install -y -q build-essential \ - flex make bison gcc libgcc1 g++ \ - python3 python3-dev \ - python3-opengl python3-wxgtk4.0 \ - python3-dateutil libgsl-dev python3-numpy \ - wx3.0-headers wx-common libwxgtk3.0-gtk3-dev \ - libwxbase3.0-dev libbz2-dev zlib1g-dev gettext \ - libtiff5-dev libpnglite-dev libcairo2 libcairo2-dev \ - sqlite3 libsqlite3-dev \ - libpq-dev libreadline6-dev libfreetype6-dev \ - libfftw3-3 libfftw3-dev \ - libboost-thread-dev libboost-program-options-dev libpdal-dev\ - subversion libzstd-dev checkinstall \ - libglu1-mesa-dev libxmu-dev \ - ghostscript wget -y make g++ + sudo apt-get update -y + sudo apt-get install -y wget git gawk findutils + xargs -a <(awk '! /^ *(#|$)/' ".github/workflows/apt.txt") -r -- \ + sudo apt-get install -y --no-install-recommends --no-install-suggests - run: python -m pip install ninja working-directory: ${{ github.workspace }} - name: Print build environment variables From 0be5f8381f463fa0830e4b7799cdc61d336ce4b7 Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Wed, 19 Feb 2025 15:36:31 +0100 Subject: [PATCH 236/253] use cblas and lapacke --- CMakeLists.txt | 4 +- cmake/modules/CheckDependentLibraries.cmake | 55 ++++++++++++--------- lib/CMakeLists.txt | 8 +-- lib/vector/CMakeLists.txt | 4 +- 4 files changed, 41 insertions(+), 30 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8f5ca728883..99afb5018c0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -120,8 +120,8 @@ option(WITH_NLS "Build with NLS support" ${nls_default_option_enabled}) # Computing options option(WITH_FFTW "Build with FFTW support" ON) -option(WITH_BLAS "Build with BLAS support" ON) -option(WITH_LAPACK "Build with LAPACK support" ON) +option(WITH_CBLAS "Build with CBLAS support" ON) +option(WITH_LAPACKE "Build with LAPACKE support" ON) option(WITH_OPENMP "Build with OpenMP support" ON) # Data format options diff --git a/cmake/modules/CheckDependentLibraries.cmake b/cmake/modules/CheckDependentLibraries.cmake index e42c6a8acb8..d2fb052c779 100644 --- a/cmake/modules/CheckDependentLibraries.cmake +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -256,28 +256,39 @@ if(WIN32) set(BLA_PREFER_PKGCONFIG ON) set(BLA_PKGCONFIG_BLAS "openblas") set(BLA_PKGCONFIG_LAPACK "openblas") -endif() - -if(WITH_BLAS) - find_package(BLAS REQUIRED) - if(BLAS_FOUND) - add_library(BLAS INTERFACE IMPORTED GLOBAL) - set_property(TARGET BLAS PROPERTY INTERFACE_LINK_LIBRARIES - ${BLAS_LIBRARIES}) - set_property(TARGET BLAS PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${BLAS_INCLUDE_DIRS}) +else() + set(BLA_PKGCONFIG_BLAS "blas-netlib") + set(BLA_PKGCONFIG_LAPACK "lapacke") +endif() + +if(WITH_CBLAS) + # find_package(CBLAS CONFIG REQUIRED) + pkg_check_modules(CBLAS QUIET ${BLA_PKGCONFIG_BLAS}) + if (CBLAS_FOUND) + add_library(CBLAS INTERFACE IMPORTED GLOBAL) + set_property(TARGET CBLAS PROPERTY INTERFACE_LINK_LIBRARIES + ${CBLAS_LIBRARIES}) + set_property(TARGET CBLAS PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${CBLAS_INCLUDEDIR}) endif() + include(FindPackageHandleStandardArgs) + find_package_handle_standard_args(CBLAS REQUIRED_VARS CBLAS_LIBRARIES + CBLAS_INCLUDEDIR) + endif() -if(WITH_LAPACK) - find_package(LAPACK REQUIRED) - if(LAPACK_FOUND) - add_library(LAPACK INTERFACE IMPORTED GLOBAL) - set_property(TARGET LAPACK PROPERTY INTERFACE_LINK_LIBRARIES - ${LAPACK_LIBRARIES}) - set_property(TARGET LAPACK PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ${LAPACK_INCLUDE_DIRS}) +if(WITH_LAPACKE) + # find_package(LAPACKE CONFIG REQUIRED) + pkg_check_modules(LAPACKE QUIET ${BLA_PKGCONFIG_LAPACK}) + if(LAPACKE_FOUND) + add_library(LAPACKE INTERFACE IMPORTED GLOBAL) + set_property(TARGET LAPACKE PROPERTY INTERFACE_LINK_LIBRARIES + ${LAPACKE_LIBRARIES}) + set_property(TARGET LAPACKE PROPERTY INTERFACE_INCLUDE_DIRECTORIES + ${LAPACKE_INCLUDEDIR}) endif() + find_package_handle_standard_args(LAPACKE REQUIRED_VARS LAPACKE_LIBRARIES + LAPACKE_INCLUDEDIR) endif() if(WITH_OPENMP) @@ -379,10 +390,10 @@ check_target(FREETYPE HAVE_FT2BUILD_H) # set(CMAKE_REQUIRED_INCLUDES "${FFTW_INCLUDE_DIR}") no target ATLAS in # thirdpary/CMakeLists.txt check_target(ATLAS HAVE_LIBATLAS) -check_target(BLAS HAVE_LIBBLAS) -check_target(BLAS HAVE_CBLAS_H) -check_target(LAPACK HAVE_LIBLAPACK) -check_target(LAPACK HAVE_CLAPACK_H) +check_target(CBLAS HAVE_LIBBLAS) +check_target(CBLAS HAVE_CBLAS_H) +check_target(LAPACKE HAVE_LIBLAPACK) +check_target(LAPACKE HAVE_CLAPACK_H) check_target(TIFF HAVE_TIFFIO_H) check_target(NETCDF HAVE_NETCDF) check_target(GEOS HAVE_GEOS) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index effe54a5e4f..fdd6f4a40bc 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -32,8 +32,8 @@ build_library_in_subdir( grass_gproj grass_parson) -if(TARGET LAPACK) - target_link_libraries(grass_raster PRIVATE LAPACK) +if(TARGET LAPACKE) + target_link_libraries(grass_raster PRIVATE LAPACKE) endif() if(CMAKE_SYSTEM_NAME MATCHES "Linux") @@ -58,8 +58,8 @@ build_library_in_subdir( "${use_math_DEFS}" OPTIONAL_DEPENDS FFTW - LAPACK - BLAS + LAPACKE + CBLAS OPENMP) build_library_in_subdir(linkm) diff --git a/lib/vector/CMakeLists.txt b/lib/vector/CMakeLists.txt index 083b489d8f7..61747521050 100644 --- a/lib/vector/CMakeLists.txt +++ b/lib/vector/CMakeLists.txt @@ -29,8 +29,8 @@ if(TARGET POSTGRES) target_link_libraries(grass_vector PRIVATE POSTGRES) endif() -if(TARGET LAPACK) - target_link_libraries(grass_vector PRIVATE LAPACK) +if(TARGET LAPACKE) + target_link_libraries(grass_vector PRIVATE LAPACKE) endif() build_library_in_subdir( From 2e2fc61a4044e0d95e47c66bf50071249b6583f1 Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Wed, 19 Feb 2025 18:17:00 +0100 Subject: [PATCH 237/253] remove out-commented code --- CMakeLists.txt | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 99afb5018c0..1f50b0ccc61 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -179,16 +179,6 @@ endif() set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${GRASS_INSTALL_LIBDIR}") set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) -#[[ Probably not needed, but leave it here in case... -set(CMAKE_SKIP_BUILD_RPATH FALSE) -set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) -list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES - "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir) -if("${isSystemDir}" STREQUAL "-1") - set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") -endif() -]] - # TODO: a proper fix to this workaround if(WITH_FHS) file(CREATE_LINK ${OUTDIR}/${GRASS_INSTALL_DEMODIR} From 8525f5ff153286496f579e6e4f02784155cf92e3 Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Wed, 19 Feb 2025 18:32:35 +0100 Subject: [PATCH 238/253] CI: some workflow file clean up, use Python 3.12 [skip ci] --- .github/workflows/cmake.yml | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index d4c3fb0387f..d317126d054 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -1,6 +1,3 @@ -# inspired by "build GDAL library and to run test with CMake" -# from https://github.com/OSGeo/gdal/blob/master/.github/workflows/cmake_builds.yml - --- name: CMake @@ -23,14 +20,15 @@ env: CMAKE_UNITY_BUILD: OFF permissions: - contents: read # to fetch code (actions/checkout) + contents: read jobs: build-cmake: runs-on: ubuntu-22.04 env: - PythonVersion: 3.9 + PythonVersion: 3.12 + CMakeVersion: "3.16.0" steps: - name: Checkout GRASS uses: actions/checkout@v4.1.1 @@ -38,13 +36,13 @@ jobs: uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 with: python-version: ${{ env.PythonVersion }} - - name: Install CMake 3.16.0 + - name: Install CMake run: | cd ${GITHUB_WORKSPACE} wget https://github.com/Kitware/CMake/releases/download/v3.16.0/cmake-3.16.0-Linux-x86_64.tar.gz - tar xzf cmake-3.16.0-Linux-x86_64.tar.gz - echo "CMAKE_DIR=$GITHUB_WORKSPACE/cmake-3.16.0-Linux-x86_64/bin" >> $GITHUB_ENV - echo "$GITHUB_WORKSPACE/cmake-3.16.0-Linux-x86_64/bin" >> $GITHUB_PATH + tar xzf cmake-${{ env.CMakeVersion }}-Linux-x86_64.tar.gz + echo "CMAKE_DIR=$GITHUB_WORKSPACE/cmake-${{ env.CMakeVersion }}-Linux-x86_64/bin" >> $GITHUB_ENV + echo "$GITHUB_WORKSPACE/cmake-${{ env.CMakeVersion }}-Linux-x86_64/bin" >> $GITHUB_PATH - run: | cmake --version - name: Install dependencies From 94673f556cad4f63b39e55438597b67a61c97ee2 Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Wed, 19 Feb 2025 18:48:28 +0100 Subject: [PATCH 239/253] CI: avoid hardcoded arch version for cmake [skip ci] --- .github/workflows/cmake.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index d317126d054..503c311d2ca 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -39,10 +39,11 @@ jobs: - name: Install CMake run: | cd ${GITHUB_WORKSPACE} - wget https://github.com/Kitware/CMake/releases/download/v3.16.0/cmake-3.16.0-Linux-x86_64.tar.gz - tar xzf cmake-${{ env.CMakeVersion }}-Linux-x86_64.tar.gz - echo "CMAKE_DIR=$GITHUB_WORKSPACE/cmake-${{ env.CMakeVersion }}-Linux-x86_64/bin" >> $GITHUB_ENV - echo "$GITHUB_WORKSPACE/cmake-${{ env.CMakeVersion }}-Linux-x86_64/bin" >> $GITHUB_PATH + arch=$(uname -s)-$(uname -m) + wget https://github.com/Kitware/CMake/releases/download/v3.16.0/cmake-3.16.0-${os}-${arch}.tar.gz + tar xzf cmake-${{ env.CMakeVersion }}-${arch}.tar.gz + echo "CMAKE_DIR=$GITHUB_WORKSPACE/cmake-${{ env.CMakeVersion }}-${arch}/bin" >> $GITHUB_ENV + echo "$GITHUB_WORKSPACE/cmake-${{ env.CMakeVersion }}-${arch}/bin" >> $GITHUB_PATH - run: | cmake --version - name: Install dependencies From c3022d88f8f8edcdd86664a8fd5e4f7a357e265f Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Wed, 19 Feb 2025 20:00:39 +0100 Subject: [PATCH 240/253] CI: fix typo [skip ci] --- .github/workflows/cmake.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 503c311d2ca..01904af0a7b 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -40,7 +40,7 @@ jobs: run: | cd ${GITHUB_WORKSPACE} arch=$(uname -s)-$(uname -m) - wget https://github.com/Kitware/CMake/releases/download/v3.16.0/cmake-3.16.0-${os}-${arch}.tar.gz + wget https://github.com/Kitware/CMake/releases/download/v3.16.0/cmake-3.16.0-${arch}.tar.gz tar xzf cmake-${{ env.CMakeVersion }}-${arch}.tar.gz echo "CMAKE_DIR=$GITHUB_WORKSPACE/cmake-${{ env.CMakeVersion }}-${arch}/bin" >> $GITHUB_ENV echo "$GITHUB_WORKSPACE/cmake-${{ env.CMakeVersion }}-${arch}/bin" >> $GITHUB_PATH From d803b44aed1e876043be9a0b60dbb917d47081b0 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Wed, 19 Feb 2025 21:49:22 -0700 Subject: [PATCH 241/253] Rename SET_GISBASE to GISBASE --- include/Make/Install.make | 2 +- lib/init/CMakeLists.txt | 6 +++--- lib/init/Makefile | 2 +- lib/init/grass.py | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/include/Make/Install.make b/include/Make/Install.make index 1fc89f2ba70..b9a5e45e0fc 100644 --- a/include/Make/Install.make +++ b/include/Make/Install.make @@ -122,7 +122,7 @@ $(DESTDIR)$(INST_DIR) $(DESTDIR)$(UNIX_BIN): $(MAKE_DIR_CMD) $@ $(STARTUP): $(ARCH_DISTDIR)/$(GRASS_NAME).tmp - sed -e 's#'@SET_GISBASE@'#'$(INST_DIR)'#g' \ + sed -e 's#'@GISBASE@'#'$(INST_DIR)'#g' \ -e 's#'@LD_LIBRARY_PATH_VAR@'#'$(LD_LIBRARY_PATH_VAR)'#g' \ -e 's#'@CONFIG_PROJSHARE@'#'$(PROJSHARE)'#g' \ $< > $@ diff --git a/lib/init/CMakeLists.txt b/lib/init/CMakeLists.txt index ad1e6ab1fb7..a3801568c5f 100644 --- a/lib/init/CMakeLists.txt +++ b/lib/init/CMakeLists.txt @@ -99,12 +99,12 @@ endif() ]==] # configure and install grass.py -set(SET_GISBASE ${RUNTIME_GISBASE}) +set(GISBASE ${RUNTIME_GISBASE}) configure_file(grass.py ${OUTDIR}/${CMAKE_INSTALL_BINDIR}/${START_UP} @ONLY) -set(SET_GISBASE ${GISBASE}) +set(GISBASE ${GISBASE}) configure_file(grass.py ${CMAKE_CURRENT_BINARY_DIR}/${START_UP} @ONLY) -unset(SET_GISBASE) +unset(GISBASE) install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${START_UP} DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/lib/init/Makefile b/lib/init/Makefile index c340f3a11d6..2db853fce95 100644 --- a/lib/init/Makefile +++ b/lib/init/Makefile @@ -69,7 +69,7 @@ $(ARCH_BINDIR)/$(START_UP): grass.py endif rm -f $@ sed \ - -e 's#@SET_GISBASE@#$(RUN_GISBASE)#' \ + -e 's#@GISBASE@#$(RUN_GISBASE)#' \ -e 's#@GRASS_VERSION_NUMBER@#$(GRASS_VERSION_NUMBER)#' \ -e 's#@GRASS_VERSION_MAJOR@#$(GRASS_VERSION_MAJOR)#' \ -e 's#@GRASS_VERSION_MINOR@#$(GRASS_VERSION_MINOR)#' \ diff --git a/lib/init/grass.py b/lib/init/grass.py index 1eb3f741166..9d3bb2bb8a6 100755 --- a/lib/init/grass.py +++ b/lib/init/grass.py @@ -92,7 +92,7 @@ if "GISBASE" in os.environ and len(os.getenv("GISBASE")) > 0: GISBASE = os.path.normpath(os.environ["GISBASE"]) else: - GISBASE = os.path.normpath("@SET_GISBASE@") + GISBASE = os.path.normpath("@GISBASE@") os.environ["GISBASE"] = GISBASE CMD_NAME = "@START_UP@" GRASS_VERSION = "@GRASS_VERSION_NUMBER@" From e704ce24da93dc255a9b7631cc46892000538d5d Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Thu, 20 Feb 2025 09:15:22 +0100 Subject: [PATCH 242/253] Revert "Rename SET_GISBASE to GISBASE" This reverts commit ac54e2c5717c8fbb263ad9fd0f2be63c3b284bce. --- include/Make/Install.make | 2 +- lib/init/CMakeLists.txt | 6 +++--- lib/init/Makefile | 2 +- lib/init/grass.py | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/include/Make/Install.make b/include/Make/Install.make index b9a5e45e0fc..1fc89f2ba70 100644 --- a/include/Make/Install.make +++ b/include/Make/Install.make @@ -122,7 +122,7 @@ $(DESTDIR)$(INST_DIR) $(DESTDIR)$(UNIX_BIN): $(MAKE_DIR_CMD) $@ $(STARTUP): $(ARCH_DISTDIR)/$(GRASS_NAME).tmp - sed -e 's#'@GISBASE@'#'$(INST_DIR)'#g' \ + sed -e 's#'@SET_GISBASE@'#'$(INST_DIR)'#g' \ -e 's#'@LD_LIBRARY_PATH_VAR@'#'$(LD_LIBRARY_PATH_VAR)'#g' \ -e 's#'@CONFIG_PROJSHARE@'#'$(PROJSHARE)'#g' \ $< > $@ diff --git a/lib/init/CMakeLists.txt b/lib/init/CMakeLists.txt index a3801568c5f..ad1e6ab1fb7 100644 --- a/lib/init/CMakeLists.txt +++ b/lib/init/CMakeLists.txt @@ -99,12 +99,12 @@ endif() ]==] # configure and install grass.py -set(GISBASE ${RUNTIME_GISBASE}) +set(SET_GISBASE ${RUNTIME_GISBASE}) configure_file(grass.py ${OUTDIR}/${CMAKE_INSTALL_BINDIR}/${START_UP} @ONLY) -set(GISBASE ${GISBASE}) +set(SET_GISBASE ${GISBASE}) configure_file(grass.py ${CMAKE_CURRENT_BINARY_DIR}/${START_UP} @ONLY) -unset(GISBASE) +unset(SET_GISBASE) install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${START_UP} DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/lib/init/Makefile b/lib/init/Makefile index 2db853fce95..c340f3a11d6 100644 --- a/lib/init/Makefile +++ b/lib/init/Makefile @@ -69,7 +69,7 @@ $(ARCH_BINDIR)/$(START_UP): grass.py endif rm -f $@ sed \ - -e 's#@GISBASE@#$(RUN_GISBASE)#' \ + -e 's#@SET_GISBASE@#$(RUN_GISBASE)#' \ -e 's#@GRASS_VERSION_NUMBER@#$(GRASS_VERSION_NUMBER)#' \ -e 's#@GRASS_VERSION_MAJOR@#$(GRASS_VERSION_MAJOR)#' \ -e 's#@GRASS_VERSION_MINOR@#$(GRASS_VERSION_MINOR)#' \ diff --git a/lib/init/grass.py b/lib/init/grass.py index 9d3bb2bb8a6..1eb3f741166 100755 --- a/lib/init/grass.py +++ b/lib/init/grass.py @@ -92,7 +92,7 @@ if "GISBASE" in os.environ and len(os.getenv("GISBASE")) > 0: GISBASE = os.path.normpath(os.environ["GISBASE"]) else: - GISBASE = os.path.normpath("@GISBASE@") + GISBASE = os.path.normpath("@SET_GISBASE@") os.environ["GISBASE"] = GISBASE CMD_NAME = "@START_UP@" GRASS_VERSION = "@GRASS_VERSION_NUMBER@" From 6171042b12ab5b999d0153d01b92411f0cfbd340 Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Thu, 20 Feb 2025 11:37:41 +0100 Subject: [PATCH 243/253] lib/ogsf: remove unchecked, unused OPENGL_GLU_FOUND and OpenGL_GLX_FOUND --- include/config.h.cmake.in | 6 ------ lib/CMakeLists.txt | 2 +- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/include/config.h.cmake.in b/include/config.h.cmake.in index 55c1da08e3d..718877f5bad 100644 --- a/include/config.h.cmake.in +++ b/include/config.h.cmake.in @@ -146,12 +146,6 @@ /* Define to 1 if you have the header file. */ #cmakedefine HAVE_OPENCL_OPENCL_H ${HAVE_OPENCL_OPENCL_H} -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_OPENGL_GLU_H ${HAVE_OPENGL_GLU_H} - -/* Define to 1 if you have the header file. */ -#cmakedefine HAVE_OPENGL_GL_H ${HAVE_OPENGL_GL_H} - /* Define to 1 if glXCreatePbuffer exists. */ #cmakedefine HAVE_PBUFFERS ${HAVE_PBUFFERS} diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index fdd6f4a40bc..dd40c017cd8 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -209,7 +209,7 @@ build_library_in_subdir(stats DEPENDS grass_gis grass_raster) build_library_in_subdir(arraystats DEPENDS grass_gis) -if(WITH_OPENGL AND OPENGL_GLU_FOUND AND OpenGL_GLX_FOUND) +if(WITH_OPENGL) build_library_in_subdir( ogsf DEPENDS From ddf59c742b41e620ccd71b48998cae18107b5b2c Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Thu, 20 Feb 2025 11:53:30 +0100 Subject: [PATCH 244/253] HAVE_PQCMDTUPLES is not used in code --- cmake/modules/CheckDependentLibraries.cmake | 17 ----------------- cmake/modules/Configure.cmake | 10 ---------- cmake/tests/have_pqcmdtuples.c | 9 --------- include/config.h.cmake.in | 3 --- 4 files changed, 39 deletions(-) delete mode 100644 cmake/tests/have_pqcmdtuples.c diff --git a/cmake/modules/CheckDependentLibraries.cmake b/cmake/modules/CheckDependentLibraries.cmake index d2fb052c779..e86062508f9 100644 --- a/cmake/modules/CheckDependentLibraries.cmake +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -398,23 +398,6 @@ check_target(TIFF HAVE_TIFFIO_H) check_target(NETCDF HAVE_NETCDF) check_target(GEOS HAVE_GEOS) -if(TARGET POSTGRES) - try_compile( - HAVE_PQCMDTUPLES ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_SOURCE_DIR}/cmake/tests/have_pqcmdtuples.c - CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:PATH=${PostgreSQL_INCLUDE_DIR}" "-w" - "-DLINK_LIBRARIES:STRING=${PostgreSQL_LIBRARY}" - OUTPUT_VARIABLE COMPILE_HAVE_PQCMDTUPLES) - if(NOT COMPILE_HAVE_PQCMDTUPLES) - message( - "Performing Test HAVE_PQCMDTUPLES - Failed\n COMPILE_OUTPUT:${COMPILE_HAVE_PQCMDTUPLES}\n" - ) - else() - message(STATUS "Performing Test HAVE_PQCMDTUPLES - Success") - set(HAVE_PQCMDTUPLES 1) - endif() -endif() - if(MSVC) check_target(PCRE HAVE_PCRE_H) endif() diff --git a/cmake/modules/Configure.cmake b/cmake/modules/Configure.cmake index eccbc7c7c10..23f99367057 100644 --- a/cmake/modules/Configure.cmake +++ b/cmake/modules/Configure.cmake @@ -53,16 +53,6 @@ endif() # check_target(FREETYPE HAVE_FT2BUILD_H) check_target(POSTGRES HAVE_POSTGRES) # check_target(ODBC HAVE_SQL_H) # -# if(TARGET POSTGRES) try_compile( HAVE_PQCMDTUPLES ${CMAKE_CURRENT_BINARY_DIR} -# ${CMAKE_SOURCE_DIR}/cmake/tests/have_pqcmdtuples.c CMAKE_FLAGS -# "-DINCLUDE_DIRECTORIES:PATH=${PostgreSQL_INCLUDE_DIR}" "-w" -# "-DLINK_LIBRARIES:STRING=${PostgreSQL_LIBRARY}" OUTPUT_VARIABLE -# COMPILE_HAVE_PQCMDTUPLES) if(NOT COMPILE_HAVE_PQCMDTUPLES) message( -# "Performing Test HAVE_PQCMDTUPLES - Failed\n -# COMPILE_OUTPUT:${COMPILE_HAVE_PQCMDTUPLES}\n" ) else() message(STATUS -# "Performing Test HAVE_PQCMDTUPLES - Success") set(HAVE_PQCMDTUPLES 1) endif() -# endif() -# # if(MSVC) check_target(PCRE HAVE_PCRE_H) endif() # # check_target(POSTGRES HAVE_LIBPQ_FE_H) diff --git a/cmake/tests/have_pqcmdtuples.c b/cmake/tests/have_pqcmdtuples.c deleted file mode 100644 index ad4ae92571d..00000000000 --- a/cmake/tests/have_pqcmdtuples.c +++ /dev/null @@ -1,9 +0,0 @@ -#include -int main() -{ - PGresult *res = NULL; - PGconn *conn = PQconnectdb(NULL); - res = PQexec(conn, NULL); - PQcmdTuples(res); - return 0; -} diff --git a/include/config.h.cmake.in b/include/config.h.cmake.in index 718877f5bad..19c9b36e3c6 100644 --- a/include/config.h.cmake.in +++ b/include/config.h.cmake.in @@ -164,9 +164,6 @@ /* Define to 1 if PostgreSQL is to be used. */ #cmakedefine HAVE_POSTGRES ${HAVE_POSTGRES} -/* Define to 1 if PQcmdTuples in lpq. */ -#cmakedefine HAVE_PQCMDTUPLES ${HAVE_PQCMDTUPLES} - /* Define to 1 if you have the header file. */ #cmakedefine HAVE_PROJ_API_H ${HAVE_PROJ_API_H} From 0e4f9e9114210f7b3c74360eee18de6fe5949cff Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Thu, 20 Feb 2025 11:55:14 +0100 Subject: [PATCH 245/253] add INTERFACE_LINK_DIRECTORIES to CBLAS and LAPACKE targets [skip ci] --- cmake/modules/CheckDependentLibraries.cmake | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cmake/modules/CheckDependentLibraries.cmake b/cmake/modules/CheckDependentLibraries.cmake index e86062508f9..617f9baed0c 100644 --- a/cmake/modules/CheckDependentLibraries.cmake +++ b/cmake/modules/CheckDependentLibraries.cmake @@ -268,13 +268,14 @@ if(WITH_CBLAS) add_library(CBLAS INTERFACE IMPORTED GLOBAL) set_property(TARGET CBLAS PROPERTY INTERFACE_LINK_LIBRARIES ${CBLAS_LIBRARIES}) + set_property(TARGET CBLAS PROPERTY INTERFACE_LINK_DIRECTORIES + ${CBLAS_LIBRARY_DIRS}) set_property(TARGET CBLAS PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${CBLAS_INCLUDEDIR}) endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(CBLAS REQUIRED_VARS CBLAS_LIBRARIES CBLAS_INCLUDEDIR) - endif() if(WITH_LAPACKE) @@ -284,6 +285,8 @@ if(WITH_LAPACKE) add_library(LAPACKE INTERFACE IMPORTED GLOBAL) set_property(TARGET LAPACKE PROPERTY INTERFACE_LINK_LIBRARIES ${LAPACKE_LIBRARIES}) + set_property(TARGET LAPACKE PROPERTY INTERFACE_LINK_DIRECTORIES + ${LAPACKE_LIBRARY_DIRS}) set_property(TARGET LAPACKE PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${LAPACKE_INCLUDEDIR}) endif() From b4da68b0907b7afb418c4b7250805b94c9be194f Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Thu, 20 Feb 2025 14:12:40 +0100 Subject: [PATCH 246/253] rename SET_GISBASE to GISBASE_INSTALL_PATH [skip ci] --- include/Make/Install.make | 2 +- lib/init/CMakeLists.txt | 6 +++--- lib/init/Makefile | 2 +- lib/init/grass.py | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/include/Make/Install.make b/include/Make/Install.make index 1fc89f2ba70..799a695e80d 100644 --- a/include/Make/Install.make +++ b/include/Make/Install.make @@ -122,7 +122,7 @@ $(DESTDIR)$(INST_DIR) $(DESTDIR)$(UNIX_BIN): $(MAKE_DIR_CMD) $@ $(STARTUP): $(ARCH_DISTDIR)/$(GRASS_NAME).tmp - sed -e 's#'@SET_GISBASE@'#'$(INST_DIR)'#g' \ + sed -e 's#'@GISBASE_INSTALL_PATH@'#'$(INST_DIR)'#g' \ -e 's#'@LD_LIBRARY_PATH_VAR@'#'$(LD_LIBRARY_PATH_VAR)'#g' \ -e 's#'@CONFIG_PROJSHARE@'#'$(PROJSHARE)'#g' \ $< > $@ diff --git a/lib/init/CMakeLists.txt b/lib/init/CMakeLists.txt index ad1e6ab1fb7..db0270a8143 100644 --- a/lib/init/CMakeLists.txt +++ b/lib/init/CMakeLists.txt @@ -99,12 +99,12 @@ endif() ]==] # configure and install grass.py -set(SET_GISBASE ${RUNTIME_GISBASE}) +set(GISBASE_INSTALL_PATH ${RUNTIME_GISBASE}) configure_file(grass.py ${OUTDIR}/${CMAKE_INSTALL_BINDIR}/${START_UP} @ONLY) -set(SET_GISBASE ${GISBASE}) +set(GISBASE_INSTALL_PATH ${GISBASE}) configure_file(grass.py ${CMAKE_CURRENT_BINARY_DIR}/${START_UP} @ONLY) -unset(SET_GISBASE) +unset(GISBASE_INSTALL_PATH) install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${START_UP} DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/lib/init/Makefile b/lib/init/Makefile index c340f3a11d6..99366b060a9 100644 --- a/lib/init/Makefile +++ b/lib/init/Makefile @@ -69,7 +69,7 @@ $(ARCH_BINDIR)/$(START_UP): grass.py endif rm -f $@ sed \ - -e 's#@SET_GISBASE@#$(RUN_GISBASE)#' \ + -e 's#@GISBASE_INSTALL_PATH@#$(RUN_GISBASE)#' \ -e 's#@GRASS_VERSION_NUMBER@#$(GRASS_VERSION_NUMBER)#' \ -e 's#@GRASS_VERSION_MAJOR@#$(GRASS_VERSION_MAJOR)#' \ -e 's#@GRASS_VERSION_MINOR@#$(GRASS_VERSION_MINOR)#' \ diff --git a/lib/init/grass.py b/lib/init/grass.py index 1eb3f741166..dcad7b4a57c 100755 --- a/lib/init/grass.py +++ b/lib/init/grass.py @@ -92,7 +92,7 @@ if "GISBASE" in os.environ and len(os.getenv("GISBASE")) > 0: GISBASE = os.path.normpath(os.environ["GISBASE"]) else: - GISBASE = os.path.normpath("@SET_GISBASE@") + GISBASE = os.path.normpath("@GISBASE_INSTALL_PATH@") os.environ["GISBASE"] = GISBASE CMD_NAME = "@START_UP@" GRASS_VERSION = "@GRASS_VERSION_NUMBER@" From 93f9ac9c91c54b30054f145a1af732d38b3bb80b Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Thu, 20 Feb 2025 15:49:56 +0100 Subject: [PATCH 247/253] lib/iostream: clean up includes in rtimer.cpp [skip ci] --- lib/iostream/rtimer.cpp | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/lib/iostream/rtimer.cpp b/lib/iostream/rtimer.cpp index c0d8a4fd9fc..19cb6f39535 100644 --- a/lib/iostream/rtimer.cpp +++ b/lib/iostream/rtimer.cpp @@ -33,16 +33,7 @@ * General Public License for more details. * * **************************************************************************/ -#if !defined(_MSC_VER) -#include -#endif - -#include -#include - -#if !defined(_MSC_VER) -#include -#endif +#include #include From 154c187a0cbbda3da8cb0d426196cf3887758179 Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Thu, 20 Feb 2025 15:54:57 +0100 Subject: [PATCH 248/253] back with HAVE_PNG_H [skip ci] --- lib/pngdriver/pngdriver.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/pngdriver/pngdriver.h b/lib/pngdriver/pngdriver.h index d86de42816b..24e7eb5c760 100644 --- a/lib/pngdriver/pngdriver.h +++ b/lib/pngdriver/pngdriver.h @@ -54,13 +54,17 @@ extern void read_image(void); extern void read_ppm(void); extern void read_pgm(void); extern void read_bmp(void); +#ifdef HAVE_PNG_H extern void read_png(void); +#endif extern void write_image(void); extern void write_ppm(void); extern void write_pgm(void); extern void write_bmp(void); +#ifdef HAVE_PNG_H extern void write_png(void); +#endif extern void png_init_color_table(void); extern unsigned int png_get_color(int, int, int, int); From ea0ebc4f600cfe800c4add896a041941ca1ffede Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Thu, 20 Feb 2025 17:20:55 +0100 Subject: [PATCH 249/253] lib/init: remove unused file env.sh and out-commented code [skip ci] --- lib/init/CMakeLists.txt | 95 ----------------------------------------- lib/init/env.sh | 10 ----- 2 files changed, 105 deletions(-) delete mode 100644 lib/init/env.sh diff --git a/lib/init/CMakeLists.txt b/lib/init/CMakeLists.txt index db0270a8143..683a194a0a9 100644 --- a/lib/init/CMakeLists.txt +++ b/lib/init/CMakeLists.txt @@ -11,7 +11,6 @@ if(WITH_DOCS) endif() # START_UP is the variable used in grass.py, grass.sh.in and grass.bat.in -# set(START_UP "grass${GRASS_VERSION_MAJOR}${GRASS_VERSION_MINOR}.py") set(START_UP "grass") if(WIN32) set(START_UP "${START_UP}.py") @@ -44,25 +43,12 @@ endif() mark_as_advanced(gdal_share_dir) file(TO_NATIVE_PATH "${gdal_share_dir}/gdal" GDAL_DATA) -#[==[ -if(MSVC) - find_path(geotiff_share_dir "epsg_csv" PATH_SUFFIXES share) - mark_as_advanced(geotiff_share_dir) - if(geotiff_share_dir) - file(TO_NATIVE_PATH "${geotiff_share_dir}/epsg_csv" GEOTIFF_CSV) - else() - message(FATAL_ERROR "Cannot find share/epsg_csv.") - endif() -endif() # MSVC -]==] get_filename_component(GDAL_DIR ${GDAL_LIBRARY} PATH) get_filename_component(GDAL_DIR ${GDAL_DIR} PATH) file(TO_NATIVE_PATH ${GDAL_DIR}/bin DEPS_DLL_PATH) list(APPEND DLL_PATH_LIST ${DEPS_DLL_PATH}) -# file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} GRASS_PYTHON) - # For install tree (first do install tree) set(LD_LIBRARY_PATH_VAR "LD_LIBRARY_PATH") @@ -72,32 +58,6 @@ elseif(WIN32) set(LD_LIBRARY_PATH_VAR "PATH") endif() -#[==[ SKIP THIS -if(WIN32) - set(app_data_dir $ENV{APPDATA}) - if(NOT EXISTS ${app_data_dir}) - # this can happen with some strange settings - message( - FATAL_ERROR - "The APPDATA variable is not set, ask your operating system support") - endif() - file(TO_NATIVE_PATH "${app_data_dir}/GRASS8" grass_config_dir) -else() - set(grass_config_dir "$ENV{HOME}/.grass8") -endif() - -file(TO_NATIVE_PATH "${CMAKE_INSTALL_PREFIX}" gisbase_init_dir) -message(STATUS "GISBASE (install) : ${gisbase_init_dir}") -message(STATUS "grass config directory (install): ${grass_config_dir}") - -# configure and install env.sh -if(NOT MSVC) - configure_file(env.sh ${CMAKE_CURRENT_BINARY_DIR}/bashrc @ONLY) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/bashrc - DESTINATION ${grass_config_dir}) -endif() -]==] - # configure and install grass.py set(GISBASE_INSTALL_PATH ${RUNTIME_GISBASE}) configure_file(grass.py ${OUTDIR}/${CMAKE_INSTALL_BINDIR}/${START_UP} @ONLY) @@ -109,53 +69,6 @@ unset(GISBASE_INSTALL_PATH) install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${START_UP} DESTINATION ${CMAKE_INSTALL_BINDIR}) -#[====================[ SKIP THIS -# configure and install grass wrapper script (grass.bat or grass.sh -configure_file(${script_input_file_name} - ${CMAKE_CURRENT_BINARY_DIR}/${script_file_name} @ONLY) -install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${script_file_name} - DESTINATION ${CMAKE_INSTALL_BINDIR}) - - -# For build tree -file(TO_NATIVE_PATH ${GISBASE} gisbase_init_dir) -file(TO_NATIVE_PATH "${GISBASE}/etc/config" grass_config_dir) - -if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.20) - configure_file( - ${script_input_file_name} - ${GISBASE}/${script_file_name} - FILE_PERMISSIONS - OWNER_READ - OWNER_WRITE - OWNER_EXECUTE - GROUP_READ - GROUP_EXECUTE - WORLD_READ - WORLD_EXECUTE - @ONLY) -else() - configure_file(${script_input_file_name} ${GISBASE}/${script_file_name} @ONLY) - if(UNIX OR MINGW) - if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.19) - file( - CHMOD - ${GISBASE}/${script_file_name} - FILE_PERMISSIONS - OWNER_READ - OWNER_WRITE - OWNER_EXECUTE - GROUP_READ - GROUP_EXECUTE - WORLD_READ - WORLD_EXECUTE) - else() - execute_process(COMMAND /bin/chmod 755 ${GISBASE}/${script_file_name}) - endif() - endif() -endif() -]====================] - file(TO_NATIVE_PATH "${OUTDIR}/${GISBASE_DIR}" gisbase_init_dir) file(COPY ${CMAKE_SOURCE_DIR}/demolocation/PERMANENT @@ -184,15 +97,7 @@ if(UNIX OR MINGW) endif() message(STATUS "GISBASE (build) : ${GISBASE_DIR}") message(STATUS "grass config directory (build): ${grass_config_dir}") -#[[ -if(NOT MSVC) - configure_file(env.sh ${grass_config_dir}/bashrc @ONLY) - message(STATUS "env variables: ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/config/bashrc") -endif() -]] -# configure_file(grass.py ${OUTDIR}/${GRASS_INSTALL_ETCDIR}/${START_UP} @ONLY) -# message(STATUS "Startup (build): ${GISBASE}/${script_file_name}") message(STATUS "gisrc (build): ${GISRC}") # finish installtree and buildtree configurations diff --git a/lib/init/env.sh b/lib/init/env.sh deleted file mode 100644 index 95eff198af5..00000000000 --- a/lib/init/env.sh +++ /dev/null @@ -1,10 +0,0 @@ -export GRASS_PROJSHARE=@GRASS_PROJSHARE@ -export PROJ_LIB=@PROJ_LIB@ -export GDAL_DATA=@GDAL_DATA@ -export GISBASE=@gisbase_init_dir@ -export GRASS_PYTHON=@GRASS_PYTHON@ -export GRASS_CONFIG_DIR=@grass_config_dir@ - -# export PYTHONHOME=$gisbase_init_dir\Python37 -# export FONTCONFIG_FILE=@gisbase_init_dir@\etc\fonts.conf -# export LD_LIBRARY_PATH=@DLL_PATH_LIST@:PATH% From 8cd6bd921ca5e9daeaec46e3dcd6489371249a9f Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Thu, 20 Feb 2025 17:29:07 +0100 Subject: [PATCH 250/253] revert code changes to lib/gis/ls_filter.c --- lib/gis/ls_filter.c | 91 ++++----------------------------------------- 1 file changed, 7 insertions(+), 84 deletions(-) diff --git a/lib/gis/ls_filter.c b/lib/gis/ls_filter.c index 03ac3109183..30d98490567 100644 --- a/lib/gis/ls_filter.c +++ b/lib/gis/ls_filter.c @@ -13,13 +13,10 @@ #include #include + #ifdef HAVE_REGEX_H -#include -#endif -#ifdef HAVE_PCRE_H -#include -#endif +#include struct buffer { char *buf; @@ -146,33 +143,14 @@ static int wc2regex(struct buffer *buf, const char *pat) static int re_filter(const char *filename, void *closure) { -#ifdef HAVE_REGEX_H regex_t *regex = closure; return filename[0] != '.' && regexec(regex, filename, 0, NULL, 0) == 0; -#endif -#ifdef HAVE_PCRE_H - const char *pcreErrorStr; - pcre_extra *pcreExtra; - int pcreExecRet; - pcre *pcre_regex = closure; - - /* Optimize the regex */ - pcreExtra = pcre_study(pcre_regex, 0, &pcreErrorStr); - pcreExecRet = pcre_exec(pcre_regex, pcreExtra, filename, - strlen(filename), /* length of string */ - 0, /* Start looking at this point */ - 0, /* OPTIONS */ - NULL, 0); /* Length of subStrVec */ - - return filename[0] != '.' && pcreExecRet == 0; -#endif } void *G_ls_regex_filter(const char *pat, int exclude, int extended, int ignorecase) { -#ifdef HAVE_REGEX_H regex_t *regex = G_malloc(sizeof(regex_t)); if (regcomp(regex, pat, @@ -188,57 +166,12 @@ void *G_ls_regex_filter(const char *pat, int exclude, int extended, G_set_ls_filter(re_filter, regex); return regex; -#endif - -#ifdef HAVE_PCRE_H - pcre *pcre_regex; - const char *pcreErrorStr; - int pcreErrorOffset; - - /* First, the regex string must be compiled */ - pcre_regex = pcre_compile(pat, 0, &pcreErrorStr, &pcreErrorOffset, NULL); - /* - if (regcomp(regex, pat, REG_NOSUB | - (extended ? REG_EXTENDED : 0) | - (ignorecase ? REG_ICASE : 0)) != 0) { - pcre_free(pcre_regex); - return NULL; - } - */ - if (exclude) - G_set_ls_exclude_filter(re_filter, pcre_regex); - else - G_set_ls_filter(re_filter, pcre_regex); - - /* First, the regex string must be compiled */ - pcre_regex = pcre_compile(pat, 0, &pcreErrorStr, &pcreErrorOffset, NULL); - /* - if (regcomp(regex, pat, REG_NOSUB | - (extended ? REG_EXTENDED : 0) | - (ignorecase ? REG_ICASE : 0)) != 0) { - pcre_free(pcre_regex); - return NULL; - } - */ - if (exclude) - G_set_ls_exclude_filter(re_filter, pcre_regex); - else - G_set_ls_filter(re_filter, pcre_regex); - - return pcre_regex; -#endif } void *G_ls_glob_filter(const char *pat, int exclude, int ignorecase) { struct buffer buf; - -#ifdef HAVE_REGEX_H regex_t *regex; -#endif -#ifdef HAVE_PCRE_H - pcre *pcre_regex; -#endif init(&buf); @@ -246,31 +179,21 @@ void *G_ls_glob_filter(const char *pat, int exclude, int ignorecase) fini(&buf); return NULL; } -#ifdef HAVE_REGEX_H + regex = G_ls_regex_filter(buf.buf, exclude, 1, ignorecase); -#endif -#ifdef HAVE_PCRE_H - pcre_regex = G_ls_regex_filter(buf.buf, exclude, 1, ignorecase); -#endif fini(&buf); -#ifdef HAVE_REGEX_H return regex; -#endif -#ifdef HAVE_PCRE_H - return pcre_regex; -#endif } void G_free_ls_filter(void *regex) { if (!regex) return; -#ifdef HAVE_REGEX_H + regfree(regex); -#endif -#ifdef HAVE_PCRE_H - pcre_free(regex); -#endif + G_free(regex); } + +#endif From 5760b071d33f8d4362e98a49d15ad70067eab05a Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Thu, 20 Feb 2025 17:36:56 +0100 Subject: [PATCH 251/253] use SPDX-License-Identifier [skip ci] --- CMakeLists.txt | 4 +--- cmake/ctypesgen.cmake | 4 ++-- cmake/locale_strings.cmake | 4 ++-- cmake/modules/build_gui_in_subdir.cmake | 4 ++-- cmake/modules/build_library_in_subdir.cmake | 4 ++-- cmake/modules/build_module.cmake | 4 ++-- cmake/modules/build_program.cmake | 4 ++-- cmake/modules/build_program_in_subdir.cmake | 4 ++-- cmake/modules/build_script_in_subdir.cmake | 4 ++-- cmake/modules/copy_python_files_in_subdir.cmake | 4 ++-- cmake/modules/get_host_arch.cmake | 4 ++-- cmake/modules/get_versions.cmake | 4 ++-- cmake/modules/repo_status.cmake | 4 ++-- msvc/creat.c | 3 +-- msvc/io.h | 3 +-- msvc/open.c | 3 +-- 16 files changed, 28 insertions(+), 33 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1f50b0ccc61..7636283bf8a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,9 +9,7 @@ # # COPYRIGHT: (C) 2020-2025 by the GRASS Development Team # -# This program is free software under the GNU General Public -# License (>=v2). Read the file COPYING that comes with GRASS -# for details. +# SPDX-License-Identifier: GPL-2.0-or-later # ################################################################################ diff --git a/cmake/ctypesgen.cmake b/cmake/ctypesgen.cmake index 2a8d3fdab4e..6664ba066f8 100644 --- a/cmake/ctypesgen.cmake +++ b/cmake/ctypesgen.cmake @@ -2,8 +2,8 @@ AUTHOR(S): Rashad Kanavath PURPOSE: Cmake building of lib/python/ctypes (TODO) COPYRIGHT: (C) 2020 by the GRASS Development Team - This program is free software under the GPL (>=v2) - Read the file COPYING that comes with GRASS for details. + +SPDX-License-Identifier: GPL-2.0-or-later #]] set(ENV{GISRC} diff --git a/cmake/locale_strings.cmake b/cmake/locale_strings.cmake index 24360d5e91b..d24b4af2727 100644 --- a/cmake/locale_strings.cmake +++ b/cmake/locale_strings.cmake @@ -3,8 +3,8 @@ AUTHOR(S): Rashad Kanavath PURPOSE: create translation strings for grass scripts environment. TODO use custom_command POST_BUILD directly COPYRIGHT: (C) 2020 by the GRASS Development Team - This program is free software under the GPL (>=v2) - Read the file COPYING that comes with GRASS for details. + +SPDX-License-Identifier: GPL-2.0-or-later PARAMS: BINARY_DIR ETCDIR diff --git a/cmake/modules/build_gui_in_subdir.cmake b/cmake/modules/build_gui_in_subdir.cmake index 543ae8c04f9..524ba99ecf9 100644 --- a/cmake/modules/build_gui_in_subdir.cmake +++ b/cmake/modules/build_gui_in_subdir.cmake @@ -2,8 +2,8 @@ AUTHOR(S): Rashad Kanavath PURPOSE: build_gui_in_subdir is the cmake function that builds g.gui.* modules COPYRIGHT: (C) 2020 by the GRASS Development Team - This program is free software under the GPL (>=v2) - Read the file COPYING that comes with GRASS for details. + +SPDX-License-Identifier: GPL-2.0-or-later #]] function(build_gui_in_subdir dir_name) diff --git a/cmake/modules/build_library_in_subdir.cmake b/cmake/modules/build_library_in_subdir.cmake index 739d2f9c76c..4ac3869efe0 100644 --- a/cmake/modules/build_library_in_subdir.cmake +++ b/cmake/modules/build_library_in_subdir.cmake @@ -2,8 +2,8 @@ AUTHOR(S): Rashad Kanavath PURPOSE: This is the macro to make grass libraries through build_module function. COPYRIGHT: (C) 2020 by the GRASS Development Team - This program is free software under the GPL (>=v2) - Read the file COPYING that comes with GRASS for details. + +SPDX-License-Identifier: GPL-2.0-or-later #]] macro(build_library_in_subdir dir_name) diff --git a/cmake/modules/build_module.cmake b/cmake/modules/build_module.cmake index cdaf0728e35..90ab758a615 100644 --- a/cmake/modules/build_module.cmake +++ b/cmake/modules/build_module.cmake @@ -4,8 +4,8 @@ PURPOSE: This is the main function that builds all grass libraries (prefixed and grass exeuctables. This cmake function is tailored to meet requirement of grass gnu make rules COPYRIGHT: (C) 2020 by the GRASS Development Team - This program is free software under the GPL (>=v2) - Read the file COPYING that comes with GRASS for details. + +SPDX-License-Identifier: GPL-2.0-or-later #]] include(GenerateExportHeader) diff --git a/cmake/modules/build_program.cmake b/cmake/modules/build_program.cmake index 69ea000337e..f4301fc135c 100644 --- a/cmake/modules/build_program.cmake +++ b/cmake/modules/build_program.cmake @@ -2,8 +2,8 @@ AUTHOR(S): Rashad Kanavath PURPOSE: Shortcut macro to call build_module with EXE argument set COPYRIGHT: (C) 2020 by the GRASS Development Team - This program is free software under the GPL (>=v2) - Read the file COPYING that comes with GRASS for details. + +SPDX-License-Identifier: GPL-2.0-or-later #]] macro(build_program) diff --git a/cmake/modules/build_program_in_subdir.cmake b/cmake/modules/build_program_in_subdir.cmake index 5f7bccd192d..f2c78f258b9 100644 --- a/cmake/modules/build_program_in_subdir.cmake +++ b/cmake/modules/build_program_in_subdir.cmake @@ -3,8 +3,8 @@ AUTHOR(S): Rashad Kanavath PURPOSE: CMake macro to build a grass executable (program) under sub directory which is passed as argument to macro COPYRIGHT: (C) 2020 by the GRASS Development Team - This program is free software under the GPL (>=v2) - Read the file COPYING that comes with GRASS for details. + +SPDX-License-Identifier: GPL-2.0-or-later #]] macro(build_program_in_subdir dir_name) diff --git a/cmake/modules/build_script_in_subdir.cmake b/cmake/modules/build_script_in_subdir.cmake index 95fa518ec0b..579ffa38cc1 100644 --- a/cmake/modules/build_script_in_subdir.cmake +++ b/cmake/modules/build_script_in_subdir.cmake @@ -2,8 +2,8 @@ AUTHOR(S): Rashad Kanavath PURPOSE: A CMake function that builds grass python script modules COPYRIGHT: (C) 2020 by the GRASS Development Team - This program is free software under the GPL (>=v2) - Read the file COPYING that comes with GRASS for details. + +SPDX-License-Identifier: GPL-2.0-or-later #]] function(build_script_in_subdir dir_name) diff --git a/cmake/modules/copy_python_files_in_subdir.cmake b/cmake/modules/copy_python_files_in_subdir.cmake index 41058629210..be477f6066c 100644 --- a/cmake/modules/copy_python_files_in_subdir.cmake +++ b/cmake/modules/copy_python_files_in_subdir.cmake @@ -4,8 +4,8 @@ PURPOSE: Simply copy python file in given subdirectory Destination will be relative to GISBASE directory set in root CMakeLists.txt COPYRIGHT: (C) 2020 by the GRASS Development Team - This program is free software under the GPL (>=v2) - Read the file COPYING that comes with GRASS for details. + +SPDX-License-Identifier: GPL-2.0-or-later #]] function(copy_python_files_in_subdir dir_name dst_prefix) diff --git a/cmake/modules/get_host_arch.cmake b/cmake/modules/get_host_arch.cmake index a7b3e632886..5ec4ad634d9 100644 --- a/cmake/modules/get_host_arch.cmake +++ b/cmake/modules/get_host_arch.cmake @@ -2,8 +2,8 @@ AUTHOR(S): Rashad Kanavath PURPOSE: Get host system architecuture COPYRIGHT: (C) 2020 by the GRASS Development Team - This program is free software under the GPL (>=v2) - Read the file COPYING that comes with GRASS for details. + +SPDX-License-Identifier: GPL-2.0-or-later #]] function(get_host_arch var_arch) diff --git a/cmake/modules/get_versions.cmake b/cmake/modules/get_versions.cmake index e99fd36eae5..3fdc8aefe25 100644 --- a/cmake/modules/get_versions.cmake +++ b/cmake/modules/get_versions.cmake @@ -2,8 +2,8 @@ AUTHOR(S): Rashad Kanavath PURPOSE: Read major, minor patch, date from given version file COPYRIGHT: (C) 2020 by the GRASS Development Team - This program is free software under the GPL (>=v2) - Read the file COPYING that comes with GRASS for details. + +SPDX-License-Identifier: GPL-2.0-or-later #]] function(get_versions file_path var_major var_minor var_release var_date) diff --git a/cmake/modules/repo_status.cmake b/cmake/modules/repo_status.cmake index ce107aead53..86b2d6a534c 100644 --- a/cmake/modules/repo_status.cmake +++ b/cmake/modules/repo_status.cmake @@ -2,8 +2,8 @@ AUTHOR(S): Rashad Kanavath PURPOSE: Read git status of grass repository if building from git clone COPYRIGHT: (C) 2020 by the GRASS Development Team - This program is free software under the GPL (>=v2) - Read the file COPYING that comes with GRASS for details. + +SPDX-License-Identifier: GPL-2.0-or-later #]] function(repo_status repo_dir) diff --git a/msvc/creat.c b/msvc/creat.c index e08287ab5d4..6bc6b0dc31d 100644 --- a/msvc/creat.c +++ b/msvc/creat.c @@ -5,8 +5,7 @@ * * (C) 2025 by the GRASS Development Team * - * This program is free software under the GNU General Public License (>=v2). - * Read the file COPYING that comes with GRASS for details. + * SPDX-License-Identifier: GPL-2.0-or-later * * \author Huidae Cho * diff --git a/msvc/io.h b/msvc/io.h index fb325751158..ebdd1de7b07 100644 --- a/msvc/io.h +++ b/msvc/io.h @@ -5,8 +5,7 @@ * * (C) 2025 by the GRASS Development Team * - * This program is free software under the GNU General Public License (>=v2). - * Read the file COPYING that comes with GRASS for details. + * SPDX-License-Identifier: GPL-2.0-or-later * * \author Huidae Cho * diff --git a/msvc/open.c b/msvc/open.c index 41376c59f4a..7f92e792e2c 100644 --- a/msvc/open.c +++ b/msvc/open.c @@ -5,8 +5,7 @@ * * (C) 2025 by the GRASS Development Team * - * This program is free software under the GNU General Public License (>=v2). - * Read the file COPYING that comes with GRASS for details. + * SPDX-License-Identifier: GPL-2.0-or-later * * \author Huidae Cho * From dffd534486a522094fe2c5ca10994664d9c90c6f Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Thu, 20 Feb 2025 19:09:29 +0100 Subject: [PATCH 252/253] update authors [skip ci] --- CMakeLists.txt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7636283bf8a..10f255c74a0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,6 @@ ################################################################################ # -# AUTHOR(S): Rashad Kanavath (original author), -# Markus Neteler, Loïc Bartoletti, Aaron Saw, Nicklas Larsson, -# Huidae Cho, Mahesh Maddineni, Kandel Nelson +# AUTHOR(S): Rashad Kanavath, Huidae Cho and Nicklas Larsson (main authors) # # PURPOSE: CMakeLists.txt root that adds options to activate/deactivate # 3rd party libraries From f1be2fbe959dd04b1d4c31a818baacf83962df35 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Thu, 20 Feb 2025 15:13:10 -0700 Subject: [PATCH 253/253] Replace GPL3 gettimeofday with MIT gettimeofday --- msvc/gettimeofday.c | 76 +++++++++++++++++++++++++++++++-------------- 1 file changed, 53 insertions(+), 23 deletions(-) diff --git a/msvc/gettimeofday.c b/msvc/gettimeofday.c index 34b2016ebd2..4e10cb9e821 100644 --- a/msvc/gettimeofday.c +++ b/msvc/gettimeofday.c @@ -1,40 +1,70 @@ -/* Adopted from GPL-3 SDRangel - * https://github.com/f4exb/sdrangel/blob/master/custom/windows/windows_time.h +/* + * Copied from vcpkg under the MIT license + * https://github.com/microsoft/vcpkg/blob/master/ports/gettimeofday/gettimeofday.c + */ + +/* + * Copied from PostgreSQL source: + * http://doxygen.postgresql.org/gettimeofday_8c_source.html + * */ /* - * missing gettimeofday implementation - * for windows; based on postgresql + * gettimeofday.c + * Win32 gettimeofday() replacement + * + * src/port/gettimeofday.c + * + * Copyright (c) 2003 SRA, Inc. + * Copyright (c) 2003 SKC, Inc. + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose, without fee, and without a + * written agreement is hereby granted, provided that the above + * copyright notice and this paragraph and the following two + * paragraphs appear in all copies. + * + * IN NO EVENT SHALL THE AUTHOR BE LIABLE TO ANY PARTY FOR DIRECT, + * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING + * LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS + * DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE AUTHOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS + * IS" BASIS, AND THE AUTHOR HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, + * SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. */ -#define WIN32_LEAN_AND_MEAN /* stops windows.h including winsock.h; \ - * timeval redefine */ -#include -#include /* portable: uint64_t MSVC: __int64 */ +#ifdef _MSC_VER + +#include -/* MSVC defines this in winsock2.h!? */ -typedef struct timeval { - long tv_sec; - long tv_usec; -} timeval; +/* FILETIME of Jan 1 1970 00:00:00. */ +static const unsigned __int64 epoch = 116444736000000000Ui64; +/* + * timezone information is stored outside the kernel so tzp isn't used anymore. + * + * Note: this function is not for Win32 high precision timing purpose. See + * elapsed_time(). + */ int gettimeofday(struct timeval *tp, struct timezone *tzp) { - /* Note: some broken versions only have 8 trailing zero's, the correct epoch - * has 9 trailing zero's This magic number is the number of 100 nanosecond - * intervals since January 1, 1601 (UTC) until 00:00:00 January 1, 1970 */ - static const uint64_t EPOCH = ((uint64_t)116444736000000000ULL); - - SYSTEMTIME system_time; FILETIME file_time; - uint64_t time; + SYSTEMTIME system_time; + ULARGE_INTEGER ularge; GetSystemTime(&system_time); SystemTimeToFileTime(&system_time, &file_time); - time = ((uint64_t)file_time.dwLowDateTime); - time += ((uint64_t)file_time.dwHighDateTime) << 32; + ularge.LowPart = file_time.dwLowDateTime; + ularge.HighPart = file_time.dwHighDateTime; - tp->tv_sec = (long)((time - EPOCH) / 10000000L); + tp->tv_sec = (long)((ularge.QuadPart - epoch) / 10000000L); tp->tv_usec = (long)(system_time.wMilliseconds * 1000); + return 0; } + +#endif /* _MSC_VER */