Installation instructions
=========================
:docext: adoc

Download a tarball from https://github.com/jonas/tig/releases[] or clone the Tig
repository https://github.com/jonas/tig[https://github.com/jonas/tig.git].

The latest version is:
https://github.com/jonas/tig/releases/download/tig-2.6.1/tig-2.6.1.tar.gz[tig-2.6.1]
https://github.com/jonas/tig/releases/download/tig-2.6.1/tig-2.6.1.tar.gz.sha256[(sha256)]

The quick and simple way to install Tig is:

	$ make
	$ make install

By default, `tig` is installed in `$HOME/bin`. To install `tig` elsewhere set
`prefix` to the desired path:

	$ make prefix=/usr/local
	$ sudo make install prefix=/usr/local

Additional build options can be defined in the `config.make` file, which is
loaded automatically when running `make` if it exists. By default,
`contrib/config.make-$kernel_name` is loaded if it exists (currently
available for Linux, macOS [`Darwin`] and Cygwin but Linux users should
prefer the `configure` script). See `contrib/config.make` for example build
options.

Documentation files, such as manpages, are distributed in the release tarballs,
and can be installed using:

	$ make install-doc

When installing directly from the Tig repository, `make install-doc` will assume
that the documentation tool chain is available and build the documentation
locally. In case you do not wish to install the required tools, documentation
can be installed from the 'release' branch using:

	$ make install-release-doc

Before upgrading, you are advised to read link:NEWS.{docext}[the release notes].

Installation using `configure`
------------------------------

If you prefer an autotools-based installation process, you can use the
`configure` script to detect dependencies and enable features. If you downloaded
the Tig sources from https://github.com/jonas/tig/releases/[a release tarball]
there's already a `configure` script. However, if you are building from the Tig
repository, you need to ensure that `autoconf` is installed on your system and
generate the `configure` script yourself.

To install using `configure`, run the following commands:

	$ make configure # Only run if you are building from the Git repository
	$ ./configure
	$ make
	$ make install

If your `iconv` library is not in the default library and include path, you need
to pass the `--with-libiconv` option to `configure` to tell it where to look.

If you have installed ncurses with brew, run configure with the following
flags to have it properly detected (note this done out of the box if you
build without `configure`):

        $ ./configure LDFLAGS=-L/usr/local/opt/ncurses/lib CPPFLAGS=-I/usr/local/opt/ncurses/include

Installation using Homebrew
---------------------------

You can use link:https://brew.sh[Homebrew] to install Tig on macOS and Linux:

        $ brew install tig

Installation using Nix
----------------------

You can use link:https://nixos.org/nix/[Nix] to install Tig on NixOS, or any Linux/macOS distribution with Nix installed:

        $ nix-env -i tig
	
Installation on Linux
---------------------

Depending on your distribution, you may be able to use one of the following commands to install Tig on Linux:

        $ apt-get install tig (Debian, Ubuntu)
        $ dnf install tig (Fedora)
        $ pacman -S tig (Arch Linux)
        $ apk add tig (Alpine)

Installation on FreeBSD
-----------------------

You can use link:https://man.freebsd.org/pkg/8[pkg] to install Tig on FreeBSD:

        $ pkg install tig

Installation on Windows
-----------------------

Easiest way is to install link:https://gitforwindows.org/[Git-for-Windows],
it comes bundled with `tig`.

Alternatively, you can also use it by installing link:https://www.cygwin.com/[Cygwin].

If you want to install from the sources, you must then install the packages `git`,
`gcc-core`, `make`, `sed`, `libiconv-devel` and `libncurses-devel`, and optionally
`libreadline-devel` and `libpcre2-devel`. Use `cygport` or extract the tarball and
install by using `configure` as explained above.

If you want to install from the Git repository, then you will also need the
`automake` and `autoconf` packages. Then run `make configure` and install by
using `configure` as explained above.

Build configuration
-------------------

Build settings are read from the file `config.make` and for certain systems also
from `contrib/config.make-$kernel`. An example of the latter is macOS, where
`contrib/config.make-Darwin` provides out-of-the-box configuration for using the
system ncurses library and linking with the iconv library. This makes it easy to
configure the build without having to use the `configure` script. As a side
note, `configure` itself generates a `config.make` file.

Apart from the different standard `make` build variables (`CC`, `CFLAGS`, etc.)
and standard `configure` variables (`prefix`, `bindir`, etc.), build settings
can be one of the following flags:

 - `NO_SETENV`: Define this variable to enable work-around for missing
   `setenv()`.
 - `NO_MKSTEMPS`: Define this variable to enable work-around for missing
   `mkstemps()`.
 - `NO_WORDEXP`: Define this variable to enable work-around for missing
   `wordexp()`.
 - `NO_BUILTIN_TIGRC`: Reduce the size of the binary by not including a
   built-in tigrc. The built-in tigrc is used as a fallback when no
   `tigrc` is found in the system configuration directory (e.g. `/etc`).
 - `TIG_USER_CONFIG`: Allow customizing the `tigrc` path (default `~/.tigrc`).

The following example `config.make` manually configures Tig to use the ncurses
library with wide character support and include the proper ncurses header file
(see tig.h for more information):

	LDLIBS = -lncursesw
	CPPFLAGS = -DHAVE_NCURSESW_CURSES_H

For more examples of build settings, see `contrib/config.make` and
`config.make.in`.

Tools and packages
------------------

The following tools and packages are needed:

[cols="2<,8<",options="header"]
|=============================================================================
|Tool				|Description
|git-core			|Tig is just a frontend for Git.
|ncurses or ncursesw		|Be sure to have the development files
				 installed. Usually they are available in a
				 separate package ending with `-dev`.

				 Ncurses with wide character support (ncursesw)
				 is required to properly handle UTF-8 encoded
				 strings.

				 Note for packagers: For Tig's `configure`
				 script to work as expected you should avoid
				 configuring and building ncurses using
				 `--with-shared`.
|iconv				|If iconv is not provided by the c library
				 you need to change the Makefile to link it
				 into the binary.
|=============================================================================

The following tools and packages are optional and mainly needed for creating the
configure script and building documentation:

[cols="2<,8<",options="header"]
|=============================================================================
|Tool				|Description
|readline			|Adds support for completion and history in
				 search and command prompts.
|PCRE / PCRE2			|Adds support for Perl Compatible Regular
				 Expressions in searches.
|automake and autoconf		|Contains autoreconf for generating configure
				 from configure.ac.
|asciidoc (>= 8.4)		|Generates HTML and (DocBook) XML from text.
|xmlto				|Generates manpages and chunked HTML from XML.
|DocBook XSL (>= 1.72.0)	|Used by xmlto for building manpages.
|DocBook (DSSL/Jade) tools	|Generates PDF from XML.
				 Also known as docbook-utils.
|=============================================================================
