Packaging deal.II
Keywords: deal.II packaging

# Packaging deal.II for a Unix-like distribution

## Overview

This page describes how to write packaging scripts for deal.II. deal.II is written in C++11 and is known to work with GCC, Clang, and Intel compilers. It is licensed under the LGPL v2.1. We recommend reading the porting document first for a description of the requirements of the build system. deal.II does not support any type of plug-in architecture for dependencies: all dependencies must be provided at compile-time. The only required dependency of deal.II is boost.

## Examples

deal.II is already available in many Linux distributions: for examples of packaging scripts see, e.g.,

- a packaging script for the Arch Linux AUR,
- a packaging script for the Gentoo science overlay, and
- a packaging setup for Debian stable.

## Suggestions

- deal.II defaults to installing several configuration files (`LICENSE.md`, `README.md`, `detailed.log`, and `summary.log`) in the installation prefix. We recommend deleting these files. `LICENSE.md` should be installed in the correct directory for software licenses.
- By default, all tutorial programs are compiled in both debug and release mode and installed in the `bin` subdirectory of the installation prefix. We recommend disabling the examples by configuring with the `-DDEAL_II_COMPILE_EXAMPLES=OFF` option.
- The CMake configuration of deal.II will determine what compiler is being used and pick reasonable optimization and debugging flags automatically. Further flags for debug and release mode may be supplied by `DEAL_II_CXX_FLAGS_DEBUG` and `DEAL_II_CXX_FLAGS_RELEASE` variables passed to CMake, respectively.
- The flag `DEAL_II_ALLOW_PLATFORM_INTROSPECTION` (enabled by default) enables (as the name implies) CPU-specific issues (usually for vectorization).
- The flag `DEAL_II_WITH_64BIT_INDICES` changes an integral type used for indices in the library. This value should be made consistent with the way PETSc is configured.
- deal.II includes copies of boost, Kokkos, muParser, TBB, and UMFPACK. These bundled packages should be disabled via `-DDEAL_II_ALLOW_BUNDLED=OFF` and these dependencies should instead be resolved by ensuring that whenever deal.II is installed, the packages above are also installed.
- The standard build of GSL does not link `libgsl.so` against a CBLAS implementation, which results in underlinkage in deal.II. This is resolved, for example, in the Arch Linux PKGBUILD script by stripping the `-Wl,--as-needed` flag from the linker flags.