source: trunk/build.sh @ 3071

Last change on this file since 3071 was 3070, checked in by bradbell, 6 years ago

revert back to explicit for ctor from any type as default

  • Property svn:executable set to *
  • Property svn:keywords set to Id
File size: 14.5 KB
Line 
1#! /bin/bash -e
2# $Id: build.sh 3070 2013-12-31 15:09:11Z bradbell $
3# -----------------------------------------------------------------------------
4# CppAD: C++ Algorithmic Differentiation: Copyright (C) 2003-13 Bradley M. Bell
5#
6# CppAD is distributed under multiple licenses. This distribution is under
7# the terms of the
8#                     Eclipse Public License Version 1.0.
9#
10# A copy of this license is included in the COPYING file of this distribution.
11# Please visit http://www.coin-or.org/CppAD/ for information on other licenses.
12# -----------------------------------------------------------------------------
13# prefix directories for the corresponding packages
14ADOLC_DIR=$HOME/prefix/adolc
15BOOST_DIR=/usr
16CPPAD_DIR=$HOME/prefix/cppad 
17EIGEN_DIR=$HOME/prefix/eigen
18FADBAD_DIR=$HOME/prefix/fadbad
19IPOPT_DIR=$HOME/prefix/ipopt
20SACADO_DIR=$HOME/prefix/sacado
21# version type is one of "trunk" or "stable"
22version_type="trunk"
23# -----------------------------------------------------------------------------
24if [ $0 != "./build.sh" ]
25then
26        echo "./build.sh: must be executed in the directory that contians it"
27        exit 1
28fi
29if [ "$2" != "" ]
30then
31        # when running multiple options, start by removing old log files
32        touch junk.log
33        list=`ls *.log`
34        for log in $list
35        do
36                echo "rm $log"
37                rm $log
38        done
39        #
40        # run multiple options in order
41     for option in $*
42     do
43                echo "=============================================================="
44                echo "begin: ./build.sh $option"
45          ./build.sh $option
46     done
47        echo "=============================================================="
48     exit 0
49fi
50# -----------------------------------------------------------------------------
51if [ ! -e build ]
52then
53        echo "mkdir build"
54        mkdir build
55fi
56# -----------------------------------------------------------------------------
57# Today's date in yyyy-mm-dd decimal digit format where
58# yy is year in century, mm is month in year, dd is day in month.
59yyyy_mm_dd=`date +%F`
60#
61# Version of cppad that corresponds to today.
62if [ "$version_type" == "trunk" ]
63then
64        version=`bin/version.sh get`
65else
66        version=`grep '^ *AC_INIT(' configure.ac |
67                sed -e 's/[^,]*, *\([^ ,]*\).*/\1/'`
68        yyyy_mm_dd=`echo $version |
69                sed -e 's|\..*||' -e 's|\(....\)\(..\)|\1-\2-|'`
70fi
71#
72# Files are created by the configure command and copied to the source tree
73configure_file_list="
74        cppad/configure.hpp
75        example/test_one.sh
76        test_more/test_one.sh
77"
78# -----------------------------------------------------------------------------
79# change version to current date
80if [ "$1" = "version" ]
81then
82        echo 'bin/version.sh copy'
83        bin/version.sh copy
84        #
85        echo "OK: ./build.sh version"
86        exit 0
87fi
88# -----------------------------------------------------------------------------
89if [ "$1" = "automake" ] 
90then
91        #
92        # check that autoconf and automake output are in original version
93        makefile_in=`sed configure.ac \
94                -n \
95                -e '/END AC_CONFIG_FILES/,$d' \
96                -e '1,/AC_CONFIG_FILES/d' \
97                -e 's|/makefile$|&.in|' \
98                -e '/\/makefile.in/p'`
99        auto_output="
100                depcomp
101                install-sh
102                missing
103                configure
104                config.guess
105                config.sub
106                $makefile_in
107        "
108        missing=""
109        for name in $auto_output
110        do
111                if [ ! -e $name ]
112                then
113                        if [ "$missing" != "" ]
114                        then
115                                missing="$missing, $name"
116                        else
117                                missing="$name"
118                        fi
119                else
120                        # force remake of files
121                        rm "$name"
122                fi
123        done
124        if [ "$missing" != "" ]
125        then
126                echo "The following files:"
127                echo "  $missing"
128                echo "are not in subversion repository."
129                echo "Check them in when this command is done completes."
130        fi
131        #
132        echo "aclocal"
133        aclocal
134        #
135        echo "skipping libtoolize"
136        # echo "libtoolize -c -f -i"
137        # if ! libtoolize -c -f -i
138        # then
139        #       exit 1
140        # fi
141        #
142        echo "autoconf"
143        autoconf
144        #
145        echo "automake --add-missing"
146        automake --add-missing
147        #
148        link_list="missing install-sh depcomp config.sub config.guess"
149        for name in $link_list
150        do
151                if [ -h "$name" ]
152                then
153                        echo "Converting $name from a link to a regular file"
154                        #
155                        echo "cp $name $name.$$"
156                        cp $name $name.$$
157                        #
158                        echo "mv $name.$$ $name"
159                        mv $name.$$ $name
160                fi
161        done
162        #
163        echo "OK: ./build.sh automake"
164        exit 0
165fi
166# -----------------------------------------------------------------------------
167# configure
168if [ "$1" == "configure" ]
169then
170        log_dir=`pwd`
171        log_file="$1.log"
172        #
173        echo "cd build"
174        cd build
175        #
176        dir_list="
177                --prefix=$CPPAD_DIR
178        "
179        if [ -e $ADOLC_DIR/include/adolc ]
180        then
181                dir_list="$dir_list
182                        ADOLC_DIR=$ADOLC_DIR"
183        fi
184        if [ -e $BOOST_DIR/include/boost ]
185        then
186                dir_list="$dir_list BOOST_DIR=$BOOST_DIR"
187#_build_test_only:      if [ ! -e $EIGEN_DIR/include/Eigen ]
188#_build_test_only:      then
189#_build_test_only:              dir_list="$dir_list --with-boostvector"
190#_build_test_only:      fi
191        fi
192        if [ -e $EIGEN_DIR/include/Eigen ]
193        then
194                dir_list="$dir_list
195                        EIGEN_DIR=$EIGEN_DIR"
196#_build_test_only:      dir_list="$dir_list --with-eigenvector"
197        fi
198        if [ -e $FADBAD_DIR/include/FADBAD++ ]
199        then
200                dir_list="$dir_list
201                        FADBAD_DIR=$FADBAD_DIR"
202        fi
203        if [ -e $IPOPT_DIR/include/coin/IpIpoptApplication.hpp ]
204        then
205                dir_list="$dir_list
206                IPOPT_DIR=$IPOPT_DIR"
207        fi
208        if [ -e $SACADO_DIR/include/Sacado.hpp ]
209        then
210                dir_list="$dir_list
211                        SACADO_DIR=$SACADO_DIR"
212        fi
213        # Use =int (a signed type) to do more checking for
214        # slicing from size_t to addr_t.
215        special_types=""
216#_build_test_only:      special_types="TAPE_ADDR_TYPE=int TAPE_ID_TYPE=int"
217        #
218        dir_list=`echo $dir_list | sed -e 's|\t\t*| |g'`
219        cxx_flags="-Wall -ansi -pedantic-errors -std=c++98 -Wshadow"
220#_build_test_only:      if [ -e $EIGEN_DIR/include/Eigen ]
221#_build_test_only:      then
222#_build_test_only:      cxx_flags="-Wall -ansi -pedantic-errors -std=c++98 -Wno-long-long"
223#_build_test_only:      fi
224cat << EOF
225../configure > $log_file \\
226$dir_list \\
227CXX_FLAGS=\"$cxx_flags\" \\
228$special_types OPENMP_FLAGS=-fopenmp \\
229--with-sparse_list --with-Documentation \\
230--with-implicit_ctor
231EOF
232        #
233        ../configure > $log_dir/$log_file \
234                $dir_list \
235                CXX_FLAGS="$cxx_flags" \
236                $special_types OPENMP_FLAGS=-fopenmp \
237                --with-sparse_list --with-Documentation \
238                --with-implicit_ctor
239        #
240        for file in $configure_file_list
241        do
242                echo "cp $file ../$file"
243                cp $file ../$file
244        done
245        #
246        echo "OK: ./build.sh configure"
247        exit 0
248fi
249# -----------------------------------------------------------------------------
250if [ "$1" = "dist" ] 
251then
252        # ----------------------------------------------------------------------
253        # Things to do in the original source directory
254        # ----------------------------------------------------------------------
255        echo "Only include the *.xml version of the documentation in distribution"
256        if ! grep < doc.omh > /dev/null \
257                'This comment is used to remove the table below' 
258        then
259                echo "Missing comment expected in doc.omh"
260                exit 1
261        fi
262        echo "sed -i.save doc.omh ..."
263        sed -i.save doc.omh \
264                -e '/This comment is used to remove the table below/,/$tend/d'
265        #
266        if [ -e doc ]
267        then
268                echo "rm -r doc"
269                      rm -r doc
270        fi
271        #
272        echo "bin/run_omhelp.sh xml"
273        if ! bin/run_omhelp.sh xml
274        then
275                echo "mv doc.omh.save doc.omh"
276                mv doc.omh.save doc.omh
277                exit 1
278        fi
279        #
280        echo "mv doc.omh.save doc.omh"
281              mv doc.omh.save doc.omh
282        #
283        # Run automated checking of file names in original source directory
284        list="
285                check_example.sh
286                check_if_0.sh
287                check_include_def.sh
288                check_include_file.sh
289                check_include_omh.sh
290                check_makefile.sh
291                check_op_code.sh
292                check_replace.sh
293                check_svn_id.sh
294                check_verbatim.sh
295        "
296        for check in $list 
297        do
298                echo "bin/$check"
299                      bin/$check
300        done
301        # ----------------------------------------------------------------------
302        # Things to do in the build directory
303        # ----------------------------------------------------------------------
304        echo "cd build"
305              cd build
306        #
307        if [ -e cppad-$version ]
308        then
309                echo "rm -rf cppad-$version"
310                      rm -rf cppad-$version
311        fi
312        for file in cppad-*.tgz
313        do
314                if [ -e $file ]
315                then
316                        echo "rm $file"
317                        rm $file
318                fi
319        done
320        #
321        echo "make dist"
322              make dist
323        #
324        if [ ! -e cppad-$version.tar.gz ]
325        then
326                echo "cppad-$version.tar.gz does not exist"
327                echo "perhaps version is out of date"
328                #
329                exit 1
330        fi
331        # change *.tgz to *.epl.tgz
332        echo "mv cppad-$version.tar.gz cppad-$version.epl.tgz"
333              mv cppad-$version.tar.gz cppad-$version.epl.tgz
334        #
335        echo "OK: ./build.sh dist"
336        exit 0
337fi
338# -----------------------------------------------------------------------------
339# omhelp comes after dist because dist only includes one help output
340if [ "$1" = "omhelp" ] 
341then
342        if ! grep < doc.omh > /dev/null \
343                'This comment is used to remove the table below'
344        then
345                echo "doc.omh is missing a table."
346                echo "Try re-running build.sh configure."
347        fi
348        for flag in "printable" ""
349        do
350                # Run xml after htm so that index.htm points to cppad.xml
351                # (see run_omhelp.sh).
352                for ext in htm xml
353                do
354                        echo "bin/run_omhelp.sh $ext $flag"
355                              bin/run_omhelp.sh $ext $flag
356                done
357        done
358        #
359        echo "OK: ./build.sh omhelp"
360        exit 0
361fi
362# -----------------------------------------------------------------------------
363if [ "$1" = "doxygen" ]
364then
365        echo "bin/run_doxygen.sh"
366        bin/run_doxygen.sh
367        #
368        echo "OK: ./build.sh doxygen"
369        exit 0
370fi
371# -----------------------------------------------------------------------------
372if [ "$1" = "gpl" ] 
373then
374        # create GPL licensed version
375        echo "bin/gpl_license.sh cppad-$version build build"
376        bin/gpl_license.sh cppad-$version build build
377        #
378        echo "OK: ./build.sh gpl"
379        exit 0
380fi
381# -----------------------------------------------------------------------------
382if [ "$1" = "copy2doc" ] 
383then
384        for ext in epl gpl
385        do
386                echo "cp build/cppad-$version.$ext.tgz doc/cppad-$version.$ext.tgz"
387                cp build/cppad-$version.$ext.tgz doc/cppad-$version.$ext.tgz
388        done
389        #
390        echo "cp -r doxydoc doc/doxydoc"
391        cp -r doxydoc doc/doxydoc
392        #
393        echo "cp *.log doc"
394        cp *.log doc
395        #
396        echo "OK: ./build.sh copy2doc"
397        exit 0
398fi
399# -----------------------------------------------------------------------------
400if [ "$1" == "all" ]
401then
402        list="
403                version
404                automake
405                configure
406                dist
407                omhelp
408                doxygen
409                gpl
410                copy2doc
411        "
412        if [ "$version_type" != "trunk" ]
413        then
414                # only use the help built during the build.sh dist command
415                list=`echo $list | sed -e 's|omhelp||'`
416        fi
417        echo "./build.sh $list"
418        ./build.sh $list
419        echo "OK: ./build.sh all"
420        exit 0
421fi
422# -----------------------------------------------------------------------------
423if [ "$1" = "test" ] 
424then
425        log_dir=`pwd`
426        log_file="build_test.log"
427        # --------------------------------------------------------------
428        # Things to do in the distribution directory
429        # --------------------------------------------------------------
430        #
431        # start log for this test
432        echo "date > $log_file"
433              date > $log_dir/$log_file
434        # ----------------------------------------------------------------------
435        # Things to do in the build directory
436        # ----------------------------------------------------------------------
437        echo "cd build"
438        echo "cd build" >> $log_dir/$log_file
439              cd build
440        #
441        # erase old distribution directory
442        if [ -e cppad-$version ]
443        then
444                echo "rm -rf cppad-$version"
445                echo "rm -rf cppad-$version" >> $log_dir/$log_file
446                      rm -rf cppad-$version
447        fi
448        #
449        # create distribution directory
450        echo "tar -xzf cppad-$version.epl.tgz"
451        echo "tar -xzf cppad-$version.epl.tgz" >> $log_dir/$log_file
452              tar -xzf cppad-$version.epl.tgz
453        #
454        # ----------------------------------------------------------------------
455        # Things to do in the build/disribution directory
456        # ----------------------------------------------------------------------
457        echo "cd cppad-$version"
458        echo "cd cppad-$version" >> $log_dir/$log_file
459              cd cppad-$version
460        #
461        # build_test_only configuration
462        echo "sed -i -e 's|^#_build_test_only:||' build.sh"
463        sed -i -e 's|^#_build_test_only:||' build.sh
464        #
465        echo "./build.sh configure >> $log_file" 
466              ./build.sh configure >> $log_dir/$log_file
467        #
468        # test user documentation
469        echo "bin/run_omhelp.sh xml  >> $log_file"
470              bin/run_omhelp.sh xml  >> $log_dir/$log_file
471        #
472        # test developer documentation
473        echo "./build.sh doxygen   >> $log_file"
474              ./build.sh doxygen   >> $log_dir/$log_file
475        #
476        # ----------------------------------------------------------------------
477        # Things to do in the build/disribution/build directory
478        # ----------------------------------------------------------------------
479        echo "cd build"
480        echo "cd build" >> $log_dir/$log_file
481              cd build
482        #
483        dir=`pwd` 
484        echo "To see progress in the 'make test' log file use"
485        echo "  ../temp.sh ( OK | All | tail | follow | file )"
486        cat << EOF > $log_dir/../temp.sh
487#! /bin/bash -e
488case "\$1" in
489
490        OK)
491        grep OK $dir/make_test.log
492        exit 0
493        ;;
494
495        All)
496        grep All $dir/make_test.log
497        exit 0
498        ;;
499
500        tail)
501        tail $dir/make_test.log
502        exit 0
503        ;;
504
505        follow)
506        tail -f $dir/make_test.log
507        exit 0
508        ;;
509
510        file)
511        echo "$dir/make_test.log"
512        exit 0
513        ;;
514
515        *)
516        echo "usage: ../temp.sh option"
517        echo "where option is one of following: OK, All, tail, follow, file."
518        exit 1
519esac
520EOF
521        chmod +x $log_dir/../temp.sh
522        #
523        # build and run all the tests
524        echo "make test                >& make_test.log"
525              make test                >& make_test.log
526        #
527        echo "rm ../temp.sh"
528        rm $log_dir/../temp.sh
529        #
530        echo "cat make_test.log        >> $log_file"
531              cat make_test.log        >> $log_dir/$log_file
532        #
533        # ignore warning in eigen (that has been reported)
534        if grep ': *warning:' make_test.log
535        then
536                echo "There are warnings in $dir/make_test.log"
537                exit 1
538        fi
539        # --------------------------------------------------------------------
540        echo "cd ../../.."
541        cd ../../..
542        # end the build_test.log file with the date and time
543        echo "date >> $log_file"
544              date >> $log_dir/$log_file
545        #
546        echo "No errors or warnings found; see build_test.log."
547        #
548        echo "OK: ./build.sh test"
549        exit 0
550fi
551# -----------------------------------------------------------------------------
552# report build.sh usage error
553if [ "$1" != "" ]
554then
555     echo "$1 is not a valid option"
556fi
557#
558if [ "$version_type" == "trunk" ]
559then
560        all_cases="run all the options above in order"
561else
562        all_cases="run all the options above in order with exception of omhelp"
563fi
564cat << EOF
565usage: ./build.sh option_1 option_2 ...
566
567options                                                             requires
568-------                                                             --------
569version:  set version in AUTHORS, configure.ac, configure, ...
570omhelp:   build all formats of user documentation in doc/*.
571automake: run the tools required by autoconf and automake.
572configure:run the configure script in the build directory.          automake
573dist:     create the distribution file build/cppad-version.epl.tgz. configure
574doxygen:  build developer documentation in doxydoc/*.               configure
575gpl:      create build/*.gpl.zip and build/*.epl.zip.               dist
576copy2doc: copy logs, tarballs & doxygen output into doc directory.  dist,doxygen
577
578all:      $all_cases
579test:     use tarball to make test and put result in build_test.log. dist
580EOF
581#
582exit 1
Note: See TracBrowser for help on using the repository browser.