From 43daba2bc4285eec990a50e5b4e837ba6ccd03ef Mon Sep 17 00:00:00 2001 From: Rashad Kanavath Date: Sun, 11 Jun 2017 21:52:19 +0200 Subject: [PATCH 001/168] 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 | 4 +- 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 | 5 +- 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.horizon/main.c | 2 +- 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 + 159 files changed, 5624 insertions(+), 174 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 bc8ac301e89..78d4aafe1e3 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 6c065cc297b..3a64b07a738 100644 --- a/general/g.region/printwindow.c +++ b/general/g.region/printwindow.c @@ -469,7 +469,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 341a4f9a1a7..c14d6fa1708 100644 --- a/include/grass/defs/gis.h +++ b/include/grass/defs/gis.h @@ -79,6 +79,7 @@ * 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 @@ -90,6 +91,7 @@ #endif #endif #endif +#endif /* _MSC_VER */ /* adj_cellhd.c */ void G_adjust_Cell_head(struct Cell_head *, int, int); @@ -498,7 +500,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 d4107c92543..9a47308f1ec 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 d79fc84e6cf..523e7629eb0 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 d6d0f700270..1c900bc544f 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 957a03f4c3e..89604c15f23 100644 --- a/lib/gis/mapset_msc.c +++ b/lib/gis/mapset_msc.c @@ -263,7 +263,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 3e68e6a0522..6b072c5c254 100644 --- a/lib/gis/parser_interface.c +++ b/lib/gis/parser_interface.c @@ -107,16 +107,17 @@ void G__usage_xml(void) char *type; char *s, *top; int i; - const char *encoding; + const char *encoding = ""; int new_prompt = 0; new_prompt = G__uses_new_gisprompt(); /* 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 8fed1f59ac5..9aad0a973ae 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 3cebea00934..c1a840de3fd 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 7b0ee80169b..c41e0e47ef3 100644 --- a/lib/imagery/iscatt_core.c +++ b/lib/imagery/iscatt_core.c @@ -693,7 +693,6 @@ int I_compute_scatts(struct Cell_head *region, struct scCats *scatt_conds, struct rast_row bands_rows[n_bands]; 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 aa6301c531e..eeb340b1879 100644 --- a/lib/init/clean_temp.c +++ b/lib/init/clean_temp.c @@ -35,7 +35,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) { @@ -139,7 +138,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 @@ -171,7 +170,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 62b61aa700e..d86de42816b 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 7a0370285fc..a4ba0db5080 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 3d1140a5889..1c03c78953b 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 49d90ea2cc2..497e624498b 100644 --- a/lib/vector/Vlib/box.c +++ b/lib/vector/Vlib/box.c @@ -247,8 +247,8 @@ int Vect_get_line_box(const struct Map_info *Map, int line, } 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; } @@ -312,8 +312,8 @@ int Vect_get_area_box(const struct Map_info *Map, int area, 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; } @@ -359,8 +359,8 @@ int Vect_get_isle_box(const struct Map_info *Map, int isle, 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.horizon/main.c b/raster/r.horizon/main.c index c58ec836d97..3e1834bfd91 100644 --- a/raster/r.horizon/main.c +++ b/raster/r.horizon/main.c @@ -746,7 +746,7 @@ double horizon_height(void) { double height; - tanh0 = 0.; + tanh0 = -INFINITY; length = 0; height = searching(); 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 7bf9fab74f2..30261ba3d42 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 e48847052e5..4d9bd0b5d41 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 8cb26b5d9ca..9ecf74f615f 100644 --- a/raster/r.univar/r.univar_main.c +++ b/raster/r.univar/r.univar_main.c @@ -170,8 +170,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; fdz = NULL; diff --git a/raster/r.univar/r3.univar_main.c b/raster/r.univar/r3.univar_main.c index 5ad71240bbd..41591bfec6b 100644 --- a/raster/r.univar/r3.univar_main.c +++ b/raster/r.univar/r3.univar_main.c @@ -134,8 +134,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 470ecb2f942..c0d4325b798 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)); @@ -463,7 +463,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 18479f2f0bf..8537faaf691 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 f9c5cf0757f6f4f5a598cc69a5b38b966957cfe5 Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 5 Dec 2022 13:50:36 +0100 Subject: [PATCH 002/168] 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.horizon/main.c | 2 +- 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 +- 18 files changed, 50 insertions(+), 52 deletions(-) diff --git a/general/g.region/printwindow.c b/general/g.region/printwindow.c index 3a64b07a738..407855d9bb5 100644 --- a/general/g.region/printwindow.c +++ b/general/g.region/printwindow.c @@ -469,7 +469,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 497e624498b..b68e00cdd8f 100644 --- a/lib/vector/Vlib/box.c +++ b/lib/vector/Vlib/box.c @@ -248,7 +248,7 @@ int Vect_get_line_box(const struct Map_info *Map, int line, 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; } @@ -313,7 +313,7 @@ int Vect_get_area_box(const struct Map_info *Map, int area, 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; } @@ -360,7 +360,7 @@ int Vect_get_isle_box(const struct Map_info *Map, int isle, 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.horizon/main.c b/raster/r.horizon/main.c index 3e1834bfd91..806dc51068a 100644 --- a/raster/r.horizon/main.c +++ b/raster/r.horizon/main.c @@ -746,7 +746,7 @@ double horizon_height(void) { double height; - tanh0 = -INFINITY; + tanh0 = -1.0 / 0.0; /* -inf */ length = 0; height = searching(); 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 9ecf74f615f..3e351ad0a56 100644 --- a/raster/r.univar/r.univar_main.c +++ b/raster/r.univar/r.univar_main.c @@ -170,8 +170,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; fdz = NULL; diff --git a/raster/r.univar/r3.univar_main.c b/raster/r.univar/r3.univar_main.c index 41591bfec6b..b3efa170dd0 100644 --- a/raster/r.univar/r3.univar_main.c +++ b/raster/r.univar/r3.univar_main.c @@ -132,10 +132,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 01126ad022c..0451e370e2c 100644 --- a/raster/r.univar/stats.c +++ b/raster/r.univar/stats.c @@ -30,8 +30,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)); @@ -131,7 +131,7 @@ int print_stats(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; sprintf(sum_str, "%.15g", stats[z].sum); G_trim_decimal(sum_str); @@ -190,9 +190,9 @@ int print_stats(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++) { @@ -402,7 +402,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; @@ -450,9 +450,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 c0d4325b798..a2b4e37b6e0 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)); @@ -463,7 +463,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 8537faaf691..3ceff4f9b05 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 f9b1ba704ee883123890fabd5164daf4cb399b6d Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 5 Dec 2022 14:20:55 +0100 Subject: [PATCH 003/168] 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 4889de7441b8b997eb26d41eb2955a8aeeb4d532 Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 5 Dec 2022 14:37:28 +0100 Subject: [PATCH 004/168] CI fix for pylint in gui/wxpython called with wildcard --- .github/workflows/python-code-quality.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-code-quality.yml b/.github/workflows/python-code-quality.yml index 7ad02b39960..9d21925543e 100644 --- a/.github/workflows/python-code-quality.yml +++ b/.github/workflows/python-code-quality.yml @@ -109,7 +109,7 @@ jobs: export PYTHONPATH=`grass --config python_path`:$PYTHONPATH export LD_LIBRARY_PATH=$HOME/install/grass84/lib:$LD_LIBRARY_PATH cd gui/wxpython - pylint --persistent=no --py-version=${{ matrix.min-python-version }} --jobs=$(nproc) * + pylint --persistent=no --py-version=${{ matrix.min-python-version }} --jobs=$(nproc) --disable=CMakeLists.txt * - name: Run Pylint on other files using pytest run: | From 9eed8bceaffd84684468fd182d990029774daea0 Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 5 Dec 2022 15:41:08 +0100 Subject: [PATCH 005/168] 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 67cdeee7f20bc636daf5afb577d18c4a7d3ce0ca Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 5 Dec 2022 15:44:30 +0100 Subject: [PATCH 006/168] 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 faea30ba102958622c8dd21d2f79cbeb797f14c6 Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 5 Dec 2022 15:50:19 +0100 Subject: [PATCH 007/168] 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 7f39bb31307bed626562c81332f3e1b24c4684ee Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 5 Dec 2022 18:25:07 +0100 Subject: [PATCH 008/168] 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 96862bd4430d8276be69059d0ab3e37b7c954370 Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Tue, 6 Dec 2022 23:05:13 +0100 Subject: [PATCH 009/168] 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 d9f674e5856be6194a79b16bb6c216c3b695336c Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Sat, 10 Dec 2022 17:32:39 +0100 Subject: [PATCH 010/168] 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 49c5d5b2721bc62f040ec42f2b2656605abdaa4b Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Sat, 10 Dec 2022 17:39:25 +0100 Subject: [PATCH 011/168] 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 b2669e5c16f9e536f70b7d73515e7870f94b8108 Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Sun, 11 Dec 2022 15:54:28 +0100 Subject: [PATCH 012/168] 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 18bf7f07550bfa7223e77cfdd8bb1fafbceeaac7 Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 2 Jan 2023 09:47:49 +0100 Subject: [PATCH 013/168] 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 f76f68f16513767283c83f67320e81bcfb74e74c Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 2 Jan 2023 09:48:48 +0100 Subject: [PATCH 014/168] 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 ba6c07dc53ddc167ad03e1f833285c94d3a28c4a Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 2 Jan 2023 09:49:34 +0100 Subject: [PATCH 015/168] 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 76576db761233915b05ae974acbba146dd94b823 Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 2 Jan 2023 11:45:54 +0100 Subject: [PATCH 016/168] 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 2be2b75760d1e44974eb0715049192b42a4e0bdb Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 2 Jan 2023 13:26:35 +0100 Subject: [PATCH 017/168] 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 e8126e7c4f1534e391bd863f887fa4076dbfd75a Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 2 Jan 2023 13:27:29 +0100 Subject: [PATCH 018/168] 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 52123fe7523e39fa78bfcb2d8797ed271c88e05c Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 2 Jan 2023 13:27:55 +0100 Subject: [PATCH 019/168] 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 91461d5994e98f68b5bcd613e352992f97bb6166 Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 2 Jan 2023 13:34:48 +0100 Subject: [PATCH 020/168] 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 87ef0aa321f2f2e3149077c74cebe9510174d03f Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 2 Jan 2023 13:36:26 +0100 Subject: [PATCH 021/168] 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 aecd006bc7ef0b19cd9741c701e6fda486182d6f Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 2 Jan 2023 15:41:31 +0100 Subject: [PATCH 022/168] 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 4b23a6ce107b98782355432fc3ba4ea6e47895ee Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 2 Jan 2023 20:13:30 +0100 Subject: [PATCH 023/168] 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 0a43a1c4a35cdb0f3ce86d6c83475b95da8993da Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Mon, 2 Jan 2023 20:18:14 +0100 Subject: [PATCH 024/168] 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 e5becb71dd69eaa512f20e40466e35f2ad71076a Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Tue, 3 Jan 2023 08:28:59 +0100 Subject: [PATCH 025/168] 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 fd5500d5947134c0833a0cec2f561e950186ca57 Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Wed, 4 Jan 2023 12:35:27 +0100 Subject: [PATCH 026/168] 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 c1a840de3fd..4fb23226dcc 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; @@ -315,5 +315,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 1c03c78953b..db180748d7a 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 @@ -193,5 +193,6 @@ 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 9565839dbd25c5e1257f518c3e66dddb50dc1bf8 Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Wed, 4 Jan 2023 14:38:28 +0100 Subject: [PATCH 027/168] 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 523e7629eb0..755aa9e24d5 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 1c900bc544f..194a847b641 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 6b072c5c254..1f6092aec34 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 0afe71f70733f928059d53bfac4df6d12105e790 Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Wed, 4 Jan 2023 19:57:28 +0100 Subject: [PATCH 028/168] 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 617f58da0695d81c3a44c1f76013ccca1d57ced4 Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Wed, 4 Jan 2023 20:05:46 +0100 Subject: [PATCH 029/168] 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 a9c23d75debb041cd64d911552bd3114856cbc76 Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Wed, 4 Jan 2023 21:42:20 +0100 Subject: [PATCH 030/168] 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 3f1f5a155f0dfec24afeb7f2370e9eb467425be4 Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Thu, 5 Jan 2023 01:24:26 +0100 Subject: [PATCH 031/168] pylint: ignore cmakelists.txt --- .github/workflows/python-code-quality.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-code-quality.yml b/.github/workflows/python-code-quality.yml index 9d21925543e..eb996bf3ae6 100644 --- a/.github/workflows/python-code-quality.yml +++ b/.github/workflows/python-code-quality.yml @@ -109,7 +109,7 @@ jobs: export PYTHONPATH=`grass --config python_path`:$PYTHONPATH export LD_LIBRARY_PATH=$HOME/install/grass84/lib:$LD_LIBRARY_PATH cd gui/wxpython - pylint --persistent=no --py-version=${{ matrix.min-python-version }} --jobs=$(nproc) --disable=CMakeLists.txt * + pylint --persistent=no --py-version=${{ matrix.min-python-version }} --jobs=$(nproc) --ignore=CMakeLists.txt * - name: Run Pylint on other files using pytest run: | From 6301f3ed8fe5d91487b2f859a8f44f6b8e1e94c7 Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Wed, 4 Jan 2023 20:20:18 +0100 Subject: [PATCH 032/168] 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 d88134ee2ca72b9c3285091bd69fdfa19389a1db 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 033/168] 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.horizon/main.c | 2 +- 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 +- 21 files changed, 101 insertions(+), 111 deletions(-) diff --git a/general/g.region/printwindow.c b/general/g.region/printwindow.c index 407855d9bb5..6c065cc297b 100644 --- a/general/g.region/printwindow.c +++ b/general/g.region/printwindow.c @@ -469,7 +469,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 4fb23226dcc..b8ef70a90ee 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 b68e00cdd8f..49d90ea2cc2 100644 --- a/lib/vector/Vlib/box.c +++ b/lib/vector/Vlib/box.c @@ -247,8 +247,8 @@ int Vect_get_line_box(const struct Map_info *Map, int line, } 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; } @@ -312,8 +312,8 @@ int Vect_get_area_box(const struct Map_info *Map, int area, 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; } @@ -359,8 +359,8 @@ int Vect_get_isle_box(const struct Map_info *Map, int isle, 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.horizon/main.c b/raster/r.horizon/main.c index 806dc51068a..c58ec836d97 100644 --- a/raster/r.horizon/main.c +++ b/raster/r.horizon/main.c @@ -746,7 +746,7 @@ double horizon_height(void) { double height; - tanh0 = -1.0 / 0.0; /* -inf */ + tanh0 = 0.; length = 0; height = searching(); 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 4d9bd0b5d41..e48847052e5 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 3e351ad0a56..8cb26b5d9ca 100644 --- a/raster/r.univar/r.univar_main.c +++ b/raster/r.univar/r.univar_main.c @@ -170,8 +170,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; fdz = NULL; diff --git a/raster/r.univar/r3.univar_main.c b/raster/r.univar/r3.univar_main.c index b3efa170dd0..5ad71240bbd 100644 --- a/raster/r.univar/r3.univar_main.c +++ b/raster/r.univar/r3.univar_main.c @@ -132,10 +132,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 0451e370e2c..01126ad022c 100644 --- a/raster/r.univar/stats.c +++ b/raster/r.univar/stats.c @@ -30,8 +30,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)); @@ -131,7 +131,7 @@ int print_stats(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; sprintf(sum_str, "%.15g", stats[z].sum); G_trim_decimal(sum_str); @@ -190,9 +190,9 @@ int print_stats(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++) { @@ -402,7 +402,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; @@ -450,9 +450,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 a2b4e37b6e0..470ecb2f942 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)); @@ -463,7 +463,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 3ceff4f9b05..18479f2f0bf 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 8c06b7952df50b4d6f09a5d57561137de4c2f965 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 034/168] 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 6b54a06acbc336d34e50f7d4bc98debff0ecf48f 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 035/168] 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 1852e08a7fcf4bf1641423acb34102c3d2fad07b 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 036/168] 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 dccaac01300bfa4e0c50e42c984b391e4b22f93b 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 037/168] 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 c02053fb734ca9b52ba981723d952170952a587d 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 038/168] 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 b2229133402a142456de8bff15e66daf7daa1807 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 039/168] 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 062b8528632a5643936b20c2242a19154cc9b72d 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 040/168] 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 db180748d7a..3d1140a5889 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 */ @@ -193,6 +191,5 @@ int IL_check_at_points_2d(struct interp_params *params, } } /* cv */ - return 1; } From 075e42ee239be162f82fb174a8eeb8532831d064 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 041/168] 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 555cdb292a1a57910b28a6cb3a0170ec43d41b85 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 042/168] 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 754872d993526354d3b4ff7c11a01856b1943850 Mon Sep 17 00:00:00 2001 From: Aaron Saw Date: Mon, 5 Jun 2023 16:39:14 +0200 Subject: [PATCH 043/168] 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 9ef6a2bdfed02edea2b02d263957d8a2fe7107dd Mon Sep 17 00:00:00 2001 From: Aaron Saw Date: Mon, 5 Jun 2023 16:39:29 +0200 Subject: [PATCH 044/168] 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 161f1f929071f54e5979bc1e5ec810b7ae1ac5b6 Mon Sep 17 00:00:00 2001 From: Aaron Saw Date: Mon, 5 Jun 2023 16:39:41 +0200 Subject: [PATCH 045/168] add the 3 missing raster modules --- .gitignore | 3 +++ raster/CMakeLists.txt | 15 +++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/.gitignore b/.gitignore index 78d4aafe1e3..3f61cb4457b 100644 --- a/.gitignore +++ b/.gitignore @@ -51,3 +51,6 @@ test_keyvalue_result.txt # ignore paths generated by helper tools node_modules + +# ignore cmake build directory +build 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 ce13ea129693af54b9344a1d0de943ba9bf0dfab 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 046/168] 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 15418755542b70df08891fb48f22d3a1fa754417 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 047/168] 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 2af6d2e03bc84de763adf0c376270fc69b7a25e4 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 048/168] 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 1c2b3dda7484d39de08a8f623bfc2f879678ea98 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 049/168] 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 028a3235e38518e777a72904c4582f76b64ccafc 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 050/168] 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 1edfee80f4cf0aa11ebb472d326a43c3ce1efc6c 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 051/168] 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 6a12d3a54be93575a1c877c11c02adcbfa63d433 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 052/168] 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 0f90e778bd95d8558cb52938a8aa3506675888f9 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 053/168] 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 ce7424865bd3fbe3575f98123849bade8bd42699 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 054/168] 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 31b53b5bf77cf2e55fbae0b4454360012fc9ea03 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 055/168] 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 a357bc79c05ed5a1a22c0c12fdd1cf330d5015d2 Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Mon, 14 Aug 2023 08:49:23 +0200 Subject: [PATCH 056/168] 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 aec2b7e605b275546205a25a1095864940476fee Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Mon, 14 Aug 2023 10:37:35 +0200 Subject: [PATCH 057/168] 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 453739a74f1c2b51903c4a03a75a2b696b29c7d6 Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Sun, 3 Mar 2024 16:03:41 +0100 Subject: [PATCH 058/168] 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 91515e045a8f20f061f1009132de8760a3ad8ea3 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Thu, 18 Apr 2024 03:00:53 -0600 Subject: [PATCH 059/168] 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 c5de062580464af46ffc3aed9097a9d9d6f05bbf Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Thu, 18 Apr 2024 03:07:02 -0600 Subject: [PATCH 060/168] 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 c6f17af76082a1e59f480408eedff1030786574c Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Thu, 18 Apr 2024 03:12:34 -0600 Subject: [PATCH 061/168] 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 df254d10940be1460fb8e6c9630d97a64acf04fc Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Thu, 18 Apr 2024 06:31:39 -0600 Subject: [PATCH 062/168] 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 c50fe077b83a0b64516f08d7b8810b9e99de24ff Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Thu, 18 Apr 2024 07:31:26 -0600 Subject: [PATCH 063/168] 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 2904d24b5f0a314e8622ebed7fd0d786be9f0ba8 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Thu, 18 Apr 2024 07:52:59 -0600 Subject: [PATCH 064/168] 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 af2fe5cc472ad91596d4f593a96e7b4b22dc37b4 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Thu, 18 Apr 2024 09:08:02 -0600 Subject: [PATCH 065/168] 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 999c71e67f6af1a45d99e368c7ffce1092ed3b1f Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Thu, 18 Apr 2024 18:21:39 -0600 Subject: [PATCH 066/168] 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 152762581ce6603ab7f8d9e024e2a9713bf4cd3a Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Thu, 18 Apr 2024 18:38:49 -0600 Subject: [PATCH 067/168] 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 4d5e2b9cec61dfb3903deefb4801197b29528066 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Thu, 18 Apr 2024 18:43:00 -0600 Subject: [PATCH 068/168] 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 009d06e95b6f5cd22ed9e2045ddabdc2633fd23b Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Thu, 18 Apr 2024 18:52:20 -0600 Subject: [PATCH 069/168] 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 e98b60b5f6385e128d4de0e4d74b1fba33792919 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Fri, 19 Apr 2024 01:09:20 -0600 Subject: [PATCH 070/168] 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 12c5192233147ed2e374c58900e3c5180189f573 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Fri, 19 Apr 2024 01:47:53 -0600 Subject: [PATCH 071/168] 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 d27a92963cff2e2d891aeac6fc33c64dccc4091e Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 01:26:05 -0600 Subject: [PATCH 072/168] 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 306e24ed921e45ddfeee3b7c7b3c00f95d74e035 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 01:28:39 -0600 Subject: [PATCH 073/168] 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 e8fc34c4b325452dc1a94f1e480f7f8998eab9de Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 02:00:52 -0600 Subject: [PATCH 074/168] 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 b63b210f69b6c8be8a4cd478e20eb0c79265d663 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 02:22:42 -0600 Subject: [PATCH 075/168] 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 e05bfb34e5b293e8e319ad05812eb1f1572dcc6e Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 02:59:43 -0600 Subject: [PATCH 076/168] 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 3720a85103fb9904901b4bc717de6822565a513a Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 03:35:21 -0600 Subject: [PATCH 077/168] 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 c870bbf140972695bb911cc2b1235a152029644b Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 10:57:03 -0600 Subject: [PATCH 078/168] 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 f8a71d785d68f50a671f16f1e7fa544c67cba15d Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 12:25:32 -0600 Subject: [PATCH 079/168] 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 2056b40fe35af377045b4aba529bb5add1877c30 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 14:04:59 -0600 Subject: [PATCH 080/168] 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 f61e9b47c210610bfbf64c93483ed6edda574c3b Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 14:40:52 -0600 Subject: [PATCH 081/168] 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 906ecfb9ea768633d32f23332ab868f74762478c Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 14:41:57 -0600 Subject: [PATCH 082/168] 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 3e0f6b4bc67f6fbde92c9aa9fb9fc3507aee22b5 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 14:48:54 -0600 Subject: [PATCH 083/168] 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 322436c8394e20aaa3e07b302772ded23f410018 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 14:50:51 -0600 Subject: [PATCH 084/168] 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 60e07379d328a858ab45188b726fa02fc14f11dd Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 14:58:37 -0600 Subject: [PATCH 085/168] 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 ee619adbe6f0a686576682d619081a49e54863d7 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 15:04:10 -0600 Subject: [PATCH 086/168] 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 bf3abef4aa6444918e44c8d47b6d6b89e3382e3a Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 17:31:55 -0600 Subject: [PATCH 087/168] 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 9a24f75fd86af2feb34e8f796b658e009a5842f8 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 17:38:46 -0600 Subject: [PATCH 088/168] 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 57eceb1ad52d083baae358512239ee11c54840e1 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 17:41:23 -0600 Subject: [PATCH 089/168] 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 4a040d7b61319af65b25be2d5c4cc07a07e557cf Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 18:31:56 -0600 Subject: [PATCH 090/168] 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 e61ca6fed8862668f3c2c5cb81d9e6f80f7579e0 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 18:50:01 -0600 Subject: [PATCH 091/168] 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 38fc98311d5f816e24fdce295e45b1246ce97adb Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 19:35:42 -0600 Subject: [PATCH 092/168] 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 277ba5d823ddf92e8ff5ebc97132c78c0a8185f6 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 19:36:15 -0600 Subject: [PATCH 093/168] 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 ee3ef6f6aac429fb8a49869338f1f5dab48926a1 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 19:40:20 -0600 Subject: [PATCH 094/168] 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 d46d202324fae9353d8c08d62994836e02eb7ac2 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 21:25:20 -0600 Subject: [PATCH 095/168] 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 9d5a1bfe03abf308830b88eef1e305d7bcf5898c Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 21:46:10 -0600 Subject: [PATCH 096/168] 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 cf06b01052111bb0cafd009324113c5c08be80a8 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 21:47:40 -0600 Subject: [PATCH 097/168] 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 ff0d59274ec5403d4b9d7260cfa57c2c332863ce Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 21:47:52 -0600 Subject: [PATCH 098/168] 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 fe3ba550c7f64a8fbd92cc6561df954a29581df3 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 21:49:29 -0600 Subject: [PATCH 099/168] 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 b8ef70a90ee..95a0d75ac07 100644 --- a/lib/gis/user_config.c +++ b/lib/gis/user_config.c @@ -317,6 +317,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 0bd4720e970adc31bda8f76e95148eab714f1492 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 21:51:00 -0600 Subject: [PATCH 100/168] 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 46ebe2559ce37691e2470ef1b0a8eec749343489 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 21:51:23 -0600 Subject: [PATCH 101/168] 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 6d6f38ca50f5982ea5007c0864b0a0c42923c085 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 21:59:33 -0600 Subject: [PATCH 102/168] 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 e1bac2ada8292df8a135b031be81eb9e099f99c7 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 22:02:35 -0600 Subject: [PATCH 103/168] 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 1d6e1dd04cc09de819d45038f868d05eafaa878c Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 22:27:47 -0600 Subject: [PATCH 104/168] 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 afe6fbaf36f2d52b95021abe945432a4dd60e3d0 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 20 Apr 2024 22:38:28 -0600 Subject: [PATCH 105/168] 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 1639f8cbf28fbd4794a1fd2b3e2049351f78dffb Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sun, 21 Apr 2024 00:06:20 -0600 Subject: [PATCH 106/168] 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 23621b5b02b7090c6dfc6329b0cb548e3966a93d Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sun, 21 Apr 2024 00:26:10 -0600 Subject: [PATCH 107/168] 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 6c1b21637b116b8d4652932eb620218d495d37cb Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sun, 21 Apr 2024 01:19:40 -0600 Subject: [PATCH 108/168] 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 4ad7eb2b53151ad20977321779c2bc9be7344b96 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sun, 21 Apr 2024 02:46:55 -0600 Subject: [PATCH 109/168] 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 bc460e68054c39733da99f39007acc3f2c11050f Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sun, 21 Apr 2024 03:11:11 -0600 Subject: [PATCH 110/168] 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 023fb24ec8e16d3b16067d91b0fa29739ea754d8 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sun, 21 Apr 2024 03:37:06 -0600 Subject: [PATCH 111/168] 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 cc7fb73f0377394792e57f2f65eeb6bf920b5faf Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 07:18:20 -0600 Subject: [PATCH 112/168] 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 9606c20514e395fd4fb830e3fc0bc431437a8df0 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 07:23:10 -0600 Subject: [PATCH 113/168] 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 ded27739607906d1f109c7d3f8ca3c2273f24adf Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 08:02:23 -0600 Subject: [PATCH 114/168] 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 63c048c8b328590a3aa0b6134c58f1a5a04569cd Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 08:04:57 -0600 Subject: [PATCH 115/168] 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 a1f54d37ed8ae646c32bf563f40e093861696e76 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 08:05:46 -0600 Subject: [PATCH 116/168] 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 7c072f857df87a13cd825a0833abeef8838a6cd6 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 08:07:39 -0600 Subject: [PATCH 117/168] 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 76f6bbf908a9c824be000f931e167e1acfe9818a Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 08:07:49 -0600 Subject: [PATCH 118/168] 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 7534f7df1f0f420a20555be5978bc90098264b55 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 08:08:24 -0600 Subject: [PATCH 119/168] 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 3fcc02abcefcbbb5ada24ec4a52dd01d4b7e222f Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 08:09:33 -0600 Subject: [PATCH 120/168] 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 9d4d22c234a84fb0f4d892ccaa0a383d7b270a1d Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 08:45:50 -0600 Subject: [PATCH 121/168] Define (read|write)_png only if HAVE_PNG_H --- 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 e5732bcd6f8b99c74f7ff814d1d750e23e750603 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 08:48:51 -0600 Subject: [PATCH 122/168] 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 4c61830b9cc75daf7717a8e2360288a89d909bf9 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 08:49:13 -0600 Subject: [PATCH 123/168] 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 f084cc090c2f0d932f37b7d7263a3800062007f8 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 08:55:49 -0600 Subject: [PATCH 124/168] 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 ebfc26e02eab8fac642ec76628c74255040ad11f Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 09:53:44 -0600 Subject: [PATCH 125/168] 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 3dceff33abcfa1101f49014e355dc63420b74c04 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 09:56:08 -0600 Subject: [PATCH 126/168] 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 c364893b31ecececdfe10c2810792a6ffe20081d Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 12:23:45 -0600 Subject: [PATCH 127/168] 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 3f47bbeb0a8e9a381583951eee8a85bb1ba69195 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 13:18:26 -0600 Subject: [PATCH 128/168] 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 7193663f9297a53157ba7899168883f7dde1291a Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 13:19:40 -0600 Subject: [PATCH 129/168] 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 e2d1198768fa3ad607cc0874bce7a391f04ec251 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 13:20:15 -0600 Subject: [PATCH 130/168] 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 f772e0ff2491a621cea8f7f53788cd0ece7ca6b7 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 15:16:39 -0600 Subject: [PATCH 131/168] 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 e0e3003ea1a3138a0663eed13eeedb5b8d1e87ee Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 15:19:04 -0600 Subject: [PATCH 132/168] 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 ce96fcad598a948f5d515110cdc406b31df80f63 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 15:22:35 -0600 Subject: [PATCH 133/168] 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 ad18fc79a3e743d4a400002d783b0bc8e48e197a Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 16:20:40 -0600 Subject: [PATCH 134/168] 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 5c334f538b1632b50c5aae0e0735af61e0193e3a Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 19:46:47 -0600 Subject: [PATCH 135/168] 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 b6ce1d0cccc4fa7b3140dd0fec76b8396963ad26 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 20:04:32 -0600 Subject: [PATCH 136/168] 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 0a4a80fbae6..d9f8c8d722d 100644 --- a/general/g.mkfontcap/main.c +++ b/general/g.mkfontcap/main.c @@ -89,6 +89,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"); @@ -107,6 +108,7 @@ int main(int argc, char *argv[]) } } + fprintf(stderr, "G.MKFONTCAP %d %s\n", __LINE__, fontcapfile); searchdirs = NULL; numsearchdirs = 0; @@ -124,17 +126,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 { @@ -144,12 +151,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 8ecd3ccdce0bb8ddd93c3ac92f5ef8de07939752 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 20:23:06 -0600 Subject: [PATCH 137/168] 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 bdb58360a2606adacf07768cdf48998a78222c10 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 20:39:24 -0600 Subject: [PATCH 138/168] 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 b8a0718c5ddcc53338496dc75e7404ce8c28ae45 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 20:49:14 -0600 Subject: [PATCH 139/168] 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 4dbb27e409db9ec238b34270e8639782acaf638f Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 20:54:53 -0600 Subject: [PATCH 140/168] 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 2db8c1f85636f09a77a1b56a2fd511507491dd72 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 21:00:56 -0600 Subject: [PATCH 141/168] 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 69b9091ff83eb3986698544e0db813d2701206fc Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 21:22:29 -0600 Subject: [PATCH 142/168] 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 d9f8c8d722d..0a4a80fbae6 100644 --- a/general/g.mkfontcap/main.c +++ b/general/g.mkfontcap/main.c @@ -89,7 +89,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"); @@ -108,7 +107,6 @@ int main(int argc, char *argv[]) } } - fprintf(stderr, "G.MKFONTCAP %d %s\n", __LINE__, fontcapfile); searchdirs = NULL; numsearchdirs = 0; @@ -126,22 +124,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 { @@ -151,14 +144,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 021fd25c65750a277955313cb485152a78664bfc Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 21:56:22 -0600 Subject: [PATCH 143/168] 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 727f31b1807959fe4960b3dcd0b94516b1f264f2 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 22:08:04 -0600 Subject: [PATCH 144/168] 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 f1aec67af12860d159aca9632f18dd3256a2151b Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Mon, 22 Apr 2024 22:25:47 -0600 Subject: [PATCH 145/168] 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 5fefb87736de09a3e86bf3b98d05d93d22e2a89f Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Tue, 23 Apr 2024 07:25:04 -0600 Subject: [PATCH 146/168] 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 1bbd7c64e2640d11b8936794c0532e9b077ba51a Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Tue, 23 Apr 2024 07:28:49 -0600 Subject: [PATCH 147/168] 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 3bdec359c845d7ba4a7473c07d7738de57aee618 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Tue, 23 Apr 2024 07:30:10 -0600 Subject: [PATCH 148/168] 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 050f940ad6f44d752866d49647d75ad4148fbf10 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Tue, 23 Apr 2024 07:30:22 -0600 Subject: [PATCH 149/168] 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 9f104714e6297796331365ecaa89f3d1f1ad6c3d Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Tue, 23 Apr 2024 07:30:39 -0600 Subject: [PATCH 150/168] 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 dcfa492d5be96231e147bf5a57cec9c851c7c8ea 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 151/168] 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 04ec6f187dcb2c37c8ef740c3921d83b9beabc8c Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Fri, 24 May 2024 23:57:31 +0200 Subject: [PATCH 152/168] source changes (address separately) --- include/Make/Install.make | 2 +- lib/init/Makefile | 2 +- lib/init/grass.py | 2 +- man/build_html.py | 14 ++++++++++---- 4 files changed, 13 insertions(+), 7 deletions(-) mode change 100644 => 100755 man/build_html.py 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 645b9ac0164..1a3b678088f 100644 --- a/lib/init/Makefile +++ b/lib/init/Makefile @@ -68,7 +68,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 6d9d8b3b3e1..b44b650f418 100755 --- a/lib/init/grass.py +++ b/lib/init/grass.py @@ -91,7 +91,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@" diff --git a/man/build_html.py b/man/build_html.py old mode 100644 new mode 100755 index 2d1714091fd..faec19d9101 --- a/man/build_html.py +++ b/man/build_html.py @@ -9,6 +9,7 @@ import os import string +import sys from datetime import datetime # TODO: better fix this in include/Make/Html.make, see bug RT #5361 @@ -508,15 +509,20 @@ def to_title(name): ############################################################################ - -arch_dist_dir = os.environ["ARCH_DISTDIR"] -html_dir = os.path.join(arch_dist_dir, "docs", "html") +arch_dist_dir = None +try: + arch_dist_dir = os.environ["ARCH_DISTDIR"] +except KeyError: + html_dir = os.environ["HTMLDIR"] + +if arch_dist_dir: + html_dir = os.path.join(arch_dist_dir, "docs", "html") gisbase = os.environ["GISBASE"] grass_version = os.getenv("VERSION_NUMBER", "unknown") grass_version_major = grass_version.split(".")[0] grass_version_minor = grass_version.split(".")[1] grass_mmver = ".".join(grass_version.split(".")[0:2]) -macosx = "darwin" in os.environ["ARCH"].lower() +macosx = sys.platform.startswith("darwin") default_year = os.getenv("VERSION_DATE") if not default_year: default_year = str(datetime.now().year) From f6ac3678ecebb732441b693c97f338ccd5403e67 Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Sat, 25 May 2024 00:00:40 +0200 Subject: [PATCH 153/168] cmake: major update, FHS, dependencies, tests added --- .github/workflows/cmake.yml | 44 +- .gitignore | 2 +- 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 +- 68 files changed, 3202 insertions(+), 1060 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/.gitignore b/.gitignore index a1e826ceea8..8d9cfac5c63 100644 --- a/.gitignore +++ b/.gitignore @@ -63,4 +63,4 @@ lib/*/html/ lib/*/latex/ # ignore cmake build directory -build \ No newline at end of file +build 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 7da00eb82c6a275641c654261c2d1c2b97c1dab4 Mon Sep 17 00:00:00 2001 From: Nicklas Larsson Date: Sat, 25 May 2024 00:24:59 +0200 Subject: [PATCH 154/168] 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 4b2aa27bbcb3224c7f2b376002173dae10883d9c Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Mon, 15 Jul 2024 17:12:47 -0600 Subject: [PATCH 155/168] 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 8291252b632fabaf2493d5277af0e1a88bc0e691 Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Wed, 17 Jul 2024 17:28:28 -0600 Subject: [PATCH 156/168] 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 7e349f5b82e91fde1289d1aca295d6c3ada42c89 Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Mon, 29 Jul 2024 17:20:13 -0600 Subject: [PATCH 157/168] 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 3bcc984c529cc0986dba6b323cfaa8b715a4340c Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Fri, 6 Sep 2024 13:20:15 -0700 Subject: [PATCH 158/168] 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 812557901abeaf0d84f9d0c3f3eebcb588d4fa24 Mon Sep 17 00:00:00 2001 From: Mahesh Maddineni Date: Thu, 12 Sep 2024 12:02:57 -0700 Subject: [PATCH 159/168] 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 7fa9bd0fe5a389f9d06693461544efbd915ca290 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 14 Sep 2024 21:57:13 -0600 Subject: [PATCH 160/168] 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 0510aa6e5fdc265b12fcda57b8aa3b588f5056ee Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 14 Sep 2024 23:11:28 -0600 Subject: [PATCH 161/168] 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 9adfddb3ca6f89d4b6e82207dd0427aee4a326fa Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 14 Sep 2024 23:12:43 -0600 Subject: [PATCH 162/168] 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 e1987d97e9ef9eddb7ee2240c2630bf6a4ded1f5 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sat, 14 Sep 2024 23:24:15 -0600 Subject: [PATCH 163/168] 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 8ec272e4a8b5cc5698fe594049fe87055684fd7d Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sun, 15 Sep 2024 01:29:20 -0600 Subject: [PATCH 164/168] 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 286c5d61f82aa3675b8e70458beb1f071a7d7f98 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sun, 15 Sep 2024 01:52:48 -0600 Subject: [PATCH 165/168] 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 1bb932d1ea59e0e963571228348eec2c80c5df70 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Sun, 15 Sep 2024 09:44:34 -0600 Subject: [PATCH 166/168] 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 3a7d9f7e77555cccd2dadb2e48db3e065cb86736 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Tue, 17 Sep 2024 22:18:17 -0600 Subject: [PATCH 167/168] 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 d790ac00c9b0588d20dc944f9e2a0500a8d0b546 Mon Sep 17 00:00:00 2001 From: Huidae Cho Date: Tue, 17 Sep 2024 22:29:52 -0600 Subject: [PATCH 168/168] 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 */