CMakeLists.txt 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665
  1. cmake_minimum_required(VERSION 3.16)
  2. project (ZXing VERSION "2.3.0")
  3. set (ZXING_SONAME 3) # see https://github.com/zxing-cpp/zxing-cpp/issues/333
  4. if (BUILD_SHARED_LIBS)
  5. set(CMAKE_POSITION_INDEPENDENT_CODE ON)
  6. endif()
  7. if (DEFINED BUILD_READERS)
  8. set (ZXING_READERS ${BUILD_READERS})
  9. message (WARNING "zxing-cpp cmake options BUILD_... are deprecated, please switch to ZXING_... variant")
  10. endif()
  11. if (DEFINED BUILD_WRITERS)
  12. set (ZXING_WRITERS ${BUILD_WRITERS})
  13. message (WARNING "zxing-cpp cmake options BUILD_... are deprecated, please switch to ZXING_... variant")
  14. endif()
  15. if (NOT DEFINED ZXING_WRITERS)
  16. set (ZXING_WRITERS OFF)
  17. endif()
  18. if (NOT DEFINED ZXING_READERS)
  19. set (ZXING_READERS ON)
  20. endif()
  21. set (ZXING_WRITERS_NEW OFF)
  22. set (ZXING_WRITERS_OLD OFF)
  23. if (ZXING_WRITERS MATCHES "OLD|ON")
  24. set (ZXING_WRITERS ON)
  25. set (ZXING_WRITERS_OLD ON)
  26. elseif (ZXING_WRITERS MATCHES "NEW")
  27. set (ZXING_WRITERS ON)
  28. set (ZXING_WRITERS_NEW ON)
  29. elseif (ZXING_WRITERS MATCHES "BOTH")
  30. set (ZXING_WRITERS ON)
  31. set (ZXING_WRITERS_NEW ON)
  32. set (ZXING_WRITERS_OLD ON)
  33. endif()
  34. if (BUILD_SHARED_LIBS)
  35. set (CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
  36. endif()
  37. set (ZXING_PUBLIC_FLAGS
  38. $<$<BOOL:${ZXING_EXPERIMENTAL_API}>:-DZXING_EXPERIMENTAL_API>
  39. )
  40. if (WINRT)
  41. set (ZXING_PUBLIC_FLAGS ${ZXING_PUBLIC_FLAGS}
  42. -DWINRT
  43. )
  44. endif()
  45. if (MSVC)
  46. set (ZXING_PUBLIC_FLAGS ${ZXING_PUBLIC_FLAGS}
  47. $<$<CXX_COMPILER_ID:MSVC>:/Zc:__cplusplus>
  48. )
  49. endif()
  50. set (ZXING_PRIVATE_FLAGS
  51. $<$<BOOL:${ZXING_WRITERS_NEW}>:-DZXING_USE_ZINT>
  52. $<$<BOOL:${ZXING_UNIT_TESTS}>:-DZXING_BUILD_FOR_TEST>
  53. )
  54. if (MSVC)
  55. set (ZXING_PRIVATE_FLAGS ${ZXING_PRIVATE_FLAGS}
  56. -D_SCL_SECURE_NO_WARNINGS
  57. -D_CRT_SECURE_NO_WARNINGS
  58. -D_CRT_NONSTDC_NO_WARNINGS
  59. -DNOMINMAX
  60. /utf-8 # see https://github.com/zxing-cpp/zxing-cpp/issues/757
  61. )
  62. else()
  63. set (ZXING_PRIVATE_FLAGS ${ZXING_PRIVATE_FLAGS}
  64. -Wall -Wextra -Wno-missing-braces -Werror=undef -Werror=return-type)
  65. endif()
  66. include (CheckCXXCompilerFlag)
  67. # This is needed for reproducible builds across different build directories.
  68. # Without this, the usage of the __FILE__ macro leaves the build directory in
  69. # the binary. When building the Python extension with build isolation enabled
  70. # this would lead to random paths in the binary.
  71. set(FILE_PREFIX_ARG "-fmacro-prefix-map=${CMAKE_CURRENT_SOURCE_DIR}/=")
  72. check_cxx_compiler_flag("${FILE_PREFIX_ARG}" HAS_FILE_PREFIX_ARG)
  73. if(HAS_FILE_PREFIX_ARG)
  74. set(ZXING_PRIVATE_FLAGS ${ZXING_PRIVATE_FLAGS} "${FILE_PREFIX_ARG}")
  75. endif()
  76. ################# Source files
  77. set (COMMON_FILES
  78. src/Barcode.h
  79. src/Barcode.cpp
  80. src/BarcodeFormat.h
  81. src/BarcodeFormat.cpp
  82. src/BitHacks.h
  83. src/BitMatrix.h
  84. src/BitMatrix.cpp
  85. src/BitMatrixIO.h
  86. src/BitMatrixIO.cpp
  87. src/ByteArray.h
  88. src/ByteMatrix.h
  89. src/CharacterSet.h
  90. src/CharacterSet.cpp
  91. src/Content.h
  92. src/Content.cpp
  93. src/ECI.h
  94. src/ECI.cpp
  95. src/Error.h
  96. src/Error.cpp
  97. src/Flags.h
  98. src/GTIN.h
  99. src/GTIN.cpp
  100. src/ImageView.h
  101. src/Matrix.h
  102. src/Point.h
  103. src/Quadrilateral.h
  104. src/Range.h
  105. src/ReaderOptions.h
  106. src/ReadBarcode.h
  107. src/ReadBarcode.cpp
  108. src/Utf.h
  109. src/Utf.cpp
  110. src/WriteBarcode.h
  111. src/WriteBarcode.cpp
  112. src/ZXingCpp.h
  113. src/ZXingCpp.cpp
  114. src/ZXAlgorithms.h
  115. src/ZXConfig.h
  116. src/ZXTestSupport.h
  117. src/ZXVersion.h # [[deprecated]]
  118. $<$<BOOL:${ZXING_C_API}>:src/ZXingC.h>
  119. $<$<BOOL:${ZXING_C_API}>:src/ZXingC.cpp>
  120. )
  121. if (ZXING_READERS OR ZXING_WRITERS_OLD)
  122. set (COMMON_FILES ${COMMON_FILES}
  123. src/BitArray.h
  124. src/BitArray.cpp
  125. src/Generator.h
  126. src/GenericGF.h
  127. src/GenericGF.cpp
  128. src/GenericGFPoly.h
  129. src/GenericGFPoly.cpp
  130. src/TextUtfEncoding.h # [[deprecated]]
  131. src/TextUtfEncoding.cpp # [[deprecated]]
  132. src/Scope.h
  133. )
  134. endif()
  135. if (ZXING_READERS)
  136. set (COMMON_FILES ${COMMON_FILES}
  137. src/BinaryBitmap.h
  138. src/BinaryBitmap.cpp
  139. src/BitMatrixCursor.h
  140. src/BitSource.h
  141. src/BitSource.cpp
  142. src/ConcentricFinder.h
  143. src/ConcentricFinder.cpp
  144. src/DecodeHints.h
  145. $<$<BOOL:${BUILD_SHARED_LIBS}>:src/DecodeHints.cpp> # [[deprecated]]
  146. src/DecoderResult.h
  147. src/DetectorResult.h
  148. src/GlobalHistogramBinarizer.h
  149. src/GlobalHistogramBinarizer.cpp
  150. src/GridSampler.h
  151. src/GridSampler.cpp
  152. src/LogMatrix.h
  153. src/HRI.h
  154. src/HRI.cpp
  155. src/HybridBinarizer.h
  156. src/HybridBinarizer.cpp
  157. src/MultiFormatReader.h
  158. src/MultiFormatReader.cpp
  159. src/Pattern.h
  160. src/PerspectiveTransform.h
  161. src/PerspectiveTransform.cpp
  162. src/Reader.h
  163. src/ReedSolomonDecoder.h
  164. src/ReedSolomonDecoder.cpp
  165. src/RegressionLine.h
  166. src/Result.h # [[deprecated]]
  167. src/ResultPoint.h
  168. src/ResultPoint.cpp
  169. src/StructuredAppend.h
  170. src/TextDecoder.h
  171. src/TextDecoder.cpp
  172. src/ThresholdBinarizer.h
  173. src/TritMatrix.h # QRCode
  174. src/WhiteRectDetector.h
  175. src/WhiteRectDetector.cpp
  176. )
  177. endif()
  178. if (ZXING_WRITERS)
  179. set (COMMON_FILES ${COMMON_FILES}
  180. )
  181. endif()
  182. if (ZXING_WRITERS_OLD)
  183. set (COMMON_FILES ${COMMON_FILES}
  184. src/ByteMatrix.h
  185. src/ReedSolomonEncoder.h
  186. src/ReedSolomonEncoder.cpp
  187. src/TextEncoder.h
  188. src/TextEncoder.cpp
  189. src/MultiFormatWriter.h
  190. src/MultiFormatWriter.cpp
  191. )
  192. endif()
  193. # define subset of public headers that get distributed with the binaries
  194. set (PUBLIC_HEADERS
  195. src/Barcode.h
  196. src/BarcodeFormat.h
  197. src/BitHacks.h
  198. src/ByteArray.h
  199. src/CharacterSet.h
  200. src/Content.h
  201. src/Error.h
  202. src/Flags.h
  203. src/GTIN.h
  204. src/ImageView.h
  205. src/Point.h
  206. src/Quadrilateral.h
  207. src/ReadBarcode.h
  208. src/ReaderOptions.h
  209. src/StructuredAppend.h
  210. src/TextUtfEncoding.h # [[deprecated]]
  211. src/ZXingCpp.h
  212. src/ZXAlgorithms.h
  213. src/ZXVersion.h # [[deprecated]]
  214. $<$<BOOL:${ZXING_C_API}>:${CMAKE_CURRENT_SOURCE_DIR}/src/ZXingC.h>
  215. $<$<BOOL:${ZXING_EXPERIMENTAL_API}>:${CMAKE_CURRENT_SOURCE_DIR}/src/WriteBarcode.h>
  216. )
  217. if (ZXING_READERS)
  218. set (PUBLIC_HEADERS ${PUBLIC_HEADERS}
  219. src/DecodeHints.h # [[deprecated]]
  220. src/Result.h # [[deprecated]]
  221. )
  222. endif()
  223. if (ZXING_WRITERS_OLD)
  224. set (PUBLIC_HEADERS ${PUBLIC_HEADERS}
  225. src/BitMatrix.h
  226. src/BitMatrixIO.h
  227. src/Range.h
  228. src/Matrix.h
  229. src/MultiFormatWriter.h
  230. )
  231. endif()
  232. # end of public header set
  233. if (ZXING_READERS)
  234. set (AZTEC_FILES ${AZTEC_FILES}
  235. src/aztec/AZDecoder.h
  236. src/aztec/AZDecoder.cpp
  237. src/aztec/AZDetector.h
  238. src/aztec/AZDetector.cpp
  239. src/aztec/AZDetectorResult.h
  240. src/aztec/AZReader.h
  241. src/aztec/AZReader.cpp
  242. )
  243. endif()
  244. if (ZXING_WRITERS_OLD)
  245. set (AZTEC_FILES ${AZTEC_FILES}
  246. src/aztec/AZEncodingState.h
  247. src/aztec/AZEncoder.h
  248. src/aztec/AZEncoder.cpp
  249. src/aztec/AZHighLevelEncoder.h
  250. src/aztec/AZHighLevelEncoder.cpp
  251. src/aztec/AZToken.h
  252. src/aztec/AZToken.cpp
  253. src/aztec/AZWriter.h
  254. src/aztec/AZWriter.cpp
  255. )
  256. endif()
  257. if (ZXING_READERS OR ZXING_WRITERS_OLD)
  258. set (DATAMATRIX_FILES
  259. src/datamatrix/DMBitLayout.h
  260. src/datamatrix/DMBitLayout.cpp
  261. src/datamatrix/DMVersion.h
  262. src/datamatrix/DMVersion.cpp
  263. )
  264. endif()
  265. if (ZXING_READERS)
  266. set (DATAMATRIX_FILES ${DATAMATRIX_FILES}
  267. src/datamatrix/DMDataBlock.h
  268. src/datamatrix/DMDataBlock.cpp
  269. src/datamatrix/DMDecoder.h
  270. src/datamatrix/DMDecoder.cpp
  271. src/datamatrix/DMDetector.h
  272. src/datamatrix/DMDetector.cpp
  273. src/datamatrix/DMReader.h
  274. src/datamatrix/DMReader.cpp
  275. )
  276. endif()
  277. if (ZXING_WRITERS_OLD)
  278. set (DATAMATRIX_FILES ${DATAMATRIX_FILES}
  279. src/datamatrix/DMECEncoder.h
  280. src/datamatrix/DMECEncoder.cpp
  281. src/datamatrix/DMEncoderContext.h
  282. src/datamatrix/DMHighLevelEncoder.h
  283. src/datamatrix/DMHighLevelEncoder.cpp
  284. src/datamatrix/DMSymbolInfo.h
  285. src/datamatrix/DMSymbolInfo.cpp
  286. src/datamatrix/DMSymbolShape.h
  287. src/datamatrix/DMWriter.h
  288. src/datamatrix/DMWriter.cpp
  289. )
  290. endif()
  291. if (ZXING_READERS)
  292. set (MAXICODE_FILES ${MAXICODE_FILES}
  293. src/maxicode/MCBitMatrixParser.h
  294. src/maxicode/MCBitMatrixParser.cpp
  295. src/maxicode/MCDecoder.h
  296. src/maxicode/MCDecoder.cpp
  297. src/maxicode/MCReader.h
  298. src/maxicode/MCReader.cpp
  299. )
  300. endif()
  301. if (ZXING_READERS OR ZXING_WRITERS_OLD)
  302. set (ONED_FILES
  303. src/oned/ODUPCEANCommon.h
  304. src/oned/ODUPCEANCommon.cpp
  305. src/oned/ODCode128Patterns.h
  306. src/oned/ODCode128Patterns.cpp
  307. )
  308. endif()
  309. if (ZXING_READERS)
  310. set (ONED_FILES ${ONED_FILES}
  311. src/oned/ODCodabarReader.h
  312. src/oned/ODCodabarReader.cpp
  313. src/oned/ODCode39Reader.h
  314. src/oned/ODCode39Reader.cpp
  315. src/oned/ODCode93Reader.h
  316. src/oned/ODCode93Reader.cpp
  317. src/oned/ODCode128Reader.h
  318. src/oned/ODCode128Reader.cpp
  319. src/oned/ODDataBarCommon.h
  320. src/oned/ODDataBarCommon.cpp
  321. src/oned/ODDataBarReader.h
  322. src/oned/ODDataBarReader.cpp
  323. src/oned/ODDataBarExpandedBitDecoder.h
  324. src/oned/ODDataBarExpandedBitDecoder.cpp
  325. src/oned/ODDataBarExpandedReader.h
  326. src/oned/ODDataBarExpandedReader.cpp
  327. src/oned/ODDataBarLimitedReader.h
  328. src/oned/ODDataBarLimitedReader.cpp
  329. src/oned/ODDXFilmEdgeReader.h
  330. src/oned/ODDXFilmEdgeReader.cpp
  331. src/oned/ODITFReader.h
  332. src/oned/ODITFReader.cpp
  333. src/oned/ODMultiUPCEANReader.h
  334. src/oned/ODMultiUPCEANReader.cpp
  335. src/oned/ODReader.h
  336. src/oned/ODReader.cpp
  337. src/oned/ODRowReader.h
  338. )
  339. endif()
  340. if (ZXING_WRITERS_OLD)
  341. set (ONED_FILES ${ONED_FILES}
  342. src/oned/ODCodabarWriter.h
  343. src/oned/ODCodabarWriter.cpp
  344. src/oned/ODCode39Writer.h
  345. src/oned/ODCode39Writer.cpp
  346. src/oned/ODCode93Writer.h
  347. src/oned/ODCode93Writer.cpp
  348. src/oned/ODCode128Writer.h
  349. src/oned/ODCode128Writer.cpp
  350. src/oned/ODEAN8Writer.h
  351. src/oned/ODEAN8Writer.cpp
  352. src/oned/ODEAN13Writer.h
  353. src/oned/ODEAN13Writer.cpp
  354. src/oned/ODITFWriter.h
  355. src/oned/ODITFWriter.cpp
  356. src/oned/ODUPCEWriter.h
  357. src/oned/ODUPCEWriter.cpp
  358. src/oned/ODUPCAWriter.h
  359. src/oned/ODUPCAWriter.cpp
  360. src/oned/ODWriterHelper.h
  361. src/oned/ODWriterHelper.cpp
  362. )
  363. endif()
  364. if (ZXING_READERS OR ZXING_WRITERS_OLD)
  365. set (PDF417_FILES
  366. src/pdf417/ZXBigInteger.h
  367. src/pdf417/ZXBigInteger.cpp
  368. )
  369. endif()
  370. if (ZXING_READERS)
  371. set (PDF417_FILES ${PDF417_FILES}
  372. src/pdf417/PDFBarcodeMetadata.h
  373. src/pdf417/PDFBarcodeValue.h
  374. src/pdf417/PDFBarcodeValue.cpp
  375. src/pdf417/PDFBoundingBox.h
  376. src/pdf417/PDFBoundingBox.cpp
  377. src/pdf417/PDFCodeword.h
  378. src/pdf417/PDFCodewordDecoder.h
  379. src/pdf417/PDFCodewordDecoder.cpp
  380. src/pdf417/PDFDecoder.h
  381. src/pdf417/PDFDecoder.cpp
  382. src/pdf417/PDFDecoderResultExtra.h
  383. src/pdf417/PDFDetectionResult.h
  384. src/pdf417/PDFDetectionResult.cpp
  385. src/pdf417/PDFDetectionResultColumn.h
  386. src/pdf417/PDFDetectionResultColumn.cpp
  387. src/pdf417/PDFDetector.h
  388. src/pdf417/PDFDetector.cpp
  389. src/pdf417/PDFModulusGF.h
  390. src/pdf417/PDFModulusGF.cpp
  391. src/pdf417/PDFModulusPoly.h
  392. src/pdf417/PDFModulusPoly.cpp
  393. src/pdf417/PDFReader.h
  394. src/pdf417/PDFReader.cpp
  395. src/pdf417/PDFScanningDecoder.h
  396. src/pdf417/PDFScanningDecoder.cpp
  397. src/pdf417/CustomData.h
  398. src/pdf417/ZXNullable.h
  399. )
  400. endif()
  401. if (ZXING_WRITERS_OLD)
  402. set (PDF417_FILES ${PDF417_FILES}
  403. src/pdf417/PDFCompaction.h
  404. src/pdf417/PDFEncoder.h
  405. src/pdf417/PDFEncoder.cpp
  406. src/pdf417/PDFHighLevelEncoder.h
  407. src/pdf417/PDFHighLevelEncoder.cpp
  408. src/pdf417/PDFWriter.h
  409. src/pdf417/PDFWriter.cpp
  410. )
  411. endif()
  412. if (ZXING_READERS OR ZXING_WRITERS_OLD)
  413. set (QRCODE_FILES
  414. src/qrcode/QRCodecMode.h
  415. src/qrcode/QRCodecMode.cpp
  416. src/qrcode/QRErrorCorrectionLevel.h
  417. src/qrcode/QRErrorCorrectionLevel.cpp
  418. src/qrcode/QRVersion.h
  419. src/qrcode/QRVersion.cpp
  420. )
  421. endif()
  422. if (ZXING_READERS)
  423. set (QRCODE_FILES ${QRCODE_FILES}
  424. src/qrcode/QRBitMatrixParser.h
  425. src/qrcode/QRBitMatrixParser.cpp
  426. src/qrcode/QRDataBlock.h
  427. src/qrcode/QRDataBlock.cpp
  428. src/qrcode/QRDataMask.h
  429. src/qrcode/QRDecoder.h
  430. src/qrcode/QRDecoder.cpp
  431. src/qrcode/QRDetector.h
  432. src/qrcode/QRDetector.cpp
  433. src/qrcode/QRECB.h
  434. src/qrcode/QRFormatInformation.h
  435. src/qrcode/QRFormatInformation.cpp
  436. src/qrcode/QRReader.h
  437. src/qrcode/QRReader.cpp
  438. )
  439. endif()
  440. if (ZXING_WRITERS_OLD)
  441. set (QRCODE_FILES ${QRCODE_FILES}
  442. src/qrcode/QREncoder.h
  443. src/qrcode/QREncoder.cpp
  444. src/qrcode/QREncodeResult.h
  445. src/qrcode/QRMaskUtil.h
  446. src/qrcode/QRMaskUtil.cpp
  447. src/qrcode/QRMatrixUtil.h
  448. src/qrcode/QRMatrixUtil.cpp
  449. src/qrcode/QRWriter.h
  450. src/qrcode/QRWriter.cpp
  451. )
  452. endif()
  453. source_group (Sources FILES ${COMMON_FILES})
  454. source_group (Sources\\aztec FILES ${AZTEC_FILES})
  455. source_group (Sources\\datamatrix FILES ${DATAMATRIX_FILES})
  456. source_group (Sources\\maxicode FILES ${MAXICODE_FILES})
  457. source_group (Sources\\oned FILES ${ONED_FILES})
  458. source_group (Sources\\pdf417 FILES ${PDF417_FILES})
  459. source_group (Sources\\qrcode FILES ${QRCODE_FILES})
  460. set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
  461. set(THREADS_PREFER_PTHREAD_FLAG TRUE)
  462. find_package(Threads REQUIRED)
  463. add_library (ZXing
  464. ${COMMON_FILES}
  465. ${AZTEC_FILES}
  466. ${DATAMATRIX_FILES}
  467. ${MAXICODE_FILES}
  468. ${ONED_FILES}
  469. ${PDF417_FILES}
  470. ${QRCODE_FILES}
  471. )
  472. target_include_directories (ZXing
  473. PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>" "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>"
  474. INTERFACE "$<INSTALL_INTERFACE:include>"
  475. )
  476. target_compile_options (ZXing
  477. PUBLIC ${ZXING_PUBLIC_FLAGS}
  478. PRIVATE ${ZXING_PRIVATE_FLAGS}
  479. )
  480. target_compile_features(ZXing PUBLIC cxx_std_17)
  481. target_link_libraries (ZXing PRIVATE Threads::Threads)
  482. if (ZXING_READERS OR ZXING_WRITERS_OLD)
  483. set (LIBZUECI_FILES
  484. src/libzueci/zueci.c
  485. src/libzueci/zueci.h
  486. )
  487. set_source_files_properties(${LIBZUECI_FILES} PROPERTIES
  488. COMPILE_FLAGS "$<$<NOT:$<BOOL:${ZXING_READERS}>>:-DZUECI_EMBED_NO_TO_UTF> $<$<NOT:$<BOOL:${ZXING_WRITERS_OLD}>>:-DZUECI_EMBED_NO_TO_ECI>"
  489. SKIP_PRECOMPILE_HEADERS ON
  490. )
  491. target_sources(ZXing PRIVATE ${LIBZUECI_FILES})
  492. source_group (Sources\\libzueci FILES ${LIBZUECI_FILES})
  493. endif()
  494. if (ZXING_WRITERS_NEW)
  495. if (ZXING_USE_BUNDLED_ZINT)
  496. aux_source_directory(src/libzint LIBZINT_FILES) # manually re-run cmake after adding a new file/symlink
  497. set_source_files_properties(${LIBZINT_FILES} PROPERTIES SKIP_PRECOMPILE_HEADERS ON)
  498. target_sources(ZXing PRIVATE ${LIBZINT_FILES})
  499. source_group (Sources\\libzint FILES ${LIBZINT_FILES})
  500. target_include_directories (ZXing PRIVATE "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/libzint>")
  501. else()
  502. include(../zxing.cmake)
  503. zxing_add_package(zint zint https://github.com/zint/zint.git 7a9fdd6cd00cd5bfd0082705d934c13ef84f25e1)
  504. target_link_libraries (ZXing PRIVATE zint)
  505. endif()
  506. endif()
  507. add_library(ZXing::ZXing ALIAS ZXing)
  508. # add the old alias as well, to keep old clients compiling [[deprecated]]
  509. # note: this only affects client code that includes ZXing via sub_directory.
  510. # for clients using the exported target, see ZXingConfig.cmake.in
  511. add_library(ZXing::Core ALIAS ZXing)
  512. set_target_properties(ZXing PROPERTIES EXPORT_NAME ZXing)
  513. # force position independent code to be able to link it as static lib into a DLL (e.g. the python module)
  514. set_target_properties(ZXing PROPERTIES POSITION_INDEPENDENT_CODE ON)
  515. if (PROJECT_VERSION)
  516. set_target_properties(ZXing PROPERTIES VERSION ${PROJECT_VERSION})
  517. set_target_properties(ZXing PROPERTIES SOVERSION ${ZXING_SONAME})
  518. endif()
  519. set_target_properties(ZXing PROPERTIES PUBLIC_HEADER "${PUBLIC_HEADERS}")
  520. set(PRECOMPILE_HEADERS ${PUBLIC_HEADERS})
  521. list(REMOVE_ITEM PRECOMPILE_HEADERS "$<$<BOOL:${ZXING_C_API}>:${CMAKE_CURRENT_SOURCE_DIR}/src/ZXingC.h>")
  522. list(REMOVE_ITEM PRECOMPILE_HEADERS src/DecodeHints.h) # [[deprecated]]
  523. list(REMOVE_ITEM PRECOMPILE_HEADERS src/Result.h) # [[deprecated]]
  524. list(REMOVE_ITEM PRECOMPILE_HEADERS src/ZXVersion.h) # [[deprecated]]
  525. target_precompile_headers(ZXing PRIVATE ${PRECOMPILE_HEADERS})
  526. set_source_files_properties(src/DecodeHints.cpp PROPERTIES SKIP_PRECOMPILE_HEADERS ON)
  527. if(CMAKE_BUILD_TYPE MATCHES "Release|RelWithDebInfo")
  528. # The following is a list of translation units that fulfill two criteria regarding the use of -Os vs -O3:
  529. # 1. their binary size decreases significantly
  530. # 2. the runtime of ReaderTest is not (measurably) affected
  531. # Compiling them with -Os saves about 40kB (3%) with clang and 190kB (12%) with gcc.
  532. check_cxx_compiler_flag("-Os" COMPILER_KNOWS_Os)
  533. if(COMPILER_KNOWS_Os)
  534. set_source_files_properties(
  535. src/Barcode.cpp
  536. src/BarcodeFormat.cpp
  537. src/BitMatrixIO.cpp
  538. src/Error.cpp
  539. src/GTIN.cpp
  540. src/HRI.cpp
  541. src/MultiFormatReader.cpp
  542. src/WriteBarcode.cpp
  543. src/ZXingC.cpp
  544. src/ZXingCpp.cpp
  545. src/aztec/AZHighLevelEncoder.cpp
  546. src/datamatrix/DMDataBlock.cpp
  547. src/datamatrix/DMHighLevelEncoder.cpp
  548. src/oned/ODDataBarExpandedBitDecoder.cpp
  549. src/pdf417/PDFHighLevelEncoder.cpp
  550. src/qrcode/QRBitMatrixParser.cpp
  551. src/qrcode/QRDataBlock.cpp
  552. src/qrcode/QRDecoder.cpp
  553. src/qrcode/QREncoder.cpp
  554. src/qrcode/QRMaskUtil.cpp
  555. src/qrcode/QRReader.cpp
  556. src/qrcode/QRVersion.cpp
  557. ${LIBZINT_FILES}
  558. PROPERTIES SKIP_PRECOMPILE_HEADERS ON COMPILE_FLAGS -Os)
  559. endif()
  560. endif()
  561. include (GNUInstallDirs)
  562. set(ZX_INSTALL_TARGETS ZXing)
  563. install (
  564. TARGETS ${ZX_INSTALL_TARGETS} EXPORT ZXingTargets
  565. LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  566. RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
  567. ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
  568. FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR}
  569. # INCLUDES DESTINATION include
  570. PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/ZXing"
  571. )
  572. configure_file (Version.h.in Version.h)
  573. install (
  574. FILES "${CMAKE_CURRENT_BINARY_DIR}/Version.h"
  575. DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/ZXing"
  576. )
  577. if (MSVC)
  578. set_target_properties(ZXing PROPERTIES
  579. COMPILE_PDB_NAME ZXing
  580. COMPILE_PDB_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
  581. install(FILES ${CMAKE_CURRENT_BINARY_DIR}/ZXing.pdb
  582. DESTINATION ${CMAKE_INSTALL_LIBDIR}
  583. CONFIGURATIONS Debug RelWithDebInfo
  584. OPTIONAL)
  585. endif()
  586. set (CMAKECONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/ZXing")
  587. install (
  588. EXPORT ZXingTargets
  589. DESTINATION ${CMAKECONFIG_INSTALL_DIR} NAMESPACE ZXing::
  590. )
  591. IF (NOT WIN32 OR MINGW)
  592. configure_file(zxing.pc.in zxing.pc @ONLY)
  593. install(FILES ${CMAKE_CURRENT_BINARY_DIR}/zxing.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
  594. ENDIF()
  595. include (CMakePackageConfigHelpers)
  596. write_basic_package_version_file(
  597. "${CMAKE_CURRENT_BINARY_DIR}/ZXingConfigVersion.cmake"
  598. VERSION ${PROJECT_VERSION}
  599. COMPATIBILITY SameMajorVersion
  600. )
  601. configure_package_config_file (
  602. ZXingConfig.cmake.in
  603. ZXingConfig.cmake
  604. INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR}
  605. )
  606. install (
  607. FILES
  608. "${CMAKE_CURRENT_BINARY_DIR}/ZXingConfig.cmake"
  609. "${CMAKE_CURRENT_BINARY_DIR}/ZXingConfigVersion.cmake"
  610. DESTINATION ${CMAKECONFIG_INSTALL_DIR}
  611. )