Add external project

This commit is contained in:
Andrey Rodionov 2023-06-04 12:05:44 +03:00
parent d9e8d7c294
commit 965616e7fb
4 changed files with 69 additions and 15 deletions

View File

@ -1,7 +1,62 @@
include(FetchContent)
FetchContent_Declare(Libevent
GIT_REPOSITORY https://github.com/libevent/libevent.git
GIT_TAG release-2.1.12-stable
FIND_PACKAGE_ARGS NAMES Libevent
)
FetchContent_MakeAvailable(Libevent)
find_package(Libevent QUIET)
if(NOT Libevent_FOUND)
include(ExternalProject)
if (WIN32)
ExternalProject_Add(Libevent
GIT_REPOSITORY https://github.com/libevent/libevent.git
GIT_TAG release-2.1.12-stable
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${BINARY_DIR}
-DCMAKE_RUNTIME_OUTPUT_DIRECTORY=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}
-DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE=${CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE}
-DCMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE=${CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE}
-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE}
-DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG=${CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG}
-DCMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG=${CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG}
-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG}
-DEVENT__DISABLE_TESTS=ON
-DEVENT__DISABLE_SAMPLES=ON
-DEVENT__DISABLE_REGRESS=ON
-DEVENT__DISABLE_BENCHMARK=ON
INSTALL_COMMAND ""
)
else()
ExternalProject_Add(Libevent
GIT_REPOSITORY https://github.com/libevent/libevent.git
GIT_TAG release-2.1.12-stable
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${BINARY_DIR}
-DCMAKE_RUNTIME_OUTPUT_DIRECTORY=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}
-DEVENT__DISABLE_TESTS=ON
-DEVENT__DISABLE_SAMPLES=ON
-DEVENT__DISABLE_REGRESS=ON
-DEVENT__DISABLE_BENCHMARK=ON
INSTALL_COMMAND ""
)
endif()
add_dependencies(${PROJECT_NAME} Libevent)
ExternalProject_Get_property(Libevent SOURCE_DIR)
ExternalProject_Get_property(Libevent BINARY_DIR)
set(LIBEVENT_INCLUDE_DIRS "${SOURCE_DIR}/include;${BINARY_DIR}/include)")
if (WIN32)
set(LIBEVENT_LIBRARIES "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/event.lib")
else()
set(LIBEVENT_LIBRARIES "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libevent.so")
endif()
# Установка проекта
install(IMPORTED_RUNTIME_ARTIFACTS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX})
install (DIRECTORY ${SOURCE_DIR}/include/ ${BINARY_DIR}/include/ DESTINATION ${CMAKE_INSTALL_PREFIX}/include)
endif()

View File

@ -33,8 +33,8 @@ target_link_libraries(${PROJECT_NAME} ${LIBRARIES})
# Установка проекта
install (TARGETS ${PROJECT_NAME} DESTINATION ${RLIBRARYPATH})
file(GLOB PUBHEADERS "${RINCPATH}/${PROJECT_NAME}/*.h")
file(GLOB PUBHEADERS "${CMAKE_SOURCE_DIR}/${RINCPATH}/${PROJECT_NAME}/*.h")
foreach(PUBFILENAME ${PUBHEADERS})
string(REPLACE "${RINCPATH}/${PROJECT_NAME}/" "" FILENAME ${PUBFILENAME})
install(FILES ${FILENAME} DESTINATION "${INCPATH}/${PROJECT_NAME}")
string(REPLACE "${CMAKE_SOURCE_DIR}/${RINCPATH}/${PROJECT_NAME}/" "" FILENAME ${PUBFILENAME})
install(FILES ${FILENAME} DESTINATION "${RINCPATH}/${PROJECT_NAME}")
endforeach()

View File

@ -19,7 +19,7 @@ if (UNIX)
set(RLIBRARYTESTPATH "lib/${CMAKE_PROJECT_NAME}")
endif (UNIX)
if (WIN32)
set(RLIBRARYPATH "./")
set(RLIBRARYTESTPATH "./")
set(RLIBRARYPATH "${APPPATH}")
set(RLIBRARYTESTPATH "${APPPATH}")
endif (WIN32)

View File

@ -5,14 +5,13 @@ project(asyncpg LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(PostgreSQL)
include("${CMAKE_SOURCE_DIR}/cmake/libevent.cmake")
include("${CMAKE_SOURCE_DIR}/cmake/libs.cmake")
target_compile_definitions(${PROJECT_NAME} PRIVATE ASYNCPG_LIBRARY)
find_package(PostgreSQL)
target_include_directories(${PROJECT_NAME} PRIVATE ${PostgreSQL_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} PRIVATE ${PostgreSQL_LIBRARIES})
include("${CMAKE_SOURCE_DIR}/cmake/libevent.cmake")
target_include_directories(${PROJECT_NAME} PRIVATE ${LIBEVENT_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} PRIVATE ${LIBEVENT_LIBRARIES})