Skip to content

Commit 1e19d1c

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

File tree

3 files changed

+58
-14
lines changed

3 files changed

+58
-14
lines changed

src/CMakeLists.txt

Lines changed: 25 additions & 14 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,24 +67,27 @@ 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()
8085
add_library(qzxing "" ${SOURCES})
8186
endif()
8287

88+
# Change Global Definitions depending on how you want to use the library
89+
list(APPEND PUBLIC_DEFINES DISABLE_LIBRARY_FEATURES)
90+
8391
if(WIN32)
8492
add_subdirectory(zxing/win32)
8593
if(MSVC)
@@ -105,20 +113,16 @@ target_link_libraries(qzxing Qt5::Core Qt5::Gui)
105113

106114
if(QZXING_MULTIMEDIA)
107115
target_link_libraries(qzxing Qt5::Multimedia)
108-
target_compile_definitions(qzxing PUBLIC -DQZXING_MULTIMEDIA)
109116
endif(QZXING_MULTIMEDIA)
110117

111118
if(QZXING_USE_QML)
112119
target_link_libraries(qzxing
113120
Qt5::Svg
114121
Qt5::Quick
115122
Qt5::QuickControls2)
116-
target_compile_definitions(qzxing PUBLIC -DQZXING_QML)
117123
endif(QZXING_USE_QML)
118124

119-
if(QZXING_USE_ENCODER)
120-
target_compile_definitions(qzxing PUBLIC -DENABLE_ENCODER_GENERIC -DENABLE_ENCODER_QR_CODE)
121-
endif(QZXING_USE_ENCODER)
125+
target_compile_definitions(qzxing PUBLIC ${PUBLIC_DEFINES})
122126

123127
if(QZXING_USE_DECODER_QR_CODE)
124128
target_compile_definitions(qzxing PRIVATE -DENABLE_DECODER_QR_CODE)
@@ -144,11 +148,6 @@ if(QZXING_USE_DECODER_1D_BARCODES)
144148
target_compile_definitions(qzxing PRIVATE -DENABLE_DECODER_1D_BARCODES)
145149
endif()
146150

147-
if(!BUILD_SHARED)
148-
# Change Global Definitions depending on how you want to use the library
149-
target_compile_definitions(qzxing PUBLIC DISABLE_LIBRARY_FEATURES)
150-
endif()
151-
152151
# Target includes
153152
target_include_directories(qzxing
154153
PRIVATE
@@ -163,6 +162,7 @@ target_include_directories(qzxing
163162

164163
if(BUILD_SHARED)
165164
include (GNUInstallDirs)
165+
include (JoinPaths)
166166

167167
set(QZXING_INSTALL_TARGETS qzxing)
168168

@@ -176,4 +176,15 @@ if(BUILD_SHARED)
176176
install (
177177
FILES ${PUBLIC_HEADERS} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/qzxing"
178178
)
179+
180+
join_paths(PC_LIBDIR "\${prefix}" "${CMAKE_INSTALL_LIBDIR}")
181+
join_paths(PC_INCLUDEDIR "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}" "qzxing")
182+
183+
string(REPLACE ";" " -D" PC_DEFINES "${PUBLIC_DEFINES}")
184+
if(PC_DEFINES)
185+
set(PC_DEFINES "-D${PC_DEFINES}")
186+
endif()
187+
188+
configure_file(QZXing.pc.in ${CMAKE_CURRENT_BINARY_DIR}/QZXing.pc @ONLY)
189+
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/QZXing.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
179190
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)