blob: 651dab2f068e133ec2fb2692256980f6048ca522 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
cmake_minimum_required(VERSION 3.14)
set(ac_init_line_re "AC_INIT\\(([^,]+), ([^,]+), ([^,]+), ([^)]+)\\)")
file(STRINGS
${CMAKE_CURRENT_LIST_DIR}/configure.ac
ac_init_line
REGEX ${ac_init_line_re}
)
string(REGEX REPLACE "${ac_init_line_re}" "\\1" PACKAGE_NAME ${ac_init_line})
string(REGEX REPLACE "${ac_init_line_re}" "\\2" PACKAGE_VERSION ${ac_init_line})
string(REGEX REPLACE "${ac_init_line_re}" "\\3" PACKAGE_BUGREPORT ${ac_init_line})
string(REGEX REPLACE "${ac_init_line_re}" "\\4" PACKAGE ${ac_init_line})
set(PACKAGE_TARNAME ${PACKAGE})
set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}")
string(REGEX REPLACE "([0-9]+.[0-9]+.[0-9]+).*" "\\1" SEMANTIC_VERSION ${PACKAGE_VERSION})
project(libconfuse VERSION ${SEMANTIC_VERSION} LANGUAGES C)
include(CheckFunctionExists)
include(CheckIncludeFile)
include(GNUInstallDirs)
find_package(FLEX REQUIRED)
find_package(Gettext QUIET)
find_package(Intl QUIET)
set(CMAKE_DISABLE_SOURCE_CHANGES ON)
set(CMAKE_DISABLE_IN_SOURCE_BUILD ON)
if (GETTEXT_FOUND)
set(ENABLE_NLS 1)
endif ()
# libconfig.pc.in
set(prefix ${CMAKE_INSTALL_PREFIX})
set(exec_prefix ${prefix})
set(libdir ${prefix}/${CMAKE_INSTALL_LIBDIR})
set(includedir ${prefix}/${CMAKE_INSTALL_INCLUDEDIR})
set(VERSION ${PROJECT_VERSION})
if (Intl_FOUND AND Intl_LIBRARIES)
set(LTLIBINTL ${Intl_LIBRARIES})
endif ()
configure_file(libconfuse.pc.in ${CMAKE_CURRENT_BINARY_DIR}/libconfuse.pc @ONLY)
check_function_exists(dcgettext HAVE_DCGETTEXT)
check_function_exists(fmemopen HAVE_FMEMOPEN)
check_function_exists(funopen HAVE_FUNOPEN)
check_function_exists(gettext HAVE_GETTEXT)
check_function_exists(iconv HAVE_ICONV)
check_function_exists(strcasecmp HAVE_STRCASECMP)
check_function_exists(strdup HAVE_STRDUP)
check_function_exists(_strdup HAVE__STRDUP)
check_function_exists(strndup HAVE_STRNDUP)
check_function_exists(setenv HAVE_SETENV)
check_function_exists(unsetenv HAVE_UNSETENV)
check_function_exists(_putenv HAVE__PUTENV)
if (MSVC)
check_function_exists(_fileno HAVE__FILENO)
check_function_exists(_isatty HAVE__ISATTY)
check_function_exists(_stricmp HAVE_STRCASECMP)
endif ()
check_include_file(stdlib.h HAVE_STDLIB_H)
check_include_file(string.h HAVE_STRING_H)
check_include_file(strings.h HAVE_STRINGS_H)
check_include_file(sys/stat.h HAVE_SYS_STAT_H)
check_include_file(sys/types.h HAVE_SYS_TYPES_H)
check_include_file(unistd.h HAVE_UNISTD_H)
check_include_file(windows.h HAVE_WINDOWS_H)
configure_file(config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
flex_target(
CONFUSE
src/lexer.l
${CMAKE_CURRENT_BINARY_DIR}/lexer.c
COMPILE_FLAGS -Pcfg_yy
)
set(libconfuse_sources
src/confuse.c
${FLEX_CONFUSE_OUTPUTS}
)
if (NOT HAVE_FMEMOPEN)
list(APPEND libconfuse_sources src/fmemopen.c)
endif ()
add_library(libconfuse ${libconfuse_sources})
if (BUILD_SHARED_LIBS)
if (WIN32)
target_compile_definitions(libconfuse PRIVATE BUILDING_DLL)
endif ()
else ()
target_compile_definitions(libconfuse PUBLIC BUILDING_STATIC)
endif ()
string(COMPARE EQUAL "${CMAKE_C_COMPILER_ID}" "GNU" USING_GNUC)
target_compile_definitions(libconfuse
PUBLIC
$<BUILD_INTERFACE:HAVE_CONFIG_H>
PRIVATE
$<$<BOOL:${MSVC}>:_CRT_SECURE_NO_WARNINGS>
$<$<BOOL:${MSVC}>:_CRT_NONSTDC_NO_DEPRECATE>
$<$<BOOL:${MSVC}>:strcasecmp=_stricmp>
$<$<BOOL:${USING_GNUC}>:_GNU_SOURCE>
)
target_include_directories(libconfuse
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/src>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
set_target_properties(libconfuse PROPERTIES PUBLIC_HEADER src/confuse.h)
install(TARGETS libconfuse EXPORT unofficial-libconfuse-config)
install(
EXPORT unofficial-libconfuse-config
NAMESPACE unofficial::libconfuse::
DESTINATION share/unofficial-libconfuse
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
)
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/libconfuse.pc
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
)
|