From 71794914928d0d2649922d090fba1230981ddd1f Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Sat, 9 Oct 2021 18:54:00 +0200 Subject: CMake build: generate invproj/invgeod binaries (symlinks on Unix, copy otherwise) (fixes #2852) --- src/bin_geod.cmake | 32 ++++++++++++++++++++++++++++++++ src/bin_proj.cmake | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) (limited to 'src') diff --git a/src/bin_geod.cmake b/src/bin_geod.cmake index 4ec28b04..4d91628a 100644 --- a/src/bin_geod.cmake +++ b/src/bin_geod.cmake @@ -18,3 +18,35 @@ install(TARGETS geod if(MSVC AND BUILD_SHARED_LIBS) target_compile_definitions(geod PRIVATE PROJ_MSVC_DLL_IMPORT=1) 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) + add_custom_command( + OUTPUT ${link_target} + COMMAND ${CMAKE_COMMAND} -E create_symlink ${link_source} ${link_target} + WORKING_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" + DEPENDS geod + COMMENT "Generating invgeod" + VERBATIM + ) +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_custom_target(invgeod ALL DEPENDS ${link_target}) + +install(FILES ${link_target} DESTINATION ${BINDIR}) diff --git a/src/bin_proj.cmake b/src/bin_proj.cmake index b5a4c140..2976b3da 100644 --- a/src/bin_proj.cmake +++ b/src/bin_proj.cmake @@ -19,3 +19,35 @@ install(TARGETS binproj if(MSVC AND BUILD_SHARED_LIBS) target_compile_definitions(binproj PRIVATE PROJ_MSVC_DLL_IMPORT=1) 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) + add_custom_command( + OUTPUT ${link_target} + COMMAND ${CMAKE_COMMAND} -E create_symlink ${link_source} ${link_target} + WORKING_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" + DEPENDS binproj + COMMENT "Generating invproj" + VERBATIM + ) +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_custom_target(invproj ALL DEPENDS ${link_target}) + +install(FILES ${link_target} DESTINATION ${BINDIR}) -- cgit v1.2.3