The __FILE__ macro is used in the EXCEPTION macro to report the file
name alongside error messages. This macro reports the file name
exactly as it is passed to the compiler. For most source files in
libgourou this is a nice relative path such as "src/libgourou.cpp".
However, for EXCEPTION instances in libgourou_common.h, the compiler
flag is "-I$(ROOT)/include", where $(ROOT) is an absolute path passed
from the higher Makefile. This results in an absolute path to the
build directory being hardcoded into the utils shared library and
binaries, and reported in error messages. Besides being less readable
than the more common relative paths, this triggers warnings from
packaging tools that detect inadvertent references to temporary build
directories that end up in compiled binaries and might indicate a bug.
There is a GCC feature -fmacro-prefix-map which allows to perform
substition on the values that are used for __FILE__. Use that option
to strip out the absolute path component, without changing any
functionality.
The feature was added to GCC on 2018-01-18 and released in GCC 8.1.0.
7365279fca
Introduction
libgourou is a free implementation of Adobe's ADEPT protocol used to add DRM on ePub/PDF files. It overcomes the lack of Adobe support for Linux platforms.
Architecture
Like RMSDK, libgourou has a client/server scheme. All platform specific functions (crypto, network...) have to be implemented in a client class (that derives from DRMProcessorClient) while server implements ADEPT protocol. A reference implementation using cURL, OpenSSL and libzip is provided (in utils directory).
Main functions to use from gourou::DRMProcessor are:
- Get an ePub from an ACSM file : fulfill() and download()
- Create a new device : createDRMProcessor()
- Register a new device : signIn() and activateDevice()
- Remove DRM : removeDRM()
- Return loaned book : returnLoan()
You can import configuration from (at least):
- Kobo device : .adept/device.xml, .adept/devicesalt and .adept/activation.xml
- Bookeen device : .adobe-digital-editions/device.xml, root/devkey.bin and .adobe-digital-editions/activation.xml
Or create a new one. Be careful: there is a limited number of devices that can be created by one account.
ePub are encrypted using a shared key: one account / multiple devices, so you can create and register a device into your computer and read downloaded (and encrypted) ePub file with your eReader configured using the same AdobeID account.
For those who want to remove DRM without adept_remove, you can export your private key and import it within Calibre an its DeDRM plugin.
Dependencies
For libgourou:
externals :
- libpugixml
internals:
- uPDFParser
For utils:
- libcurl
- openssl
- libzip
- libpugixml
External & utils dependencies has to be installed by your package manager (apt for example). Use -dev flavours to get needed headers. Internal libraries are automatically fetched and statically compiled during the first compilation. When you update libgourou's repository, don't forget to update internal libraries with:
make update_lib
Compilation
Use make command
make [CROSS=XXX] [DEBUG=(0*|1)] [STATIC_UTILS=(0*|1)] [BUILD_UTILS=(0|1*)] [BUILD_STATIC=(0*|1)] [BUILD_SHARED=(0|1*)] [all*|clean|ultraclean|build_utils|install|uninstall]
CROSS can define a cross compiler prefix (ie arm-linux-gnueabihf-)
DEBUG can be set to compile in DEBUG mode
BUILD_UTILS to build utils or not
STATIC_UTILS to build utils with static library (libgourou.a) instead of default dynamic one (libgourou.so)
BUILD_STATIC build libgourou.a if 1, nothing if 0, can be combined with BUILD_SHARED
BUILD_SHARED build libgourou.so if 1, nothing if 0, can be combined with BUILD_STATIC
other variables are DESTDIR and PREFIX to handle destination install directory
- Default value
Utils
First, add libgourou.so to your LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD
You can optionaly specify your .adept directory
export ADEPT_DIR=/home/XXX
Then, use utils as following:
You can import configuration from your eReader or create a new one with utils/adept_activate:
./utils/adept_activate -u <AdobeID USERNAME>
Then a /home//.config/adept directory is created with all configuration file
To download an ePub/PDF:
./utils/acsmdownloader <ACSM_FILE>
To export your private key (for DeDRM software):
./utils/acsmdownloader --export-private-key [-o adobekey_1.der]
To remove ADEPT DRM:
./utils/adept_remove <encryptedFile>
To list loaned books:
./utils/adept_loan_mgt [-l]
To return a loaned book:
./utils/adept_loan_mgt -r <id>
You can get utils full options description with -h or --help switch
Binary packages
Compiled version (and AppImage) of libgourou and utils are available in Release page
Docker
A docker image (by bcliang) is available at https://github.com/bcliang/docker-libgourou/
Copyright
Grégory Soutadé
License
libgourou : LGPL v3 or later
utils : BSD
Special thanks
- Jens for all test samples and utils testing
- Milian for debug & code
- Berwyn H for all test samples, feedbacks, patches and kind donation
Donation
https://www.paypal.com/donate/?hosted_button_id=JD3U6XMZCPHKN
Donators
- Berwyn H
- bwitt
- Ismail
- Radon