Subject: [bug#39365] [PATCH 1/6] gnu: Add qrcodegen-cpp.

From: Leo Famulari <[email-masked]>
Date: Fri, 31 Jan 2020 13:30:47 -0500

Oops! Attached...

On Fri, Jan 31, 2020 at 10:58:51AM +0200, Efraim Flashner wrote:
> On Thu, Jan 30, 2020 at 10:06:22PM -0500, Leo Famulari wrote:
> > * gnu/packages/aidc.scm (qrcodegen-cpp): New variable.
> > ---
> >  gnu/packages/aidc.scm | 39 +++++++++++++++++++++++++++++++++++++++
> >  1 file changed, 39 insertions(+)
> 
> You're missing the actual patch ;)
> 
> > 
> > diff --git a/gnu/packages/aidc.scm b/gnu/packages/aidc.scm
> > index 77db0ac9fc..b68f2137be 100644
> > --- a/gnu/packages/aidc.scm
> > +++ b/gnu/packages/aidc.scm
> > @@ -4,6 +4,7 @@
> >  ;;; Copyright © 2017 Hartmut Goebel <[email-masked]>
> >  ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <[email-masked]>
> >  ;;; Copyright © 2019 Guillaume Le Vaillant <[email-masked]>
> > +;;; Copyright © 2020 Leo Famulari <[email-masked]>
> >  ;;;
> >  ;;; This file is part of GNU Guix.
> >  ;;;
> > @@ -154,3 +155,41 @@ For application developers, language bindings are included for C, C++ and
> >  Python as well as GUI widgets for GTK and Qt.")
> >      (home-page "https://github.com/mchehab/zbar")
> >      (license license:lgpl2.1+)))
> > +
> > +(define-public qrcodegen-cpp
> > +  ;; Currently this project's installation mechanism only exists as a GitHub
> > +  ;; pull request, so we build from a recent commit that the proposed patch
> > +  ;; applies to.
> > +  (let ((commit "6ea933f1596d818bd21e9a6b8d2e851fb8b4bcf1")
> > +        (revision "0"))
> > +    (package
> > +      (name "qrcodegen-cpp")
> > +      (version (git-version "1.5.0" revision commit))
> > +      (source (origin
> > +                (method git-fetch)
> > +                (uri (git-reference
> > +                       (url "https://github.com/nayuki/QR-Code-generator.git")
> > +                       (commit commit)))
> > +                (file-name (git-file-name name version))
> > +                (patches (search-patches "qrcodegen-cpp-make-install.patch"))
> > +                (sha256
> > +                 (base32
> > +                  "19fcwqmfk2n9p2n01dv2j4x2y2mqip0j1wbmfbxjp34rqkjwcwxm"))))
> > +      (build-system gnu-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)))))
> > +      (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.")
> 
> You can drop the comma after C if you want.
> 
> > +      (home-page "https://www.nayuki.io/page/qr-code-generator-library")
> > +      (license license:expat))))
> > -- 
> > 2.25.0
> > 
> > 
> > 
> > 
> 
> -- 
> Efraim Flashner   <[email-masked]>   אפרים פלשנר
> GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
> Confidentiality cannot be guaranteed on emails sent or received unencrypted

From 128d0335f74bb90b82427a96ef32127f98e04f31 Mon Sep 17 00:00:00 2001
From: Leo Famulari <[email-masked]>
Date: Thu, 30 Jan 2020 14:52:29 -0500
Subject: [PATCH] gnu: Add qrcodegen-cpp.

* gnu/packages/aidc.scm (qrcodegen-cpp): New variable.
* gnu/packages/patches/qrcodegen-cpp-make-install.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
---
 gnu/local.mk                                  |   1 +
 gnu/packages/aidc.scm                         |  39 ++
 .../patches/qrcodegen-cpp-make-install.patch  | 448 ++++++++++++++++++
 3 files changed, 488 insertions(+)
 create mode 100644 gnu/packages/patches/qrcodegen-cpp-make-install.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index aa8e6e0d0d..4e991f66f4 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1338,6 +1338,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/qemu-CVE-2020-7039.patch			\
   %D%/packages/patches/qemu-CVE-2020-7211.patch			\
   %D%/packages/patches/qemu-fix-documentation-build-failure.patch	\
+  %D%/packages/patches/qrcodegen-cpp-make-install.patch		\
   %D%/packages/patches/qt4-ldflags.patch			\
   %D%/packages/patches/qtbase-use-TZDIR.patch			\
   %D%/packages/patches/qtscript-disable-tests.patch		\
diff --git a/gnu/packages/aidc.scm b/gnu/packages/aidc.scm
index 77db0ac9fc..b68f2137be 100644
--- a/gnu/packages/aidc.scm
+++ b/gnu/packages/aidc.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2017 Hartmut Goebel <[email-masked]>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <[email-masked]>
 ;;; Copyright © 2019 Guillaume Le Vaillant <[email-masked]>
+;;; Copyright © 2020 Leo Famulari <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -154,3 +155,41 @@ For application developers, language bindings are included for C, C++ and
 Python as well as GUI widgets for GTK and Qt.")
     (home-page "https://github.com/mchehab/zbar")
     (license license:lgpl2.1+)))
+
+(define-public qrcodegen-cpp
+  ;; Currently this project's installation mechanism only exists as a GitHub
+  ;; pull request, so we build from a recent commit that the proposed patch
+  ;; applies to.
+  (let ((commit "6ea933f1596d818bd21e9a6b8d2e851fb8b4bcf1")
+        (revision "0"))
+    (package
+      (name "qrcodegen-cpp")
+      (version (git-version "1.5.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                       (url "https://github.com/nayuki/QR-Code-generator.git")
+                       (commit commit)))
+                (file-name (git-file-name name version))
+                (patches (search-patches "qrcodegen-cpp-make-install.patch"))
+                (sha256
+                 (base32
+                  "19fcwqmfk2n9p2n01dv2j4x2y2mqip0j1wbmfbxjp34rqkjwcwxm"))))
+      (build-system gnu-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)))))
+      (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.")
+      (home-page "https://www.nayuki.io/page/qr-code-generator-library")
+      (license license:expat))))
diff --git a/gnu/packages/patches/qrcodegen-cpp-make-install.patch b/gnu/packages/patches/qrcodegen-cpp-make-install.patch
new file mode 100644
index 0000000000..4da619d3c8
--- /dev/null
+++ b/gnu/packages/patches/qrcodegen-cpp-make-install.patch
@@ -0,0 +1,448 @@
+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?= <[email-masked]>
+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?= <[email-masked]>
+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?= <[email-masked]>
+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?= <[email-masked]>
+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?= <[email-masked]>
+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?= <[email-masked]>
+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?= <[email-masked]>
+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
-- 
2.25.0