source: branches/autotools-update/Clp/get.dependencies.sh @ 2343

Last change on this file since 2343 was 2343, checked in by stefan, 6 months ago

add get.dependencies.sh

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