diff options
Diffstat (limited to 'README.md')
-rw-r--r-- | README.md | 190 |
1 files changed, 190 insertions, 0 deletions
diff --git a/README.md b/README.md new file mode 100644 index 0000000..db93419 --- /dev/null +++ b/README.md @@ -0,0 +1,190 @@ +[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/330/badge)](https://bestpractices.coreinfrastructure.org/projects/330) + +|Branch|CI system|Status|Test suite coverage|Fuzzer coverage| +|:----:|:-------:|-----:|:------:|:-------------:| +|Master/3.7.x|Gitlab|[![build status](https://gitlab.com/gnutls/gnutls/badges/master/pipeline.svg)](https://gitlab.com/gnutls/gnutls/commits/master)|[![coverage report](https://gitlab.com/gnutls/gnutls/badges/master/coverage.svg)](https://gnutls.gitlab.io/coverage/master)|[![Fuzzer coverage report](https://gnutls.gitlab.io/coverage/master-fuzz/badge.svg)](https://gnutls.gitlab.io/coverage/master-fuzz)| +|Master/3.7.x|Github Actions|[![build status](https://github.com/gnutls/gnutls/workflows/MacOS%20CI/badge.svg)](https://github.com/gnutls/gnutls/actions)|N/A|N/A| +|3.6.x|Gitlab|[![build status](https://gitlab.com/gnutls/gnutls/badges/gnutls_3_6_x/pipeline.svg)](https://gitlab.com/gnutls/gnutls/commits/gnutls_3_6_x)|N/A|N/A| + + +# GnuTLS -- Information for developers + +GnuTLS implements the TLS/SSL (Transport Layer Security aka Secure +Sockets Layer) protocol. Additional information can be found at +[www.gnutls.org](https://www.gnutls.org/). + +This file contains instructions for developers and advanced users that +want to build from version controlled sources. See [INSTALL.md](INSTALL.md) +for building released versions. + +We require several tools to check out and build the software, including: + +* [Make](https://www.gnu.org/software/make/) +* [Automake](https://www.gnu.org/software/automake/) (use 1.11.3 or later) +* [Autoconf](https://www.gnu.org/software/autoconf/) +* [Python](https://www.python.org/) (use 3.6 or later) +* [Libtool](https://www.gnu.org/software/libtool/) +* [Gettext](https://www.gnu.org/software/gettext/) +* [Texinfo](https://www.gnu.org/software/texinfo/) +* [Tar](https://www.gnu.org/software/tar/) +* [Gzip](https://www.gnu.org/software/gzip/) +* [Texlive & epsf](https://www.tug.org/texlive/) (for PDF manual) +* [GTK-DOC](https://www.gtk.org/gtk-doc/) (for API manual) +* [Git](https://git-scm.com/) +* [Perl](https://www.cpan.org/) +* [Nettle](https://www.lysator.liu.se/~nisse/nettle/) +* [Guile](https://www.gnu.org/software/guile/) +* [p11-kit](https://p11-glue.github.io/p11-glue/p11-kit.html) +* [gperf](https://www.gnu.org/software/gperf/) +* [libtasn1](https://www.gnu.org/software/libtasn1/) (optional) +* [Libidn2](https://www.gnu.org/software/libidn/#libidn2) (optional, for internationalization of DNS, IDNA 2008) +* [Libunistring](https://www.gnu.org/software/libunistring/) (optional, for internationalization) +* [AWK](https://www.gnu.org/software/awk/) (for make dist, pmccabe2html) +* [bison](https://www.gnu.org/software/bison) (for datetime parser in certtool) +* [libunbound](https://unbound.net/) (for DANE support) +* [libabigail](https://pagure.io/libabigail/) (for abi comparison in make dist) +* [tpm2-tss](https://github.com/tpm2-software/tpm2-tss) (for TPM 2.0 support; optional) +* [tcsd](https://trousers.sourceforge.net/) (for TPM support; optional) +* [swtpm](https://github.com/stefanberger/swtpm) (for TPM test; optional) +* [tpm-tools](https://trousers.sourceforge.net/) (for TPM test; optional) +* [tpm2-tools](https://github.com/tpm2-software/tpm2-tools/) (for TPM 2.0 test; optional) +* [tpm2-tss-engine](https://github.com/tpm2-software/tpm2-tss-engine/) (for TPM 2.0 test; optional) +* [ncat](https://nmap.org/download.html) (for TPM test; optional) +* [expect](https://core.tcl.tk/expect/index) (for TPM test; optional) + +The required software is typically distributed with your operating +system, and the instructions for installing them differ. Here are +some hints: + +Debian/Ubuntu: +``` +apt-get install -y dash git-core autoconf libtool gettext autopoint +apt-get install -y automake python3 nettle-dev libp11-kit-dev libtspi-dev libunistring-dev +apt-get install -y guile-2.2-dev libtasn1-bin libtasn1-6-dev libidn2-0-dev gawk gperf +apt-get install -y libtss2-dev libunbound-dev dns-root-data bison gtk-doc-tools +apt-get install -y texinfo texlive texlive-generic-recommended texlive-extra-utils +``` + +__NOTE:__ Some software versions might not be available in older releases, e.g. `nettle-dev`. +Available backport repos, APT-Pinning or source code compilating can be used to install these versions (and dependencies) from a newer release. + +Fedora/RHEL: +``` +yum install -y dash git autoconf libtool gettext-devel automake patch +yum install -y nettle-devel p11-kit-devel libunistring-devel +yum install -y tpm2-tss-devel trousers-devel guile22-devel libtasn1-devel libidn2-devel gawk gperf +yum install -y libtasn1-tools unbound-devel bison gtk-doc texinfo texlive +``` + +Sometimes, you may need to install more recent versions of Automake, +Nettle, and P11-kit, which you will need to build from sources. + +Dependencies that are used during make check or make dist are listed below. +Moreover, for basic interoperability testing you may want to install openssl +and mbedtls. + +* [Valgrind](https://valgrind.org/) (optional) +* [Libasan](https://gcc.gnu.org//) (optional) +* [datefudge](https://packages.debian.org/datefudge) (optional) +* [nodejs](https://nodejs.org/) (needed for certain test cases) +* [softhsm](https://www.opendnssec.org/softhsm/) (for testing smart card support) +* [dieharder](https://www.phy.duke.edu/~rgb/General/dieharder.php) (for testing PRNG) +* [lcov](https://linux-test-project.github.io/) (for code coverage) +* [util-linux](https://github.com/karelzak/util-linux) or just [lscpu](https://github.com/NanXiao/lscpu) (for CPU feature detection) +* [libev](http://software.schmorp.de/pkg/libev.html) (for testing) + +Debian/Ubuntu: +``` +apt-get install -y valgrind nodejs softhsm2 datefudge lcov libssl-dev libcmocka-dev expect libev-dev +apt-get install -y dieharder openssl abigail-tools socat net-tools ppp util-linux +``` + +__NOTE:__ `libubsan0` and `libasan1` are required on older versions of Ubuntu <= 16.04. This packages must be manually added on these versions: + +``` +apt-get install -y v libubsan0 libasan1 +``` + +Fedora/RHEL: +``` +yum install -y valgrind libasan libasan-static libubsan nodejs softhsm datefudge lcov openssl-devel expect libev-devel +yum install -y dieharder mbedtls-utils openssl libabigail libcmocka-devel socat util-linux +``` + + +To download the version controlled sources: + +``` +$ git clone https://gitlab.com/gnutls/gnutls.git +$ cd gnutls +``` + +The next step is to bootstrap and ./configure: + +``` +$ ./bootstrap +$ ./configure +``` + +When built this way, some developer defaults will be enabled. See +cfg.mk for details. + +Then build the project normally, and run the test suite. + +``` +$ make +$ make check +``` + +To test the code coverage of the test suite use the following: +``` +$ ./configure --enable-code-coverage +$ make && make check && make code-coverage-capture +``` + +Individual tests that may require additional hardware (e.g., smart cards) +are: +``` +$ sh tests/suite/testpkcs11 +``` + +# Building for windows + +It is recommended to cross compile using Fedora and the following +dependencies: + +``` +yum install -y wine mingw32-nettle mingw32-libtasn1 mingw32-gcc +``` + +and build as: + +``` +mingw32-configure --disable-non-suiteb-curves --disable-doc --without-p11-kit +mingw32-make +mingw32-make check +``` + +# Continuous Integration (CI) + +We utilize two continuous integration systems, the gitlab-ci and travis. +Gitlab-CI is used to test most of the Linux systems (see .gitlab-ci.yml), +and is split in two phases, build image creation and compilation/test. The +build image creation is done at the gnutls/build-images subproject and +uploads the image at the gitlab.com container registry. The compilation/test +phase is on every commit to gnutls project. + +The Travis based CI, is used to test compilation on MacOSX based systems. + + +# Contributing + +See [the contributing document](CONTRIBUTING.md). + + +Happy hacking! + +---------------------------------------------------------------------- +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. |