From 49e3251e7ba029d1850da0dcd20e8482c69b7f44 Mon Sep 17 00:00:00 2001 From: Benoit Pierre Date: Sat, 11 May 2024 20:12:43 +0200 Subject: [PATCH] make: support changing the build / install directory location --- Makefile | 36 +++++++++++++++++++----------------- make/appimage.mk | 14 +++++++------- make/kindle.mk | 14 +++++++------- make/ubuntu-touch.mk | 14 +++++++------- 4 files changed, 40 insertions(+), 38 deletions(-) diff --git a/Makefile b/Makefile index c2cba75e4..ea1f8d9d8 100644 --- a/Makefile +++ b/Makefile @@ -41,7 +41,7 @@ else DIST:=emulator endif -INSTALL_DIR=koreader-$(DIST)-$(MACHINE) +INSTALL_DIR ?= koreader-$(DIST)-$(MACHINE) # platform directories PLATFORM_DIR=platform @@ -52,6 +52,13 @@ WIN32_DIR=$(PLATFORM_DIR)/win32 INSTALL_FILES=reader.lua setupkoenv.lua frontend resources defaults.lua datastorage.lua \ l10n tools README.md COPYING +ifeq ($(abspath $(OUTPUT_DIR)),$(OUTPUT_DIR)) + ABSOLUTE_OUTPUT_DIR = $(OUTPUT_DIR) +else + ABSOLUTE_OUTPUT_DIR = $(KOR_BASE)/$(OUTPUT_DIR) +endif +OUTPUT_DIR_ARTIFACTS = $(ABSOLUTE_OUTPUT_DIR)/!(cache|history) + all: base install -d $(INSTALL_DIR)/koreader rm -f $(INSTALL_DIR)/koreader/git-rev; echo "$(VERSION)" > $(INSTALL_DIR)/koreader/git-rev @@ -59,30 +66,26 @@ ifdef ANDROID rm -f android-fdroid-version; echo -e "$(ANDROID_NAME)\n$(ANDROID_VERSION)" > koreader-android-fdroid-latest endif ifeq ($(IS_RELEASE),1) - $(RCP) -fL $(KOR_BASE)/$(OUTPUT_DIR)/. $(INSTALL_DIR)/koreader/. + bash -O extglob -c '$(RCP) -fL $(OUTPUT_DIR_ARTIFACTS) $(INSTALL_DIR)/koreader/' else cp -f $(KOR_BASE)/ev_replay.py $(INSTALL_DIR)/koreader/ @echo "[*] create symlink instead of copying files in development mode" - cd $(INSTALL_DIR)/koreader && \ - bash -O extglob -c "ln -sf ../../$(KOR_BASE)/$(OUTPUT_DIR)/!(cache|history) ." + bash -O extglob -c '$(SYMLINK) $(OUTPUT_DIR_ARTIFACTS) $(INSTALL_DIR)/koreader/' + ifneq (,$(EMULATE_READER)) @echo "[*] install front spec only for the emulator" - cd $(INSTALL_DIR)/koreader/spec && test -e front || \ - ln -sf ../../../../spec ./front - cd $(INSTALL_DIR)/koreader/spec/front/unit && test -e data || \ - ln -sf ../../test ./data + $(SYMLINK) $(abspath spec) $(INSTALL_DIR)/koreader/spec/front + $(SYMLINK) $(abspath test) $(INSTALL_DIR)/koreader/spec/front/unit/data + endif endif - for f in $(INSTALL_FILES); do \ - ln -sf ../../$$f $(INSTALL_DIR)/koreader/; \ - done + $(SYMLINK) $(abspath $(INSTALL_FILES)) $(INSTALL_DIR)/koreader/ ifdef ANDROID - cd $(INSTALL_DIR)/koreader && \ - ln -sf ../../$(ANDROID_DIR)/*.lua . + $(SYMLINK) $(abspath $(ANDROID_DIR)/*.lua) $(INSTALL_DIR)/koreader/ endif @echo "[*] Install update once marker" @echo "# This file indicates that update once patches have not been applied yet." > $(INSTALL_DIR)/koreader/update_once.marker ifdef WIN32 @echo "[*] Install runtime libraries for win32..." - cd $(INSTALL_DIR)/koreader && cp ../../$(WIN32_DIR)/*.dll . + $(SYMLINK) $(abspath $(WIN32_DIR)/*.dll) $(INSTALL_DIR)/koreader/ endif ifdef SHIP_SHARED_STL @echo "[*] Install C++ runtime..." @@ -108,11 +111,10 @@ base: $(MAKE) -C $(KOR_BASE) $(INSTALL_DIR)/koreader/.busted: .busted - ln -sf ../../.busted $(INSTALL_DIR)/koreader + $(SYMLINK) $(abspath .busted) $@ $(INSTALL_DIR)/koreader/.luacov: - test -e $(INSTALL_DIR)/koreader/.luacov || \ - ln -sf ../../.luacov $(INSTALL_DIR)/koreader + $(SYMLINK) $(abspath .luacov) $@ testfront: $(INSTALL_DIR)/koreader/.busted # sdr files may have unexpected impact on unit testing diff --git a/make/appimage.mk b/make/appimage.mk index 1deb9ac7a..7fccbf6ac 100644 --- a/make/appimage.mk +++ b/make/appimage.mk @@ -6,17 +6,17 @@ APPIMAGETOOL_URL = https://github.com/AppImage/AppImageKit/releases/download/13/ update: all # remove old package if any rm -f koreader-appimage-$(MACHINE)-$(VERSION).appimage - ln -sf ../../$(APPIMAGE_DIR)/AppRun $(INSTALL_DIR)/koreader - ln -sf ../../$(APPIMAGE_DIR)/koreader.appdata.xml $(INSTALL_DIR)/koreader - ln -sf ../../$(APPIMAGE_DIR)/koreader.desktop $(INSTALL_DIR)/koreader - ln -sf ../../resources/koreader.png $(INSTALL_DIR)/koreader + $(SYMLINK) $(abspath $(APPIMAGE_DIR)/AppRun) $(INSTALL_DIR)/koreader/ + $(SYMLINK) $(abspath $(APPIMAGE_DIR)/koreader.appdata.xml) $(INSTALL_DIR)/koreader/ + $(SYMLINK) $(abspath $(APPIMAGE_DIR)/koreader.desktop) $(INSTALL_DIR)/koreader/ + $(SYMLINK) $(abspath resources/koreader.png) $(INSTALL_DIR)/koreader/ # TODO at best this is DebUbuntu specific - ln -sf /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0 $(INSTALL_DIR)/koreader/libs/libSDL2.so + $(SYMLINK) /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0 $(INSTALL_DIR)/koreader/libs/libSDL2.so # required for our stock Ubuntu SDL even though we don't use sound # the readlink is a half-hearted attempt at being generic; the echo libsndio.so.7.0 is specific to the nightly builds - ln -sf /usr/lib/x86_64-linux-gnu/$(shell readlink /usr/lib/x86_64-linux-gnu/libsndio.so || echo libsndio.so.7.0) $(INSTALL_DIR)/koreader/libs/ + $(SYMLINK) /usr/lib/x86_64-linux-gnu/$(shell readlink /usr/lib/x86_64-linux-gnu/libsndio.so || echo libsndio.so.7.0) $(INSTALL_DIR)/koreader/libs/ # also copy libbsd.so.0, cf. https://github.com/koreader/koreader/issues/4627 - ln -sf /lib/x86_64-linux-gnu/libbsd.so.0 $(INSTALL_DIR)/koreader/libs/ + $(SYMLINK) /lib/x86_64-linux-gnu/libbsd.so.0 $(INSTALL_DIR)/koreader/libs/ ifeq ("$(wildcard $(APPIMAGETOOL))","") # download appimagetool wget "$(APPIMAGETOOL_URL)" diff --git a/make/kindle.mk b/make/kindle.mk index 681a0a2bf..596642581 100644 --- a/make/kindle.mk +++ b/make/kindle.mk @@ -14,13 +14,13 @@ update: all # remove old package if any rm -f $(KINDLE_PACKAGE) # Kindle launching scripts - ln -sf ../$(KINDLE_DIR)/extensions $(INSTALL_DIR)/ - ln -sf ../$(KINDLE_DIR)/launchpad $(INSTALL_DIR)/ - ln -sf ../../$(KINDLE_DIR)/koreader.sh $(INSTALL_DIR)/koreader - ln -sf ../../$(KINDLE_DIR)/libkohelper.sh $(INSTALL_DIR)/koreader - ln -sf ../../../../../$(KINDLE_DIR)/libkohelper.sh $(INSTALL_DIR)/extensions/koreader/bin - ln -sf ../../$(COMMON_DIR)/spinning_zsync $(INSTALL_DIR)/koreader - ln -sf ../../$(KINDLE_DIR)/wmctrl $(INSTALL_DIR)/koreader + $(SYMLINK) $(abspath $(KINDLE_DIR)/extensions) $(INSTALL_DIR)/ + $(SYMLINK) $(abspath $(KINDLE_DIR)/launchpad) $(INSTALL_DIR)/ + $(SYMLINK) $(abspath $(KINDLE_DIR)/koreader.sh) $(INSTALL_DIR)/koreader/ + $(SYMLINK) $(abspath $(KINDLE_DIR)/libkohelper.sh) $(INSTALL_DIR)/koreader/ + $(SYMLINK) $(abspath $(KINDLE_DIR)/libkohelper.sh) $(INSTALL_DIR)/extensions/koreader/bin/ + $(SYMLINK) $(abspath $(COMMON_DIR)/spinning_zsync) $(INSTALL_DIR)/koreader/ + $(SYMLINK) $(abspath $(KINDLE_DIR)/wmctrl) $(INSTALL_DIR)/koreader/ # create new package cd $(INSTALL_DIR) && pwd && \ zip -9 -r \ diff --git a/make/ubuntu-touch.mk b/make/ubuntu-touch.mk index f4bdff07b..7e797bbc8 100644 --- a/make/ubuntu-touch.mk +++ b/make/ubuntu-touch.mk @@ -6,13 +6,13 @@ update: all file $(INSTALL_DIR)/koreader/luajit | grep ARM || exit 1 # remove old package if any rm -f koreader-ubuntu-touch-$(MACHINE)-$(VERSION).click - ln -sf ../../$(UBUNTUTOUCH_DIR)/koreader.sh $(INSTALL_DIR)/koreader - ln -sf ../../$(UBUNTUTOUCH_DIR)/manifest.json $(INSTALL_DIR)/koreader - ln -sf ../../$(UBUNTUTOUCH_DIR)/koreader.apparmor $(INSTALL_DIR)/koreader - ln -sf ../../$(UBUNTUTOUCH_DIR)/koreader.apparmor.openstore $(INSTALL_DIR)/koreader - ln -sf ../../$(UBUNTUTOUCH_DIR)/koreader.desktop $(INSTALL_DIR)/koreader - ln -sf ../../$(UBUNTUTOUCH_DIR)/koreader.png $(INSTALL_DIR)/koreader - ln -sf ../../../$(UBUNTUTOUCH_DIR)/libSDL2.so $(INSTALL_DIR)/koreader/libs + $(SYMLINK) $(abspath $(UBUNTUTOUCH_DIR)/koreader.sh) $(INSTALL_DIR)/koreader/ + $(SYMLINK) $(abspath $(UBUNTUTOUCH_DIR)/manifest.json) $(INSTALL_DIR)/koreader/ + $(SYMLINK) $(abspath $(UBUNTUTOUCH_DIR)/koreader.apparmor) $(INSTALL_DIR)/koreader/ + $(SYMLINK) $(abspath $(UBUNTUTOUCH_DIR)/koreader.apparmor.openstore) $(INSTALL_DIR)/koreader/ + $(SYMLINK) $(abspath $(UBUNTUTOUCH_DIR)/koreader.desktop) $(INSTALL_DIR)/koreader/ + $(SYMLINK) $(abspath $(UBUNTUTOUCH_DIR)/koreader.png) $(INSTALL_DIR)/koreader/ + $(SYMLINK) $(abspath $(UBUNTUTOUCH_DIR)/libSDL2.so) $(INSTALL_DIR)/koreader/libs/ # create new package cd $(INSTALL_DIR) && pwd && \ zip -9 -r \