Skip to content

Commit 762715c

Browse files
committed
Merge branch 'feature/cmake'
2 parents 8861d24 + 35861cc commit 762715c

File tree

13 files changed

+461
-2979
lines changed

13 files changed

+461
-2979
lines changed

.cmake-format.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# ----------------------------------
2+
# Options affecting listfile parsing
3+
# ----------------------------------
4+
#with section("parse"):
5+
6+
## Specify structure for custom cmake functions
7+
#additional_commands = { 'foo': { 'flags': ['BAR', 'BAZ'],
8+
# 'kwargs': {'DEPENDS': '*', 'HEADERS': '*', 'SOURCES': '*'}}}
9+
10+
## Override configurations per-command where available
11+
#override_spec = {}
12+
13+
## Specify variable tags.
14+
#vartags = []
15+
16+
## Specify property tags.
17+
#proptags = []
18+
19+
# -----------------------------
20+
# Options affecting formatting.
21+
# -----------------------------
22+
with section("format"):
23+
24+
# If an argument group contains more than this many sub-groups (parg or kwarg
25+
# groups) then force it to a vertical layout.
26+
max_subgroups_hwrap = 2
27+
28+
# If a positional argument group contains more than this many arguments, then
29+
# force it to a vertical layout.
30+
max_pargs_hwrap = 2
31+
32+
# If a cmdline positional group consumes more than this many lines without
33+
# nesting, then invalidate the layout (and nest)
34+
max_rows_cmdline = 2
35+
36+
# Format keywords consistently as 'lower' or 'upper' case
37+
keyword_case = 'upper'
38+
39+
# ------------------------------------------------
40+
# Options affecting comment reflow and formatting.
41+
# ------------------------------------------------
42+
with section("markup"):
43+
44+
# If comment markup is enabled, don't reflow the first comment block in each
45+
# listfile. Use this to preserve formatting of your copyright/license
46+
# statements.
47+
first_comment_is_literal = True
48+

.gitignore

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,6 @@
1111
# Autogenerate source file
1212
/test/AllTests.c
1313
/test/testrun
14-
# Files generated by iniparser-meta
15-
CMakeLists.txt
16-
config.cmake.in
1714
# CMake build directories
1815
build*/
1916
html/

.gitlab-ci.yml

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
image: registry.gitlab.com/iniparser/docker-cmake:latest
2+
3+
variables:
4+
GIT_SUBMODULE_STRATEGY: recursive
5+
LD_LIBRARY_PATH: ${CI_BUILDS_DIR}/iniparser/iniparser/install/lib/
6+
7+
8+
stages:
9+
- build
10+
- doc
11+
- test
12+
- win
13+
14+
build:
15+
stage: build
16+
script:
17+
- mkdir build
18+
- cd build
19+
- cmake -DCMAKE_INSTALL_PREFIX=../install -DBUILD_TESTS=ON -DBUILD_EXAMPLES=ON ..
20+
- make install
21+
- tree -a .
22+
artifacts:
23+
paths:
24+
- install/*
25+
- build/html/*
26+
27+
pages:
28+
stage: doc
29+
dependencies:
30+
- build
31+
script:
32+
- mv build/html/ public/
33+
artifacts:
34+
paths:
35+
- public
36+
#rules:
37+
#- if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
38+
39+
test:
40+
stage: test
41+
script:
42+
- pwd
43+
- ls -l
44+
- cd install/bin
45+
- ./testrun
46+
dependencies:
47+
- build
48+
49+
memcheck:
50+
stage: test
51+
script:
52+
- pwd
53+
- ls -l
54+
- cd install/bin
55+
- valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --error-exitcode=255 ./testrun
56+
dependencies:
57+
- build
58+
59+
iniexample-memcheck:
60+
stage: test
61+
script:
62+
- pwd
63+
- tree
64+
- cd install/share/doc/iniparser/examples/
65+
- valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --error-exitcode=255 ./iniexample
66+
dependencies:
67+
- build
68+
69+
iniwrite-memcheck:
70+
stage: test
71+
script:
72+
- pwd
73+
- tree
74+
- cd install/share/doc/iniparser/examples/
75+
- valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --error-exitcode=255 ./iniwrite
76+
dependencies:
77+
- build
78+
79+
parse-memcheck:
80+
stage: test
81+
script:
82+
- pwd
83+
- tree
84+
- cd install/share/doc/iniparser/examples/
85+
- valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --error-exitcode=255 ./parse
86+
dependencies:
87+
- build
88+
89+
.shared_windows_runners:
90+
tags:
91+
- saas-windows-medium-amd64
92+
93+
win-build:
94+
extends:
95+
- .shared_windows_runners
96+
stage: win
97+
script:
98+
- mkdir build
99+
- cd build
100+
- cmake -DCMAKE_INSTALL_PREFIX=..\install -DBUILD_DOCS=OFF -DBUILD_EXAMPLES=ON ..
101+
- cmake --build .
102+
artifacts:
103+
paths:
104+
- install
105+
dependencies: []

CMakeLists.txt

Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,191 @@
1+
cmake_minimum_required(VERSION 3.12)
2+
3+
project(iniparser VERSION 4.2.2)
4+
5+
include(GNUInstallDirs)
6+
include(CMakePackageConfigHelpers)
7+
8+
option(
9+
BUILD_SHARED_LIBS
10+
"Build using shared libraries"
11+
ON)
12+
option(
13+
BUILD_STATIC_LIBS
14+
"Build using static libraries"
15+
ON)
16+
if(BUILD_SHARED_LIBS)
17+
list(
18+
APPEND
19+
TARGET_TYPES
20+
"shared")
21+
endif()
22+
if(BUILD_STATIC_LIBS)
23+
list(
24+
APPEND
25+
TARGET_TYPES
26+
"static")
27+
endif()
28+
set(CONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}")
29+
30+
foreach(TARGET_TYPE ${TARGET_TYPES})
31+
set(TARGET_NAME "${PROJECT_NAME}-${TARGET_TYPE}")
32+
set(TARGETS_EXPORT_NAME "${TARGET_NAME}Targets")
33+
string(TOUPPER ${TARGET_TYPE} UPPER_TARGET_TYPE)
34+
message(DEBUG "TARGET_TYPE: ${TARGET_TYPE}")
35+
message(DEBUG "UPPER_TARGET_TYPE: ${UPPER_TARGET_TYPE}")
36+
message(DEBUG "TARGET_NAME: ${TARGET_NAME}")
37+
add_library(
38+
${TARGET_NAME}
39+
${UPPER_TARGET_TYPE}
40+
"src/iniparser.c"
41+
"src/dictionary.c")
42+
set(PUBLIC_HEADERS "src/iniparser.h" "src/dictionary.h")
43+
set_target_properties(${TARGET_NAME} PROPERTIES PUBLIC_HEADER
44+
"${PUBLIC_HEADERS}")
45+
46+
target_include_directories(
47+
${TARGET_NAME}
48+
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
49+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}>)
50+
set_target_properties(${TARGET_NAME} PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
51+
set_target_properties(${TARGET_NAME} PROPERTIES VERSION ${PROJECT_VERSION})
52+
set_target_properties(${TARGET_NAME} PROPERTIES SOVERSION
53+
${PROJECT_VERSION_MAJOR})
54+
55+
if(UNIX)
56+
target_compile_options(
57+
${TARGET_NAME}
58+
PRIVATE -fPIC
59+
-Wall
60+
-Wextra
61+
-pedantic)
62+
endif(UNIX)
63+
64+
# install targets
65+
install(
66+
TARGETS ${TARGET_NAME}
67+
EXPORT ${TARGETS_EXPORT_NAME}
68+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
69+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
70+
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME})
71+
72+
# build directory package config
73+
export(
74+
TARGETS ${TARGET_NAME}
75+
APPEND
76+
FILE "${TARGETS_EXPORT_NAME}.cmake")
77+
78+
# installed package config
79+
install(EXPORT ${TARGETS_EXPORT_NAME} DESTINATION "${CONFIG_INSTALL_DIR}")
80+
endforeach()
81+
82+
# installed package config
83+
set(PROJECT_CONFIG_FILE
84+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake")
85+
set(PROJECT_VERSION_FILE
86+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake")
87+
88+
configure_package_config_file(
89+
${PROJECT_SOURCE_DIR}/cmake/config.cmake.in ${PROJECT_CONFIG_FILE}
90+
INSTALL_DESTINATION "${CONFIG_INSTALL_DIR}")
91+
# generate package version file
92+
write_basic_package_version_file(
93+
${PROJECT_VERSION_FILE}
94+
VERSION ${PROJECT_VERSION}
95+
COMPATIBILITY SameMajorVersion)
96+
# install version and config file
97+
install(FILES ${PROJECT_VERSION_FILE} ${PROJECT_CONFIG_FILE}
98+
DESTINATION ${CONFIG_INSTALL_DIR})
99+
file(
100+
GLOB
101+
FIND_MODULES
102+
"${PROJECT_SOURCE_DIR}/cmake/Find*.cmake")
103+
message(DEBUG "Find modules: ${FIND_MODULES}")
104+
install(FILES ${FIND_MODULES} DESTINATION ${CONFIG_INSTALL_DIR})
105+
# make available in build directory for user package registry dependants
106+
file(COPY ${FIND_MODULES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
107+
# add to CMake registry
108+
export(PACKAGE ${PROJECT_NAME})
109+
# generate pc-file
110+
configure_file(
111+
${CMAKE_CURRENT_SOURCE_DIR}/cmake/pc.in
112+
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc
113+
@ONLY)
114+
# install pc-file
115+
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc
116+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
117+
118+
option(BUILD_TESTS "Build and install tests")
119+
if(BUILD_TESTS)
120+
set(TEST_NAME testrun)
121+
add_custom_command(
122+
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/AllTests.c
123+
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/test/test_dictionary.c
124+
${CMAKE_CURRENT_SOURCE_DIR}/test/test_iniparser.c
125+
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/test/make-tests.sh >
126+
${CMAKE_CURRENT_BINARY_DIR}/AllTests.c
127+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test/)
128+
129+
add_executable(
130+
${TEST_NAME}
131+
${CMAKE_CURRENT_BINARY_DIR}/AllTests.c
132+
${CMAKE_CURRENT_SOURCE_DIR}/test/CuTest.c
133+
${CMAKE_CURRENT_SOURCE_DIR}/test/test_dictionary.c
134+
${CMAKE_CURRENT_SOURCE_DIR}/test/test_iniparser.c)
135+
136+
target_link_libraries(${TEST_NAME} "${PROJECT_NAME}-static")
137+
138+
target_include_directories(
139+
${TEST_NAME}
140+
PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/test>
141+
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/src/>
142+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}>)
143+
144+
install(TARGETS ${TEST_NAME})
145+
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test/ressources
146+
DESTINATION ${CMAKE_INSTALL_BINDIR})
147+
148+
enable_testing()
149+
add_test(
150+
NAME testsuite
151+
COMMAND ${TEST_NAME}
152+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test)
153+
endif()
154+
155+
option(BUILD_EXAMPLES "Build and install examples")
156+
if(BUILD_EXAMPLES)
157+
add_executable(iniexample ${CMAKE_CURRENT_SOURCE_DIR}/example/iniexample.c)
158+
add_executable(iniwrite ${CMAKE_CURRENT_SOURCE_DIR}/example/iniwrite.c)
159+
add_executable(parse ${CMAKE_CURRENT_SOURCE_DIR}/example/parse.c)
160+
161+
foreach(TARGET_TYPE ${TARGET_TYPES})
162+
# if BUILD_STATIC_WITH_SHARED_LIBS=ON shared takes precedence
163+
target_link_libraries(iniexample ${PROJECT_NAME}-${TARGET_TYPE})
164+
target_link_libraries(iniwrite ${PROJECT_NAME}-${TARGET_TYPE})
165+
target_link_libraries(parse ${PROJECT_NAME}-${TARGET_TYPE})
166+
endforeach()
167+
install(
168+
TARGETS iniexample
169+
iniwrite
170+
parse
171+
DESTINATION ${CMAKE_INSTALL_DOCDIR}/examples/)
172+
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/example/twisted.ini
173+
DESTINATION ${CMAKE_INSTALL_DOCDIR}/examples/)
174+
endif()
175+
176+
option(
177+
BUILD_DOCS
178+
"Build and install docs"
179+
ON)
180+
if(BUILD_DOCS)
181+
find_package(Doxygen REQUIRED)
182+
set(DOXYGEN_STRIP_FROM_PATH ${CMAKE_CURRENT_SOURCE_DIR})
183+
doxygen_add_docs(
184+
docs
185+
${CMAKE_CURRENT_SOURCE_DIR}/doc/iniparser.txt
186+
${CMAKE_CURRENT_SOURCE_DIR}/src/iniparser.h
187+
ALL
188+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/doc)
189+
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html
190+
DESTINATION ${CMAKE_INSTALL_DOCDIR})
191+
endif()

0 commit comments

Comments
 (0)