# 
#  ----------------- this is now the python-3 version ----------------
# -*-shell-script-*-s
#
# Copyright 2004, 2005, 2006, 2007, 2008 by The University of York
# Copyright 2009, 2010, 2011, 2012 by The University of York
# Copyright 2012 by Paul Emsley
# Copyright 2012, 2013, 2014, 2015, 2016 by Medical Reserch Council
# Copyright 2014, 2015, 2016 by Medical Research Council
# Author: Paul Emsley
# 
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or (at
# your option) any later version.
# 
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA
#
#
#
#  For instructions, read below, starting at :: NOTE :: 
#
#
# Prerequisites: sed, GNU make, libtool, wget
#
# libz is optional for the moment

# 1.3  Put RELEASE-NOTES on web site too
# 1.4  Apply both of Ezra's patches of today Wed Mar  2 22:51:36 GMT 2005
#      Update clipper version (the one with shelx .fcf ability) 
# 1.5  Apply Ezra's gtkglarea patch and GSL patch.
#      Update version of FFTW and other updates from MATSUURA Takanori.
# 1.6  Update to mmdb-1.0.8 [# for molrep output]
# 1.7  Fix logic of fftw test
# 1.8  Add the clipper edcalc patch (suggested by Ezra ages ago)
# 1.9  Add Fedora Core 4 support and testing for the need to build mccp4, 
#      mmdb and clipper.
# 1.10 Tidy up nightly code.
# 1.11 Add code testing the need for guile_gui and goosh.
# 1.12 Tidy nightly code again.
# 1.13 Don't escape the "."s in gsub for new gawk (Ward Smith).
# 1.14 20050628 Test for imlib on the installation, not the system (ignore
#               the system).
# 1.15 20050709 Add glib gstrfuncs patch
# 1.16 20050709 Update to guile 1.6.7 and add lt_preloaded_symbols patch
# 1.17 20050721 Added clipper status code to compiling clipper part.
#               Redirect stderr output?
#               fix build_mccp4 problem.
# 1.18 20050722 Fix guile build (wrong http tar file).
#               Added freeglut
# 1.19 20050803 Update version of guile-gtk to 0.41
# 1.20 20050815 Several updates and clean up from MATSUURA Takanori.
# 1.21 20050815 Stop if wget test fails.
# 1.22 20050916 Update build for freeglut to use --disable-warnings and 
#               CFLAGS
# 1.23 20050916 Move "set" so we don't see confusing default coot_version
# 1.24 20051012 Do pre-release tars for a few days.
# 1.25 20051017 Don't make install if Coot's makes fails.  Don't make -k
# 1.26 20051018 Handle clipper nxmap patch.
# 1.27 20051027 [Gif, Paris] Fix tarred directory for nightly pre-release 
#               tars.
# 1.28 20051101 Fix the md5sum for nxmap.h
# 1.29 20051104 Apply most of MATSUURA Takanori's fixes.
#               Use CCP4 libs (mtz, clipper, mmdb).
# 1.30 20051109 Darwin setting of FC for CCP4 libs configure.
# 1.31 20051114 Fix coot tar file problem on building pre-release (or not).
# 1.32 20060205 Add scripting variable debugging (its currently not making 
#               python tar files)   
# 1.33 20060214 Get wget testing tar file from YSBL, not chem.gla
# 1.34 20060219 Correct the install position of libccp4c.la
# 1.35 20060219 create time stamp with current time, not the time of 
#               the previous ccp4 libs file, now the find ctime test works 
#               as I wanted.
# 1.36 20060220 Add a libmmdb.la too.
# 1.37 20060222 Add Bob Nolte's proxy settings
# 1.38 20060224 dylib variable for libmmdb.la and libccp4c.la
# 1.39 20060225 Fix sedding of libmmdb.la and libccp4c.la
# 1.40 20060323 copy over coot.py to share/coot/python (if we built with 
#               python)
# 1.41 20060401 Big changes for ccp4 5.0.2 ccp4c libs.
# 1.42 20060404 Various small build debuggings.
# 1.43 20060405 Fix do_nightlies syntax error and fix up glut_prefix build 
#               problem.
# 1.44 20060405 Fix the tarred directory name when this is not a pre-release
# 1.45 20060406 Check for missing reference structures and monomer lib and 
#               install them if needed.
# 1.46 20060418 use install_top_dir variable to copy over coot.py (not 
#               $coot_prefix!)
# 1.47 20060419 Remove the mmdb binaries
# 1.48 20060420 J. Maclean says no guile. He is right.  So check install for 
#               guile, not system.
# 1.49 20060420 Replace many $AUTOBUILD_INSTALLED with $install_top_dir.
# 1.50 20060421 Replace other $AUTOBUILD_INSTALLED with $install_top_dir for 
#               tar file creation.
# 1.51 20060425 net-http was installing into the wrong place because it had 
#               been set to install_top_dir, but this was not set as a shell 
#               (or configured) variable so it was just blank [James Murray].  
#               Now we export install_top_dir.
# 1.52 20060427 Don't add unecessary tagging of -pre-release to tar_dir at 
#               the end.
# 1.53 20060503 Force GSL to be in $install_top_dir rather than anywhere.
# 1.54 20060519 Update to extract the right coot version from the release and 
#               pre-release directories.
# 1.55 20060621 Shuffle around the test for using pre-release
# 1.56 20060626 Fixes from MATSUURA Takanori. Shuffle around the usage of
#               install_top_dir.
# 1.57 20060704 run imlib-config from the installation, not anywhere.
# 1.58 20060705 Fix wrong directory to build libtiff.
# 1.59 20060706 guile-config should run with an argument, otherise it 
#               returns with exit status 1 (and we test for non-zero). 
# 1.60 20060706 Fix (directory for) mmdb include file test.
# 1.61 20060707 Add to coot configure line the option for guile_gtk
# 1.62 20060708 Fix coot_prerelease_exists typo in setting install_top_dir 
#               (oops).
# 1.63 20060708 Add jpeg dependency for imlib
# 1.64 20060708 Add libungif test to installation, not system (imlib 
#               dependency).
# 1.65 20060710 Add removal of coot_wrap_guile.cc compilation when python 
#               scripting.
# 1.66 20060710 Python on a Sunday. 
# 1.67 20060711 Try to fix up the Makefile for PNG.
# 1.68 20060723 Add in the updates to ltmain.sh, ltconfig and config.guess/sub 
#               for Mactel build.  Add build for readline.
#               Readline version typo fixed.
# 1.69 20060724 ENABLE_PYTHON_COOT variable is tested.  Don't display 
#              a variables if we are using a proxy.
# 1.70 20060728 pass CFLAGS and LDFLAGS to guile's configure
# 1.71 20060730 Add test for 64-bit Linux to update config.xxxs and libtool.
#               Installation readline built now, not system.
# 1.72 20060801 Use mmdb-1.0.8-ysbl-2, which installs includes in the include 
#               dir. This matches clipper cif_data_io.cpp which presumes that 
#               it is there. (And is a clean thing to do anyway).
# 1.73 20060801 Use the new version of libccp4c, with some of Ralf's patches
#               and includes that go into include/ccp4 dir.
# 1.74 20060801 Use CCP4_CXXFLAGS argument to clipper (it does the wrong thing
#               with --with-ccp4)
# 1.75 20060801 Use -pre-2 version of SSMlib, that has -Ixxx/include/mmdb to 
#               find mmdb include files.
# 1.76 20060808 test for libjpeg.$shared_lib_ext not libjpeg.so. LTE bug.
# 1.77 20060818 Force update of libtool and config files for libjpeg.  Extend 
#               the make install proceedure.  Lynn Ten Eyck reported problems 
#               here.
# 1.78 20060823 Add poll fix and getpwuid fix to glib build on Intel Mac.
# 1.79 20060827 Add fix for gtk-canvas from fink for Intel Mac.
# 1.80 20061002 Change freeglut test to test instaltion, not system.
# 1.81 20061012 The path used to find *-config files should be the same one
#               that new executables are added (it was $AUTOBUILD_INSTALLED)
#               and it should be $AUTOBUILD_INSTALLED-pre-release/bin) when
#               we are building a pre-release.
# 1.82 20061012 Change the destination tar file so that there are nightly 
#               and stable directories for the binary tar files on the web
#               server.
# 1.83 20061107 cd to the clipper dir when building clipper.  Pirate and 
#               bucca are not (attempted to be) built then.
# 1.84 20061107 Capture and report error status from make in GSL (intel mac 
#               build fails).
# 1.85 20061107 Use GSL version 1.8, which includes Charles Ballard's fix for
#               fp_regs.h
# 1.86 20061108 Add fink-based args for configure of gtk for Darwin
# 1.87 20061108 Fix ltmain.sh updating for Gtk (oops!).
# 1.88 20061122 Fix coot tar directory now that we have revision numbers in 
#               tar file name.
# 1.89 20061123 Fix/add test for ssmlib build (now depends on mmdb build) and 
#               libccp4c build (now depends on xxx/include/ccp4/cmtzlib.h).
# 1.90 20061128 Allow the user to specify if the dependencies should be checked
#               on the system or only in the autobuild installed directory.
#               Needs more checks to use this.  Currently only glib and gtk
#               tests.
# 1.91 20061211 Don't make install for guile-gtk if the make fails - or the 
#               dependency check for guile-gtk in coot's configure passes 
#               when it should fail (maybe).
# 1.92 20061212 Apply Charles Ballards libtool patch for Macs for imlib and 
#               guile-gtk.
# 1.93 20061212 Fiddle the env vars to compile gtk+ on Mac.
# 1.94 20070104 Non-pre-release build problems, BINARY_DEST_DIR
# 2.01 20070109 imlib tar gz should be downloaded from the correct directory 
#               (sigh).
# 2.02 20070117 Try to compile clipper with -fno-strict-aliasing
# 2.03 20070123 Tell us where the gtkglarea include file was found.
# 2.04 20070124 GCC 3.2 on RH8 machine cannot compile new clipper, so add a
#               patch if needed.
# 2.05 20070216 Put libtiff after libjpeg and give tiff's configure command
#               line args to find jpeg.
# 2.06 20070306 Put in the clipper<->ccp4 new dist patch.
# 2.07 20070319 Remove == comparisons - Lothar Esser.
# 2.08 20070424 --with-jpeg-lib-dir should be a lib dir!
# 2.09 20070501 Fix the setting of coot_version when no pre-release set.
# 2.10 20071002 Post install slim the binaries.  Add helper functions.
# 2.11 20071005 Add some debugging to make_tar.  It doesn't seem to work 
#               currently.
# 2.12 20071005 Fix post_install_slim call.
# 2.13 20071005 Fix slim_dir
# 2.14 20071006 Adjust python scripting settings, so that it should try
#               to compile with python most of the time now.
# 2.15 20071008 Fix extra fi, uncommented typo.
# 2.16 20071010 ENABLE_PYTHON_COOT=no for now.
# 2.17 20071105 Swap out DL Clipper for York clipper [whoosh, bang, kerpow!]
#               enable-cns
# 2.18 20071105 Backpeddle to mmdb 1.08.  Baah.
# 2.19 20071108 Version 1.08-ysbl-3 of mmdb.
# 2.20 20071118 No longer make the full fat tar file.
# 2.21 20071120 Sourcefource no longer distributes libungif, now in 
#               ysbl software/extras
# 2.22 20071121 set the architecture for ubuntu systems.
# 2.23 20071125 Fix typo in recent fixes.
# 2.24 20071126 Fix setting of systype for MacOSX, hopefully.
# 2.25 20071126 Another try to fix setting of systype for MacOSX.
# 2.26 20071130 Try to enable python
# 2.27 20071207 More python tinkering.  Upgrade to 2.5.1
# 2.28 20071207 Add greg. If in York, use it to test before installing.
# 2.29 20071208 Setup CCP4 and use it to test coot before making binaries. 
# 2.30 20071209 Add dewinter's ccp4 setup in setup_ccp4.
# 2.31 20071212 Redirect testing output to $LOGS/$HOST-testing.log
# 2.32 20071213 Copy over the ChangeLog, README and RELEASE-NOTES on good test
# 2.33 20071215 Pythonize only sometimes, default off.
# 2.34 20071215 Tell us some Python info
# 2.35 20071215 Python settings outside the subshell.
# 2.36 20071219 Set up for testing and tars on biop too.
# 3.00 20080108 Gtk+-2 version
# 3.01 20080118 Add GtkGlExt
# 3.02 20080121 Tinker with guile build settings.
# 3.03 20080124 Build GTK2 from scratch: librsvg, cairo, pango, glitz. glib, gtk+-2
# 3.04 20080128 Add a test for the existance of pygtk
# 3.05 20080129 Add pkg-config and pygobject 
# 3.06 20080130 Add test for pycairo
# 3.07 20080130 pycairo needs 1.4.12 - so test for cairo, setting build_gtk=1 on 
#               failure
# 3.08 20080130 Remove static patch (for sgi).  Add test/build for freetype2
# 3.09 20080130 fontconfig added too.
# 3.10 20080131 Change HOSTLOGDIR to include gtk2 to separate it from gtk1 build logs.
# 3.11 20080201 Fix problem in scripting args to coot's configure.
# 3.12 20080207 Add test and build of ATK, needed for gtk+2.10.x
# 3.13 20080208 lib cleaning problems, add debugging.
# 3.14 20080208 Try requiring gtk 2.10
# 4.00 20080208 Remove gtk2 and pkg-config building.  Test for Fedora core 5.
# 4.01 20080211 Remove pycairo build and fix up test for build for guile_gtk
# 4.02 20080212 Add in the Neil Jerram guile-gui patch.
# 4.03 20080213 Add Joseph Moran's fix for handling CC when set.
# 4.04 20080213 Allow python to get through rsync filter, for PHENIX usage.
# 4.05 20080226 Fix up build_guile_gtk usage.
# 4.06 20080428 Apply Joseph Moran's fix correctly.
# 4.07 20080518 Update the status reporting system.
# 4.08 20080607 Bump version of python to 2.5.2
# 4.09 20080617 Update to guile-1.8.5
# 4.10 20080618 As per JED request, number the build logs in a more sensible way.
# 4.11 20080620 Don't run the tests if not in biop or york.
# 4.12 20080624 Add guile-lib to build.
# 4.13 20080729 Correctly test for the up to date python version.
# 4.14 20080729 Adjust test for build_guile_gtk.
# 4.15 20080730 Adjust test for up to date python.
# 4.16 20080730 Use old version of pyobject if pkg-config is not new enough
# 4.17 20080730 Test for gtk minor version, use that to apply guile-gtk patches 
#               if needed.
# 4.18 20080730 Add Diagnosis for applying guile-gtk patch.
# 4.19 20080818 use mmdb version 1.12
# 4.20 20080918 Remove references to glitz, cairo, fontconfig
# 4.21 20080925 Use pygobject 2.4 if needed (e.g on CentOS 4).
# 4.22 20080925 Handle typename in pygobject.h for CentOS4.
# 4.23 20081007 Don't build python if python is not passed as arg.
# 4.24 20081007 Back to version 2.5.1 that compiles on bragg3, 2.5.2 does not 
#               (port 8080 already in use).
# 4.25 20081008 Migrate to CCP4 version 6.0.2 for testing in York.
# 4.26 20081014 Use Python 2.6   
# 4.27 20081105 Adjust clipper configuration.  Remove clipper-new-ccp4-install 
#               usage, it is no longer needed, it seems.  Remove configure 
#               argument --enable-mmdbold
# 4.28 20081110 Upgrade to mmdb-1.19, get it from EBI.
# 4.29 20081118 Use the ccp4 libs underlay.
# 4.30 20081119 Use -O not -O2 to compile coot on 64 bit machine
# 4.31 20081121 Swig 1.3.34 is OK for 32 bit, I think.
# 4.32 20081122 Use clipper-2.1
# 4.33 20081122 Use clipper-2.1, extra tweaks.
# 4.34 20081122 Add a second test, make a holding directory for tar file before
#               second test is run.
# 4.35 20081124 test for greg using full path to guile.
# 4.36 20081130 Bump the gmp version to 4.2.4 (Does that fix the gmp.h on 
#               intrepid problem?)
# 4.37 20090220 Fix up guile-gui, post-neil-jerram patch added.
# 4.38 20090423 Fix up PYTHONPATH when starting greg tests.
# 4.39 20090427 Remove python and its config from bin in slimmed dir
# 4.40 20090506 Upgrade to mmdb 1.21
# 4.41 20090508 add density-score-by-residue to tar ball.
# 4.42 20090517 Remove standard error redirections.
# 4.43 20090522 Update to guile-1.8.6 on the advice of Ed Podharski.
# 4.44 20090523 Add some build info to the mmdb and clipper logs.
# 4.45 20090523 build status results now go to $build_type-build-status
#               (not gtk2-build-status)
# 4.46 20090613 Add coot revision info to build status line.
# 4.47 20090617 Make a file (and transfer it if neeeded) type-binary-xxx.txt
#               containing the $coot_version of the just-built binary.  Used
#               in the update-binary mechanism to find if there is a newer
#               version than this binary (that we are running).
# 4.48 20090624 Make pre_release_server_dir be biop.ox
# 4.49 20090628 On my_exit, remove the test-status file, not the build-status 
#               file.
# 4.50 20090628 Change the GSL version to 1.12
# 4.51 20090703 check exit status of wget for coot source tar file.
# 4.52 20090704 mmdb-1.21 from York.
# 4.53 20090706 check build dependencies when on ubuntu
# 4.54 20090722 fix coot_revision typo for build status.
# 4.55 20090724 make compilers_dir depend on build_type (python build logs 
#               split out)
# 4.56 20090727 Add a date for build-in-progress status
# 4.57 20090728 gtk2 -> $build_type fixups for status
# 4.58 20090730 remove swig from package list tested on ubuntu.
# 4.59 20090913 Add a date to the fail status message
# 4.60 20091001 comment out the deletion of the coot_wrap files.
# 4.61 20091117 update the version of clipper.
# 4.62 20091203 release server is now in oxford.
# 4.63 20091208 Add curl to the build system
# 4.64 20091209 Fix typo in untaring curl tar file.
# 4.65 20091209 Add libidn to build (for curl).
# 4.66 20091209 Test for holding dir in making tar file.
# 4.67 20091209 Add LDFLAGS to args for libcurl configure.
# 4.68 20091210 Add post-process-libcurl logic.
# 4.69 20091216 Don't delete bin/curl, we need it for updates. (20100120 Not any more)
# 4.70 20100120 debugging added to curl build (problems on bragg3).
# 4.71 20100203 Remove goosh.
# 4.72 20100203 Update clipper version.
# 4.73 20100205 only download mmdb once.
# 4.74 20100304 Fix install_top_dir typos.
# 4.75 20101102 Dependency check for gtkglext patch (compatibility with gtk+ version).
# 4.76 20101102 Correct directory for previoius patch.
# 4.77 20110505 switch to new style Refmac library.
# 4.78 20110507 Refmac mon lib to 5.29
# 4.79 20110610 biop -> lmb.bioch
# 4.80 20110707 also make holding directory for stable builds.
# 4.81 20110725 Add goocanvas.
# 4.82 20110725 Add test for gtk and cairo before going ahead with compiling and using 
#               goocanvas.
# 4.83 20110805 On 64 bit redhat 4, building freeglut, we need to use /usr/X11R6/lib64, 
#               not /usr/X11R6/lib, edit configure.
# 4.84 20110821 Hack in a solution the the new clipper problem (new clipper with cif 
#               tools needs new libtools/configure new ccp4 libs (underlay-2).
# 4.85 20111021 Update python to 2.6, guile to 1.8.8, add guile patch.
# 4.86 20111214 Update to mmdb 1.24 (new) which has working LINKRs.
# 4.87 20120108 Use make not MAKE for guile-gtk.
# 4.88 20120120 Don't use -j $nproc for make if we don't have memory.
# 4.89 20120223 Use libccp4c-5.0.2-ysbl-3.tar.gz, that has libccp4c_la_LIBADD.
# 4.90 20120713 debug $coot_dir_name link usage.
# 4.91 20120808 update to handle version of debian in /etc/issue.
# 4.92 20120820 Debian /etc/issue handling for wheezy.
# 4.93 20120921 Update mmdb to version 1.24.2
# 4.94 20130123 Move pre-release and release server-dir to Cambridge.
# 4.95 20130128 Refmac dictionary to 5.39
# 4.96 20130228 New mmdb version - 1.25.0
# 4.97 20130424 Rework (fix typo) for python include directory slimming.
# 4.98 20130424 Remove ssh copying
# 4.99 20130424 swig 1.3.29 is broken no matter what the architecture.
# 5.00 20130425 CXX testing updates (for ubuntu).
# 5.01 20130429 mmdb version bump 1.25.2
# 5.02 20130502 better diagnostic for goocanvas compile
# 5.03 20130503 Remove SWIG version test (now it is not needed to build source)
# 5.04 20130514 Add COOT_BUILD_INFO_STRING.
# 5.05 20130604 For Release 0.7.1, change release vs pre-release logic 
#               (MRC server).
# 5.06 20130612 More tinkering to get the correct version for release from the server.
# 5.07 20130707 Adjustment to build stable logic.
# 5.08 20130716 Move source server to personal/pemsley.
# 5.09 20130818 Use ssm-1.3
# 5.10 20130824 debugging publish
# 5.11 20130826 Allow build without guile; name directory for building.
# 5.12 20130909 LD_LIBRARY_PATH changes/fixup.
# 5.13 20130910 Force -O usage for guile compilation.
# 5.14 20130920 Publish logs.
# 5.15 20140408 New version of Python.
# 5.16 20140817 Python version to 2.7.8
# 5.17 20140911 SSM updates.
# 5.18 20141128 Add hack bin for debian awk
# 5.19 20141128 Use dist_name for debian (not systype)
# 5.20 20141203 More/better Debian awk hack.
# 5.21 20141203 Unset some build environment variables (including LD_LIBRARY_PATH)
# 5.22 20141210 More LD_LIBRARY_PATH hacking for debian
# 5.23 20141210 libreadline needs to be linked with -lcurses (on Debian)
# 5.25 20141212
# 5.26 20150215 Use /opt/X11 and COOT_CCP4_PACKAGES for dependences on Darwin.
# 5.27 20170925 bump libccp4 version to 6.5.1 - this has libccp4.pc for pkg-config
# 5.28 20170925 Fixes for clipper and guile and gmp version update (gcc-7.2)
# 5.29 20171006 Test for libgnomecanvas devel (now not available in system for Redhat 7.3)
# 5.30 20180109 Update python version.
# 5.31 20180822 gdkshapes.c in gtkglext
# 5.32 20180924 bump the clipper version (pre-Pro)
# 5.33 20181214 bump the mmdb2 version (pdbx_ins_code)
# 5.34 20181215 clipper patch fixes
# 5.35 20190401 clipper configure fftw patch
script_version=5.35



# :: NOTE:: 
# this "strange" construction of variable names: x=${x:=thing} sets the 
# variable x only if it has not previously been defined.
#
# So, the idea is that you write a wrapper for this script (defining typically 
# AUTOBUILD_INSTALLED, AUTOBUILD_BUILD, LOGS and build_coot_prerelease) then
# source this file.  That means that you (probably) don't have to edit your 
# version of build-it every time it changes.


# ENABLE_PYTHON_COOT: if ENABLE_PYTHON_COOT is set to 0 or "no" then
# python coot is not enable (guile coot is enabled).  if
# ENABLE_PYTHON_COOT is set, but not set to 0 or no then python coot
# is enabled.  If ENABLE_PYTHON_COOT is not set, the guile-coot is
# enabled (python coot is not enabled).

# Pythonizing coot makes non-transferable binararies (why?).  Let
# the pythonness be controlled on the command line:
# 
# At the moment, if you build with Gtk2, you build with python, hence $build_type 
# is the same thing.
# 
if [ "$1" = "no-python" ] ; then 
   ENABLE_PYTHON_COOT=no
   ENABLE_GUILE_COOT=yes
   build_type=gtk2
else 
   if [ "$1" = "no-guile" ] ; then 
      ENABLE_PYTHON_COOT=yes
      ENABLE_GUILE_COOT=no
      build_type=gtk2-noguile
   else
      ENABLE_PYTHON_COOT=yes
      ENABLE_GUILE_COOT=yes
      build_type=gtk3-python3
   fi
fi


# Set the host and the OS.
# Fairly fundamental.
#
OS=$(uname)
HOST=$(hostname)

# Do we need to use a proxy server to get documents from the web? (set
# to 1 if we do)
use_proxy=${use_proxy:=}
# if we do need a proxy then we should give the proxy host and port too:
proxy_host=${proxy_host:=myproxy.com}
proxy_port=${proxy_port:=800}
no_proxy=${no_proxy:=".corp.net.com"}

# set this to true if you want to run the test suite and make binary 
# bundles (needs test data and the CCP4 suite):
#
run_tests=${run_tests:=false}

# run the second test?  Almost always passes and takes up lots of 
# disk space
#
run_second_test=${run_second_test:=true}

# This is where the compiled binaries/libraries/data get installed:
# Note that the directory name must NOT end in a /
#
AUTOBUILD_INSTALLED=${AUTOBUILD_INSTALLED:=${HOME}/autobuild/${OS}-${HOST}}
# or perhaps, for the adventurous:
#AUTOBUILD_INSTALLED=$CCP4_MASTER

# This is where the actual build (compilation) master directory is:
# a temporary or scratch directory would be sensible.
# 
# AUTOBUILD_BUILD=${HOME}/autobuild
# I'm putting my build on "scratch space"
AUTOBUILD_BUILD=${AUTOBUILD_BUILD:=$HOME/autobuild/building}

# This is where the build logs go:
# suggested value:
# LOGS=$AUTOBUILD_BUILD/logs
# but I want to put my log file on the web, so I put them here:
LOGS=${LOGS:=$HOME/public_html/build-logs/${OS}-${HOST}}

# set this to "no" if you don't want to compile the pre-release code.
# build_coot_prerelease=
build_coot_prerelease=${build_coot_prerelease:=1}

# get build specials, e.g. change the compiler or the compiler options
# (e.g build for debugging), extra libraries etc setup LD_LIBRARY_PATH
# (or whatever) to include the autobuild library dir so that
# intermediate (configure compile) programs run and the addition to
# the path of GNU make and wget.
# 
# use this to specify config_extras
# 
# options are: GL_prefix, e.g. SunOS has Mesa Graphics - this is
# where to find them:
#              glut_prefix, optionally can use freeglut
#
# Suggested value: comment out this line
specs=${specs:=$HOME/autobuild/build-scripts/${HOST}-specials}

# Make nightly binary tarballs?
# You probably don't want to do this, so recommended is do_nightlies=0
do_nightlies=${do_nightlies:=1}
# if you do want to build them where should they go?
# NIGHTLY_DEST_DIR=$AUTOBUILD_BUILD
NIGHTLY_DEST_DIR=${NIGHTLY_DEST_DIR:=${HOME}/public_html/software/binaries/nightlies/pre-release}
# if we are not building a nightly/pre-release, i.e. this is a binary 
# for a stable release, they go somewhere else:
#
STABLE_DEST_DIR=${STABLE_DEST_DIR:=${HOME}/public_html/software/binaries/stable}
# this is given args: arg1(dir) arg2(file-name)
BINARY_INSTALL_CMD=www-placement


# how do we transfer the file on the build host to the web server?
# Some systems we can simply copy the files.  For others, we now have
# this "publish" mechanism (to be overwritten as needed)
publish=${publish:=:}
publish_logs=${publish_logs:=:}

# if umask was not set, then use 0022
# umask 0022
if [ -z "$umask" ] ; then
   umask 0022
else 
   umask $umask
fi


# When we fail to extract the correct tar file from the web site, what
# shall we build instead?
#
fallback_coot_version=coot-0.4

# ----------------------------------------------------------------
#   End of tinkering with parameters.
# ----------------------------------------------------------------

# First, check that this is bash.
# 
if [ "$BASH" = "" ] ; then 
   echo this shell is not bash\!
   echo this script must be run with bash\!
   exit
fi


# now the functions:

function mkdir_maybe {

  dir=$1
  if [ ! -e "$dir" ] ; then
     mkdir $dir
  fi

}

# Give args: prefix-dir and (based on is-static-flag) either
# "clear-static" or "clear-dynamic"
#
function post_install_slim {

    echo we are slimming directory $1
    fat_dir="$1"
    cleaned_dir="$2"
    clear_type="$3"
    echo fat_dir is $fat_dir
    echo clear_type is $clear_type
    echo cleaned_dir is $cleaned_dir

    mkdir_maybe $cleaned_dir
    mkdir_maybe $cleaned_dir/bin
    mkdir_maybe $cleaned_dir/lib
    # and this for pyconfig.h
    if [ "$ENABLE_PYTHON_COOT" = yes ] ; then
       mkdir_maybe $cleaned_dir/include
       mkdir_maybe $cleaned_dir/include/$python_version
    fi

    lib_sos=`cd $fat_dir && ls -1 lib/lib*.so*`
    lib_as=`cd $fat_dir && ls -1 lib/lib*.a`

    if [ "$clear_type" = "clear-dynamic" ] ; then
       keep_lib_archs="$lib_as"
    fi

    if [ "$clear_type" = "clear-static" ] ; then
       keep_lib_archs="$lib_sos"
    fi

    file_list="etc info man share libexec  \
	libexec/coot-bin                   \
	libexec/findwaters-bin             \
	libexec/findligand-bin             \
	libexec/mini-rsr-bin               \
	libexec/density-score-by-residue-bin  \
	bin/coot                           \
        bin/findwaters                     \
	bin/findligand                     \
	bin/guile                          \
	bin/coot-density-score-by-residue       \
	bin/coot-available-comp-id         \
	bin/coot-compare-dictionaries      \
	bin/coot-dictionary-bond-distributions \
	bin/coot-make-shelx-restraints \
	bin/lidia \
        bin/curl \
	$keep_lib_archs"

    if [ "$ENABLE_PYTHON_COOT" = yes ] ; then
        # 20090427 remove python and python config from bin dir (as it
        #  interfers with system python)
        file_list="$file_list html  \
                   lib/$python_version include/$python_version"
    fi
    echo rsyncing... 
    for file in $file_list ;
    do
       dn=$(dirname $file)
       if [ -e $fat_dir/$file ] ; then
          # echo rsync -axr $fat_dir/$file $cleaned_dir/$dn
          rsync -axr $fat_dir/$file $cleaned_dir/$dn
       else
          echo $fat_dir/$file does not exist
       fi
    done
    echo done rsyncing.
}


function make_tar {

    echo in make_tar args: $1 $2
    echo in make_tar: in dir: $PWD

    tar_dir=$1
    tar_file_name=$2

    cd $install_top_dir/..
    if [ -e $tar_dir ] ; then
       echo taring nightly... from $tar_dir to $tar_file_name
       tar czf $tar_file_name $tar_dir
       status=$?
       if [ "$status" != 0 ] ; then 
	  echo ERROR:: tar czf $tar_file_name $tar_dir failed.
          echo ERROR:: while in directory $(pwd)
	  echo ERROR:: tar failed > $tar_file_name.md5sum
	  rm $tar_file_name
       else 
	  md5sum $tar_file_name > $tar_file_name.md5sum
	  /bin/ls -l $tar_file_name >> $tar_file_name.md5sum
	  echo done tar successfully.
       fi
    else
       echo ERROR:: tar target directory $tar_dir does not exist.
    fi
}

function ssh_copy { 

#     bin_tar_file=$1
#     if [ "$domainname" = "biop" ] ; then
#        do_ssh_copy=true
#     fi

    if [ "$do_ssh_copy" = true ] ; then 
       dir=public_html/software/binaries/nightlies/pre-release/
       echo ssh_copy copying over files using $HOME/bin/sput-with-dir $bin_tar_file $dir
       $HOME/bin/sput-with-dir $bin_tar_file $dir
       if [ -e $bin_tar_file.md5sum ] ; then 
          $HOME/bin/sput-with-dir $bin_tar_file.md5sum dir
       fi
    else 
       echo Not ssh copying file to York, $domainname
    fi    
}

function ssh_copy_to_biop { 

    bin_tar_file=$1

    if [ "$do_ssh_biop_copy" = true ] ; then 
       target_dir=public_html/coot/software/binaries/pre-releases/
       echo copying over files to Biop: $HOME/bin/sput-with-dir $bin_tar_file $target_dir
       $HOME/bin/sput-with-dir $bin_tar_file $target_dir
       if [ -e $bin_tar_file.md5sum ] ; then 
          echo and also: $HOME/bin/sput-with-dir $bin_tar_file.md5sum $target_dir
          $HOME/bin/sput-with-dir $bin_tar_file.md5sum $target_dir
       fi
    else 
       echo Not ssh copying file to biop
    fi    
}

function ssh_copy_logs_to_biop { 

    local_log_dir=$1
    target_dir=$2
    if [ "$do_ssh_biop_copy" = true ] ; then 
       echo copying over log files to Biop...
       target_dir=$2
       $HOME/bin/sput-with-dir $local_log_dir $target_dir
    else 
       echo Not ssh copying log files to biop
    fi
}

function setup_ccp4 {

   # we have access to $OS and $arch.

   if test "$OS" = Linux ; then
      setup_file=/y/programs/xtal/ccp4-6.0.2/ccp4-6.0.2/include/ccp4.setup-sh
      if test -e $setup_file ; then
         . $setup_file
      else 
         if [ "$systype" = x86_64-centos-6 ] ; then 
	    setup_file=/home/emsley/ccp4/setup-scripts/sh/ccp4.setup
         else 
            if [ "$systype" = x86_64-centos-5 ] ; then 
	       setup_file=/home/emsley/ccp4/ccp4-6.2.0/include/ccp4.setup-sh
            else 
               setup_file=setup-ccp4
            fi
         fi
         if test -e $setup_file ; then
            echo evaluating $setup_file
            . $setup_file
         else 
            echo WARNING:: ccp4 setup file $setup_file does not exist.
         fi
      fi
   fi
   if test "$OS" = Darwin ; then
      . /usr/local/ccp4-6.0.2/bin/ccp4.setup-sh
   fi
}


# exit 
function my_exit {

   exit_arg=$1
   shift
   extra_args=$*
   echo fail-build $extra_args > $LOGS/$build-status
   if [ -e $LOGS/$test-status ] ; then
      rm $LOGS/$test-status
   fi
   exit $exit_arg
}


# Return 0 on success, 1 on failure (or not tested)
#
#
# This can only be run when the coot tar file and greg tests have been
# untared (in this particular build) 
# 
# we should be in the directory where coot was untarred for building 
# when this function was called.
#
function test_coot { 

echo testing with greg
echo testing with greg >&2
echo currently we are here:
pwd
date
if [ "$1" != "" ] ; then
   coot_binary=$1
else 
   coot_binary=$install_top_dir/libexec/coot-bin
fi

if test "$run_tests" = true ; then
   # let's test our new coot
   
   # for python build we need to set COOT_PYTHON_DIR and COOT_HOME
   # as well as PYTHONPATH things now, because we do a "proper" 
   # import * from coot, which needs to find coot.py the 
   # conventional/pythonic way. If pythonic coot doesn't start properly, 
   # the greg tests fail.

   COOT_PYTHON_DIR=$install_top_dir/share/coot/python
   PYTHONPATH=$COOT_PYTHON_DIR
   PYTHONHOME=$install_top_dir
   export COOT_PYTHON_DIR
   export PYTHONPATH
   export PYTHONHOME

   # the greg tests are where the coot source code was untarred.
   # 
   if [ ! -d greg-tests ] ; then 
      echo greg-tests dir missing in this directory:
      pwd
      return 1
   fi

   setup_ccp4

   cat <<EOF > command-line-greg.scm
   (use-modules (ice-9 greg))
         (set! greg-tools (list "greg-tests"))
         (set! greg-debug #t)
         (set! greg-verbose 5)
         (let ((r (greg-test-run)))
            (if r
	        (coot-real-exit 0)
	        (coot-real-exit 1)))
EOF

   echo $install_top_dir/bin/coot --no-graphics --script command-line-greg.scm
        $install_top_dir/bin/coot --no-graphics --script command-line-greg.scm

   status=$?
   if [ $status = 0 ] ; then
      echo test_coot: coot test passed
      return 0
   else 
      echo test_coot: coot test failed
      return 1
   fi
else 
   echo run_tests is not true, not testing.
   return 1
fi

}

# Return 0 on success, 1 on failure (or not tested)
#
# we should be in the directory where coot was untarred for building 
# when this function was called.
#
function test_coot_python { 

echo testing with python unittest
echo testing with python unittest >&2

echo currently we are here:
pwd

if test "$run_tests" = true ; then
   # let's test our new coot
   # for python build we need to set COOT_PYTHON_DIR and COOT_HOME
   # as well as PYTHONPATH things now
   COOT_PYTHON_DIR=$install_top_dir/share/coot/python
   PYTHONPATH=$COOT_PYTHON_DIR
   PYTHONHOME=$install_top_dir
   export COOT_PYTHON_DIR
   export PYTHONPATH
   export PYTHONHOME

   echo $install_top_dir/bin/coot --no-graphics --script python-tests/coot_unittest.py
        $install_top_dir/bin/coot --no-graphics --script python-tests/coot_unittest.py

   status=$?
   if [ $status = 0 ] ; then
      echo test_coot_python: coot test passed
      return 0
   else 
      echo test_coot_python: coot test failed
      return 1
   fi
else 
   return 1
fi

}


function fixup_libcurl { 

    sed s,-L/usr/lib,, curl-config > curl-config.tmp
    mv curl-config.tmp curl-config
    sed s,-L/usr/lib,, lib/libcurl.la > lib/libcurl.la.tmp
    mv lib/libcurl.la.tmp lib/libcurl.la
}



# now on to some code!



if [ "$use_proxy" = 1 ] ; then
# establish proxy settings
  printf "Proxy user: "
  read proxy_user
  printf "Proxy password: "
  read -s proxy_pass
  printf "\n"
  http_proxy="http://${proxy_user}:${proxy_pass}@${proxy_host}:${proxy_port}/"
  https_proxy="http://${proxy_user}:${proxy_pass}@${proxy_host}:${proxy_port}/"
  ftp_proxy="http://${proxy_user}:${proxy_pass}@${proxy_host}:${proxy_port}/"
  ssl_proxy="http://${proxy_user}:${proxy_pass}@${proxy_host}:${proxy_port}/"
  export http_proxy https_proxy ftp_proxy ssl_proxy no_proxy
fi


# use the right (GNU) tar and provide the path to wget (needed
# for downloads) and to GNU make - (which is necesary for python
# at least).
#
# So that python and the *-configs are found when it is installed:
# A bit of a kludge because we do testing for pre-release later.  
# It's a logical mess.
#
if test "$build_coot_prerelease" = 1 ; then
   PATH=${AUTOBUILD_INSTALLED}-pre-release-gtk2/bin:$PATH
else 
   PATH=$AUTOBUILD_INSTALLED-gtk2/bin:$PATH
fi 
PATH=$PATH:/usr/local/bin:/usr/sbin:/usr/bsd:/sbin:/usr/bin:/bin:
PATH=$PATH:/etc:/usr/etc
#
export PATH
echo PATH is now: $PATH
echo AUTOBUILD_BUILD is $AUTOBUILD_BUILD

# This is where the sources downloaded from network go:
AUTOBUILD_SOURCES=${AUTOBUILD_BUILD}/sources
echo AUTOBUILD_SOURCES is $AUTOBUILD_SOURCES
if (! test -d ${AUTOBUILD_SOURCES}) ; then
   mkdir -p ${AUTOBUILD_SOURCES}
fi


# now make the build logs directory
mkdir -p $LOGS


shared_static_flag="--disable-shared"
shared_lib_ext=so
systype=unknown 

# malloc.h business, Darwin does not have malloc.h
# used in the gtk_canvas build
have_malloc=1
if test "$OS" = "Darwin" ; then
   have_malloc=0
   fix_ulong=1
   update_libtool=1
   update_config_guess_sub=1
   shared_static_flag="--disable-static"
   shared_lib_ext=dylib
   need_readline_patch=1
   # uname -a gives processor type in last field on Darwin
   processor=$(uname -a | awk '{print $(NF)}')
   need_gtk_imlib_libtool_fix=1
   if test "$processor" = "i386" ; then
      need_glib_getpwuid_fix=1
      need_glib_poll_fix=1
      need_gtk_canvas_patch=1
   fi
   osversion=$(sw_vers -productVersion)
   systype=MacOSX-${osversion}-${processor}
fi

# redirect the output.
#
# exec 2>&1 > $LOGS/$HOST.log
# Try not to redirect standard out so that it goes to
# the sub-shell log?  (testing)
echo INFO:: redirecting std output to $LOGS/build.log
exec > $LOGS/build.log

# local tinkering because our sgi runs out of room on /tmp on compiling
if [ $HOST = batman ] ; then
   TMPDIR=$HOME/tmp
   export TMPDIR
fi

date
#
if [ -n "$specs" ] ; then
   if [ -e "$specs" ] ; then
	echo running these extras:
	echo . --------------------------------
	cat "$specs"
	. "$specs"
	echo . --------------------------------
   fi
fi

#initially unset:
if test $OS = Linux ; then
  architecture=$(uname -i)
  # uname -i and uname -p (strangely) return unknown on my ubuntu
  if test $architecture = unknown ; then
     architecture=$(uname -m)
  fi
fi
# now architecture is something like i386 or x86_64

# now test for 64 bit Linux:
if test "$OS" = "Linux" ; then
   processor=$(uname -a | awk '{print $NF}')
   # on my Redhat i386, uname returns: 
   # Linux kalypso 2.6.12-1.1398_FC4 #1 Fri Jul 15 00:52:32 EDT 2005 i686 athlon i386 GNU/Linux
   # 64 bit Ubuntu:
   # Linux kalypso 2.6.22-14-generic #1 SMP Sun Oct 14 21:45:15 GMT 2007 x86_64 GNU/Linux
   # from that I presume we need $(NF-2) to get the arch (not NF-1).  Eh?
   # arch=`uname -a | awk '{print $(NF-1)}'`
   arch=$(uname -a | awk '{print $(NF-1)}')
   echo currently architecture is $architecture
   if test "$architecture" = x86_64 -o "$architecture" = ia64 ; then
      update_libtool=1
      update_config_guess_sub=1
   else 
       echo this is not a 64 bit machine
   fi 
fi

if test $OS = Linux ; then 

   if [ -e /bin/rpm ] ; then 
      if rpm -a ; then
         for i in fedora-release redhat-release redhat-release-workstation centos-release sl-release openSUSE-release ; do
           dist=`rpm -q --qf '%{name}' ${i}`
           echo  dist is $dist
           dist=`rpm -q --qf '%{name}' ${i}`
           if test $? = 0 ; then
              dist_name=$(echo ${dist} | sed -e 's/\-release//g' -e 's/\-workstation//g')
              dist_ver=$(rpm -q --qf '%{version}' ${i})
              break
           else
              dist_name='unknown'
           fi
         done
      else
         dist_name='unknown'
      fi
   fi

  case ${dist_name} in

    redhat* )
    case ${dist_ver} in
      [0-9] | [0-9].[0-9]* )
        systype=${architecture}-redhat-${dist_ver}
      ;;
      * )
        systype=${architecture}-rhel-$(echo ${dist_ver} | sed s/[A-Za-z]//g)
        if [ $arch = x86_64 ] ; then 
	   if [ $dist_ver = 4WS ] ; then
	      echo RedHat 4 Linux x86_64 detected. need to update libtool
              update_libtool=1
              # stupid la file of libcur puts /usr/lib in the link path (early).  This causes link 
              # problems on 64 bit RHEL4.  So lets fix curl-config and libcurl.la
              post_process_libcurl=1
	   fi
        fi
      ;;
    esac
    ;;

    fedora | centos | openSUSE )
      systype=${architecture}-${dist_name}-${dist_ver}
    ;;


    sl ) 
      systype=${architecture}-scientific-linux-${dist_ver}
      ;; 


    * )
      if test -r /etc/issue; then
        dist_name=$(awk 'NR==1{print tolower($1)}' /etc/issue)
        if [ "$dist_name" = "debian" ] ; then
           dist_ver=$(awk  'NR==1{x=tolower($2); y=tolower($3); gsub("/","-",x); gsub("/","-",y); print x "-" y}' /etc/issue)
        else
           dist_ver=$(awk  'NR==1{x=tolower($2); gsub("/","-",x); print x}' /etc/issue)
        fi
        systype=${architecture}-${dist_name}-${dist_ver}
      else
        systype=${architecture}-unknown-Linux
      fi
    ;;
  esac
fi


if test $OS = IRIX64 ; then
   osversion=`uname -r`
   systype=${osversion}-sgi
fi

if test $OS = IRIX ; then
   osversion=`uname -r`
   systype=${osversion}-sgi
fi

if test $OS = OSF1 ; then
   osversion=`uname -r | sed s/V//g`
   systype=${osversion}-OSF1
fi

echo systype: $systype

echo update_libtool: $update_libtool
echo update_config_guess_sub: $update_config_guess_sub


# check dependencies for Ubuntu.
case $dist_name in
   *ubuntu*)

      dep_list='
       patch
       m4
       g++
       libxext-dev
       libxmu-dev
       libxt-dev
       libc6-dev
       libncurses5-dev
       libglu1-mesa-dev
       libjpeg-dev
       mesa-common-dev'

      for dep in $dep_list
      do
         echo $dep
         if dpkg-query --status $dep > /dev/null ; then
            echo system has $dep
         else
            echo ======== $dep is missing ======
            missing_list="$missing_list $dep"
         fi
      done
      if [ "$missing_list" != '' ] ; then
         echo " "
         echo " "
         echo install these packages: $missing_list
         echo then re-run
         echo " "
         echo " "
         my_exit 2
      fi
      # swig is special.  On 6.06 it is not new enough.  So Kevin compiled his own.
      # swig is tested for later separately.

      ;;

    debian)
      dep_list='libncurses5-dev g++ libxext-dev libglu1-mesa-dev mesa-common-dev libgtk2.0-dev libgnomecanvas2-dev'
      for dep in $dep_list 
      do 
         echo $dep
         if dpkg-query --status $dep > /dev/null ; then
            echo system has $dep
         else
            echo ======== $dep is missing ======
            missing_list="$missing_list $dep"
         fi
      done
      if [ "$missing_list" != '' ] ; then
         echo " "
         echo " "
         echo install these packages: $missing_list
         echo then re-run
         echo " "
         echo " "
         my_exit 2
      fi

      ;; 

esac


# give us some diagnostic shell information:
# (what extra things did $specs give us?)
#
if [ "$use_proxy" = 1 ] ; then
    echo no diagnostic variables, we are using a proxy.
else    
    set
fi

# On 64 bit redhat 4, we (might) need to add X11 to the path for freeglut configure.
#
echo INFO:: MACHTYPE is $MACHTYPE
echo INFO:: systype is $systype
if [ "$systype" = x86_64-rhel-4 ] ; then
    PATH=$PATH:/usr/X11R6/bin
    export PATH
fi

# Do we link with sqlite (for the ligands database)?
# We allow the calling script to set use_sqlite=yes
use_sqlite=${use_sqlite:=no}

if [ "$use_sqlite" = "yes" ] ; then
    sqlite_config_args=--with-sqlite3
else
    sqlite_config_args=
fi

# We want to add some compiler info in the directory name.
# If CC is set, use that,
# If not, try gcc, 
# if not, try cc
#
# Similarly for the c++ compiler info
# If CXX is set, use that
# if not, try g++
# if not, try c++

if [ -n "$CC" ] ; then

        # CC was set
        gcctest=`$CC --version | awk 'NR==1 {print $2}'`
        if [ "$gcctest" != "(GCC)" ] ; then
           # but not gcc 
           v=$CC-`$CC -v`
              if [ $? -ne 0 ] ; then
                 v="missing_version"
              fi
        else
              # gcc
              v=$CC-`$CC --version | awk 'NR==1 {print $3}'`
        fi

else
	# CC not set
	v=gcc-`gcc -dumpversion | head -1`
        if [ $? -ne 0 ] ; then
		# not gcc
	        # try cc
		v=cc-`cc -v`
		if [ $? -ne 0 ] ; then
		   v="missing_version"
		fi
	fi
fi


if [ -n "$CXX" ] ; then

	# CXX was set
	gxxtest=$($CXX --version | awk 'NR==1 {print $2}')
        # typically gxxtest is set to "(GCC)", but not on Ubuntu, where the line is:
	# g++ (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3
        # Scientific Linux:
        # g++ (GCC) 4.4.6 20120305 (Red Hat 4.4.6-4)
        # RHEL 6:
        # g++ (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3)
        echo gxxtest: $gxxtest
	if [ "$gxxtest" != "(GCC)" ] ; then

             # but not g++ (?).  Maybe it was Ubuntu...

             case "$gxxtest" in
                *[Uu]buntu*) 
                   w=$($CXX --version | head -1 | awk '{print $3}' | tr -d ')')
                   ;;
	   
                *) 
                   w=$CXX-$($CXX -v | head -1 | sed 's/ / /g')
   	           if [ $? -ne 0 ] ; then
	    	      w="missing_cxx_version"
	           fi
                   ;; 
             esac
	else 
           # g++
           w=$CXX-$($CXX --version | awk 'NR==1 {print $3}')
	fi
else
	# CXX not set
	w=g++-`g++ -dumpversion | head -1`
        if [ $? -ne 0 ] ; then
		# not g++
	        # try c++
		w=c++-`c++ -v`
		if [ $? -ne 0 ] ; then
		   # try CC
		   w=CC-`CC -v`
		   if [ $? -ne 0 ] ; then
		      w="missing_c++_version"
		   fi
		fi
	fi
        # note that g++ 3.2 cannot compile clipper's test_contrib.cpp.
        # So, if we have g++ 3.2 or less, then we need to get and apply 
        # test_contrib.cpp.patch
        # add a space before argument setting
	awk -v version=$w 'BEGIN{ exit (version+0 >= 3.3)}'
        wvers=$?
        if [ $wvers = 0 ] ; then
	   need_clipper_contrib_patch=true
        fi
fi

# do we actually have g++ (or c++?)
if ! g++ --version ; then
   if ! c++ --version ; then
      echo no c++/g++ compiler.  Exit now
      my_exit 2
   fi
fi




# so now we have v and w set to something.  We 
# need to sanitize that something.  
v_fid=`echo $v | sed 's/ /_/g'`
w_fid=`echo $w | sed 's/ /_/g'`

compilers_dir=$build_type-${v_fid}_and_${w_fid}
HOSTLOGDIR=$LOGS/$compilers_dir
if [ ! -e $HOSTLOGDIR ] ; then 
  mkdir -p $HOSTLOGDIR
  if [ $? -ne 0 ] ; then
    #
    echo DISASTER: could not make directory $HOSTLOGDIR
    echo exiting.
    my_exit 2
  fi
fi

# 20120223 Whether or not we need to patch guile depends on the
# version of the compiler (or so I currently believe).  So here we do
# a string comparison vs "4.5".  If greater than this (e.g. "4.5.1") then
# we do need the patch. 
#
if awk -v v_fid=$v_fid 'BEGIN{if (v_fid > "gcc-4.5") exit 1 ; else exit 0}' ; then
  echo gcc version: $v_fid
else
  need_guile_unused_values_patch=true
  echo new version path
fi

echo need_guile_unused_values_patch is $need_guile_unused_values_patch



# need to add test that make is GNU make, and set number of processor if we have 
# enough memory and cpus...
#
echo "Testing version of make"
MAKE=make
if make --version ; then
   # let's try to set some args
   if [ -e /proc/meminfo ] ; then
      memory_kb=$(awk '/MemTotal:/ {print $2} ' /proc/meminfo)
      if [ "$memory_kb" -gt 2000512 ] ; then
         if [ -e /proc/cpuinfo ] ; then
            if np=$(grep processor /proc/cpuinfo | wc -l) ; then
               # limit to 8 processors
               if [ "$np" -gt 8 ] ; then
                  np=8
               fi
               echo using $np processors in compilation
               MAKE="make -j$np"
               echo MAKE set to $MAKE
            fi
         fi
      fi
   fi
   if [ $OS = Darwin ] ; then 
      np=$(system_profiler SPHardwareDataType | awk '/Total Number/ { print $NF }')
      MAKE="make -j$np"
   fi
else 
   # definately not GNU make
   # Try gmake then....
   gmake --version
   if [ $? -ne 0 ] ; then
      nomake=1
   else
      MAKE=gmake
      nomake=0
   fi
   if [ $nomake -eq 1 ] ; then
      echo Ooops.  Your make '(' `which make` ')' is not GNU make and gmake not found.
      echo Exiting now.
      my_exit 2
   fi
fi

echo testing for patch 
patch --version > /dev/null
if [ $? -ne 0 ] ; then
   echo no patch - exit now
   my_exit 2
fi

echo testing awk type \(prefer GNU awk\)
if awk --version ; then
   echo good, you have an awk from GNU.
else
   echo WARNING:: awk is not a GNU awk, trouble ahead possibly.
fi


# create $AUTOBUILD_BUILD directory

if [ ! -d "$AUTOBUILD_BUILD" ] ; then
   mkdir "$AUTOBUILD_BUILD"
   if [ $? -ne 0 ] ; then

        prev_dir=$(dirname $AUTOBUILD_BUILD)
        echo $prev_dir
        if [ ! -d "$prev_dir" ] ; then
           mkdir $prev_dir
           mkdir "$AUTOBUILD_BUILD"
        fi
   fi

   if [ ! -d "$AUTOBUILD_BUILD" ] ; then
      # echo mkdir of the AUTOBUILD_BUILD \(i.e. "$AUTOBUILD_BUILD"\) failed.
      my_exit 2
   fi

fi
   

cd $AUTOBUILD_BUILD
if [ $? -ne 0 ] ; then
	echo $AUTOBUILD_BUILD failed for some reason. Now in `pwd`
fi
# for ccp4 (20051104) compatibility, we can't use colons in the date string
date=$(date -u +'%Y-%m-%d__T%H_%M_%S')
echo Date: $date

# now in $AUTOBUILD_BUILD
BUILDING_DIR=${BUILDING_DIR:=${HOST}_$date}
mkdir $BUILDING_DIR
if [ $? -ne 0 ] ; then
	echo mkdir  $BUILDING_DIR failed for some reason. Now in `pwd`
fi
cd $BUILDING_DIR
if [ $? -ne 0 ] ; then
	echo cd $BUILDING_DIR failed for some reason. Now in `pwd`
fi
build_dir=`pwd`

echo checking wget
echo which wget
which wget
# use -P for timestamping
# Note that now wget depends on libhogweed and that depends on libgmp
# but we are compiling an old version of gmp (not sure that we need
# an old version) and libhogweed refers to a (now) non-existant
# functions and the dynamic loading fails.
# This setting of the alias fails.  It works on the command line.
# WGET="LD_LIBRARY_PATH=/usr/lib wget -N -P ${AUTOBUILD_SOURCES}"
# WGETO="LD_LIBRARY_PATH=/usr/lib wget   -P ${AUTOBUILD_SOURCES}"
WGET="wget -N -P ${AUTOBUILD_SOURCES}"
WGETO="wget   -P ${AUTOBUILD_SOURCES}"

# latest version (without .tar.gz extension)
coot_version=$fallback_coot_version

pre_release_server_dir=http://www.ysbl.york.ac.uk/~emsley/software/pre-release/
pre_release_server_dir=http://lmb.bioch.ox.ac.uk/coot/software/source/pre-releases/
pre_release_server_dir=http://www2.mrc-lmb.cam.ac.uk/groups/murshudov/coot/source/pre-releases/
pre_release_server_dir=http://www2.mrc-lmb.cam.ac.uk/personal/pemsley/coot/source/pre-releases
#
release_server_dir=http://www.ysbl.york.ac.uk/~emsley/software
release_server_dir=http://lmb.bioch.ox.ac.uk/coot/software/source/releases
release_server_dir=http://www2.mrc-lmb.cam.ac.uk/groups/murshudov/coot/source/releases/
release_server_dir=http://www2.mrc-lmb.cam.ac.uk/personal/pemsley/coot/source/releases
#
extras_place=http://www2.mrc-lmb.cam.ac.uk/personal/pemsley/coot/dependencies


${WGETO} -O ${AUTOBUILD_SOURCES}/index.html -o ${AUTOBUILD_SOURCES}/wget-e.s.p.log $release_server_dir/
${WGETO} -O ${AUTOBUILD_SOURCES}/index-pre-release.html -o ${AUTOBUILD_SOURCES}/wget-e.s.p.log $pre_release_server_dir/
pre_release_files_html="none"
if [ $build_coot_prerelease = 1 ]  ; then 
   pre_release_files_html=${AUTOBUILD_SOURCES}/index-pre-release.html
fi
if [ $build_coot_prerelease = yes ]  ; then 
   pre_release_files_html=${AUTOBUILD_SOURCES}/index-pre-release.html
fi

coot_version_tmp=$(awk  ' /a href=.*.tar.gz/ {f=$6; split($6, arr, "\""); file=arr[2]; gsub(".tar.gz", "", file); print file}' \
$pre_release_files_html | tail -1)

echo pre_release_files_html $pre_release_files_html
echo coot_version_tmp : $coot_version_tmp :

if [ -z "$coot_version_tmp" ] ; then
    echo clever coot_version extraction failed, using default.
else 
    coot_version=$coot_version_tmp
    echo clever coot_version succeeded, setting coot_version to $coot_version from extraction
fi


# override the switch which turns off the building of the pre-release here:
# build_coot_prerelease=1

# Let's initially set coot_prerelease_exists to not-exist, then we 
# try to download it from the Coot web site, and if it exists we set 
# coot_prerelease_exists to 1.  If it doesn't exist, we don't do that 
# of course and we also don't make the install_top_dir to be the pre-release
# directory later on.
coot_prerelease_exists=

# coot_version_pre no longer has .tar.gz extension

if test "$build_coot_prerelease" = 1 ; then 

   echo debug:: ${WGETO} -O ${AUTOBUILD_SOURCES}/index.html -o ${AUTOBUILD_SOURCES}/wget-e.s.p.log $pre_release_server_dir/
   ${WGETO} -O ${AUTOBUILD_SOURCES}/index.html -o ${AUTOBUILD_SOURCES}/wget-e.s.p.log $pre_release_server_dir/
   coot_version_pre=$(awk  ' /a href=.*.tar.gz/ {f=$6; split($6, arr, "\""); file=arr[2]; gsub(".tar.gz", "", file); print file}' \
       ${AUTOBUILD_SOURCES}/index.html | tail -1)

   echo INFO:: building pre-release and coot_version_pre is $coot_version_pre
   if [ -z "$coot_version_pre" ] ; then
      # this path when there are no pre-releases to be built, i.e. build the latest release.
      echo trying to build pre-release coot, but failed to find pre-release version
      echo make a stable release then
      build_coot_prerelease=
      BINARY_TAR_DEST_DIR=$STABLE_DEST_DIR
      mkdir -p ${BINARY_TAR_DEST_DIR}/holding

      ${WGETO} -O ${AUTOBUILD_SOURCES}/index.html -o ${AUTOBUILD_SOURCES}/wget-e.s.p.log $release_server_dir/
      echo examining release server files ${AUTOBUILD_SOURCES}/index.html
      # coot_version=$(awk  ' /compressed.*a href=/ {f=$6; split($6, arr, "\""); file=arr[2]; gsub(".tar.gz", "", file); files[file]=1; } END { for (file in files) { final=file } ; print final } ' 
      # have another go at latest version extraction.
      coot_version=$(awk '/compressed.*a href=/ {f=$6; split($6, arr, "\""); file=arr[2]; gsub(".tar.gz", "", file); files[++n]=file; } END {  for (file in files) print files[file]}'  \
          ${AUTOBUILD_SOURCES}/index.html | sort | tail -1)
      echo coot_version $coot_version

   else
      build_coot_prerelease=1  # belt and braces
      coot_prerelease_exists=1
      # tinker with coot_prefix, it is generic_prefix with pre-release added to prefix dir
      coot_prefix="--prefix=${AUTOBUILD_INSTALLED}-pre-release-${build_type} ${config_extras:-}"
      coot_source_tar_file=${pre_release_server_dir}/$coot_version_pre.tar.gz
      echo DEBUG:: set coot_source_tar_file to $coot_source_tar_file
      coot_version=`echo $coot_version_pre | sed s/\.tar.gz//`
      BINARY_TAR_DEST_DIR=$NIGHTLY_DEST_DIR
      mkdir -p ${NIGHTLY_DEST_DIR}
      mkdir -p ${BINARY_TAR_DEST_DIR}/holding
      echo INFO:: set the target destination for binary tar file \(BINARY_TAR_DEST_DIR\) to $NIGHTLY_DEST_DIR
   fi
else 
    # this is a stable release

    echo ============= This is a stable build ==============

    ${WGETO} -O ${AUTOBUILD_SOURCES}/index.html -o ${AUTOBUILD_SOURCES}/wget-e.s.p.log $release_server_dir/
    echo examining release server files ${AUTOBUILD_SOURCES}/index.html
    coot_version=$(awk  ' /compressed.*a href=/ {f=$6; split($6, arr, "\""); file=arr[2]; gsub(".tar.gz", "", file); files[file]=1; } END { asort(files, indices) ; for (file in files) { final=file } ; print final } ' \
        ${AUTOBUILD_SOURCES}/index.html | tail -1)
    if test -z "$coot_version" ; then
       # maybe it wasn't GNU awk (we can't sort the associative array), this will pick a "random" arry key -> coot_version
       coot_version=$(awk  ' /compressed.*a href=/ {f=$6; split($6, arr, "\""); file=arr[2]; gsub(".tar.gz", "", file); files[file]=1; } END { for (file in files) { final=file } ; print final } ' \
        ${AUTOBUILD_SOURCES}/index.html | tail -1)
    fi
    echo coot_version $coot_version

    BINARY_TAR_DEST_DIR=$STABLE_DEST_DIR
    mkdir -p ${BINARY_TAR_DEST_DIR}
    mkdir -p ${BINARY_TAR_DEST_DIR}/holding
fi

echo INFO:: binary tar destination dir: BINARY_TAR_DEST_DIR is $BINARY_TAR_DEST_DIR



echo coot_version_pre is $coot_version_pre
echo build_coot_prerelease: $build_coot_prerelease
echo release_server_dir $release_server_dir 
echo coot_version $coot_version



# set the build prefix for installed stuff.  Put everything in the
# pre-release directory if we are building a pre-release.
# (Perhaps this bit of code should go down lower, where we test 
# build_coot_prerelease again
#
# we need install_top_dir because we use it to copy over coot.py 
# to the install python directory.

# Notes for SSL with python:
# after configure, run this sed:
# real_ssl_prefix=/usr  # for mac, for PC, libs go in /usr/lib64 and
# sed -i -e "s?#SSL=.*?SSL=$real_ssl_prefix?" -e 's/^#_ssl/_ssl/' -e's/^#.*-DUSE_SSL/    -DUSE_SSL/' -e 's?^#.*-L$(SSL)/lib?    -L$(SSL)/lib?' Modules/Setup
# also add --with-ensurepip=install
# For ubuntu, you need system OpenSSL:
# sudo apt-get install openssl-dev
#
if [ "$build_coot_prerelease" = 1 ] ; then 
    if [ "$coot_prerelease_exists" = 1 ] ; then 
      generic_prefix="--prefix=${AUTOBUILD_INSTALLED}-pre-release-${build_type} ${config_extras:-}"
      coot_prefix="$generic_prefix"
      install_top_dir=${AUTOBUILD_INSTALLED}-pre-release-${build_type}
      # python seems to link OK on Darwin, so no need for this jiggery pokery
      if [ $(uname) != Darwin ] ; then
         python_lib_flags=LDFLAGS="-Wl,--rpath=${AUTOBUILD_INSTALLED}-pre-release-${build_type}/lib"
      else
         pv=$(sw_vers -productVersion)
         # e.g. 10.10
         os_minor_version="${pv%.*}"
         python_spec_flags="MACOSX_DEPLOYMENT_TARGET=$os_minor_version"
      fi
    else 
      # don't use pre-release
      generic_prefix="--prefix=$AUTOBUILD_INSTALLED-${build_type} ${config_extras:-}"
      coot_prefix="$generic_prefix"
      install_top_dir=${AUTOBUILD_INSTALLED}-${build_type}
      if [ $(uname) != Darwin ] ; then
         python_lib_flags=LDFLAGS="-Wl,--rpath=${AUTOBUILD_INSTALLED}-pre-release-${build_type}/lib"
      fi
    fi
else 
   # not pre-release
   generic_prefix="--prefix=$AUTOBUILD_INSTALLED-${build_type} ${config_extras:-}"
   install_top_dir=${AUTOBUILD_INSTALLED}-${build_type}
   coot_prefix="$generic_prefix"
   if [ $(uname) != Darwin ] ; then
      python_lib_flags=LDFLAGS="-Wl,--rpath=${AUTOBUILD_INSTALLED}-${build_type}/lib"
   else
      pv=$(sw_vers -productVersion)
      # e.g. 10.10
      os_minor_version="${pv%.*}"
      python_spec_flags="MACOSX_DEPLOYMENT_TARGET=$os_minor_version"
   fi
fi
PATH=$install_top_dir/bin:$PATH


# we need to export this for net-http, because it doesn't set
# variables from configure, we rely on a shell (environment) variable.
export install_top_dir

echo testing for install_top_dir: "$install_top_dir"
if [ ! -e "$install_top_dir" ] ; then
	echo $install_top_dir does not exist
	echo making directory $install_top_dir
	mkdir -p $install_top_dir
	if [ $? -ne 0 ] ; then
		echo DISASTER: $install_top_dir does not exist and no way
		echo to make it.
	        my_exit 2
	fi
else
	echo INFO:: $install_top_dir exists already.
fi
echo done testing for $install_top_dir

if [ ! -e "$install_top_dir/lib" ] ; then
	echo making "$install_top_dir/lib"
	mkdir -p "$install_top_dir/lib"
        if [ $? -ne 0 ] ; then
                echo DISASTER: $install_top_dir/lib cannot be created
                echo to make it.
                my_exit 2
        fi
fi
#
# append or set LD_LIBRARY_PATH.
#
# this can be problematic for a distributable tar build because this can cause linkage
# against ccp4's libxml2! Hmm!
# 
#
if [ -z "$LD_LIBRARY_PATH" ] ; then
    LD_LIBRARY_PATH=$install_top_dir/lib
    export LD_LIBRARY_PATH
else
    LD_LIBRARY_PATH=$install_top_dir/lib:$LD_LIBRARY_PATH
    export LD_LIBRARY_PATH
fi



#for Macs:
if test "$OS" = "Darwin" ; then
   if [ -z "$DYLD_LIBRARY_PATH" ] ; then
      # DYLD_LIBRARY_PATH=$install_top_dir/lib
      # export DYLD_LIBRARY_PATH
      :
   else
      #DYLD_LIBRARY_PATH=$install_top_dir/lib:$DYLD_LIBRARY_PATH
      #export DYLD_LIBRARY_PATH
      :
   fi
fi

#
# IRIX64 (on batman at least) does not seem to use LD_LIBRARY_PATH, 
# it uses, instead, LD_LIBRARYN32_PATH.  So we set that for all
# systems, hoping that it won't do any harm on other systems.
#
# This surely is no longer used - PE 20130909
# LD_LIBRARYN32_PATH=$LD_LIBRARY_PATH
# export LD_LIBRARYN32_PATH



# ccp4_system_type can be one of the following 
# irix irix64 sunos sunos64 aix hpux osf1 linux freebsd
# linux_compaq_compilers linux_intel_compilers generic Darwin
# ia64_linux_intel Darwin_ibm_compilers linux_ibm_compilers

ccp4_system_type="$OS"
if test "$OS" = Linux ; then
   ccp4_system_type=linux
else
   if test "$OS" = IRIX64 ; then
       ccp4_system_type=irix64
   else 
      if test "$OS" = IRIX ; then
          ccp4_system_type=irix
      else
         if test "$OS" = Darwin ; then
            ccp4_system_type=Darwin
         fi
      fi
   fi
fi
echo ccp4_system_type $ccp4_system_type



# clean up old test status:
echo build-in-progress @`date +"%a_%d_%b_%H:%M"` > $LOGS/build-status
echo waiting > $LOGS/test-status



# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
#                                which components?
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
#
# Often there are components provided by the operating system or optional 
# installs thereof.
#
build_mmdb=0
build_ssmlib=0
build_fftw=0
build_clipper=
build_guile=0
build_guile_www=0
build_guile_gui=0
build_libtool=0
build_net_http=0
build_gsl=0
# build_libungif=0
# build_libtiff=0
# build_libjpeg=0
# build_libpng=0
# build_imlib=0
# build_gtk_canvas=0
build_goocanvas=
build_python=
build_pygobject=
build_guile_gtk=
build_gtkglext=
build_freeglut=0
build_glib=
build_readline=
build_curl=
build_libidn2=



# In Gtk2, we presume that glib, gtk2 and gnomecanvas are available.  
# We shall test for these, but not build them.

# Where might the "system" components be?
#
non_standard_dir_list="/usr/freeware /sw /opt/gnome $install_top_dir"
dir_list="/usr /usr/X11R6 /usr/local $non_standard_dir_list"

# fftw
# We can eventually get fancy on this... but then clipper configure
# needs changing.
# The test is -n, i.e. a non-zero string length to build things.
#
# We need to test the $AUTOBUILD_INSTALLED directory for fftw because any
# other place could quite well have the fftw that is compiled with doubles.
#
if test -e $install_top_dir/include/fftw.h ; then
   echo installation has fftw
   build_fftw=
fi

if test -n "$build_fftw" ; then
   echo fftw should be built
   build_fftw=1
fi


if [ -e $install_top_dir/include/curl/curl.h ] ; then
   echo installation has curl/libcurl
else
   echo curl should be built
   build_curl=1
fi

# ---- test system libidn2 -------------------------------
if [ -e /usr/lib/libidn2.so ] ; then
   if [ -e /usr/lib/libidn2.la ] ; then
      echo system has libidn devel
   else
      if [ -e $install_top_dir/lib/libidn2.la ] ; then
         echo installation has libidn2.la
      else
         echo neither system nor installation has libidn2.la, libcurl should be built also
         build_libidn2=1
         build_curl=1
      fi
   fi
else
   # ---- test installation libidn -------------------------------
   if [ -e $install_top_dir/include/idna.h ] ; then
      echo installation has libidn2 devel
   else
      # set it up for building then
      echo system does not have libidn
      if [ -e $install_top_dir/include/idna.h ] ; then
         echo installation has libidn2
      else
         echo installation does not have libidn2, libcurl should be built also
         build_libidn2=1
         build_curl=1
      fi
   fi
fi

# test for pkg-config
if type pkg-config ; then
   if pkg-config --atleast-pkgconfig-version 0.16 ; then
      build_pkg_config=
      echo pkg-config is new enough `pkg-config --version`
   else
      build_pkg_config=1
      echo pkg-config should be built \(but won\'t be\).
   fi
else
   echo pkg-config doesn\'t exist.
fi

# Hmmm... I am not sure that I want to mess with pkg-config in the
# simple version.  But we do...
#
# This allows standard pkg-config to find gtkglext and several other
# things.
#
# override STD_PKGCONFIG_DIR to lib64 dir if we are in 64 bit.
#
STD_PKGCONFIG_DIR=/usr/lib/pkgconfig
case "$architecture" in
   x86_64*) 
     STD_PKGCONFIG_DIR=/usr/lib64/pkgconfig
     ;; 
esac
if [ -z "$PKG_CONFIG_PATH" ] ; then 
  # I think that the standard dir is not needed.
  # PKG_CONFIG_PATH=$install_top_dir/lib/pkgconfig:$STD_PKGCONFIG_DIR
  PKG_CONFIG_PATH=$install_top_dir/lib/pkgconfig
else 
  PKG_CONFIG_PATH=$install_top_dir/lib/pkgconfig:$PKG_CONFIG_PATH:$STD_PKGCONFIG_DIR
fi

if [ -e /opt/X11/lib/pkgconfig ] ; then
    PKG_CONFIG_PATH=/opt/X11/lib/pkgconfig:$PKG_CONFIG_PATH
fi


echo "COOT_CCP4_PACKAGES" "$COOT_CCP4_PACKAGES"
if [ -n "$COOT_CCP4_PACKAGES" ] ; then
    # PKG_CONFIG_PATH=$COOT_CCP4_PACKAGES/lib/pkgconfig:$PKG_CONFIG_PATH
    PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$COOT_CCP4_PACKAGES/lib/pkgconfig
fi

export PKG_CONFIG_PATH
echo  PKG_CONFIG_PATH is now $PKG_CONFIG_PATH


# Do we have freetype2?  cairo depends on it.
if pkg-config freetype2 ; then
   build_freetype2=
   echo system/installation has freetype2
else 
   echo freetype2 should be built
   build_freetype2=1
fi

if pkg-config --atleast-version=2.14.5 glib ; then
   # have glib
   echo glib is up to date
   build_glib=
else
   echo glib is not up to date, rebuild glib - maybe.
   build_glib=1
fi

# Test the output of pkg-config gtk+-2.0 for recent enough gtk. 
# If not, then build it yourself.
# 
# Experiment, to force bragg3 to compile gtk+2
# 
# was 2.8
needed_gtk_version=2.10
#
pkg-config --atleast-version=$needed_gtk_version gtk+-2.0
gtk_pkg_config_status=$?
if [ "$gtk_pkg_config_status" = 0 ] ; then 
   echo :::::::: gtk version is at least $needed_gtk_version
   echo :::::::: gtk version is `pkg-config --modversion gtk+-2.0`
fi 

# guilegtk2.1 need version 2.8 of gtk to compile out of the box.  If
# we have less than that then we need to apply a fix
#
gtk_version=`pkg-config --modversion gtk+-2.0`
if pkg-config --atleast-version=2.8 gtk+-2.0 ; then
    echo gtk is new enough for guile-gtk
    gtk_new_enough_for_guilegtk=true
else 
    echo guile-gtk needs fixing up
    gtk_new_enough_for_guilegtk=false
fi



# freeglut
# for dir in ${dir_list} ; do
if [ "$OS" = Darwin ] ; then 
   if [ -e /opt/X11/lib/libglut.dylib ] ; then 
      build_freeglut=
   fi
fi 
if test -e ${install_top_dir}/include/GL/freeglut_std.h ; then
   echo installation has Freeglut
   build_freeglut=
   glut_prefix="--with-glut-prefix=${install_top_dir}"
fi
# done

if test -n "$build_freeglut" ; then
   echo freeglut should be built
   build_freeglut=1
   glut_prefix="--with-glut-prefix=$install_top_dir"
fi

build_libtool=1
if test -e ${install_top_dir}/lib/libltdl.so.3 ; then
    build_libtool=
fi
if test -e ${install_top_dir}/lib/libltdl.la ; then
    build_libtool=
fi
if test -z "$build_libtool" ; then
    echo installation has libtool
else 
    echo libtool should be built
fi

# test for libgnomecanvas
if test -e /usr/include/libgnomecanvas-2.0/libgnomecanvas/gnome-canvas-line.h ; then
    echo system has libgnomecanvas
else
    if test -e ${install_top_dir}/include/libgnomecanvas-2.0/libgnomecanvas/gnome-canvas-line.h ; then
       echo installation has libgnomecanvas - you clever fellow
    else
       build_libgnomecanvas=1
    fi
fi


# ========== guile etc ==========
# FIXME indent

if [ $ENABLE_GUILE_COOT = yes ] ; then 

# using install_top_dir's libgmp causes selinux problems on some systems.  Therefore, if 
# libgmp-dev is installed in the system lib dir /usr/$acl_libdirstem/libgmp.so.la we should 
# use that rather than building.  Users of that build will have to install their own libgmp 
# then. So be it.

build_gmp=1
if test -e ${install_top_dir}/lib/libgmp.so.3 ; then
    echo installation has gmp
    build_gmp=
else 
    if test -e ${install_top_dir}/lib/libgmp.la ; then
       echo installation has gmp
       build_gmp=
    else
       echo gmp should be built
    fi
fi


build_readline=1
#
# guile dependency readline.  chihiro has bad build in
# guile-1.6.7/guile-readline/readline.c:107 'rl_pending_input' undeclared
# So installation needs to build readline (sigh).
#
if test -e ${install_top_dir}/include/readline/chardefs.h ; then
    build_readline=
fi

if test -z "$build_readline" ; then
    echo installation has readline
else 
    echo readline needs to be built
fi


# Darwin currently has guile-1.6 and guile (which is an older version)
# we want to use guile-1.6 if it exists.

# This need to be fixed for Macs I guess.  We need 1.8.3 not 1.6
#
# echo guile-1.6-config will fail on non-fink non-mac systems
# guile-1.6-config --version
# if test $? = 0 ; then
#    echo linking in fink 1.6 guile...
#    rm -f $install_top_dir/bin/guile
#    rm -f $install_top_dir/bin/guile-config
#    rm -f $install_top_dir/bin/guile-snarf
#    ln -s /sw/bin/guile-1.6        $install_top_dir/bin/guile
#    ln -s /sw/bin/guile-1.6-config $install_top_dir/bin/guile-config
#    ln -s /sw/bin/guile-1.6-snarf  $install_top_dir/bin/guile-snarf
# fi

echo atempting to run installed guile-config \(this may fail, that\'s OK\).

$install_top_dir/bin/guile-config --version

if $install_top_dir/bin/guile-config --version ; then 

    # We have a seen a situation somehow where bin/guile-config is installed 
    # but include/libguile.h is not.  Strange.  Let's test for libguile.h too.
    # 
    if test -e $install_top_dir/include/libguile.h ; then
	echo installation has guile
	build_guile=
    else 
       echo no include/libguile.h. guile     should be built
       echo no include/libguile.h. guile-gtk should be built
       build_guile_gtk=1
       build_guile=1
    fi
else
   echo guile-config failed. guile should be built
   build_guile=1
fi

# guile-gui
if test -f $install_top_dir/share/guile/gui/paren-match.scm ; then
    echo installation has guile-gui
    build_guile_gui=
else 
    echo guile-gui needs to be installed
    build_guile_gui=1
fi


# guile-lib 
if test -f $install_top_dir/share/guile/site/sxml/simple.scm ; then
    echo installation has guile-lib
    build_guile_lib=
else 
    build_guile_lib=1
    echo guile-lib needs to be installed
fi



# do we have greg? 

# LD_LIBRARY_PATH has been set by now
echo testing for greg using `which guile`
$install_top_dir/bin/guile -c '(use-modules (ice-9 greg))'
status=$?
echo guile greg status $status
if test $status = 0 ; then
   echo installation has greg
   build_greg=
else
   echo greg should be built
   build_greg=1
fi

fi #  ENABLE_GUILE_COOT

# ============= python ================
#
# python_version is the filename of the python executable.  For python
# 2.5.1 it is python2.5, not python2.5.1
#
python_version=python3.7
pver=3.7.4
#
# but more modern pythons do not compile (at least on my mac)
if [ $OS = Darwin ] ; then
   pver=2.7.8
fi

if [ $ENABLE_PYTHON_COOT = yes ] ; then
   $install_top_dir/bin/python -V
   if test $? != 0 ; then
      echo python should be built
      build_python=1
      build_pygtk=1
      build_pygobject=1
   else
      python_version_installed=`python -V 2>&1`
      python_target_version="Python $pver"

      case "$python_version_installed" in
          "$python_target_version")
            echo installation has python, $python_version_installed
            which python
            build_python=
	    build_pygtk=
            ;;
          *)
            echo python $python_version_installed installed but not up to date...
            echo python  should be built
            build_python=1
            build_pygobject=1
            build_pygtk=1
            ;;
      esac
   fi
fi

# test for pygobject
if [ $ENABLE_PYTHON_COOT = yes ] ; then
   if test -z "$build_pygobject" ; then
      # if test -e $install_top_dir/include/pygtk-2.0/pygobject.h ; then
      if test -e $install_top_dir/include/something-here ; then
         echo installation has pygobject
        build_pygobject=
      else
         echo pygobject NOT exists, pygobject should be built
         build_pygobject=1
         build_pygtk=1
      fi
   fi
fi

# force the GSL config to be in $install_top_dir, rather than
# potenially getting it from the system
# but does this compile cleanly on Mac OS X?  I've forgotten.
# Perhaps we will need to be more clever and potentially use
# the fink GSL if it is available.
$install_top_dir/bin/gsl-config --prefix
if test $? != 0 ; then
   echo gsl should be built
   build_gsl=1
else
   gsl_version=`gsl-config --version`

   # if you change this, change also gsl_version below.
   needed_gsl_version=1.11
   needed_gsl_version=1.12
   needed_gsl_version=1.15
   needed_gsl_version=1.16

   # tmp value.  This uses awk.  It need not do.
   # You can do the comparison with test.
   build_gsl=`awk -v A=$gsl_version -v N=$needed_gsl_version 'BEGIN{x = ((A+0) != (N+0)) ; print x}'`

   echo system/installation has the GSL version $gsl_version
   echo build_gsl is $build_gsl

   if [ $build_gsl = 1 ] ; then
	echo need to build GSL
        build_gsl=1
   else
	echo GSL is up to date
	# set build_gsl to blank:
	build_gsl=
   fi
fi



# ##############################################################
#   test for guile-gtk
# ##############################################################

# guile-gtk, only look in installation, not system.

# if we are not building gtk, perhaps we should not build
# guile-gtk also?
if test -e "${install_top_dir}/include/guile-gtk.h" ; then
   echo installation has guile-gtk
   if [ "$build_guile" != 1 ] ; then
      build_guile_gtk=
   else
      echo guile needs building, so guile-gtk needs building.
      build_guile_gtk=1
   fi
else
   echo installation does not have guile-gtk
   build_guile_gtk=1
fi

if test -n "${build_guile_gtk}" ; then
   echo guile-gtk.h not found, guile-gtk should be built
   build_guile_gtk=1
else
   echo guile-gtk should not be built
fi

# ##############################################################
#   test for gnomecanvas
# ##############################################################

# on new Scientific Linux (7.3) we need to test for libgnomecanvas, not libgnomecanvas-2.0
#
# test for libgnomecanvas here
if pkg-config --modversion libgnomecanvas-2.0 ; then
   :
else 
   # echo pkg-config does not find libgnomecanvas-2.0.  Exiting.
   # pkg_hnd=yum
   # if [ "$dist_name" = debian ] ; then 
   #    pkg_hnd=apt-get
   # fi
   # if [ "$dist_name" = ubuntu ] ; then 
   #    pkg_hnd=apt-get
   # fi
   # echo consider: $pkg_hnd install libgnomecanvas-devel
   # my_exit 2

   echo ================ set build_libgnomecanvas=1
   build_libgnomecanvas=1
fi

# ##############################################################
#   test for goocanvas
# ##############################################################

if [ "$build_goocanvas" = "" ] ; then

    # has it been installed?
    #
    if [ -e "${install_top_dir}/include/goocanvas-1.0/goocanvaswidget.h" ] ; then
	build_goocanvas=no
        goocanvas_args="--with-goocanvas-prefix=$install_top_dir"
    fi

    # is it compilable? (do we have the right gtk (etc) version?)
    #
    if pkg-config gtk+-2.0 --atleast-version 2.12 ; then
       echo goocanvas: recent enough gtk+ version
       if pkg-config cairo --atleast-version 1.4 ; then
          echo goocanvas: recent enough cairo version
          # yes, compilable
          goocanvas_args="--with-goocanvas-prefix=$install_top_dir"
       else
          echo goocanvas: Cairo is too old.  Goocanvas needs cairo 1.4 or later. You have:
	  pkg-config cairo --modversion
	  build_goocanvas=no
       fi
    else 
       echo goocanvas: gtk+-2.0 too old.  Goocanvas needs 2.12 or later. You have:
       pkg-config gtk+-2.0 --modversion
       build_goocanvas=no
    fi
fi
echo goocanvas:  goocanvas_args set to $goocanvas_args


# test for mmdb: Does mmdb_model.h exist, and if it does, does it
# contain MMDBF_IgnoreHash.  If not, then build mmdb.
#
# CCP4 mmdb installs in the include/mmdb2 directory, 
#
if test -e "${install_top_dir}/include/mmdb2/mmdb_model.h" ; then
    build_mmdb=
else
    echo installation has no mmdb, build mmdb.
    build_mmdb=1
fi



ssm_include_dir=ssm
if [ -e $install_top_dir/include/$ssm_include_dir/ssm_align.h ] ; then
   if [ "$build_mmdb" = 1 ] ; then
      build_ssmlib=1
   else 

      # do we have SSM version 1.4 or later?
      if grep --silent "MINOR_VERSION = [4-9]" $install_top_dir/include/$ssm_include_dir/ssm_defs.h ; then
         echo SSM is found.
         build_ssmlib=
      else       
         echo we need a newer SSM.
         build_ssmlib=1
      fi
   fi
else
   echo SSM not found - needs to be built
   build_ssmlib=1
fi


# clipper depends on mmdb, so if mmdb was built, the so must clipper be.
# likewise for fftw.
#
build_clipper=1
if [ -z "$build_mmdb" ] ; then
    # we potentially can pass the building of clipper:
    echo INFO:: shall we build clipper: mmdb not to be built
    if [ -z "$build_fftw" ] ; then 
       echo INFO:: shall we build clipper: fftw not to be built
       # test for new ccp4-based clipper (for mtz and maps)
       if [ -e $install_top_dir/include/clipper/ccp4/ccp4_mtz_io.h ] ; then
          echo $install_top_dir/include/clipper/ccp4/ccp4_mtz_io.h exist
          if [ -e $install_top_dir/include/clipper/contrib/sfscale.h ] ; then
             echo $install_top_dir/include/clipper/contrib/sfscale.h exist
	     build_clipper=
          else
            echo $install_top_dir/include/clipper/contrib/sfscale.h not exist, building clipper
  	     build_clipper=1
          fi
       else 
          echo $install_top_dir/include/clipper/ccp4/ccp4_mtz_io.h not exist, building clipper
       fi
    fi
else
   echo mmdb needs to be built, so clipper needs building.
fi

# shall we build libccp4c?
if [ -e $install_top_dir/lib/libccp4c.la ] ; then
    # 20170925 test for the pkg-config file
    if [ -e $install_top_dir/lib/pkgconfig/libccp4c.pc ] ; then
        # no need to rebuild
        build_ccp4c=
    else 
        build_ccp4c=1
    fi
else
    build_ccp4c=1
fi

# Here we can force the building of clipper because we don't
# know if the dependency libccp4c.la was from 6.0 or 5.0.2
# But, let's not do that any more.
# build_clipper=
# build_ccp4c= 

# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
#                                build components
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
#

#
# libccp4: (not fortran)
if test -n "$build_ccp4c" ; then 
    echo BUILDING: libccp4
    libccp4_version=6.5.1
    # ${WGET} http://www.ysbl.york.ac.uk/~emsley/software/extras/libccp4c-5.0.2-ysbl-2.tar.gz
    # ${WGET} http://www.ysbl.york.ac.uk/~emsley/software/extras/libccp4c-5.0.2-ysbl-3.tar.gz
    #${WGET} http://www.ysbl.york.ac.uk/~emsley/software/extras/martyn-extras.tar.gz
    #${WGET} http://lmb.bioch.ox.ac.uk/coot/software/extras/libccp4c-5.0.2-ysbl-3.tar.gz
    #${WGET} http://lmb.bioch.ox.ac.uk/coot/software/extras/martyn-extras.tar.gz
    #${WGET} http://lmb.bioch.ox.ac.uk/coot/software/extras/ccp4-libs-underlay-2.tar.gz
    # ${WGET} $extras_place/libccp4c-5.0.2-ysbl-3.tar.gz
    # ${WGET} $extras_place/martyn-extras.tar.gz
    # ${WGET} $extras_place/ccp4-libs-underlay-2.tar.gz
    # ${WGET} $extras_place/libccp4-6.4.0.tar.gz
    ${WGET} ftp://ftp.ccp4.ac.uk/opensource/libccp4-$libccp4_version.tar.gz
    ( 
    date
    gzip -dc ${AUTOBUILD_SOURCES}/libccp4-$libccp4_version.tar.gz | tar xf -
    cd libccp4-$libccp4_version
    if ./configure $generic_prefix --enable-shared --disable-static --disable-fortran ; then
       if $MAKE ; then 
          $MAKE install
       fi
    fi
    ) 2>&1 >  $HOSTLOGDIR/01-libccp4.txt 
else 
    echo not building libccp4:
fi
#
# mmdb
#
#
# mmdb
#
if test -n "$build_mmdb" ; then
   echo BUILDING mmdb:
#
# mmdb_version=1.0.10.  Not yet.
# mmdb_version=1.0.8-ysbl-3
mmdb_version=1.11
mmdb_version=1.12
mmdb_version=1.19
mmdb_version=1.21
mmdb_version=1.22
mmdb_version=1.23
mmdb_version=1.23.2
mmdb_version=1.24
mmdb_version=1.24.2
mmdb_version=1.25.0
mmdb_version=1.25.2
mmdb_version=1.25.3
mmdb_version=2.0.1
mmdb_version=2.0.2
mmdb_version=2.0.5
mmdb_version=2.0.11
mmdb_version=2.0.16
mmdb_version=2.0.19
mmdb_version=2.0.20
# mmdb_server_dir=ftp://ftp.ccp4.ac.uk/opensource
mmdb_server_dir=$extras_place
echo ${WGET} $mmdb_server_dir/mmdb2-$mmdb_version.tar.gz
${WGET} $mmdb_server_dir/mmdb2-$mmdb_version.tar.gz

(
date
gzip -dc ${AUTOBUILD_SOURCES}/mmdb2-$mmdb_version.tar.gz | tar xf -
echo gzip -dc ${AUTOBUILD_SOURCES}/mmdb2-$mmdb_version.tar.gz
cd  mmdb2-$mmdb_version
pwd
# patch to read long lines in a cif file
# 20091110 this patch is not available, above says that it is badly formed.  
#   Needs fixing.
# add the following 2 touches because centos 4.6 jackal gives LIBTOOL 
# problems on `make'.
# if configure.in newer than aclocal.m4 -> rebuild aclocal.m4
# if aclocal.m4 newer than Makefile.in -> rebuild Makfile.in
# mmdb 1.21 has configure.in newer than aclocal.m4 for some reason.
# must make sure that next version does not.
# touch aclocal.m4
# sleep 2
# touch Makefile.in
./configure $generic_prefix --enable-shared --disable-static
if $MAKE ; then 
   $MAKE install
fi
) > $HOSTLOGDIR/02-mmdb.txt 2>&1
else
   echo not building mmdb:
fi


if test -n "$build_ssmlib" ; then 

   echo BUILDING SSM:
#
# ssm_version=0.0-pre-2-ysbl
ssm_version=1.4
#${WGET} http://lmb.bioch.ox.ac.uk/coot/software/extras/SSMlib-$ssmlib_version.tar.gz
#${WGET} http://lmb.bioch.ox.ac.uk/coot/software/extras/SSMlib-$ssmlib_version.tar.gz
# ${WGET} $extras_place/SSMlib-$ssmlib_version.tar.gz
# ${WGET} ftp://ftp.ccp4.ac.uk/opensource/ssm-1.3.tar.bz2
# ${WGET} ftp://ftp.ccp4.ac.uk/opensource/ssm-1.3.tar.bz2
${WGET} $extras_place/ssm-$ssm_version.tar.gz
(
date
# gzip -dc ${AUTOBUILD_SOURCES}/ssm-1.3.tar.bz2 | tar xf -
tar xf ${AUTOBUILD_SOURCES}/ssm-$ssm_version.tar.gz
cd ssm-$ssm_version
./configure $generic_prefix  --enable-shared --disable-static CPPFLAGS=-I$install_top_dir/include LDFLAGS=-L$install_top_dir/lib
if $MAKE ; then 
   $MAKE install
fi
) >  $HOSTLOGDIR/02-ssm.txt 2>&1
else 
   echo not building ssm:
fi


# fftw
if test -n "$build_fftw" ; then
    echo BUILDING fftw:
#
# ${WGET} http://www.ysbl.york.ac.uk/~emsley/software/fftw-2.1.5.tar.gz
# ${WGET} http://www.ysbl.york.ac.uk/~emsley/software/extras/fftw-configure-stuff.tar.gz
#${WGET} http://lmb.bioch.ox.ac.uk/coot/software/extras/fftw-2.1.5.tar.gz
#${WGET} http://lmb.bioch.ox.ac.uk/coot/software/extras/fftw-configure-stuff.tar.gz
${WGET} $extras_place/fftw-2.1.5.tar.gz
# ${WGET} $extras_place/fftw-configure-stuff.tar.gz # Don't need

(
date
pwd
gzip -dc ${AUTOBUILD_SOURCES}/fftw-2.1.5.tar.gz | tar xf -
# gzip -dc ${AUTOBUILD_SOURCES}/fftw-configure-stuff.tar.gz | tar xf - # don't need.
cd fftw-2.1.5
if ./configure $generic_prefix --enable-shared --enable-float ; then
   if $MAKE ; then
      $MAKE install
   fi
fi 
)  > $HOSTLOGDIR/03-fftw.txt 2>&1
else
    echo not building fftw:
fi

# # clipper
# #
# #
if test -n "$build_clipper" ; then

    # clipper: we use the ccp4 version of clipper now.
    # (it uses configure, not scons)
    #
    echo BUILDING clipper:
    # clipper_version is for the file name on the server, clipper_dir_version is the directory 
    # that files untars into (20160713 with Marcin in control of the tar dist now they are the 
    # same, it seems?).
    clipper_version=20ac
    clipper_version=2.1-081118-ac
    clipper_version=2.1-081201-ac
    clipper_version=2.1-090210-ac
    clipper_version=2.1-090522-ac
    clipper_version=2.1-090826-ac
    clipper_version=2.1-091215-ac
    clipper_version=2.1-100511-ac
    clipper_version=2.1
    clipper_version=2.1.20160708
    clipper_dir_version=2.1
    clipper_dir_version=$clipper_version
    # ${WGET} http://www.ysbl.york.ac.uk/~cowtan/clipper/clipper-$clipper_version.tar.gz

    # 20110921 hack in a temporary solution, while Kevin's new clipper
    # is not available yet from his site.
    clipper_hack_version=2.1-110915-fixup-2
    clipper_hack_version=2.1-140110-fixup
    clipper_hack_version=2.1-20170202.tar.gz
    # ${WGET} $extras_place/clipper-$clipper_hack_version.tar.gz

    # now clipper has all the bits.
    # ${WGET} $extras_place/clipper-$clipper_version.tar.gz
    # ${WGET} ftp://ftp.ccp4.ac.uk/opensource/clipper-$clipper_version.tar.gz

    # Bernie made this tarball
    clipper_version=2.1.20180802
    clipper_version_dir=2.1
    ${WGET} $extras_place/clipper-$clipper_version.tar.gz
    ${WGET} $extras_place/clipper-configure-2.patch

    (
    gzip -dc ${AUTOBUILD_SOURCES}/clipper-$clipper_version.tar.gz | tar xf -

    cd clipper-$clipper_version_dir
    pwd
    date

    # patch the hkl_data.h header
    # sed -ibackup -e 's/int i = 0; i < list.size(); i++/unsigned int i = 0; i < list.size(); i++/' clipper/core/hkl_data.h
    
    # --- make clipper

    # patch clipper

    # fix the linking to the wrong libfftw
    echo patching clipper with ${AUTOBUILD_SOURCES}/clipper-configure-2.patch
    patch -p0 < ${AUTOBUILD_SOURCES}/clipper-configure-2.patch

    echo . ------------------------------------------------------------------------------
    echo . "         clipper                                                            "
    echo . ------------------------------------------------------------------------------
    export     CPPFLAGS=-I$install_top_dir/include
    export      LDFLAGS=-L$install_top_dir/lib
    echo CPPFLAGS $CPPFLAGS
    echo LDFLAGS  $LDFLAGS
    echo PKG_CONFIG_PATH  $PKG_CONFIG_PATH

    # if /usr/lib64/lib(r)fftw.so exists, clipper will link to them
    # despite our having build fftw for ourselves - I need to stop
    # that (because of clipper's m4/fftw.m4)
    
    save_libs="$LIBS"
    export LIBS="-L$install_top_dir/lib:$LIBS"
    if [ -z "$LIBS" ] ; then
      save_libs=
      export LIBS=-L$install_top_dir/lib
    else 
      save_libs="$LIBS"
      export LIBS=-L$install_top_dir/lib:$LIBS
    fi
    echo now we have LIBS $LIBS

    echo ./configure --prefix=$install_top_dir \
	--enable-mmdb=$install_top_dir \
	--enable-ccp4=$install_top_dir \
	--enable-shared  \
	--enable-mmdb    \
	--enable-cif     \
	--enable-ccp4    \
	--enable-minimol \
	--enable-cns     \
       CXXFLAGS="-g -O2 -fno-strict-aliasing"

    ./configure --prefix=$install_top_dir \
	--enable-mmdb=$install_top_dir \
	--enable-ccp4=$install_top_dir \
	--enable-shared  \
	--enable-mmdb    \
	--enable-cif     \
	--enable-ccp4    \
	--enable-minimol \
	--enable-cns     \
       CXXFLAGS="-g -O2 -fno-strict-aliasing -Wno-narrowing"
    export LIBS="$save_libs"
    # 20110921 I don't think we need these flags any longer
    #        CCP4_CXXFLAGS=-I$install_top_dir/include CCP4_LIBS=$install_top_dir/lib/libccp4c.la
    # we don't want to make the clipper executables, so let's cd in to the clipper libs and 
    # make (just) those.
    if $MAKE ; then
       $MAKE install
    fi

    ) > $HOSTLOGDIR/04-clipper.txt 2>&1

    clipper_build_status=$?
    if [ $clipper_build_status != 0 ] ; then
	echo clipper build failed, exiting
	my_exit 2
    fi

else 
    echo not building clipper:
fi



# freeglut
if test -n "$build_freeglut" ; then
    echo BUILDING freeglut:
${WGET} $extras_place/freeglut-2.4.0.tar.gz
(
date
pwd
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -I/usr/X11R6/include"
export CFLAGS
gzip -dc ${AUTOBUILD_SOURCES}/freeglut-2.4.0.tar.gz | tar xf -
cd freeglut-2.4.0

# On 64 bit redhat 4, we need to use /usr/X11R6/lib64, not /usr/X11R6/lib.
echo INFO:: MACHTYPE is $MACHTYPE
echo INFO:: systype is $systype
if [ "$systype" = x86_64-rhel-4 ] ; then
    echo patching freeglut configure for lib64.
    cp configure configure.orig
    if sed -i -e 's?/usr/X11R6/lib?/usr/X11R6/lib64?' configure ; then
       echo patching went OK.
    else 
	echo patching failed.
	my_exit 1
    fi
fi

./configure $generic_prefix --disable-warnings 
build_status=$?
echo INFO:: freeglut configure status $build_status
if [ $build_status -eq 0 ] ; then
   $MAKE
   build_status=$?
   echo INFO:: freeglut make status $build_status
   if [ $build_status -eq 0 ] ; then
      echo INFO:: freeglut make installing...
      $MAKE install
      glut_prefix="--with-glut-prefix=$install_top_dir"
      echo INFO:: setting glut_prefix to $glut_prefix
   fi
fi
CFLAGS="$save_CFLAGS"
export CFLAGS
) >  $HOSTLOGDIR/05-freeglut.txt 2>&1
else
   echo not building freeglut:
fi


if [ "$build_gtkglext" = 1 ] ; then
    echo BUILDING gtkglext:
    gtkglext_version=1.2.0
    # this host? disappeared.
    # ${WGET} http://surfnet.dl.sourceforge.net/sourceforge/gtkglext/gtkglext-$gtkglext_version.tar.gz
    # ${WGET}   http://lmb.bioch.ox.ac.uk/coot/software/extras/gtkglext-$gtkglext_version.tar.gz
    ${WGET}   $extras_place/gtkglext-$gtkglext_version.tar.gz
    (date
     pwd
     gzip -dc ${AUTOBUILD_SOURCES}/gtkglext-$gtkglext_version.tar.gz | tar xf -

     # now, for some (newer) versions of GTK+ the gtkglext needs to be
     # tweaked so that it fixes out of date function usage:

     cd gtkglext-$gtkglext_version
     echo gtk+-2.0 version:
     pkg-config gtk+-2.0 --modversion
     # gtk+ 2.20 needs converting GTK_WIDGET_REALIZED to gtk_widget_get_realised, but 
     # gtk+ 2.18 does not (it fails if we add that patch), so use a simpler one.
     if pkg-config gtk+-2.0 --atleast-version 2.16 ; then
        patch_file_1=gtk-gtkglwidget.c-for-modern-gtk-for-2.18.patch
        patch_file_2=gtkglext-context-finalize.diff
        patch_file_3=gtkglext-multisample.patch.patch
        patch_file_4=gtkglext-pangox.patch
        patch_file_5=gtkglext-gdkglfont.patch

        if pkg-config gtk+-2.0 --atleast-version 2.20 ; then
           patch_file_1=gtk-gtkglwidget.c-for-modern-gtk.patch
        fi

        echo we have sufficiently new version of gtk+, we need to patch gtkglext with $patch_file_1

        # when in the gtkglext dir, patch patch_file_2 with -p0 and patch_file_3 with -p1 
	${WGET} $extras_place/$patch_file_1
        ${WGET} $extras_place/$patch_file_2
        ${WGET} $extras_place/$patch_file_3
        ${WGET} $extras_place/$patch_file_4
        ${WGET} $extras_place/$patch_file_5

        # we need extra patch to get rid of pangox dependency in
        # configure and stop gdkglfont-x11.c getting compiled by
        # removing references to it and its object from
        # gdk/x11/Makefile.  Either that or get a nice new gtkglext by
        # doing make dist from git (see hal Project).

        if patch -p0 < ${AUTOBUILD_SOURCES}/$patch_file_1 ; then 
            echo gtkglext patched patch_file_1 good.
        else 
            echo gtkglext patch_file_1 failed.
            my_exit 2
        fi
        if patch -p0 < ${AUTOBUILD_SOURCES}/$patch_file_2 ; then 
            echo gtkglext patched patch_file_2 good.
        else 
            echo gtkglext patch_file_2 failed.
            my_exit 2
        fi
        if patch -p1 < ${AUTOBUILD_SOURCES}/$patch_file_3 ; then 
            echo gtkglext patched patch_file_3 good.
        else 
            echo gtkglext patch_file_3 failed.
            my_exit 2
        fi

        # 20180822 I also found on Ubuntu 18.04 gtk 2.24.32 that we need to fix up gdkglshapes.c
        sed -e 's/static int index/static int index_xx/' \
            -e 's/drawtriangle(i, idata, index/drawtriangle(i, idata, index_xx/' \
           gdk/gdkglshapes.c > shapes-tmp
        mv shapes-tmp gdk/gdkglshapes.c
     else
        echo version of gtk is old, no need to patch gtkglext.
     fi

     # get rid of font stuff.
     if patch -p0 < ${AUTOBUILD_SOURCES}/$patch_file_4 ; then 
         echo gtkglext patched patch_file_4 good.
     else 
         echo gtkglext patch_file_4 failed.
         my_exit 2
     fi
     if patch -p0 < ${AUTOBUILD_SOURCES}/$patch_file_5 ; then 
         echo gtkglext patched patch_file_5 good.
     else 
         echo gtkglext patch_file_5 failed.
         my_exit 2
     fi
   
     if [ $OS = Darwin ] ; then
        if [ -e /opt/X11 ] ; then 
           extra_gtkglext_args="CPPFLAGS=-I/opt/X11/include LDFLAGS=-L/opt/X11/lib"
        fi
     fi

     echo PKG_CONFIG_PATH: $PKG_CONFIG_PATH

     echo ./configure $generic_prefix $extra_gtkglext_args
     if ./configure $generic_prefix $extra_gtkglext_args ; then 
        if [ "$update_libtool" = 1 ] ; then
           cp $install_top_dir/bin/libtool .
        fi
        # do this on 64 bit systems. FIXME
        # Use uname -p being x84_64
        #      sed -i 's#sys_lib_search_path_spec="#sys_lib_search_path_spec="/usr/lib64#' libtool
        $MAKE
        status=$?
        if [ "$status" != 0 ] ; then
           echo make of gtkglext failed
        else
           $MAKE install
        fi
     else 
        echo : ----------------------------------------------------------------
        echo gtkglext configure failed
        echo : ----------------------------------------------------------------
        echo here is config.log:
        echo " " 
        cat config.log
        status=2
     fi
     exit $status
     ) > $HOSTLOGDIR/06-pre-gtkglext.txt 2>&1
    # capture the status from the subshell, if an error, exit the main shell too.
    status=$?
    echo status from gtkglext build was $status
    if [ $status = 2 ] ; then
       echo that\'s an error.
       echo perhaps libXt-devel is missing\?
       my_exit 2
    fi
else
    echo not building gtkglext:
fi 


##################### libgnome #####################################
#
# for SuSe 11.3, we need to install the following:
# g++ patch m4 make libgnomecanvas-dev gtk-dev swig

# Redhat 7.3 doesn't have libgnomecanvas*-devel because they don't support 
# development using this lib.  Move to libcairo they say (I think).  
# Well, maybe later.
# Get libgnomecanvas here if needed:
# http://ftp.gnome.org/pub/gnome/sources/libgnomecanvas/2.30/libgnomecanvas-2.30.3.tar.bz2
# depends on
# https://ftp.gnome.org/pub/gnome/sources/libart_lgpl/2.3/libart_lgpl-2.3.21.tar.gz
# test for libgnomecanvas and if the system doesn't have it then
# build it
if [ "$build_libgnomecanvas" = 1 ] ; then

   # do both libart_lgpl and libgnomecanvas

   libart_lgpl_version=2.3.21
   ${WGET} https://ftp.gnome.org/pub/gnome/sources/libart_lgpl/2.3/libart_lgpl-2.3.21.tar.gz
   (
   tar xf ${AUTOBUILD_SOURCES}/libart_lgpl-2.3.21.tar.gz
   cd libart_lgpl-$libart_lgpl_version
   ./configure $generic_prefix
   ${MAKE} && make install
   cd -
   ) > $HOSTLOGDIR/06-libart_lgpl.txt

   libgnomecanvas_version=2.30.3
   ${WGET} http://ftp.gnome.org/pub/gnome/sources/libgnomecanvas/2.30/libgnomecanvas-$libgnomecanvas_version.tar.bz2
   (
   tar xf ${AUTOBUILD_SOURCES}/libgnomecanvas-$libgnomecanvas_version.tar.bz2
   cd libgnomecanvas-$libgnomecanvas_version
   ./configure $generic_prefix
   ${MAKE} && make install
   cd -
   ) > $HOSTLOGDIR/06-libgnomecanvas.txt
fi



##################### goocanvas #####################################

if [ "$build_goocanvas" != "no" ] ; then
    echo BUILDING goocanvas 
    ${WGET} http://ftp.gnome.org/pub/GNOME/sources/goocanvas/1.0/goocanvas-1.0.0.tar.gz
    (date
     echo building in: $PWD
     echo PKG_CONFIG_PATH is $PKG_CONFIG_PATH
     echo CFLAGS: $CFLAGS
     echo CXXFLAGS: $CXXFLAGS
     echo CPPFLAGS: $CPPFLAGS
     echo LDFLAGS: $LDFLAGS
     pwd
     gzip -dc ${AUTOBUILD_SOURCES}/goocanvas-1.0.0.tar.gz | tar xf -
     cd goocanvas-1.0.0
     # on my Mac, glib depends on libintl.h and that is installed by the ccp4 dir
     # but that is not added by pkg-config glib-2.0 --cflags. glib bug?
     if ./configure $generic_prefix $EXTRA_GOOCANVAS_CFLAGS ; then
        if ! $MAKE ; then
           echo make of goocanvas failed
        else 
	    $MAKE install
        fi
     else 
        echo goocanvas configure failed
        echo here is config.log
        cat config.log
     fi
     ) > $HOSTLOGDIR/06-pre-goocanvas.txt 2>&1
fi


###############################################################################
##########         build python and friends                       #############
###############################################################################

# So that python is found when it is installed:
#
PATH=$install_top_dir/bin:$PATH
export PATH

# python
#
if test -n "$build_python" ; then 
    echo BUILDING Python ${pver}:

   echo ${WGET} http://www.python.org/ftp/python/$pver/Python-$pver.tgz
   # hacking in --no-check-certificate is not the right way to do it.
   # This is a problem with old(?) wgets.  In future, we should remove this.
   if ${WGET} --no-check-certificate http://www.python.org/ftp/python/$pver/Python-$pver.tgz ; then 
     echo got Python-$pver.tgz
   else
     echo problem getting Python-$pver.tgz
   fi
   (
   date
   gzip -dc ${AUTOBUILD_SOURCES}/Python-$pver.tgz | tar xf -

   cd Python-$pver

   # --with-ensurepip=install
   echo INFO:: ./configure $generic_prefix $python_lib_flags $python_spec_flags for python
   # 
   # do we also need to use --with-threads=dir?
   if ./configure $generic_prefix --enable-shared $python_lib_flags $python_spec_flags ; then
     echo INFO:: make for python
     if $MAKE ; then
        echo INFO:: make install for python
        $MAKE install
     fi
   fi
   ) >  $HOSTLOGDIR/07-python.txt 2>&1

   # We need these otherwise python moans about not finding the libraries.
   #
   # 20140903 I have my doubts this is true now.  Comment out
   #
   # echo setting PYTHONHOME
   # PYTHONHOME=$install_top_dir
   # export PYTHONHOME
   # echo PYTHONHOME is now $PYTHONHOME

   echo post linking python to $python_version
   #
   if [ ! -e $install_top_dir/bin/$python_version ] ; then
	echo Oops\!  $python_version does not exist.
	# only python dependencies from  now on
	echo exiting...
	my_exit 2
   fi
   if [ -e $install_top_dir/bin/python ] ; then
	echo removing old python
	rm $install_top_dir/bin/python
   fi
   current_dir=`pwd`
   cd $install_top_dir/bin
   echo linking new...
   ln -s $python_version python
   if [ $? -ne 0 ] ; then
	echo Opps: failed: ln -s $install_top_dir/bin/$python_version \
		                 $install_top_dir/bin/python 
   fi
   cd $current_dir
   echo done python linking.
   # now we have "python" in our path - no need to rehash - 
   # clever old Bourne shell (or do I mean bash?).
else
    echo not building python:
fi

# Now we need:
#  * guile
#  * guile-www
#  * guile-gtk
#  * guile-gui
#  * gsl



###############################################################################
##########         build idn2                                     #############
###############################################################################

# we build libidn for libcurl.  libcurl needs it on RHEL4 because
# there is no /usr/lib/libidn.so.  There is a rpm devel package, of
# course, but that is more pain to install than compiling it from
# scratch for coot install.

if test -n "$build_libidn2" ; then
   echo BUILDING libidn2:
(
   # get libcurl from here:
   libidn_version=1.15
   libidn_version=2.2.0
   ${WGET} http://www.mirrorservice.org/sites/ftp.gnu.org/gnu/libidn/libidn2-$libidn_version.tar.gz

   gzip -dc ${AUTOBUILD_SOURCES}/libidn2-$libidn_version.tar.gz | tar xf -
   cd libidn2-$libidn_version

   ./configure  $generic_prefix
   if $MAKE ; then
      $MAKE install
   fi
) > $HOSTLOGDIR/15-a-libidn2.txt
else
    echo not building libidn2:
fi

#
###############################################################################
##########         build curl                                     #############
###############################################################################
#

if test -n "$build_curl" ; then
   echo BUILDING curl:
(
   # get libcurl from here:
   # libcurl_version=7.19.7
   # libcurl_version=7.25.0
   # libcurl_version=7.27.0
   libcurl_version=7.65.3
   ${WGET} http://curl.haxx.se/download/curl-$libcurl_version.tar.gz

   gzip -dc ${AUTOBUILD_SOURCES}/curl-$libcurl_version.tar.gz | tar xf -
   cd curl-$libcurl_version

   echo from tar file ${AUTOBUILD_SOURCES}/curl-$libcurl_version.tar.gz
   echo building in: $PWD

   # libcurl has problems with putting the libraries ine right order when we specify
   # --with-libidn (it puts the libidn prefix libs at the end of its LDFLAGS and that
   # is bad because /usr/lib gets in front, and /usr/lib/libidn.so is missing). So here
   # we force the libidn libs at the front of LDFLAGS.  Problem found on RHEL4-64bit
   # (lemur).
   #
   echo ./configure  $generic_prefix --with-libidn2=$install_top_dir LDFLAGS=-L$install_top_dir/lib
   ./configure  $generic_prefix --with-libidn2=$install_top_dir LDFLAGS=-L$install_top_dir/lib
   if $MAKE ; then
      if [ -n $post_process_libcurl ] ; then
         fixup_libcurl
      fi
      $MAKE install
      # argh! This is such a hack! `make install' installs a broken (see post_process_libcurl
      # comments) even though it is fixed by the sed in fixup_libcurl.  So *after* the install
      # let's install the corrected libcurl.la.  Wonderful stuff.
      #
      if [ -n "$post_process_libcurl" ] ; then
         /usr/bin/install -c 'libcurl.la' $install_top_dir/lib/libcurl.la
      fi
   fi

) > $HOSTLOGDIR/15-b-curl.txt
else
    echo not building curl:
fi




###############################################################################
##########         build gsl                                      #############
###############################################################################
#

if test -n "$build_gsl" ; then 
    echo BUILDING gsl:
#
# wget http://www.mirror.ac.uk/sites/ftp.gnu.org/gnu/gsl/gsl-1.5.tar.gz
# wget http://ftp.gnu.org/gnu/gsl/gsl-1.6.tar.gz
# if you change this, change needed_gsl_version above
gsl_version=1.12
gsl_version=1.15
gsl_version=1.16
# ${WGET} http://ftp.gnu.org/gnu/gsl/gsl-$gsl_version.tar.gz
# ${WGET} http://ftp.gnu.org/gnu/gsl/gsl-$gsl_version.tar.gz
${WGET} http://www.mirrorservice.org/sites/ftp.gnu.org/gnu/gsl/gsl-$gsl_version.tar.gz
( 
date
pwd
gzip -dc ${AUTOBUILD_SOURCES}/gsl-$gsl_version.tar.gz | tar xf -
cd gsl-$gsl_version
./configure $generic_prefix
$MAKE
status=$?
if [ "$status" != 0 ] ; then 
    echo ERROR:: GSL make failed.
    exit 2
else
   echo 1 ---------------------------------------------------------------
   echo '                                ' make install
   echo 1 ----------------------------------------------------------------
   $MAKE install
fi    
) > $HOSTLOGDIR/15-gsl.txt
else
    echo not building gsl:
fi


#################################################################
# Raster3D
#################################################################
#

if [ -e $install_top_dir/bin/render ] ; then
   echo not building Raster3D render
else

   raster3d_version=3.0-3
   # raster3d depends on libgd to make png images
   ${WGET} http://skuld.bmsc.washington.edu/raster3d/Raster3D_$raster3d_version.tar.gz

   if [ ! -e ${AUTOBUILD_SOURCES}/Raster3D_$raster3d_version.tar.gz ] ; then

      echo missing Raster3D tar file

   else
      (
       date
       pwd
       # build libgd
       #
       system_has_libgd=false
       if [ -e /usr/include/gd.h ] ; then
          system_has_libgd=true
       fi
       echo system_has_libgd: $system_has_libgd

       if [ "$system_has_libgd" = false ] ; then
          echo checking for existance of $install_top_dir/include/gd.h
          if [ ! -e $install_top_dir/include/gd.h ] ; then
              echo get and build libgd...
   	      # Amazon file names too long, so force output name with -O
              ${WGET} https://github.com/libgd/libgd/releases/download/gd-2.1.1/libgd-2.1.1.tar.gz -O ${AUTOBUILD_SOURCES}/libgd-2.1.1.tar.gz
	      gzip -dc ${AUTOBUILD_SOURCES}/libgd-2.1.1.tar.gz | tar xf -
   	      cd libgd-2.1.1
              # don't use /bin/sh as shell to run libtool (on Ubuntu it's a problem)
	      bash ./configure --prefix=$install_top_dir SHELL=/bin/bash
	      if $MAKE ; then
	         make install
	      fi
	      cd -
          else
              echo $install_top_dir/include/gd.h exists - skip libgd build
          fi
       else
          echo /usr/include/gd.h exists - skip libgd build
       fi

      ) > $HOSTLOGDIR/15-libgd.txt

      (
       date
       pwd
       # build render
       #
       system_has_libgd=false
       if [ -e /usr/include/gd.h ] ; then
          system_has_libgd=true
       fi
       if [ ! -e $install_top_dir/bin/render ] ; then
          # now build it.
          gzip -dc ${AUTOBUILD_SOURCES}/Raster3D_$raster3d_version.tar.gz | tar xf -
          cd Raster3D_$raster3d_version
          echo directory is now:
          pwd

          make linux # FIXME for Darwin

          # compiling libgd so that render links against it depend on libjpeg-turbo-devel
          # having been installed.  i.e. /usr/lib/libjpeg.so should exist

          # add the gd support directory
          #
          system_has_libgd=false
          if [ -e /usr/include/gd.h ] ; then
             system_has_libgd=true
          fi
          echo system_has_libgd: $system_has_libgd
          if [ "$system_has_libgd" = false ] ; then
             sed -ibackup \
                -e "s?=.-lgd?=  -L$install_top_dir/lib -lgd?" \
                -e "s?=.-DGD_SUPPORT?=  -DGD_SUPPORT -I$install_top_dir/include?" \
                -e 's/  TDEFS =.*/  TDEFS =/' \
                -e 's/  TLIBS =.*/  TLIBS =/' \
             Makefile.incl
          fi

          if $MAKE render ; then
  	     make prefix=$install_top_dir install
	     # did that work?  I doubt it. Let's do it by hand
             if [ ! -e $install_top_dir/bin/render ] ; then
  	        cp render $install_top_dir/bin/
             fi
          fi
          cd -
       else
          echo $install_top_dir/bin/render already exists, no build
       fi
       ) > $HOSTLOGDIR/15-raster3d.txt
   fi
fi


###############################################################################
##########         get Coot                                       #############
###############################################################################
#
echo BUILDING coot: version $coot_version, guile=$ENABLE_GUILE_COOT, python=$ENABLE_PYTHON_COOT
if [ "$build_coot_prerelease" != 1 ] ; then 
   # normal release coot
   ${WGET} $release_server_dir/$coot_version.tar.gz 
   if [ ! $? = 0 ] ; then
      echo failed to wget $coot_version.tar.gz   
      my_exit 2 wget-fail-coot-source
   fi 
   # ${WGET} http://www.ysbl.york.ac.uk/~emsley/software/coot-static.patch
else 
   # If we are building pre-release coot_source_tar_file is set only if we can find 
   # a pre-release source tar in the pre-release directory, otherwise it is not set
   if [ -n "$coot_source_tar_file" ] ; then 
      ${WGET} $coot_source_tar_file
      if [ ! $? = 0 ] ; then
         echo failed to wget $coot_source_tar_file
         my_exit 2 wget-fail-coot-source
      fi 
   else 
      # compile release code then:
      echo compile RELEASE code then, getting $release_server_dir/$coot_version.tar.gz
      ${WGET} $release_server_dir/$coot_version.tar.gz
      if [ ! $? = 0 ] ; then
         echo failed to wget $release_server_dir/$coot_version.tar.gz
         my_exit 2 wget-fail-coot-source
      fi 
   fi
   coot_revision=`echo $coot_version | awk '{a=$1; i=index(a,"revision"); print substr(a,i)}'`
   # ${WGET} http://www.ysbl.york.ac.uk/~emsley/software/coot-static.patch
fi

echo using coot version $coot_version
ls -ls ${AUTOBUILD_SOURCES}/$coot_version.tar.gz
if [ -e ${AUTOBUILD_SOURCES}/$coot_version.tar.gz ] ; then
   echo good ${AUTOBUILD_SOURCES}/$coot_version.tar.gz exists
else 
   echo badness ${AUTOBUILD_SOURCES}/$coot_version.tar.gz does not exist.
   echo nothing left to do then.  Goodbye.
   my_exit 2 $coot_version.tar.gz not found
fi
date
pwd
gzip -dc ${AUTOBUILD_SOURCES}/$coot_version.tar.gz | tar xf -
coot_dir_name=`echo $coot_version | sed 's/-revision.*//'`
cd $coot_dir_name

if test -n "$glib_installed" ; then
    coot_extra_args="$coot_extra_args --with-glib-prefix=$install_top_dir"
fi
if test -n "$gtk_installed" ; then
    coot_extra_args="$coot_extra_args --with-gtk-prefix=$install_top_dir"
fi

if [ "$ENABLE_GUILE_COOT" != "no" ] ; then 
    guile_scripting="--with-guile --with-guile-gtk --with-guile-gtk-prefix=$install_top_dir"
fi

# if ENABLE_PYTHON_COOT is not set, then we choose a day of the week
# to build a python version.

# if ENABLE_PYTHON_COOT is set, then if it is set to 0 or no then we
# do not build a python version, otherwise we do build a python
# version

if [ -n "$ENABLE_PYTHON_COOT" ] ; then 
    # it was set to something
    if [ "$ENABLE_PYTHON_COOT" != "0" ] ; then 
       if [ "$ENABLE_PYTHON_COOT" != "no" ] ; then 
          python_scripting='--with-python --with-pygtk'
       fi
    fi
else 
    # if ENABLE_PYTHON_COOT was not set, then turn on python scripting
    python_scripting='--with-python --with-pygtk'
fi

# no longer makes sense now that python is in by default
# else 
#    time_date=`date`
#    if [ ${time_date:0:3} = "Sun" ] ; then
#       scripting='--with-python'
#    fi
#    if [ ${time_date:0:3} = "Sun" ] ; then
#       scripting='--with-python'
#   fi
# fi



###############################################################################
##########         build Coot                                     #############
###############################################################################
#
echo BUILDING coot: version $coot_version, python=$ENABLE_PYTHON_COOT

# set the python tag outside the compile/install sub-shell.
if [ "$ENABLE_PYTHON_COOT" = "no" ] ; then 
   python_tag=
else 
   python_tag=-python
fi
(

# 20091001 should not be needed.
# if [ "$ENABLE_PYTHON_COOT" = "no" ] ; then 
#    echo INFO:: not a pythonized build
#    cp src/blank.cc src/coot_wrap_python.cc
# else 
#    echo INFO:: A pythonized build
# fi

#      CXXFLAGS="-g -O"
# consider getting rid of $shared_static_flag, which does a --disable-shared.
# i.e. we should keep and use shared libs

#     $architecture is not set for Mac OS X.
coot_optim_args=
if [ "$architecture" = x86_64 ] ; then 
   # This could well be too general a test, certainly on 64 bit CentOS 5 we need this, 
   # and possibly on 64 bit Gutsy.

   # There is a problem quoting this, e.g.
   # coot_optim_args="CXXFLAGS='\"-g -O\"'" fails in configure
   #coot_optim_args="CXXFLAGS=-gO"
   #coot_optim_args="CXXFLAGS=\"-g -O\""


   export CXXFLAGS="-g -O"
   #   unset CXXFLAGS
fi


cbis_d=$(date +'%a %d %b %H%M.%S %Z %Y')
if finger ; then
   cbis_n=$(finger $USER | head -1 | sed 's/.*Name: //')
   coot_build_info_string="built by: $cbis_n build-host: $HOST on: $cbis_d"
else
   coot_build_info_string="build-host: $HOST on: $cbis_d"
fi

# We no longer need this because clipper is found using pkg-config
#     --with-clipper-prefix=$install_top_dir 

if [ $OS = Darwin ] ; then
   if [ -d /opt/X11 ] ; then
      export CPPFLAGS=-I/opt/X11/include
      # I think this is needed for COOT_OPENGL_LIBS to be correctly found/set in configure.ac on Mac
      extra_args_for_darwin="LIBS=-L/opt/X11/lib"
   fi
fi

if [ ! -z "$libintl_cflags" ] ; then
   CFLAGS=$libintl_cflags
   CPPFLAGS="$CPPFLAGS $libintl_cflags"
fi

echo From tar file: ${AUTOBUILD_SOURCES}/$coot_version.tar.gz
echo building in: $PWD
echo CFLAGS: $CFLAGS
echo CXXFLAGS: $CXXFLAGS
echo CPPFLAGS: $CPPFLAGS
echo LDFLAGS: $LDFLAGS
echo PATH: $PATH
echo using this guile:
which guile

echo ./configure $coot_prefix \
       --with-fftw-prefix=$install_top_dir  \
      $goocanvas_args     \
      $glut_prefix        \
      COOT_BUILD_INFO_STRING="$coot_build_info_string" \
      $guile_scripting    \
      $python_scripting   \
      $sqlite_config_args \
      $shared_static_flag \
      $coot_optim_args    \
      $coot_extra_args    \
      $extra_args_for_darwin

./configure $coot_prefix \
       --with-fftw-prefix=$install_top_dir  \
      $goocanvas_args     \
      $glut_prefix        \
      COOT_BUILD_INFO_STRING="$coot_build_info_string" \
      $guile_scripting    \
      $python_scripting   \
      $sqlite_config_args \
      $shared_static_flag \
      $coot_optim_args    \
      $coot_extra_args    \
      $extra_args_for_darwin

# these are no longer used
#         --with-mmdb-prefix=$install_top_dir 
#       --with-ssmlib-prefix=$install_top_dir 

# consider adding -DCOOT_SYS_TYPE=systype (or something like that)
# here, so that coot --version-info/full returns it.

# HACK out libtool updating for coot
#if [ "$update_libtool" = 1 ] ; then
#   echo need to update libtool here $PWD
#   cp $install_top_dir/bin/libtool .
#else 
#   echo NO need to update libtool $PWD
#fi

# 20091001 should not be needed
# rm src/coot_wrap_guile_pre.cc
# rm src/coot_wrap_python_pre.cc

$MAKE
status=$?
if [ "$status" != 0 ] ; then 
    echo make failed.
    bad_coot_make=1
    exit 2
else
   echo 1 ---------------------------------------------------------------
   echo '                                ' make install
   echo 1 ----------------------------------------------------------------
   $MAKE install
   if [ "$python_scripting" = '--with-python' ] ; then
      echo copying src/coot.py $install_top_dir/share/coot/python
      cp src/coot.py $install_top_dir/share/coot/python
   fi
fi
) > $HOSTLOGDIR/16-coot.txt 2>&1

#         --with-gsl-prefix=$install_top_dir \
#        --with-glib-prefix=$install_top_dir \
#         --with-gtk-prefix=$install_top_dir \
#       --with-gtkgl-prefix=$install_top_dir \

coot_build_status=$?
if [ $coot_build_status != 0 ] ; then
    echo coot build failed, exiting.
    echo fail-build $coot_revision > $LOGS/build-status
    my_exit 2 $coot_revision
else 
    echo coot build was good.
    echo pass-build $coot_revision > $LOGS/build-status
fi
echo done coot build.

# restore a sane environment for external programs (e.g. ftp)
# 
unset LD_LIBRARY_PATH
unset CFLAGS
unset CPPFLAGS
unset LDFLAGS
unset PKG_CONFIG_PATH

# now, do we need to add the extra data files, the refmac monomer
# library and the reference structures?

# 20110505 we change to Garib's new dictionary
#refmac_mon_lib=refmac-monomer-library-20090929.tar.gz
#refmac_mon_lib=refmac-monomer-library-20091203.tar.gz
# mon_lib_dir=http://www.ysbl.york.ac.uk/~garib/refmac/data/refmac_experimental
# mon_lib_dir=http://www2.mrc-lmb.cam.ac.uk/groups/murshudov/content/refmac/Dictionary

# refmac_mon_lib=refmac_dictionary_v5.28.tar.gz
# refmac_mon_lib=refmac_dictionary_v5.29.tar.gz
# refmac_mon_lib=refmac_dictionary_v5.37.tar.gz
# refmac_mon_lib=refmac_dictionary_v5.38.tar.gz
# refmac_mon_lib=refmac_dictionary_v5.39.tar.gz
# refmac_mon_lib=refmac_dictionary_v5.41.tar.gz

# new style
mon_lib_dir=http://www2.mrc-lmb.cam.ac.uk/personal/pemsley/coot/dependencies
refmac_mon_lib=refmac-monomer-library.tar.gz

if [ -e $install_top_dir/share/coot/lib/data/monomers ] ; then
    echo INFO:: installation has refmac monomer library
else 
    echo INSTALLING refmac monomer library...
    echo INSTALLING refmac monomer library... >&2
    $WGET $mon_lib_dir/$refmac_mon_lib
    mkdir -p $install_top_dir/share/coot/lib/data
    tar xzCf $install_top_dir/share/coot/lib/data $AUTOBUILD_SOURCES/$refmac_mon_lib
fi 
if [ -e $install_top_dir/share/coot/reference-structures ] ; then
    echo INFO:: installation has reference structures
else 
    echo GETTING reference structures tar...
    echo GETTING reference structures tar... >&2
    ${WGET} $extras_place/reference-structures.tar.gz
    if [ -e $AUTOBUILD_SOURCES/reference-structures.tar.gz ] ; then
       echo INSTALLING reference structures...
       tar xzCf $install_top_dir/share/coot $AUTOBUILD_SOURCES/reference-structures.tar.gz
    else 
       echo FAIL wget for reference-structures.tar.gz failed.
    fi
fi

# clear up the library dependencies

if [ "$build_coot_prerelease" = 1 ] ; then
   pre_release_str=-pre-release
fi

clear_up_type=
if [ $shared_static_flag != "--disable-static" ] ; then
    clear_up_type=clear-static
fi   
if [ $shared_static_flag != "--disable-shared" ] ; then
    clear_up_type=clear-dynamic
fi   

if [ $clear_up_type != "" ] ; then 
   if [ "$ENABLE_PYTHON_COOT" = "yes" ] ; then 
      slim_dir=$(dirname $install_top_dir)/coot-${OS}-${systype}${pre_release_str}-gtk2-python
   else
      slim_dir=$(dirname $install_top_dir)/coot-${OS}-${systype}${pre_release_str}-gtk2
   fi
   echo post-install slim... >&2
   post_install_slim $install_top_dir $slim_dir $clear_up_type 
fi

# clean up old status:
if [ -e $LOGS/test-status ] ; then
   rm $LOGS/test-status
fi


if [ "$run_tests" = true ] ; then 
   # run test
   echo running tests:
   echo running tests: >&2
   if [ "$ENABLE_GUILE_COOT" = "yes" ] ; then 
       echo running first test... >&2
      test_coot > $LOGS/test.log 2>&1
       r=$?
   else
       r=0
   fi

   # run python tests too, maybe (i.e. if we build with python)
   if [ "$ENABLE_PYTHON_COOT" = "yes" ] ; then 
       echo running python test... >&2
       test_coot_python > $LOGS/test-python.log 2>&1
       rp=$?
   else
       rp=0
   fi


   gtk2=-gtk2
   if ( [ $r = 0 ] && [ $rp = 0 ] ); then
      echo ========================
      echo '   ' first coot test passed
      echo '   ' first coot test passed >&2
      echo ========----============
      echo pass-test > $LOGS/test-status
      if test "$do_nightlies" = "1" ; then 
         if [ -d $BINARY_TAR_DEST_DIR ] ; then 

            if [ ! -d $BINARY_TAR_DEST_DIR/holding ] ; then 
               echo WARNING:: holding directory $BINARY_TAR_DEST_DIR/holding does not exist.
            else
               # regular path

               # original full fat:
               # make_tar `basename $install_top_dir` $BINARY_TAR_DEST_DIR/${coot_version}-binary-full-${OS}-${systype}${python_tag}${gtk2}.tar.gz
               # slimmed:
               bin_tar_file=$BINARY_TAR_DEST_DIR/${coot_version}-binary-${OS}-${systype}${python_tag}${gtk2}.tar.gz
               holding_tar_file=$BINARY_TAR_DEST_DIR/holding/${coot_version}-binary-${OS}-${systype}${python_tag}${gtk2}.tar.gz

       	       make_tar $(basename $slim_dir) $holding_tar_file

   	       # Now test the tar file by un-taring it and running the
   	       # tests.  Only if this test passes can we move tar file
	       # from holding to the binary pre-release dir.

	       if [ $run_second_test = true ] ; then
                  cd "$build_dir"
	          mkdir test-tar
	          cd test-tar
	          tar xzf $holding_tar_file
      	          echo cding into `basename $slim_dir`  from `pwd`
                  cd `basename $slim_dir` 
   	          echo ln -s ../../$coot_dir_name/greg-tests .
	          ln -s ../../$coot_dir_name/greg-tests .
                  echo second coot test...
                  echo running second test... >&2
	          test_coot bin/coot > $LOGS/test-2.log 2>&1
                  test2_status=$?
               else
                  test2_status=0 # success
               fi

               if [ $test2_status = 0 ] ; then
                  echo ========================
                  echo second coot test passed
                  echo second coot test passed >&2
                  echo ========================
                  echo pass-2nd-test > $LOGS/test-status

	          mv $holding_tar_file $bin_tar_file
	          mv $holding_tar_file.md5sum $bin_tar_file.md5sum

                  # update the description of the latest binary tar file for
                  # this build-type.
                  binary_type_latest=$BINARY_TAR_DEST_DIR/type-binary-${OS}-${systype}${python_tag}${gtk2}-latest.txt
	          echo $coot_version > $binary_type_latest

                  # update the ChangeLog, README and RELEASE-NOTES
                  cd "$build_dir"
                  cd $coot_dir_name
                  echo INFO:: in "$build_dir"/$coot_dir_name and about to copy over README and RELEASE-NOTES to $BINARY_TAR_DEST_DIR
                  cp ChangeLog $BINARY_TAR_DEST_DIR
                  cp README    coot-README
                  cp README    $BINARY_TAR_DEST_DIR/coot-README
                  cp RELEASE-NOTES    $BINARY_TAR_DEST_DIR/${coot_version}-RELEASE-NOTES
                  cp RELEASE-NOTES    $BINARY_TAR_DEST_DIR/PRE-RELEASE-NOTES

	          echo about to publish files:
	          echo about to publish files: >&2

	          # only copy over the binary files if they are not there
	          # already (checked by publish executable).
	          #
                  # reading the git logs adding $BINARY_TAR_DEST_DIR seems to have fixed something. 
                  # Now, the transfer-to-web-server.sh scripts take the second arg 
                  # and munge it to be the correct directory for the binary (and .txt) files.
	          echo $publish $bin_tar_file $BINARY_TAR_DEST_DIR
	          $publish      $bin_tar_file $BINARY_TAR_DEST_DIR
	          echo $publish $bin_tar_file.md5sum $BINARY_TAR_DEST_DIR
	          $publish      $bin_tar_file.md5sum $BINARY_TAR_DEST_DIR
	          # echo $publish $binary_type_latest
	          # publish $binary_type_latest
	          echo $publish --no-server-check ChangeLog
	          $publish --no-server-check ChangeLog
	          echo $publish --no-server-check coot-README
	          $publish --no-server-check coot-README
                  if [ -z "$build_coot_prerelease" ] ; then
   	             echo $publish  --no-server-check RELEASE-NOTES
	             $publish --no-server-check RELEASE-NOTES
                  else 
   	             echo $publish  --no-server-check $BINARY_TAR_DEST_DIR/PRE-RELEASE-NOTES
	             $publish --no-server-check $BINARY_TAR_DEST_DIR/PRE-RELEASE-NOTES
                  fi

	          echo done copy of README and RELEASE-NOTES
	       else 
                  echo ========================
                  echo second coot test failed
                  echo second coot test failed >& 2
                  echo ========================
                  echo fail-2nd-test $date > $LOGS/test-status
               fi
            fi

         else 
            echo Directory for binaries $BINARY_TAR_DEST_DIR does not exist. 
	    echo Skipping tar.
         fi
      else
         echo not doing tar files for nightlies: $do_nightlies
      fi
   else
      echo ========================
      echo '  ' first coot test failed
      echo '  ' first coot test failed >&2
      echo ========================
      echo greg test status: $r
      echo python test status: $rp
      if [ $r = 0 ] ; then 
         echo fail-test greg $date > $LOGS/test-status
      else 
         if [ $rp = 0 ] ; then 
            echo fail-test python $date > $LOGS/test-status
         else 
            # this should not happen, AFAICS.
            echo fail-test $date > $LOGS/test-status
         fi
      fi
   fi
fi

$publish_logs $LOGS


echo finished.
echo finished.>&2

