aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2021-10-16 15:28:13 +0200
committerEven Rouault <even.rouault@spatialys.com>2021-10-16 15:28:13 +0200
commit576a075d309056382cadc26ddf04c9eb779114a0 (patch)
tree8e19c18bcec72af76f210578a6a0755b4fe9d89c
parent22fcf6689e0a718a5c28a09446b30566ec30a2b0 (diff)
downloadPROJ-576a075d309056382cadc26ddf04c9eb779114a0.tar.gz
PROJ-576a075d309056382cadc26ddf04c9eb779114a0.zip
CMake: fix invproj/invgeod generation on Windows when building with an explicit configuration
-rw-r--r--src/bin_geod.cmake35
-rw-r--r--src/bin_proj.cmake38
2 files changed, 41 insertions, 32 deletions
diff --git a/src/bin_geod.cmake b/src/bin_geod.cmake
index 4d91628a..3f3f9bf5 100644
--- a/src/bin_geod.cmake
+++ b/src/bin_geod.cmake
@@ -21,10 +21,11 @@ endif()
# invgeod target: symlink or copy of geod executable
-set(link_target "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/invgeod${CMAKE_EXECUTABLE_SUFFIX}")
-set(link_source "geod${CMAKE_EXECUTABLE_SUFFIX}")
-
if(UNIX)
+
+ set(link_target "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/invgeod${CMAKE_EXECUTABLE_SUFFIX}")
+ set(link_source "geod${CMAKE_EXECUTABLE_SUFFIX}")
+
add_custom_command(
OUTPUT ${link_target}
COMMAND ${CMAKE_COMMAND} -E create_symlink ${link_source} ${link_target}
@@ -33,20 +34,22 @@ if(UNIX)
COMMENT "Generating invgeod"
VERBATIM
)
+
+ add_custom_target(invgeod ALL DEPENDS ${link_target})
+
+ install(FILES ${link_target} DESTINATION ${BINDIR})
+
else()
- # symlinks are supported on Windows in cmake >= 3.17, but
- # symlinks on Windows are a bit tricky, so just copy
- add_custom_command(
- OUTPUT ${link_target}
- COMMAND ${CMAKE_COMMAND} -E copy ${link_source} ${link_target}
- WORKING_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}"
- DEPENDS geod
- COMMENT "Generating invgeod"
- VERBATIM
- )
-endif()
+ add_executable(invgeod ${GEOD_SRC} ${GEOD_INCLUDE})
+ target_link_libraries(invgeod PRIVATE ${PROJ_LIBRARIES})
+ target_compile_options(invgeod PRIVATE ${PROJ_CXX_WARN_FLAGS})
-add_custom_target(invgeod ALL DEPENDS ${link_target})
+ install(TARGETS invgeod
+ DESTINATION ${BINDIR})
-install(FILES ${link_target} DESTINATION ${BINDIR})
+ if(MSVC AND BUILD_SHARED_LIBS)
+ target_compile_definitions(invgeod PRIVATE PROJ_MSVC_DLL_IMPORT=1)
+ endif()
+
+endif()
diff --git a/src/bin_proj.cmake b/src/bin_proj.cmake
index 2976b3da..163303f8 100644
--- a/src/bin_proj.cmake
+++ b/src/bin_proj.cmake
@@ -22,10 +22,11 @@ endif()
# invproj target: symlink or copy of proj executable
-set(link_target "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/invproj${CMAKE_EXECUTABLE_SUFFIX}")
-set(link_source "proj${CMAKE_EXECUTABLE_SUFFIX}")
-
if(UNIX)
+
+ set(link_target "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/invproj${CMAKE_EXECUTABLE_SUFFIX}")
+ set(link_source "proj${CMAKE_EXECUTABLE_SUFFIX}")
+
add_custom_command(
OUTPUT ${link_target}
COMMAND ${CMAKE_COMMAND} -E create_symlink ${link_source} ${link_target}
@@ -34,20 +35,25 @@ if(UNIX)
COMMENT "Generating invproj"
VERBATIM
)
+
+ add_custom_target(invproj ALL DEPENDS ${link_target})
+
+ install(FILES ${link_target} DESTINATION ${BINDIR})
+
else()
- # symlinks are supported on Windows in cmake >= 3.17, but
- # symlinks on Windows are a bit tricky, so just copy
- add_custom_command(
- OUTPUT ${link_target}
- COMMAND ${CMAKE_COMMAND} -E copy ${link_source} ${link_target}
- WORKING_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}"
- DEPENDS binproj
- COMMENT "Generating invproj"
- VERBATIM
- )
-endif()
+ add_executable(invproj ${PROJ_SRC})
+ set_target_properties(invproj
+ PROPERTIES
+ RUNTIME_OUTPUT_NAME proj)
+ target_link_libraries(invproj PRIVATE ${PROJ_LIBRARIES})
+ target_compile_options(invproj PRIVATE ${PROJ_CXX_WARN_FLAGS})
-add_custom_target(invproj ALL DEPENDS ${link_target})
+ install(TARGETS invproj
+ DESTINATION ${BINDIR})
-install(FILES ${link_target} DESTINATION ${BINDIR})
+ if(MSVC AND BUILD_SHARED_LIBS)
+ target_compile_definitions(invproj PRIVATE PROJ_MSVC_DLL_IMPORT=1)
+ endif()
+
+endif()