Radon Rosborough d7bd98e719 Use -fmacro-prefix-map for utils
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
2026-03-14 13:51:40 +01:00
2026-01-19 14:46:49 -05:00
2026-03-14 13:51:40 +01:00
2026-01-25 10:15:35 +01:00
2025-11-17 22:29:35 +01:00

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/

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
Description
No description provided
Readme 2 MiB
2026-01-25 10:15:35 +01:00
Languages
C++ 94.8%
Roff 2.4%
Makefile 1.7%
C 0.9%
Shell 0.2%