notcurses/INSTALL.md
2021-08-05 06:39:09 -04:00

4.5 KiB

Building and installation

You are generally recommended to use your distro's package manager to install Notcurses; it is available prepackaged on many distributions. Otherwise, acquire the current source via

git clone https://github.com/dankamongmen/notcurses.git

Prerequisites

APT

Install build dependencies:

apt-get install build-essential cmake doctest-dev zlib1g-dev libavformat-dev libavutil-dev libncurses-dev libreadline-dev libqrcodegen-dev libswscale-dev libunistring-dev pandoc pkg-config

If you only intend to build core Notcurses (without multimedia support), you can omit libavformat-dev, libavutil-dev, and libswscale-dev from this list.

If you want to build the Python wrappers, you'll also need:

apt-get install python3-cffi python3-dev python3-pypandoc python3-setuptools

If you want to build the Rust wrappers, you'll also need:

apt-get install cargo bindgen

RPM

Install build dependencies:

dnf install cmake doctest-devel zlib-devel ncurses-devel readline-devel libqrcodegen-devel libunistring-devel OpenImageIO-devel pandoc

If you only intend to build core Notcurses (without multimedia support), you can omit OpenImageIO-devel. If you're building outside Fedora Core (e.g. with RPM Fusion), you might want to use FFmpeg rather than OpenImageIO.

Microsoft Windows

Currently, building on Windows requires MSYS2 in its 64-bit Universal C Runtime (UCRT) incarnation. This builds native Windows DLLs and EXEs, though it does not use Visual Studio. Install build dependencies:

pacman -S mingw-w64-ucrt-x86_64-cmake mingw-w64-ucrt-x86_64-doctest mingw-w64-ucrt-x86_64-ffmpeg mingw-w64-ucrt-x86_64-libunistring mingw-w64-ucrt-x86_64-ncurses mingw-w64-ucrt-x86_64-rust mingw-w64-ucrt-x86_64-toolchain

If you only intend to build core Notcurses (without multimedia support), you can omit mingw-w64-ucrt-x86_64-ffmpeg. The Windows build never uses GNU Readline, so don't worry about that.

Building

  • Create a subdirectory, traditionally build (this is not strictly necessary, but it keeps your source tree clean). Enter the directory.
  • cmake .. ** You might want to set e.g. CMAKE_BUILD_TYPE. Use -DVAR=val. ** To build without multimedia support, use -DUSE_MULTIMEDIA=none.
  • make
  • make test
  • make install
  • sudo ldconfig

The default multimedia engine is FFmpeg. You can select a different engine using USE_MULTIMEDIA. Valid values are ffmpeg, oiio (for OpenImageIO), or none. Without a multimedia engine, Notcurses will be unable to decode images and videos.

Run unit tests with make test following a successful build. If you have unit test failures, please file a bug including the output of

./notcurses-tester -p ../data

(make test also runs notcurses-tester, but hides important output).

To watch the bitchin' demo, run make demo. More details can be found on the notcurses-demo(1) man page.

Install with make install following a successful build. This installs the C core library, the C headers, the C++ library, and the C++ headers (note that the C headers are C++-safe). It does not install the Python or Rust wrappers. To install the Python wrappers (after installing the core library), run:

cd cffi
python setup.py build
python setup.py install

The Python wrappers are also available from PyPi. To install the low-level Rust wrappers (libnotcurses-sys), run:

cd rust
cargo build
cargo install

The Rust wrappers are also available from crates.io.

Build options

To set the C compiler, export CC. To set the C++ compiler, export CXX. The CMAKE_BUILD_TYPE CMake variable can be defined to any of its standard values, but must be Debug for use of USE_COVERAGE.

  • DFSG_BUILD: leave out all content considered non-free under the Debian Free Software Guidelines
  • BUILD_TESTING: build test targets
  • USE_COVERAGE: build coverage support (for developers, requires use of Clang)
  • USE_DOCTEST: build notcurses-tester with Doctest, requires BUILD_TESTING
  • USE_DOXYGEN: build interlinked HTML documentation with Doxygen
  • USE_MULTIMEDIA: ffmpeg for FFmpeg, oiio for OpenImageIO, none for none
  • USE_PANDOC: build man pages with pandoc
  • USE_POC: build small, uninstalled proof-of-concept binaries
  • USE_QRCODEGEN: build qrcode support via libqrcodegen
  • USE_READLINE: build readline support for Direct Mode
  • USE_STATIC: build static libraries (in addition to shared ones)