FindProj.cmake 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. # Find Proj
  2. # ~~~~~~~~~
  3. # Copyright (c) 2007, Martin Dobias <wonder.sk at gmail.com>
  4. # Redistribution and use is allowed according to the terms of the BSD license.
  5. # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
  6. #
  7. # CMake module to search for Proj library
  8. #
  9. # If it's found it sets PROJ_FOUND to TRUE
  10. # and following variables are set:
  11. # PROJ_INCLUDE_DIR
  12. # PROJ_LIBRARY
  13. # FIND_PATH and FIND_LIBRARY normally search standard locations
  14. # before the specified paths. To search non-standard paths first,
  15. # FIND_* is invoked first with specified paths and NO_DEFAULT_PATH
  16. # and then again with no specified paths to search the default
  17. # locations. When an earlier FIND_* succeeds, subsequent FIND_*s
  18. # searching for the same item do nothing.
  19. if(ANDROID)
  20. set(PROJ_INCLUDE_DIR ${OSGEO4A_STAGE_DIR}/${ANDROID_ABI}/include CACHE PATH "")
  21. set(PROJ_LIBRARY ${OSGEO4A_STAGE_DIR}/${ANDROID_ABI}/lib/libproj.so CACHE PATH "")
  22. else()
  23. # try to use framework on mac
  24. # want clean framework path, not unix compatibility path
  25. IF (APPLE)
  26. IF (CMAKE_FIND_FRAMEWORK MATCHES "FIRST"
  27. OR CMAKE_FRAMEWORK_PATH MATCHES "ONLY"
  28. OR NOT CMAKE_FIND_FRAMEWORK)
  29. SET (CMAKE_FIND_FRAMEWORK_save ${CMAKE_FIND_FRAMEWORK} CACHE STRING "" FORCE)
  30. SET (CMAKE_FIND_FRAMEWORK "ONLY" CACHE STRING "" FORCE)
  31. #FIND_PATH(PROJ_INCLUDE_DIR PROJ/proj_api.h)
  32. FIND_LIBRARY(PROJ_LIBRARY PROJ)
  33. IF (PROJ_LIBRARY)
  34. # FIND_PATH doesn't add "Headers" for a framework
  35. SET (PROJ_INCLUDE_DIR ${PROJ_LIBRARY}/Headers CACHE PATH "Path to a file.")
  36. ENDIF (PROJ_LIBRARY)
  37. SET (CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK_save} CACHE STRING "" FORCE)
  38. ENDIF ()
  39. ENDIF (APPLE)
  40. FIND_PATH(PROJ_INCLUDE_DIR proj_api.h
  41. "$ENV{INCLUDE}"
  42. "$ENV{LIB_DIR}/include"
  43. )
  44. IF (NOT PROJ_INCLUDE_DIR)
  45. FIND_PATH(PROJ_INCLUDE_DIR proj.h
  46. "$ENV{INCLUDE}"
  47. "$ENV{LIB_DIR}/include"
  48. )
  49. ENDIF (NOT PROJ_INCLUDE_DIR)
  50. FIND_LIBRARY(PROJ_LIBRARY NAMES proj_i proj PATHS
  51. "$ENV{LIB}"
  52. "$ENV{LIB_DIR}/lib"
  53. )
  54. endif()
  55. IF (PROJ_INCLUDE_DIR AND PROJ_LIBRARY)
  56. SET(PROJ_FOUND TRUE)
  57. ENDIF (PROJ_INCLUDE_DIR AND PROJ_LIBRARY)
  58. IF (PROJ_FOUND)
  59. IF (EXISTS ${PROJ_INCLUDE_DIR}/proj.h AND EXISTS ${PROJ_INCLUDE_DIR}/proj_experimental.h)
  60. FILE(READ ${PROJ_INCLUDE_DIR}/proj.h proj_version)
  61. STRING(REGEX REPLACE "^.*PROJ_VERSION_MAJOR +([0-9]+).*$" "\\1" PROJ_VERSION_MAJOR "${proj_version}")
  62. STRING(REGEX REPLACE "^.*PROJ_VERSION_MINOR +([0-9]+).*$" "\\1" PROJ_VERSION_MINOR "${proj_version}")
  63. STRING(REGEX REPLACE "^.*PROJ_VERSION_PATCH +([0-9]+).*$" "\\1" PROJ_VERSION_PATCH "${proj_version}")
  64. STRING(CONCAT PROJ_VERSION_STR "(" ${PROJ_VERSION_MAJOR} "." ${PROJ_VERSION_MINOR} "." ${PROJ_VERSION_PATCH} ")")
  65. IF ((PROJ_VERSION_MAJOR EQUAL 6) AND ((PROJ_VERSION_MINOR LESS 3) OR (PROJ_VERSION_MINOR EQUAL 3 AND PROJ_VERSION_PATCH LESS 1)))
  66. MESSAGE (FATAL_ERROR "Cannot build QGIS using Proj ${PROJ_VERSION_MAJOR}.${PROJ_VERSION_MINOR}.${PROJ_VERSION_PATCH} Use 6.3.1 or higher.")
  67. ENDIF ((PROJ_VERSION_MAJOR EQUAL 6) AND ((PROJ_VERSION_MINOR LESS 3) OR (PROJ_VERSION_MINOR EQUAL 3 AND PROJ_VERSION_PATCH LESS 1)))
  68. ELSE(EXISTS ${PROJ_INCLUDE_DIR}/proj.h AND EXISTS ${PROJ_INCLUDE_DIR}/proj_experimental.h)
  69. FILE(READ ${PROJ_INCLUDE_DIR}/proj_api.h proj_version)
  70. STRING(REGEX REPLACE "^.*PJ_VERSION ([0-9]+).*$" "\\1" PJ_VERSION "${proj_version}")
  71. # This will break if 4.10.0 ever will be released (highly unlikely)
  72. STRING(REGEX REPLACE "([0-9])([0-9])([0-9])" "\\1" PROJ_VERSION_MAJOR "${PJ_VERSION}")
  73. STRING(REGEX REPLACE "([0-9])([0-9])([0-9])" "\\2" PROJ_VERSION_MINOR "${PJ_VERSION}")
  74. STRING(REGEX REPLACE "([0-9])([0-9])([0-9])" "\\3" PROJ_VERSION_PATCH "${PJ_VERSION}")
  75. STRING(CONCAT PROJ_VERSION_STR "(" ${PROJ_VERSION_MAJOR} "." ${PROJ_VERSION_MINOR} "." ${PROJ_VERSION_PATCH} ")")
  76. # Minimum Proj version required is 4.9.3
  77. IF ((PROJ_VERSION_MAJOR EQUAL 4) AND ((PROJ_VERSION_MINOR LESS 9) OR ((PROJ_VERSION_MINOR EQUAL 9) AND (PROJ_VERSION_PATCH LESS 3))))
  78. MESSAGE(FATAL_ERROR "Found Proj: ${PROJ_VERSION_MAJOR}.${PROJ_VERSION_MINOR}.${PROJ_VERSION_PATCH}. Cannot build QGIS using Proj older than 4.9.3.")
  79. ENDIF((PROJ_VERSION_MAJOR EQUAL 4) AND ((PROJ_VERSION_MINOR LESS 9) OR ((PROJ_VERSION_MINOR EQUAL 9) AND (PROJ_VERSION_PATCH LESS 3))))
  80. ENDIF(EXISTS ${PROJ_INCLUDE_DIR}/proj.h AND EXISTS ${PROJ_INCLUDE_DIR}/proj_experimental.h)
  81. IF (NOT PROJ_FIND_QUIETLY)
  82. MESSAGE(STATUS "Found Proj: ${PROJ_LIBRARY} version ${PROJ_VERSION_MAJOR} ${PROJ_VERSION_STR}")
  83. ENDIF (NOT PROJ_FIND_QUIETLY)
  84. INCLUDE_DIRECTORIES(BEFORE SYSTEM ${PROJ_INCLUDE_DIR})
  85. ADD_DEFINITIONS(-DPROJ_VERSION_MAJOR=${PROJ_VERSION_MAJOR})
  86. ELSE (PROJ_FOUND)
  87. IF (PROJ_FIND_REQUIRED)
  88. MESSAGE(FATAL_ERROR "Could not find Proj")
  89. ENDIF (PROJ_FIND_REQUIRED)
  90. ENDIF (PROJ_FOUND)