Skip to content

Commit 19e0ad6

Browse files
committed
Merge branch 'release/v4.2.5'
- Fix stack buffer overflow in iniparser dump functions - add DESCRIPTION, HOMEPAGE_URL and LANGUAGES in cmake project() ** Tomasz Kłoczko <kloczek@github.com> - Fix MSVC build issues Docs: - Update build instructions for tests - do not build docs by default - Explain how to build docs - Merge INSTALL and old doxygen main page with README and use it as new main page - Add build instructions for MinGW Changelog: changed
2 parents 4e5d1cc + 8e31edd commit 19e0ad6

File tree

9 files changed

+389
-264
lines changed

9 files changed

+389
-264
lines changed

.gitlab-ci.yml

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,15 @@ stages:
1010
- doc
1111
- test
1212
- win
13+
- prepare
14+
- release
1315

1416
build:
1517
stage: build
1618
script:
1719
- mkdir build
1820
- cd build
19-
- cmake -DCMAKE_INSTALL_PREFIX=../install -DBUILD_TESTING=ON -DBUILD_EXAMPLES=ON ..
21+
- cmake -DCMAKE_INSTALL_PREFIX=../install -DBUILD_TESTING=ON -DBUILD_EXAMPLES=ON -DBUILD_DOCS=ON ..
2022
- make install
2123
- tree -a .
2224
artifacts:
@@ -98,14 +100,47 @@ win-build:
98100
- git clone https://github.com/tronkko/dirent.git
99101
- mkdir build
100102
- cd build
101-
- cmake -DCMAKE_INCLUDE_PATH="../dirent/include" -DBUILD_DOCS=OFF -DBUILD_TESTING=ON -DBUILD_EXAMPLES=ON ..
103+
- cmake -DCMAKE_INCLUDE_PATH="../dirent/include" -DBUILD_TESTING=ON -DBUILD_EXAMPLES=ON ..
102104
- cmake --build .
105+
- Get-Location
106+
- Get-ChildItem –Recurse
103107
# due to the long provisioning time of the Windows runner, tests are
104108
# executed in the same stage as the build
105109
- ctest -C Debug --verbose
106110
artifacts:
107111
paths:
108-
- install/
109112
- build/
110113
dependencies: []
111114

115+
prepare_job:
116+
stage: prepare
117+
image: alpine:latest
118+
rules:
119+
- if: '$CI_COMMIT_TAG =~ /^v?\d+\.\d+\.\d+$/'
120+
script:
121+
- apk add curl jq
122+
- 'curl -H "PRIVATE-TOKEN: $CI_API_TOKEN" "$CI_API_V4_URL/projects/$CI_PROJECT_ID/repository/changelog?version=$CI_COMMIT_TAG" | jq -r .notes > release_notes.md'
123+
- 'curl -H "PRIVATE-TOKEN: $CI_API_TOKEN" -X POST "$CI_API_V4_URL/projects/$CI_PROJECT_ID/repository/changelog?version=$CI_COMMIT_TAG"'
124+
artifacts:
125+
paths:
126+
- release_notes.md
127+
128+
release_job:
129+
stage: release
130+
image: registry.gitlab.com/gitlab-org/release-cli:latest
131+
needs:
132+
- job: prepare_job
133+
artifacts: true
134+
rules:
135+
- if: '$CI_COMMIT_TAG =~ /^v?\d+\.\d+\.\d+$/'
136+
script:
137+
- echo "Creating release"
138+
release:
139+
name: 'Release $CI_COMMIT_TAG'
140+
description: release_notes.md
141+
tag_name: '$CI_COMMIT_TAG'
142+
ref: '$CI_COMMIT_SHA'
143+
#assets:
144+
# links:
145+
# - name: 'Container Image $CI_COMMIT_TAG'
146+
# url: "https://$CI_REGISTRY_IMAGE/$CI_COMMIT_REF_SLUG:$CI_COMMIT_SHA"

.gitmessage

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#
2+
3+
4+
Changelog: <added/changed/removed>

CMakeLists.txt

Lines changed: 66 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,30 @@
11
cmake_minimum_required(VERSION 3.18)
22

3-
project(iniparser VERSION 4.2.4)
3+
project(
4+
iniparser
5+
DESCRIPTION "C library for parsing INI-style files"
6+
HOMEPAGE_URL https://gitlab.com/iniparser/iniparser/
7+
LANGUAGES C
8+
VERSION 4.2.5)
49

510
include(GNUInstallDirs)
611
include(CMakePackageConfigHelpers)
712
include(CMakeDependentOption)
813

9-
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
10-
"${CMAKE_CURRENT_SOURCE_DIR}/cmake")
14+
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
1115

1216
option(
1317
BUILD_SHARED_LIBS
1418
"Build using shared libraries"
1519
ON)
16-
# For packaging by tools like bitbake, shared and static libs should be build
17-
# at once
18-
CMAKE_DEPENDENT_OPTION(BUILD_STATIC_LIBS "Build static libs" ON
19-
"BUILD_SHARED_LIBS" OFF)
20+
# For packaging by tools like bitbake, shared and static libs should be build at
21+
# once
22+
cmake_dependent_option(
23+
BUILD_STATIC_LIBS
24+
"Build static libs"
25+
ON
26+
"BUILD_SHARED_LIBS"
27+
OFF)
2028
if(BUILD_SHARED_LIBS)
2129
list(
2230
APPEND
@@ -46,12 +54,47 @@ foreach(TARGET_TYPE ${TARGET_TYPES})
4654
set(PUBLIC_HEADERS "src/iniparser.h" "src/dictionary.h")
4755
set_target_properties(${TARGET_NAME} PROPERTIES PUBLIC_HEADER
4856
"${PUBLIC_HEADERS}")
49-
5057
target_include_directories(
5158
${TARGET_NAME}
5259
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
5360
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}>)
54-
set_target_properties(${TARGET_NAME} PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
61+
# If both shared and static libs are build at once with MSVC it generates a
62+
# shared library consisting of
63+
#
64+
# * a DLL (that contains the actual code) with filename suffix `.dll`,
65+
# * a correspoding import library (against which users should link) with
66+
# filename suffix `.lib`.
67+
#
68+
# and a static library with filename suffix `.lib`
69+
#
70+
# As both, the shared import library and the static library share the same
71+
# basename and suffix one would overwrite the other.
72+
#
73+
# To solve this issue we set the PREFIX for *static* libs explicitely so MSVC
74+
# will build:
75+
#
76+
# * shared: iniparser.dll
77+
# * import: iniparser.lib
78+
# * static: libiniparser.lib
79+
#
80+
# As all other platforms already set `PREFIX` for all lib types they remain
81+
# unchanged. Therefore no `if(MSVC)` check is needed here.
82+
#
83+
if(TARGET_TYPE
84+
MATCHES
85+
"static")
86+
set_target_properties(${TARGET_NAME}
87+
PROPERTIES OUTPUT_NAME "${PROJECT_NAME}" PREFIX "lib")
88+
else()
89+
set_target_properties(${TARGET_NAME} PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
90+
# automatically create a module definition (.def) file for MSVC so it will
91+
# build an import library (.lib)
92+
set_property(TARGET ${TARGET_NAME} PROPERTY WINDOWS_EXPORT_ALL_SYMBOLS 1)
93+
if(WIN32)
94+
# Let MinGW as MSVC not prefix the DLL
95+
set_property(TARGET ${TARGET_NAME} PROPERTY PREFIX "")
96+
endif()
97+
endif()
5598
set_target_properties(${TARGET_NAME} PROPERTIES VERSION ${PROJECT_VERSION})
5699
set_target_properties(${TARGET_NAME} PROPERTIES SOVERSION
57100
${PROJECT_VERSION_MAJOR})
@@ -71,6 +114,7 @@ foreach(TARGET_TYPE ${TARGET_TYPES})
71114
EXPORT ${TARGETS_EXPORT_NAME}
72115
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
73116
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
117+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} # install DLLs on Windows
74118
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME})
75119

76120
# build directory package config
@@ -112,8 +156,15 @@ file(COPY ${FIND_MODULES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
112156
export(PACKAGE ${PROJECT_NAME})
113157
# generate pc-file
114158
include(JoinPaths)
115-
join_paths(libdir_for_pc_file "\${exec_prefix}" "${CMAKE_INSTALL_LIBDIR}")
116-
join_paths(includedir_for_pc_file "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}" "${PROJECT_NAME}")
159+
join_paths(
160+
libdir_for_pc_file
161+
"\${exec_prefix}"
162+
"${CMAKE_INSTALL_LIBDIR}")
163+
join_paths(
164+
includedir_for_pc_file
165+
"\${prefix}"
166+
"${CMAKE_INSTALL_INCLUDEDIR}"
167+
"${PROJECT_NAME}")
117168
configure_file(
118169
${CMAKE_CURRENT_SOURCE_DIR}/cmake/pc.in
119170
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc
@@ -148,19 +199,16 @@ if(BUILD_EXAMPLES)
148199
DESTINATION ${CMAKE_INSTALL_DOCDIR}/examples/)
149200
endif()
150201

151-
option(
152-
BUILD_DOCS
153-
"Build and install docs"
154-
ON)
202+
option(BUILD_DOCS "Build and install docs")
155203
if(BUILD_DOCS)
156204
find_package(Doxygen REQUIRED)
157205
set(DOXYGEN_STRIP_FROM_PATH ${CMAKE_CURRENT_SOURCE_DIR})
206+
set(DOXYGEN_USE_MDFILE_AS_MAINPAGE README.md)
158207
doxygen_add_docs(
159208
docs
160-
${CMAKE_CURRENT_SOURCE_DIR}/doc/iniparser.txt
209+
${CMAKE_CURRENT_SOURCE_DIR}/README.md
161210
${CMAKE_CURRENT_SOURCE_DIR}/src/iniparser.h
162-
ALL
163-
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/doc)
211+
ALL)
164212
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html
165213
DESTINATION ${CMAKE_INSTALL_DOCDIR})
166214
endif()

INSTALL

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1 @@
1-
2-
iniParser installation instructions
3-
-----------------------------------
4-
5-
- Modify the Makefile to suit your environment.
6-
- Type 'make' to make the library.
7-
- Type 'make check' to make the test program.
8-
- Type 'test/iniexample' to launch the test program.
9-
- Type 'test/parse' to launch torture tests.
10-
11-
12-
13-
Enjoy!
14-
N. Devillard
15-
Wed Mar 2 21:14:17 CET 2011
1+
See [Building project](README.md#building-project)

0 commit comments

Comments
 (0)