11cmake_minimum_required (VERSION 3.3 )
22project (QZXing)
33
4+ set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR} /cmake" )
5+
46option (BUILD_SHARED "Build as shared library" OFF )
57
68if (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+
4247set (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)
6267if (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 )
6671endif (QZXING_USE_QML )
6772
6873if (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 )
7075endif (QZXING_USE_ENCODER )
7176
7277if (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)
7984else ()
@@ -105,21 +110,15 @@ target_link_libraries(qzxing Qt5::Core Qt5::Gui)
105110
106111if (QZXING_MULTIMEDIA)
107112 target_link_libraries (qzxing Qt5::Multimedia )
108- target_compile_definitions (qzxing PUBLIC -DQZXING_MULTIMEDIA )
109113endif (QZXING_MULTIMEDIA )
110114
111115if (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 )
117120endif (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-
123122if (QZXING_USE_DECODER_QR_CODE)
124123 target_compile_definitions (qzxing PRIVATE -DENABLE_DECODER_QR_CODE )
125124endif ()
@@ -146,9 +145,11 @@ endif()
146145
147146if (!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)
150149endif ()
151150
151+ target_compile_definitions (qzxing PUBLIC ${PUBLIC_DEFINES} )
152+
152153# Target includes
153154target_include_directories (qzxing
154155 PRIVATE
@@ -163,6 +164,7 @@ target_include_directories(qzxing
163164
164165if (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)
179192endif ()
0 commit comments