Revision: 76469 http://sourceforge.net/p/brlcad/code/76469 Author: starseeker Date: 2020-07-24 15:59:27 +0000 (Fri, 24 Jul 2020) Log Message: ----------- Older version of FindGDAL isn't properly detecting - try newer one.
Modified Paths: -------------- brlcad/branches/RELEASE/misc/CMake/FindGDAL.cmake Modified: brlcad/branches/RELEASE/misc/CMake/FindGDAL.cmake =================================================================== --- brlcad/branches/RELEASE/misc/CMake/FindGDAL.cmake 2020-07-24 14:41:17 UTC (rev 76468) +++ brlcad/branches/RELEASE/misc/CMake/FindGDAL.cmake 2020-07-24 15:59:27 UTC (rev 76469) @@ -1,4 +1,4 @@ -# Copyright 2000-2017 Kitware, Inc. and Contributors +# Copyright 2000-2020 Kitware, Inc. and Contributors # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -27,30 +27,53 @@ # 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. - -#.rst: -# FindGDAL -# -------- # -# Locate gdal -# -# This module accepts the following environment variables: -# -# :: -# -# GDAL_DIR or GDAL_ROOT - Specify the location of GDAL -# -# -# -# This module defines the following CMake variables: -# -# :: -# -# GDAL_FOUND - True if libgdal is found -# GDAL_LIBRARY - A variable pointing to the GDAL library -# GDAL_INCLUDE_DIR - Where to find the headers +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. -# +#[=======================================================================[.rst: +FindGDAL +-------- + +Find Geospatial Data Abstraction Library (GDAL). + +IMPORTED Targets +^^^^^^^^^^^^^^^^ + +This module defines :prop_tgt:`IMPORTED` target ``GDAL::GDAL`` +if GDAL has been found. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module will set the following variables in your project: + +``GDAL_FOUND`` + True if GDAL is found. +``GDAL_INCLUDE_DIRS`` + Include directories for GDAL headers. +``GDAL_LIBRARIES`` + Libraries to link to GDAL. +``GDAL_VERSION`` + The version of GDAL found. + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``GDAL_LIBRARY`` + The libgdal library file. +``GDAL_INCLUDE_DIR`` + The directory containing ``gdal.h``. + +Hints +^^^^^ + +Set ``GDAL_DIR`` or ``GDAL_ROOT`` in the environment to specify the +GDAL installation prefix. +#]=======================================================================] + # $GDALDIR is an environment variable that would # correspond to the ./configure --prefix=$GDAL_DIR # used in building gdal. @@ -67,114 +90,105 @@ # #include "gdal.h" -include(CheckCSourceCompiles) -function(GDALTRANS_TEST HGDALTRANS) +find_path(GDAL_INCLUDE_DIR gdal.h + HINTS + ENV GDAL_DIR + ENV GDAL_ROOT + PATH_SUFFIXES + include/gdal + include/GDAL + include +) - set(CMAKE_REQUIRED_INCLUDES ${GDAL_INCLUDE_DIR}) - set(CMAKE_REQUIRED_LIBRARIES ${GDAL_LIBRARY}) +if(UNIX) + # Use gdal-config to obtain the library version (this should hopefully + # allow us to -lgdal1.x.y where x.y are correct version) + # For some reason, libgdal development packages do not contain + # libgdal.so... + find_program(GDAL_CONFIG gdal-config + HINTS + ENV GDAL_DIR + ENV GDAL_ROOT + PATH_SUFFIXES bin + ) - set(GT_SRCS " - #include <gdal.h> - #include <gdalwarper.h> - #include <gdal_utils.h> - #include <cpl_conv.h> - #include <cpl_string.h> - #include <cpl_multiproc.h> - #include <ogr_spatialref.h> - #include <vrtdataset.h> + if(GDAL_CONFIG) + exec_program(${GDAL_CONFIG} ARGS --libs OUTPUT_VARIABLE GDAL_CONFIG_LIBS) - int main(int ac, char *av[]) - { - GDALDatasetH gd = GDALTranslate(NULL, NULL, NULL, NULL); - } - ") + if(GDAL_CONFIG_LIBS) + # treat the output as a command line and split it up + separate_arguments(args NATIVE_COMMAND "${GDAL_CONFIG_LIBS}") - CHECK_C_SOURCE_COMPILES("${GT_SRCS}" H_GT) + # only consider libraries whose name matches this pattern + set(name_pattern "[gG][dD][aA][lL]") - set(${HGDALTRANS} ${H_GT} PARENT_SCOPE) + # consider each entry as a possible library path, name, or parent directory + foreach(arg IN LISTS args) + # library name + if("${arg}" MATCHES "^-l(.*)$") + set(lib "${CMAKE_MATCH_1}") -endfunction(GDALTRANS_TEST) + # only consider libraries whose name matches the expected pattern + if("${lib}" MATCHES "${name_pattern}") + list(APPEND _gdal_lib "${lib}") + endif() + # library search path + elseif("${arg}" MATCHES "^-L(.*)$") + list(APPEND _gdal_libpath "${CMAKE_MATCH_1}") + # assume this is a full path to a library + elseif(IS_ABSOLUTE "${arg}" AND EXISTS "${arg}") + # extract the file name + get_filename_component(lib "${arg}" NAME) + # only consider libraries whose name matches the expected pattern + if(NOT "${lib}" MATCHES "${name_pattern}") + continue() + endif() -find_path(GDAL_INCLUDE_DIR gdal.h - HINTS - ENV GDAL_DIR - ENV GDAL_ROOT - PATH_SUFFIXES - include/gdal - include/GDAL - include - PATHS - ~/Library/Frameworks/gdal.framework/Headers - /Library/Frameworks/gdal.framework/Headers - /sw # Fink - /opt/local # DarwinPorts - /opt/csw # Blastwave - /opt - ) + # extract the file directory + get_filename_component(dir "${arg}" DIRECTORY) -# Use gdal-config to obtain the library version (this should hopefully -# allow us to -lgdal1.x.y where x.y are correct version) -# For some reason, libgdal development packages do not contain -# libgdal.so... -find_program(GDAL_CONFIG gdal-config - HINTS - ENV GDAL_DIR - ENV GDAL_ROOT - PATH_SUFFIXES bin - PATHS - /sw # Fink - /opt/local # DarwinPorts - /opt/csw # Blastwave - /opt - ) + # remove library prefixes/suffixes + string(REGEX REPLACE "^(${CMAKE_SHARED_LIBRARY_PREFIX}|${CMAKE_STATIC_LIBRARY_PREFIX})" "" lib "${lib}") + string(REGEX REPLACE "(${CMAKE_SHARED_LIBRARY_SUFFIX}|${CMAKE_STATIC_LIBRARY_SUFFIX})$" "" lib "${lib}") -if(GDAL_CONFIG AND NOT "${GDAL_CONFIG}" MATCHES "NOTFOUND") - exec_program(${GDAL_CONFIG} ARGS --libs OUTPUT_VARIABLE GDAL_CONFIG_LIBS) - if(GDAL_CONFIG_LIBS) - string(REGEX MATCHALL "-l[^ ]+" _gdal_dashl ${GDAL_CONFIG_LIBS}) - string(REPLACE "-l" "" _gdal_lib "${_gdal_dashl}") - string(REGEX MATCHALL "-L[^ ]+" _gdal_dashL ${GDAL_CONFIG_LIBS}) - string(REPLACE "-L" "" _gdal_libpath "${_gdal_dashL}") - endif(GDAL_CONFIG_LIBS) -endif(GDAL_CONFIG AND NOT "${GDAL_CONFIG}" MATCHES "NOTFOUND") + # use the file name and directory as hints + list(APPEND _gdal_libpath "${dir}") + list(APPEND _gdal_lib "${lib}") + endif() + endforeach() + endif() + endif() +endif() find_library(GDAL_LIBRARY - NAMES ${_gdal_lib} gdal GDAL + NAMES ${_gdal_lib} gdal gdal_i gdal1.5.0 gdal1.4.0 gdal1.3.2 GDAL HINTS - ENV GDAL_DIR - ENV GDAL_ROOT - ${_gdal_libpath} + ENV GDAL_DIR + ENV GDAL_ROOT + ${_gdal_libpath} PATH_SUFFIXES lib - PATHS - /sw - /opt/local - /opt/csw - /opt - /usr/freeware - ) +) -# Check for GDALTranslate - if we don't have that, we're not in business -if(GDAL_LIBRARY AND GDAL_INCLUDE_DIR) - GDALTRANS_TEST(HAVE_GDALTRANSLATE) - if(NOT HAVE_GDALTRANSLATE) - set(GDAL_LIBRARY NOTFOUND) - set(GDAL_INCLUDE_DIR "") - endif(NOT HAVE_GDALTRANSLATE) -endif(GDAL_LIBRARY AND GDAL_INCLUDE_DIR) +if (EXISTS "${GDAL_INCLUDE_DIR}/gdal_version.h") + file(STRINGS "${GDAL_INCLUDE_DIR}/gdal_version.h" _gdal_version + REGEX "GDAL_RELEASE_NAME") + string(REGEX REPLACE ".*\"\(.*\)\"" "\\1" GDAL_VERSION "${_gdal_version}") + unset(_gdal_version) +else () + set(GDAL_VERSION GDAL_VERSION-NOTFOUND) +endif () -include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(GDAL DEFAULT_MSG GDAL_LIBRARY GDAL_INCLUDE_DIR HAVE_GDALTRANSLATE) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(GDAL + VERSION_VAR GDAL_VERSION + REQUIRED_VARS GDAL_LIBRARY GDAL_INCLUDE_DIR) -if(HAVE_GDALTRANSLATE) - set(GDAL_LIBRARIES ${GDAL_LIBRARY}) - set(GDAL_INCLUDE_DIRS ${GDAL_INCLUDE_DIR}) -endif(HAVE_GDALTRANSLATE) +if (GDAL_FOUND AND NOT TARGET GDAL::GDAL) + add_library(GDAL::GDAL UNKNOWN IMPORTED) + set_target_properties(GDAL::GDAL PROPERTIES + IMPORTED_LOCATION "${GDAL_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${GDAL_INCLUDE_DIR}") +endif () -# Local Variables: -# tab-width: 8 -# mode: cmake -# indent-tabs-mode: t -# End: -# ex: shiftwidth=2 tabstop=8 - +set(GDAL_LIBRARIES ${GDAL_LIBRARY}) +set(GDAL_INCLUDE_DIRS ${GDAL_INCLUDE_DIR}) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. _______________________________________________ BRL-CAD Source Commits mailing list brlcad-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/brlcad-commits