# # -*-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 < 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 libncurses5-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* [#] # ?: 134* [load-file # ...] # ?: 135* [save-module-excursion #] # ?: 136 (let (# #) (dynamic-wind # thunk #)) # ?: 137 [dynamic-wind # # #] # ?: 138* [#] # ?: 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 # (# :export #)] # ?: 143 [# (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. # : In expression (substring (symbol->string sym) 1): # : 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