From 65dabe16d94587ae54fb4930873e3f5557d1cedb Mon Sep 17 00:00:00 2001 From: rexy712 Date: Fri, 6 Mar 2020 16:14:59 -0800 Subject: [PATCH] Separate CMakeLists into separate projects for rjp and rjp++. Add install for pkg-config files --- CMakeLists.txt | 33 +++++++++++-------------------- rjp++/CMakeLists.txt | 46 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 22 deletions(-) create mode 100644 rjp++/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index abca993..75e7465 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,3 @@ -include(CMakeDependentOption) include(GNUInstallDirs) cmake_minimum_required(VERSION 3.0.2) @@ -7,31 +6,27 @@ set(rjp_VERSION_MAJOR 0) set(rjp_VERSION_MINOR 9) set(rjp_VERSION_REVISION 0) set(INCLUDE_PATH ${CMAKE_SOURCE_DIR}/include) -set(INCLUDE_PATH_CPP ${CMAKE_SOURCE_DIR}/rjp++/include) +include_directories("${INCLUDE_PATH}") + configure_file( "${INCLUDE_PATH}/config.h.in" "${INCLUDE_PATH}/config.h" ) -include_directories("${INCLUDE_PATH}") - +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/pc/rjp.pc.cmake.in" + "${CMAKE_CURRENT_SOURCE_DIR}/pc/rjp.pc" + @ONLY +) option(ENABLE_DIAGNOSTICS "Print diagnostic messages when parsing json to help identify issues" ON) option(ENABLE_SHARED "Build shared library" OFF) option(ENABLE_C++ "Build C++ wrapper library" ON) set(SOURCE_LIST "src/rjp_ordered_object.c" "src/rjp_unordered_object.c" "src/input.c" "src/output.c" "src/rjp_array.c" "src/rjp.c" "src/rjp_object.c" "src/rjp_string.c" "src/tree.c") -set(SOURCE_LIST_CPP "rjp++/src/allocator.cpp" "rjp++/src/array.cpp" "rjp++/src/integral.cpp" "rjp++/src/object.cpp" "rjp++/src/rjp.cpp" "rjp++/src/string.cpp" "rjp++/src/value.cpp") if(ENABLE_SHARED) add_library(rjp SHARED ${SOURCE_LIST}) - if(ENABLE_C++) - add_library(rjp++ SHARED ${SOURCE_LIST_CPP}) - set_target_properties(rjp++ PROPERTIES SOVERSION "${rjp_VERSION_MAJOR}.${rjp_VERSION_MINOR}.${rjp_VERSION_REVISION}") - endif() set_target_properties(rjp PROPERTIES SOVERSION "${rjp_VERSION_MAJOR}.${rjp_VERSION_MINOR}.${rjp_VERSION_REVISION}") else() add_library(rjp STATIC ${SOURCE_LIST}) - if(ENABLE_C++) - add_library(rjp++ STATIC ${SOURCE_LIST_CPP}) - endif() endif() set_target_properties(rjp PROPERTIES PUBLIC_HEADER ${INCLUDE_PATH}/rjp.h) @@ -45,17 +40,11 @@ install(TARGETS rjp LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} ) +install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/pc/rjp.pc" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig" +) if(ENABLE_C++) - target_include_directories(rjp++ PRIVATE ${INCLUDE_PATH_CPP} ${INCLUDE_PATH}) - set_target_properties(rjp++ PROPERTIES PUBLIC_HEADER ${INCLUDE_PATH_CPP}/rjp.hpp) - set_target_properties(rjp++ PROPERTIES COMPILE_FLAGS -std=c++17) - target_compile_options(rjp++ PRIVATE -Wall -Wextra -pedantic) - target_link_libraries(rjp++ rjp -lrexy) - install(TARGETS rjp++ - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - ) + add_subdirectory(rjp++) endif() diff --git a/rjp++/CMakeLists.txt b/rjp++/CMakeLists.txt new file mode 100644 index 0000000..75e5310 --- /dev/null +++ b/rjp++/CMakeLists.txt @@ -0,0 +1,46 @@ +include(GNUInstallDirs) + +cmake_minimum_required(VERSION 3.0.2) +project(rjp++) +set(rjp++_VERSION_MAJOR ${rjp_VERSION_MAJOR}) +set(rjp++_VERSION_MINOR ${rjp_VERSION_MINOR}) +set(rjp++_VERSION_REVISION ${rjp_VERSION_REVISION}) +set(INCLUDE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/include) +include_directories("${INCLUDE_PATH}") + +option(ENABLE_SHARED "Build shared library" OFF) + +set(SOURCE_LIST "src/allocator.cpp" "src/array.cpp" "src/integral.cpp" "src/object.cpp" "src/rjp.cpp" "src/string.cpp" "src/string_val.cpp" "src/value.cpp") +if(ENABLE_SHARED) + add_library(rjp++ SHARED ${SOURCE_LIST}) + set_target_properties(rjp++ PROPERTIES SOVERSION "${rjp_VERSION_MAJOR}.${rjp_VERSION_MINOR}.${rjp_VERSION_REVISION}") +else() + add_library(rjp++ STATIC ${SOURCE_LIST}) +endif() + +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/pc/rjp++.pc.cmake.in" + "${CMAKE_CURRENT_SOURCE_DIR}/pc/rjp++.pc" + @ONLY +) +set_target_properties(rjp++ PROPERTIES PUBLIC_HEADER ${INCLUDE_PATH}/rjp.hpp) +set(CPP_HEADERS ${INCLUDE_PATH}/array.hpp ${INCLUDE_PATH}/integral.hpp ${INCLUDE_PATH}/iterator.hpp + ${INCLUDE_PATH}/member.hpp ${INCLUDE_PATH}/object.hpp ${INCLUDE_PATH}/rjp_internal.hpp + ${INCLUDE_PATH}/string.hpp ${INCLUDE_PATH}/string_val.hpp ${INCLUDE_PATH}/value.hpp) + +set_target_properties(rjp++ PROPERTIES COMPILE_FLAGS -std=c++17) +target_compile_options(rjp++ PRIVATE -Wall -Wextra -pedantic) +target_link_libraries(rjp++ rjp -lrexy) + +install(TARGETS rjp++ + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +) +install(FILES ${CPP_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/rjp++) +install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/pc/rjp++.pc" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig" +) + + +add_custom_target(uninstall_rjp++ cat install_manifest.txt | xargs rm)