bootstrap 6.84 KB
Newer Older
Benoit Perrot's avatar
Benoit Perrot committed
1
2
3
4
#!/bin/sh

# Bootstrap `Nolimips' from repository.

Roland Levillain's avatar
Roland Levillain committed
5
# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
Benoit Perrot's avatar
Benoit Perrot committed
6
7
8
9
10
11
12
13
14
15
16
17
18

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
Roland Levillain's avatar
Roland Levillain committed
19
20
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.
Benoit Perrot's avatar
Benoit Perrot committed
21
22
23
24

# The gnulib-related part comes from GNU tar's bootstrap, written by
# Paul Eggert and Sergey Poznyakoff:

Roland Levillain's avatar
Roland Levillain committed
25
26
27
28
# Ensure file names are sorted consistently across platforms;
# e.g., m4/ulonglong_gl.m4 should follow m4/ulonglong.m4.
LC_ALL=C
export LC_ALL
Benoit Perrot's avatar
Benoit Perrot committed
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

usage() {
  cat <<EOF
\`bootstrap' bootstraps Nolimips, getting or creating files needed by 
autotools.

Usage: $0 [--gnulib-srcdir=DIR][--cvs-auth=AUTH-METHOD]
        [--cvs-user=USERNAME]

Options are:
  --gnulib-srcdir=DIRNAME     Specify the local directory where gnulib
                              sources reside. Use this if you already
                              have gnulib sources on your machine, and
                              do not want to waste your bandwidth dowloading
                              them again.
  --cvs-auth=METHOD           Set the CVS access method used for downloading
                              gnulib files. METHOD is one of the keywords
                              accepted by cvs -d option (see info cvs
                              repository).
  --cvs-user=USERNAME         Set the CVS username to be used when accessing
                              the gnulib repository.
 
Roland Levillain's avatar
Roland Levillain committed
51
52
53
54
55
56
If the file \`.bootstrap' exists in the current working directory, its
contents is read, comments and empty lines removed, shell variables expanded
and the result is prepended to the command line options.

Running without arguments will suffice in most cases. It is equivalent
to
Benoit Perrot's avatar
Benoit Perrot committed
57

Roland Levillain's avatar
Roland Levillain committed
58
    ./bootstrap --cvs-auth=pserver
Benoit Perrot's avatar
Benoit Perrot committed
59
60
61
62

EOF
}

Roland Levillain's avatar
Roland Levillain committed
63
64
65
66
67
68
69
70
# Read configuration file
if [ -r .bootstrap ]; then
  echo "$0: Reading configuration file .bootstrap"
  eval set -- "`sed 's/#.*$//;/^$/d' .bootstrap | tr '\n' ' '` $*"
fi

# Parse options.

Benoit Perrot's avatar
Benoit Perrot committed
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
for option
  do
  case $option in
      --help)
	  usage
	  exit;;
      --gnulib-srcdir=*)
	  GNULIB_SRCDIR=`expr "$option" : '--gnulib-srcdir=\(.*\)'`;;
      --cvs-auth=*)
	  CVS_AUTH=`expr "$option" : '--cvs-auth=\(.*\)'`;;
      --cvs-user=*)
	  CVS_USER=`expr "$option" : '--cvs-user=\(.*\)'`;;
      *)
	  echo >&2 "$0: $option: unknown option"
	  exit 1;;
  esac
done
Roland Levillain's avatar
Roland Levillain committed
88

Benoit Perrot's avatar
Benoit Perrot committed
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
echo "$0: Bootstrapping Nolimips..."


# Get gnulib files from CVS if needed.

build_cvs_prefix() {
  CVS_PREFIX=:${1}:
  if [ "${2}" != - ]; then
    CVS_PREFIX=${CVS_PREFIX}${2}@
  fi
  if [ "$1" = "ext" ]; then
    if [ -z "${CVS_RSH}" ]; then
      CVS_RSH=ssh
      export CVS_RSH
    fi
  fi
}

cvs_checkout() {
  if [ ! -d $1 ]; then
    echo "$0: Getting $1 files..."

    trap exit 1 2 13 15
    trap 'rm -fr $1; exit 1' 0

Roland Levillain's avatar
Roland Levillain committed
114
115
116
117
118
119
120
121
122
123
    case "${CVS_AUTH-pserver}" in
    pserver) build_cvs_prefix pserver ${CVS_USER:-anonymous}
             ;;
    gserver|server)
	     build_cvs_prefix $CVS_AUTH ${CVS_USER--}
	     ;;
    ext)     build_cvs_prefix $CVS_AUTH ${CVS_USER--}
             ;;
    *)       echo "$0: Unknown CVS access method" >&2
	     exit 1;;
Benoit Perrot's avatar
Benoit Perrot committed
124
    esac
Roland Levillain's avatar
Roland Levillain committed
125
    cvs -q -d ${CVS_PREFIX}cvs.sv.gnu.org:/cvsroot/$1 co $1 || exit
Benoit Perrot's avatar
Benoit Perrot committed
126

Roland Levillain's avatar
Roland Levillain committed
127
    trap - 0
Benoit Perrot's avatar
Benoit Perrot committed
128
129
130
  fi
}

Roland Levillain's avatar
Roland Levillain committed
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
gnulib_modules=
newline='
'

get_modules() {
  new_gnulib_modules=`sed '/^[	 ]*#/d; /^[	 ]*$/d' $*`
  case $gnulib_modules,$new_gnulib_modules in
  ?*,?*) new_gnulib_modules=$newline$new_gnulib_modules;;
  esac
  gnulib_modules=$gnulib_modules$new_gnulib_modules
}


# Get gnulib files.

Benoit Perrot's avatar
Benoit Perrot committed
146
case ${GNULIB_SRCDIR--} in
Roland Levillain's avatar
Roland Levillain committed
147
148
-) cvs_checkout gnulib
  GNULIB_SRCDIR=gnulib
Benoit Perrot's avatar
Benoit Perrot committed
149
150
151
152
153
154
155
esac


# Select the files needed by the specified modules.

<$GNULIB_SRCDIR/gnulib-tool || exit

Roland Levillain's avatar
Roland Levillain committed
156
157
158
get_modules gnulib.modules

gnulib_modules=`echo "$gnulib_modules" | sort -u`
Benoit Perrot's avatar
Benoit Perrot committed
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
previous_gnulib_modules=
while [ "$gnulib_modules" != "$previous_gnulib_modules" ]; do
    previous_gnulib_modules=$gnulib_modules
    gnulib_modules=`
    (echo "$gnulib_modules"
     for gnulib_module in $gnulib_modules; do
       $GNULIB_SRCDIR/gnulib-tool --extract-dependencies $gnulib_module
     done) | sort -u
  `
done

gnulib_files=`
  (for gnulib_module in $gnulib_modules; do
     $GNULIB_SRCDIR/gnulib-tool --extract-filelist $gnulib_module
   done) | sort -u
`

gnulib_dirs=`echo "$gnulib_files" | sed 's,/[^/]*$,,' | sort -u`
mkdir -p $gnulib_dirs || exit

for gnulib_file in $gnulib_files; do
    dest=$gnulib_file

    case $gnulib_file in
	m4/codeset.m4) continue;;
	m4/intdiv0.m4) continue;;
	m4/inttypes-pri.m4) continue;;
	m4/isc-posix.m4) continue;;
	m4/lcmessage.m4) continue;;
	m4/onceonly_2_57.m4) dest=m4/onceonly.m4;;
  # These will be overwritten by autopoint, which still uses
  # old jm_.* macro names, so we have to keep both copies.
	m4/gettext.m4 | m4/glibc21.m4 | m4/inttypes_h.m4 | m4/lib-ld.m4 | \
	    m4/lib-prefix.m4 | m4/po.m4 | m4/stdint_h.m4 | m4/uintmax_t.m4 | \
	    m4/ulonglong.m4)
	    dest=`expr $gnulib_file : '\(.*\).m4'`_gl.m4;;
    esac

    rm -f $dest &&
    echo "$0: Copying file $GNULIB_SRCDIR/$gnulib_file" &&
    cp -p $GNULIB_SRCDIR/$gnulib_file $dest || exit
done

echo "$0: Creating m4/gnulib.m4"
(echo "# This file is generated automatically. Please, do not edit."
    echo "#"
    echo "AC_DEFUN([nolimips_GNULIB],["
    for gnulib_module in $gnulib_modules; do
	echo "# $gnulib_module"
	$GNULIB_SRCDIR/gnulib-tool --extract-autoconf-snippet $gnulib_module
    done | sed '/AM_GNU_GETTEXT/d'
    echo "])") > ./m4/gnulib.m4

echo "$0: Creating lib/Makefile.am"
Roland Levillain's avatar
Roland Levillain committed
213
214
(echo "# This file is generated automatically. Do not edit!"
 cat lib/Makefile.am.tmpl
Benoit Perrot's avatar
Benoit Perrot committed
215

Roland Levillain's avatar
Roland Levillain committed
216
217
218
219
 for gnulib_module in $gnulib_modules; do
    echo "# $gnulib_module"
    $GNULIB_SRCDIR/gnulib-tool --extract-automake-snippet $gnulib_module
 done | sed 's/lib_SOURCES/libtar_a_SOURCES/g' ) > lib/Makefile.am
Benoit Perrot's avatar
Benoit Perrot committed
220
221
222
223
224

# End of gnulib-related part.


# Generate Nolimips' nodes.mk
225
echo "$0: Generating src/inst/nodes.mk"
226
227
here=`pwd`
cd src/inst
228
PYTHONPATH="../../dev/:$$PYTHONPATH" ./nodes.mk.gen.py < ../../dev/nolimips.xml > nodes.mk
229
cd $here
Benoit Perrot's avatar
Benoit Perrot committed
230
231
232

find tests -name '*.ref' -exec touch '{}' ';'

Benoit Perrot's avatar
Benoit Perrot committed
233

234
235
236
237
238
239
240
241
242
243
244
245
246
# Help autoreconf find a valid libtoolize.

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


Benoit Perrot's avatar
Benoit Perrot committed
247
248
249
# Reconfigure, getting other files.

echo "$0: autoreconf --verbose --install --force ..."
Roland Levillain's avatar
Roland Levillain committed
250
251
252
253
autoreconf --verbose --install --force || exit 1


echo "$0: done.  Now you can run './configure'."