Conditional Independence Net

This website uses Javascript to render markdown documents in your browser, apply syntax highlighting to code fragments and render $\LaTeX$ formulas. Below is the markdown source code of this page. You can either read that or enable Javascript to have it rendered to HTML.

# Installation of CInet tools

The code for conditional independence computations behind this website and
database is written in Perl. You will need a relatively recent version of
it, at least `v5.26`:

``` console
$ perl -v

This is perl 5, version 30, subversion 1 (v5.30.1) built for
x86_64-linux-thread-multi

Copyright 1987-2019, Larry Wall
…
```

If your Perl version is not recent enough, I recommend you use [`perlbrew`]
to compile your own recent Perl. This will require a C compiler and other
standard build tools.

Next, we need a capable Perl module installer. I prefer [`cpanm`], which,
if you trust it, can be installed from [https://cpanmin.us] as follows:

``` console
$ wget -O- https://cpanmin.us | perl - App::cpanminus
```

As part of the installation, it will likely inform you about a mechanism
called [`local::lib`], which I also recommend. It allows you to install
Perl modules into your home directory instead of a system directory,
which requires elevated privileges. To enable this, follow the given
instructions, which at the time of writing amount to

``` console
$ ~/perl5/bin/cpanm --local-lib=~/perl5 local::lib
$ eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib)
```

Afterwards, add the second command, `eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib)`,
to your shell rc file. This sets up the necessary environment variables,
which make Perl aware of the additional module installations, whenever you
start a shell session.

With these in place, the CInet tools can be installed. There is one
meta-module, `CInet::Tools`, which pulls in all the others in their
most recent version as dependencies:

``` console
$ cpanm -M dpan.cinet.link CInet::Tools
```

This installation will take a while, especially if you have never used
Perl and CPAN before, because there is a sizable number of transitive
dependencies. The effort has to be spent only once. When you update
`CInet::Tools` later, most dependencies are already in place and it will
go much faster.

The CInet modules and their lower-level dependencies sometimes bundle
native code in C or C++. The installation process will automatically
compile all the bundled code, but you will need to have some essential
build tools available, including a C and C++ compiler, autotools, make
and cmake.

The rule of thumb in CInet is to prefer to bundle source code of native
programs or libraries in so-called `Alien` modules. For example,
[`CInet::Alien::CaDiCaL`] bundles the SAT solver [CaDiCaL], which is
used by [`CInet::Propositional`].
The only **exception** to this rule currently is [`CInet::Bridge::SoPlex`]
providing the [SoPlex] LP solver to [`CInet::Polyhedral`]. I decided not
to bundle the source code because SoPlex's license makes this non-trivial.
You should install [SoPlex] separately before launching the above command
or installation of `CInet::Bridge::SoPlex` will fail.

During installation, various test suites run to ensure (as far as the
test suites go) that the modules function properly on your system.
If you encounter any bugs or believe this guide is incomplete, then
please do not hesitate to write me an email via [Contact](/contact)!

[`perlbrew`]: https://perlbrew.pl
[`cpanm`]: https://metacpan.org/pod/App::cpanminus
[`local::lib`]: https://metacpan.org/pod/local::lib
[`CInet::Alien::CaDiCaL`]: /doc/CInet::Alien::CaDiCaL
[CaDiCaL]: http://fmv.jku.at/cadical/
[`CInet::Propositional`]: /doc/CInet::Propositional
[`CInet::Bridge::SoPlex`]: /doc/CInet::Bridge::SoPlex
[SoPlex]: https://soplex.zib.de
[`CInet::Polyhedral`]: /doc/CInet::Polyhedral