Custom building Coot from source code: Difference between revisions
m (url for mirrors for source code) |
mNo edit summary |
||
Line 5: | Line 5: | ||
This is a so-called "advanced" task. Don't attempt it unless you would rather compile your own software than use pre-compiled versions. The standard (supported) method for installing Coot is to download a pre-compiled binary, or to use the autobuild scripts: [[Coot]]. | This is a so-called "advanced" task. Don't attempt it unless you would rather compile your own software than use pre-compiled versions. The standard (supported) method for installing Coot is to download a pre-compiled binary, or to use the autobuild scripts: [[Coot]]. | ||
==Install gpp4 and other dependencies on Linux.== | |||
Instead of using ccp4-onlylibs-dev, we want to use ssm, mmdb, gpp4 and clipper packages. | Instead of using ccp4-onlylibs-dev, we want to use ssm, mmdb, gpp4 and clipper packages. | ||
Line 13: | Line 13: | ||
Install these in the order described: | Install these in the order described: | ||
===mmdb=== | |||
wget http://www.ebi.ac.uk/~keb/cldoc/downloads/mmdb-1.19.tar.gz | wget http://www.ebi.ac.uk/~keb/cldoc/downloads/mmdb-1.19.tar.gz | ||
./configure --prefix=/usr/local/xtal --includedir=/usr/local/xtal/include | ./configure --prefix=/usr/local/xtal --includedir=/usr/local/xtal/include | ||
Line 19: | Line 19: | ||
make install | make install | ||
===ssm=== | |||
wget ftp://ftp.bioxray.au.dk/pub/mok/src/ssm-0.1.tar.gz | wget ftp://ftp.bioxray.au.dk/pub/mok/src/ssm-0.1.tar.gz | ||
CPPFLAGS=-I/usr/local/xtal/include ./configure --prefix=/usr/local/xtal --includedir=/usr/local/xtal/include | CPPFLAGS=-I/usr/local/xtal/include ./configure --prefix=/usr/local/xtal --includedir=/usr/local/xtal/include | ||
Line 25: | Line 25: | ||
make install | make install | ||
===gpp4=== | |||
wget ftp://ftp.bioxray.au.dk/pub/mok/src/gpp4-1.0.4.tar.gz | wget ftp://ftp.bioxray.au.dk/pub/mok/src/gpp4-1.0.4.tar.gz | ||
CPPFLAGS=-I/usr/local/xtal/include ./configure --prefix=/usr/local/xtal --includedir=/usr/local/xtal/include | CPPFLAGS=-I/usr/local/xtal/include ./configure --prefix=/usr/local/xtal --includedir=/usr/local/xtal/include | ||
Line 31: | Line 31: | ||
make install | make install | ||
===fftw=== | |||
We need to compile fftw in a way that differs from that used to make the standard linux distribution of fftw. So to do that, we will install our own in /usr/local/xtal/lib, so it will remain hidden from the rest of the system, unless directed to look for it there. | We need to compile fftw in a way that differs from that used to make the standard linux distribution of fftw. So to do that, we will install our own in /usr/local/xtal/lib, so it will remain hidden from the rest of the system, unless directed to look for it there. | ||
ftp://ftp.fftw.org/pub/fftw/old/fftw-2.1.5.tar.gz | ftp://ftp.fftw.org/pub/fftw/old/fftw-2.1.5.tar.gz | ||
Line 38: | Line 38: | ||
make install | make install | ||
===clipper=== | |||
wget http://www.ysbl.york.ac.uk/~cowtan/clipper/clipper20ac.latest.tar.gz | wget http://www.ysbl.york.ac.uk/~cowtan/clipper/clipper20ac.latest.tar.gz | ||
CPPFLAGS=-I/usr/local/xtal/include ./configure --prefix=/usr/local/xtal --includedir=/usr/local/xtal/include -enable-shared --with-gpp4=/usr/local/xtal --with-mmdb=/usr/local/xtal --with-fftw=/usr/local/xtal --enable-mmdb --enable-minimol --enable-cif --enable-cns --enable-gpp4 | CPPFLAGS=-I/usr/local/xtal/include ./configure --prefix=/usr/local/xtal --includedir=/usr/local/xtal/include -enable-shared --with-gpp4=/usr/local/xtal --with-mmdb=/usr/local/xtal --with-fftw=/usr/local/xtal --enable-mmdb --enable-minimol --enable-cif --enable-cns --enable-gpp4 | ||
Line 51: | Line 51: | ||
==Make sure the other needed dependencies are installed== | |||
These include at least the following dependencies: | These include at least the following dependencies: | ||
===Ubuntu packages=== | |||
A [[list of coot dependencies]] that is probably only a subset | A [[list of coot dependencies]] that is probably only a subset | ||
===Others that you have to make yourself: === | |||
[http://download.gna.org/guile-lib guile-lib] (I had to compile this myself as described below) | [http://download.gna.org/guile-lib guile-lib] (I had to compile this myself as described below) | ||
Line 78: | Line 78: | ||
This puts stuff into /usr, rather than /usr/local or /usr/local/xtal, which you might not want to do. The aim is to eventually get these into the standard system distribution, in which case they will reside in /usr with the other guile extensions. All of these should work with guile-1.8. | This puts stuff into /usr, rather than /usr/local or /usr/local/xtal, which you might not want to do. The aim is to eventually get these into the standard system distribution, in which case they will reside in /usr with the other guile extensions. All of these should work with guile-1.8. | ||
==Configuring and building coot == | |||
===Start a root shell session=== | |||
If root is enabled, log into a root shell, or else if you have sudo (debian, ubuntu, etc), use the command | If root is enabled, log into a root shell, or else if you have sudo (debian, ubuntu, etc), use the command | ||
Line 89: | Line 89: | ||
===Fix a configure bug=== | |||
First, issue the following command to fix a configure bug when compiling with gpp4: | First, issue the following command to fix a configure bug when compiling with gpp4: | ||
Line 95: | Line 95: | ||
perl -pi -e 's|lccp4c|lgpp4|g' configure | perl -pi -e 's|lccp4c|lgpp4|g' configure | ||
===Now configure this way: === | |||
<pre> | <pre> | ||
Line 114: | Line 114: | ||
</pre> | </pre> | ||
===Then, remake the src/coot_wrap_python.cc and src/coot_wrap_guile.cc files: === | |||
/bin/rm -f **/coot_wrap_**.cc | /bin/rm -f **/coot_wrap_**.cc | ||
Line 124: | Line 124: | ||
cd .. | cd .. | ||
===Now compile coot:=== | |||
make | make | ||
make -i install | make -i install | ||
===To make it play nice with python, I have had to do the following: === | |||
perl pi -e 's|PYTHONHOME=\$COOT_PREFIX|\#PYTHONHOME=\$COOT_PREFIX|g' bin/coot | perl pi -e 's|PYTHONHOME=\$COOT_PREFIX|\#PYTHONHOME=\$COOT_PREFIX|g' bin/coot | ||
cp src/coot.py python/. | cp src/coot.py python/. | ||
cp src/coot.py share/coot/python/. | cp src/coot.py share/coot/python/. | ||
===Now add the reference structures: === | |||
cd share/coot | cd share/coot | ||
wget http://www.ysbl.york.ac.uk/~emsley/software/coot-reference-structures.tar.gz | wget http://www.ysbl.york.ac.uk/~emsley/software/coot-reference-structures.tar.gz | ||
tar xvfz coot-reference-structures.tar.gz ; rm coot-reference-structures.tar.gz | tar xvfz coot-reference-structures.tar.gz ; rm coot-reference-structures.tar.gz | ||
=== Now add the refmac dictionaries=== | |||
(eg using coot-0.5 and refmac 5.4; change as required): | (eg using coot-0.5 and refmac 5.4; change as required): | ||
Line 147: | Line 147: | ||
cp -r dic /usr/local/xtal/coot-0.5/lib/data/monomers | cp -r dic /usr/local/xtal/coot-0.5/lib/data/monomers | ||
===Export the COOT_REFMAC_LIB_DIR variable === | |||
(you can edit bin/coot): | (you can edit bin/coot): | ||
export COOT_REFMAC_LIB_DIR=$COOT_PREFIX/lib | export COOT_REFMAC_LIB_DIR=$COOT_PREFIX/lib | ||
===Notes on the above: === | |||
The configure command is all one line; I've escaped the return. Using --prefix=$PWD simply keeps everything self-contained. You can use any install prefix you want to (it defaults to /usr/local; another sensible choice is /usr/local/xtal. Avoid /usr as a prefix, as it can mess with your system). | The configure command is all one line; I've escaped the return. Using --prefix=$PWD simply keeps everything self-contained. You can use any install prefix you want to (it defaults to /usr/local; another sensible choice is /usr/local/xtal. Avoid /usr as a prefix, as it can mess with your system). | ||
Line 158: | Line 158: | ||
---- | ---- | ||
==If you want to make it portable== | |||
You don't need to do this to run coot; this is only handy if you need to redistribute it (or make say a debian package). | You don't need to do this to run coot; this is only handy if you need to redistribute it (or make say a debian package). |
Revision as of 18:45, 16 November 2008
These instructions are current as of coot release 0.5.
The following is specific to Ubuntu linux, but should be generalizable to any recent linux distribution.
This is a so-called "advanced" task. Don't attempt it unless you would rather compile your own software than use pre-compiled versions. The standard (supported) method for installing Coot is to download a pre-compiled binary, or to use the autobuild scripts: Coot.
Install gpp4 and other dependencies on Linux.
Instead of using ccp4-onlylibs-dev, we want to use ssm, mmdb, gpp4 and clipper packages.
To keep things tidy, I suggest installing everything into /usr/local/xtal
Install these in the order described:
mmdb
wget http://www.ebi.ac.uk/~keb/cldoc/downloads/mmdb-1.19.tar.gz ./configure --prefix=/usr/local/xtal --includedir=/usr/local/xtal/include make make install
ssm
wget ftp://ftp.bioxray.au.dk/pub/mok/src/ssm-0.1.tar.gz CPPFLAGS=-I/usr/local/xtal/include ./configure --prefix=/usr/local/xtal --includedir=/usr/local/xtal/include make make install
gpp4
wget ftp://ftp.bioxray.au.dk/pub/mok/src/gpp4-1.0.4.tar.gz CPPFLAGS=-I/usr/local/xtal/include ./configure --prefix=/usr/local/xtal --includedir=/usr/local/xtal/include make make install
fftw
We need to compile fftw in a way that differs from that used to make the standard linux distribution of fftw. So to do that, we will install our own in /usr/local/xtal/lib, so it will remain hidden from the rest of the system, unless directed to look for it there.
ftp://ftp.fftw.org/pub/fftw/old/fftw-2.1.5.tar.gz CPPFLAGS=-I/usr/local/xtal/include ./configure --prefix=/usr/local/xtal --includedir=/usr/local/xtal/include --enable-float make make install
clipper
wget http://www.ysbl.york.ac.uk/~cowtan/clipper/clipper20ac.latest.tar.gz CPPFLAGS=-I/usr/local/xtal/include ./configure --prefix=/usr/local/xtal --includedir=/usr/local/xtal/include -enable-shared --with-gpp4=/usr/local/xtal --with-mmdb=/usr/local/xtal --with-fftw=/usr/local/xtal --enable-mmdb --enable-minimol --enable-cif --enable-cns --enable-gpp4 make make install
Note that if the primary server for the source code is down, you can often find what you need mirrored elsewhere, eg:
http://distfiles.msn.wi.us.finkmirrors.net/mirrors/fink/distfiles
Make sure the other needed dependencies are installed
These include at least the following dependencies:
Ubuntu packages
A list of coot dependencies that is probably only a subset
Others that you have to make yourself:
guile-lib (I had to compile this myself as described below)
goosh (I had to compile this myself)
guile-gui (I had to compile this myself)
guile-gtk-2.0 (I had to compile this myself)
net-htttp (I had to compile this myself)
To compile these, use the commands
configure --prefix=/usr make sudo make install
This puts stuff into /usr, rather than /usr/local or /usr/local/xtal, which you might not want to do. The aim is to eventually get these into the standard system distribution, in which case they will reside in /usr with the other guile extensions. All of these should work with guile-1.8.
Configuring and building coot
Start a root shell session
If root is enabled, log into a root shell, or else if you have sudo (debian, ubuntu, etc), use the command
sudo zsh
(or whatever shell) to open a root shell, and issue the following commands as indicated.
Fix a configure bug
First, issue the following command to fix a configure bug when compiling with gpp4:
perl -pi -e 's|lccp4c|lgpp4|g' configure
Now configure this way:
PATH="/usr/local/xtal/bin:$PATH" \ CPPFLAGS="-I/usr/local/xtal/include -I/usr/local/xtal/include/clipper -I/usr/local/xtal/include/gpp4 -I/usr/local/xtal/include/mmdb -I/usr/local/xtal/include/ssm" \ ./configure --prefix=$PWD \ --with-gpp4=/usr/local/xtal \ --with-mmdb-prefix=/usr/local/xtal \ --with-ssmlib-prefix=/usr/local/xtal \ --with-clipper-prefix=/usr/local/xtal \ --with-fftw=/usr/local/xtal \ --with-glut-prefix=/usr --with-gl-prefix=/usr/X11R6 \ --with-gtk2 --with-gnomecanvas-prefix=/usr \ --with-imlib-prefix=/usr --with-gtkgl-prefix=/usr \ --with-glib-prefix=/usr --with-guile-gtk \ --with-guile-gtk-prefix=/usr --with-gsl-prefix=/usr \ --with-guile --with-python
Then, remake the src/coot_wrap_python.cc and src/coot_wrap_guile.cc files:
/bin/rm -f **/coot_wrap_**.cc cd src touch c-interface-database.hh make coot_wrap_guile.cc make coot_wrap_python.cc cp coot_wrap_guile_pre.cc coot_wrap_guile.cc cd ..
Now compile coot:
make make -i install
To make it play nice with python, I have had to do the following:
perl pi -e 's|PYTHONHOME=\$COOT_PREFIX|\#PYTHONHOME=\$COOT_PREFIX|g' bin/coot cp src/coot.py python/. cp src/coot.py share/coot/python/.
Now add the reference structures:
cd share/coot wget http://www.ysbl.york.ac.uk/~emsley/software/coot-reference-structures.tar.gz tar xvfz coot-reference-structures.tar.gz ; rm coot-reference-structures.tar.gz
Now add the refmac dictionaries
(eg using coot-0.5 and refmac 5.4; change as required):
cd /tmp wget wget http://www.ysbl.york.ac.uk/refmac/data/refmac5.4_dictionary.tar.gz tar xvfz refmac5.4_dictionary.tar.gz mkdir -p /usr/local/xtal/coot-0.5/lib/data cp -r dic /usr/local/xtal/coot-0.5/lib/data/monomers
Export the COOT_REFMAC_LIB_DIR variable
(you can edit bin/coot):
export COOT_REFMAC_LIB_DIR=$COOT_PREFIX/lib
Notes on the above:
The configure command is all one line; I've escaped the return. Using --prefix=$PWD simply keeps everything self-contained. You can use any install prefix you want to (it defaults to /usr/local; another sensible choice is /usr/local/xtal. Avoid /usr as a prefix, as it can mess with your system).
The make -i install is needed if you choose --prefix=$PWD because it tries to install some files where they are presently situated.
If you want to make it portable
You don't need to do this to run coot; this is only handy if you need to redistribute it (or make say a debian package).
You can see what dynamic libraries coot needs to load by issuing the command
ldd coot-real
or, if you just want to see the full path to the libraries, issue
ldd coot-real | awk '{print $3}' | grep -v fff | sort -u
You can use additional grep filters to select the ccp4 libs, clipper libs, eliminate coot's own libaries (that are already in the lib directory) and so forth.
(The ldd command is equivalent to otool -L on Mac OS X.) Then you can copy these into coot's lib directory. I used the following commands in zsh to copy in the needed directories (this is overkill, but wtf).
cd /usr/local/xtal/coot-0.1.2/bin foreach dylib in $(ldd coot-real | awk '{print $3}' | grep -v fff | grep -v "usr/local/xtal/coot" | sort -u ) print copying $dylib sudo cp -i $dylib /usr/local/xtal/coot-0.1.2/lib/. end
In addition, the guile modules can all be put in one centralized location:
cp -R /usr/share/guile* /usr/local/xtal/coot-0.1.2/share/.
Finally, you can give coot its own copy of the refmac monomers library:
mkdir -p /usr/local/xtal/coot-0.1.2/share/coot/lib/data cp -R /usr/local/xtal/ccp4-6.0/lib/data/monomers /usr/local/xtal/coot-0.1.0-pre-3/share/coot/lib/data/.
Then edit /usr/local/xtal/coot-0.1.2/bin/coot and un-comment the appropriate environment variable lines (there are 2).