From 7ad9c03f1a6933ad0125105f62ffbe2e5d4ca584 Mon Sep 17 00:00:00 2001 From: Kalev Lember Date: Sat, 3 Sep 2022 20:18:14 +0200 Subject: [PATCH 1/3] Makefile: Rename USR variable to PREFIX Call it prefix as this is what almost all other build systems use for choosing the install location. --- src/Makefile | 126 +++++++++++++++++++++++++-------------------------- 1 file changed, 63 insertions(+), 63 deletions(-) diff --git a/src/Makefile b/src/Makefile index 69f0ebb61..f62ce47aa 100644 --- a/src/Makefile +++ b/src/Makefile @@ -80,7 +80,7 @@ # Try to auto-detect target OS. OS = $(shell uname) -USR = /usr +PREFIX = /usr LIB = lib BIN = bin INCLUDE = include @@ -120,12 +120,12 @@ endif ifeq ($(OS),FreeBSD) OS = Unix -USR = /usr/local +PREFIX = /usr/local endif ifeq ($(OS),DragonFly) OS = Unix -USR = /usr/local +PREFIX = /usr/local endif ifeq ($(OS),NetBSD) @@ -134,15 +134,15 @@ endif ifneq (,$(findstring MINGW,$(OS))) OS = Windows -USR = /mingw64 +PREFIX = /mingw64 endif ifeq ($(OS),Darwin) ifeq (,$(wildcard /opt/local)) -USR = /usr/local +PREFIX = /usr/local PLUGINDIR = $(HOME)/Library/Application\ Support/Gimp/plug-ins else -USR = /opt/local +PREFIX = /opt/local endif WGET = curl -k -L --silent -o endif @@ -181,13 +181,13 @@ PRERELEASE = $(shell date +%y%m%d) PRERELEASE_CFLAGS = -Dgmic_prerelease="\\\"$(PRERELEASE)\\\"" # Minimal set of flags mandatory to compile G'MIC. -MANDATORY_CFLAGS = -Dcimg_date=\\\"\\\" -Dcimg_time=\\\"\\\" -Dcimg_use_zlib -I. $(shell pkg-config --cflags zlib || echo -I$(USR)/$(INCLUDE)) $(PRERELEASE_CFLAGS) $(EXTRA_CFLAGS) +MANDATORY_CFLAGS = -Dcimg_date=\\\"\\\" -Dcimg_time=\\\"\\\" -Dcimg_use_zlib -I. $(shell pkg-config --cflags zlib || echo -I$(PREFIX)/$(INCLUDE)) $(PRERELEASE_CFLAGS) $(EXTRA_CFLAGS) MANDATORY_LIBS = $(shell pkg-config --libs zlib || echo -lz) $(EXTRA_LIBS) ifndef NO_SRIPDLIB MANDATORY_CFLAGS += -std=c++11 -pedantic endif -MANDATORY_LIBS += -L. -L$(USR)/$(LIB) -Wl,-rpath,. +MANDATORY_LIBS += -L. -L$(PREFIX)/$(LIB) -Wl,-rpath,. ifdef IS_GCC MANDATORY_CFLAGS += -Wall -Wextra -Wfatal-errors -Werror=unknown-pragmas -Werror=unused-label GCC_VER_GTEQ5 = $(shell expr `$(CXX) -dumpversion | cut -f1 -d.` \>= 5) @@ -264,7 +264,7 @@ endif # Enable faster X11 display, using XShm extension. # (ftp://www.x.org/pub/X11R7.7/doc/man/man3/XShm.3.xhtml) XSHM_CFLAGS = -Dcimg_use_xshm $(shell pkg-config --cflags xcb-shm) -XSHM_LIBS = $(shell pkg-config --libs xcb-shm || echo -L$(USR)/X11R6/lib) -lXext +XSHM_LIBS = $(shell pkg-config --libs xcb-shm || echo -L$(PREFIX)/X11R6/lib) -lXext # Enable image display, using GDI32 (Windows). GDI32_CFLAGS = -Dcimg_display=2 @@ -317,12 +317,12 @@ OPENCV_LIBS = $(shell pkg-config opencv --libs || echo -lopencv_core -lopencv_hi # Enable support of most classical image file formats, using the GraphicsMagick++ library. # (http://www.graphicsmagick.org/Magick++/) -MAGICK_CFLAGS = -Dcimg_use_magick $(shell pkg-config --cflags GraphicsMagick++ || echo -I$(USR)/$(INCLUDE)/GraphicsMagick) +MAGICK_CFLAGS = -Dcimg_use_magick $(shell pkg-config --cflags GraphicsMagick++ || echo -I$(PREFIX)/$(INCLUDE)/GraphicsMagick) MAGICK_LIBS = $(shell pkg-config --libs GraphicsMagick++ || echo -lGraphicsMagick++) # Enable native support of EXR image files, using the OpenEXR library. # (http://www.openexr.com/) -OPENEXR_CFLAGS = -Dcimg_use_openexr $(shell pkg-config --cflags OpenEXR || echo -I$(USR)/$(INCLUDE)/OpenEXR) +OPENEXR_CFLAGS = -Dcimg_use_openexr $(shell pkg-config --cflags OpenEXR || echo -I$(PREFIX)/$(INCLUDE)/OpenEXR) OPENEXR_LIBS = $(shell pkg-config --libs OpenEXR || echo -lIlmImf -lHalf) # Enable Fast Fourier Transforms, using the FFTW3 library. @@ -439,7 +439,7 @@ cli_shared: # CLI (static). #-------------- -GMIC_STATIC_CLI_PATH = $(USR)/$(LIB)/x86_64-linux-gnu +GMIC_STATIC_CLI_PATH = $(PREFIX)/$(LIB)/x86_64-linux-gnu GMIC_STATIC_CLI_EXTRA = GMIC_STATIC_CLI_CFLAGS = -Dcimg_display=0 $(MANDATORY_CFLAGS) $(OPENMP_CFLAGS) $(ABORT_CFLAGS) $(PARALLEL_CFLAGS) $(ZLIB_CFLAGS) $(PNG_CFLAGS) $(JPEG_CFLAGS) $(FFTW_CFLAGS) GMIC_STATIC_CLI_LIBS = ./libgmic.o $(PARALLEL_LIBS) \ @@ -818,35 +818,35 @@ man: # Install / uninstall / clean. #----------------------------- install: - mkdir -p $(DESTDIR)$(USR)/$(INCLUDE) - mkdir -p $(DESTDIR)$(USR)/$(BIN) + mkdir -p $(DESTDIR)$(PREFIX)/$(INCLUDE) + mkdir -p $(DESTDIR)$(PREFIX)/$(BIN) mkdir -p $(DESTDIR)$(PLUGINDIR) - mkdir -p $(DESTDIR)$(USR)/share - mkdir -p $(DESTDIR)$(USR)/$(LIB) - @if [ -f gmic ]; then cp -f gmic $(DESTDIR)$(USR)/$(BIN); fi - @if [ -f gmic_libc.h ]; then cp -f gmic_libc.h $(DESTDIR)$(USR)/$(INCLUDE)/; fi + mkdir -p $(DESTDIR)$(PREFIX)/share + mkdir -p $(DESTDIR)$(PREFIX)/$(LIB) + @if [ -f gmic ]; then cp -f gmic $(DESTDIR)$(PREFIX)/$(BIN); fi + @if [ -f gmic_libc.h ]; then cp -f gmic_libc.h $(DESTDIR)$(PREFIX)/$(INCLUDE)/; fi @if [ -f ../resources/gmic_cluts.gmz ]; then cp -f ../resources/gmic_cluts.gmz $(DESTDIR)$(PLUGINDIR); fi @if [ -f ../resources/gmic_denoise_cnn.gmz ]; then cp -f ../resources/gmic_denoise_cnn.gmz $(DESTDIR)$(PLUGINDIR); fi - @if [ -f ../zart/zart ]; then cp -f ../zart/zart $(DESTDIR)$(USR)/$(BIN); fi - @if [ -f ../gmic-qt/gmic_qt ]; then cp -f ../gmic-qt/gmic_qt $(DESTDIR)$(USR)/$(BIN); fi + @if [ -f ../zart/zart ]; then cp -f ../zart/zart $(DESTDIR)$(PREFIX)/$(BIN); fi + @if [ -f ../gmic-qt/gmic_qt ]; then cp -f ../gmic-qt/gmic_qt $(DESTDIR)$(PREFIX)/$(BIN); fi @if [ -f ../gmic-qt/gmic_gimp_qt ]; then cp -f ../gmic-qt/gmic_gimp_qt $(DESTDIR)$(PLUGINDIR); fi @if [ -f libgmic.so ]; then \ - cp -f gmic.h $(DESTDIR)$(USR)/$(INCLUDE); \ - cp -f libgmic.so $(DESTDIR)$(USR)/$(LIB)/libgmic.so.$(VERSION); \ - ln -fs libgmic.so.$(VERSION) $(DESTDIR)$(USR)/$(LIB)/libgmic.so.$(VERSION1); \ - ln -fs libgmic.so.$(VERSION1) $(DESTDIR)$(USR)/$(LIB)/libgmic.so; \ + cp -f gmic.h $(DESTDIR)$(PREFIX)/$(INCLUDE); \ + cp -f libgmic.so $(DESTDIR)$(PREFIX)/$(LIB)/libgmic.so.$(VERSION); \ + ln -fs libgmic.so.$(VERSION) $(DESTDIR)$(PREFIX)/$(LIB)/libgmic.so.$(VERSION1); \ + ln -fs libgmic.so.$(VERSION1) $(DESTDIR)$(PREFIX)/$(LIB)/libgmic.so; \ fi @if [ -f libcgmic.so ]; then \ - cp -f gmic_libc.h $(DESTDIR)$(USR)/$(INCLUDE); \ - cp -f libcgmic.so $(DESTDIR)$(USR)/$(LIB)/libcgmic.so.$(VERSION); \ - ln -fs libcgmic.so.$(VERSION) $(DESTDIR)$(USR)/$(LIB)/libcgmic.so.$(VERSION1); \ - ln -fs libcgmic.so.$(VERSION1) $(DESTDIR)$(USR)/$(LIB)/libcgmic.so; \ + cp -f gmic_libc.h $(DESTDIR)$(PREFIX)/$(INCLUDE); \ + cp -f libcgmic.so $(DESTDIR)$(PREFIX)/$(LIB)/libcgmic.so.$(VERSION); \ + ln -fs libcgmic.so.$(VERSION) $(DESTDIR)$(PREFIX)/$(LIB)/libcgmic.so.$(VERSION1); \ + ln -fs libcgmic.so.$(VERSION1) $(DESTDIR)$(PREFIX)/$(LIB)/libcgmic.so; \ fi @if [ -f ../man/gmic.1.gz ]; then \ - mkdir -p $(DESTDIR)$(USR)/share/man/man1; \ - mkdir -p $(DESTDIR)$(USR)/share/man/fr/man1; \ - cp -f ../man/gmic.1.gz $(DESTDIR)$(USR)/share/man/man1/gmic.1.gz; \ - cp -f ../man/gmic.1.gz $(DESTDIR)$(USR)/share/man/fr/man1/gmic.1.gz; \ + mkdir -p $(DESTDIR)$(PREFIX)/share/man/man1; \ + mkdir -p $(DESTDIR)$(PREFIX)/share/man/fr/man1; \ + cp -f ../man/gmic.1.gz $(DESTDIR)$(PREFIX)/share/man/man1/gmic.1.gz; \ + cp -f ../man/gmic.1.gz $(DESTDIR)$(PREFIX)/share/man/fr/man1/gmic.1.gz; \ fi @if [ -f ../resources/gmic_bashcompletion.sh ]; then \ if [ -d /usr/share/bash-completion/completions ]; then \ @@ -859,43 +859,43 @@ install: fi; \ fi @if [ -f ../zart/zart ]; then \ - mkdir -p $(DESTDIR)$(USR)/share/applications; \ - mkdir -p $(DESTDIR)$(USR)/share/icons/hicolor/48x48/apps; \ - mkdir -p $(DESTDIR)$(USR)/share/icons/hicolor/scalable/apps; \ - cp -f ../zart/zart.desktop $(DESTDIR)$(USR)/share/applications; \ - cp -f ../zart/icons/48-zart.png $(DESTDIR)$(USR)/share/icons/hicolor/48x48/apps/zart.png; \ - cp -f ../zart/icons/zart.svg $(DESTDIR)$(USR)/share/icons/hicolor/scalable/apps; \ + mkdir -p $(DESTDIR)$(PREFIX)/share/applications; \ + mkdir -p $(DESTDIR)$(PREFIX)/share/icons/hicolor/48x48/apps; \ + mkdir -p $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps; \ + cp -f ../zart/zart.desktop $(DESTDIR)$(PREFIX)/share/applications; \ + cp -f ../zart/icons/48-zart.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/48x48/apps/zart.png; \ + cp -f ../zart/icons/zart.svg $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps; \ fi @if [ -f ../gmic-qt/gmic_qt ]; then \ - mkdir -p $(DESTDIR)$(USR)/share/applications; \ - mkdir -p $(DESTDIR)$(USR)/share/icons/hicolor/48x48/apps; \ - mkdir -p $(DESTDIR)$(USR)/share/icons/hicolor/scalable/apps; \ - cp -f ../gmic-qt/gmic_qt.desktop $(DESTDIR)$(USR)/share/applications; \ - cp -f ../gmic-qt/icons/application/48-gmic_qt.png $(DESTDIR)$(USR)/share/icons/hicolor/48x48/apps/gmic_qt.png; \ - cp -f ../gmic-qt/icons/application/gmic_qt.svg $(DESTDIR)$(USR)/share/icons/hicolor/scalable/apps; \ + mkdir -p $(DESTDIR)$(PREFIX)/share/applications; \ + mkdir -p $(DESTDIR)$(PREFIX)/share/icons/hicolor/48x48/apps; \ + mkdir -p $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps; \ + cp -f ../gmic-qt/gmic_qt.desktop $(DESTDIR)$(PREFIX)/share/applications; \ + cp -f ../gmic-qt/icons/application/48-gmic_qt.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/48x48/apps/gmic_qt.png; \ + cp -f ../gmic-qt/icons/application/gmic_qt.svg $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps; \ fi uninstall: rm -f $(DESTDIR)$(PLUGINDIR)/gmic_gimp_qt - rm -f $(DESTDIR)$(USR)/$(BIN)/gmic - rm -f $(DESTDIR)$(USR)/$(BIN)/zart - rm -f $(DESTDIR)$(USR)/$(BIN)/gmic_qt - rm -f $(DESTDIR)$(USR)/$(INCLUDE)/gmic.h - rm -f $(DESTDIR)$(USR)/$(LIB)/libgmic.so.$(VERSION) - rm -f $(DESTDIR)$(USR)/$(LIB)/libgmic.so.$(VERSION1) - rm -f $(DESTDIR)$(USR)/$(LIB)/libgmic.so - rm -f $(DESTDIR)$(USR)/$(LIB)/libcgmic.so.$(VERSION) - rm -f $(DESTDIR)$(USR)/$(LIB)/libcgmic.so.$(VERSION1) - rm -f $(DESTDIR)$(USR)/$(LIB)/libcgmic.so - rm -rf $(DESTDIR)$(USR)/share/doc/gmic/ - rm -f $(DESTDIR)$(USR)/share/man/man1/gmic.1.gz - rm -f $(DESTDIR)$(USR)/share/man/fr/man1/gmic.1.gz - rm -f $(DESTDIR)$(USR)/share/applications/zart.desktop - rm -f $(DESTDIR)$(USR)/share/icons/hicolor/48x48/apps/zart.png - rm -f $(DESTDIR)$(USR)/share/icons/hicolor/scalable/apps/zart.svg - rm -f $(DESTDIR)$(USR)/share/applications/gmic_qt.desktop - rm -f $(DESTDIR)$(USR)/share/icons/hicolor/48x48/apps/gmic_qt.png - rm -f $(DESTDIR)$(USR)/share/icons/hicolor/scalable/apps/gmic_qt.svg + rm -f $(DESTDIR)$(PREFIX)/$(BIN)/gmic + rm -f $(DESTDIR)$(PREFIX)/$(BIN)/zart + rm -f $(DESTDIR)$(PREFIX)/$(BIN)/gmic_qt + rm -f $(DESTDIR)$(PREFIX)/$(INCLUDE)/gmic.h + rm -f $(DESTDIR)$(PREFIX)/$(LIB)/libgmic.so.$(VERSION) + rm -f $(DESTDIR)$(PREFIX)/$(LIB)/libgmic.so.$(VERSION1) + rm -f $(DESTDIR)$(PREFIX)/$(LIB)/libgmic.so + rm -f $(DESTDIR)$(PREFIX)/$(LIB)/libcgmic.so.$(VERSION) + rm -f $(DESTDIR)$(PREFIX)/$(LIB)/libcgmic.so.$(VERSION1) + rm -f $(DESTDIR)$(PREFIX)/$(LIB)/libcgmic.so + rm -rf $(DESTDIR)$(PREFIX)/share/doc/gmic/ + rm -f $(DESTDIR)$(PREFIX)/share/man/man1/gmic.1.gz + rm -f $(DESTDIR)$(PREFIX)/share/man/fr/man1/gmic.1.gz + rm -f $(DESTDIR)$(PREFIX)/share/applications/zart.desktop + rm -f $(DESTDIR)$(PREFIX)/share/icons/hicolor/48x48/apps/zart.png + rm -f $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/zart.svg + rm -f $(DESTDIR)$(PREFIX)/share/applications/gmic_qt.desktop + rm -f $(DESTDIR)$(PREFIX)/share/icons/hicolor/48x48/apps/gmic_qt.png + rm -f $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/gmic_qt.svg distclean: clean From b859429e113c97dccc79f0102e2d7d37715da747 Mon Sep 17 00:00:00 2001 From: Kalev Lember Date: Sat, 3 Sep 2022 20:20:30 +0200 Subject: [PATCH 2/3] Makefile: Make a few variables configurable This makes it easier for downstreams to choose where they want to put the files, such as libs going into /usr/lib64 in Fedora, or use the /app prefix for flatpaks. --- src/Makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Makefile b/src/Makefile index f62ce47aa..7d8b1d395 100644 --- a/src/Makefile +++ b/src/Makefile @@ -80,10 +80,10 @@ # Try to auto-detect target OS. OS = $(shell uname) -PREFIX = /usr -LIB = lib -BIN = bin -INCLUDE = include +PREFIX ?= /usr +LIB ?= lib +BIN ?= bin +INCLUDE ?= include PIC = -fPIC EXE = WGET = wget --no-check-certificate --quiet -O From 0cd05ab2379c3cefcffc4f94f85cabf122da1be4 Mon Sep 17 00:00:00 2001 From: Kalev Lember Date: Sat, 3 Sep 2022 20:36:28 +0200 Subject: [PATCH 3/3] Makefile: Avoid hardcoding bash-completion paths Instead, use pkg-config to query the bash-completion path, which both makes the makefile simpler and also helps get the path right in more cases. --- src/Makefile | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/Makefile b/src/Makefile index 7d8b1d395..126d1e143 100644 --- a/src/Makefile +++ b/src/Makefile @@ -88,6 +88,7 @@ PIC = -fPIC EXE = WGET = wget --no-check-certificate --quiet -O PLUGINDIR = $(shell gimptool-2.0 --gimpplugindir)/plug-ins +BASH_COMPLETIONSDIR = $(shell pkg-config --variable completionsdir bash-completion || echo $(PREFIX)/share/bash-completion/completions) VERSION = $(shell grep 'gmic_version\ ' gmic.h | tail -c4 | head -c3) VERSION1 = $(shell grep 'gmic_version\ ' gmic.h | tail -c4 | head -c1) VERSION2 = $(shell grep 'gmic_version\ ' gmic.h | tail -c3 | head -c1) @@ -849,14 +850,8 @@ install: cp -f ../man/gmic.1.gz $(DESTDIR)$(PREFIX)/share/man/fr/man1/gmic.1.gz; \ fi @if [ -f ../resources/gmic_bashcompletion.sh ]; then \ - if [ -d /usr/share/bash-completion/completions ]; then \ - mkdir -p $(DESTDIR)/usr/share/bash-completion/completions; \ - cp -f ../resources/gmic_bashcompletion.sh $(DESTDIR)/usr/share/bash-completion/completions/gmic; \ - fi; \ - if [ -d /opt/local/etc/bash_completion.d/ ]; then \ - mkdir -p $(DESTDIR)/opt/local/etc/bash_completion.d; \ - cp -f ../resources/gmic_bashcompletion.sh $(DESTDIR)/opt/local/etc/bash_completion.d/gmic; \ - fi; \ + mkdir -p $(DESTDIR)$(BASH_COMPLETIONSDIR); \ + cp -f ../resources/gmic_bashcompletion.sh $(DESTDIR)$(BASH_COMPLETIONSDIR)/gmic; \ fi @if [ -f ../zart/zart ]; then \ mkdir -p $(DESTDIR)$(PREFIX)/share/applications; \