project(librcw) cmake_minimum_required(VERSION 3.0.2) include(GNUInstallDirs) set(librcw_VERSION_STRING "000001000L") set(librcw_VERSION_MAJOR 0) set(librcw_VERSION_MINOR 1) set(librcw_VERSION_REVISION 0) set(INCLUDE_PATH ${CMAKE_SOURCE_DIR}/include) include_directories(BEFORE SYSTEM "${INCLUDE_PATH}") option(ENABLE_SHARED "Build shared library" ON) option(ENABLE_PROFILING "Enable asan" OFF) option(BUILD_TESTS "Enable testing" OFF) mark_as_advanced(ENABLE_PROFILING) set(SOURCE_LIST "src/async.cpp" "src/curl_easy_handle.cpp" "src/curl_header_list.cpp" "src/httpint.cpp" "src/read_write_cback.cpp" "src/response.cpp" "src/sync.cpp" "src/types.cpp") if(ENABLE_SHARED) add_library(rcw SHARED ${SOURCE_LIST}) set_target_properties(rcw PROPERTIES SOVERSION "${librcw_VERSION_MAJOR}.${librcw_VERSION_MINOR}.${librcw_VERSION_REVISION}") set(LIBRCW_LIBFLAGS "-lrcw") target_link_libraries(rcw "-lcurl -lrexy -lpthread") else() add_library(rcw STATIC ${SOURCE_LIST}) set(LIBRCW_LIBFLAGS "-lrcw -lcurl -lrexy -lpthread") target_link_libraries(rcw "-lcurl -lrexy -lpthread") endif() if(ENABLE_PROFILING) target_compile_options(rcw PRIVATE -fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls) target_link_options(rcw PRIVATE -fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls) endif() if(BUILD_TESTS) enable_testing() add_subdirectory(tests) endif() set(LIBRCW_PUBLIC_HEADERS "include/async.hpp" "include/curl_easy_handle.hpp" "include/curl_header_list.hpp" "include/httpint.hpp" "include/rcw.hpp" "include/read_write_cback.hpp" "include/response.hpp" "include/string.hpp" "include/sync.hpp" "include/types.hpp") target_compile_options(rcw PRIVATE -Wall -Wextra -pedantic -std=c++17) install(TARGETS rcw ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ) install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/pc/librcw.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig" ) install(FILES ${LIBRCW_PUBLIC_HEADERS} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/rcw/") configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/pc/librcw.pc.cmake.in" "${CMAKE_CURRENT_SOURCE_DIR}/pc/librcw.pc" @ONLY ) configure_file( "${INCLUDE_PATH}/rcw.hpp.in" "${INCLUDE_PATH}/rcw.hpp" ) add_custom_target(uninstall cat install_manifest.txt | xargs rm)