source: branches/autotools-update/Cbc/get.dependencies.sh @ 2412

Last change on this file since 2412 was 2412, checked in by lou, 2 years ago

Merge trunk 2389 -- 2410. Propagate BuildTools? changes.

  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 26.9 KB
Line 
1#!/usr/bin/env bash
2
3# Author: Ted Ralphs (ted@lehigh.edu)
4# Copyright 2016, Ted Ralphs
5# Released Under the Eclipse Public License
6#
7# TODO
8# - consider using pushd/popd instead of cd somewhere/cd ..
9# - look at TODO and FIXME below
10
11# script debugging
12#set -x
13#PS4='${LINENO}:${PWD}: '
14
15function help {
16    echo "Usage: get.dependencies.sh <command> --option1 --option2"
17    echo
18    echo "Commands:"
19    echo
20    echo "  fetch: Checkout source code for all dependencies"
21    echo "    options: --svn (checkout from SVN)"
22    echo "             --git (checkout from git)"
23    echo "             --skip='proj1 proj2' skip listed projects"
24    echo "             --no-third-party don't download third party source (getter-scripts)"
25    echo
26    echo "  build: Configure, build, test (optional), and pre-install all projects"
27    echo "    options: --xxx=yyy (will be passed through to configure)"
28    echo "             --monolithic do 'old style' monolithic build"
29    echo "             --parallel-jobs=n build in parallel with maximum 'n' jobs"
30    echo "             --build-dir=\dir\to\build\in do a VPATH build (default: $PWD/build)"
31    echo "             --test run unit test of main project before install"
32    echo "             --test-all run unit tests of all projects before install"
33    echo "             --verbosity=i set verbosity level (1-4)"
34    echo "             --reconfigure re-run configure"
35    echo
36    echo "  install: Install all projects in location specified by prefix"
37    echo "    options: --prefix=\dir\to\install (where to install, default: $PWD/build)"
38    echo
39    echo "  uninstall: Uninstall all projects"
40    echo
41    echo "General options:"
42    echo "  --debug: Turn on debugging output"
43    echo 
44}
45
46function print_action {
47    echo
48    echo "##################################################"
49    echo "### $1 "
50    echo "##################################################"
51    echo
52}
53
54function get_cached_options {
55    echo "Reading cached options:"
56    # read options from file, one option per line, and store into array copts
57    readarray -t copts < "$build_dir/.config"
58    # move options from copts[0], copts[1], ... into
59    # configure_options, where they are stored as the keys
60    # skip options that are empty (happens when reading empty .config file)
61    for c in ${!copts[*]} ; do
62        [ -z "${copts[$c]}" ] && continue
63        configure_options["${copts[$c]}"]=""
64    done
65    # print configuration options, one per line
66    # (TODO might need verbosity level check)
67    printf "%s\n" "${!configure_options[@]}"
68    if [ -e $build_dir/.monolithic ]; then
69        monolithic=true
70    fi
71}
72
73function invoke_make {
74    if [ $1 = 1 ]; then
75        $MAKE -j $jobs $2 >& /dev/null
76    elif [ $1 = 2 ]; then
77        $MAKE -j $jobs $2 > /dev/null
78    elif [ $1 = 3 ]; then
79        $MAKE -j $jobs $2
80    else
81        $MAKE -j $jobs V=1 $2
82    fi
83}
84
85function get_project {
86    TMP_IFS=$IFS
87    unset IFS
88    for i in $coin_skip_projects
89    do
90        if [ $1 = $i ]; then
91            IFS=$TMP_IFS
92            return 1
93        fi
94    done
95    IFS=$TMP_IFS
96    return 0
97}
98
99# Parse arguments
100function parse_args {
101    echo "Script run with the following arguments:"
102    for arg in "$@"
103    do
104        echo $arg
105        option=
106        option_arg=
107        case $arg in
108            *=*)
109                option=`expr "x$arg" : 'x\(.*\)=[^=]*'`
110                option_arg=`expr "x$arg" : 'x[^=]*=\(.*\)'`
111                # with bash, one could also do it in the following way:
112                # option=${arg%%=*}    # remove longest suffix matching =*
113                # option_arg=${arg#*=} # remove shortest prefix matching *=
114                case $option in
115                    --prefix)
116                        if [ "x$option_arg" != x ]; then
117                            case $option_arg in
118                                [\\/$]* | ?:[\\/]* | NONE | '' )
119                                    prefix=$option_arg
120                                    ;;
121                                *) 
122                                    echo "Prefix path must be absolute."
123                                    exit 3
124                                    ;;
125                            esac
126                        else
127                            echo "No path provided for --prefix"
128                            exit 3
129                        fi
130                        ;;
131                    --build-dir)
132                        if [ "x$option_arg" != x ]; then
133                            case $option_arg in
134                                [\\/$]* | ?:[\\/]* | NONE | '' )
135                                    build_dir=$option_arg
136                                    ;;
137                                *)
138                                    build_dir=$PWD/$option_arg
139                                    ;;
140                            esac
141                        else
142                            echo "No path provided for --build-dir"
143                            exit 3
144                        fi
145                        ;;
146                    --parallel-jobs)
147                        if [ "x$option_arg" != x ]; then
148                            jobs=$option_arg
149                        else
150                            echo "No number specified for --parallel-jobs"
151                            exit 3
152                        fi
153                        ;;
154                    --threads)
155                        echo "The 'threads' argument has been re-named 'parallel-jobs'."
156                        echo "Please re-run with correct argument name"
157                        exit 3
158                        ;;
159                    --verbosity)
160                        if [ "x$option_arg" != x ]; then
161                            verbosity=$option_arg
162                        else
163                            echo "No verbosity specified for --verbosity"
164                            exit 3
165                        fi
166                        ;;
167                    DESTDIR)
168                        echo "DESTDIR installation not supported"
169                        exit 3
170                        ;;
171                    --skip)
172                        if [ "x$option_arg" != x ]; then
173                            coin_skip_projects=$option_arg
174                        fi
175                        ;;
176                    *)
177                        configure_options["$arg"]=""
178                        ;;           
179                esac
180                ;;
181            --sparse)
182                sparse=true
183                ;;
184            --svn)
185                svn=true
186                ;;
187            --git)
188                svn=false
189                ;;
190            --debug)
191                set -x
192                ;;
193            --monolithic)
194                monolithic=true
195                ;;
196            --reconfigure)
197                reconfigure=true
198                ;;
199            --test)
200                run_test=true
201                ;;
202            --test-all)
203                run_all_tests=true
204                ;;
205            --no-third-party)
206                get_third_party=false
207                ;;
208            --*)
209                configure_options["$arg"]=""
210                ;;
211            fetch)
212                num_actions+=1
213                fetch=true
214                ;;
215            build)
216                num_actions+=1
217                build=true
218                ;;
219            install)
220                num_actions+=1
221                install=true
222                ;;
223            uninstall)
224                num_actions+=1
225                uninstall=true
226                ;;
227            *)
228                echo "Unrecognized command...exiting"
229                exit 3
230                ;;
231        esac
232    done
233}
234
235function fetch {
236
237    # This changes the default separator used in for loops to carriage return.
238    # We need this later.
239    IFS=$'\n'
240
241    # Keep track of the subdirectories in which we need to build later.
242    subdirs=
243
244    # Build list of sources for dependencies
245    if [ -e Dependencies ]; then
246        deps=`cat Dependencies | sed -e '/^#/d' | tr '\t' ' ' | tr -s ' '| cut -d ' ' -f 2-`
247    elif [ -e $main_proj/Dependencies ]; then
248        deps=`cat $main_proj/Dependencies | sed -e '/^#/d' | tr '\t' ' ' | tr -s ' '| cut -d ' ' -f 2-`
249    else
250        echo "Can't find dependencies file...exiting"
251        exit 3
252    fi
253       
254    for url in $deps
255    do
256        if [ `echo $url | cut -d '/' -f 3` != "projects.coin-or.org" ]; then
257            # If this is a URL of something other than a COIN-OR project on
258            # SVN, then we assume it's a git project
259            git_url=`echo $url | tr '\t' ' ' | tr -s ' '| cut -d ' ' -f 1`
260            branch=`echo $url | tr '\t' ' ' | tr -s ' '| cut -d ' ' -f 2`
261            dir=`echo $git_url | cut -d '/' -f 5`
262            proj=`echo $git_url | cut -d "/" -f 5`
263            if get_project $proj; then
264                print_action "Clone $git_url branch $branch"
265                if [ ! -e $dir ]; then
266                    git clone --branch=$branch $git_url
267                else
268                    cd $dir
269                    git pull origin $branch
270                    cd -
271                fi
272                if [ `echo $proj | cut -d '-' -f 1` = "CHiPPS" ]; then
273                    subdir=`echo $proj | cut -d '-' -f 2`
274                    case $subdir in
275                        ALPS) subdir=Alps;;
276                        BiCePS) subdir=Bcps;;
277                        BLIS) subdir=Blis;;
278                    esac
279                    subdirs+="$dir/$subdir "
280                elif [ -e $dir/$dir/configure ]; then
281                    subdirs+="$dir/$dir "
282                else
283                    subdirs+="$dir "
284                fi
285            else
286                echo "Skipping $proj..."
287            fi
288        elif [ $svn = "true" ]; then
289            # Here, we are supposed to check out from SVN
290            svn_repo=`echo $url | cut -d '/' -f 5`
291            if [ $svn_repo = "BuildTools" ]; then
292                if [ `echo $url | cut -d '/' -f 6` = 'ThirdParty' ]; then
293                    tp_proj=`echo $url | cut -d '/' -f 7`
294                    if [ `echo $url | cut -d '/' -f 8` = trunk ]; then
295                        version=trunk
296                    else
297                        version=`echo $url | cut -d '/' -f 9`
298                    fi
299                    if get_project $tp_proj; then
300                        mkdir -p ThirdParty
301                        print_action "Checking out ThirdParty/$tp_proj"
302                        svn co --non-interactive --trust-server-cert $url \
303                            ThirdParty/$tp_proj
304                    else
305                        echo "Skipping $tp_proj..."
306                    fi
307                    if [ $get_third_party = "true" ] &&
308                       [ -e ThirdParty/$tp_proj/get.$tp_proj ]; then
309                        cd ThirdParty/$tp_proj
310                        ./get.$tp_proj
311                        cd -
312                        subdirs+="ThirdParty/$tp_proj "
313                    else
314                        echo "Not downloading source for $tp_proj..."
315                    fi
316                fi
317            else
318                if [ $svn_repo = "CHiPPS" ]; then
319                    proj=`echo $url | cut -d '/' -f 6`
320                    if [ `echo $url | cut -d '/' -f 7` = trunk ]; then
321                        version=trunk
322                    else
323                        version=`echo $url | cut -d '/' -f 8`
324                    fi
325                elif [ $svn_repo = "Data" ]; then
326                    proj=`echo $url | cut -d '/' -f 5-6`
327                    if [ `echo $url | cut -d '/' -f 7` = trunk ]; then
328                        version=trunk
329                    else
330                        version=`echo $url | cut -d '/' -f 8`
331                    fi
332                else
333                    proj=`echo $url | cut -d '/' -f 5`
334                    if [ `echo $url | cut -d '/' -f 6` = trunk ]; then
335                        version=trunk
336                    else
337                        version=`echo $url | cut -d '/' -f 7`
338                    fi
339                fi
340                if get_project $proj; then
341                    print_action "Checking out $proj"
342                    svn co --non-interactive --trust-server-cert $url $proj
343                    subdirs+="$proj "
344                else
345                    echo "Skipping $proj..."
346                fi
347            fi
348        else
349            # Otherwise, convert SVN URL to a Github one and check out with git
350            svn_repo=`echo $url | cut -d '/' -f 5`
351            if [ $svn_repo = 'Data' ]; then
352                data_proj=`echo $url | cut -d '/' -f 6`
353                print_action "Checking out Data/$data_proj"
354                svn co $url Data/$data_proj
355                subdirs+="Data/$data_proj "
356            elif [ $svn_repo = 'BuildTools' ]; then
357                if [ `echo $url | cut -d '/' -f 6` = "ThirdParty" ]; then
358                    tp_proj=`echo $url | cut -d '/' -f 7`
359                    proj=ThirdParty-$tp_proj
360                    mkdir -p ThirdParty
361                    if [ `echo $url | cut -d '/' -f 8` = "trunk" ]; then
362                        branch=master
363                        version=trunk
364                    else
365                        branch=`echo $url | cut -d '/' -f 8-9`
366                        version=`echo $url | cut -d '/' -f 9`
367                    fi
368                    if get_project $tp_proj; then
369                        print_action "Getting ThirdParty/$tp_proj branch $branch"
370                        if [ ! -e ThirdParty/$tp_proj ]; then
371                            git clone --branch=$branch \
372                                https://github.com/coin-or-tools/$proj \
373                                ThirdParty/$tp_proj
374                            if [ $get_third_party = "true" ] && \
375                                   [ -e ThirdParty/$tp_proj/get.$tp_proj ]; then
376                                cd ThirdParty/$tp_proj
377                                ./get.$tp_proj
378                                cd -
379                                subdirs+="ThirdParty/$tp_proj "
380                            fi
381                        else
382                            cd ThirdParty/$tp_proj
383                            git pull origin $branch
384                            if [ $get_third_party = "true" ] && \
385                                   [ -e get.$tp_proj ]; then
386                                ./get.$tp_proj
387                                subdirs+="ThirdParty/$tp_proj "
388                            fi
389                            cd -
390                        fi
391                    else
392                        echo "Skipping $tp_proj..."
393                    fi
394                fi
395            else
396                if [ $svn_repo = "CHiPPS" ]; then
397                    git_repo=CHiPPS-`echo $url | cut -d '/' -f 6`
398                    proj=`echo $url | cut -d '/' -f 6`
399                    if [ `echo $url | cut -d '/' -f 7` = 'trunk' ]; then
400                        branch=master
401                        version=trunk
402                    else
403                        branch=`echo $url | cut -d '/' -f 7-8`
404                        version=`echo $url | cut -d '/' -f 8`
405                    fi
406                else
407                    git_repo=`echo $url | cut -d '/' -f 5`
408                    proj=`echo $url | cut -d '/' -f 5`
409                    if [ `echo $url | cut -d '/' -f 6` = 'trunk' ]; then
410                        branch=master
411                        version=trunk
412                    else
413                        branch=`echo $url | cut -d '/' -f 6-7`
414                        version=`echo $url | cut -d '/' -f 7`
415                    fi
416                fi
417                if get_project $proj; then
418                    print_action "Getting $git_repo branch $branch"
419                    if [ sparse = "true" ]; then
420                        mkdir $proj
421                        cd $proj
422                        git init
423                        git remote add origin \
424                            https://github.com/coin-or/$git_repo 
425                        git config core.sparsecheckout true
426                        echo $proj/ >> .git/info/sparse-checkout
427                        git fetch
428                        git checkout $branch
429                        cd ..
430                    else
431                        if [ ! -e $proj ]; then
432                            git clone --branch=$branch \
433                                https://github.com/coin-or/$git_repo $proj
434                        else
435                            cd $proj
436                            git pull origin $branch
437                            cd -
438                        fi
439                    fi
440                    subdirs+="$proj/$proj "
441                else
442                    echo "Skipping $proj..."
443                fi
444            fi
445        fi
446    done
447    echo $subdirs > .subdirs
448    unset IFS
449}
450
451function build {
452    if [ $monolithic = "false" ]; then
453        if [ ! -e ".subdirs" ]; then
454            echo "No .subdirs file. Please fetch first"
455            exit 3
456        else
457            mkdir -p $build_dir
458            rm -f $build_dir/coin_subdirs.txt
459        fi
460        for dir in `cat .subdirs`
461        do
462            if [ $build_dir != $PWD ]; then
463                proj_dir=`echo $dir | cut -d '/' -f 1`
464                if [ $proj_dir = "Data" ] || [ $proj_dir = "ThirdParty" ]; then
465                    proj_dir=$dir
466                fi
467                mkdir -p $build_dir/$proj_dir
468                echo -n $proj_dir" " >> $build_dir/coin_subdirs.txt
469                cd $build_dir/$proj_dir
470            else
471                cd $dir
472            fi
473            if [ ! -e config.status ] || [ $reconfigure = "true" ]; then
474                if [ $reconfigure = "true" ]; then
475                    print_action "Reconfiguring $proj_dir"
476                else
477                    print_action "Configuring $proj_dir"
478                fi
479                if [ $verbosity -ge 3 ]; then
480                    "$root_dir/$dir/configure" --prefix=$1 "${!configure_options[@]}"
481                else
482                    "$root_dir/$dir/configure" --prefix=$1 "${!configure_options[@]}" > /dev/null
483                fi
484            fi
485            print_action "Building $proj_dir"
486            if [ $verbosity -ge 3 ]; then
487                invoke_make $(($verbosity-1)) ""
488            else
489                invoke_make 1 ""
490            fi
491            if [ $run_all_tests = "true" ]; then
492                print_action "Running $proj_dir unit test"
493                invoke_make "false" test
494            fi
495            if [ $1 = $build_dir ]; then
496                print_action "Pre-installing $proj_dir"
497            else
498                print_action "Installing $proj_dir"
499            fi
500            if [ $verbosity -ge 3 ]; then
501                invoke_make $(($verbosity-1)) install
502            else
503                invoke_make 1 install
504            fi
505            cd $root_dir
506        done
507        mkdir -p $build_dir/$main_proj
508        cd $build_dir/$main_proj
509        if [ ! -e config.status ] || [ $reconfigure = "true" ]; then
510            if [ $reconfigure = "true" ]; then
511                print_action "Reconfiguring $main_proj"
512            else
513                print_action "Configuring $main_proj"
514            fi
515            # First, check whether this is a "rootless" project
516            if [ -e $root_dir/$main_proj/configure ]; then
517                root_config=$root_dir/$main_proj/configure
518            else
519                root_config=$root_dir/configure
520            fi
521            # Now, do the actual configuration
522            if [ $verbosity -ge 2 ]; then
523                "$root_config" --prefix=$1 "${!configure_options[@]}"
524            else
525                "$root_config" --prefix=$1 "${!configure_options[@]}" > /dev/null
526            fi
527        fi
528        print_action "Building $main_proj"
529        if [ $verbosity -ge 2 ]; then
530            invoke_make 3 ""
531        else
532            invoke_make 1 ""
533        fi
534        if [ $run_test = "true" ]; then
535            print_action "Running $main_proj unit test"
536            invoke_make "false" test
537        fi
538        if [ $1 = $build_dir ]; then
539            print_action "Pre-installing $main_proj"
540        else
541            print_action "Installing $main_proj"
542        fi
543        if [ $verbosity -ge 2 ]; then
544            invoke_make 3 install
545        else
546            invoke_make 1 install
547        fi
548        cd $root_dir
549    else
550        if [ build_dir != $PWD ]; then
551            mkdir -p $build_dir
552            cd $build_dir
553        fi
554        if [ ! -e config.status ]; then
555            print_action "Configuring"
556        else
557            if [ $reconfigure = "true" ]; then
558                print_action "Reconfiguring"
559            fi
560        fi
561        if [ ! -e config.status ] || [ $reconfigure = "true" ]; then
562            if [ $verbosity != 1 ]; then
563                "$root_dir/configure" --prefix=$1 "${!configure_options[@]}"
564            else
565                "$root_dir/configure" --prefix=$1 "${!configure_options[@]}" > /dev/null
566            fi
567        fi
568        if [ $run_all_tests = "true" ]; then
569            echo "Warning: Can't run all tests with a monolithic build."
570            echo "Disabling setting"
571            run_test=true
572        fi
573        print_action "Building"
574        invoke_make $verbosity ""
575        if [ $run_test = "true" ]; then
576            print_action "Running unit test"
577            invoke_make "false" test
578        fi
579        invoke_make $verbosity install
580        cd $root_dir
581    fi
582}
583
584function install {
585    if [ prefix != $build_dir ]; then
586        print_action "Reconfiguring projects and doing final install"
587        reconfigure=true
588        build $prefix
589    fi
590}
591
592function uninstall {
593    if [ $monolithic = "false" ]; then
594        if [ ! -e ".subdirs" ]; then
595            echo "No .subdirs file. Please fetch first"
596        fi
597        subdirs=(`cat .subdirs`)
598        # We have to uninstall in reverse order
599        for ((dir=${#subdirs[@]}-1; i>=0; i--))
600        do
601            if [ build_dir != $PWD ]; then
602                proj_dir=`echo $dir | cut -d '/' -f 1`
603                if [ $proj_dir = "Data" ] || [ $proj_dir = "ThirdParty" ]; then
604                    proj_dir=$dir
605                fi
606                cd $build_dir/$proj_dir
607            else
608                cd $dir
609            fi
610            print_action "Uninstalling $proj_dir"
611            invoke_make $verbosity uninstall
612            cd $root_dir
613        done
614        if [ -e $main_proj ]; then
615            if [ build_dir != $PWD ]; then
616                mkdir -p $build_dir/$main_proj
617                cd $build_dir/$main_proj
618            else
619                cd $main_proj
620            fi
621        fi
622        print_action "Uninstalling $main_proj"
623        invoke_make $verbosity uninstall
624        cd $root_dir
625    else
626        if [ build_dir != $PWD ]; then
627            cd $build_dir
628        fi
629        print_action "Uninstalling"
630        invoke_make $verbosity uninstall
631        cd $root_dir
632    fi
633}
634   
635# Exit when command fails
636set -e
637#Attempt to use undefined variable outputs error message, and forces an exit
638set -u
639#Causes a pipeline to return the exit status of the last command in the pipe
640#that returned a non-zero return value.
641set -o pipefail
642
643# Set defaults
644root_dir=$PWD
645declare -i num_actions
646num_actions=0
647sparse=false
648prefix=
649coin_skip_projects=
650svn=true
651fetch=false
652build=false
653install=false
654uninstall=false
655run_test=false
656run_all_tests=false
657declare -A configure_options
658configure_options=()
659monolithic=false
660jobs=1
661build_dir=$PWD/build
662reconfigure=false
663get_third_party=true
664verbosity=4
665MAKE=make
666
667echo "Welcome to the COIN-OR fetch and build utility"
668echo
669echo "For help, run script without arguments."
670echo
671
672if [ -e configure.ac ]; then
673    main_proj=`fgrep AC_INIT configure.ac | cut -d '[' -f 2 | cut -d ']' -f 1`
674elif git remote > /dev/null; then
675    main_proj=`git remote show origin | fgrep "Fetch URL" | xargs | cut -d " " -f 3 | cut -d "/" -f 5 | cut -d "." -f 1`
676elif svn info; then
677    main_proj=`svn info | fgrep "URL: https" | cut -d " " -f 2 | cut -d "/" -f 5`
678else
679    echo "Unable to figure out what project this is."
680    echo "Please run script in root directory of checkout."
681    exit 2
682fi
683
684print_action "Main project is $main_proj"
685
686parse_args "$@"
687
688if [ x"$prefix" != x ] && [ install = "false" ]; then
689    echo "Prefix should only be specified at install"
690    exit 3
691fi
692if [ x"$prefix" = x ]; then
693    prefix=$build_dir
694fi
695
696if [ -e $build_dir/.config ] && [ $build = "true" ] && \
697       [ $reconfigure = false ]; then
698    echo "Previous configuration options found."
699    if [ x"${#configure_options[*]}" != x0 ]; then
700        echo
701        echo "You are trying to run the build again and have specified"
702        echo "configuration options on the command line."
703        echo
704        echo "Please choose one of the following options."
705        echo " The indicated action will be performed for you AUTOMATICALLY"
706        echo "1. Run the build again with the previously specified options."
707        echo "   This can also be accomplished invoking the build"
708        echo "   command without any arguments."
709        echo "2. Configure in a new build directory (whose name you will be"
710        echo "   prmpted to specify) with new options."
711        echo "3. Re-configure in the same build directory with the new"
712        echo "   options. This option is not recommended unless you know"
713        echo "   what you're doing!."
714        echo "4. Quit"
715        echo
716        got_choice=false
717        while [ $got_choice = "false" ]; do
718            echo "Please type 1, 2, 3, or 4"
719            read choice
720            case $choice in
721                1|2|3|4) got_choice=true;;
722                *) ;;
723            esac
724        done
725        case $choice in
726            1)  ;;
727            2)
728                echo "Please enter a new build directory:"
729                read dir
730                if [ "x$dir" != x ]; then
731                    case $dir in
732                        [\\/$]* | ?:[\\/]* | NONE | '' )
733                            build_dir=$dir
734                            ;;
735                        *)
736                            build_dir=$PWD/$dir
737                            ;;
738                    esac
739                fi
740                ;;
741            3)
742                rm $build_dir/.config
743                reconfigure=true
744                ;;
745            4)
746                exit 0
747        esac
748    fi
749
750fi
751
752if [ x"${#configure_options[*]}" != x0 ] && [ $build = "false" ]; then
753    echo "Configuration options should be specified only with build command"
754    exit 3
755fi
756
757if [ $build = "true" ]; then
758    if [ ! -e $build_dir/.config ] ; then
759        echo "Caching configuration options..."
760        mkdir -p $build_dir
761        printf "%s\n" "${!configure_options[@]}" > $build_dir/.config
762        if [ $monolithic = "true" ]; then
763            touch $build_dir/.monolithic
764        fi
765    else
766        get_cached_options
767    fi
768    echo "Options to be passed to configure: ${!configure_options[@]}"
769fi
770
771# Help
772if [ $num_actions == 0 ]; then
773    help
774fi
775
776# Get sources
777if [ $fetch = "true" ]; then
778    fetch
779fi
780
781# Build (and possibly test) the code
782if [ $build = "true" ]; then
783    build $build_dir
784fi
785
786# Install code
787if [ $install = "true" ]; then
788    install
789fi
790
791# Uninstall code
792if [ $uninstall = "true" ]; then
793    uninstall
794fi
Note: See TracBrowser for help on using the repository browser.