From 56cc832d076173152a718b18875b188ea23d21d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=8B=E6=96=87=E6=AD=A6?= Date: Fri, 24 May 2024 12:31:45 +0800 Subject: [PATCH] gnu: qrcodegen-cpp: Update to 1.8.0. * gnu/packages/aidc.scm (qrcodegen-cpp): Update to 1.8.0. [source]: Use qrcodegen-cpp-cmake.patch. [build-system]: Switch to cmake-build-system. [arguments]: Enable tests and build shared libraries. * gnu/packages/patches/qrcodegen-cpp-make-install.patch: Remove file. * gnu/packages/patches/qrcodegen-cpp-cmake.patch: New file. * gnu/local.mk (dist_patch_DATA): Register patch. Change-Id: I0272a28ab2cda89700b5523e96f3014eff7ebf65 Signed-off-by: Andrew Tropin --- gnu/local.mk | 2 +- gnu/packages/aidc.scm | 22 +- .../patches/qrcodegen-cpp-cmake.patch | 506 ++++++++++++++++++ .../patches/qrcodegen-cpp-make-install.patch | 448 ---------------- 4 files changed, 514 insertions(+), 464 deletions(-) create mode 100644 gnu/packages/patches/qrcodegen-cpp-cmake.patch delete mode 100644 gnu/packages/patches/qrcodegen-cpp-make-install.patch diff --git a/gnu/local.mk b/gnu/local.mk index 61401b8820..ed630041ff 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -2050,7 +2050,7 @@ dist_patch_DATA = \ %D%/packages/patches/qemu-glibc-2.27.patch \ %D%/packages/patches/qemu-glibc-2.30.patch \ %D%/packages/patches/qemu-fix-agent-paths.patch \ - %D%/packages/patches/qrcodegen-cpp-make-install.patch \ + %D%/packages/patches/qrcodegen-cpp-cmake.patch \ %D%/packages/patches/qtbase-absolute-runpath.patch \ %D%/packages/patches/qtbase-find-tools-in-PATH.patch \ %D%/packages/patches/qtbase-qmake-fix-includedir.patch \ diff --git a/gnu/packages/aidc.scm b/gnu/packages/aidc.scm index b0fc1b30d9..bc9c47a480 100644 --- a/gnu/packages/aidc.scm +++ b/gnu/packages/aidc.scm @@ -228,30 +228,22 @@ (define-public zbar (define-public qrcodegen-cpp (package (name "qrcodegen-cpp") - (version "1.6.0") + (version "1.8.0") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/nayuki/QR-Code-generator") (commit (string-append "v" version)))) (file-name (git-file-name name version)) - (patches (search-patches "qrcodegen-cpp-make-install.patch")) + (patches (search-patches "qrcodegen-cpp-cmake.patch")) (sha256 (base32 - "0iq9sv9na0vg996aqrxrjn9rrbiyy7sc9vslw945p3ky22pw3lql")))) - (build-system gnu-build-system) + "0dk9ci5gchxa8gh0hyhlj3d5jwxqlnfm85xyp791ldaia14bkj39")))) + (build-system cmake-build-system) (arguments - `(#:tests? #f ; no test suite - #:make-flags - (list (string-append "PREFIX=" (assoc-ref %outputs "out"))) - #:phases - (modify-phases %standard-phases - (delete 'configure) ; No ./configure script - ;; Only build the C++ variant. - (add-after 'unpack 'chdir - (lambda _ - (chdir "cpp") - #t))))) + (list #:configure-flags + #~'("-DBUILD_TESTS=ON" + "-DBUILD_SHARED_LIBS=ON"))) (synopsis "QR Code generator library") (description "qrcodegen-cpp is a QR code generator library in C++. The project also offers Java, Javascript, Python, C, and Rust implementations.") diff --git a/gnu/packages/patches/qrcodegen-cpp-cmake.patch b/gnu/packages/patches/qrcodegen-cpp-cmake.patch new file mode 100644 index 0000000000..aa0716f173 --- /dev/null +++ b/gnu/packages/patches/qrcodegen-cpp-cmake.patch @@ -0,0 +1,506 @@ +From 283d6a4bae95f42aaccd9ddd06d16c2e33ed4abf Mon Sep 17 00:00:00 2001 +From: Vitaly Zaitsev +Date: Thu, 21 Apr 2022 15:36:23 +0200 +Subject: [PATCH 1/2] Implemented CMake build support. + +Co-authored-by: leha-bot +Signed-off-by: Vitaly Zaitsev +--- + CMakeLists.txt | 235 +++++++++++++++++++++++++++++ + c/Makefile | 88 ----------- + cmake/qrcodegen-config.cmake.in | 4 + + cmake/qrcodegen.pc.in | 11 ++ + cmake/qrcodegencpp-config.cmake.in | 4 + + cmake/qrcodegencpp.pc.in | 11 ++ + cpp/Makefile | 84 ----------- + 7 files changed, 265 insertions(+), 172 deletions(-) + create mode 100644 CMakeLists.txt + delete mode 100644 c/Makefile + create mode 100644 cmake/qrcodegen-config.cmake.in + create mode 100644 cmake/qrcodegen.pc.in + create mode 100644 cmake/qrcodegencpp-config.cmake.in + create mode 100644 cmake/qrcodegencpp.pc.in + delete mode 100644 cpp/Makefile + +diff --git a/CMakeLists.txt b/CMakeLists.txt +new file mode 100644 +index 0000000..b07197f +--- /dev/null ++++ b/CMakeLists.txt +@@ -0,0 +1,235 @@ ++# ============================== ++# === Project initialization === ++# ============================== ++ ++cmake_minimum_required(VERSION 3.12) ++ ++project(QR-Code-generator ++ VERSION 1.8.0 ++ DESCRIPTION "High-quality QR Code generator library in Java, TypeScript/JavaScript, Python, C++, C, Rust" ++ HOMEPAGE_URL "https://www.nayuki.io/page/qr-code-generator-library" ++ LANGUAGES C CXX ++) ++ ++set(CMAKE_CXX_STANDARD 11) ++set(CMAKE_CXX_STANDARD_REQUIRED ON) ++ ++# ======================= ++# === Project options === ++# ======================= ++ ++option(BUILD_EXAMPLES "Build examples and demos" OFF) ++option(BUILD_TESTS "Build and run unit tests" OFF) ++ ++# ======================= ++# === Paths detection === ++# ======================= ++ ++include(GNUInstallDirs) ++ ++# ============================ ++# === CMake config helpers === ++# ============================ ++ ++include(CMakePackageConfigHelpers) ++ ++# ======================== ++# === C library target === ++# ======================== ++ ++set(QRCODEGEN_NAME "qrcodegen") ++ ++set(QRCODEGEN_SOURCES ++ c/qrcodegen.c ++) ++ ++set(QRCODEGEN_HEADERS ++ c/qrcodegen.h ++) ++ ++add_library(${QRCODEGEN_NAME} ++ ${QRCODEGEN_SOURCES} ++ ${QRCODEGEN_HEADERS} ++) ++ ++target_include_directories(${QRCODEGEN_NAME} PUBLIC ++ $ ++ $ ++) ++ ++set_property(TARGET ${QRCODEGEN_NAME} PROPERTY PUBLIC_HEADER ${QRCODEGEN_HEADERS}) ++set_property(TARGET ${QRCODEGEN_NAME} PROPERTY VERSION ${CMAKE_PROJECT_VERSION}) ++set_property(TARGET ${QRCODEGEN_NAME} PROPERTY SOVERSION 1) ++ ++install(TARGETS ${QRCODEGEN_NAME} ++ EXPORT ${QRCODEGEN_NAME}-targets ++ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ++ BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR} ++ PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${QRCODEGEN_NAME} ++) ++ ++configure_package_config_file(cmake/${QRCODEGEN_NAME}-config.cmake.in ++ ${QRCODEGEN_NAME}-config.cmake ++ INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${QRCODEGEN_NAME} ++) ++write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/${QRCODEGEN_NAME}-config-version.cmake ++ COMPATIBILITY ExactVersion ++) ++ ++install(FILES ++ ${CMAKE_CURRENT_BINARY_DIR}/${QRCODEGEN_NAME}-config.cmake ++ ${CMAKE_CURRENT_BINARY_DIR}/${QRCODEGEN_NAME}-config-version.cmake ++ DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${QRCODEGEN_NAME} ++) ++ ++install(EXPORT ${QRCODEGEN_NAME}-targets ++ DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${QRCODEGEN_NAME} ++ NAMESPACE ${QRCODEGEN_NAME}:: ++) ++ ++configure_file(cmake/${QRCODEGEN_NAME}.pc.in ++ ${CMAKE_CURRENT_BINARY_DIR}/${QRCODEGEN_NAME}.pc ++ @ONLY ++) ++ ++install(FILES ++ ${CMAKE_CURRENT_BINARY_DIR}/${QRCODEGEN_NAME}.pc ++ DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig ++) ++ ++# ========================= ++# === C examples target === ++# ========================= ++ ++if(BUILD_EXAMPLES) ++ set(QRCODEGENDEMO_SOURCES ++ c/qrcodegen-demo.c ++ ) ++ ++ add_executable(${QRCODEGEN_NAME}-demo ++ ${QRCODEGENDEMO_SOURCES} ++ ) ++ ++ target_link_libraries(${QRCODEGEN_NAME}-demo PRIVATE ++ ${QRCODEGEN_NAME} ++ ) ++endif() ++ ++# ====================== ++# === C tests target === ++# ====================== ++ ++if (BUILD_TESTS) ++ set(QRCODEGENTEST_SOURCES ++ c/qrcodegen-test.c ++ ) ++ ++ add_library(${QRCODEGEN_NAME}-testable OBJECT ++ ${QRCODEGEN_SOURCES} ++ ${QRCODEGEN_HEADERS} ++ ) ++ ++ target_compile_options(${QRCODEGEN_NAME}-testable PUBLIC ++ -DQRCODEGEN_TEST ++ ) ++ ++ add_executable(${QRCODEGEN_NAME}-test ++ ${QRCODEGENTEST_SOURCES} ++ ) ++ ++ target_link_libraries(${QRCODEGEN_NAME}-test PRIVATE ++ ${QRCODEGEN_NAME}-testable ++ ) ++ ++ add_test(NAME ${QRCODEGEN_NAME}-test COMMAND ${QRCODEGEN_NAME}-test) ++endif() ++ ++# ========================== ++# === C++ library target === ++# ========================== ++ ++set(QRCODEGENCPP_NAME "qrcodegencpp") ++ ++set(QRCODEGENCPP_SOURCES ++ cpp/qrcodegen.cpp ++) ++ ++set(QRCODEGENCPP_HEADERS ++ cpp/qrcodegen.hpp ++) ++ ++add_library(${QRCODEGENCPP_NAME} ++ ${QRCODEGENCPP_SOURCES} ++ ${QRCODEGENCPP_HEADERS} ++) ++ ++target_include_directories(${QRCODEGENCPP_NAME} PUBLIC ++ $ ++ $ ++) ++ ++set_property(TARGET ${QRCODEGENCPP_NAME} PROPERTY PUBLIC_HEADER ${QRCODEGENCPP_HEADERS}) ++set_property(TARGET ${QRCODEGENCPP_NAME} PROPERTY VERSION ${CMAKE_PROJECT_VERSION}) ++set_property(TARGET ${QRCODEGENCPP_NAME} PROPERTY SOVERSION 1) ++ ++install(TARGETS ${QRCODEGENCPP_NAME} ++ EXPORT ${QRCODEGENCPP_NAME}-targets ++ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ++ BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR} ++ PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${QRCODEGENCPP_NAME} ++) ++ ++configure_package_config_file(cmake/${QRCODEGENCPP_NAME}-config.cmake.in ++ ${QRCODEGENCPP_NAME}-config.cmake ++ INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${QRCODEGENCPP_NAME} ++) ++write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/${QRCODEGENCPP_NAME}-config-version.cmake ++ COMPATIBILITY ExactVersion ++) ++ ++install(FILES ++ ${CMAKE_CURRENT_BINARY_DIR}/${QRCODEGENCPP_NAME}-config.cmake ++ ${CMAKE_CURRENT_BINARY_DIR}/${QRCODEGENCPP_NAME}-config-version.cmake ++ DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${QRCODEGENCPP_NAME} ++) ++ ++install(EXPORT ${QRCODEGENCPP_NAME}-targets ++ DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${QRCODEGENCPP_NAME} ++ NAMESPACE ${QRCODEGENCPP_NAME}:: ++) ++ ++configure_file(cmake/${QRCODEGENCPP_NAME}.pc.in ++ ${CMAKE_CURRENT_BINARY_DIR}/${QRCODEGENCPP_NAME}.pc ++ @ONLY ++) ++ ++install(FILES ++ ${CMAKE_CURRENT_BINARY_DIR}/${QRCODEGENCPP_NAME}.pc ++ DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig ++) ++ ++# =========================== ++# === C++ examples target === ++# =========================== ++ ++if(BUILD_EXAMPLES) ++ set(QRCODEGENCPPDEMO_SOURCES ++ cpp/QrCodeGeneratorDemo.cpp ++ ) ++ ++ add_executable(${QRCODEGENCPP_NAME}-demo ++ ${QRCODEGENCPPDEMO_SOURCES} ++ ) ++ ++ target_link_libraries(${QRCODEGENCPP_NAME}-demo PRIVATE ++ ${QRCODEGENCPP_NAME} ++ ) ++endif() ++ ++# ==================== ++# === Tests export === ++# ==================== ++ ++if (BUILD_TESTS) ++ enable_testing() ++endif() +diff --git a/c/Makefile b/c/Makefile +deleted file mode 100644 +index 661b1f7..0000000 +--- a/c/Makefile ++++ /dev/null +@@ -1,88 +0,0 @@ +-# +-# Makefile for QR Code generator (C) +-# +-# Copyright (c) Project Nayuki. (MIT License) +-# https://www.nayuki.io/page/qr-code-generator-library +-# +-# Permission is hereby granted, free of charge, to any person obtaining a copy of +-# this software and associated documentation files (the "Software"), to deal in +-# the Software without restriction, including without limitation the rights to +-# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +-# the Software, and to permit persons to whom the Software is furnished to do so, +-# subject to the following conditions: +-# - The above copyright notice and this permission notice shall be included in +-# all copies or substantial portions of the Software. +-# - The Software is provided "as is", without warranty of any kind, express or +-# implied, including but not limited to the warranties of merchantability, +-# fitness for a particular purpose and noninfringement. In no event shall the +-# authors or copyright holders be liable for any claim, damages or other +-# liability, whether in an action of contract, tort or otherwise, arising from, +-# out of or in connection with the Software or the use or other dealings in the +-# Software. +-# +- +- +-# ---- Configuration options ---- +- +-# External/implicit variables: +-# - CC: The C compiler, such as gcc or clang. +-# - CFLAGS: Any extra user-specified compiler flags (can be blank). +- +-# Recommended compiler flags: +-CFLAGS += -std=c99 -O +- +-# Extra flags for diagnostics: +-# CFLAGS += -g -Wall -Wextra -Wpedantic -Wconversion -Wsign-conversion -fsanitize=undefined,address +- +- +-# ---- Controlling make ---- +- +-# Clear default suffix rules +-.SUFFIXES: +- +-# Don't delete object files +-.SECONDARY: +- +-# Stuff concerning goals +-.DEFAULT_GOAL = all +-.PHONY: all clean +- +- +-# ---- Targets to build ---- +- +-LIB = qrcodegen +-LIBFILE = lib$(LIB).a +-LIBOBJ = qrcodegen.o +-MAINS = qrcodegen-demo qrcodegen-test +- +-# Build all binaries +-all: $(LIBFILE) $(MAINS) +- +-# Delete build output +-clean: +- rm -f -- $(LIBOBJ) $(LIBFILE) $(MAINS:=.o) $(MAINS) +- rm -rf .deps +- +-# Executable files +-%: %.o $(LIBFILE) +- $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< -L . -l $(LIB) +- +-# Special executable +-qrcodegen-test: qrcodegen-test.c $(LIBOBJ:%.o=%.c) +- $(CC) $(CFLAGS) $(LDFLAGS) -DQRCODEGEN_TEST -o $@ $^ +- +-# The library +-$(LIBFILE): $(LIBOBJ) +- $(AR) -crs $@ -- $^ +- +-# Object files +-%.o: %.c .deps/timestamp +- $(CC) $(CFLAGS) -c -o $@ -MMD -MF .deps/$*.d $< +- +-# Have a place to store header dependencies automatically generated by compiler +-.deps/timestamp: +- mkdir -p .deps +- touch .deps/timestamp +- +-# Make use of said dependencies if available +--include .deps/*.d +diff --git a/cmake/qrcodegen-config.cmake.in b/cmake/qrcodegen-config.cmake.in +new file mode 100644 +index 0000000..0b82c63 +--- /dev/null ++++ b/cmake/qrcodegen-config.cmake.in +@@ -0,0 +1,4 @@ ++@PACKAGE_INIT@ ++ ++include("${CMAKE_CURRENT_LIST_DIR}/@QRCODEGEN_NAME@-targets.cmake") ++check_required_components(@QRCODEGEN_NAME@) +diff --git a/cmake/qrcodegen.pc.in b/cmake/qrcodegen.pc.in +new file mode 100644 +index 0000000..c68955b +--- /dev/null ++++ b/cmake/qrcodegen.pc.in +@@ -0,0 +1,11 @@ ++prefix=@CMAKE_INSTALL_PREFIX@ ++exec_prefix=${prefix} ++libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@ ++includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@/@QRCODEGEN_NAME@ ++ ++Name: @QRCODEGEN_NAME@ ++Description: @CMAKE_PROJECT_DESCRIPTION@ ++Version: @CMAKE_PROJECT_VERSION@ ++ ++Libs: -L${libdir} -l@QRCODEGEN_NAME@ ++Cflags: -I${includedir} +diff --git a/cmake/qrcodegencpp-config.cmake.in b/cmake/qrcodegencpp-config.cmake.in +new file mode 100644 +index 0000000..3d18f99 +--- /dev/null ++++ b/cmake/qrcodegencpp-config.cmake.in +@@ -0,0 +1,4 @@ ++@PACKAGE_INIT@ ++ ++include("${CMAKE_CURRENT_LIST_DIR}/@QRCODEGENCPP_NAME@-targets.cmake") ++check_required_components(@QRCODEGENCPP_NAME@) +diff --git a/cmake/qrcodegencpp.pc.in b/cmake/qrcodegencpp.pc.in +new file mode 100644 +index 0000000..89db084 +--- /dev/null ++++ b/cmake/qrcodegencpp.pc.in +@@ -0,0 +1,11 @@ ++prefix=@CMAKE_INSTALL_PREFIX@ ++exec_prefix=${prefix} ++libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@ ++includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@/@QRCODEGENCPP_NAME@ ++ ++Name: @QRCODEGENCPP_NAME@ ++Description: @CMAKE_PROJECT_DESCRIPTION@ ++Version: @CMAKE_PROJECT_VERSION@ ++ ++Libs: -L${libdir} -l@QRCODEGENCPP_NAME@ ++Cflags: -I${includedir} +diff --git a/cpp/Makefile b/cpp/Makefile +deleted file mode 100644 +index 57dc0bf..0000000 +--- a/cpp/Makefile ++++ /dev/null +@@ -1,84 +0,0 @@ +-# +-# Makefile for QR Code generator (C++) +-# +-# Copyright (c) Project Nayuki. (MIT License) +-# https://www.nayuki.io/page/qr-code-generator-library +-# +-# Permission is hereby granted, free of charge, to any person obtaining a copy of +-# this software and associated documentation files (the "Software"), to deal in +-# the Software without restriction, including without limitation the rights to +-# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +-# the Software, and to permit persons to whom the Software is furnished to do so, +-# subject to the following conditions: +-# - The above copyright notice and this permission notice shall be included in +-# all copies or substantial portions of the Software. +-# - The Software is provided "as is", without warranty of any kind, express or +-# implied, including but not limited to the warranties of merchantability, +-# fitness for a particular purpose and noninfringement. In no event shall the +-# authors or copyright holders be liable for any claim, damages or other +-# liability, whether in an action of contract, tort or otherwise, arising from, +-# out of or in connection with the Software or the use or other dealings in the +-# Software. +-# +- +- +-# ---- Configuration options ---- +- +-# External/implicit variables: +-# - CXX: The C++ compiler, such as g++ or clang++. +-# - CXXFLAGS: Any extra user-specified compiler flags (can be blank). +- +-# Recommended compiler flags: +-CXXFLAGS += -std=c++11 -O +- +-# Extra flags for diagnostics: +-# CXXFLAGS += -g -Wall -Wextra -Wpedantic -Wconversion -Wsign-conversion -fsanitize=undefined,address +- +- +-# ---- Controlling make ---- +- +-# Clear default suffix rules +-.SUFFIXES: +- +-# Don't delete object files +-.SECONDARY: +- +-# Stuff concerning goals +-.DEFAULT_GOAL = all +-.PHONY: all clean +- +- +-# ---- Targets to build ---- +- +-LIB = qrcodegencpp +-LIBFILE = lib$(LIB).a +-LIBOBJ = qrcodegen.o +-MAINS = QrCodeGeneratorDemo +- +-# Build all binaries +-all: $(LIBFILE) $(MAINS) +- +-# Delete build output +-clean: +- rm -f -- $(LIBOBJ) $(LIBFILE) $(MAINS:=.o) $(MAINS) +- rm -rf .deps +- +-# Executable files +-%: %.o $(LIBFILE) +- $(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ $< -L . -l $(LIB) +- +-# The library +-$(LIBFILE): $(LIBOBJ) +- $(AR) -crs $@ -- $^ +- +-# Object files +-%.o: %.cpp .deps/timestamp +- $(CXX) $(CXXFLAGS) -c -o $@ -MMD -MF .deps/$*.d $< +- +-# Have a place to store header dependencies automatically generated by compiler +-.deps/timestamp: +- mkdir -p .deps +- touch .deps/timestamp +- +-# Make use of said dependencies if available +--include .deps/*.d +-- +2.41.0 + diff --git a/gnu/packages/patches/qrcodegen-cpp-make-install.patch b/gnu/packages/patches/qrcodegen-cpp-make-install.patch deleted file mode 100644 index 4da619d3c8..0000000000 --- a/gnu/packages/patches/qrcodegen-cpp-make-install.patch +++ /dev/null @@ -1,448 +0,0 @@ -Make the library installable. Patch copied from pull request: - -https://github.com/nayuki/QR-Code-generator/pull/72 - -From 1625fc1665e1f83eb73c0f5670dcfda96dc0b3e4 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Chv=C3=A1tal?= -Date: Tue, 3 Dec 2019 11:57:24 +0100 -Subject: [PATCH 1/7] Do not append to C/XX/FLAGS but just set them if not - defined already - ---- - c/Makefile | 2 +- - cpp/Makefile | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/c/Makefile b/c/Makefile -index fd0c367..b27449c 100644 ---- a/c/Makefile -+++ b/c/Makefile -@@ -29,7 +29,7 @@ - # - CFLAGS: Any extra user-specified compiler flags (can be blank). - - # Recommended compiler flags: --CFLAGS += -std=c99 -O -+CFLAGS ?= -std=c99 -O - - # Extra flags for diagnostics: - # CFLAGS += -g -Wall -Wextra -Wpedantic -Wconversion -Wsign-conversion -fsanitize=undefined,address -diff --git a/cpp/Makefile b/cpp/Makefile -index f83c512..666f976 100644 ---- a/cpp/Makefile -+++ b/cpp/Makefile -@@ -29,7 +29,7 @@ - # - CXXFLAGS: Any extra user-specified compiler flags (can be blank). - - # Recommended compiler flags: --CXXFLAGS += -std=c++11 -O -+CXXFLAGS ?= -std=c++11 -O - - # Extra flags for diagnostics: - # CXXFLAGS += -g -Wall -Wextra -Wpedantic -Wconversion -Wsign-conversion -fsanitize=undefined,address - -From 2e496a0f59d5c6782c1e3e2a3ca36d0272b384f3 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Chv=C3=A1tal?= -Date: Tue, 3 Dec 2019 11:59:59 +0100 -Subject: [PATCH 2/7] Make use of -fPIC parameter when building' - ---- - c/Makefile | 2 +- - cpp/Makefile | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/c/Makefile b/c/Makefile -index b27449c..bf79462 100644 ---- a/c/Makefile -+++ b/c/Makefile -@@ -77,7 +77,7 @@ $(LIBFILE): $(LIBOBJ) - - # Object files - %.o: %.c .deps/timestamp -- $(CC) $(CFLAGS) -c -o $@ -MMD -MF .deps/$*.d $< -+ $(CC) $(CFLAGS) -fPIC -c -o $@ -MMD -MF .deps/$*.d $< - - # Have a place to store header dependencies automatically generated by compiler - .deps/timestamp: -diff --git a/cpp/Makefile b/cpp/Makefile -index 666f976..f37cf66 100644 ---- a/cpp/Makefile -+++ b/cpp/Makefile -@@ -73,7 +73,7 @@ $(LIBFILE): $(LIBOBJ) - - # Object files - %.o: %.cpp .deps/timestamp -- $(CXX) $(CXXFLAGS) -c -o $@ -MMD -MF .deps/$*.d $< -+ $(CXX) $(CXXFLAGS) -fPIC -c -o $@ -MMD -MF .deps/$*.d $< - - # Have a place to store header dependencies automatically generated by compiler - .deps/timestamp: - -From 29489faaa5a3b014c5c2d95ca34033df470de73c Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Chv=C3=A1tal?= -Date: Tue, 3 Dec 2019 12:07:19 +0100 -Subject: [PATCH 3/7] Generate both shared and static libraries - ---- - c/Makefile | 14 ++++++++++---- - cpp/Makefile | 14 ++++++++++---- - 2 files changed, 20 insertions(+), 8 deletions(-) - -diff --git a/c/Makefile b/c/Makefile -index bf79462..38eda2d 100644 ---- a/c/Makefile -+++ b/c/Makefile -@@ -51,16 +51,19 @@ CFLAGS ?= -std=c99 -O - # ---- Targets to build ---- - - LIB = qrcodegen --LIBFILE = lib$(LIB).a -+ARFILE = lib$(LIB).a -+LIBFILE = lib$(LIB).so -+# Bump the soname number when the ABI changes and gets incompatible -+SO_NAME = $(LIBFILE).1 - LIBOBJ = qrcodegen.o - MAINS = qrcodegen-demo qrcodegen-test qrcodegen-worker - - # Build all binaries --all: $(LIBFILE) $(MAINS) -+all: $(LIBFILE) $(ARFILE) $(MAINS) - - # Delete build output - clean: -- rm -f -- $(LIBOBJ) $(LIBFILE) $(MAINS:=.o) $(MAINS) -+ rm -f -- $(LIBOBJ) $(LIBFILE) $(ARFILE) $(MAINS:=.o) $(MAINS) - rm -rf .deps - - # Executable files -@@ -72,9 +75,12 @@ qrcodegen-test: qrcodegen-test.c $(LIBOBJ:%.o=%.c) - $(CC) $(CFLAGS) -DQRCODEGEN_TEST -o $@ $^ - - # The library --$(LIBFILE): $(LIBOBJ) -+$(ARFILE): $(LIBOBJ) - $(AR) -crs $@ -- $^ - -+$(LIBFILE): $(LIBOBJ) -+ $(CC) -shared -Wl,-soname,$(SO_NAME) $(LDFLAGS) -o $@ $^ -+ - # Object files - %.o: %.c .deps/timestamp - $(CC) $(CFLAGS) -fPIC -c -o $@ -MMD -MF .deps/$*.d $< -diff --git a/cpp/Makefile b/cpp/Makefile -index f37cf66..606cdad 100644 ---- a/cpp/Makefile -+++ b/cpp/Makefile -@@ -51,16 +51,19 @@ CXXFLAGS ?= -std=c++11 -O - # ---- Targets to build ---- - - LIB = qrcodegen --LIBFILE = lib$(LIB).a -+ARFILE = lib$(LIB).a -+LIBFILE = lib$(LIB).so -+# Bump the soname number when the ABI changes and gets incompatible -+SO_NAME = $(LIBFILE).1 - LIBOBJ = QrCode.o - MAINS = QrCodeGeneratorDemo QrCodeGeneratorWorker - - # Build all binaries --all: $(LIBFILE) $(MAINS) -+all: $(LIBFILE) $(ARFILE) $(MAINS) - - # Delete build output - clean: -- rm -f -- $(LIBOBJ) $(LIBFILE) $(MAINS:=.o) $(MAINS) -+ rm -f -- $(LIBOBJ) $(LIBFILE) $(ARFILE) $(MAINS:=.o) $(MAINS) - rm -rf .deps - - # Executable files -@@ -68,9 +71,12 @@ clean: - $(CXX) $(CXXFLAGS) -o $@ $< -L . -l $(LIB) - - # The library --$(LIBFILE): $(LIBOBJ) -+$(ARFILE): $(LIBOBJ) - $(AR) -crs $@ -- $^ - -+$(LIBFILE): $(LIBOBJ) -+ $(CC) -shared -Wl,-soname,$(SO_NAME) $(LDFLAGS) -o $@ $^ -+ - # Object files - %.o: %.cpp .deps/timestamp - $(CXX) $(CXXFLAGS) -fPIC -c -o $@ -MMD -MF .deps/$*.d $< - -From 064f38d6a8dc0a457728a47ee4ca1e927e46d5ec Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Chv=C3=A1tal?= -Date: Tue, 3 Dec 2019 12:45:34 +0100 -Subject: [PATCH 4/7] Create install targets for C and CPP - ---- - c/Makefile | 26 ++++++++++++++++++++++++++ - cpp/Makefile | 27 +++++++++++++++++++++++++++ - 2 files changed, 53 insertions(+) - -diff --git a/c/Makefile b/c/Makefile -index 38eda2d..7521944 100644 ---- a/c/Makefile -+++ b/c/Makefile -@@ -34,6 +34,8 @@ CFLAGS ?= -std=c99 -O - # Extra flags for diagnostics: - # CFLAGS += -g -Wall -Wextra -Wpedantic -Wconversion -Wsign-conversion -fsanitize=undefined,address - -+# Version information -+VERSION = 1.5.0 - - # ---- Controlling make ---- - -@@ -55,9 +57,15 @@ ARFILE = lib$(LIB).a - LIBFILE = lib$(LIB).so - # Bump the soname number when the ABI changes and gets incompatible - SO_NAME = $(LIBFILE).1 -+REAL_NAME = $(LIBFILE).$(VERSION) -+HEADERS = qrcodegen.h - LIBOBJ = qrcodegen.o - MAINS = qrcodegen-demo qrcodegen-test qrcodegen-worker - -+# define paths to install -+INCLUDEDIR ?= $(DESTDIR)/usr/include/qrcodegen -+LIBDIR ?= $(DESTDIR)/usr/lib -+ - # Build all binaries - all: $(LIBFILE) $(ARFILE) $(MAINS) - -@@ -66,6 +74,24 @@ clean: - rm -f -- $(LIBOBJ) $(LIBFILE) $(ARFILE) $(MAINS:=.o) $(MAINS) - rm -rf .deps - -+install-shared: $(LIBFILE) -+ install -d $(LIBDIR) || true -+ install -m 0644 $(LIBFILE) $(LIBDIR)/$(REAL_NAME) -+ rm -f $(LIBDIR)/$(SO_NAME) -+ ln -s $(REAL_NAME) $(LIBDIR)/$(SO_NAME) -+ rm -f $(LIBDIR)/$(LIBFILE) -+ ln -s $(SO_NAME) $(LIBDIR)/$(LIBFILE) -+ -+install-static: $(ARFILE) -+ install -d $(LIBDIR) || true -+ install -m 0644 $(ARFILE) $(LIBDIR)/$(ARFILE) -+ -+install-header: $(HEADERS) -+ install -d $(INCLUDEDIR) || true -+ install -m 0644 $(HEADERS) $(INCLUDEDIR)/ -+ -+install: install-shared install-static install-header -+ - # Executable files - %: %.o $(LIBFILE) - $(CC) $(CFLAGS) -o $@ $< -L . -l $(LIB) -diff --git a/cpp/Makefile b/cpp/Makefile -index 606cdad..3271bd8 100644 ---- a/cpp/Makefile -+++ b/cpp/Makefile -@@ -34,6 +34,8 @@ CXXFLAGS ?= -std=c++11 -O - # Extra flags for diagnostics: - # CXXFLAGS += -g -Wall -Wextra -Wpedantic -Wconversion -Wsign-conversion -fsanitize=undefined,address - -+# Version information -+VERSION = 1.5.0 - - # ---- Controlling make ---- - -@@ -55,9 +57,16 @@ ARFILE = lib$(LIB).a - LIBFILE = lib$(LIB).so - # Bump the soname number when the ABI changes and gets incompatible - SO_NAME = $(LIBFILE).1 -+REAL_NAME = $(LIBFILE).$(VERSION) -+HEADERS = QrCode.hpp - LIBOBJ = QrCode.o - MAINS = QrCodeGeneratorDemo QrCodeGeneratorWorker - -+# define paths to install -+INCLUDEDIR ?= $(DESTDIR)/usr/include/qrcodegen -+LIBDIR ?= $(DESTDIR)/usr/lib -+ -+ - # Build all binaries - all: $(LIBFILE) $(ARFILE) $(MAINS) - -@@ -66,6 +75,24 @@ clean: - rm -f -- $(LIBOBJ) $(LIBFILE) $(ARFILE) $(MAINS:=.o) $(MAINS) - rm -rf .deps - -+install-shared: $(LIBFILE) -+ install -d $(LIBDIR) || true -+ install -m 0644 $(LIBFILE) $(LIBDIR)/$(REAL_NAME) -+ rm -f $(LIBDIR)/$(SO_NAME) -+ ln -s $(REAL_NAME) $(LIBDIR)/$(SO_NAME) -+ rm -f $(LIBDIR)/$(LIBFILE) -+ ln -s $(SO_NAME) $(LIBDIR)/$(LIBFILE) -+ -+install-static: $(ARFILE) -+ install -d $(LIBDIR) || true -+ install -m 0644 $(ARFILE) $(LIBDIR)/$(ARFILE) -+ -+install-header: $(HEADERS) -+ install -d $(INCLUDEDIR) || true -+ install -m 0644 $(HEADERS) $(INCLUDEDIR)/ -+ -+install: install-shared install-static install-header -+ - # Executable files - %: %.o $(LIBFILE) - $(CXX) $(CXXFLAGS) -o $@ $< -L . -l $(LIB) - -From a635ff4654f94ab26b458c46a8841543e5bc8c67 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Chv=C3=A1tal?= -Date: Tue, 3 Dec 2019 12:50:39 +0100 -Subject: [PATCH 5/7] Rename cpp library to qrcodegencpp to avoid conflict - ---- - cpp/Makefile | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/cpp/Makefile b/cpp/Makefile -index 3271bd8..42fa4ff 100644 ---- a/cpp/Makefile -+++ b/cpp/Makefile -@@ -52,7 +52,7 @@ VERSION = 1.5.0 - - # ---- Targets to build ---- - --LIB = qrcodegen -+LIB = qrcodegencpp - ARFILE = lib$(LIB).a - LIBFILE = lib$(LIB).so - # Bump the soname number when the ABI changes and gets incompatible - -From c073e7dfad6454dfd725a69c347f8272d29ea41c Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Chv=C3=A1tal?= -Date: Tue, 7 Jan 2020 09:18:59 +0100 -Subject: [PATCH 6/7] Add PREFIX variable and few minor fixes from code review - ---- - c/Makefile | 9 +++++---- - cpp/Makefile | 9 +++++---- - 2 files changed, 10 insertions(+), 8 deletions(-) - -diff --git a/c/Makefile b/c/Makefile -index 7521944..874933e 100644 ---- a/c/Makefile -+++ b/c/Makefile -@@ -29,7 +29,7 @@ - # - CFLAGS: Any extra user-specified compiler flags (can be blank). - - # Recommended compiler flags: --CFLAGS ?= -std=c99 -O -+CFLAGS += -std=c99 - - # Extra flags for diagnostics: - # CFLAGS += -g -Wall -Wextra -Wpedantic -Wconversion -Wsign-conversion -fsanitize=undefined,address -@@ -63,8 +63,9 @@ LIBOBJ = qrcodegen.o - MAINS = qrcodegen-demo qrcodegen-test qrcodegen-worker - - # define paths to install --INCLUDEDIR ?= $(DESTDIR)/usr/include/qrcodegen --LIBDIR ?= $(DESTDIR)/usr/lib -+PREFIX ?= /usr/local -+INCLUDEDIR ?= $(DESTDIR)$(PREFIX)/include/qrcodegen -+LIBDIR ?= $(DESTDIR)$(PREFIX)/lib - - # Build all binaries - all: $(LIBFILE) $(ARFILE) $(MAINS) -@@ -105,7 +106,7 @@ $(ARFILE): $(LIBOBJ) - $(AR) -crs $@ -- $^ - - $(LIBFILE): $(LIBOBJ) -- $(CC) -shared -Wl,-soname,$(SO_NAME) $(LDFLAGS) -o $@ $^ -+ $(CC) $(CFLAGS) -shared -Wl,-soname,$(SO_NAME) $(LDFLAGS) -o $@ $^ - - # Object files - %.o: %.c .deps/timestamp -diff --git a/cpp/Makefile b/cpp/Makefile -index 42fa4ff..f8d9b7f 100644 ---- a/cpp/Makefile -+++ b/cpp/Makefile -@@ -29,7 +29,7 @@ - # - CXXFLAGS: Any extra user-specified compiler flags (can be blank). - - # Recommended compiler flags: --CXXFLAGS ?= -std=c++11 -O -+CXXFLAGS += -std=c++11 - - # Extra flags for diagnostics: - # CXXFLAGS += -g -Wall -Wextra -Wpedantic -Wconversion -Wsign-conversion -fsanitize=undefined,address -@@ -63,8 +63,9 @@ LIBOBJ = QrCode.o - MAINS = QrCodeGeneratorDemo QrCodeGeneratorWorker - - # define paths to install --INCLUDEDIR ?= $(DESTDIR)/usr/include/qrcodegen --LIBDIR ?= $(DESTDIR)/usr/lib -+PREFIX ?= /usr/local -+INCLUDEDIR ?= $(DESTDIR)$(PREFIX)/include/qrcodegen -+LIBDIR ?= $(DESTDIR)$(PREFIX)/lib - - - # Build all binaries -@@ -102,7 +103,7 @@ $(ARFILE): $(LIBOBJ) - $(AR) -crs $@ -- $^ - - $(LIBFILE): $(LIBOBJ) -- $(CC) -shared -Wl,-soname,$(SO_NAME) $(LDFLAGS) -o $@ $^ -+ $(CXX) $(CXXFLAGS) -shared -Wl,-soname,$(SO_NAME) $(LDFLAGS) -o $@ $^ - - # Object files - %.o: %.cpp .deps/timestamp - -From b43c1de5cc874535a7f549cef437f6849528e455 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Chv=C3=A1tal?= -Date: Tue, 7 Jan 2020 13:12:32 +0100 -Subject: [PATCH 7/7] Install static and shared library as an executable - ---- - c/Makefile | 4 ++-- - cpp/Makefile | 4 ++-- - 2 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/c/Makefile b/c/Makefile -index 874933e..631cc71 100644 ---- a/c/Makefile -+++ b/c/Makefile -@@ -77,7 +77,7 @@ clean: - - install-shared: $(LIBFILE) - install -d $(LIBDIR) || true -- install -m 0644 $(LIBFILE) $(LIBDIR)/$(REAL_NAME) -+ install -m 0755 $(LIBFILE) $(LIBDIR)/$(REAL_NAME) - rm -f $(LIBDIR)/$(SO_NAME) - ln -s $(REAL_NAME) $(LIBDIR)/$(SO_NAME) - rm -f $(LIBDIR)/$(LIBFILE) -@@ -85,7 +85,7 @@ install-shared: $(LIBFILE) - - install-static: $(ARFILE) - install -d $(LIBDIR) || true -- install -m 0644 $(ARFILE) $(LIBDIR)/$(ARFILE) -+ install -m 0755 $(ARFILE) $(LIBDIR)/$(ARFILE) - - install-header: $(HEADERS) - install -d $(INCLUDEDIR) || true -diff --git a/cpp/Makefile b/cpp/Makefile -index f8d9b7f..bbd861e 100644 ---- a/cpp/Makefile -+++ b/cpp/Makefile -@@ -78,7 +78,7 @@ clean: - - install-shared: $(LIBFILE) - install -d $(LIBDIR) || true -- install -m 0644 $(LIBFILE) $(LIBDIR)/$(REAL_NAME) -+ install -m 0755 $(LIBFILE) $(LIBDIR)/$(REAL_NAME) - rm -f $(LIBDIR)/$(SO_NAME) - ln -s $(REAL_NAME) $(LIBDIR)/$(SO_NAME) - rm -f $(LIBDIR)/$(LIBFILE) -@@ -86,7 +86,7 @@ install-shared: $(LIBFILE) - - install-static: $(ARFILE) - install -d $(LIBDIR) || true -- install -m 0644 $(ARFILE) $(LIBDIR)/$(ARFILE) -+ install -m 0755 $(ARFILE) $(LIBDIR)/$(ARFILE) - - install-header: $(HEADERS) - install -d $(INCLUDEDIR) || true