@@ -22,16 +22,20 @@ cmake_minimum_required(VERSION 3.16)
2222project (cplusplus)
2323
2424include (FetchContent)
25+ include (GNUInstallDirs)
26+ include (CMakePackageConfigHelpers)
2527
26- find_package (fmt 8.0.1 CONFIG QUIET )
28+ find_package (fmt 7.1.3 CONFIG QUIET )
29+
30+ file (READ "${CMAKE_CURRENT_SOURCE_DIR} /version.txt" version )
2731
2832set (CMAKE_CXX_STANDARD 20)
2933
3034if (NOT fmt_FOUND)
3135FetchContent_Declare(
3236 fmt
33- GIT_REPOSITORY https://github.com/fmtlib/fmt
34- GIT_TAG 7.1.3
37+ GIT_REPOSITORY https://github.com/fmtlib/fmt
38+ GIT_TAG 7.1.3
3539 GIT_SHALLOW 1
3640)
3741
@@ -62,15 +66,21 @@ add_subdirectory(tools/kwgen)
6266
6367aux_source_directory (src/cxx SOURCES )
6468
65- add_library (CPlusPlus ${SOURCES}
69+ add_library (cxx ${SOURCES}
6670 # generated files
6771 keywords-priv.h
6872)
6973
70- target_include_directories (CPlusPlus PUBLIC src)
71- target_include_directories (CPlusPlus PRIVATE "${CMAKE_CURRENT_BINARY_DIR} " )
72- target_link_libraries (CPlusPlus fmt::fmt-header-only utf8::cpp)
73- target_link_libraries (CPlusPlus nlohmann_json::nlohmann_json)
74+ target_include_directories (cxx
75+ PRIVATE ${CMAKE_CURRENT_BINARY_DIR}
76+ PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /src>
77+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} >
78+ )
79+
80+ target_link_libraries (cxx
81+ PUBLIC $<BUILD_INTERFACE:fmt::fmt-header-only>
82+ $<BUILD_INTERFACE:utf8::cpp>
83+ )
7484
7585add_custom_command (OUTPUT keywords-priv.h
7686 COMMAND kwgen < ${CMAKE_CURRENT_SOURCE_DIR} /src/cxx/keywords.kwgen > keywords-priv.h
@@ -80,7 +90,7 @@ add_custom_command(OUTPUT keywords-priv.h
8090aux_source_directory (src/frontend FRONTEND_SOURCES)
8191
8292add_executable (cxx-frontend ${FRONTEND_SOURCES} )
83- target_link_libraries (cxx-frontend CPlusPlus )
93+ target_link_libraries (cxx-frontend cxx nlohmann_json::nlohmann_json )
8494
8595if (EMSCRIPTEN)
8696 target_link_options (cxx-frontend PUBLIC
@@ -94,7 +104,7 @@ if(EMSCRIPTEN)
94104
95105 add_executable (cxx-js src/cxx-js/api.cc)
96106
97- target_link_libraries (cxx-js CPlusPlus )
107+ target_link_libraries (cxx-js cxx )
98108
99109 target_link_options (cxx-js PUBLIC
100110 "SHELL:--bind"
@@ -110,16 +120,47 @@ if(EMSCRIPTEN)
110120
111121endif ()
112122
113- add_custom_target (unit
114- DEPENDS tests/unit/source .cc
115- COMMAND clang++ -E -stdlib=libc++ -xc++ -std=c++20 ${CMAKE_CURRENT_SOURCE_DIR} /tests/unit/source .cc | grep -v ^\# > unit.cc
123+ enable_testing ()
124+
125+ add_subdirectory (tests)
126+
127+ file (GLOB CXX_INCLUDE_HEADER_FILES src/cxx/*.h)
128+
129+ configure_package_config_file(
130+ ${CMAKE_CURRENT_SOURCE_DIR} /Config.cmake.in
131+ "${CMAKE_CURRENT_BINARY_DIR} /cxxConfig.cmake"
132+ INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/cxx
116133)
117134
118- add_custom_target (unit.tokens
119- DEPENDS unit cxx-frontend
120- COMMAND cxx-frontend --dump-tokens unit.cc > unit.tokens
135+ write_basic_package_version_file(
136+ "${CMAKE_CURRENT_BINARY_DIR} /cxxConfigVersion.cmake"
137+ VERSION "${version} "
138+ COMPATIBILITY AnyNewerVersion
121139)
122140
123- enable_testing ()
141+ install (
142+ TARGETS cxx
143+ EXPORT cxxTargets
144+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
145+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
146+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
147+ INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
148+ )
124149
125- add_subdirectory (tests)
150+ install (
151+ EXPORT cxxTargets
152+ FILE cxxTargets.cmake
153+ NAMESPACE cxx::
154+ DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/cxx
155+ )
156+
157+ install (
158+ FILES ${CXX_INCLUDE_HEADER_FILES}
159+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /cxx
160+ )
161+
162+ install (FILES
163+ "${CMAKE_CURRENT_BINARY_DIR} /cxxConfig.cmake"
164+ "${CMAKE_CURRENT_BINARY_DIR} /cxxConfigVersion.cmake"
165+ DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/cxx
166+ )
0 commit comments