2018-04-15 18:35:02 +00:00
[![KOReader ](https://raw.githubusercontent.com/koreader/koreader.github.io/master/koreader-logo.png )](https://koreader.rocks)
[Download ](https://github.com/koreader/koreader/releases ) •
[Wiki ](https://github.com/koreader/koreader/wiki ) •
[Developer docs ](http://koreader.rocks/doc/ ) •
[Forum ](http://www.mobileread.com/forums/forumdisplay.php?f=276 ) •
[Gitter **Chat** ][gitter-link]
2017-09-07 04:26:20 +00:00
[![Build Status][circleci-badge]][circleci-link]
2014-10-07 05:55:48 +00:00
[![Coverage Status][coverage-badge]][coverage-link]
[![AGPL Licence][licence-badge]](COPYING)
2012-09-16 17:56:58 +00:00
2015-03-19 08:11:47 +00:00
2014-10-26 01:07:12 +00:00
KOReader is a document viewer application, originally created for Kindle
2015-10-06 14:14:26 +00:00
e-ink readers. It currently runs on Kindle, Kobo, PocketBook, Ubuntu Touch
2017-11-11 16:00:56 +00:00
and Android devices. Developers can also run a KOReader emulator
2018-06-02 16:10:55 +00:00
for development purposes on desktop PCs with Linux, Windows and
2017-11-11 16:00:56 +00:00
Mac OSX.
2012-09-16 17:56:58 +00:00
2014-10-07 13:40:40 +00:00
Main features for users
-----------------------
2012-09-16 17:56:58 +00:00
2014-10-07 13:40:40 +00:00
* supports multi-format documents including:
2017-12-24 14:46:23 +00:00
* paged fixed-layout formats: PDF, DjVu, CBT, and CBZ
2014-10-07 13:40:40 +00:00
* reflowable e-book formats: ePub, fb2, mobi, doc, chm and plain text
* scanned PDF/DjVu documents can also be reflowed with built-in K2pdfopt
* use StarDict dictionaries / Wikipedia to lookup words
* highlights can be exported to Evernote cloud account
2017-10-31 17:38:21 +00:00
* highly customizable reader view and typesetting
2014-10-07 13:40:40 +00:00
* setting arbitrary page margins / line space
* choosing external fonts and styles
* built-in multi-lingual hyphenation dictionaries
* supports adding custom online OPDS catalogs
* calibre integration
2014-10-09 01:41:47 +00:00
* search calibre metadata on your koreader device
* send ebooks from calibre library to your koreader device wirelessly
2014-10-07 13:40:40 +00:00
* browser calibre library and download ebooks via calibre OPDS server
2014-10-09 01:41:47 +00:00
* can share ebooks with other koreader devices wirelessly
2014-10-07 13:40:40 +00:00
* various optimizations for e-ink devices
* paginated menus without animation
* adjustable text contrast
* multi-lingual user interface
* online Over-The-Air software update
2012-09-16 17:56:58 +00:00
2014-10-09 01:41:47 +00:00
Highlights for developers
2014-10-07 13:40:40 +00:00
--------------------------
* frontend written in Lua scripting language
2017-10-10 17:46:12 +00:00
* multi-platform support through a single code-base
* you can help develop KOReader in any editor without compilation
* high runtime efficiency through LuaJIT acceleration
2016-02-10 09:46:18 +00:00
* light-weight self-contained widget toolkit with small memory footprint
2014-10-07 13:40:40 +00:00
* extensible with plugin system
* interfaced backends for documents parsing and rendering
2014-10-26 01:07:12 +00:00
* high quality document backend libraries like MuPDF, DjvuLibre and CREngine
2014-10-07 13:40:40 +00:00
* interacting with frontend via LuaJIT FFI for best performence
* in active development
2017-10-10 17:46:12 +00:00
* with contributions from developers around the world
* continuous integration with CircleCI
* with unit tests (busted), static code analysis (luacheck) and code coverage test (luacov/coveralls)
* automated nightly builds available at http://build.koreader.rocks/download/nightly/
2014-10-07 13:40:40 +00:00
* free as in free speech
* licensed under Affero GPL v3
* all dependencies are free software
2013-03-24 14:08:42 +00:00
2014-10-26 01:07:12 +00:00
Check out the [KOReader wiki ](https://github.com/koreader/koreader/wiki ) to learn
2014-05-09 14:42:30 +00:00
more about this project.
2014-10-07 13:40:40 +00:00
Building Prerequisites
======================
2013-03-24 14:08:42 +00:00
2014-11-29 20:46:33 +00:00
These instructions for how to get and compile the source are intended for a Linux
2014-05-29 13:09:22 +00:00
OS. Windows users are suggested to develop in a [Linux VM][linux-vm] or use Wubi.
2013-03-24 14:08:42 +00:00
2018-11-05 21:54:36 +00:00
If you only want to work with Lua frontend stuff, you can grab the AppImage and
run it with `--appimage-extract` .
2015-08-02 18:09:54 +00:00
To get and compile the source you must have `patch` , `wget` , `unzip` , `git` ,
2015-10-06 14:14:26 +00:00
`cmake` and `luarocks` installed, as well as a version of `autoconf`
2015-08-02 18:09:54 +00:00
greater than 2.64. You also need `nasm` and of course a compiler like `gcc`
or `clang` . If you want to cross-compile for other architectures, you need a proper
2017-10-02 20:03:54 +00:00
cross-compile toolchain. Your GCC should be at least version 4.8.
2013-09-26 05:06:10 +00:00
2014-11-29 20:46:33 +00:00
Users of Debian and Ubuntu can install the required packages using:
2014-03-25 14:26:36 +00:00
```
2015-10-06 14:14:26 +00:00
sudo apt-get install build-essential git patch wget unzip \
2017-02-28 19:03:24 +00:00
gettext autoconf automake cmake libtool nasm luarocks \
2016-09-09 05:37:09 +00:00
libssl-dev libffi-dev libsdl2-dev libc6-dev-i386 xutils-dev linux-libc-dev:i386 zlib1g:i386
2014-03-25 14:26:36 +00:00
```
2017-08-23 11:35:03 +00:00
If you are running Fedora, be sure to install the package `libstdc++-static` .
2017-02-28 19:03:24 +00:00
That's all you need to get the emulator up and running with `./kodev build` and `./kodev run` .
2013-03-24 14:08:42 +00:00
2014-05-29 13:09:22 +00:00
Cross compile toolchains are available for Ubuntu users through these commands:
2014-02-13 14:49:45 +00:00
```
2014-03-23 08:55:15 +00:00
# for Kindle
2014-02-13 14:49:45 +00:00
sudo apt-get install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi
2015-10-03 07:41:07 +00:00
# for Kobo and Ubuntu touch
2014-02-13 14:49:45 +00:00
sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
2014-09-25 14:25:43 +00:00
# for Win32
2014-10-26 01:07:12 +00:00
sudo apt-get install gcc-mingw-w64-i686 g++-mingw-w64-i686
2014-02-13 14:49:45 +00:00
```
2017-09-28 19:23:30 +00:00
The packages `pkg-config-arm-linux-gnueabihf` and `pkg-config-arm-linux-gnueabi` may
block you from building for Kobo or Kindle. Remove them if you get an ld error,
2016-04-26 02:45:55 +00:00
`/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/bin/
ld: cannot find -lglib-2.0`
2018-06-02 16:10:55 +00:00
**NOTE:** In the specific case of Kindle & Kobo targets, while we make some effort to support these Linaro/Ubuntu TCs,
they do *not* exactly target the proper devices. While your build will go fine, this may lead to runtime failure.
As time goes by, and/or the more bleeding-edge your distro is, the greater the risk for mismatch gets.
Thankfully, we have a distribution-agnostic solution for you: [koxtoolchain ](https://github.com/koreader/koxtoolchain )!
This will allow you to build the *exact* same TCs used to build the nightlies, thanks to the magic of [crosstool-ng ](https://github.com/crosstool-ng/crosstool-ng ).
2018-03-21 19:00:26 +00:00
On Mac OS X you may need to install the following tools using [Homebrew ](https://brew.sh/ ):
2016-04-14 17:18:19 +00:00
```
2018-03-21 19:00:26 +00:00
brew install nasm binutils libtool autoconf automake cmake makedepend sdl2 lua51 gettext pkg-config wget md5sha1sum
echo 'export PATH="/usr/local/opt/gettext/bin:$PATH"' >> "$HOME"/.bash_profile
2016-04-14 17:18:19 +00:00
```
2018-03-21 19:00:26 +00:00
If you run into a gettext error while building glib, try `brew link --force gettext` to override the built-in Mac OS BSD gettext with GNU GetText.
2017-10-04 06:53:00 +00:00
The KOReader Android build requires `ant` , `openjdk-8-jdk` and `p7zip-full` . A compatible version of the Android NDK and SDK will be downloaded automatically by `./kodev build android` if no NDK or SDK is provided in environment variables. For that purpose you can use `NDK=/ndk/location SDK=/sdk/location ./kodev build android` .
2016-09-09 05:37:09 +00:00
2017-09-28 19:23:30 +00:00
Users of Debian Jessie first need to configure the `backports` repository:
2016-09-09 05:37:09 +00:00
```
sudo echo "deb http://ftp.debian.org/debian jessie-backports main" > /etc/apt/sources.list.d/backports.list
sudo apt-get update
```
For both Ubuntu and Debian, install the packages:
```
sudo apt-get install ant openjdk-8-jdk
```
Users on Debian finally need to remove JRE version 7:
2014-06-04 11:19:22 +00:00
```
2016-09-09 05:37:09 +00:00
sudo apt-get remove openjdk-7-jre-headless
2014-06-04 11:19:22 +00:00
```
2014-05-29 13:09:22 +00:00
2016-05-14 08:16:23 +00:00
In order to build KOReader package for Ubuntu Touch, the `click` package management
2015-10-06 14:14:26 +00:00
tool is needed, Ubuntu users can install it with:
```
sudo apt-get install click
```
2014-10-26 01:07:12 +00:00
You might also need SDL library packages if you want to compile and run
2016-05-14 08:16:23 +00:00
KOReader on Linux PC. Fedora users can install `SDL` and `SDL-devel` package.
2017-09-28 19:23:30 +00:00
Ubuntu users probably need to install the `libsdl2-dev` package:
2013-03-24 14:08:42 +00:00
2013-04-20 22:28:42 +00:00
Getting the source
2016-01-10 00:52:06 +00:00
==================
2013-03-24 14:08:42 +00:00
2013-04-20 22:28:42 +00:00
```
git clone https://github.com/koreader/koreader.git
2016-02-01 06:43:46 +00:00
cd koreader & & ./kodev fetch-thirdparty
2013-04-20 22:28:42 +00:00
```
2013-03-24 14:08:42 +00:00
2016-01-10 00:52:06 +00:00
Building, Running and Testing
=============================
2013-03-24 14:08:42 +00:00
2016-04-14 17:18:19 +00:00
For emulating KOReader on Linux, Windows and Mac OSX
2014-05-29 13:09:22 +00:00
-------------
2013-03-24 19:13:03 +00:00
2017-09-28 19:23:30 +00:00
To build an emulator on your current Linux or OSX machine:
2013-03-24 19:13:03 +00:00
```
2016-02-01 06:43:46 +00:00
./kodev build
2013-03-24 16:18:53 +00:00
```
2013-03-24 19:13:03 +00:00
2016-02-10 09:46:18 +00:00
If you want to compile the emulator for Windows run:
2014-09-25 14:25:43 +00:00
```
2016-02-01 06:43:46 +00:00
./kodev build win32
2014-09-25 14:25:43 +00:00
```
2017-09-28 19:23:30 +00:00
To run KOReader on your development machine:
2013-04-20 22:31:24 +00:00
```
2016-02-10 09:46:18 +00:00
./kodev run
2013-04-20 22:31:24 +00:00
```
2017-11-28 15:35:46 +00:00
To automatically set up a number of primarily luarocks-related environment variables:
```
./kodev activate
```
2016-02-01 06:43:46 +00:00
To run unit tests:
2014-03-25 14:26:36 +00:00
```
2016-02-10 09:46:18 +00:00
./kodev test base
./kodev test front
2014-03-25 14:26:36 +00:00
```
2017-11-28 15:35:46 +00:00
To run a specific unit test (for test development):
```
./kodev test front readerbookmark_spec.lua
```
2017-09-28 19:23:30 +00:00
NOTE: Extra dependencies for tests: `busted` and `ansicolors` from luarocks.
2016-05-24 05:38:08 +00:00
2016-02-10 09:46:18 +00:00
To run Lua static analysis:
2015-04-27 00:43:32 +00:00
```
2016-01-04 20:17:10 +00:00
make static-check
2015-04-27 00:43:32 +00:00
```
2017-09-28 19:23:30 +00:00
NOTE: Extra dependencies for tests: `luacheck` from luarocks
2016-05-24 05:38:08 +00:00
2017-09-07 04:26:20 +00:00
You may need to checkout the [circleci config file][circleci-conf] to setup up
2014-10-26 01:07:12 +00:00
a proper testing environment. Briefly, you need to install `luarocks` and
then install `busted` with `luarocks` . The "eng" language data file for
2014-03-25 14:26:36 +00:00
tesseract-ocr is also need to test OCR functionality. Finally, make sure
that `luajit` in your system is at least of version 2.0.2.
2017-09-29 11:36:10 +00:00
You can also specify the size and DPI of the emulator's screen using
`-w=X` (width), `-h=X` (height), and `-d=X` (DPI). There is also a convenience
`-s` (simulate) flag with some presets like `kobo-aura-one` , `kindle3` , and
`hidpi` . The latter is a fictional device with `--screen_width=1500` ,
2017-09-29 11:55:18 +00:00
`--screen_height=2000` and `--screen_dpi=600` to help ensure DPI scaling works correctly.
2017-09-29 11:36:10 +00:00
Sample usage:
```
./kodev run -s=kobo-aura-one
```
2013-03-24 19:13:03 +00:00
2017-09-28 19:23:30 +00:00
To use your own koreader-base repo instead of the default one change the `KOR_BASE`
2014-01-01 21:07:28 +00:00
environment variable:
```
2014-06-04 09:35:47 +00:00
make KOR_BASE=../koreader-base
2014-01-01 21:07:28 +00:00
```
2017-09-25 20:57:49 +00:00
This will be handy if you are developing `koreader-base` and you want to test your
2017-09-28 19:23:30 +00:00
modifications with the KOReader frontend. NOTE: this only supports relative path for now.
2014-01-01 21:07:28 +00:00
2017-02-28 19:03:24 +00:00
For EReader devices (kindle, kobo, pocketbook, ubuntu-touch)
---------------------
2017-09-29 11:55:18 +00:00
To build an installable package for Kindle:
2017-02-28 19:03:24 +00:00
```
./kodev release kindle
```
2017-09-29 11:55:18 +00:00
To build an installable package for Kobo:
2017-02-28 19:03:24 +00:00
```
./kodev release kobo
```
2017-09-29 11:55:18 +00:00
To build an installable package for PocketBook:
2017-02-28 19:03:24 +00:00
```
./kodev release pocketbook
```
2017-09-29 11:55:18 +00:00
To build an installable package for Ubuntu Touch
2017-02-28 19:03:24 +00:00
```
./kodev release ubuntu-touch
```
You may checkout our [nightlybuild script][nb-script] to see how to build a
package from scratch.
For Android devices
-------------------
2017-09-28 19:23:30 +00:00
A compatible version of the Android NDK and SDK will be downloaded automatically by the
`kodev` command. If you already have an Android NDK and SDK installed that you would like
to use instead, make sure that the `android` and `ndk-build` tools can be found in your
`PATH` environment variable. Additionally, the `NDK` and `SDK` variables should point
to the root directory of the Android NDK and SDK respectively.
2017-02-28 19:03:24 +00:00
2017-09-28 19:23:30 +00:00
Then, run this command to build an installable package for Android:
2017-02-28 19:03:24 +00:00
```
./kodev release android
```
2013-03-24 16:18:53 +00:00
2014-06-05 12:54:36 +00:00
Translation
2016-02-10 09:46:18 +00:00
===========
2014-06-05 12:54:36 +00:00
2014-10-26 01:07:12 +00:00
Please refer to [l10n's README][l10n-readme] to grab the latest translations
2016-05-14 08:16:23 +00:00
from [the KOReader project on Transifex][koreader-transifex] with this command:
2014-06-05 12:54:36 +00:00
```
make po
```
If your language is not listed on the Transifex project, please don't hesitate
to send a language request [here][koreader-transifex].
2014-11-29 20:46:33 +00:00
Variables in translation
-------
Some strings contain variables that should remain unaltered in translation.
For example:
```lua
The title of the book is %1 and its author is %2.
```
This might be displayed as:
```lua
The title of the book is The Republic and its author is Plato.
```
To aid localization the variables may be freely positioned:
```lua
De auteur van het boek is %2 en de titel is %1.
```
That would result in:
```lua
De auteur van het boek is Plato en de titel is The Republic.
```
2013-04-20 22:28:42 +00:00
Use ccache
==========
2013-03-24 19:13:03 +00:00
2013-04-20 22:28:42 +00:00
Ccache can speed up recompilation by caching previous compilations and detecting
2017-10-15 11:52:29 +00:00
when the same compilation is being repeated. In other words, it will decrease
2017-09-28 19:23:30 +00:00
build time when the sources have been built before. Ccache support has been added to
2017-10-15 11:52:29 +00:00
KOReader's build system. To install ccache:
2013-04-20 22:28:42 +00:00
2014-09-25 14:25:43 +00:00
* in Ubuntu use:`sudo apt-get install ccache`
* in Fedora use:`sudo yum install ccache`
2017-10-15 11:52:29 +00:00
* from source:
* download the latest ccache source from http://ccache.samba.org/download.html
* extract the source package in a directory
* `cd` to that directory and use:`./configure && make && sudo make install`
2013-04-20 22:28:42 +00:00
* to disable ccache, use `export USE_NO_CCACHE=1` before make.
2017-11-18 09:37:59 +00:00
* for more information about ccache, visit: https://ccache.samba.org/
2013-03-26 23:21:30 +00:00
2013-04-20 22:31:24 +00:00
[base-readme]:https://github.com/koreader/koreader-base/blob/master/README.md
2016-11-14 05:19:08 +00:00
[nb-script]:https://gitlab.com/koreader/nightly-builds/blob/master/build_release.sh
2017-10-10 17:46:12 +00:00
[circleci-badge]:https://circleci.com/gh/koreader/koreader.svg?style=shield
2017-09-07 04:26:20 +00:00
[circleci-link]:https://circleci.com/gh/koreader/koreader
2018-07-03 21:16:45 +00:00
[circleci-conf]:https://github.com/koreader/koreader/blob/master/.circleci/config.yml
2014-05-29 13:09:22 +00:00
[linux-vm]:http://www.howtogeek.com/howto/11287/how-to-run-ubuntu-in-windows-7-with-vmware-player/
2014-06-05 12:54:36 +00:00
[l10n-readme]:https://github.com/koreader/koreader/blob/master/l10n/README.md
[koreader-transifex]:https://www.transifex.com/projects/p/koreader/
2017-10-10 15:57:50 +00:00
[coverage-badge]:https://codecov.io/gh/koreader/koreader/branch/master/graph/badge.svg
[coverage-link]:https://codecov.io/gh/koreader/koreader
2014-10-07 05:55:48 +00:00
[licence-badge]:http://img.shields.io/badge/licence-AGPL-brightgreen.svg
2015-10-06 14:14:26 +00:00
[gitter-badge]:https://badges.gitter.im/Join%20Chat.svg
[gitter-link]:https://gitter.im/koreader/koreader?utm_source=badge& utm_medium=badge& utm_campaign=pr-badge& utm_content=badge
2018-08-18 06:42:14 +00:00
Contributors
============
[![0 ](https://sourcerer.io/fame/Frenzie/koreader/koreader/images/0 )](https://sourcerer.io/fame/Frenzie/koreader/koreader/links/0)
[![1 ](https://sourcerer.io/fame/Frenzie/koreader/koreader/images/1 )](https://sourcerer.io/fame/Frenzie/koreader/koreader/links/1)
[![2 ](https://sourcerer.io/fame/Frenzie/koreader/koreader/images/2 )](https://sourcerer.io/fame/Frenzie/koreader/koreader/links/2)
[![3 ](https://sourcerer.io/fame/Frenzie/koreader/koreader/images/3 )](https://sourcerer.io/fame/Frenzie/koreader/koreader/links/3)
[![4 ](https://sourcerer.io/fame/Frenzie/koreader/koreader/images/4 )](https://sourcerer.io/fame/Frenzie/koreader/koreader/links/4)
[![5 ](https://sourcerer.io/fame/Frenzie/koreader/koreader/images/5 )](https://sourcerer.io/fame/Frenzie/koreader/koreader/links/5)
[![6 ](https://sourcerer.io/fame/Frenzie/koreader/koreader/images/6 )](https://sourcerer.io/fame/Frenzie/koreader/koreader/links/6)
[![7 ](https://sourcerer.io/fame/Frenzie/koreader/koreader/images/7 )](https://sourcerer.io/fame/Frenzie/koreader/koreader/links/7)