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
|
|
|
|
}
|
|
|
|
|
2016-05-30 05:57:04 +00:00
|
|
|
function check_submodules {
|
|
|
|
if [ -n "`git submodule status | grep -E '^\-'`" ]; then
|
|
|
|
kodev-fetch-thirdparty
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
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)
|
2016-04-29 03:31:17 +00:00
|
|
|
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
|
|
|
|
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}"
|
|
|
|
|
2016-02-19 17:39:05 +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}')
|
2016-02-19 17:38:00 +00:00
|
|
|
case $PARAM in
|
|
|
|
-v | --verbose)
|
|
|
|
export VERBOSE=1
|
|
|
|
;;
|
|
|
|
-h | --help)
|
|
|
|
echo "${BUILD_HELP_MSG}"
|
|
|
|
exit 0
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
echo "ERROR: unknown option \"$PARAM\""
|
|
|
|
echo "${BUILD_HELP_MSG}"
|
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
esac
|
2016-02-19 17:39:05 +00:00
|
|
|
shift 1
|
2016-02-19 17:38:00 +00:00
|
|
|
done
|
|
|
|
|
2016-02-01 06:43:46 +00:00
|
|
|
case $1 in
|
|
|
|
kindle)
|
|
|
|
make TARGET=kindle
|
2016-02-16 02:08:04 +00:00
|
|
|
assert_ret_zero $?
|
2016-02-01 06:43:46 +00:00
|
|
|
;;
|
|
|
|
kobo)
|
|
|
|
make TARGET=kobo
|
2016-02-16 02:08:04 +00:00
|
|
|
assert_ret_zero $?
|
2016-02-01 06:43:46 +00:00
|
|
|
;;
|
|
|
|
kindle-legacy)
|
|
|
|
make TARGET=kindle-legacy
|
2016-02-16 02:08:04 +00:00
|
|
|
assert_ret_zero $?
|
2016-02-01 06:43:46 +00:00
|
|
|
;;
|
|
|
|
android)
|
2016-05-06 12:06:48 +00:00
|
|
|
if [ ! -d "${CURDIR}/base/toolchain/android-toolchain" ]; then
|
2016-02-01 06:43:46 +00:00
|
|
|
make android-toolchain
|
2016-02-16 02:08:04 +00:00
|
|
|
assert_ret_zero $?
|
2016-02-01 06:43:46 +00:00
|
|
|
fi
|
|
|
|
make TARGET=android
|
2016-02-16 02:08:04 +00:00
|
|
|
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-02-01 06:43:46 +00:00
|
|
|
make pocketbook-toolchain
|
2016-02-16 02:08:04 +00:00
|
|
|
assert_ret_zero $?
|
2016-02-01 06:43:46 +00:00
|
|
|
fi
|
|
|
|
make TARGET=pocketbook
|
2016-02-16 02:08:04 +00:00
|
|
|
assert_ret_zero $?
|
2016-02-01 06:43:46 +00:00
|
|
|
;;
|
|
|
|
ubuntu-touch)
|
|
|
|
make TARGET=ubuntu-touch
|
2016-02-16 02:08:04 +00:00
|
|
|
assert_ret_zero $?
|
2016-02-01 06:43:46 +00:00
|
|
|
;;
|
|
|
|
win32)
|
|
|
|
make TARGET=win32
|
2016-02-16 02:08:04 +00:00
|
|
|
assert_ret_zero $?
|
2016-02-01 06:43:46 +00:00
|
|
|
;;
|
|
|
|
*)
|
2016-05-30 05:57:04 +00:00
|
|
|
check_submodules
|
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-02-01 06:43:46 +00:00
|
|
|
setup_env
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
|
|
|
function kodev-clean {
|
|
|
|
CLEAN_HELP_MSG="
|
|
|
|
usage: clean <TARGET>
|
|
|
|
|
|
|
|
TARGET:
|
|
|
|
${SUPPORTED_TARGETS}"
|
|
|
|
|
|
|
|
case $1 in
|
|
|
|
-h | --help)
|
|
|
|
echo "${CLEAN_HELP_MSG}"
|
|
|
|
exit 0
|
|
|
|
;;
|
|
|
|
kindle)
|
|
|
|
make TARGET=kindle clean
|
|
|
|
;;
|
|
|
|
kobo)
|
|
|
|
make TARGET=kobo clean
|
|
|
|
;;
|
|
|
|
kindle-legacy)
|
|
|
|
make TARGET=kindle-legacy clean
|
|
|
|
;;
|
|
|
|
android)
|
|
|
|
make TARGET=android clean
|
2016-05-06 12:06:48 +00:00
|
|
|
rm -f ./*.apk
|
2016-02-01 06:43:46 +00:00
|
|
|
;;
|
|
|
|
pocketbook)
|
|
|
|
make TARGET=pocketbook clean
|
|
|
|
;;
|
|
|
|
ubuntu-touch)
|
|
|
|
make TARGET=ubuntu-touch clean
|
|
|
|
;;
|
|
|
|
win32)
|
|
|
|
make TARGET=win32 clean
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
make clean
|
|
|
|
;;
|
|
|
|
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}"
|
|
|
|
|
|
|
|
if [ $# -lt 1 ]; then
|
|
|
|
echo "${RELEASE_HELP_MSG}"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
case $1 in
|
|
|
|
-h | --help)
|
|
|
|
echo "${RELEASE_HELP_MSG}"
|
|
|
|
exit 0
|
|
|
|
;;
|
|
|
|
kindle)
|
|
|
|
kodev-build kindle
|
|
|
|
make TARGET=kindle update
|
|
|
|
;;
|
|
|
|
kobo)
|
|
|
|
kodev-build kobo
|
|
|
|
make TARGET=kobo update
|
|
|
|
;;
|
|
|
|
kindle-legacy)
|
|
|
|
kodev-build kindle-legacy
|
|
|
|
make TARGET=kindle-legacy update
|
|
|
|
;;
|
|
|
|
android)
|
|
|
|
kodev-build android
|
|
|
|
make TARGET=android update
|
|
|
|
;;
|
|
|
|
pocketbook)
|
|
|
|
kodev-build pocketbook
|
|
|
|
make TARGET=pocketbook update
|
|
|
|
;;
|
|
|
|
ubuntu-touch)
|
|
|
|
kodev-build pocketbook
|
|
|
|
make TARGET=ubuntu-touch update
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
echo "Unsupported target for release: $1."
|
|
|
|
echo "${RELEASE_HELP_MSG}"
|
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function kodev-wbuilder {
|
|
|
|
kodev-build
|
|
|
|
echo "[*] Running wbuilder.lua..."
|
2016-05-06 12:06:48 +00:00
|
|
|
pushd "${EMU_DIR}"
|
2016-02-01 06:43:46 +00:00
|
|
|
EMULATE_READER_W=540 EMULATE_READER_H=720 ./luajit ./utils/wbuilder.lua
|
|
|
|
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
|
|
|
"
|
2016-03-17 06:05:09 +00:00
|
|
|
screen_width=540
|
|
|
|
screen_height=720
|
2016-02-19 17:39:05 +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}')
|
2016-02-01 06:43:46 +00:00
|
|
|
case $PARAM in
|
|
|
|
--disable-touch)
|
|
|
|
export DISABLE_TOUCH=1
|
|
|
|
;;
|
|
|
|
--no-build)
|
|
|
|
no_build=true
|
|
|
|
;;
|
2016-03-17 06:05:09 +00:00
|
|
|
-w | --screen-width)
|
|
|
|
screen_width=${VALUE}
|
|
|
|
;;
|
|
|
|
-h | --screen-height)
|
|
|
|
screen_height=${VALUE}
|
|
|
|
;;
|
2016-02-01 06:43:46 +00:00
|
|
|
-h | --help)
|
|
|
|
echo "${RUN_HELP_MSG}"
|
|
|
|
exit 0
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
echo "ERROR: unknown option \"$PARAM\""
|
|
|
|
echo "${RUN_HELP_MSG}"
|
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
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-02-01 06:43:46 +00:00
|
|
|
|
|
|
|
if [ $# -lt 1 ]; then
|
|
|
|
args=${CURDIR}/test
|
|
|
|
else
|
2016-05-06 12:06:48 +00:00
|
|
|
args="$*"
|
2016-03-27 08:09:06 +00:00
|
|
|
[[ $args != /* ]] && args="${CURDIR}/${args}"
|
2016-02-01 06:43:46 +00:00
|
|
|
fi
|
|
|
|
|
2016-03-17 06:05:09 +00:00
|
|
|
EMULATE_READER_W=${screen_width} EMULATE_READER_H=${screen_height} \
|
2016-03-27 08:09:06 +00:00
|
|
|
./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="
|
2016-02-16 06:34:48 +00:00
|
|
|
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.
|
2016-02-16 06:34:48 +00:00
|
|
|
|
|
|
|
OPTIONS:
|
|
|
|
|
|
|
|
--tags=TAGS only run tests with given tags
|
2016-02-04 07:37:00 +00:00
|
|
|
"
|
2016-02-19 17:39:05 +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}')
|
2016-02-16 06:34:48 +00:00
|
|
|
case $PARAM in
|
|
|
|
--tags)
|
|
|
|
opts="--tags=${VALUE}"
|
|
|
|
;;
|
|
|
|
-h | --help)
|
|
|
|
echo "${TEST_HELP_MSG}"
|
|
|
|
exit 0
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
echo "ERROR: unknown option \"$PARAM\""
|
|
|
|
echo "${TEST_HELP_MSG}"
|
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
shift
|
|
|
|
done
|
2016-02-04 07:37:00 +00:00
|
|
|
|
|
|
|
if [ $# -lt 1 ]; then
|
|
|
|
echo "${TEST_HELP_MSG}"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
setup_env
|
2016-05-06 12:06:48 +00:00
|
|
|
make "${EMU_DIR}/.busted"
|
|
|
|
pushd "${EMU_DIR}"
|
2016-02-04 07:37:00 +00:00
|
|
|
|
2016-05-06 12:06:48 +00:00
|
|
|
test_path="./spec/$1/unit"
|
2016-02-04 07:37:00 +00:00
|
|
|
|
2016-05-06 12:06:48 +00:00
|
|
|
if [ ! -z "$2" ]; then
|
2016-02-04 07:37:00 +00:00
|
|
|
test_path="${test_path}/$2"
|
|
|
|
fi
|
2016-05-24 05:38:08 +00:00
|
|
|
|
|
|
|
busted --lua="./luajit" ${opts} \
|
2016-04-19 06:50:36 +00:00
|
|
|
--no-auto-insulate \
|
2016-03-28 00:18:45 +00:00
|
|
|
--lazy \
|
2016-05-06 12:06:48 +00:00
|
|
|
-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
|
|
|
|
"
|
|
|
|
|
|
|
|
if [ $# -lt 1 ]; then
|
|
|
|
echo "${LOG_HELP_MSG}"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
case $1 in
|
|
|
|
-h | --help)
|
|
|
|
echo "${LOG_HELP_MSG}"
|
|
|
|
exit 0
|
|
|
|
;;
|
|
|
|
android)
|
2016-03-14 02:49:13 +00:00
|
|
|
adb logcat 'luajit-launcher:D KOReader:D *:S'
|
2016-02-28 20:16:32 +00:00
|
|
|
;;
|
|
|
|
*)
|
|
|
|
echo "Unsupported target: $1."
|
|
|
|
echo "${LOG_HELP_MSG}"
|
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
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
|
|
|
"
|
|
|
|
|
|
|
|
if [ $# -lt 1 ]; then
|
|
|
|
echo "Missing command."
|
|
|
|
echo "${HELP_MSG}"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
case $1 in
|
2016-03-28 00:18:45 +00:00
|
|
|
activate)
|
2016-04-10 07:35:48 +00:00
|
|
|
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)"
|
|
|
|
exec "${SHELL}"
|
2016-03-28 00:18:45 +00:00
|
|
|
;;
|
2016-02-01 06:43:46 +00:00
|
|
|
fetch-thirdparty)
|
|
|
|
kodev-fetch-thirdparty
|
|
|
|
;;
|
|
|
|
clean)
|
|
|
|
shift 1
|
2016-05-06 12:06:48 +00:00
|
|
|
kodev-clean "$@"
|
2016-02-01 06:43:46 +00:00
|
|
|
;;
|
|
|
|
build)
|
|
|
|
shift 1
|
2016-05-06 12:06:48 +00:00
|
|
|
kodev-build "$@"
|
2016-02-01 06:43:46 +00:00
|
|
|
;;
|
|
|
|
release)
|
|
|
|
shift 1
|
2016-05-06 12:06:48 +00:00
|
|
|
kodev-release "$@"
|
2016-02-01 06:43:46 +00:00
|
|
|
;;
|
|
|
|
wbuilder)
|
|
|
|
kodev-wbuilder
|
|
|
|
;;
|
|
|
|
run)
|
|
|
|
shift 1
|
2016-05-06 12:06:48 +00:00
|
|
|
kodev-run "$@"
|
2016-02-01 06:43:46 +00:00
|
|
|
;;
|
2016-02-04 07:37:00 +00:00
|
|
|
test)
|
|
|
|
shift 1
|
2016-05-06 12:06:48 +00:00
|
|
|
kodev-test "$@"
|
2016-02-04 07:37:00 +00:00
|
|
|
;;
|
2016-02-28 20:16:32 +00:00
|
|
|
log)
|
|
|
|
shift 1
|
2016-05-06 12:06:48 +00:00
|
|
|
kodev-log "$@"
|
2016-02-28 20:16:32 +00:00
|
|
|
;;
|
2016-02-01 06:43:46 +00:00
|
|
|
--help | -h)
|
|
|
|
echo "${HELP_MSG}"
|
|
|
|
exit 0
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
echo "Unknown command: $1."
|
|
|
|
echo "${HELP_MSG}"
|
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
esac
|