diff options
| author | Mohammad Akhlaghi <mohammad@akhlaghi.org> | 2019-04-15 01:47:58 +0100 | 
|---|---|---|
| committer | Mohammad Akhlaghi <mohammad@akhlaghi.org> | 2019-04-15 02:24:09 +0100 | 
| commit | 313b936b502d22b6a2ff43f560dee0bb51fd01d0 (patch) | |
| tree | 70f884b91b393be4d3c6b7cfaeaf3412900bd16f /configure | |
| parent | 4722ea598edd6b630227404c48c1c09ac527e9b8 (diff) | |
New architecture to separate software-building and analysis steps
Until now, the software building and analysis steps of the pipeline were
intertwined. However, these steps (of how to build a software, and how to
use it) are logically completely independent.
Therefore with this commit, the pipeline now has a new architecture
(particularly in the `reproduce' directory) to emphasize this distinction:
The `reproduce' directory now has the two `software' and `analysis'
subdirectories and the respective parts of the previous architecture have
been broken up between these two based on their function. There is also no
more `src' directory. The `config' directory for software and analysis is
now mixed with the language-specific directories.
Also, some of the software versions were also updated after some checks
with their webpages.
This new architecture will allow much more focused work on each part of the
pipeline (to install the software and to run them for an analysis).
Diffstat (limited to 'configure')
| -rwxr-xr-x | configure | 147 | 
1 files changed, 90 insertions, 57 deletions
| @@ -4,15 +4,15 @@  #  # Copyright (C) 2018-2019 Mohammad Akhlaghi <mohammad@akhlaghi.org>  # -# This script 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 script 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 script 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. +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General +# Public License for more details.  #  # A copy of the GNU General Public License is available at  # <http://www.gnu.org/licenses/>. @@ -178,13 +178,16 @@ done  topdir=$(pwd)  lbdir=.build  installedlink=.local -cdir=reproduce/config  optionaldir="/optional/path" +adir=reproduce/analysis/config +cdir=reproduce/software/config -pdir=$cdir/pipeline -pconf=$pdir/LOCAL.mk -ptconf=$pdir/LOCAL_tmp.mk -poconf=$pdir/LOCAL_old.mk +sbdir=$cdir/installation + +pconf=$sbdir/LOCAL.mk +ptconf=$sbdir/LOCAL_tmp.mk +poconf=$sbdir/LOCAL_old.mk +depverfile=$cdir/installation/versions.mk  # --------- Delete for no Gnuastro ---------  glconf=$cdir/gnuastro/gnuastro-local.conf  # ------------------------------------------ @@ -430,10 +433,10 @@ if [ x"$input_dir" = x ]; then  else      indir=$input_dir  fi -wfpc2name=$(awk '!/^#/ && $1=="WFPC2IMAGE" {print $3}' $pdir/INPUTS.mk) -wfpc2md5=$(awk  '!/^#/ && $1=="WFPC2MD5"   {print $3}' $pdir/INPUTS.mk) -wfpc2size=$(awk '!/^#/ && $1=="WFPC2SIZE"  {print $3}' $pdir/INPUTS.mk) -wfpc2url=$(awk  '!/^#/ && $1=="WFPC2URL"   {print $3}' $pdir/INPUTS.mk) +wfpc2name=$(awk '!/^#/ && $1=="WFPC2IMAGE" {print $3}' $adir/INPUTS.mk) +wfpc2md5=$(awk  '!/^#/ && $1=="WFPC2MD5"   {print $3}' $adir/INPUTS.mk) +wfpc2size=$(awk '!/^#/ && $1=="WFPC2SIZE"  {print $3}' $adir/INPUTS.mk) +wfpc2url=$(awk  '!/^#/ && $1=="WFPC2URL"   {print $3}' $adir/INPUTS.mk)  if [ $rewritepconfig = yes ] && [ x"$input_dir" = x ]; then      cat <<EOF @@ -584,7 +587,6 @@ fi  # --------- Delete for no Gnuastro ---------  # Get the version of Gnuastro that must be used. -depverfile=reproduce/config/pipeline/dependency-versions.mk  gversion=$(awk '$1=="gnuastro-version" {print $NF}' $depverfile)  # Gnuastro's local configuration settings @@ -626,15 +628,18 @@ fi  rm -f $lbdir  ln -s $bdir $lbdir -depdir=$bdir/dependencies -if ! [ -d $depdir ];  then mkdir $depdir; fi +sdir=$bdir/software +if ! [ -d $sdir ];  then mkdir $sdir; fi -tardir=$depdir/tarballs +tardir=$sdir/tarballs  if ! [ -d $tardir ];  then mkdir $tardir; fi -instdir=$depdir/installed +instdir=$sdir/installed  if ! [ -d $instdir ]; then mkdir $instdir; fi +tmpblddir=$sdir/build-tmp +if ! [ -d $tmpblddir ]; then mkdir $tmpblddir; fi +  verdir=$instdir/version-info  if ! [ -d $verdir ]; then mkdir $verdir; fi @@ -654,7 +659,7 @@ itidir=$verdir/tex  if ! [ -d $itidir ]; then mkdir $itidir; fi  texdir=$bdir/tex -if ! [ -d $texdir ]; then mkdir $texdir; ln -s $texdir tex/pipeline; fi +if ! [ -d $texdir ]; then mkdir $texdir; ln -s $texdir tex/build; fi  mtexdir=$texdir/macros  if ! [ -d $mtexdir ]; then mkdir $mtexdir; fi @@ -663,7 +668,7 @@ rm -f $installedlink  ln -s $instdir $installedlink  # --------- Delete for no Gnuastro ---------  rm -f .gnuastro -ln -s $(pwd)/reproduce/config/gnuastro .gnuastro +ln -s $topdir/reproduce/software/config/gnuastro .gnuastro  # ------------------------------------------ @@ -685,8 +690,8 @@ ln -s $(pwd)/reproduce/config/gnuastro .gnuastro  # the library came from the system or our build.  static_build=no -#oprog=$depdir/static-test -#cprog=$depdir/static-test.c +#oprog=$sdir/static-test +#cprog=$sdir/static-test.c  #echo "#include <stdio.h>"          > $cprog  #echo "int main(void) {return 0;}" >> $cprog  #if [ x$CC = x ]; then CC=gcc; fi; @@ -733,8 +738,8 @@ static_build=no  # `-rpath-link' is used to write the information of the linked shared  # library into the shared object (library or program). But some versions of  # LLVM's linker don't accept it an can cause problems. -oprog=$depdir/rpath-test -cprog=$depdir/rpath-test.c +oprog=$sdir/rpath-test +cprog=$sdir/rpath-test.c  echo "#include <stdio.h>"          > $cprog  echo "int main(void) {return 0;}" >> $cprog  if [ x$CC = x ]; then CC=gcc; fi; @@ -754,10 +759,10 @@ rm -f $oprog $cprog  #  # Some programs (like Wget) need dynamic loading (using `libdl'). On  # GNU/Linux systems, we'll need the `-ldl' flag to link such programs.  But -# Mac OS doesn't need any explicit calling. So we'll check here to use in -# the building of programs. -oprog=$depdir/ldl-test -cprog=$depdir/ldl-test.c +# Mac OS doesn't need any explicit linking. So we'll check here to see if +# it is present (thus necessary) or not. +oprog=$sdir/ldl-test +cprog=$sdir/ldl-test.c  cat > $cprog <<EOF  #include <stdio.h>  #include <dlfcn.h> @@ -790,7 +795,7 @@ NOTE: the built software will NOT BE INSTALLED on your system (no root  access is required). They are only for local usage by this project. They  will be installed in: -  $depdir/installed +  $sdir/installed  EOF      sleep $tsec @@ -821,17 +826,17 @@ fi -# Build `flock' as first program -# ------------------------------ +# Build `flock' +# -------------  #  # Flock (or file-lock) is a unique program that is necessary to serialize  # the (generally parallel) processing of make when necessary. GNU/Linux  # machines have it as part of their `util-linux' programs. But to be  # consistent in non-GNU/Linux systems, we will be using our own build.  # -# The reason its sepecial is that we need it to serialize the download -# process of the dependency tarballs. -flockversion=$(awk '/flock-version/{print $3}' $pdir/dependency-versions.mk) +# The reason that `flock' is sepecial is that we need it to serialize the +# download process of the software tarballs. +flockversion=$(awk '/flock-version/{print $3}' $depverfile)  flocktar=flock-$flockversion.tar.gz  flockurl=http://github.com/discoteq/flock/releases/download/v$flockversion/ @@ -862,13 +867,14 @@ fi  # Build `flock' if necessary.  if ! [ -f $ibidir/flock ]; then -    cd $depdir +    cd $tmpblddir      tar xf $tardir/$flocktar      cd flock-$flockversion      ./configure --prefix=$instdir -    make; make install +    make +    make install      cd $topdir -    rm -rf $depdir/flock-$flockversion +    rm -rf $tmpblddir/flock-$flockversion      echo "Discoteq flock $flockversion" > $ibidir/flock  fi @@ -886,11 +892,11 @@ fi  # explicitly testing a small C program here to see if the host's C compiler  # won't have any problems in building GCC.  if [ $host_cc = 0 ]; then -    tfile=$depdir/gcc-cdefs-test.c; +    tfile=$sdir/gcc-cdefs-test.c;      echo "#include <sys/cdefs.h>"     > $tfile;      echo "int main(void){return 0;}" >> $tfile; -    if gcc $tfile -o $depdir/gcc-cdefs-test &> /dev/null; then -        rm $depdir/gcc-cdefs-test*; +    if gcc $tfile -o $sdir/gcc-cdefs-test &> /dev/null; then +        rm $sdir/gcc-cdefs-test*;      else          host_cc=1      fi; @@ -925,8 +931,8 @@ fi -# Build Basic dependencies -# ------------------------ +# Number of threads for basic builds +# ----------------------------------  #  # Since the system might not have GNU Make at this stage, and other Make  # implementations can't deal with parallel build properly, we'll just @@ -935,7 +941,7 @@ fi  # I found out its because of too many threads. GNU Make will be present on  # GNU systems (that have `nproc', part of GNU Coreutils). So to simplify  # the test for GNU Make, we'll just try running `nproc'. -if which nproc > /dev/null 2>/dev/null; then +if which nproc &> /dev/null; then      if [ $jobs = 0 ]; then          numthreads=$(nproc --all);      else @@ -944,28 +950,43 @@ if which nproc > /dev/null 2>/dev/null; then  else      numthreads=1;  fi -make -f reproduce/src/make/dependencies-basic.mk \ -     rpath_command=$rpath_command                \ -     static_build=$static_build                  \ -     needs_ldl=$needs_ldl                        \ -     on_mac_os=$on_mac_os                        \ -     numthreads=$numthreads                      \ -     host_cc=$host_cc                            \ -     -j$numthreads -# Rest of dependencies +# Build basic software  # --------------------  # +# When building these software we don't have our own un-packing software, +# Bash, Make, or AWK. In this step, we'll install such low-level basic +# tools, but we have to be very portable (and use minimal features in all). +make -f reproduce/software/make/basic.mk \ +     rpath_command=$rpath_command        \ +     static_build=$static_build          \ +     needs_ldl=$needs_ldl                \ +     on_mac_os=$on_mac_os                \ +     numthreads=$numthreads              \ +     host_cc=$host_cc                    \ +     -j$numthreads + + + + + +# All other software +# ------------------ +#  # We will be making all the dependencies before running the top-level  # Makefile. To make the job easier, we'll do it in a Makefile, not a  # script. Bash and Make were the tools we need to run Makefiles, so we had  # to build them in this script. But after this, we can rely on Makefiles. -numthreads=$($instdir/bin/nproc) -./.local/bin/make -f reproduce/src/make/dependencies.mk    \ +if [ $jobs = 0 ]; then +    numthreads=$($instdir/bin/nproc --all) +else +    numthreads=$jobs +fi +./.local/bin/make -f reproduce/software/make/high-level.mk \                    rpath_command=$rpath_command             \                    static_build=$static_build               \                    on_mac_os=$on_mac_os                     \ @@ -1101,13 +1122,25 @@ fi + +# Clean the temporary build directory +# --------------------------------- +# +# By the time the script reaches here the temporary software build +# directory should be empty, so just delete it. +rm -rf $tmpblddir + + + + +  # Final step: available Makefile  # ------------------------------  #  # We only want `make' to work after the configuration is complete. So we  # will only put in the top-level Makefile after all the steps above are  # done. -.local/bin/ln -s $(pwd)/reproduce/src/make/top.mk Makefile +.local/bin/ln -s $topdir/reproduce/analysis/make/top.mk Makefile | 
