xref: /aosp_15_r20/external/libconfig/lib/CMakeLists.txt (revision 2e9d491483b805f09ea864149eadd5680efcc72a)
1set(libinc
2    libconfig.h)
3
4set(libsrc
5    grammar.h
6    parsectx.h
7    scanctx.h
8    scanner.h
9    win32/stdint.h
10    strbuf.h
11    strvec.h
12    util.h
13    wincompat.h
14    grammar.c
15    libconfig.c
16    scanctx.c
17    scanner.c
18    strbuf.c
19    strvec.c
20    util.c
21    wincompat.c)
22
23set(libinc_cpp
24    libconfig.h++
25    libconfig.hh)
26
27set(libsrc_cpp
28    ${libsrc}
29    libconfigcpp.cc)
30
31if(MSVC)
32    set(libname "libconfig")
33else()
34    set(libname "config")
35endif()
36
37add_library(${libname} ${libsrc} ${libinc})
38add_library(${libname}++ ${libsrc_cpp} ${libinc_cpp})
39
40set_target_properties(${libname}
41    PROPERTIES LINKER_LANGUAGE C
42        SOVERSION "${libconfig_VERSION_MAJOR}"
43        VERSION "${libconfig_VERSION}"
44        DEFINE_SYMBOL LIBCONFIG_EXPORTS
45        PUBLIC_HEADER "${libinc}")
46set_target_properties(${libname}++
47    PROPERTIES LINKER_LANGUAGE CXX
48        SOVERSION "${libconfig_VERSION_MAJOR}"
49        DEFINE_SYMBOL LIBCONFIGXX_EXPORTS
50        VERSION "${libconfig_VERSION}"
51        PUBLIC_HEADER "${libinc_cpp}")
52
53#check_symbol_exists(uselocale "locale.h" HAVE_USELOCALE)
54#check_symbol_exists(newlocale "locale.h" HAVE_NEWLOCALE)
55#check_symbol_exists(freelocale "locale.h" HAVE_FREELOCALE)
56
57if(BUILD_SHARED_LIBS)
58    target_compile_definitions(${libname}++ PRIVATE LIBCONFIG_STATIC)
59else()
60    target_compile_definitions(${libname} PUBLIC LIBCONFIG_STATIC)
61    target_compile_definitions(${libname}++ PUBLIC LIBCONFIGXX_STATIC)
62endif()
63
64if(HAVE_USELOCALE)
65target_compile_definitions(${libname}
66    PRIVATE "HAVE_USELOCALE")
67endif()
68
69if(HAVE_NEWLOCALE)
70target_compile_definitions(${libname}
71    PRIVATE "HAVE_NEWLOCALE")
72endif()
73
74if(HAVE_FREELOCALE)
75target_compile_definitions(${libname}
76    PRIVATE "HAVE_FREELOCALE")
77endif()
78
79if(MSVC)
80    target_compile_definitions(${libname}
81        PRIVATE
82            _CRT_SECURE_NO_DEPRECATE
83            YY_NO_UNISTD_H
84            YY_USE_CONST )
85
86    target_compile_definitions(${libname}++
87        PRIVATE
88            _CRT_SECURE_NO_DEPRECATE
89            YY_NO_UNISTD_H
90            YY_USE_CONST )
91endif()
92
93if(WIN32)
94    target_link_libraries(${libname} shlwapi)
95    target_link_libraries(${libname}++ shlwapi)
96endif()
97
98target_include_directories(${libname}
99  PUBLIC "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
100  )
101
102target_include_directories(${libname}++
103  PUBLIC "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
104  )
105
106install(TARGETS ${libname}
107    EXPORT libconfigTargets
108    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
109    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
110    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
111    PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
112)
113
114install(TARGETS ${libname}++
115    EXPORT libconfig++Targets
116    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
117    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
118    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
119    PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
120)
121
122
123include(CMakePackageConfigHelpers)
124foreach(target_name libconfig libconfig++)
125  write_basic_package_version_file("${target_name}ConfigVersion.cmake"
126    VERSION ${PACKAGE_VERSION}
127    COMPATIBILITY SameMajorVersion
128    )
129
130  install(EXPORT ${target_name}Targets
131    FILE "${target_name}Config.cmake"
132    NAMESPACE libconfig::
133    DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/libconfig
134    )
135
136  install(FILES
137    "${CMAKE_CURRENT_BINARY_DIR}/${target_name}ConfigVersion.cmake"
138    DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/libconfig"
139    )
140endforeach()
141