Skip to content

Commit 10ec1ca

Browse files
authored
Merge pull request #273 from yegorich/cmake-cpp-option
CMake: add an option to build C++ version in addition to C version
2 parents d4af75f + 1f3d7cc commit 10ec1ca

3 files changed

Lines changed: 78 additions & 37 deletions

File tree

CMakeLists.txt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,16 @@ file(STRINGS "configure.ac"
66
VERSION_STRING REGEX ${VERSION_REGEX})
77
string(REGEX REPLACE ${VERSION_REGEX} "\\1" VERSION_STRING "${VERSION_STRING}")
88

9-
project(libconfig LANGUAGES C CXX VERSION ${VERSION_STRING})
9+
project(libconfig LANGUAGES C VERSION ${VERSION_STRING})
1010
option(BUILD_EXAMPLES "Enable examples" ON)
1111
option(BUILD_SHARED_LIBS "Enable shared library" ON)
1212
option(BUILD_TESTS "Enable tests" ON)
1313
option(BUILD_FUZZERS "Enable fuzzers" OFF)
14+
option(BUILD_CXX "Build the C++ library in addition to the C library" ON)
15+
16+
if(BUILD_CXX)
17+
enable_language(CXX)
18+
endif()
1419

1520
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
1621

examples/CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
add_subdirectory(c)
2-
add_subdirectory(c++)
2+
if(BUILD_CXX)
3+
add_subdirectory(c++)
4+
endif()

lib/CMakeLists.txt

Lines changed: 69 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -59,33 +59,46 @@ else()
5959
endif()
6060

6161
add_library(${libname} ${libsrc} ${libinc})
62-
add_library(${libname}++ ${libsrc_cpp} ${libinc_cpp})
62+
63+
if(BUILD_CXX)
64+
add_library(${libname}++ ${libsrc_cpp} ${libinc_cpp})
65+
endif()
6366

6467
target_include_directories(${libname} PUBLIC
6568
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
6669
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
6770

68-
target_include_directories(${libname}++ PUBLIC
69-
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
70-
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
71+
if(BUILD_CXX)
72+
target_include_directories(${libname}++ PUBLIC
73+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
74+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
75+
endif()
7176

7277
set_target_properties(${libname}
7378
PROPERTIES LINKER_LANGUAGE C
7479
DEFINE_SYMBOL LIBCONFIG_EXPORTS
7580
PUBLIC_HEADER "${libinc}")
76-
set_target_properties(${libname}++
77-
PROPERTIES LINKER_LANGUAGE CXX
78-
DEFINE_SYMBOL LIBCONFIGXX_EXPORTS
79-
PUBLIC_HEADER "${libinc_cpp}")
81+
if(BUILD_CXX)
82+
set_target_properties(${libname}++
83+
PROPERTIES LINKER_LANGUAGE CXX
84+
DEFINE_SYMBOL LIBCONFIGXX_EXPORTS
85+
PUBLIC_HEADER "${libinc_cpp}")
86+
endif()
8087

8188
set_version_info_from_makefile("Makefile.am" ${libname})
82-
set_version_info_from_makefile("Makefile.am" ${libname}++)
89+
if(BUILD_CXX)
90+
set_version_info_from_makefile("Makefile.am" ${libname}++)
91+
endif()
8392

8493
if(BUILD_SHARED_LIBS)
85-
target_compile_definitions(${libname}++ PRIVATE LIBCONFIG_STATIC)
94+
if(BUILD_CXX)
95+
target_compile_definitions(${libname}++ PRIVATE LIBCONFIG_STATIC)
96+
endif()
8697
else()
8798
target_compile_definitions(${libname} PUBLIC LIBCONFIG_STATIC)
88-
target_compile_definitions(${libname}++ PUBLIC LIBCONFIG_STATIC LIBCONFIGXX_STATIC)
99+
if(BUILD_CXX)
100+
target_compile_definitions(${libname}++ PUBLIC LIBCONFIG_STATIC LIBCONFIGXX_STATIC)
101+
endif()
89102
endif()
90103

91104
if(APPLE)
@@ -101,22 +114,28 @@ endif()
101114
if(HAVE_USELOCALE)
102115
target_compile_definitions(${libname}
103116
PRIVATE "HAVE_USELOCALE")
104-
target_compile_definitions(${libname}++
105-
PRIVATE "HAVE_USELOCALE")
117+
if(BUILD_CXX)
118+
target_compile_definitions(${libname}++
119+
PRIVATE "HAVE_USELOCALE")
120+
endif()
106121
endif()
107122

108123
if(HAVE_NEWLOCALE)
109124
target_compile_definitions(${libname}
110125
PRIVATE "HAVE_NEWLOCALE")
111-
target_compile_definitions(${libname}++
112-
PRIVATE "HAVE_NEWLOCALE")
126+
if(BUILD_CXX)
127+
target_compile_definitions(${libname}++
128+
PRIVATE "HAVE_NEWLOCALE")
129+
endif()
113130
endif()
114131

115132
if(HAVE_FREELOCALE)
116133
target_compile_definitions(${libname}
117134
PRIVATE "HAVE_FREELOCALE")
118-
target_compile_definitions(${libname}++
119-
PRIVATE "HAVE_FREELOCALE")
135+
if(BUILD_CXX)
136+
target_compile_definitions(${libname}++
137+
PRIVATE "HAVE_FREELOCALE")
138+
endif()
120139
endif()
121140

122141
if(MSVC)
@@ -125,28 +144,38 @@ if(MSVC)
125144
_CRT_SECURE_NO_DEPRECATE
126145
YY_NO_UNISTD_H
127146
YY_USE_CONST )
128-
129-
target_compile_definitions(${libname}++
130-
PRIVATE
131-
_CRT_SECURE_NO_DEPRECATE
132-
YY_NO_UNISTD_H
133-
YY_USE_CONST )
147+
if(BUILD_CXX)
148+
target_compile_definitions(${libname}++
149+
PRIVATE
150+
_CRT_SECURE_NO_DEPRECATE
151+
YY_NO_UNISTD_H
152+
YY_USE_CONST )
153+
endif()
134154
endif()
135155

136156
if(WIN32)
137157
target_link_libraries(${libname} shlwapi)
138-
target_link_libraries(${libname}++ shlwapi)
158+
if(BUILD_CXX)
159+
target_link_libraries(${libname}++ shlwapi)
160+
endif()
139161
endif()
140162

141163
target_include_directories(${libname}
142164
PUBLIC "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
143165
)
166+
if(BUILD_CXX)
167+
target_include_directories(${libname}++
168+
PUBLIC "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
169+
)
170+
endif()
144171

145-
target_include_directories(${libname}++
146-
PUBLIC "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
147-
)
172+
if(BUILD_CXX)
173+
set(_install_targets ${libname} ${libname}++)
174+
else()
175+
set(_install_targets ${libname})
176+
endif()
148177

149-
install(TARGETS ${libname} ${libname}++
178+
install(TARGETS ${_install_targets}
150179
EXPORT libconfigTargets
151180
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
152181
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
@@ -177,15 +206,20 @@ if (UNIX)
177206
${CMAKE_CURRENT_SOURCE_DIR}/libconfig.pc.cmake.in
178207
${CMAKE_CURRENT_BINARY_DIR}/libconfig.pc @ONLY
179208
)
180-
181-
configure_file(
182-
${CMAKE_CURRENT_SOURCE_DIR}/libconfig++.pc.cmake.in
183-
${CMAKE_CURRENT_BINARY_DIR}/libconfig++.pc @ONLY
184-
)
185-
209+
if(BUILD_CXX)
210+
configure_file(
211+
${CMAKE_CURRENT_SOURCE_DIR}/libconfig++.pc.cmake.in
212+
${CMAKE_CURRENT_BINARY_DIR}/libconfig++.pc @ONLY
213+
)
214+
endif()
186215
install(FILES
187216
${CMAKE_CURRENT_BINARY_DIR}/libconfig.pc
188-
${CMAKE_CURRENT_BINARY_DIR}/libconfig++.pc
189217
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
190218
)
219+
if(BUILD_CXX)
220+
install(FILES
221+
${CMAKE_CURRENT_BINARY_DIR}/libconfig++.pc
222+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
223+
)
224+
endif()
191225
endif (UNIX)

0 commit comments

Comments
 (0)