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

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

remove CYGPATH_W in Makefile -I flags; rerun autotools

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