cmake/Common.cmake (145 lines of code) (raw):
function(set_output_directory EXECUTABLE_NAME)
set_target_properties(${EXECUTABLE_NAME} PROPERTIES
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/$<$<CONFIG:Debug>:>)
set_target_properties(${EXECUTABLE_NAME} PROPERTIES
LIBRARY_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_BINARY_DIR}/$<$<CONFIG:Debug>:>)
set_target_properties(${EXECUTABLE_NAME} PROPERTIES
LIBRARY_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_BINARY_DIR}/$<$<CONFIG:Debug>:>)
set_target_properties(${EXECUTABLE_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/$<$<CONFIG:Debug>:>)
set_target_properties(${EXECUTABLE_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_BINARY_DIR}/$<$<CONFIG:Debug>:>)
set_target_properties(${EXECUTABLE_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_BINARY_DIR}/$<$<CONFIG:Debug>:>)
set_target_properties(${EXECUTABLE_NAME} PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/$<$<CONFIG:Debug>:>)
set_target_properties(${EXECUTABLE_NAME} PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_BINARY_DIR}/$<$<CONFIG:Debug>:>)
set_target_properties(${EXECUTABLE_NAME} PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_BINARY_DIR}/$<$<CONFIG:Debug>:>)
endfunction()
function(get_aws_libraries AWS_DEPENDENCIES)
set(${AWS_DEPENDENCIES}
aws-cpp-sdk-redshift
aws-cpp-sdk-redshift-serverless
aws-cpp-sdk-sts
aws-cpp-sdk-sso-oidc
aws-cpp-sdk-core
aws-cpp-sdk-sso-oidc
aws-crt-cpp
aws-c-s3
aws-c-auth
aws-c-event-stream
aws-c-http
aws-c-mqtt
aws-c-io
aws-c-cal
aws-checksums
aws-c-compression
aws-c-common
aws-c-sdkutils
PARENT_SCOPE)
endfunction()
function(get_rsodbc_static_libs RS_STATIC_LIBS)
message(STATUS "INSIDE get_rsodbc_static_libs")
set(AWS_DEPENDENCIES "")
get_aws_libraries(AWS_DEPENDENCIES)
message(STATUS "AWS_DEPENDENCIES = ${AWS_DEPENDENCIES}")
get_rsodbc_deps(rsodbc_deps)
message(STATUS "get_rsodbc_deps: ${rsodbc_deps}")
foreach(PACKAGE ${rsodbc_deps})
foreach(LIB_DIR ${CMAKE_LIBRARY_PATH})
set(LIB_FILE_PATH "")
set(LIB_FILE_PATH_ "${LIB_DIR}/${CMAKE_FIND_LIBRARY_PREFIXES}${PACKAGE}${CMAKE_FIND_LIBRARY_SUFFIXES}")
file(TO_CMAKE_PATH ${LIB_FILE_PATH_} LIB_FILE_PATH)
# message(STATUS "Searching for ${PACKAGE} in ${LIB_FILE_PATH}")
if(EXISTS ${LIB_FILE_PATH})
message("FOUND STATIC LIB ${LIB_FILE_PATH}")
list(APPEND RS_STATIC_LIBS "${LIB_FILE_PATH}")
set(${PACKAGE}_FOUND TRUE)
break()
endif()
endforeach()
if(NOT ${PACKAGE}_FOUND)
message(WARNING "NOT FOUND STATIC for ${PACKAGE}")
endif()
endforeach()
set(${RS_STATIC_LIBS} ${${RS_STATIC_LIBS}} PARENT_SCOPE)
endfunction()
macro(SUBDIRLIST result curdir)
file(TO_CMAKE_PATH "${curdir}" curdir)
# message(STATUS "curdir=${curdir}")
file(
GLOB children
RELATIVE ${curdir}
${curdir}/*)
set(dirlist "")
foreach(child ${children})
if(IS_DIRECTORY ${curdir}/${child})
list(APPEND dirlist ${child})
endif()
endforeach()
set(${result} ${dirlist})
endmacro()
function(include_and_link_odbc TARGET_NAME)
if(RS_ODBC_DIR)
target_include_directories(${TARGET_NAME} PRIVATE ${RS_ODBC_DIR}/include)
target_link_directories(${TARGET_NAME} PRIVATE ${RS_ODBC_DIR}/lib)
else()
target_include_directories(${TARGET_NAME} PRIVATE ${CMAKE_INCLUDE_PATH})
target_link_directories(${TARGET_NAME} PRIVATE ${CMAKE_LIBRARY_PATH})
endif()
endfunction()
function(include_and_link_openssl TARGET_NAME)
if(RS_OPENSSL_DIR)
target_include_directories(${TARGET_NAME} PRIVATE ${CMAKE_INCLUDE_PATH})
target_link_directories(${TARGET_NAME} PRIVATE ${CMAKE_LIBRARY_PATH})
endif()
endfunction()
function(find_gtest)
# Look for libgtest.a gtest.lib in CMAKE_LIBRARY_PATH
find_library(GTEST_LIBRARY
NAMES gtest
PATHS ${CMAKE_LIBRARY_PATH}
)
# Check if libgtest.a is found
if (GTEST_LIBRARY)
message(STATUS "Found GTest library: ${GTEST_LIBRARY}")
# Set variables expected by GTest
set(GTEST_LIBRARIES ${GTEST_LIBRARY} PARENT_SCOPE)
# Set the include directories where GTest headers are located
get_filename_component(GTEST_DIR "${GTEST_LIBRARY}" DIRECTORY)
message(STATUS "get_filename_component ${GTEST_LIBRARY} == > ${GTEST_DIR}")
link_directories("${GTEST_DIR}")
include_directories("${GTEST_DIR}/../include" )
else()
message(STATUS "GTest library not found, using find_package!")
# Search the standard way and fail the standard way
find_package(GTest REQUIRED)
endif()
include_directories(${GTEST_INCLUDE_DIRS})
endfunction(find_gtest)
function(post_build_copy_dependency_files EXECUTABLE_NAME DST_DIR)
# Copy required dlls
if ( WIN32 )
set_output_directory(${EXECUTABLE_NAME})
file(TO_CMAKE_PATH "${RS_OPENSSL_DIR}/bin/*" OP)
file(GLOB DEPENDENCY_FILES "${OP}" "${CMAKE_SOURCE_DIR}/src/pgclient/kfw-3-2-2-final/bin/Win64/*")
# setting *.dll as the above filter didn't work
set(DLL_FILES "")
foreach(FILE ${DEPENDENCY_FILES})
if(FILE MATCHES "\\.dll$")
list(APPEND DLL_FILES ${FILE})
endif()
endforeach()
message(STATUS " Files to copy ${DLL_FILES} to ${DST_DIR}")
# Now DLL_FILES contains all the .dll files from both directories
foreach(DLL_FILE ${DLL_FILES})
add_custom_command(
TARGET ${EXECUTABLE_NAME}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${DLL_FILE} "${DST_DIR}"
)
endforeach()
endif ()
endfunction()