bootstrap 4.48 KB
Newer Older
1
#! /bin/sh
2
3
4
5
6
7
8

fatal ()
{
  echo >&2 "$0: $@"
  exit 1
}

Guillaume Lazzara's avatar
Guillaume Lazzara committed
9
10
11
12
13
stderr ()
{
    echo >&2 "$0: $@"
}

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
awk_strverscmp='
  # Use only awk features that work with 7th edition Unix awk (1978).
  # My, what an old awk you have, Mr. Solaris!
  END {
    while (length(v1) || length(v2)) {
      # Set d1 to be the next thing to compare from v1, and likewise for d2.
      # Normally this is a single character, but if v1 and v2 contain digits,
      # compare them as integers and fractions as strverscmp does.
      if (v1 ~ /^[0-9]/ && v2 ~ /^[0-9]/) {
	# Split v1 and v2 into their leading digit string components d1 and d2,
	# and advance v1 and v2 past the leading digit strings.
	for (len1 = 1; substr(v1, len1 + 1) ~ /^[0-9]/; len1++) continue
	for (len2 = 1; substr(v2, len2 + 1) ~ /^[0-9]/; len2++) continue
	d1 = substr(v1, 1, len1); v1 = substr(v1, len1 + 1)
	d2 = substr(v2, 1, len2); v2 = substr(v2, len2 + 1)
	if (d1 ~ /^0/) {
	  if (d2 ~ /^0/) {
	    # Compare two fractions.
	    while (d1 ~ /^0/ && d2 ~ /^0/) {
	      d1 = substr(d1, 2); len1--
	      d2 = substr(d2, 2); len2--
	    }
	    if (len1 != len2 && ! (len1 && len2 && substr(d1, 1, 1) == substr(d2, 1, 1))) {
	      # The two components differ in length, and the common prefix
	      # contains only leading zeros.  Consider the longer to be less.
	      d1 = -len1
	      d2 = -len2
	    } else {
	      # Otherwise, compare as strings.
	      d1 = "x" d1
	      d2 = "x" d2
	    }
	  } else {
	    # A fraction is less than an integer.
	    exit 1
	  }
	} else {
	  if (d2 ~ /^0/) {
	    # An integer is greater than a fraction.
	    exit 2
	  } else {
	    # Compare two integers.
	    d1 += 0
	    d2 += 0
	  }
	}
      } else {
	# The normal case, without worrying about digits.
	if (v1 == "") d1 = v1; else { d1 = substr(v1, 1, 1); v1 = substr(v1,2) }
	if (v2 == "") d2 = v2; else { d2 = substr(v2, 1, 1); v2 = substr(v2,2) }
      }
      if (d1 < d2) exit 1
      if (d1 > d2) exit 2
    }
  }
'

version_compare ()
{
  awk "$awk_strverscmp" v1="$1" v2="$2" /dev/null
  case $? in
    1)  echo '<';;
    0)  echo '=';;
    2)  echo '>';;
  esac
}

81
82
# require TOOL REQUIREMENT [OPTION]
# ---------------------------------
83
# Test that TOOL exists, and its version is at least REQUIREMENT.
84
# If given, use OPTION to query TOOL; use `--version' otherwise.
85
86
require ()
{
87
88
89
  local option
  if test $# -eq 3; then option=$3; else option=--version; fi
  local version=$($1 $option | sed -n 's/[^0-9.]*\([0-9][0-9.]*\).*/\1/p;q')
90
  test x"$version" != x ||
91
    fatal "$1 (version $2 or better) is required"
92
  case $(version_compare "$2" "$version") in
93
    '>') fatal "$1 $2 or better is required: this is $1 $version";;
94
95
96
  esac
}

Guillaume Lazzara's avatar
Guillaume Lazzara committed
97
98
99
100
101
# run DIRECTORY COMMAND-LINE
# --------------------------
run ()
{
    (
102
        set -e
Guillaume Lazzara's avatar
Guillaume Lazzara committed
103
104
105
106
107
108
109
110
111
112
113
        stderr "$@"
        cd "$1"
        shift
        if ! "$@"; then
            fatal "unexpected failure: $@"
            exit 1
        fi
    )
}


114
115
116
117
# Failures do matter.
set -e

# Requirements over bootstrap tools.
118
119
120
121
122
123
124
125
126
127
128
129
require autoconf 2.61
require automake 1.10
libtoolize=libtoolize
for l in "$LIBTOOLIZE" glibtoolize libtoolize;
do
  if ($l --version) >/dev/null 2>&1; then
    libtoolize=$l
    break
  fi
done
export LIBTOOLIZE=$libtoolize
require $libtoolize 1.5.22
130

131
require doxygen 1.5.6
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
require convert 6.3.7

# Check for TeX4ht.  htlatex and friends do not have options like
# `--version', `-version', `-v', etc.  Hence this ad hoc procedure.
tempdir=`mktemp -d`
cleanup() { rm -rf "$tempdir"; exit; }
trap cleanup 0 1 2 3 6 15
(
  cd "$tempdir"
  cat >test.tex <<EOF
  \documentclass{article}
  \begin{document}
  Test
  \end{document}
EOF
  htlatex >/dev/null 2>&1 test.tex || fatal "TeX4ht is required"
)
rm -rf "$tempdir"
# dvipnh is required by TeX4ht.
require dvipng 1.11
152

Roland Levillain's avatar
Roland Levillain committed
153
154
# Tell what's going on.
set -x
Guillaume Lazzara's avatar
Guillaume Lazzara committed
155

156
# Generate milena/headers.mk
157
run milena `pwd`/build-aux/generate_dist_headers.sh mln ./headers.mk ./nodist-headers
158

159
# Generate scribo/headers.mk
160
run scribo `pwd`/build-aux/generate_dist_headers.sh . headers.mk nodist-headers scribo scribo
161

162
163
# Generate lists of files to be part of the distribution
# for the tutorial.
164
165
166
run milena/doc/ ./generate_dist_files.sh figures 'p*m'
run milena/doc/ ./generate_dist_files.sh outputs txt
run milena/doc/ ./generate_dist_files.sh examples cc.raw
167

Roland Levillain's avatar
Roland Levillain committed
168
# Generate unit test files.
169
run . ./build-aux/build_unit_test.sh `pwd`/milena/mln milena/tests/unit_test milena/tests/unit_test/disabled_tests
Roland Levillain's avatar
Roland Levillain committed
170

171
# Generate unit test files for Scribo.
172
run scribo/tests/unit_test ./build_unit_test.sh `pwd`/scribo .
173

174
175
# Install the GNU Build System.
autoreconf -f -v -i