mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
Use a directory distinct from the one in base (so its entries survive a `make base-re`), symlink the base data directory entries, and the crengine data files directly from its checkout (since the base data directory now only contains the bare minimum).
222 lines
6.4 KiB
Makefile
222 lines
6.4 KiB
Makefile
PHONY = all android-ndk android-sdk base clean coverage distclean doc fetchthirdparty po pot re static-check test testbase testfront
|
|
SOUND = $(INSTALL_DIR)/%
|
|
|
|
# koreader-base directory
|
|
KOR_BASE ?= base
|
|
|
|
include $(KOR_BASE)/Makefile.defs
|
|
|
|
RELEASE_DATE := $(shell git show -s --format=format:"%cd" --date=short HEAD)
|
|
# 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)_$(RELEASE_DATE)
|
|
endif
|
|
|
|
# releases do not contain tests and misc data
|
|
IS_RELEASE := $(if $(or $(EMULATE_READER),$(WIN32)),,1)
|
|
IS_RELEASE := $(if $(or $(IS_RELEASE),$(APPIMAGE),$(LINUX),$(MACOS)),1,)
|
|
|
|
LINUX_ARCH?=native
|
|
ifeq ($(LINUX_ARCH), native)
|
|
LINUX_ARCH_NAME:=$(shell uname -m)
|
|
else ifeq ($(LINUX_ARCH), arm64)
|
|
LINUX_ARCH_NAME:=aarch64
|
|
else ifeq ($(LINUX_ARCH), arm)
|
|
LINUX_ARCH_NAME:=armv7l
|
|
endif
|
|
LINUX_ARCH_NAME?=$(LINUX_ARCH)
|
|
|
|
|
|
MACHINE=$(TARGET_MACHINE)
|
|
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
|
|
WIN32_DIR=$(PLATFORM_DIR)/win32
|
|
|
|
define CR3GUI_DATADIR_EXCLUDES
|
|
%/KoboUSBMS.tar.gz
|
|
%/cr3.ini
|
|
%/cr3skin-format.txt
|
|
%/desktop
|
|
%/devices
|
|
%/manual
|
|
endef
|
|
CR3GUI_DATADIR_FILES = $(filter-out $(CR3GUI_DATADIR_EXCLUDES),$(wildcard $(CR3GUI_DATADIR)/*))
|
|
|
|
# files to link from main directory
|
|
INSTALL_FILES=reader.lua setupkoenv.lua frontend resources defaults.lua datastorage.lua \
|
|
l10n tools README.md COPYING
|
|
|
|
OUTPUT_DIR_ARTIFACTS = $(abspath $(OUTPUT_DIR))/!(cache|cmake|data|history|staging|thirdparty)
|
|
OUTPUT_DIR_DATAFILES = $(wildcard $(OUTPUT_DIR)/data/*)
|
|
|
|
all: 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))
|
|
$(SYMLINK) $(KOR_BASE)/ev_replay.py $(INSTALL_DIR)/koreader/
|
|
endif
|
|
bash -O extglob -c '$(SYMLINK) $(OUTPUT_DIR_ARTIFACTS) $(INSTALL_DIR)/koreader/'
|
|
ifneq (,$(EMULATE_READER))
|
|
@echo "[*] install front spec only for the emulator"
|
|
$(SYMLINK) spec $(INSTALL_DIR)/koreader/spec/front
|
|
$(SYMLINK) test $(INSTALL_DIR)/koreader/spec/front/unit/data
|
|
endif
|
|
$(SYMLINK) $(INSTALL_FILES) $(INSTALL_DIR)/koreader/
|
|
ifdef ANDROID
|
|
$(SYMLINK) $(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..."
|
|
$(SYMLINK) $(WIN32_DIR)/*.dll $(INSTALL_DIR)/koreader/
|
|
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"
|
|
$(SYMLINK) plugins $(INSTALL_DIR)/koreader/
|
|
@echo "[*] Install resources"
|
|
$(SYMLINK) resources/fonts/* $(INSTALL_DIR)/koreader/fonts/
|
|
install -d $(INSTALL_DIR)/koreader/{screenshots,fonts/host,ota}
|
|
# Note: the data dir is distinct from the one in base/build/…!
|
|
@echo "[*] Install data files"
|
|
install -d $(INSTALL_DIR)/koreader/data
|
|
$(SYMLINK) $(OUTPUT_DIR_DATAFILES) $(CR3GUI_DATADIR_FILES) $(INSTALL_DIR)/koreader/data/
|
|
ifneq (,$(IS_RELEASE))
|
|
@echo "[*] Clean up, remove unused files for releases"
|
|
rm -rf $(INSTALL_DIR)/koreader/data/{cr3.ini,desktop,devices,dict,manual,tessdata}
|
|
endif
|
|
|
|
base: base-all
|
|
|
|
$(INSTALL_DIR)/koreader/.busted: .busted
|
|
$(SYMLINK) .busted $@
|
|
|
|
$(INSTALL_DIR)/koreader/.luacov:
|
|
$(SYMLINK) .luacov $@
|
|
|
|
testbase: base-test
|
|
|
|
testfront: all test-data $(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: testbase 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
|
|
|
|
ifeq (,$(wildcard $(KOR_BASE)/Makefile))
|
|
$(KOR_BASE)/Makefile: fetchthirdparty
|
|
endif
|
|
ifeq (,$(wildcard $(KOR_BASE)/Makefile.defs))
|
|
$(KOR_BASE)/Makefile.defs: fetchthirdparty
|
|
endif
|
|
|
|
fetchthirdparty:
|
|
git submodule init
|
|
git submodule sync
|
|
ifneq (,$(CI))
|
|
git submodule update --depth 1 --jobs 3
|
|
else
|
|
# Force shallow clones of submodules configured as such.
|
|
git submodule update --jobs 3 --depth 1 $(shell \
|
|
git config --file=.gitmodules --name-only --get-regexp '^submodule\.[^.]+\.shallow$$' true \
|
|
| sed 's/\.shallow$$/.path/' \
|
|
| xargs -n1 git config --file=.gitmodules \
|
|
)
|
|
# Update the rest.
|
|
git submodule update --jobs 3
|
|
endif
|
|
$(MAKE) -C $(KOR_BASE) fetchthirdparty
|
|
|
|
clean: base-clean
|
|
rm -rf $(INSTALL_DIR)
|
|
ifeq ($(TARGET), android)
|
|
$(MAKE) -C $(CURDIR)/platform/android/luajit-launcher clean
|
|
endif
|
|
|
|
distclean: clean base-distclean
|
|
$(MAKE) -C doc clean
|
|
|
|
re: clean
|
|
$(MAKE) all
|
|
|
|
# Include target specific rules.
|
|
ifneq (,$(wildcard make/$(TARGET).mk))
|
|
include make/$(TARGET).mk
|
|
endif
|
|
|
|
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
|
|
|
|
.NOTPARALLEL:
|
|
.PHONY: $(PHONY)
|
|
|
|
include $(KOR_BASE)/Makefile
|