# 
# -*-shell-script-*-
#
# 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, 2017, 2018, 2019, 2020, 2021 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
# 5.36 20200415 Updates for Release 0.9 - a bit delayed
# 5.37 20200514 redirect numpy output
# 5.38 20200921 Add clustalw2
# 5.39 20201203 Add use_system_gnomecanvas_if_possible, default no.
# 5.40 20210109 change the args to boost's build
# 5.41 20210110 change the boost build log output
# 5.42 20210110 Rework the build of numpy, boost and rdkit
# 5.43 20210110 Add unzip to build dependencies
# 5.44 20210110 Bump the python version, rework the readline configure command line
# 5.45 20210110 Bump the python version again - no2 2.7.18
# 5.46 20210110 Add a test for the version of cmake
# 5.47 20210111 Use the correct name for the libtinfo dev package
# 5.48 20210407 Add to the PKG_CONFIG_PATH for 64 bit builds
# 5.49 20210407 find mmdb libs in lib64 maybe for SSM.
# 5.50 20210407 fix previous fix
# 5.51 20210407 adjust LIBS for clipper configure for lib64 usage
# 5.52 20210511 rework the coot configure
# 5.53 20210706 use jfrog.io for boost
# 5.54 20210706 build sqllite3
# 5.55 20210727 shared-static flag --enable-shared - what *was* I thinking? Modern clipper test
# 5.56 20210816 Put libsqlite3 build into the proper log/txt file. Boost 1.72.0
# 5.57 20211019 add another make for guile-lib. Add texinfo to the dependencies for debian
# 5.58 20211019 Add a sort to the awk result when determining the tar file for the stable release
# 5.59 20220708 Use https:: instead of ftp:: for libccp4 and readline
script_version=5.59



# :: 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=gtk2-python
   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

#intltool-update for libgnomecanvas is here /usr/share/intltool-debian/intltool-update on ubuntu
# it's in /usr/bin on RHEL
PATH=/usr/share/intltool-debian:$PATH

# 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" # what!? 20210727-PE
shared_static_flag="--enable-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


# From Christoph Buhlheller:
# Guide for CentOS8 to install Coot:
# yum install libXt-devel
# yum install gtk2-devel
# yum install mesa-*
# yum install gcc-gfortran

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




a=$(cmake --version)
have_new_enough_cmake=false
case $a in

   # old versions of cmake don't find Boost (FindBoost) when configuring the RDKit.

   cmake?version?3.1[5-9].*)  # 3.15.x is inferred! 3.18 is new enough, 3.10 is not.
                              # https://cmake.org/cmake/help/latest/release/3.15.html
      have_new_enough_cmake=true
      ;;

   cmake?version?3.[2-9][0-9].*)
      have_new_enough_cmake=true
      ;;

   *)
      echo cmake version fallback: $a
      ;;
esac
echo have_new_enough_cmake: $have_new_enough_cmake
if [ $have_new_enough_cmake = false ] ; then
   echo update your cmake and try again
   my_exit 2
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

# Fedora required package libXt-devel which provides X11/Intrinsic.h (for gtktlext)
# and                     libgnomecanvas-devel (which is probably a mistake)

# check dependencies for Ubuntu.
case $dist_name in 
   *ubuntu*)
 
      dep_list='
       patch
       unzip
       rsync
       m4
       g++
       libxext-dev
       libxmu-dev
       libxt-dev
       libc6-dev
       libtinfo-dev
       libncurses5-dev
       libssl-dev
       libglu1-mesa-dev 
       libjpeg-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
      # swig is special.  On 6.06 it is not new enough.  So Kevin compiled his own.
      # swig is tested for later separately.

      ;;

    debian)
      # note from Dirk Kostrewa 20211018-PE:
      #
      # cmake libncurses5-dev libxext-dev libglu1-mesa-dev mesa-common-dev libgtk2.0-dev
      # libgnomecanvas2-dev libxt-dev libjpeg-dev
      # 20211019-PE also texinfo (for makeinfo for guile-lib)
      dep_list='rsync m4 unzip patch libncurses-dev g++ libxext-dev libxt-dev libglu1-mesa-dev mesa-common-dev libgtk2.0-dev libgnomecanvas2-dev unzip texinfo cmake libjpeg-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

sqlite_config_args=--with-sqlite3

# 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_raw=$(grep processor /proc/cpuinfo | wc -l) ; then
               # limit to 8 processors
               np=$np_raw # cooked
               if [ "$np" -gt 8 ] ; then
                  np=8
               fi
               if [ "$np_raw" = 224 ] ; then
                  np=64 # teehee!
               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
pre_release_server_dir=https://www2.mrc-lmb.cam.ac.uk/personal/pemsley/coot/source/pre-releases/0.9-pre
pre_release_server_dir=https://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

echo doing the awk on the html $pre_release_files_html
awk ' /a href=.*.tar.gz/ {split($2, arr, "\""); file=arr[2]; gsub(".tar.gz", "", file); print file}' $pre_release_files_html

coot_version_tmp=$(awk  ' /a href=.*.tar.gz/ {split($2, 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

echo =========================== build_coot_prerelease currently is $build_coot_prerelease ========================

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=$2; split(f, 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 NNX:: trying to build pre-release coot, but failed to find pre-release version
      echo NNX:: make a stable release then
      build_coot_prerelease=no
      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 NNX:: 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.

      # 20200415-PE - man this is fragile code. Don't need to sort now.
      
      awk '/.*a href=.coot/ {f=$2; split(f, arr, "\""); file=arr[2]; gsub(".tar.gz", "", file); files[++n]=file; } END {  for (file in files) print files[file]}' ${AUTOBUILD_SOURCES}/index.html

      coot_version=$(awk '/.*a href=.coot/ {f=$2; split(f, 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)
      coot_version=coot-0.9.8.5
      coot_version=coot-0.9.8.6
      coot_version=coot-0.9.8.7
      coot_version=coot-0.9.8.8
      coot_version=coot-0.9.8.9
      coot_version=coot-0.9.8.91
      coot_version=coot-0.9.8.92
      echo NNX:: 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
    echo ========== awk results:
    awk  ' /a href=.*.tar.gz/ {f=$2; split(f, arr, "\""); file=arr[2]; gsub(".tar.gz", "", file); print file}' \
       ${AUTOBUILD_SOURCES}/index.html
    echo ==== sorted awk results ==========
    awk  ' /a href=.*.tar.gz/ {f=$2; split(f, arr, "\""); file=arr[2]; gsub(".tar.gz", "", file); print file}' \
       ${AUTOBUILD_SOURCES}/index.html | sort
    echo ==== with tail ==========
    awk  ' /a href=.*.tar.gz/ {f=$2; split(f, arr, "\""); file=arr[2]; gsub(".tar.gz", "", file); print file}' \
       ${AUTOBUILD_SOURCES}/index.html | sort | tail -1
    echo =========== from ${AUTOBUILD_SOURCES}/index.html 
    cat ${AUTOBUILD_SOURCES}/index.html 
    echo ==============
    coot_version=$(awk  ' /a href=.*.tar.gz/ {f=$2; split(f, arr, "\""); file=arr[2]; gsub(".tar.gz", "", file); print file}' \
       ${AUTOBUILD_SOURCES}/index.html | sort | tail -1)
    coot_version=coot-0.9.8.3 # the other one is used
    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  ' /.*a href=/ {f=$2; split(f, 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

# exit # for testing release version extraction

# 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_libidn=



# 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

# using system idn is no longer allowed.

   # ---- test installation libidn -------------------------------

      if [ -e $install_top_dir/include/idn2.h ] ; then
         echo installation has libidn
      else 
         echo installation does not have libidn, libcurl should be built also
         build_libidn=1
         build_curl=1
      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
    case "$architecture" in
        x86_64*) 
           PKG_CONFIG_PATH=$install_top_dir/lib/pkgconfig:$install_top_dir/lib64/pkgconfig
           ;;
    esac
else
    PKG_CONFIG_PATH=$install_top_dir/lib/pkgconfig:$PKG_CONFIG_PATH:$STD_PKGCONFIG_DIR
    case "$architecture" in
        x86_64*) 
           PKG_CONFIG_PATH=$install_top_dir/lib/pkgconfig:$install_top_dir/lib64/pkgconfig:$PKG_CONFIG_PATH:$STD_PKGCONFIG_DIR
           ;;
    esac
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

# If this is unset, it means the same as "no"
if test -z "$use_system_gnomecanvas_if_possible" ; then
   use_system_gnomecanvas_if_possible=no
fi

# test for libgnomecanvas
if test "$use_system_gnomecanvas_if_possible" = yes ; then
    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
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

if [ -e $install_top_dir/bin/guile-config ] ; then
   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
      build_guile_gtk=1
   fi
else
   echo guile-config missing. guile should be built
   build_guile=1
   build_guile_gtk=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
if [ -e $install_top_dir/bin/guile ] ; then
   $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
else
   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=python2.7
pver=2.7.18 # this is it - the final version of Python 2
numpy_version=1.7.1
numpy_version=1.16.6
# for an upgrade of numpy to work, the old numpy must be deleted from site-packages

#
# 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
         echo installation has pygobject
        build_pygobject=
      else
         echo pygobject NOT exists, pygobject should be built
         build_pygobject=1
         build_pygtk=1
      fi
   fi
fi


# test for pygtk
if [ $ENABLE_PYTHON_COOT = yes ] ; then
   if test -z "$build_pygtk" ; then
      if test -e $install_top_dir/lib/pygtk/2.0/pygtk-demo.py ; then
         echo pygtk demo exists, no build pygtk
      else
         echo pygtk demo NOT exists, pygtk should be built
         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 GtkGLExt
# ##############################################################

build_gtkglext=1
if test -e ${install_top_dir}/include/gtkglext-1.0/gdk/glext/glext.h ; then
   build_gtkglext=
fi
if [ -n "$COOT_CCP4_PACKAGES" ] ; then 
   if test -e ${COOT_CCP4_PACKAGES}/include/gtkglext-1.0/gdk/glext/glext.h ; then
      echo INFO:: found ${COOT_CCP4_PACKAGES}/include/gtkglext-1.0/gdk/glext/glext.h
      build_gtkglext=
   fi
fi


if test -z "$build_gtkglext" ; then
   echo installation has gtkglext
else 
   echo gtkglext should be built
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
          if [ -e $install_top_dir/include/clipper/contrib/sfscale.h ] ; then
             if grep PrePro2 $install_top_dir/include/clipper/core/ramachandran.h ; then
                build_clipper=
             else
                 echo $install_top_dir/include/clipper/core/ramachandran.h is old, building clipper
                 build_clipper=1
             fi
          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} https://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
    ) > $HOSTLOGDIR/01-libccp4.txt 2>&1
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.22
# 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
mmdb_lib_dir=$install_top_dir/lib
if [ -e $install_top_dir/lib64/libmmdb2.so ] ; then
    mmdb_lib_dir=$install_top_dir/lib64
fi
./configure $generic_prefix --enable-shared --disable-static CPPFLAGS=-I$install_top_dir/include LDFLAGS=-L$mmdb_lib_dir
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

    # this seems to have already been applied in 2.1.20180802
    # patch the hkl_data.h header
    # needs testing
    # 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
      if [ -e $install_top_dir/lib64 ] ; then
          export LIBS="-L$install_top_dir/lib64 -L$install_top_dir/lib"
      fi
    else 
      save_libs="$LIBS"
      export LIBS=-L$install_top_dir/lib:$LIBS
      if [ -e $install_top_dir/lib64 ] ; then
         export LIBS="-L$install_top_dir/lib64 -L$install_top_dir/lib $LIBS"
      fi
    fi
    echo for clipper configure 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

if [ -e $install_top_dir/lib/libsqlite3.so ] ; then
    echo libsqlite3 is installed
else
    echo building libsqlite3
    ${WGET} https://www.sqlite.org/2021/sqlite-autoconf-3360000.tar.gz
    (
    date
    pwd
    gzip -dc ${AUTOBUILD_SOURCES}/sqlite-autoconf-3360000.tar.gz | tar xf -
    cd sqlite-autoconf-3360000
    if ./configure --prefix=$install_top_dir ; then
        $MAKE
        make install
    fi
    cd -
    ) > $HOSTLOGDIR/05a-libsqlite3.txt 2>&1
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
   if [ -e $install_top_dir/include/libart-2.0/libart_lgpl/libart.h ] ; then
       echo not building libart_lgpl_version
   else
      (
      ${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 2>&1
   fi

   # not to self: it seems, from my centos7 build that libgnomecanvas doesn't
   # correctly pick up the libart above - I did a system install of libart before I thought about it.

   if [ -e $install_top_dir/include/libgnomecanvas-2.0/libgnomecanvas/libgnomecanvas.h ] ; then
      echo not building libgnomecanvas
   else
      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 2>&1
   fi
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


##################### readline #####################################


if test -n "$build_readline" ; then
    echo BUILDING readline:
    readline_version=6.2
    readline_version=6.3
    ${WGET} https://ftp.gnu.org/gnu/readline/readline-$readline_version.tar.gz
    ${WGET} $extras_place/readline-5.1.patch
    (
    date
    pwd
    gzip -dc ${AUTOBUILD_SOURCES}/readline-$readline_version.tar.gz | tar xf -
    cd readline-$readline_version
    if test -n "$need_readline_patch" ; then
       echo patching readline...
       # need a patch (for debian only) to add curses to the additional libs line
       patch -p0 < ${AUTOBUILD_SOURCES}/readline-5.1.patch
    fi
    apply_shared_lib_sed_fix=true

    # when don't we want to apply the sed fix?
    # ....
    #

    if [ $apply_shared_lib_sed_fix = true ] ; then
       echo applying sed patch for shared-lib libreadline
       # thanks for the quoting help tony duan @ stackoverflow
       sed  -i '125,135 s/SHOBJ_LDFLAGS=.*/&\n        SHLIB_LIBS='"'"'$(TERMCAP_LIB)'"'"'/' support/shobj-conf
    fi
    echo ./configure $generic_prefix --with-curses --enable-shared
    ./configure $generic_prefix --with-curses --enable-shared
    # single thread
    if make ; then
       make install
       # no more missing functions hopefully!
       # undefined symbol: UP	(/home/paule/autobuild/Linux-penelope-gtk2-python/lib/libreadline.so)
       ldd -r $install_top_dir/lib/libreadline.so
    else
       echo make of readline failed
    fi
    ) > $HOSTLOGDIR/06-pre-readline.txt 2>&1
else
    echo not building readline:
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 --enable-shared --with-ensurepip=install $python_lib_flags $python_spec_flags for python
   # 
   # do we also need to use --with-threads=dir?
   if ./configure $generic_prefix --enable-shared --with-ensurepip=install $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

#################################################################
#################################################################
# should I use pip to install other packages? (skilearn)




if test -n "$build_pygobject" ; then 
   echo BUILDING pygobject:
   #
   pygobject_major_minor_version=2.14
   pygobject_version=2.14.1

   # new (2.4+) versions of pygobject do not compile with older
   # versions of GLIB and pkgconfig.

   if pkg-config --atleast-pkgconfig-version 0.16 ; then
      echo INFO:: pkg-config is new enough to build pygobject
      pygobject_major_minor_version=2.8
      pygobject_version=2.8.0
      echo path 1 ${WGET} http://ftp.gnome.org/pub/GNOME/sources/pygobject/$pygobject_major_minor_version/pygobject-$pygobject_version.tar.gz
      if ${WGET} http://ftp.gnome.org/pub/GNOME/sources/pygobject/$pygobject_major_minor_version/pygobject-$pygobject_version.tar.gz ; then 
         echo OK got pygobject-$pygobject_version.tar.gz
      else
         echo PROBLEM:: wget for pygobject-$pygobject_version.tar.gz
      fi
   else 
      if pkg-config --atleast-pkgconfig-version 0.15.1 ; then
         pygobject_major_minor_version=2.8
         pygobject_version=2.8.0
         echo path 2 ${WGET} http://ftp.gnome.org/pub/GNOME/sources/pygobject/$pygobject_major_minor_version/pygobject-$pygobject_version.tar.gz
         if ${WGET} http://ftp.gnome.org/pub/GNOME/sources/pygobject/$pygobject_major_minor_version/pygobject-$pygobject_version.tar.gz ; then 
	     echo OK got pygobject-$pygobject_version.tar.gz
	 else
            echo PROBLEM:: wget for pygobject-$pygobject_version.tar.gz
         fi
      else 
         # centos4 can't build 2.8, because glib is not new enough (it is 2.3.5)
         # centos4 pkg-config version is 0.15.0
         pygobject_major_minor_version=2.4
         pygobject_version=2.4.0
         # ftp.gnome.org does not distribute 2.4.x Baah. Get it from extras
         ${WGET} $extras_place/pygobject-2.4.0.tar.gz
      fi
      echo INFO:: pkg-config is NOT new enough to build pygobject 2.14
      echo downgrading pygobject to $pygobject_version
   fi


   (
   date
   echo trying to untar ${AUTOBUILD_SOURCES}/pygobject-$pygobject_version.tar.gz 
   if [ -e ${AUTOBUILD_SOURCES}/pygobject-$pygobject_version.tar.gz ] ; then 
      gzip -dc ${AUTOBUILD_SOURCES}/pygobject-$pygobject_version.tar.gz | tar xf -
      cd pygobject-$pygobject_version
      # typename is a variable name to a function in the pygobject header.
      # it causes the compiler on CentOS4 to fail with a syntax error. 
      # so substitute the name.
      echo about to sed
      sed -e 's/typename/s_typename/' gobject/pygobject.h >  gobject/pygobject.h.tmp
      echo about to mv gobject/pygobject.h.tmp  gobject/pygobject.h
      mv gobject/pygobject.h.tmp  gobject/pygobject.h
      save_dllp=$DYLD_LIBRARY_PATH
      unset DYLD_LIBRARY_PATH
      echo about to bash configure ./configure $generic_prefix
      # on MacOSX we need to bash this or some sort of crappy apple crash in configure here.
      bash ./configure $generic_prefix
      echo about to make
      $MAKE
      pygobject_status=$?
      if [ "$pygobject_status" != 0 ] ; then
         echo make of pygobject failed
      else
         $MAKE install
      fi
      export DYLD_LIBRARY_PATH=$save_dllp
   else
      echo ERROR:: ${AUTOBUILD_SOURCES}/pygobject-$pygobject_version.tar.gz file not found.
   fi
) > $HOSTLOGDIR/07-pygobject.txt 2>&1
else 
   echo not building pygobject:
fi




# http://ftp.gnome.org/pub/GNOME/sources/pygtk/2.12/pygtk-2.12.1.tar.gz
if test -n "$build_pygtk" ; then 
   echo BUILDING pygtk:
   #
   #  py_gtk_version=2.12.1
   #   pygtk_version=2.8.6  # too recent, need  'pango >= 1.10.0' but version of Pango is 1.8.1
   #      Requested 'pygobject-2.0 >= 2.9' but version of PyGObject is 2.6.0
   #      GTK... Requested 'gtk+-2.0 >= 2.7' but version of GTK+ is 2.6.7
   #      GTK... Requested 'gtk+-2.0 >= 2.8.0' but version of GTK+ is 2.6.7
   #      GLIB - version >= 2.8.0
   pygtk_version=2.6.3

   # FIXME
   # 20090824
   # 2.6.3 is too hight for CentOS 4 series, because it complains that
   #       GLIB2 needs to be 2.6.0 or greater and (system) is only 2.4.2
   # Red Hat Enterprise Linux was released 2005-02-15.  Find a version of pygtk that
   # is compatible with that.

   ${WGET} http://ftp.gnome.org/pub/GNOME/sources/pygtk/2.6/pygtk-$pygtk_version.tar.gz
   (
   date
   gzip -dc ${AUTOBUILD_SOURCES}/pygtk-$pygtk_version.tar.gz | tar xf -
   cd pygtk-$pygtk_version
   if [ ! -z "$libintl_cflags" ] ; then
      export CFLAGS=$libintl_cflags
      export CPPFLAGS="$CPPFLAGS $libintl_cflags"
   fi
   save_dllp=$DYLD_LIBRARY_PATH
   unset DYLD_LIBRARY_PATH
   ./configure $generic_prefix --with-pango --with-pangocairo PYGOBJECT_CFLAGS=-I$install_top_dir/include/pygtk-2.0 PYGOBJECT_LIBS=-L$install_top_dir/lib
   $MAKE
   pygtk_status=$?
   if [ "$pygtk_status" != 0 ] ; then
      echo make of pygtk failed
   else
      $MAKE install
   fi
   export DYLD_LIBRARY_PATH=$save_dllp
) > $HOSTLOGDIR/07-pygtk.txt 2>&1
else 
   echo not building pygtk:
fi

###############################################################################
##########         build boost                                    #############
###############################################################################

build_boost=true
test_for_already_installed_dependencies=true

if [ "$test_for_already_installed_dependencies" = true ] ; then
   if [ -e $install_top_dir/include/boost/functional/hash.hpp ] ;  then
      echo not building boost:
      build_boost=false
   fi
fi

if [ "$build_boost" = true ] ; then
   boost_version=1_72_0
   echo building boost $boost_version # to build.log
   echo building boost $boost_version 1>&2 # to the terminal
   (

      echo building ========================= boost $boost_version =========================

      address_model=64
      python_version_extention=2.7 # extract this

      boost_home_url=https://dl.bintray.com/boostorg/release/1.72.0/source
      boost_home_url=https://boostorg.jfrog.io/artifactory/main/release/1.72.0/source
      echo wgetting $boost_home_url/boost_$boost_version.tar.gz
      ${WGET} $boost_home_url/boost_$boost_version.tar.gz

      gzip -dc ${AUTOBUILD_SOURCES}/boost_$boost_version.tar.gz | tar xf -
      if [ -e boost_$boost_version ] ; then
         cd boost_$boost_version
         # ./bootstrap.sh --prefix=$install_top_dir --with-libraries=python,regex,serialization --without-icu
         ./bootstrap.sh --prefix=$install_top_dir --with-libraries=python,regex,thread,serialization --without-icu
         # bjam no longer exists
         ./b2 address-model=$address_model -j2 cflags=-fPIC cxxflags="-fPIC -I$install_top_dir/include/python$python_version_extention -Wno-maybe-uninitialized -Wno-deprecated-declarations" install
         echo b2 install into $install_top_dir complete
         cd -
      else
         echo boost untar failed - maybe download failed.
      fi

   ) > $HOSTLOGDIR/16-boost.txt 2>&1
fi


build_numpy=true

# Let's stop at the beginning if we need a fortran compiler and don't have it.
#
if [ "$build_numpy" = true ] ; then
   if gfortran --version > /dev/null ; then
      :
   else
      echo fortran compiler not found.
      exit 2
   fi
fi

if [ true = true ] ; then
   skip_this=false
   arch=linux
   if [ -e $install_top_dir/lib/python2.7/site-packages/numpy-$numpy_version-py2.7-$arch-x86_64.egg/numpy/core/include/numpy/halffloat.h ] ;  then
         echo not building numpy:
         skip_this=true
   fi
   if [ $skip_this = false ] ;  then
      echo building numpy
      (
      echo building ========================= numpy ==============================
      pwd
      # this needs fortran compiler gfortran

      # maybe get numpy from github?
      # https://github.com/numpy/numpy/releases/download/v1.14.1/numpy-1.14.1.tar.gz
      # numpy needset setuptools
      # https://github.com/pypa/setuptools/archive/v41.5.1.tar.gz
      pythonhosted_magic_number=b7/6f/24647f014eef9b67a24adfcbcd4f4928349b4a0f8393b3d7fe648d4d2de3
      ${WGET} https://files.pythonhosted.org/packages/$pythonhosted_magic_number/numpy-$numpy_version.zip
      #
      unzip ${AUTOBUILD_SOURCES}/numpy-$numpy_version.zip
      cd numpy-$numpy_version/
      # we need to check that we have a fortran compiler, in this case gnu95
      #
      if gfortran --version ; then
        echo found fortran compiler
      else
        echo fortran compiler not found.
        exit 2
      fi
      python setup.py build --fcompiler=gfortran
      python setup.py install
      if [ $? ] ; then
         :
      else
         echo something bad about numpy.
         exit 2
      fi
      cd -
      ) > $HOSTLOGDIR/16-b-numpy.txt 2>&1
   fi
fi

# need to install Pillow (for depictions to work):
# https://files.pythonhosted.org/packages/b3/d0/a20d8440b71adfbf133452d4f6e0fe80de2df7c2578c9b498fb812083383/Pillow-6.2.2.tar.gz

if [ -e $install_top_dir/lib/python2.7/site-packages/Pillow-6.2.2.dist-info ] ; then
   build_pillow=no
else
   build_pillow=yes
fi
if [ -e $install_top_dir/lib/python2.7/site-packages/Pillow-6.2.2-py2.7-linux-x86_64.egg ] ; then
   build_pillow=no
fi

if [ "$build_pillow" = no ] ; then
   echo not building Pillow:
else
    pillow_url=https://files.pythonhosted.org/packages/b3/d0/a20d8440b71adfbf133452d4f6e0fe80de2df7c2578c9b498fb812083383/Pillow-6.2.2.tar.gz
    ${WGET} --no-if-modified-since $pillow_url
    if [ -e ${AUTOBUILD_SOURCES}/Pillow-6.2.2.tar.gz ] ; then
        (
        tar xf ${AUTOBUILD_SOURCES}/Pillow-6.2.2.tar.gz
        cd Pillow-6.2.2
        python setup.py build
        python setup.py install
        cd -
        ) > $HOSTLOGDIR/17-pillow.txt 2>&1
    fi
fi


# this is a hack for charybdis   - we need cmake version 3.1 or later
export PATH=$HOME/cmake/bin:$PATH

build_rdkit=true
rdkit_version=2017_09_3
# rdkit_version=2019_09_1 # python 3
rdkit_version=2018_09_3 # Atom pointers gone, needs coot update
rdkit_home=https://github.com/rdkit/rdkit/archive
rdkit_tar_host_file_name=Release_$rdkit_version.tar.gz
rdkit_tar_download_file_name=rdkit-Release_$rdkit_version.tar.gz

if [ "$build_rdkit" = true ] ; then
   skip_this=false
   if [ "$test_for_already_installed_dependencies" = true ] ; then
      # this file is in 2018_09 but not in 2017_09
      if [ -e $install_top_dir/include/rdkit//GraphMol/StereoGroup.h ] ;  then
         echo not building rdkit:
         skip_this=true
      fi
   fi

   # hack - force RDKit build
   # skip_this=false

   if [ $skip_this = false ] ;  then

      echo building rdkit $rdkit_version
      (
      echo building ========================= rdkit ==============================

      # at last we get to actually compile rdkit
      RDKIT=$install_top_dir
      RDBASE=$install_top_dir
      CMAKE_INSTALL_PREFIX=$install_top_dir
      export RDKIT
      export RDBASE
      export CMAKE_INSTALL_PREFIX
 
      # shall we build from github rdkit?
      github_rdkit=false
   
      if [ $(uname) = Darwin ] ; then
         echo LD_LIBRARY_FALLBACK_PATH  $LD_LIBRARY_FALLBACK_PATH
         # what is unexport in bash?
         export LD_LIBRARY_PATH=
      fi

      echo ==================== LD_LIBRARY_PATH is $LD_LIBRARY_PATH

      if [ "$github_rdkit" = true ] ; then
         if [ ! -d rdkit-github/build ] ; then
            mkdir -p rdkit-github/build
         fi
         echo pulling...
         # cd rdkit-github/rdkit && git pull && cd -
         cd rdkit-github/build
         pwd 
         tree_from_build=../rdkit
      else

         get_the_rdkit_tar_file=true
         echo testing for existance of ${AUTOBUILD_SOURCES}/$rdkit_tar_download_file_name
         if [ -e ${AUTOBUILD_SOURCES}/$rdkit_tar_download_file_name ] ; then
            echo   found the file   ${AUTOBUILD_SOURCES}/$rdkit_tar_download_file_name
            echo stat --format=%s   ${AUTOBUILD_SOURCES}/$rdkit_tar_download_file_name
            stat --format=%s        ${AUTOBUILD_SOURCES}/$rdkit_tar_download_file_name
            size=$(stat --format=%s ${AUTOBUILD_SOURCES}/$rdkit_tar_download_file_name)
            echo rdkit tar ${AUTOBUILD_SOURCES}/$rdkit_tar_download_file_name size: $size
            if [ "$size" = 54644917 ] ; then
               get_the_rdkit_tar_file=false
            fi
         fi
         echo here C with get_the_rdkit_tar_file $get_the_rdkit_tar_file

         if [ $get_the_rdkit_tar_file = true ] ; then
            # $WGET $rdkit_home/$rdkit_tar_host_file_name -O ${AUTOBUILD_SOURCES}/$rdkit_tar_download_file_name
            do_rdkit_download=true
            if [ -e ${AUTOBUILD_SOURCES}/$rdkit_tar_host_file_name ] ; then
                s=$(stat --format=%s ${AUTOBUILD_SOURCES}/$rdkit_tar_host_file_name)
                if [ "$s" = $rdkit_tar_size ] ; then
                   do_rdkit_download=false
                fi
            fi
            if [ $do_rdkit_download = true ] ; then
               echo $WGET $rdkit_home/$rdkit_tar_host_file_name
               if ${WGET} $rdkit_home/$rdkit_tar_host_file_name ; then
                  if [ -e ${AUTOBUILD_SOURCES}/$rdkit_tar_host_file_name ] ; then
                     cp ${AUTOBUILD_SOURCES}/$rdkit_tar_host_file_name ${AUTOBUILD_SOURCES}/rdkit-$rdkit_tar_host_file_name
                  else
                     echo $rdkit_tar_host_file_name does not exist after download
                  fi
               fi
            fi
         fi

         echo tar xf ${AUTOBUILD_SOURCES}/$rdkit_tar_download_file_name
         tar xf ${AUTOBUILD_SOURCES}/$rdkit_tar_download_file_name
         pwd
         ls
         if [ ! -e rdkit-Release_$rdkit_version ] ; then
             echo RDKit untar dir not find: rdkit-Release_$rdkit_version
             exit 2
         fi
         cd rdkit-Release_$rdkit_version

         mkdir -p build
         cd build
         pwd
         tree_from_build=..

      fi


      # New (1.60) boost uses BOOST_PYTHON not Boost_PYTHON
      #
      echo which cmake
      which cmake

      # No help:  -DBoost_INCLUDE_DIR=$install_top_dir/include 
      # Cmake policy:    -DMACOSX_RPATH=ON

      # old verisons of boost (before 1.60?) can't find boost python
      # with new (github Feb 2016) rdkit

      # -DPYTHON_LIBRARY=$install_top_dir/lib/libpython2.7.$extension_type

      # no help apparently
      # -DBoost_EXTERNAL_OBJECTS=$install_top_dir/lib/libboost_python.$extension_type
      # -DBoost_INCLUDE_DIR=$install_top_dir/include  
      #
      #  -DBOOST_ROOT=$install_top_dir 
      # -DBoost_INCLUDE_DIR=$install_top_dir/include
      #  -DBoost_LIBRARY_DIRS=$install_top_dir/lib 
      #  -DBoost_PYTHON_LIBRARY=$install_top_dir/lib/libboost_python.$extension_type 
      #  -DBoost_REGEX_LIBRARY=$install_top_dir/lib/libboost_regex.$extension_type
      

      # catches correctly (no need to specify)
      # 	 -DPYTHON_INCLUDE_DIR=$install_top_dir/include/python2.7

      if [ $(uname) = Darwin ] ; then
         cmake_macosx_rpath=-DCMAKE_MACOSX_RPATH=ON
      fi

      # last time I looked, the include files of RDKit MolDraw2D were wrong.
      # I had to hack in GraphMol/MolDraw2D into include/rdkit and copy the files
      # there.

      # -- Could NOT find InChI in system locations (missing:  INCHI_LIBRARY INCHI_INCLUDE_DIR) 
      # CMake Warning at External/INCHI-API/CMakeLists.txt:43 (message):
      #   ** NO INCHI SOFTWARE FOUND
      #
      #   InChI support will be turned off.  If you want to add InChI support, please
      #   follow the instructions inside $RDBASE/External/INCHI-API/README to
      #   download a copy of InChI software and then rerun cmake.
      #
      # http://www.inchi-trust.org/download/105/INCHI-1-SRC.zip

      # now libboost_python comes with an extended name: libboost_python27
      libboost_pthon_ext=27
      libboost_pthon_ext=
      extension_type=so

      if [ $(uname) = Darwin ] ; then
         extension_type=dylib
      else
         extension_type=so
      fi

      echo will configure with cmake like this:
      echo cmake -DRDK_INSTALL_INTREE=0  \
         -DPYTHON_EXECUTABLE=$install_top_dir/bin/python \
         -DPYTHON_LIBRARY=$install_top_dir/lib/libpython2.7.$extension_type \
         -DPYTHON_INCLUDE_DIR=$install_top_dir/include/python2.7 \
         -DRDK_BUILD_CAIRO_SUPPORT=ON    \
         -DRDK_TEST_MULTITHREADED=OFF    \
         -DRDK_BUILD_THREADSAFE_SSS=OFF  \
         -DRDK_BUILD_INCHI_SUPPORT=OFF   \
         $cmake_macosx_rpath \
         -DCMAKE_INSTALL_PREFIX=$install_top_dir $tree_from_build

      if cmake -DRDK_INSTALL_INTREE=0  \
         -DPYTHON_EXECUTABLE=$install_top_dir/bin/python \
         -DPYTHON_LIBRARY=$install_top_dir/lib/libpython2.7.$extension_type \
         -DPYTHON_INCLUDE_DIR=$install_top_dir/include/python2.7 \
         -DRDK_BUILD_CAIRO_SUPPORT=ON    \
         -DRDK_TEST_MULTITHREADED=OFF    \
         -DRDK_BUILD_THREADSAFE_SSS=OFF  \
         -DRDK_BUILD_INCHI_SUPPORT=OFF   \
         $cmake_macosx_rpath \
         -DCMAKE_INSTALL_PREFIX=$install_top_dir $tree_from_build ; then

         pwd
         echo ls -l
         ls -l
         echo ls -l ../External
         ls -l ../External
         echo ls -l ../External/catch
         ls -l ../External/catch
         echo ls -l ../External/catch/catch
         ls -l ../External/catch/catch

         # linusheinz: glibc changed SIGSTKSZ to be a syscall instead
         #             of being constant
         #
         # External/catch/catch/single_include/catch.hpp:7320 needs a patch
         # 7320     //  char FatalConditionHandler::altStackMem[SIGSTKSZ] = {};
         # 7321     char FatalConditionHandler::altStackMem[32768] = {};

         sed -i.backup -e 's/char FatalConditionHandler::altStackMem.SIGSTKSZ./char FatalConditionHandler::altStackMem[32768]/' ../External/catch/catch/single_include/catch.hpp

         if $MAKE ; then
            make install
         else
            echo problem making the RDKit.
            exit 1
         fi
      else
         echo problem configuring the RDKit.
         exit 1
      fi
      cd ..
      cd ..
      ) > $HOSTLOGDIR/17-rdkit.txt 2>&1
   fi
fi

# silicos-it's biscu-it
if [ -e $install_top_dir/lib/python2.7/site-packages/silicos_it/descriptors/qed.py ] ; then
   echo not building biscu-it:
else
   echo building QED
   (date
    # ${WGET} http://silicos-it.be.s3-website-eu-west-1.amazonaws.com/_downloads/qed-1.0.1.tar.gz
    ${WGET} $extras_place/qed-1.0.1.tar.gz
    pwd
    tar xf ${AUTOBUILD_SOURCES}/qed-1.0.1.tar.gz
    cd qed-1.0.1
    python setup.py install
    cd -
   ) > $HOSTLOGDIR/19-biscu-it.txt 2>&1
fi

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



###############################################################################
##########         build guile and friends                        #############
###############################################################################

if test -n "$build_gmp" ; then
    echo BUILDING gmp:
    # gmp_version=4.2.4
    # gmp_version=5.1.2
    # gmp_version=6.0.0a # it doesn't untar into this directory
    # gmp_version=5.1.3
    gmp_version=6.1.2
    ${WGET} http://www.mirrorservice.org/sites/ftp.gnu.org/gnu/gmp/gmp-$gmp_version.tar.bz2
    (date
     pwd
     tar xf ${AUTOBUILD_SOURCES}/gmp-$gmp_version.tar.bz2
     cd gmp-$gmp_version
     ./configure $generic_prefix
     $MAKE
    status=$?
    if [ "$status" != 0 ] ; then
       echo make of gmp failed
    else
       $MAKE install
    fi
    ) > $HOSTLOGDIR/08-pre-gmp.txt 2>&1
else
    echo not building gmp:
fi 



if test -n "$build_libtool" ; then
    echo BUILDING libtool:
    libtool_version=1.5.24
    ${WGET} http://www.mirrorservice.org/sites/ftp.gnu.org/gnu/libtool/libtool-$libtool_version.tar.gz
    (date
     pwd
     gzip -dc ${AUTOBUILD_SOURCES}/libtool-$libtool_version.tar.gz | tar xf -
     cd libtool-$libtool_version
     ./configure $generic_prefix
     $MAKE
    status=$?
    if [ "$status" != 0 ] ; then
       echo make of libtool failed
    else
       $MAKE install
    fi
    ) > $HOSTLOGDIR/09-pre-libtool.txt 2>&1
else
    echo not building libtool:
fi


# $ guile
# Backtrace:
# In unknown file:
#    ?: 133* [#<procedure #f ()>]
#    ?: 134* [load-file #<primitive-procedure primitive-load> ...]
#    ?: 135* [save-module-excursion #<procedure #f ()>]
#    ?: 136  (let (# #) (dynamic-wind # thunk #))
#    ?: 137  [dynamic-wind #<procedure #f ()> #<procedure #f ()> #<procedure #f ()>]
#    ?: 138* [#<procedure #f ()>]
#    ?: 139* [primitive-load "/home/xxx/autobuild/Linux-host-pre-release-gtk2-python/share/guile/1.8/ice-9/debug.scm"]
# In /home/xxx/autobuild/Linux-host-pre-release-gtk2-python/share/guile/1.8/ice-9/debug.scm:
#   22: 140* (define-module (ice-9 debug) :export ...)
# In unknown file:
#    ?: 141* [copy-tree ...
#    ?: 142* [apply #<procedure #f args> (# :export #)]
#    ?: 143  [#<procedure #f args> (ice-9 debug) :export ...]
#    ?: 144  (quasiquote (eval-case (# #) (else #)))
#    ?: 145* [compile-define-module-args (# :export #)]
#    ?: 146  [loop ((quote #)) (:export (frame-number->index trace untrace ...))]
#      ...
#    ?: 147  [loop ((quote (ice-9 debug))) ...
#    ?: 148* [cons ...
#    ?: 149* [keyword-like-symbol->keyword :export]
#    ?: 150  [symbol->keyword ...
#    ?: 151* [string->symbol ...
#    ?: 152* (substring (symbol->string sym) 1)
#
# then compile guile with -O (it defaults to -O2 if you do not add this, I think)
# 20130910 force -O2 for every target.

# <unnamed port>: In expression (substring (symbol->string sym) 1):
# <unnamed port>: Stack overflow

if test -n "$build_guile" ; then
    echo BUILDING guile:
#

guile_version=1.8.8
guile_version_dir=$guile_version
if test "$OS" = "Darwin" ; then
   guile_version=1.8.8-marcin-fix
fi

# mirror has gone/moved.
# ${WGET} http://mirror.ac.uk/mirror/ftp.gnu.org/gnu/guile/guile-${guile_version}.tar.gz
# ${WGET} http://ftp.gnu.org/gnu/guile/guile-${guile_version}.tar.gz
# ${WGET} http://www.mirrorservice.org/sites/ftp.gnu.org/gnu/guile/guile-${guile_version}.tar.gz
# Marcin-fix version
${WGET} $extras_place/guile-${guile_version}.tar.gz
${WGET} $extras_place/guile-1.8.7-updated.patch
${WGET} $extras_place/guile-1.8.8-gc-segment.c.patch
${WGET} $extras_place/guile-fink.patch
${WGET} $extras_place/guile-configure.patch


# if debian, unset LD_LIBRARY_PATH and set it back again when done.
if [ "$dist_name" = "debian" ] ; then
   llp_save=$LD_LIBRARY_PATH
   unset LD_LIBRARY_PATH
   extra_flags_for_debian="LD_LIBRARY_PATH=$llp_save --disable-error-on-warning"
fi

if [ $OS = Darwin ] ; then
   extra_flags_for_darwin="--disable-rpath --disable-error-on-warning --enable-silent-rules --enable-shared --disable-static"
fi

( 
date
pwd
gzip -dc ${AUTOBUILD_SOURCES}/guile-${guile_version}.tar.gz | tar xf -
cd guile-${guile_version_dir}
# we need to pass CFLAGS and LDFLAGS because there is no --with-readline-prefix

# note that for guile's guile-readline module to compile correctly,
# ncurses-dev needs to be installed (that is on this Fed 15 machine,
# at least - I presume others also).

if [ "$need_guile_unused_values_patch" = true ] ; then
   # 20130820-PE Ubuntu 12.04 also needs -Wno-unused-result
   additional_unused_arg="-Wno-unused-but-set-variable -Wno-unused-result"
else
   additional_unused_arg=
fi

export GUILE_ERROR_ON_WARNING=no
# arg to guile's configure
./configure $generic_prefix \
     $extra_flags_for_darwin \
     CFLAGS="-I$install_top_dir/include $additional_unused_arg -O -Wno-deprecated-declarations -Wno-unused-but-set-variable" \
     LDFLAGS=-L$install_top_dir/lib \
     CPPFLAGS=-P \
     $extra_flags_for_debian

# Multilib fix for procedures.txt
echo =========== post-configure patching threads.doc ====================
perl -pi -e 's|threads.doc||' `find . -name Makefile`
if [ "$need_guile_unused_values_patch" = true ] ; then
   echo =========== post-configure patching for unused-values ====================
   patch -p0 < ${AUTOBUILD_SOURCES}/guile-1.8.7-updated.patch
else
   echo not applying guile unused values patch
fi
# fedora 24 doesn't like the parethenses around a particular if expression
# gcc 6.1.1 - harmless for others
#
patch -p0 < ${AUTOBUILD_SOURCES}/guile-1.8.8-gc-segment.c.patch
# patch -p0 < ${AUTOBUILD_SOURCES}/guile-fink.patch
# patch -p0 < ${AUTOBUILD_SOURCES}/guile-configure.patch

echo =========== make ====================
$MAKE
status=$?
if [ "$status" != 0 ] ; then
    echo guile make failed.
    guile_build_status=$status
    exit 2
else
   echo 1 ---------------------------------------------------------------------
   echo '                               ' make install
   echo 1 ---------------------------------------------------------------------
   $MAKE install
fi 

# Debian gawk work-around
if [ "$dist_name" = "debian" ] ; then
   export LD_LIBRARY_PATH=$llp_save
fi 

exit $status
) > $HOSTLOGDIR/11-guile.txt 2>&1
# -> 1: command not found
if [ ! $? = 0 ] ; then
   echo guile build failed
fi
# outer
else 
    echo not building guile:
fi 


if test -n "$build_greg" ; then
    echo building greg:
    #${WGET} http://lmb.bioch.ox.ac.uk/coot/software/extras/greg-2.0.0-pe.tar.gz
    ${WGET} $extras_place/greg-2.0.0-pe.tar.gz
    (
    date 
    gzip -dc ${AUTOBUILD_SOURCES}/greg-2.0.0-pe.tar.gz | tar xf -
    cd  greg-2.0.0-pe
    ./configure $generic_prefix
    $MAKE
    $MAKE install

    ) > $HOSTLOGDIR/11c-greg.txt 2>&1
else
    echo not building greg:
fi


if test -n "$build_guile_gtk" ; then
    echo BUILDING guile-gtk:
#
guile_gtk_version=2.1
${WGET} http://www.mirrorservice.org/sites/ftp.gnu.org/gnu/guile-gtk/guile-gtk-$guile_gtk_version.tar.gz
# now, if we have gtk version 2.4 then we need guile-gtk patches.
gtk_minor_version=`awk -F '[()]' '/define GTK_MINOR_VERSION/ {print $(NF-1)} ' /usr/include/gtk-2.0/gtk/gtkversion.h`
if [ "$gtk_minor_version" = "4" ] ; then
    echo guile-gtk needs to be patched, gtk MINOR version is 4.
    apply_guile_gtk_patches=1
    # ${WGET} http://lmb.bioch.ox.ac.uk/coot/software/extras/guile-gtk-2.1-for-gtk-2.4.patch
    ${WGET} $extras_place/guile-gtk-2.1-for-gtk-2.4.patch
else
    echo GTK minor version is good enough, $gtk_minor_version
fi
(
date
pwd
gzip -dc ${AUTOBUILD_SOURCES}/guile-gtk-$guile_gtk_version.tar.gz | tar xf -
cd guile-gtk-$guile_gtk_version
if [ "$apply_guile_gtk_patches" = 1 ]; then
    echo patch -p0 ..from.. ${AUTOBUILD_SOURCES}/guile-gtk-2.1-for-gtk-2.4.patch
    patch -p0 < ${AUTOBUILD_SOURCES}/guile-gtk-2.1-for-gtk-2.4.patch
else 
    echo info:: not patching guile-gtk for gtk 2.4
fi 
./configure $generic_prefix --without-gtkgl --with-glade=no
# now patch the libtool if needed:
# fix ulong if needed:
# sed 's/(ulong)/(unsigned long)/g' guile-gtk.c > tmp.c
# mv tmp.c guile-gtk.c

# apply gtk_dialog_get_response_for_widget fix up if needed
if [ $gtk_new_enough_for_guilegtk = false ] ; then
    echo fixing up guile-gtk
    cp gtk-glue.c glue.tmp.c
    awk '
$0 !~ " gtk_dialog_get_response_for_widget" 
/ gtk_dialog_get_response_for_widget/ { print "  cr_ret = 0;"; }
' glue.tmp.c > gtk-glue.c
fi

# make not MAKE (using multiprocessors seems to fail).
make
status=$?
guile_gtk_status=$status
if [ "$guile_gtk_status" != 0 ] ; then
    echo Oooops guile-gtk make failed
else   
    echo 1 -------------------------------------------------------------------------
    echo '                                ' make install
    echo 1 -------------------------------------------------------------------------
    # $MAKE install
    make install
fi
) > $HOSTLOGDIR/12-guile-gtk.txt 2>&1
else
    echo not building guile-gtk:
fi

if test -n "$build_guile_gui" ; then
   echo BUILDING guile-gui:
#
# ${WGET} http://www.ysbl.york.ac.uk/~emsley/software/extras/guile-gui-0.2.tar.gz
# ${WGET} http://www.ysbl.york.ac.uk/~emsley/software/extras/neil-jerram.guile-gui.patch
# ${WGET} http://lmb.bioch.ox.ac.uk/coot/extras/guile-gui-0.3.tar.gz
${WGET} $extras_place/guile-gui-0.3.tar.gz
#
# guile-gui-patch-post-neil.patch is the same as
# neil-jerram.guile-gui.patch except guile-gui-patch-post-neil.patch
# has the correct file names.  Hmm...
#
# ${WGET} http://www.ysbl.york.ac.uk/~emsley/software/extras/guile-gui-patch-post-neil.patch
( 
date
pwd
gzip -dc ${AUTOBUILD_SOURCES}/guile-gui-0.3.tar.gz | tar xf -
# patch -p0 < ${AUTOBUILD_SOURCES}/neil-jerram.guile-gui.patch # this is for 0.2
cd guile-gui-0.3
./configure $generic_prefix
$MAKE install
) > $HOSTLOGDIR/13-guile-gui.txt 2>&1
else 
    echo not building guile-gui:
fi

# on Darwin, I have to cd to $install_top_dir/lib and 
# ln -s libgreg.2.0.0.dylib   libgreg.so
# ln -s libguilegtk-2.0.dylib libguilegtk-2.0.so

if [ $OS = Darwin ] ; then
   cd $install_top_dir/lib
   if [ -e libgreg.2.0.0.dylib ] ; then
      ln -s libgreg.2.0.0.dylib   libgreg.so
   fi
   if [ -e libguilegtk-2.0.dylib ] ; then
      ln -s libguilegtk-2.0.dylib libguilegtk-2.0.so
   fi
   cd -
fi

if test -n "$build_guile_lib" ; then
   echo BUILDING guile-lib:
#
guile_lib_version=0.1.6
guile_lib_version=0.2.1
# guile-lib has moved
# ${WGET} http://download.gna.org/guile-lib/guile-lib-$guile_lib_version.tar.gz
# ${WGET} http://download.savannah.gnu.org/releases/guile-lib/guile-lib-$guile_lib_version.tar.gz
${WGET} $extras_place/guile-lib-$guile_lib_version.tar.gz

( 
date
pwd
gzip -dc ${AUTOBUILD_SOURCES}/guile-lib-$guile_lib_version.tar.gz | tar xf -
cd guile-lib-$guile_lib_version
# the prefix for guile-lib must be the prefix of guile, or else the sxml and 
# other library files will not be found
# 20211019-PE strangely the second make seems to pass after the first one has failed
# (in the doc directory)
./configure $generic_prefix
$MAKE
make
$MAKE install
) > $HOSTLOGDIR/14-guile-lib.txt 2>&1
else 
    echo not building guile-lib
fi


###############################################################################
##########         build idn                                      #############
###############################################################################

# 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_libidn" ; then
   echo BUILDING libidn:
(
   # get libcurl from here: 
   libidn_version=1.15
   libidn_version=2.2.0
   # ${WGET} http://www.mirrorservice.org/sites/ftp.gnu.org/gnu/libidn/libidn-$libidn_version.tar.gz
   ${WGET}    https://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 2>&1
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.32.0
   libcurl_version=7.65.3
   libcurl_version_directory=7_65_3
   # ${WGET} http://curl.haxx.se/download/curl-$libcurl_version.tar.gz
   ${WGET} https://github.com/curl/curl/releases/download/curl-$libcurl_version_directory/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).
   #
   # this implicitly uses OpenSSL if it can be configured via pkg-config
   #
   # 20191211-PE on modern ubuntu: apt install libssl-dev, so that curl's configure finds it
   #             It's OK to depend on system libssl rather than build it myself.

   # Make sure (here) that system has OpenSSL
   # on Ubuntu: install it like this:
   # apt-get install libssl-dev
   #
   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 2>&1
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 2>&1
else
    echo not building gsl:
fi

#################################################################
# Clustalw2
#################################################################
#
if test -e $install_top_dir/bin/clustalw2 ; then
   echo not building clustalw2
else
   ${WGET} ftp://ftp.ebi.ac.uk/pub/software/clustalw2/2.1/clustalw-2.1.tar.gz
   if [ ! -e ${AUTOBUILD_SOURCES}/clustalw-2.1.tar.gz ] ; then
      echo failed to download clustalw2
   else
      # happy path
      (
      tar xf ${AUTOBUILD_SOURCES}/clustalw-2.1.tar.gz
      cd clustalw-2.1/
      ./configure --prefix=$install_top_dir
      if ${MAKE} ; then
          make install
      else
          echo make for clustalw-2.1 failed. Boo.
      fi
      ) > $HOSTLOGDIR/18-clustalw.txt 2>&1
   fi
fi

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

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

   raster3d_version=3.0-3
   raster3d_version=3.0-7
   # raster3d depends on libgd to make png images
   # ${WGET} http://skuld.bmsc.washington.edu/raster3d/Raster3D_$raster3d_version.tar.gz
   ${WGET} http://www.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
      echo libgd...............
      (
       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
              else
                 echo info: $MAKE failed for libgd
	      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 2>&1
    
      echo build render...............
      ( 
       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

          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

          echo about to do this: $MAKE render
          make render
          ls -l render

          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
  	        echo Hand copy: cp render $install_top_dir/bin/
  	        cp render $install_top_dir/bin/
             fi
          else
             echo INFO:: make failed for render
             # warning make exit status false, but the binary may well have been built
             if [ -e render ] ; then
                if [ ! -e $install_top_dir/bin/render ] ; then
  	           echo Hand copy: cp render $install_top_dir/bin/
  	           cp render $install_top_dir/bin/
                fi
             else
                echo no render built in `pwd`
             fi
          fi
          cd -
       else 
          echo $install_top_dir/bin/render already exists, no build
       fi
       ) > $HOSTLOGDIR/15-raster3d.txt 2>&1
   fi
fi


###############################################################################
##########         get Coot                                       #############
###############################################################################
#
echo BUILDING coot: version $coot_version, guile=$ENABLE_GUILE_COOT, python=$ENABLE_PYTHON_COOT

if [ -z "$coot_version" ] ; then
   echo coot_version is empty - exit now
   my_exit 2 coot_version not set
fi
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

# get the cxxsurface patch - not sure if/when it's needed.
# It seems to be needed for g++ 9.2.1 on Ubuntu 19.10
# but not on 4.8.5 on Scientific Linux
# ${WGET} $extras_place/cxxsurface-for-openmp-v1.patch
# reset this (set it to "yes") if needed, depending on the OS/compiler
# need_cxxsurface_for_openmp_patch=no
# if [ "$w_fid" = g++-9 ] ; then
#    echo we need the CXXSurface OpenMP patch
#    need_cxxsurface_for_openmp_patch=yes
# 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 [ $need_cxxsurface_for_openmp_patch = yes ] ; then
#     echo patching from ${AUTOBUILD_SOURCES}/cxxsurface-for-openmp-v1.patch
#    patch -p0 < ${AUTOBUILD_SOURCES}/cxxsurface-for-openmp-v1.patch
# fi

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 -O3 -ffast-math"
   #   unset CXXFLAGS
fi


cbis_d=$(date +'%a %d %b %H%M.%S %Z %Y')
if /usr/bin/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 by $USER"
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


# I want to compile with no-strict-aliasing for the python files output by swig. How do I do that?

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 \
      --with-enhanced-ligand-tools             \
      --with-boost=$install_top_dir            \
      --with-boost-libdir=$install_top_dir/lib \
      --with-rdkit-prefix=$install_top_dir     \
      $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 \
      --with-enhanced-ligand-tools             \
      --with-boost=$install_top_dir            \
      --with-boost-libdir=$install_top_dir/lib \
      --with-rdkit-prefix=$install_top_dir     \
      $shared_static_flag \
      $coot_optim_args    \
      $coot_extra_args    \
      $extra_args_for_darwin

# 20230907-PE There is a problem on Fedora now, it seems - possibly/probably before
# also, when installing the python files. They are compiled with ../py-compile
# but using ../py-compile --destdir "" fails, i.e. when DESTDIR is not defined,
# as is the case when one dose "make install"
# So I will convert that to say just "../py-compile"
#
sed -ibackup -e 's/am__py_compile.*destdir.*/am__py_compile)/' pyrogen/Makefile
sed -ibackup -e 's/am__py_compile.*destdir.*/am__py_compile)/' python/Makefile

# 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 DESTDIR=/ 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/20-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 coot build failed, exiting. 1>&2
    echo fail-build $coot_revision > $LOGS/build-status
    my_exit 2 $coot_revision
else 
    echo coot build was good.
    echo coot build was good. 1>&2
    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
# refmac_mon_lib=refmac-monomer-library.tar.gz
# refmac_mon_lib=refmac-monomer-library-20210105.tar.gz

# new style
mon_lib_dir=http://www2.mrc-lmb.cam.ac.uk/personal/pemsley/coot/dependencies
ccp4_mon_lib=monomers-2023-01-02-23:57:29.tar.gz

if [ -e $install_top_dir/share/coot/lib/data/monomers ] ; then
    echo INFO:: installation has refmac monomer library
else 
    echo INSTALLING CCP4 monomer library...
    echo INSTALLING CCP4 monomer library... >&2
    $WGET $mon_lib_dir/$ccp4_mon_lib
    mkdir -p $install_top_dir/share/coot/lib/data
    tar xzCf $install_top_dir/share/coot/lib/data $AUTOBUILD_SOURCES/$ccp4_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 = "--enable-shared" ] ; then
    clear_up_type=clear-static
fi   
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... with clear-up type $clear_up_type >&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" = "disablethisfornow" ] ; 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