Skip to content

Commit 32b1446

Browse files
committed
Add pkg-config export to CMake script
1 parent 32b2e24 commit 32b1446

File tree

3 files changed

+57
-11
lines changed

3 files changed

+57
-11
lines changed

src/CMakeLists.txt

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
cmake_minimum_required(VERSION 3.3)
22
project(QZXing)
33

4+
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
5+
46
option(BUILD_SHARED "Build as shared library" OFF)
57

68
if(BUILD_SHARED)
79
SET(SOVERSION_MAJOR 3)
810
SET(SOVERSION_MINOR 3)
911
SET(SOVERSION_PATCH 0)
12+
SET(SOVERSION_FULL "${SOVERSION_MAJOR}.${SOVERSION_MINOR}.${SOVERSION_PATCH}")
1013

1114
OPTION(QZXING_MULTIMEDIA "" OFF)
1215
OPTION(QZXING_USE_QML "" OFF)
@@ -39,6 +42,8 @@ set(PUBLIC_HEADERS
3942
QZXing_global.h
4043
)
4144

45+
set(PUBLIC_DEFINES "")
46+
4247
set(SOURCES
4348

4449
CameraImageWrapper.cpp
@@ -53,7 +58,7 @@ if(QZXING_MULTIMEDIA)
5358

5459
LIST(APPEND SOURCES QZXingFilter.cpp QZXingFilter.h)
5560
LIST(APPEND PUBLIC_HEADERS QZXingFilter.h)
56-
add_definitions(-DQZXING_MULTIMEDIA)
61+
LIST(APPEND PUBLIC_DEFINES QZXING_MULTIMEDIA)
5762

5863
SET(QZXING_USE_QML ON)
5964

@@ -62,18 +67,18 @@ endif(QZXING_MULTIMEDIA)
6267
if(QZXING_USE_QML)
6368
LIST(APPEND SOURCES QZXingImageProvider.cpp QZXingImageProvider.h)
6469
LIST(APPEND PUBLIC_HEADERS QZXingImageProvider.h)
65-
add_definitions(-DQZXING_QML)
70+
LIST(APPEND PUBLIC_DEFINES QZXING_QML)
6671
endif(QZXING_USE_QML)
6772

6873
if(QZXING_USE_ENCODER)
69-
add_definitions(-DENABLE_ENCODER_GENERIC -DENABLE_ENCODER_QR_CODE)
74+
LIST(APPEND PUBLIC_DEFINES ENABLE_ENCODER_GENERIC ENABLE_ENCODER_QR_CODE)
7075
endif(QZXING_USE_ENCODER)
7176

7277
if(BUILD_SHARED)
7378
add_library(qzxing SHARED ${SOURCES})
7479
set_target_properties(qzxing
7580
PROPERTIES
76-
VERSION ${SOVERSION_MAJOR}.${SOVERSION_MINOR}.${SOVERSION_PATCH}
81+
VERSION ${SOVERSION_FULL}
7782
SOVERSION ${SOVERSION_MAJOR}
7883
)
7984
else()
@@ -105,21 +110,15 @@ target_link_libraries(qzxing Qt5::Core Qt5::Gui)
105110

106111
if(QZXING_MULTIMEDIA)
107112
target_link_libraries(qzxing Qt5::Multimedia)
108-
target_compile_definitions(qzxing PUBLIC -DQZXING_MULTIMEDIA)
109113
endif(QZXING_MULTIMEDIA)
110114

111115
if(QZXING_USE_QML)
112116
target_link_libraries(qzxing
113117
Qt5::Svg
114118
Qt5::Quick
115119
Qt5::QuickControls2)
116-
target_compile_definitions(qzxing PUBLIC -DQZXING_QML)
117120
endif(QZXING_USE_QML)
118121

119-
if(QZXING_USE_ENCODER)
120-
target_compile_definitions(qzxing PUBLIC -DENABLE_ENCODER_GENERIC -DENABLE_ENCODER_QR_CODE)
121-
endif(QZXING_USE_ENCODER)
122-
123122
if(QZXING_USE_DECODER_QR_CODE)
124123
target_compile_definitions(qzxing PRIVATE -DENABLE_DECODER_QR_CODE)
125124
endif()
@@ -146,9 +145,11 @@ endif()
146145

147146
if(!BUILD_SHARED)
148147
# Change Global Definitions depending on how you want to use the library
149-
target_compile_definitions(qzxing PUBLIC DISABLE_LIBRARY_FEATURES)
148+
list(APPEND PUBLIC_DEFINES DISABLE_LIBRARY_FEATURES)
150149
endif()
151150

151+
target_compile_definitions(qzxing PUBLIC ${PUBLIC_DEFINES})
152+
152153
# Target includes
153154
target_include_directories(qzxing
154155
PRIVATE
@@ -163,6 +164,7 @@ target_include_directories(qzxing
163164

164165
if(BUILD_SHARED)
165166
include (GNUInstallDirs)
167+
include (JoinPaths)
166168

167169
set(QZXING_INSTALL_TARGETS qzxing)
168170

@@ -176,4 +178,15 @@ if(BUILD_SHARED)
176178
install (
177179
FILES ${PUBLIC_HEADERS} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/qzxing"
178180
)
181+
182+
join_paths(PC_LIBDIR "\${prefix}" "${CMAKE_INSTALL_LIBDIR}")
183+
join_paths(PC_INCLUDEDIR "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}" "qzxing")
184+
185+
string(REPLACE ";" " -D" PC_DEFINES "${PUBLIC_DEFINES}")
186+
if(PC_DEFINES)
187+
set(PC_DEFINES "-D${PC_DEFINES}")
188+
endif()
189+
190+
configure_file(QZXing.pc.in ${CMAKE_CURRENT_BINARY_DIR}/QZXing.pc @ONLY)
191+
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/QZXing.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
179192
endif()

src/QZXing.pc.in

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
prefix=@CMAKE_INSTALL_PREFIX@
2+
exec_prefix=${prefix}
3+
libdir=@PC_LIBDIR@
4+
includedir=@PC_INCLUDEDIR@
5+
6+
Name: Qzxing
7+
Description: Qzxing Library
8+
Version: @SOVERSION_FULL@
9+
Cflags: @PC_DEFINES@ -I${includedir}
10+
Libs: -L${libdir} -lqzxing

src/cmake/JoinPaths.cmake

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# This module provides function for joining paths
2+
# known from most languages
3+
#
4+
# SPDX-License-Identifier: (MIT OR CC0-1.0)
5+
# Copyright 2020 Jan Tojnar
6+
# https://github.com/jtojnar/cmake-snips
7+
#
8+
# Modelled after Python’s os.path.join
9+
# https://docs.python.org/3.7/library/os.path.html#os.path.join
10+
# Windows not supported
11+
function(join_paths joined_path first_path_segment)
12+
set(temp_path "${first_path_segment}")
13+
foreach(current_segment IN LISTS ARGN)
14+
if(NOT ("${current_segment}" STREQUAL ""))
15+
if(IS_ABSOLUTE "${current_segment}")
16+
set(temp_path "${current_segment}")
17+
else()
18+
set(temp_path "${temp_path}/${current_segment}")
19+
endif()
20+
endif()
21+
endforeach()
22+
set(${joined_path} "${temp_path}" PARENT_SCOPE)
23+
endfunction()

0 commit comments

Comments
 (0)