# Contributing to Libidn
This file contains instructions for developers and advanced users that
wants to build from version controlled sources.
We rely on several tools to build the software, including:
- Make
- C compiler
- Automake
- Autoconf
- Libtool
- Gettext
- Texinfo
- Gperf
- help2man
- Gengetopt
- Tar
- Gzip
- Texlive & epsf (for PDF manual)
- GTK-DOC (for API manual)
- Git
- Perl
- Valgrind (optional)
- OpenJDK (for java port)
- Mono mcs (for C# port)
- fig2dev
The software is typically distributed with your operating system, and
the instructions for installing them differ. Here are some hints:
APT/DPKG-based distributions:
```
apt-get install make git autoconf automake libtool gettext autopoint cvs
apt-get install texinfo texlive texlive-plain-generic texlive-extra-utils
apt-get install help2man gtk-doc-tools dblatex valgrind gengetopt
apt-get install transfig mono-mcs gperf default-jdk-headless
```
DNF/RPM-based distributions:
```
dnf install -y make git autoconf automake libtool gettext-devel cvs
dnf install -y texinfo texinfo-tex texlive
dnf install -y help2man gtk-doc gengetopt dblatex valgrind
dnf install -y gperf java-latest-openjdk-devel
```
On macOS with Xcode and Homebrew:
```
brew install autoconf automake libtool gengetopt help2man texinfo fig2dev
```
To download the version controlled sources:
```
git clone https://git.savannah.gnu.org/git/libidn.git
cd libidn
```
The next step is to import gnulib files, run autoreconf etc:
```
./bootstrap
```
If you have a local checkout of gnulib and wants to avoid download
another copy, you may want to use:
```
./bootstrap --gnulib-refdir=../gnulib
```
Then configure the project as you would normally, for example:
```
./configure --enable-java --enable-gtk-doc-pdf
```
Then build the project:
```
make
make check
```
To prepare releases you need some additional tools:
- Mingw (to produce Windows binaries)
- Wine (to self-check Windows binaries)
- Lcov (to produce coverage HTML pages)
- Zip (to pack Windows binaries)
- Clang (to produce clang analysis)
- Doxygen (to produce doxygen manual)
- pmccabe (to produce cyclomatic code complexity report)
- ncftpput (to upload source tarballs)
APT/DPKG-based distributions:
```
apt-get install mingw-w64 wine binfmt-support lcov zip
apt-get install clang doxygen pmccabe ncftp
```
See README-release on how to make a release.
Happy hacking!
----------------------------------------------------------------------
Copyright (C) 2009-2024 Simon Josefsson
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.