2
0
mirror of https://github.com/koreader/koreader synced 2024-11-11 19:11:14 +00:00
koreader/kodev

396 lines
11 KiB
Plaintext
Raw Normal View History

2016-02-01 06:43:46 +00:00
#!/bin/bash
CURDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
2016-02-16 02:08:04 +00:00
function assert_ret_zero {
2016-05-06 12:06:48 +00:00
if [ "$1" -ne 0 ]; then
2016-04-24 04:16:37 +00:00
if [ ! -z "$2" ]; then
2016-05-06 12:06:48 +00:00
echo "$2"
2016-02-04 07:37:00 +00:00
fi
exit 1
fi
}
function check_submodules {
2016-10-02 04:42:00 +00:00
[ -n "`git submodule status | grep -E '^\-'`" ] && kodev-fetch-thirdparty
}
2016-02-01 06:43:46 +00:00
function setup_env {
2016-05-06 12:06:48 +00:00
files=$(ls -d ./koreader-emulator-*/koreader)
assert_ret_zero $? "Emulator not found, please build it first."
2016-02-01 06:43:46 +00:00
export EMU_DIR=${files[0]}
}
function kodev-fetch-thirdparty {
make fetchthirdparty
}
SUPPORTED_TARGETS="
kindle For kindle with touch support
2016-10-10 06:52:19 +00:00
kindle5 For kindle models >= kindle5 < paper white 2
kindlepw2 For kindle models >= paper white 2
2016-02-01 06:43:46 +00:00
kindle-legacy For kindle2/3/4/DXG
kobo
android
pocketbook
ubuntu-touch
emu (*default) If no TARGET is given, assume emulator
win32
"
function kodev-build {
BUILD_HELP_MSG="
2016-02-19 17:38:00 +00:00
usage: build <OPTIONS> <TARGET>
OPTIONS:
-v, --verbose Build in verbose mode.
2016-02-01 06:43:46 +00:00
TARGET:
${SUPPORTED_TARGETS}"
while [[ $1 == '-'* ]]; do
2016-05-06 12:06:48 +00:00
PARAM=$(echo "$1" | awk -F= '{print $1}')
VALUE=$(echo "$1" | awk -F= '{print $2}')
2016-02-19 17:38:00 +00:00
case $PARAM in
-v | --verbose)
2016-10-02 04:42:00 +00:00
export VERBOSE=1 ;;
2016-02-19 17:38:00 +00:00
-h | --help)
2016-10-02 04:42:00 +00:00
echo "${BUILD_HELP_MSG}"; exit 0 ;;
2016-02-19 17:38:00 +00:00
*)
echo "ERROR: unknown option \"$PARAM\""
echo "${BUILD_HELP_MSG}"
2016-10-02 04:42:00 +00:00
exit 1 ;;
2016-02-19 17:38:00 +00:00
esac
shift 1
2016-02-19 17:38:00 +00:00
done
2016-10-02 04:42:00 +00:00
check_submodules
2016-02-01 06:43:46 +00:00
case $1 in
kindle)
2016-10-02 04:42:00 +00:00
make TARGET=kindle; assert_ret_zero $? ;;
2016-10-10 06:52:19 +00:00
kindle5)
make TARGET=kindle5; assert_ret_zero $? ;;
kindlepw2)
make TARGET=kindlepw2; assert_ret_zero $? ;;
2016-02-01 06:43:46 +00:00
kobo)
2016-10-02 04:42:00 +00:00
make TARGET=kobo; assert_ret_zero $? ;;
2016-02-01 06:43:46 +00:00
kindle-legacy)
2016-10-02 04:42:00 +00:00
make TARGET=kindle-legacy; assert_ret_zero $? ;;
2016-02-01 06:43:46 +00:00
android)
2016-10-10 20:36:50 +00:00
[[ -n ${NDK+x} ]] || export NDK="${CURDIR}/base/toolchain/android-ndk-r12b"
2016-10-02 04:42:00 +00:00
[ -e ${CURDIR}/base/toolchain/android-toolchain/bin/arm-linux-androideabi-gcc ] || { \
{ [ -e ${NDK} ] || make -C ${CURDIR}/base/toolchain android-ndk; }; \
make android-toolchain; assert_ret_zero $?; \
}
echo "Using NDK: ${NDK}..."
make TARGET=android; assert_ret_zero $? ;;
2016-02-01 06:43:46 +00:00
pocketbook)
2016-05-06 12:06:48 +00:00
if [ ! -d "${CURDIR}/base/toolchain/pocketbook-toolchain" ]; then
2016-10-02 04:42:00 +00:00
make pocketbook-toolchain; assert_ret_zero $?
2016-02-01 06:43:46 +00:00
fi
2016-10-02 04:42:00 +00:00
make TARGET=pocketbook; assert_ret_zero $? ;;
2016-02-01 06:43:46 +00:00
ubuntu-touch)
2016-10-02 04:42:00 +00:00
make TARGET=ubuntu-touch; assert_ret_zero $? ;;
2016-02-01 06:43:46 +00:00
win32)
2016-10-02 04:42:00 +00:00
make TARGET=win32; assert_ret_zero $? ;;
2016-02-01 06:43:46 +00:00
*)
make
2016-07-10 22:52:24 +00:00
assert_ret_zero $? "Failed to build emulator! Try run with -v for more information."
2016-10-02 04:42:00 +00:00
setup_env ;;
2016-02-01 06:43:46 +00:00
esac
}
function kodev-clean {
CLEAN_HELP_MSG="
usage: clean <TARGET>
TARGET:
${SUPPORTED_TARGETS}"
case $1 in
-h | --help)
2016-10-02 04:42:00 +00:00
echo "${CLEAN_HELP_MSG}"; exit 0 ;;
2016-02-01 06:43:46 +00:00
kindle)
2016-10-02 04:42:00 +00:00
make TARGET=kindle clean ;;
2016-10-10 06:52:19 +00:00
kindle5)
make TARGET=kindle5 clean ;;
kindlepw2)
make TARGET=kindlepw2 clean ;;
2016-02-01 06:43:46 +00:00
kobo)
2016-10-02 04:42:00 +00:00
make TARGET=kobo clean ;;
2016-02-01 06:43:46 +00:00
kindle-legacy)
2016-10-02 04:42:00 +00:00
make TARGET=kindle-legacy clean ;;
2016-02-01 06:43:46 +00:00
android)
make TARGET=android clean
2016-10-02 04:42:00 +00:00
rm -f ./*.apk ;;
2016-02-01 06:43:46 +00:00
pocketbook)
2016-10-02 04:42:00 +00:00
make TARGET=pocketbook clean ;;
2016-02-01 06:43:46 +00:00
ubuntu-touch)
2016-10-02 04:42:00 +00:00
make TARGET=ubuntu-touch clean ;;
2016-02-01 06:43:46 +00:00
win32)
2016-10-02 04:42:00 +00:00
make TARGET=win32 clean ;;
2016-02-01 06:43:46 +00:00
*)
2016-10-02 04:42:00 +00:00
make clean ;;
2016-02-01 06:43:46 +00:00
esac
}
function kodev-release {
# SUPPORTED_RELEASE_TARGETS=$(echo ${SUPPORTED_TARGETS} | sed 's/win32//')
SUPPORTED_RELEASE_TARGETS="${SUPPORTED_TARGETS/emu*/""}"
RELEASE_HELP_MSG="
usage: release <TARGET>
TARGET:
${SUPPORTED_RELEASE_TARGETS}"
2016-10-02 04:42:00 +00:00
[ $# -lt 1 ] && { echo "${RELEASE_HELP_MSG}"; exit 1; }
2016-02-01 06:43:46 +00:00
while [[ $1 == '-'* ]]; do
PARAM=$(echo "$1" | awk -F= '{print $1}')
VALUE=$(echo "$1" | awk -F= '{print $2}')
case $PARAM in
-v | --verbose)
export VERBOSE=1 ;;
-h | --help)
echo "${RELEASE_HELP_MSG}"; exit 0 ;;
*)
echo "ERROR: unknown option \"$PARAM\""
echo "${RELEASE_HELP_MSG}"; exit 1 ;;
esac
shift 1
done
which tx>/dev/null && make po || echo "WARN: Transifex client not found, no translation pulled."
2016-02-01 06:43:46 +00:00
case $1 in
kindle)
kodev-build kindle
2016-10-02 04:42:00 +00:00
make TARGET=kindle update ;;
2016-10-10 06:52:19 +00:00
kindle5)
kodev-build kindle5
make TARGET=kindle5 update ;;
kindlepw2)
kodev-build kindlepw2
make TARGET=kindlepw2 update ;;
2016-02-01 06:43:46 +00:00
kobo)
kodev-build kobo
2016-10-02 04:42:00 +00:00
make TARGET=kobo update ;;
2016-02-01 06:43:46 +00:00
kindle-legacy)
kodev-build kindle-legacy
2016-10-02 04:42:00 +00:00
make TARGET=kindle-legacy update ;;
2016-02-01 06:43:46 +00:00
android)
kodev-build android
2016-10-02 04:42:00 +00:00
export PATH=$PATH:${CURDIR}/base/toolchain/android-sdk-linux/tools
which android &> /dev/null || { \
make -C ${CURDIR}/base/toolchain android-sdk; \
}
export ANDROID_HOME=`dirname $(dirname $(which android))`
export PATH=$PATH:${NDK}
make TARGET=android update ;;
2016-02-01 06:43:46 +00:00
pocketbook)
kodev-build pocketbook
2016-10-02 04:42:00 +00:00
make TARGET=pocketbook update ;;
2016-02-01 06:43:46 +00:00
ubuntu-touch)
kodev-build pocketbook
2016-10-02 04:42:00 +00:00
make TARGET=ubuntu-touch update ;;
2016-02-01 06:43:46 +00:00
*)
echo "Unsupported target for release: $1."
2016-10-02 04:42:00 +00:00
echo "${RELEASE_HELP_MSG}"; exit 1 ;;
2016-02-01 06:43:46 +00:00
esac
}
function kodev-wbuilder {
kodev-build
echo "[*] Running wbuilder.lua..."
2016-05-06 12:06:48 +00:00
pushd "${EMU_DIR}"
2016-10-02 04:42:00 +00:00
EMULATE_READER_W=540 EMULATE_READER_H=720 ./luajit ./utils/wbuilder.lua
2016-02-01 06:43:46 +00:00
popd
}
function kodev-run {
RUN_HELP_MSG="
usage: run <OPTIONS> <ARGS>
OPTIONS:
2016-03-28 00:18:45 +00:00
-h=X, --screen-height=X set height of the emulator screen (default: 720)
-w=X, --screen-width=X set width of the emulator screen (default: 540)
--no-build run reader without rebuilding
--disable-touch use this if you want to simulate keyboard only devices
2016-02-01 06:43:46 +00:00
"
screen_width=540
screen_height=720
while [[ $1 == '-'* ]]; do
2016-05-06 12:06:48 +00:00
PARAM=$(echo "$1" | awk -F= '{print $1}')
VALUE=$(echo "$1" | awk -F= '{print $2}')
2016-02-01 06:43:46 +00:00
case $PARAM in
--disable-touch)
2016-10-02 04:42:00 +00:00
export DISABLE_TOUCH=1 ;;
2016-02-01 06:43:46 +00:00
--no-build)
2016-10-02 04:42:00 +00:00
no_build=true ;;
-w | --screen-width)
2016-10-02 04:42:00 +00:00
screen_width=${VALUE} ;;
-h | --screen-height)
2016-10-02 04:42:00 +00:00
screen_height=${VALUE} ;;
2016-02-01 06:43:46 +00:00
-h | --help)
2016-10-02 04:42:00 +00:00
echo "${RUN_HELP_MSG}"; exit 0 ;;
2016-02-01 06:43:46 +00:00
*)
echo "ERROR: unknown option \"$PARAM\""
2016-10-02 04:42:00 +00:00
echo "${RUN_HELP_MSG}"; exit 1 ;;
2016-02-01 06:43:46 +00:00
esac
shift
done
if [ ! ${no_build} ]; then
echo "[*] Building KOReader..."
kodev-build
else
setup_env
fi
2016-05-06 12:06:48 +00:00
if [ ! -d "${EMU_DIR}" ]; then
2016-02-04 04:34:10 +00:00
echo "Failed to find emulator directory! Please try build command first."
exit 1
fi
2016-05-06 12:06:48 +00:00
echo "[*] Running KOReader with arguments: $*..."
pushd "${EMU_DIR}"
2016-10-02 04:42:00 +00:00
if [ $# -lt 1 ]; then
args=${CURDIR}/test
else
args="$*"
[[ $args != /* ]] && args="${CURDIR}/${args}"
fi
2016-02-01 06:43:46 +00:00
2016-10-02 04:42:00 +00:00
EMULATE_READER_W=${screen_width} EMULATE_READER_H=${screen_height} \
./reader.lua -d "$args"
2016-02-01 06:43:46 +00:00
popd
}
2016-02-04 07:37:00 +00:00
function kodev-test {
TEST_HELP_MSG="
usage: test <OPTIONS> [front|base] <TEST_NAME>
2016-02-04 07:37:00 +00:00
TEST_NAME is optional. If no TEST_NAME is given, all tests will be run.
OPTIONS:
--tags=TAGS only run tests with given tags
2016-02-04 07:37:00 +00:00
"
while [[ $1 == '-'* ]]; do
2016-05-06 12:06:48 +00:00
PARAM=$(echo "$1" | awk -F= '{print $1}')
VALUE=$(echo "$1" | awk -F= '{print $2}')
case $PARAM in
--tags)
2016-10-02 04:42:00 +00:00
opts="--tags=${VALUE}" ;;
-h | --help)
2016-10-02 04:42:00 +00:00
echo "${TEST_HELP_MSG}"; exit 0 ;;
*)
echo "ERROR: unknown option \"$PARAM\""
2016-10-02 04:42:00 +00:00
echo "${TEST_HELP_MSG}"; exit 1 ;;
esac
shift
done
2016-02-04 07:37:00 +00:00
2016-10-02 04:42:00 +00:00
[ $# -lt 1 ] && { echo "${TEST_HELP_MSG}"; exit 1; }
2016-10-28 07:26:56 +00:00
[[ $1 != "front" && $1 != "base" ]] && {
echo "Invalid test suite: $1!"
echo "${TEST_HELP_MSG}"
exit 1
}
2016-02-04 07:37:00 +00:00
2016-10-02 04:42:00 +00:00
check_submodules && make
2016-02-04 07:37:00 +00:00
setup_env
2016-05-06 12:06:48 +00:00
make "${EMU_DIR}/.busted"
pushd "${EMU_DIR}"
2016-10-02 04:42:00 +00:00
test_path="./spec/$1/unit"
2016-02-04 07:37:00 +00:00
2016-10-02 04:42:00 +00:00
if [ ! -z "$2" ]; then
test_path="${test_path}/$2"
fi
2016-02-04 07:37:00 +00:00
2016-10-02 04:42:00 +00:00
echo "Runing tests in" ${test_path}
busted --lua="./luajit" ${opts} \
--no-auto-insulate \
--lazy \
-o "./spec/$1/unit/verbose_print" \
--exclude-tags=notest "${test_path}"
2016-02-04 07:37:00 +00:00
popd
}
2016-02-28 20:16:32 +00:00
function kodev-log {
LOG_HELP_MSG="
usage: log <TARGET>
TARGET:
android
"
2016-10-02 04:42:00 +00:00
[ $# -lt 1 ] && { echo "${LOG_HELP_MSG}"; exit 1; }
2016-02-28 20:16:32 +00:00
case $1 in
-h | --help)
2016-10-02 04:42:00 +00:00
echo "${LOG_HELP_MSG}"; exit 0 ;;
2016-02-28 20:16:32 +00:00
android)
2016-10-02 04:42:00 +00:00
adb logcat 'luajit-launcher:D KOReader:D *:S' ;;
2016-02-28 20:16:32 +00:00
*)
echo "Unsupported target: $1."
2016-10-02 04:42:00 +00:00
echo "${LOG_HELP_MSG}"; exit 1 ;;
2016-02-28 20:16:32 +00:00
esac
}
2016-02-04 07:37:00 +00:00
2016-02-01 06:43:46 +00:00
HELP_MSG="
usage: $0 COMMAND <ARGS>
Supported commands:
2016-03-28 00:18:45 +00:00
activate Bootstrap shell environment for kodev
2016-02-11 06:27:41 +00:00
build Build KOReader
clean Clean KOReader build
2016-03-28 00:18:45 +00:00
fetch-thirdparty Fetch thirdparty dependencies for build
log Tail log stream for a running KOReader app
2016-02-11 06:27:41 +00:00
release Build KOReader release package
run Run KOReader
test Run tests
2016-03-28 00:18:45 +00:00
wbuilder Run wbuilder.lua script (useful for building new UI widget)
2016-02-01 06:43:46 +00:00
"
2016-10-02 04:42:00 +00:00
[ $# -lt 1 ] && { echo "Missing command."; echo "${HELP_MSG}"; exit 1; }
2016-02-01 06:43:46 +00:00
case $1 in
2016-03-28 00:18:45 +00:00
activate)
echo "adding ${CURDIR} to \$PATH..."
2016-03-28 00:18:45 +00:00
export PATH="${PATH}:${CURDIR}"
2016-05-06 12:06:48 +00:00
eval "$(luarocks path bin)"
2016-10-02 04:42:00 +00:00
exec "${SHELL}" ;;
2016-02-01 06:43:46 +00:00
fetch-thirdparty)
2016-10-02 04:42:00 +00:00
kodev-fetch-thirdparty ;;
2016-02-01 06:43:46 +00:00
clean)
2016-10-02 04:42:00 +00:00
shift 1; kodev-clean "$@" ;;
2016-02-01 06:43:46 +00:00
build)
2016-10-02 04:42:00 +00:00
shift 1; kodev-build "$@" ;;
2016-02-01 06:43:46 +00:00
release)
2016-10-02 04:42:00 +00:00
shift 1; kodev-release "$@" ;;
2016-02-01 06:43:46 +00:00
wbuilder)
2016-10-02 04:42:00 +00:00
kodev-wbuilder ;;
2016-02-01 06:43:46 +00:00
run)
2016-10-02 04:42:00 +00:00
shift 1; kodev-run "$@" ;;
2016-02-04 07:37:00 +00:00
test)
2016-10-02 04:42:00 +00:00
shift 1; kodev-test "$@" ;;
prompt)
kodev-build
pushd "${EMU_DIR}"
./luajit -i setupkoenv.lua
popd
;;
2016-02-28 20:16:32 +00:00
log)
2016-10-02 04:42:00 +00:00
shift 1; kodev-log "$@" ;;
2016-02-01 06:43:46 +00:00
--help | -h)
2016-10-02 04:42:00 +00:00
echo "${HELP_MSG}"; exit 0 ;;
2016-02-01 06:43:46 +00:00
*)
echo "Unknown command: $1."
2016-10-02 04:42:00 +00:00
echo "${HELP_MSG}"; exit 1 ;;
2016-02-01 06:43:46 +00:00
esac