summaryrefslogtreecommitdiff
path: root/verify.sh
blob: c5c289661d5b072a423e3dd7e60a02d080e9b82b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#!/bin/bash

MY_CPPFLAGS="-I/usr/local/include -I/usr/local/include/boost -I/sw/include"
MY_LDFLAGS="-L/usr/local/lib -L/sw/lib"

# Setup the temporary directory where all these copies are ledger are
# going to be built.  Remove it if it's already there.

if [ -n "$1" -a -d "$1" ]; then
    TMPDIR="$1"
elif [ -d $HOME/tmp ]; then
    TMPDIR=$HOME/tmp
else
    TMPDIR=/tmp
fi

if [ -d $TMPDIR/ledger ]; then
    rm -fr $TMPDIR/ledger || exit 1
fi

cd $TMPDIR || exit 1
mkdir ledger || exit 1
cd ledger || exit 1

# Determine if we can use git to pull down Ledger, since it's very
# fast and efficient (and the trunk of ledger-git is more bleeding
# edge).  Otherwise, fall back on the public sebversion repository.

USING_GIT=true

cmd=$(which git 2>&1)
if [ ! -x "$cmd" ]; then
    USING_GIT=false
    LEDGER_SVN=https://ledger.svn.sourceforge.net/svnroot/ledger
elif [ -d $HOME/src/ledger/.git ]; then
    LEDGER_GIT=$HOME/src/ledger
else
    LEDGER_GIT=http://newartisans.com/ledger.git
fi

# Create a reference copy of the sources in a pristine working tree
# that will not be modified.  Copies are made from this copy to avoid
# having to go to the network each time.  The function
# `dup_working_tree' creates a copy for us, either cheaply using git,
# or via an ordinary copy if we're using subversion.

if [ "$USING_GIT" = "true" ]; then
    git clone -l $LEDGER_GIT local_git || exit 1
else
    svn checkout $LEDGER_SVN/trunk local_svn
fi

function dup_working_tree() {
    if [ "$USING_GIT" = "true" ]; then
	git clone -l local_git "$1" || exit 1
    else
	cp -Rp local_svn "$1" || exit 1
    fi
}

# These functions understand how to do a distcheck build for ledger
# either completely from scratch, or using the configure script that
# is maintained in the repository.

function build_distcheck_from_scratch() {
    cd $TMPDIR/ledger || exit 1
    dup_working_tree distcheck_scratch || exit 1
    cd distcheck_scratch || exit 1
    ./acprep --local || exit 1
    make CPPFLAGS="$MY_CPPFLAGS" LDFLAGS="$MY_LDFLAGS" distcheck || exit 1
}

function build_distcheck_from_distrib() {
    cd $TMPDIR/ledger || exit 1
    dup_working_tree distcheck_distrib || exit 1
    cd distcheck_distrib || exit 1
    ./configure CPPFLAGS="$MY_CPPFLAGS" LDFLAGS="$MY_LDFLAGS" || exit 1
    make CPPFLAGS="$MY_CPPFLAGS" LDFLAGS="$MY_LDFLAGS" distcheck || exit 1
}

# Finally, we have the ordinary `build_ledger' function, which builds
# ledger from scratch using whichever acprep arguments have been
# passed in.

function build_ledger() {
    name=$1
    shift 1

    cd $TMPDIR/ledger || exit 1
    dup_working_tree $name || exit 1
    cd $name || exit 1

    ./acprep --local "$@" || exit 1

    (cd gdtoa && make) || exit 1
    make || exit 1

    if [ "$1" = "--opt" ]; then
	make check || exit 1
    else
	make fullcheck || exit 1
    fi
}

# With all of that defined, now build ledger in all its various
# flavors, do a "fullcheck" for each non-optimized one (which uses
# valgrind on Linux, and gmalloc on OS/X), and a "check" for each
# optimized one.  Note that this will take a long while!

build_distcheck_from_scratch || exit 1
build_distcheck_from_distrib || exit 1

build_ledger normal || exit 1
build_ledger python --python || exit 1

build_ledger debug --debug || exit 1
build_ledger debug_python --debug --python || exit 1
#build_ledger boost_debug --debug --boost d || exit 1

build_ledger optimized --opt || exit 1
build_ledger opt_python --opt --python || exit 1

exit 0