mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
Instead of trying to detect if running under Docker, use a simpler wildcard check to detect if FUSE support is available. This as the advantage of supporting Docker, rootless Docker, and Podman.
630 lines
23 KiB
Makefile
630 lines
23 KiB
Makefile
# koreader-base directory
|
|
KOR_BASE?=base
|
|
|
|
# the repository might not have been checked out yet, so make this
|
|
# able to fail:
|
|
-include $(KOR_BASE)/Makefile.defs
|
|
|
|
# We want VERSION to carry the version of the KOReader main repo, not that of koreader-base
|
|
VERSION:=$(shell git describe HEAD)
|
|
# Only append date if we're not on a whole version, like v2018.11
|
|
ifneq (,$(findstring -,$(VERSION)))
|
|
VERSION:=$(VERSION)_$(shell git describe HEAD | xargs git show -s --format=format:"%cd" --date=short)
|
|
endif
|
|
|
|
# releases do not contain tests and misc data
|
|
IS_RELEASE := $(if $(or $(EMULATE_READER),$(WIN32)),,1)
|
|
IS_RELEASE := $(if $(or $(IS_RELEASE),$(APPIMAGE),$(DEBIAN),$(MACOS)),1,)
|
|
|
|
ifeq ($(ANDROID_ARCH), arm64)
|
|
ANDROID_ABI?=arm64-v8a
|
|
else ifeq ($(ANDROID_ARCH), x86)
|
|
ANDROID_ABI?=$(ANDROID_ARCH)
|
|
else ifeq ($(ANDROID_ARCH), x86_64)
|
|
ANDROID_ABI?=$(ANDROID_ARCH)
|
|
else
|
|
ANDROID_ARCH?=arm
|
|
ANDROID_ABI?=armeabi-v7a
|
|
endif
|
|
|
|
# Use the git commit count as the (integer) Android version code
|
|
ANDROID_VERSION?=$(shell git rev-list --count HEAD)
|
|
ANDROID_NAME?=$(VERSION)
|
|
|
|
MACHINE=$(shell $(CC) -dumpmachine 2>/dev/null)
|
|
ifdef KODEBUG
|
|
MACHINE:=$(MACHINE)-debug
|
|
KODEDUG_SUFFIX:=-debug
|
|
endif
|
|
|
|
ifdef TARGET
|
|
DIST:=$(TARGET)
|
|
else
|
|
DIST:=emulator
|
|
endif
|
|
|
|
INSTALL_DIR=koreader-$(DIST)-$(MACHINE)
|
|
|
|
# platform directories
|
|
PLATFORM_DIR=platform
|
|
COMMON_DIR=$(PLATFORM_DIR)/common
|
|
ANDROID_DIR=$(PLATFORM_DIR)/android
|
|
ANDROID_LAUNCHER_DIR:=$(ANDROID_DIR)/luajit-launcher
|
|
ANDROID_ASSETS:=$(ANDROID_LAUNCHER_DIR)/assets/module
|
|
ANDROID_LIBS_ROOT:=$(ANDROID_LAUNCHER_DIR)/libs
|
|
ANDROID_LIBS_ABI:=$(ANDROID_LIBS_ROOT)/$(ANDROID_ABI)
|
|
APPIMAGE_DIR=$(PLATFORM_DIR)/appimage
|
|
CERVANTES_DIR=$(PLATFORM_DIR)/cervantes
|
|
DEBIAN_DIR=$(PLATFORM_DIR)/debian
|
|
KINDLE_DIR=$(PLATFORM_DIR)/kindle
|
|
KOBO_DIR=$(PLATFORM_DIR)/kobo
|
|
MACOS_DIR=$(PLATFORM_DIR)/mac
|
|
POCKETBOOK_DIR=$(PLATFORM_DIR)/pocketbook
|
|
REMARKABLE_DIR=$(PLATFORM_DIR)/remarkable
|
|
SONY_PRSTUX_DIR=$(PLATFORM_DIR)/sony-prstux
|
|
UBUNTUTOUCH_DIR=$(PLATFORM_DIR)/ubuntu-touch
|
|
UBUNTUTOUCH_SDL_DIR:=$(UBUNTUTOUCH_DIR)/ubuntu-touch-sdl
|
|
WIN32_DIR=$(PLATFORM_DIR)/win32
|
|
|
|
# appimage setup
|
|
APPIMAGETOOL=appimagetool-x86_64.AppImage
|
|
APPIMAGETOOL_URL=https://github.com/AppImage/AppImageKit/releases/download/12/appimagetool-x86_64.AppImage
|
|
|
|
# Is fuse support available?
|
|
USE_FUSE ?= $(wildcard /dev/fuse)
|
|
|
|
# files to link from main directory
|
|
INSTALL_FILES=reader.lua setupkoenv.lua frontend resources defaults.lua datastorage.lua \
|
|
l10n tools README.md COPYING
|
|
|
|
all: $(if $(ANDROID),,$(KOR_BASE)/$(OUTPUT_DIR)/luajit)
|
|
$(MAKE) -C $(KOR_BASE)
|
|
install -d $(INSTALL_DIR)/koreader
|
|
rm -f $(INSTALL_DIR)/koreader/git-rev; echo "$(VERSION)" > $(INSTALL_DIR)/koreader/git-rev
|
|
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/.
|
|
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) ."
|
|
@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
|
|
endif
|
|
for f in $(INSTALL_FILES); do \
|
|
ln -sf ../../$$f $(INSTALL_DIR)/koreader/; \
|
|
done
|
|
ifdef ANDROID
|
|
cd $(INSTALL_DIR)/koreader && \
|
|
ln -sf ../../$(ANDROID_DIR)/*.lua .
|
|
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 .
|
|
endif
|
|
ifdef SHIP_SHARED_STL
|
|
@echo "[*] Install C++ runtime..."
|
|
cp -fL $(SHARED_STL_LIB) $(INSTALL_DIR)/koreader/libs/
|
|
chmod 755 $(INSTALL_DIR)/koreader/libs/$(notdir $(SHARED_STL_LIB))
|
|
$(STRIP) --strip-unneeded $(INSTALL_DIR)/koreader/libs/$(notdir $(SHARED_STL_LIB))
|
|
endif
|
|
@echo "[*] Install plugins"
|
|
@# TODO: link istead of cp?
|
|
$(RCP) plugins/. $(INSTALL_DIR)/koreader/plugins/.
|
|
@# purge deleted plugins
|
|
for d in $$(ls $(INSTALL_DIR)/koreader/plugins); do \
|
|
test -d plugins/$$d || rm -rf $(INSTALL_DIR)/koreader/plugins/$$d ; done
|
|
@echo "[*] Install resources"
|
|
$(RCP) -pL resources/fonts/. $(INSTALL_DIR)/koreader/fonts/.
|
|
install -d $(INSTALL_DIR)/koreader/{screenshots,data/{dict,tessdata},fonts/host,ota}
|
|
ifeq ($(IS_RELEASE),1)
|
|
@echo "[*] Clean up, remove unused files for releases"
|
|
rm -rf $(INSTALL_DIR)/koreader/data/{cr3.ini,cr3skin-format.txt,desktop,devices,manual}
|
|
endif
|
|
|
|
$(KOR_BASE)/$(OUTPUT_DIR)/luajit:
|
|
$(MAKE) -C $(KOR_BASE)
|
|
|
|
$(INSTALL_DIR)/koreader/.busted: .busted
|
|
ln -sf ../../.busted $(INSTALL_DIR)/koreader
|
|
|
|
$(INSTALL_DIR)/koreader/.luacov:
|
|
test -e $(INSTALL_DIR)/koreader/.luacov || \
|
|
ln -sf ../../.luacov $(INSTALL_DIR)/koreader
|
|
|
|
testfront: $(INSTALL_DIR)/koreader/.busted
|
|
# sdr files may have unexpected impact on unit testing
|
|
-rm -rf spec/unit/data/*.sdr
|
|
cd $(INSTALL_DIR)/koreader && $(BUSTED_LUAJIT) $(BUSTED_OVERRIDES) $(BUSTED_SPEC_FILE)
|
|
|
|
test: $(INSTALL_DIR)/koreader/.busted
|
|
$(MAKE) -C $(KOR_BASE) test
|
|
$(MAKE) testfront
|
|
|
|
coverage: $(INSTALL_DIR)/koreader/.luacov
|
|
-rm -rf $(INSTALL_DIR)/koreader/luacov.*.out
|
|
cd $(INSTALL_DIR)/koreader && \
|
|
./luajit $(shell which busted) --output=gtest \
|
|
--sort-files \
|
|
--coverage --exclude-tags=nocov
|
|
# coverage report summary
|
|
cd $(INSTALL_DIR)/koreader && tail -n \
|
|
+$$(($$(grep -nm1 -e "^Summary$$" luacov.report.out|cut -d: -f1)-1)) \
|
|
luacov.report.out
|
|
|
|
fetchthirdparty:
|
|
git submodule init
|
|
git submodule sync
|
|
git submodule update
|
|
$(MAKE) -C $(KOR_BASE) fetchthirdparty
|
|
|
|
VERBOSE ?= @
|
|
Q = $(VERBOSE:1=)
|
|
clean:
|
|
rm -rf $(INSTALL_DIR)
|
|
$(Q:@=@echo 'MAKE -C base clean'; &> /dev/null) \
|
|
$(MAKE) -C $(KOR_BASE) clean
|
|
ifeq ($(TARGET), android)
|
|
$(MAKE) -C $(CURDIR)/platform/android/luajit-launcher clean
|
|
endif
|
|
|
|
dist-clean: clean
|
|
rm -rf $(INSTALL_DIR)
|
|
$(MAKE) -C $(KOR_BASE) dist-clean
|
|
$(MAKE) -C doc clean
|
|
|
|
KINDLE_PACKAGE:=koreader-$(DIST)$(KODEDUG_SUFFIX)-$(VERSION).zip
|
|
KINDLE_PACKAGE_OTA:=koreader-$(DIST)$(KODEDUG_SUFFIX)-$(VERSION).targz
|
|
ZIP_EXCLUDE=-x "*.swp" -x "*.swo" -x "*.orig" -x "*.un~"
|
|
# Don't bundle launchpad on touch devices..
|
|
ifeq ($(TARGET), kindle-legacy)
|
|
KINDLE_LEGACY_LAUNCHER:=launchpad
|
|
endif
|
|
kindleupdate: all
|
|
# ensure that the binaries were built for ARM
|
|
file $(INSTALL_DIR)/koreader/luajit | grep ARM || exit 1
|
|
# 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
|
|
# create new package
|
|
cd $(INSTALL_DIR) && pwd && \
|
|
zip -9 -r \
|
|
../$(KINDLE_PACKAGE) \
|
|
extensions koreader $(KINDLE_LEGACY_LAUNCHER) \
|
|
-x "koreader/resources/fonts/*" "koreader/ota/*" \
|
|
"koreader/resources/icons/src/*" "koreader/spec/*" \
|
|
$(ZIP_EXCLUDE)
|
|
# generate kindleupdate package index file
|
|
zipinfo -1 $(KINDLE_PACKAGE) > \
|
|
$(INSTALL_DIR)/koreader/ota/package.index
|
|
echo "koreader/ota/package.index" >> $(INSTALL_DIR)/koreader/ota/package.index
|
|
# update index file in zip package
|
|
cd $(INSTALL_DIR) && zip -u ../$(KINDLE_PACKAGE) \
|
|
koreader/ota/package.index
|
|
# make gzip kindleupdate for zsync OTA update
|
|
# note that the targz file extension is intended to keep ISP from caching
|
|
# the file, see koreader#1644.
|
|
cd $(INSTALL_DIR) && \
|
|
tar --hard-dereference -I"gzip --rsyncable" -cah --no-recursion -f ../$(KINDLE_PACKAGE_OTA) \
|
|
-T koreader/ota/package.index
|
|
|
|
KOBO_PACKAGE:=koreader-kobo$(KODEDUG_SUFFIX)-$(VERSION).zip
|
|
KOBO_PACKAGE_OTA:=koreader-kobo$(KODEDUG_SUFFIX)-$(VERSION).targz
|
|
koboupdate: all
|
|
# ensure that the binaries were built for ARM
|
|
file $(INSTALL_DIR)/koreader/luajit | grep ARM || exit 1
|
|
# remove old package if any
|
|
rm -f $(KOBO_PACKAGE)
|
|
# Kobo launching scripts
|
|
cp $(KOBO_DIR)/koreader.png $(INSTALL_DIR)/koreader.png
|
|
cp $(KOBO_DIR)/*.sh $(INSTALL_DIR)/koreader
|
|
cp $(COMMON_DIR)/spinning_zsync $(INSTALL_DIR)/koreader
|
|
# create new package
|
|
cd $(INSTALL_DIR) && \
|
|
zip -9 -r \
|
|
../$(KOBO_PACKAGE) \
|
|
koreader -x "koreader/resources/fonts/*" \
|
|
"koreader/resources/icons/src/*" "koreader/spec/*" \
|
|
$(ZIP_EXCLUDE)
|
|
# generate koboupdate package index file
|
|
zipinfo -1 $(KOBO_PACKAGE) > \
|
|
$(INSTALL_DIR)/koreader/ota/package.index
|
|
echo "koreader/ota/package.index" >> $(INSTALL_DIR)/koreader/ota/package.index
|
|
# update index file in zip package
|
|
cd $(INSTALL_DIR) && zip -u ../$(KOBO_PACKAGE) \
|
|
koreader/ota/package.index koreader.png README_kobo.txt
|
|
# make gzip koboupdate for zsync OTA update
|
|
cd $(INSTALL_DIR) && \
|
|
tar --hard-dereference -I"gzip --rsyncable" -cah --no-recursion -f ../$(KOBO_PACKAGE_OTA) \
|
|
-T koreader/ota/package.index
|
|
|
|
PB_PACKAGE:=koreader-pocketbook$(KODEDUG_SUFFIX)-$(VERSION).zip
|
|
PB_PACKAGE_OTA:=koreader-pocketbook$(KODEDUG_SUFFIX)-$(VERSION).targz
|
|
pbupdate: all
|
|
# ensure that the binaries were built for ARM
|
|
file $(INSTALL_DIR)/koreader/luajit | grep ARM || exit 1
|
|
# remove old package if any
|
|
rm -f $(PB_PACKAGE)
|
|
# Pocketbook launching scripts
|
|
mkdir -p $(INSTALL_DIR)/applications
|
|
mkdir -p $(INSTALL_DIR)/system/bin
|
|
cp $(POCKETBOOK_DIR)/koreader.app $(INSTALL_DIR)/applications
|
|
cp $(POCKETBOOK_DIR)/system_koreader.app $(INSTALL_DIR)/system/bin/koreader.app
|
|
cp $(COMMON_DIR)/spinning_zsync $(INSTALL_DIR)/koreader
|
|
cp -rfL $(INSTALL_DIR)/koreader $(INSTALL_DIR)/applications
|
|
find $(INSTALL_DIR)/applications/koreader \
|
|
-type f \( -name "*.gif" -o -name "*.html" -o -name "*.md" -o -name "*.txt" \) \
|
|
-exec rm -vf {} \;
|
|
# create new package
|
|
cd $(INSTALL_DIR) && \
|
|
zip -9 -r \
|
|
../$(PB_PACKAGE) \
|
|
applications -x "applications/koreader/resources/fonts/*" \
|
|
"applications/koreader/resources/icons/src/*" "applications/koreader/spec/*" \
|
|
$(ZIP_EXCLUDE)
|
|
# generate koboupdate package index file
|
|
zipinfo -1 $(PB_PACKAGE) > \
|
|
$(INSTALL_DIR)/applications/koreader/ota/package.index
|
|
echo "applications/koreader/ota/package.index" >> \
|
|
$(INSTALL_DIR)/applications/koreader/ota/package.index
|
|
# hack file path when running tar in parent directory of koreader
|
|
sed -i -e 's/^/..\//' \
|
|
$(INSTALL_DIR)/applications/koreader/ota/package.index
|
|
# update index file in zip package
|
|
cd $(INSTALL_DIR) && zip -ru ../$(PB_PACKAGE) \
|
|
applications/koreader/ota/package.index system
|
|
# make gzip pbupdate for zsync OTA update
|
|
cd $(INSTALL_DIR)/applications && \
|
|
tar --hard-dereference -I"gzip --rsyncable" -cah --no-recursion -f ../../$(PB_PACKAGE_OTA) \
|
|
-T koreader/ota/package.index
|
|
|
|
utupdate: all
|
|
# ensure that the binaries were built for ARM
|
|
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
|
|
|
|
# create new package
|
|
cd $(INSTALL_DIR) && pwd && \
|
|
zip -9 -r \
|
|
../koreader-$(DIST)-$(MACHINE)-$(VERSION).zip \
|
|
koreader -x "koreader/resources/fonts/*" "koreader/ota/*" \
|
|
"koreader/resources/icons/src/*" "koreader/spec/*" \
|
|
$(ZIP_EXCLUDE)
|
|
|
|
# generate ubuntu touch click package
|
|
rm -rf $(INSTALL_DIR)/tmp && mkdir -p $(INSTALL_DIR)/tmp
|
|
cd $(INSTALL_DIR)/tmp && \
|
|
unzip ../../koreader-$(DIST)-$(MACHINE)-$(VERSION).zip && \
|
|
click build koreader && \
|
|
mv *.click ../../koreader-$(DIST)-$(MACHINE)-$(VERSION).click
|
|
|
|
appimageupdate: 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
|
|
# 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
|
|
# 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/
|
|
# 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/
|
|
ifeq ("$(wildcard $(APPIMAGETOOL))","")
|
|
# download appimagetool
|
|
wget "$(APPIMAGETOOL_URL)"
|
|
chmod a+x "$(APPIMAGETOOL)"
|
|
endif
|
|
ifeq ($(USE_FUSE),)
|
|
# remove previously extracted appimagetool, if any
|
|
rm -rf squashfs-root
|
|
./$(APPIMAGETOOL) --appimage-extract
|
|
endif
|
|
cd $(INSTALL_DIR) && pwd && \
|
|
rm -rf tmp && mkdir -p tmp && \
|
|
cp -Lr koreader tmp && \
|
|
rm -rf tmp/koreader/ota && \
|
|
rm -rf tmp/koreader/resources/icons/src && \
|
|
rm -rf tmp/koreader/spec
|
|
|
|
# generate AppImage
|
|
cd $(INSTALL_DIR)/tmp && \
|
|
ARCH=x86_64 ../../$(if $(USE_FUSE),$(APPIMAGETOOL),squashfs-root/AppRun) koreader && \
|
|
mv *.AppImage ../../koreader-$(DIST)-$(MACHINE)-$(VERSION).AppImage
|
|
|
|
androidupdate: all
|
|
# Note: do not remove the module directory so there's no need
|
|
# for `mk7z.sh` to always recreate `assets.7z` from scratch.
|
|
rm -rfv $(ANDROID_LIBS_ROOT)
|
|
mkdir -p $(ANDROID_ASSETS) $(ANDROID_LIBS_ABI)
|
|
|
|
# APK version
|
|
echo $(VERSION) > $(ANDROID_ASSETS)/version.txt
|
|
|
|
# shared libraries are stored as raw assets
|
|
cp -pR $(INSTALL_DIR)/koreader/libs $(ANDROID_LAUNCHER_DIR)/assets
|
|
# in runtime luajit-launcher's libluajit.so will be loaded
|
|
rm -vf $(ANDROID_LAUNCHER_DIR)/assets/libs/libluajit.so
|
|
|
|
# binaries are stored as shared libraries to prevent W^X exception on Android 10+
|
|
# https://developer.android.com/about/versions/10/behavior-changes-10#execute-permission
|
|
cp -pR $(INSTALL_DIR)/koreader/sdcv $(ANDROID_LIBS_ABI)/libsdcv.so
|
|
echo "sdcv libsdcv.so" > $(ANDROID_ASSETS)/map.txt
|
|
|
|
# assets are compressed manually and stored inside the APK.
|
|
cd $(INSTALL_DIR)/koreader && \
|
|
./tools/mk7z.sh \
|
|
../../$(ANDROID_ASSETS)/koreader.7z \
|
|
"$$(git show -s --format='%ci')" \
|
|
-m0=lzma2 -mx=9 \
|
|
-- . \
|
|
'-x!cache' \
|
|
'-x!clipboard' \
|
|
'-x!data/dict' \
|
|
'-x!data/tessdata' \
|
|
'-x!history' \
|
|
'-x!l10n/templates' \
|
|
'-x!libs' \
|
|
'-x!ota' \
|
|
'-x!resources/fonts*' \
|
|
'-x!resources/icons/src*' \
|
|
'-x!rocks/bin' \
|
|
'-x!rocks/lib/luarocks' \
|
|
'-x!screenshots' \
|
|
'-x!sdcv' \
|
|
'-x!spec' \
|
|
'-x!tools' \
|
|
'-xr!.*' \
|
|
'-xr!COPYING' \
|
|
'-xr!NOTES.txt' \
|
|
'-xr!NOTICE' \
|
|
'-xr!README.md' \
|
|
;
|
|
|
|
# make the android APK
|
|
# Note: filter out the `--debug=…` make flag
|
|
# so the old crummy version provided by the
|
|
# NDK does not blow a gasket.
|
|
MAKEFLAGS='$(filter-out --debug=%,$(MAKEFLAGS))' \
|
|
$(MAKE) -C $(ANDROID_LAUNCHER_DIR) $(if $(KODEBUG), debug, release) \
|
|
ANDROID_APPNAME=KOReader \
|
|
ANDROID_VERSION=$(ANDROID_VERSION) \
|
|
ANDROID_NAME=$(ANDROID_NAME) \
|
|
ANDROID_FLAVOR=$(ANDROID_FLAVOR)
|
|
|
|
cp $(ANDROID_LAUNCHER_DIR)/bin/NativeActivity.apk \
|
|
koreader-android-$(ANDROID_ARCH)$(KODEDUG_SUFFIX)-$(VERSION).apk
|
|
|
|
debianupdate: all
|
|
mkdir -pv \
|
|
$(INSTALL_DIR)/debian/usr/bin \
|
|
$(INSTALL_DIR)/debian/usr/lib \
|
|
$(INSTALL_DIR)/debian/usr/share/pixmaps \
|
|
$(INSTALL_DIR)/debian/usr/share/applications \
|
|
$(INSTALL_DIR)/debian/usr/share/doc/koreader \
|
|
$(INSTALL_DIR)/debian/usr/share/man/man1
|
|
|
|
cp -pv resources/koreader.png $(INSTALL_DIR)/debian/usr/share/pixmaps
|
|
cp -pv $(DEBIAN_DIR)/koreader.desktop $(INSTALL_DIR)/debian/usr/share/applications
|
|
cp -pv $(DEBIAN_DIR)/copyright COPYING $(INSTALL_DIR)/debian/usr/share/doc/koreader
|
|
cp -pv $(DEBIAN_DIR)/koreader.sh $(INSTALL_DIR)/debian/usr/bin/koreader
|
|
cp -Lr $(INSTALL_DIR)/koreader $(INSTALL_DIR)/debian/usr/lib
|
|
|
|
gzip -cn9 $(DEBIAN_DIR)/changelog > $(INSTALL_DIR)/debian/usr/share/doc/koreader/changelog.Debian.gz
|
|
gzip -cn9 $(DEBIAN_DIR)/koreader.1 > $(INSTALL_DIR)/debian/usr/share/man/man1/koreader.1.gz
|
|
|
|
chmod 644 \
|
|
$(INSTALL_DIR)/debian/usr/share/doc/koreader/changelog.Debian.gz \
|
|
$(INSTALL_DIR)/debian/usr/share/doc/koreader/copyright \
|
|
$(INSTALL_DIR)/debian/usr/share/man/man1/koreader.1.gz
|
|
|
|
rm -rf \
|
|
$(INSTALL_DIR)/debian/usr/lib/koreader/{ota,cache,clipboard,screenshots,spec,tools,resources/fonts,resources/icons/src}
|
|
|
|
macosupdate: all
|
|
mkdir -p \
|
|
$(INSTALL_DIR)/bundle/Contents/MacOS \
|
|
$(INSTALL_DIR)/bundle/Contents/Resources
|
|
|
|
cp -pv $(MACOS_DIR)/koreader.icns $(INSTALL_DIR)/bundle/Contents/Resources/icon.icns
|
|
cp -LR $(INSTALL_DIR)/koreader $(INSTALL_DIR)/bundle/Contents
|
|
cp -pRv $(MACOS_DIR)/menu.xml $(INSTALL_DIR)/bundle/Contents/MainMenu.xib
|
|
ibtool --compile "$(INSTALL_DIR)/bundle/Contents/Resources/Base.lproj/MainMenu.nib" "$(INSTALL_DIR)/bundle/Contents/MainMenu.xib"
|
|
rm -rfv "$(INSTALL_DIR)/bundle/Contents/MainMenu.xib"
|
|
|
|
REMARKABLE_PACKAGE:=koreader-remarkable$(KODEDUG_SUFFIX)-$(VERSION).zip
|
|
REMARKABLE_PACKAGE_OTA:=koreader-remarkable$(KODEDUG_SUFFIX)-$(VERSION).targz
|
|
remarkableupdate: all
|
|
# ensure that the binaries were built for ARM
|
|
file $(INSTALL_DIR)/koreader/luajit | grep ARM || exit 1
|
|
# remove old package if any
|
|
rm -f $(REMARKABLE_PACKAGE)
|
|
# Remarkable scripts
|
|
cp $(REMARKABLE_DIR)/* $(INSTALL_DIR)/koreader
|
|
cp $(COMMON_DIR)/spinning_zsync $(INSTALL_DIR)/koreader
|
|
# create new package
|
|
cd $(INSTALL_DIR) && \
|
|
zip -9 -r \
|
|
../$(REMARKABLE_PACKAGE) \
|
|
koreader -x "koreader/resources/fonts/*" \
|
|
"koreader/resources/icons/src/*" "koreader/spec/*" \
|
|
$(ZIP_EXCLUDE)
|
|
# generate update package index file
|
|
zipinfo -1 $(REMARKABLE_PACKAGE) > \
|
|
$(INSTALL_DIR)/koreader/ota/package.index
|
|
echo "koreader/ota/package.index" >> $(INSTALL_DIR)/koreader/ota/package.index
|
|
# update index file in zip package
|
|
cd $(INSTALL_DIR) && zip -u ../$(REMARKABLE_PACKAGE) \
|
|
koreader/ota/package.index
|
|
# make gzip remarkable update for zsync OTA update
|
|
cd $(INSTALL_DIR) && \
|
|
tar -I"gzip --rsyncable" -cah --no-recursion -f ../$(REMARKABLE_PACKAGE_OTA) \
|
|
-T koreader/ota/package.index
|
|
|
|
SONY_PRSTUX_PACKAGE:=koreader-sony-prstux$(KODEDUG_SUFFIX)-$(VERSION).zip
|
|
SONY_PRSTUX_PACKAGE_OTA:=koreader-sony-prstux$(KODEDUG_SUFFIX)-$(VERSION).targz
|
|
sony-prstuxupdate: all
|
|
# ensure that the binaries were built for ARM
|
|
file $(INSTALL_DIR)/koreader/luajit | grep ARM || exit 1
|
|
# remove old package if any
|
|
rm -f $(SONY_PRSTUX_PACKAGE)
|
|
# Sony PRSTUX launching scripts
|
|
cp $(SONY_PRSTUX_DIR)/*.sh $(INSTALL_DIR)/koreader
|
|
# create new package
|
|
cd $(INSTALL_DIR) && \
|
|
zip -9 -r \
|
|
../$(SONY_PRSTUX_PACKAGE) \
|
|
koreader -x "koreader/resources/fonts/*" \
|
|
"koreader/resources/icons/src/*" "koreader/spec/*" \
|
|
$(ZIP_EXCLUDE)
|
|
# generate update package index file
|
|
zipinfo -1 $(SONY_PRSTUX_PACKAGE) > \
|
|
$(INSTALL_DIR)/koreader/ota/package.index
|
|
echo "koreader/ota/package.index" >> $(INSTALL_DIR)/koreader/ota/package.index
|
|
# update index file in zip package
|
|
cd $(INSTALL_DIR) && zip -u ../$(SONY_PRSTUX_PACKAGE) \
|
|
koreader/ota/package.index
|
|
# make gzip sonyprstux update for zsync OTA update
|
|
cd $(INSTALL_DIR) && \
|
|
tar --hard-dereference -I"gzip --rsyncable" -cah --no-recursion -f ../$(SONY_PRSTUX_PACKAGE_OTA) \
|
|
-T koreader/ota/package.index
|
|
|
|
CERVANTES_PACKAGE:=koreader-cervantes$(KODEDUG_SUFFIX)-$(VERSION).zip
|
|
CERVANTES_PACKAGE_OTA:=koreader-cervantes$(KODEDUG_SUFFIX)-$(VERSION).targz
|
|
cervantesupdate: all
|
|
# ensure that the binaries were built for ARM
|
|
file $(INSTALL_DIR)/koreader/luajit | grep ARM || exit 1
|
|
# remove old package if any
|
|
rm -f $(CERVANTES_PACKAGE)
|
|
# Cervantes launching scripts
|
|
cp $(COMMON_DIR)/spinning_zsync $(INSTALL_DIR)/koreader/spinning_zsync.sh
|
|
cp $(CERVANTES_DIR)/*.sh $(INSTALL_DIR)/koreader
|
|
cp $(CERVANTES_DIR)/spinning_zsync $(INSTALL_DIR)/koreader
|
|
# create new package
|
|
cd $(INSTALL_DIR) && \
|
|
zip -9 -r \
|
|
../$(CERVANTES_PACKAGE) \
|
|
koreader -x "koreader/resources/fonts/*" \
|
|
"koreader/resources/icons/src/*" "koreader/spec/*" \
|
|
$(ZIP_EXCLUDE)
|
|
# generate update package index file
|
|
zipinfo -1 $(CERVANTES_PACKAGE) > \
|
|
$(INSTALL_DIR)/koreader/ota/package.index
|
|
echo "koreader/ota/package.index" >> $(INSTALL_DIR)/koreader/ota/package.index
|
|
# update index file in zip package
|
|
cd $(INSTALL_DIR) && zip -u ../$(CERVANTES_PACKAGE) \
|
|
koreader/ota/package.index
|
|
# make gzip cervantes update for zsync OTA update
|
|
cd $(INSTALL_DIR) && \
|
|
tar --hard-dereference -I"gzip --rsyncable" -cah --no-recursion -f ../$(CERVANTES_PACKAGE_OTA) \
|
|
-T koreader/ota/package.index
|
|
|
|
update:
|
|
ifeq ($(TARGET), android)
|
|
make androidupdate
|
|
else ifeq ($(TARGET), appimage)
|
|
make appimageupdate
|
|
else ifeq ($(TARGET), cervantes)
|
|
make cervantesupdate
|
|
else ifeq ($(TARGET), kindle)
|
|
make kindleupdate
|
|
else ifeq ($(TARGET), kindle-legacy)
|
|
make kindleupdate
|
|
else ifeq ($(TARGET), kindlepw2)
|
|
make kindleupdate
|
|
else ifeq ($(TARGET), kobo)
|
|
make koboupdate
|
|
else ifeq ($(TARGET), pocketbook)
|
|
make pbupdate
|
|
else ifeq ($(TARGET), sony-prstux)
|
|
make sony-prstuxupdate
|
|
else ifeq ($(TARGET), remarkable)
|
|
make remarkableupdate
|
|
else ifeq ($(TARGET), ubuntu-touch)
|
|
make utupdate
|
|
else ifeq ($(TARGET), debian)
|
|
make debianupdate
|
|
$(CURDIR)/platform/debian/do_debian_package.sh $(INSTALL_DIR)
|
|
else ifeq ($(TARGET), debian-armel)
|
|
make debianupdate
|
|
$(CURDIR)/platform/debian/do_debian_package.sh $(INSTALL_DIR) armel
|
|
else ifeq ($(TARGET), debian-armhf)
|
|
make debianupdate
|
|
$(CURDIR)/platform/debian/do_debian_package.sh $(INSTALL_DIR) armhf
|
|
else ifeq ($(TARGET), debian-arm64)
|
|
make debianupdate
|
|
$(CURDIR)/platform/debian/do_debian_package.sh $(INSTALL_DIR) arm64
|
|
else ifeq ($(TARGET), macos)
|
|
make macosupdate
|
|
$(CURDIR)/platform/mac/do_mac_bundle.sh $(INSTALL_DIR)
|
|
endif
|
|
|
|
androiddev: androidupdate
|
|
$(MAKE) -C $(ANDROID_LAUNCHER_DIR) dev
|
|
|
|
android-ndk:
|
|
$(MAKE) -C $(KOR_BASE)/toolchain $(ANDROID_NDK_HOME)
|
|
|
|
android-sdk:
|
|
$(MAKE) -C $(KOR_BASE)/toolchain $(ANDROID_HOME)
|
|
|
|
|
|
# for gettext
|
|
DOMAIN=koreader
|
|
TEMPLATE_DIR=l10n/templates
|
|
XGETTEXT_BIN=xgettext
|
|
|
|
pot: po
|
|
mkdir -p $(TEMPLATE_DIR)
|
|
$(XGETTEXT_BIN) --from-code=utf-8 \
|
|
--keyword=C_:1c,2 --keyword=N_:1,2 --keyword=NC_:1c,2,3 \
|
|
--add-comments=@translators \
|
|
reader.lua `find frontend -iname "*.lua" | sort` \
|
|
`find plugins -iname "*.lua" | sort` \
|
|
`find tools -iname "*.lua" | sort` \
|
|
-o $(TEMPLATE_DIR)/$(DOMAIN).pot
|
|
|
|
po:
|
|
git submodule update --remote l10n
|
|
|
|
|
|
static-check:
|
|
@if which luacheck > /dev/null; then \
|
|
luacheck -q {reader,setupkoenv,datastorage}.lua frontend plugins spec; \
|
|
else \
|
|
echo "[!] luacheck not found. "\
|
|
"you can install it with 'luarocks install luacheck'"; \
|
|
fi
|
|
|
|
doc:
|
|
make -C doc
|
|
|
|
.PHONY: all clean doc test update
|