Custom building Coot from source code: Difference between revisions

From CCP4 wiki
Jump to navigation Jump to search
Line 72: Line 72:
====Fourth, configure and build coot like this:====
====Fourth, configure and build coot like this:====


Use sudo zsh (or whatever shell) to open a root shell, and issue the commands
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.
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:


CPPFLAGS="-I$CLIB/src -I$CLIB/src/mmdb" ./configure --with-mmdb-prefix=$CCP4 --with-clipper-prefix=/usr/local/xtal \
--with-fftw=$CCP4 --with-glut-prefix=/usr --with-gl-prefix=/usr/X11R6 --with-gtk2 --with-gnomecanvas-prefix=/usr \
--with-ssmlib-prefix=$CCP4 --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 --prefix=$PWD
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
  cd src
  cd src
Line 89: Line 110:
  cd ..
  cd ..


Now compile it:
Now compile coot:
  make  
  make  
  make -i install
  make -i install
Line 100: Line 121:
  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.4.1 and refmac 5.4; change as required):
Now add the refmac dictionaries (eg using coot-0.5 and refmac 5.4; change as required):
  cd /tmp
  cd /tmp
  wget  wget http://www.ysbl.york.ac.uk/refmac/data/refmac5.4_dictionary.tar.gz
  wget  wget http://www.ysbl.york.ac.uk/refmac/data/refmac5.4_dictionary.tar.gz
  tar xvfz refmac5.4_dictionary.tar.gz
  tar xvfz refmac5.4_dictionary.tar.gz
  mkdir -p  /usr/local/xtal/coot-0.4.1/lib/data
  mkdir -p  /usr/local/xtal/coot-0.5/lib/data
  cp -r dic /usr/local/xtal/coot-0.4.1/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):
Export the COOT_REFMAC_LIB_DIR variable (you can edit bin/coot):

Revision as of 20:39, 15 November 2008

This is an advanced task. Don't attempt it unless you are a Unix expert. The normal method installing Coot is to download a 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


Third, 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 do so, I used

configure --prefix=/usr
make
sudo make install

Fourth, configure and build coot like this:

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.

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
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

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).