mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
and have more confidence with the unit testing framework. Now `make testfront` won't retry on failure and testing files are ordered in each run so that it's possible to reproduce testing failure. And this patch also fix flush settings not working before suspend issue: at some point the `FlushSettings` event is sent to `UIManager` instead of `ReaderUI`, but `UIManager` only delegated events to active widgets and `ReaderUI` is actually not an active widgets thus will miss the event. This patch also add a verbose debug mode with "-v" as a switch to turn on this mode. With verbose mode on, event handling will be logged.
362 lines
13 KiB
Makefile
362 lines
13 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 koreader, not koreader-base
|
|
VERSION=$(shell git describe HEAD)
|
|
REVISION=$(shell git rev-parse --short HEAD)
|
|
|
|
# set PATH to find CC in managed toolchains
|
|
ifeq ($(TARGET), android)
|
|
PATH:=$(CURDIR)/$(KOR_BASE)/$(ANDROID_TOOLCHAIN)/bin:$(PATH)
|
|
else ifeq ($(TARGET), pocketbook)
|
|
PATH:=$(CURDIR)/$(KOR_BASE)/$(POCKETBOOK_TOOLCHAIN)/bin:$(PATH)
|
|
endif
|
|
|
|
MACHINE=$(shell PATH=$(PATH) $(CC) -dumpmachine 2>/dev/null)
|
|
|
|
ifdef TARGET
|
|
DIST:=$(TARGET)
|
|
else
|
|
DIST:=emulator
|
|
endif
|
|
|
|
INSTALL_DIR=koreader-$(DIST)-$(MACHINE)
|
|
|
|
# platform directories
|
|
PLATFORM_DIR=platform
|
|
KINDLE_DIR=$(PLATFORM_DIR)/kindle
|
|
KOBO_DIR=$(PLATFORM_DIR)/kobo
|
|
POCKETBOOK_DIR=$(PLATFORM_DIR)/pocketbook
|
|
UBUNTUTOUCH_DIR=$(PLATFORM_DIR)/ubuntu-touch
|
|
ANDROID_DIR=$(PLATFORM_DIR)/android
|
|
ANDROID_LAUNCHER_DIR:=$(ANDROID_DIR)/luajit-launcher
|
|
UBUNTUTOUCH_SDL_DIR:=$(UBUNTUTOUCH_DIR)/ubuntu-touch-sdl
|
|
WIN32_DIR=$(PLATFORM_DIR)/win32
|
|
|
|
# files to link from main directory
|
|
INSTALL_FILES=reader.lua frontend resources defaults.lua datastorage.lua l10n tools \
|
|
README.md COPYING
|
|
|
|
# for gettext
|
|
DOMAIN=koreader
|
|
TEMPLATE_DIR=l10n/templates
|
|
KOREADER_MISC_TOOL=../misc
|
|
XGETTEXT_BIN=$(KOREADER_MISC_TOOL)/gettext/lua_xgettext.py
|
|
|
|
|
|
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
|
|
ifneq ($(or $(EMULATE_READER),$(WIN32)),)
|
|
cp -f $(KOR_BASE)/ev_replay.py $(INSTALL_DIR)/koreader/
|
|
@echo "[*] create symlink instead of copying files in development mode"
|
|
cd $(INSTALL_DIR)/koreader && \
|
|
ln -sf ../../$(KOR_BASE)/$(OUTPUT_DIR)/* .
|
|
@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
|
|
else
|
|
$(RCP) -fL $(KOR_BASE)/$(OUTPUT_DIR)/* $(INSTALL_DIR)/koreader/
|
|
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
|
|
ifdef WIN32
|
|
@echo "[*] Install runtime libraries for win32..."
|
|
cd $(INSTALL_DIR)/koreader && cp ../../$(WIN32_DIR)/*.dll .
|
|
endif
|
|
@echo "[*] Install plugins"
|
|
$(RCP) plugins/* $(INSTALL_DIR)/koreader/plugins/
|
|
@echo "[*] Installresources"
|
|
$(RCP) -pL resources/fonts/* $(INSTALL_DIR)/koreader/fonts/
|
|
install -d $(INSTALL_DIR)/koreader/{screenshots,data/{dict,tessdata},fonts/host,ota}
|
|
ifeq ($(or $(EMULATE_READER),$(WIN32)),)
|
|
@echo "[*] Clean up, remove unused files for releases"
|
|
rm -rf $(INSTALL_DIR)/koreader/data/{cr3.ini,cr3skin-format.txt,desktop,devices,manual}
|
|
rm -rf $(INSTALL_DIR)/koreader/fonts/droid/DroidSansFallbackFull.ttf
|
|
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 && ./luajit $(shell which busted) \
|
|
--sort-files \
|
|
--no-auto-insulate \
|
|
-o verbose_print --exclude-tags=notest
|
|
|
|
test:
|
|
$(MAKE) -C $(KOR_BASE) test
|
|
$(MAKE) testfront
|
|
|
|
coverage: $(INSTALL_DIR)/koreader/.luacov
|
|
cd $(INSTALL_DIR)/koreader && \
|
|
./luajit $(shell which busted) -o verbose_print \
|
|
--no-auto-insulate \
|
|
--coverage --exclude-tags=nocov
|
|
# coverage report summary
|
|
cd $(INSTALL_DIR)/koreader && tail -n \
|
|
+$$(($$(grep -nm1 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
|
|
|
|
dist-clean: clean
|
|
rm -rf $(INSTALL_DIR)
|
|
$(MAKE) -C $(KOR_BASE) dist-clean
|
|
$(MAKE) -C doc clean
|
|
|
|
# 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 koreader-kindle-$(MACHINE)-$(VERSION).zip
|
|
# 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)/kotar_cpoint $(INSTALL_DIR)/koreader
|
|
# create new package
|
|
cd $(INSTALL_DIR) && pwd && \
|
|
zip -9 -r \
|
|
../koreader-kindle-$(MACHINE)-$(VERSION).zip \
|
|
extensions koreader $(KINDLE_LEGACY_LAUNCHER) \
|
|
-x "koreader/resources/fonts/*" "koreader/ota/*" \
|
|
"koreader/resources/icons/src/*" "koreader/spec/*"
|
|
# generate kindleupdate package index file
|
|
zipinfo -1 koreader-kindle-$(MACHINE)-$(VERSION).zip > \
|
|
$(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 ../koreader-kindle-$(MACHINE)-$(VERSION).zip \
|
|
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 czafh ../koreader-kindle-$(MACHINE)-$(VERSION).targz \
|
|
-T koreader/ota/package.index --no-recursion
|
|
|
|
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 koreader-kobo-$(MACHINE)-$(VERSION).zip
|
|
# Kobo launching scripts
|
|
mkdir -p $(INSTALL_DIR)/kobo/mnt/onboard/.kobo
|
|
ln -sf ../../../../../$(KOBO_DIR)/fmon $(INSTALL_DIR)/kobo/mnt/onboard/.kobo/
|
|
cd $(INSTALL_DIR)/kobo && tar -czhf ../KoboRoot.tgz mnt
|
|
cp resources/koreader.png $(INSTALL_DIR)/koreader.png
|
|
cp $(KOBO_DIR)/fmon/README.txt $(INSTALL_DIR)/README_kobo.txt
|
|
cp $(KOBO_DIR)/koreader.sh $(INSTALL_DIR)/koreader
|
|
cp $(KOBO_DIR)/suspend.sh $(INSTALL_DIR)/koreader
|
|
cp $(KOBO_DIR)/nickel.sh $(INSTALL_DIR)/koreader
|
|
# create new package
|
|
cd $(INSTALL_DIR) && \
|
|
zip -9 -r \
|
|
../koreader-kobo-$(MACHINE)-$(VERSION).zip \
|
|
koreader -x "koreader/resources/fonts/*" \
|
|
"koreader/resources/icons/src/*" "koreader/spec/*"
|
|
# generate koboupdate package index file
|
|
zipinfo -1 koreader-kobo-$(MACHINE)-$(VERSION).zip > \
|
|
$(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 ../koreader-kobo-$(MACHINE)-$(VERSION).zip \
|
|
koreader/ota/package.index KoboRoot.tgz koreader.png README_kobo.txt
|
|
# make gzip koboupdate for zsync OTA update
|
|
cd $(INSTALL_DIR) && \
|
|
tar czafh ../koreader-kobo-$(MACHINE)-$(VERSION).targz \
|
|
-T koreader/ota/package.index --no-recursion
|
|
|
|
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 koreader-pocketbook-$(MACHINE)-$(VERSION).zip
|
|
# Pocketbook launching script
|
|
mkdir -p $(INSTALL_DIR)/applications
|
|
mkdir -p $(INSTALL_DIR)/system/bin
|
|
mkdir -p $(INSTALL_DIR)/system/config
|
|
|
|
cp $(POCKETBOOK_DIR)/koreader.app $(INSTALL_DIR)/applications
|
|
cp $(POCKETBOOK_DIR)/koreader.app $(INSTALL_DIR)/system/bin
|
|
cp $(POCKETBOOK_DIR)/extensions.cfg $(INSTALL_DIR)/system/config
|
|
cp -rfL $(INSTALL_DIR)/koreader $(INSTALL_DIR)/applications
|
|
# create new package
|
|
cd $(INSTALL_DIR) && \
|
|
zip -9 -r \
|
|
../koreader-pocketbook-$(MACHINE)-$(VERSION).zip \
|
|
applications -x "applications/koreader/resources/fonts/*" \
|
|
"applications/koreader/resources/icons/src/*" "applications/koreader/spec/*"
|
|
# generate koboupdate package index file
|
|
zipinfo -1 koreader-pocketbook-$(MACHINE)-$(VERSION).zip > \
|
|
$(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 ../koreader-pocketbook-$(MACHINE)-$(VERSION).zip \
|
|
applications/koreader/ota/package.index system
|
|
# make gzip pbupdate for zsync OTA update
|
|
cd $(INSTALL_DIR)/applications && \
|
|
tar czafh ../../koreader-pocketbook-$(MACHINE)-$(VERSION).targz \
|
|
-T koreader/ota/package.index --no-recursion
|
|
|
|
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/*"
|
|
|
|
# generate update package index file
|
|
zipinfo -1 koreader-$(DIST)-$(MACHINE)-$(VERSION).zip > \
|
|
$(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 ../koreader-$(DIST)-$(MACHINE)-$(VERSION).zip \
|
|
koreader/ota/package.index
|
|
# make gzip update for zsync OTA update
|
|
cd $(INSTALL_DIR) && \
|
|
tar czafh ../koreader-$(DIST)-$(MACHINE)-$(VERSION).targz \
|
|
-T koreader/ota/package.index --no-recursion
|
|
|
|
# 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
|
|
|
|
|
|
androidupdate: all
|
|
mkdir -p $(ANDROID_LAUNCHER_DIR)/assets/module
|
|
-rm $(ANDROID_LAUNCHER_DIR)/assets/module/koreader-*
|
|
# create zip package
|
|
cd $(INSTALL_DIR)/koreader && \
|
|
zip -9 -r \
|
|
../../koreader-android-$(MACHINE)-$(VERSION).zip \
|
|
* -x "resources/fonts/*" "resources/icons/src/*" "spec/*"
|
|
# generate android update package index file
|
|
zipinfo -1 koreader-android-$(MACHINE)-$(VERSION).zip > \
|
|
$(INSTALL_DIR)/koreader/ota/package.index
|
|
rm -f koreader-android-$(MACHINE)-$(VERSION).zip
|
|
echo "ota/package.index" >> $(INSTALL_DIR)/koreader/ota/package.index
|
|
cp $(INSTALL_DIR)/koreader/git-rev $(INSTALL_DIR)/koreader/ota-rev
|
|
# don't update the git-rev so that the next start won't revert back
|
|
# the older 7z version in the assets
|
|
sed -i '/git-rev/d' $(INSTALL_DIR)/koreader/ota/package.index
|
|
# make gzip android update for zsync OTA update
|
|
cd $(INSTALL_DIR)/koreader && \
|
|
tar czafh ../../koreader-android-$(MACHINE)-$(VERSION).targz \
|
|
-T ota/package.index --no-recursion
|
|
# make android update apk
|
|
cd $(INSTALL_DIR)/koreader && 7z a -l -mx=1 \
|
|
../../$(ANDROID_LAUNCHER_DIR)/assets/module/koreader-g$(REVISION).7z * \
|
|
-x!resources/fonts -x!resources/icons/src -x!spec
|
|
$(MAKE) -C $(ANDROID_LAUNCHER_DIR) apk
|
|
cp $(ANDROID_LAUNCHER_DIR)/bin/NativeActivity-debug.apk \
|
|
koreader-android-$(MACHINE)-$(VERSION).apk
|
|
|
|
update:
|
|
ifeq ($(TARGET), kindle)
|
|
make kindleupdate
|
|
else ifeq ($(TARGET), kindle-legacy)
|
|
make kindleupdate
|
|
else ifeq ($(TARGET), kobo)
|
|
make koboupdate
|
|
else ifeq ($(TARGET), pocketbook)
|
|
make pbupdate
|
|
else ifeq ($(TARGET), ubuntu-touch)
|
|
make utupdate
|
|
else ifeq ($(TARGET), android)
|
|
make androidupdate
|
|
endif
|
|
|
|
androiddev: androidupdate
|
|
$(MAKE) -C $(ANDROID_LAUNCHER_DIR) dev
|
|
|
|
android-toolchain:
|
|
$(MAKE) -C $(KOR_BASE) android-toolchain
|
|
|
|
pocketbook-toolchain:
|
|
$(MAKE) -C $(KOR_BASE) pocketbook-toolchain
|
|
|
|
pot:
|
|
mkdir -p $(TEMPLATE_DIR)
|
|
$(XGETTEXT_BIN) reader.lua `find frontend -iname "*.lua"` \
|
|
`find plugins -iname "*.lua"` \
|
|
`find tools -iname "*.lua"` \
|
|
> $(TEMPLATE_DIR)/$(DOMAIN).pot
|
|
# push source file to Transifex
|
|
$(MAKE) -i -C l10n bootstrap push
|
|
|
|
po:
|
|
$(MAKE) -i -C l10n bootstrap pull
|
|
|
|
static-check:
|
|
@if which luacheck > /dev/null; then \
|
|
luacheck -q frontend; \
|
|
else \
|
|
echo "[!] luacheck not found. "\
|
|
"you can install it with 'luarocks install luacheck'"; \
|
|
fi
|
|
|
|
doc:
|
|
make -C doc
|
|
|
|
.PHONY: test doc
|