aboutsummaryrefslogtreecommitdiff
path: root/bootstrap
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2008-03-11 23:22:54 +0000
committerSergey Poznyakoff <gray@gnu.org.ua>2008-03-11 23:22:54 +0000
commitc56ae1845ebbe64a9f73eb60f365a1f8f29a0100 (patch)
treef15c06cfb7b9f90b83e275120e8367467d02fb2e /bootstrap
parent3a2e207c3413ed61ed12ab9738146c5ce73f73d6 (diff)
downloadpies-c56ae1845ebbe64a9f73eb60f365a1f8f29a0100.tar.gz
pies-c56ae1845ebbe64a9f73eb60f365a1f8f29a0100.tar.bz2
Rewrite the bootstrap suite.
* README-alpha: Rewritten. * bootstrap.conf: Rewritten. * bootstrap: Slightly modified version from gnulib. * gnulib.modules, README-hacking: New files. * doc/mailfromd.texi: Minor fix.
Diffstat (limited to 'bootstrap')
-rwxr-xr-xbootstrap745
1 files changed, 529 insertions, 216 deletions
diff --git a/bootstrap b/bootstrap
index 51d94b2..0fa016d 100755
--- a/bootstrap
+++ b/bootstrap
@@ -1,96 +1,86 @@
1#! /bin/sh 1#! /bin/sh
2############################
3## Configuration
4############################
5
6GNULIB_DATE=2007-05-12
7GNU_SOURCE_BASE=gnu
8
9MODLIST="argp\
10 fprintftime\
11 getline\
12 gettext\
13 malloc\
14 memrchr\
15 mkdtemp\
16 obstack\
17 realloc\
18 regex\
19 save-cwd\
20 snprintf\
21 strtok_r\
22 vasprintf"
23
24MODAVOID="xalloc-die openat-die"
25 2
26# Other locale categories that need message catalogs. 3# Bootstrap this package from checked-out sources.
27EXTRA_LOCALE_CATEGORIES=
28 4
29NLS_MARKERS="\ 5# Copyright (C) 2003-2008 Free Software Foundation, Inc.
30 MF_THROW:2\
31 MF_ASSERT:3\
32 parse_error:1\
33 parse_error_locus:2\
34 mu_error:1\
35 gacopyz_io_log:3\
36 gacopyz_logmsg:2\
37 gacopyz_log:3"
38 6
39# Additional xgettext options to use. Use "\\\newline" to break lines. 7# This program is free software: you can redistribute it and/or modify
40XGETTEXT_OPTIONS='\\\ 8# it under the terms of the GNU General Public License as published by
41 --flag=_:1:pass-c-format\\\ 9# the Free Software Foundation, either version 3 of the License, or
42 --flag=N_:1:pass-c-format\\\ 10# (at your option) any later version.
43 --flag=error:3:c-format --flag=error_at_line:5:c-format\\\ 11
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU General Public License for more details.
16
17# You should have received a copy of the GNU General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19
20# Written by Paul Eggert.
21
22nl='
44' 23'
45 24
46COPYRIGHT_HOLDER="Sergey Poznyakoff" 25# Ensure file names are sorted consistently across platforms.
26LC_ALL=C
27export LC_ALL
47 28
48# Translation Project URL, for the registry of all projects 29local_gl_dir=gl
49# and for the translation-team master directory.
50# (for future use)
51tp_url() {
52 echo "http://translationproject.org/domain/$1.html"
53}
54 30
55############################ 31# Temporary directory names.
56## Implementation 32bt='._bootmp'
57############################ 33bt_regex=`echo "$bt"| sed 's/\./[.]/g'`
34bt2=${bt}2
58 35
59usage() { 36usage() {
60 echo >&2 "\ 37 echo >&2 "\
61Usage: $0 [OPTION]... GNULIB_DIR 38Usage: $0 [OPTION]...
62Bootstrap this package from the checked-out sources. 39Bootstrap this package from the checked-out sources.
63 40
41Options:
42 --gnulib-srcdir=DIRNAME Specify the local directory where gnulib
43 sources reside. Use this if you already
44 have gnulib sources on your machine, and
45 do not want to waste your bandwidth downloading
46 them again.
64 --copy Copy files instead of creating symbolic links. 47 --copy Copy files instead of creating symbolic links.
65 --force Attempt to bootstrap even if the sources seem 48 --force Attempt to bootstrap even if the sources seem
66 not to have been checked out. 49 not to have been checked out.
67 --skip-po Do not download po files. 50 --skip-po Do not download po files.
68 --update-po[=LANG] Update po file(s) and exit.
69
70The only argument specifes the file name of the directory were gnulib
71sources are located. You will have to check out them beforehand, \`bootstrap'
72won't do this for you.
73 51
74Local defaults can be provided by placing the file \`.bootstrap' in the 52If the file bootstrap.conf exists in the current working directory, its
75current working directory. The file is read, comments and empty lines are 53contents are read as shell variables to configure the bootstrap.
76removed, shell variables expanded and the result is prepended to the command
77line options.
78 54
79Running without arguments will suffice in most cases. 55Running without arguments will suffice in most cases.
80" 56"
81} 57}
82 58
83# Read local configuration file 59# Configuration.
84if [ -r .bootstrap ]; then 60
85 echo "$0: Reading configuration file .bootstrap" 61# Name of the Makefile.am
86 eval set -- "`sed 's/#.*$//;/^$/d' .bootstrap | tr '\n' ' '` $*" 62gnulib_mk=gnulib.mk
87fi 63
64# List of gnulib modules needed.
65gnulib_modules=
66
67# Any gnulib files needed that are not in modules.
68gnulib_files=
69
70# The command to download all .po files for a specified domain into
71# a specified directory. Fill in the first %s is the domain name, and
72# the second with the destination directory. Use rsync's -L and -r
73# options because the latest/%s directory and the .po files within are
74# all symlinks.
75po_download_command_format=\
76"rsync -Lrtvz 'translationproject.org::tp/latest/%s/' '%s'"
88 77
89extract_package_name=' 78extract_package_name='
90 /^AC_INIT(/{ 79 /^AC_INIT(/{
91 /.*,.*,.*,/{ 80 /.*,.*,.*, */{
92 s/// 81 s///
93 s/[][]//g 82 s/[][]//g
83 s/)$//
94 p 84 p
95 q 85 q
96 } 86 }
@@ -103,23 +93,70 @@ extract_package_name='
103 } 93 }
104' 94'
105package=`sed -n "$extract_package_name" configure.ac` || exit 95package=`sed -n "$extract_package_name" configure.ac` || exit
96gnulib_name=lib$package
97
98build_aux=build-aux
99source_base=lib
100m4_base=m4
101doc_base=doc
102tests_base=tests
103
104# Extra files from gnulib, which override files from other sources.
105gnulib_extra_files="
106 $build_aux/install-sh
107 $build_aux/missing
108 $build_aux/mdate-sh
109 $build_aux/texinfo.tex
110 $build_aux/depcomp
111 $build_aux/config.guess
112 $build_aux/config.sub
113 doc/INSTALL
114"
106 115
107extract_bug_address=' 116# Additional gnulib-tool options to use. Use "\newline" to break lines.
108 /^AC-INIT-BUG-ADDRESS/{ 117gnulib_tool_option_extras=
109 s/[][]//g 118
110 s/.*=//p 119# Other locale categories that need message catalogs.
111 } 120EXTRA_LOCALE_CATEGORIES=
121
122# Additional xgettext options to use. Use "\\\newline" to break lines.
123XGETTEXT_OPTIONS='\\\
124 --flag=_:1:pass-c-format\\\
125 --flag=N_:1:pass-c-format\\\
126 --flag=error:3:c-format --flag=error_at_line:5:c-format\\\
112' 127'
113bug_address=`m4 -D'AC_INIT=AC-INIT-BUG-ADDRESS=$3' configure.ac | sed -n "$extract_bug_address"` 128
114if test -z "$bug_address"; then 129# Package bug report address for gettext files
115 bug_address="bug-${package}@gnu.org.ua" 130MSGID_BUGS_ADDRESS=bug-$package@gnu.org
116fi 131
132# Files we don't want to import.
133excluded_files=
134
135# File that should exist in the top directory of a checked out hierarchy,
136# but not in a distribution tarball.
137checkout_only_file=README-hacking
117 138
118# Whether to use copies instead of symlinks. 139# Whether to use copies instead of symlinks.
119copy=false 140copy=false
120 141
121GNULIB_OPTION= 142# Set this to '.cvsignore .gitignore' in bootstrap.conf if you want
122DOWNLOAD_PO= 143# those files to be generated in directories like lib/, m4/, and po/.
144# Or set it to 'auto' to make this script select which to use based
145# on which version control system (if any) is used in the source directory.
146vc_ignore=auto
147
148# Override the default configuration, if necessary.
149test -r bootstrap.conf && . ./bootstrap.conf
150
151if test "$vc_ignore" = auto; then
152 vc_ignore=
153 test -d .git && vc_ignore=.gitignore
154 test -d CVS && vc_ignore="$vc_ignore .cvsignore"
155fi
156
157# Translate configuration into internal form.
158
159# Parse options.
123 160
124for option 161for option
125do 162do
@@ -127,186 +164,462 @@ do
127 --help) 164 --help)
128 usage 165 usage
129 exit;; 166 exit;;
130 --skip-po | --no-po) # --no-po is for compatibility with 'tar' tradition. 167 --gnulib-srcdir=*)
131 DOWNLOAD_PO=skip;; 168 GNULIB_SRCDIR=`expr "$option" : '--gnulib-srcdir=\(.*\)'`;;
132 --update-po=*) 169 --skip-po)
133 DOWNLOAD_PO=`expr "$option" : '--update-po=\(.*\)'`;; 170 SKIP_PO=t;;
134 --update-po) 171 --force)
135 DOWNLOAD_PO=only;; 172 checkout_only_file=;;
136 --copy) 173 --copy)
137 copy=true;; 174 copy=true;;
138 -*) 175 *)
139 echo >&2 "$0: $option: unknown option" 176 echo >&2 "$0: $option: unknown option"
140 exit 1;; 177 exit 1;;
141 *)
142 if [ -n "$NULIB_OPTION" ]; then
143 echo "$0: gnulib directory specified twice">&2
144 exit 1
145 fi
146 GNULIB_DIR=$option;;
147 esac 178 esac
148done 179done
149 180
150datecmp() { 181if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then
151 test `echo "1 $1 182 echo "$0: Bootstrapping from a non-checked-out distribution is risky." >&2
1522 $2" | tr '-' ' ' | sort -n -k2 -k3 -k4 -k1 | sed -n '1s/ .*//p'` -eq 1 183 exit 1
184fi
185
186# If $STR is not already on a line by itself in $FILE, insert it,
187# sorting the new contents of the file and replacing $FILE with the result.
188insert_sorted_if_absent() {
189 file=$1
190 str=$2
191 test -f $file || touch $file
192 echo "$str" | sort -u - $file | cmp -s - $file \
193 || echo "$str" | sort -u - $file -o $file \
194 || exit 1
153} 195}
154 196
155if [ -n "$GNULIB_DIR" ]; then 197# Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac.
156 if [ -d "$GNULIB_DIR" ]; then 198found_aux_dir=no
157 PATH="$GNULIB_DIR:$PATH" 199grep '^[ ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'\])' configure.ac \
158 if [ -r "$GNULIB_DIR/ChangeLog" ]; then 200 >/dev/null && found_aux_dir=yes
159 GNULIB_REV=`sed '/^[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}/q' "$GNULIB_DIR/ChangeLog"` 201grep '^[ ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \
160 if datecmp "$GNULIB_DATE" "$GNULIB_REV"; then :; 202 >/dev/null && found_aux_dir=yes
161 else 203if test $found_aux_dir = no; then
162 echo "$0: Gnulib version is too old: $GNULIB_REV">&2 204 echo "$0: expected line not found in configure.ac. Add the following:" >&2
163 echo "$0: It should not be older than $GNULIB_DATE">&2 205 echo " AC_CONFIG_AUX_DIR([$build_aux])" >&2
164 echo "$0: Please, update gnulib and retry">&2 206 exit 1
165 exit
166 fi
167 else
168 echo "$0: No $GNULIB_DIR/ChangeLog file found">&2
169 fi
170 else
171 echo "$0: specified gnulib location is not a directory">&2
172 fi
173else
174 echo "$0: warning: gnulib source directory not specified">&2
175 echo "$0: warning: looking for gnulib-tool in PATH...">&2
176fi 207fi
177 208
178gnulib-tool --version >/dev/null 2>&1 209# If $build_aux doesn't exist, create it now, otherwise some bits
179if [ $? -ne 0 ]; then 210# below will malfunction. If creating it, also mark it as ignored.
180 echo "$0: Cannot run gnulib-tool. Try \`$0 --help' for more info.">&2 211if test ! -d $build_aux; then
181 exit 1 212 mkdir $build_aux
213 for dot_ig in x $vc_ignore; do
214 test $dot_ig = x && continue
215 insert_sorted_if_absent $dot_ig $build_aux
216 done
182fi 217fi
183 218
184echo "$0: Bootstrapping $package" 219echo "$0: Bootstrapping from checked-out $package sources..."
185 220
186echo "$0: Running autopoint" 221cleanup_gnulib() {
187autopoint -f || exit 1 222 status=$?
223 rm -fr gnulib
224 exit $status
225}
188 226
189# Create gettext configuration. 227# Get gnulib files.
190echo "$0: Creating po/Makevars from po/Makevars.template ..."
191rm -f po/Makevars
192 228
193if [ -n "$NLS_MARKERS" ]; then 229case ${GNULIB_SRCDIR--} in
194 XGETTEXT_OPTIONS="$XGETTEXT_OPTIONS "`echo $NLS_MARKERS | tr ' ' '\n' | sed 's/.*/ --flag=&:pass-c-format\\\\\\\\\\\\/'`" 230-)
195" 231 if [ ! -d gnulib ]; then
196fi 232 echo "$0: getting gnulib files..."
197 233
198sed ' 234 trap cleanup_gnulib 1 2 13 15
199 1i\ 235
200# -*- buffer-read-only: t -*- vi: set ro:\ 236 git clone --depth 2 git://git.sv.gnu.org/gnulib ||
201# DO NOT EDIT! GENERATED AUTOMATICALLY! 237 cleanup_gnulib
202 238
203 /^COPYRIGHT_HOLDER *=/s/=.*/= '"$COPYRIGHT_HOLDER"'/ 239 trap - 1 2 13 15
204 /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/ 240 fi
205 /^MSGID_BUGS_ADDRESS *=/s/=.*/= '"$bug_address"'/ 241 GNULIB_SRCDIR=gnulib
206 /^XGETTEXT_OPTIONS *=/{ 242esac
207 s/$/ \\/ 243
208 a\ 244gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
209 '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+} 245<$gnulib_tool || exit
210 }
211' po/Makevars.template >po/Makevars
212 246
213# Get translations. 247# Get translations.
214 248
215get_translations() { 249download_po_files() {
216 subdir=$1 250 subdir=$1
217 domain=$2 251 domain=$2
218 po_file=$3 252 echo "$0: getting translations into $subdir for $domain..."
219 253 cmd=`printf "$po_download_command_format" "$domain" "$subdir"`
220 case $WGET_COMMAND in 254 eval "$cmd"
221 '')
222 echo "$0: wget not available; skipping translations";;
223 ?*)
224 url=`tp_url $domain`
225 baseurl=`expr "$url" : '\(.*\)/.*'`
226 echo "$0: getting translations into $subdir for $domain..." &&
227 case $po_file in
228 '') (cd $subdir && rm -f dummy `ls | sed -n '/\.gmo$/p; /\.po/p'`);;
229 esac &&
230
231 $WGET_COMMAND -O "$subdir/$domain.html" "$url" &&
232
233 sed -n 's|.*href="\(.*\)/\([^/][^/]*\)/'"$domain"'-\([^/"]*\)\.[^."]*\.po".*|\2:\3:\1|p' <"$subdir/$domain.html" |
234 sort -t: -k 1,1 -k 2,2n -k2,2 -k3,3n -k3,3 -k4,4n -k4,4 -k5,5n -k5.5 |
235 awk -F: '
236 { if (lang && $1 != lang) print lang, ver, $3 }
237 { lang = $1; ver = $2 }
238 END { if (lang) print lang, ver, $3 }
239 ' | awk -v domain="$domain" -v baseurl="$baseurl" -v subdir="$subdir" \
240 -v po_file="$po_file" '
241 {
242 lang = $1
243 if (po_file && po_file != (lang ".po")) next
244 ver = $2
245 printf "{ $WGET_COMMAND -O %s/%s.po %s/%s/%s/%s-%s.%s.po &&\n", subdir, lang, baseurl, $3, lang, domain, ver, lang
246 printf " msgfmt -c -o /dev/null %s/%s.po || {\n", subdir, lang
247 printf " echo >&2 '\'"$0"': omitting translation for %s'\''\n", lang
248 printf " rm -f %s/%s.po; }; } &&\n", subdir, lang
249 }
250 END { print ":" }
251 ' | WGET_COMMAND="$WGET_COMMAND" sh
252 ;;
253 esac &&
254 ls "$subdir"/*.po 2>/dev/null |
255 sed 's|.*/||; s|\.po$||' >"$subdir/LINGUAS" &&
256 rm -f "$subdir/$domain.html"
257} 255}
258 256
259save_LC_ALL="$LC_ALL" 257# Download .po files to $po_dir/.reference and copy only the new
260LC_ALL=C 258# or modified ones into $po_dir. Also update $po_dir/LINGUAS.
261case `wget --help` in 259update_po_files() {
262*'--no-cache'*) 260 # Directory containing primary .po files.
263 WGET_COMMAND='wget -nv --no-cache';; 261 # Overwrite them only when we're sure a .po file is new.
264*'--cache=on/off'*) 262 po_dir=$1
265 WGET_COMMAND='wget -nv --cache=off';; 263 domain=$2
266*'--non-verbose'*)
267 WGET_COMMAND='wget -nv';;
268*)
269 WGET_COMMAND='';;
270esac
271LC_ALL="$save_LC_ALL"
272 264
273case $DOWNLOAD_PO in 265 # Download *.po files into this dir.
274'skip') 266 # Usually contains *.s1 checksum files.
275 ;; 267 ref_po_dir="$po_dir/.reference"
268
269 test -d $ref_po_dir || mkdir $ref_po_dir || return
270 download_po_files $ref_po_dir $domain \
271 && ls "$ref_po_dir"/*.po 2>/dev/null |
272 sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS"
273
274 langs=`cd $ref_po_dir && echo *.po|sed 's/\.po//g'`
275 test "$langs" = '*' && langs=x
276 for po in `cd $ref_po_dir && echo *.po|sed 's/\.po//g'`; do
277 case $po in x) continue;; esac
278 new_po="$ref_po_dir/$po.po"
279 cksum_file="$ref_po_dir/$po.s1"
280 if ! test -f "$cksum_file" ||
281 ! test -f "$po_dir/$po.po" ||
282 ! sha1sum -c --status "$cksum_file" < "$new_po" > /dev/null; then
283 echo "updated $po_dir/$po.po..."
284 cp "$new_po" "$po_dir/$po.po" && sha1sum < "$new_po" > "$cksum_file"
285 fi
286 done
287}
288
289case $SKIP_PO in
276'') 290'')
277 get_translations po $package || exit 291 if test -d po; then
278 ;; 292 update_po_files po $package || exit
279'only') 293 fi
280 get_translations po $package 294
281 exit 295 if test -d runtime-po; then
282 ;; 296 update_po_files runtime-po $package-runtime || exit
283*.po) 297 fi;;
284 get_translations po $package "$DOWNLOAD_PO"
285 exit
286 ;;
287*)
288 get_translations po $package "${DOWNLOAD_PO}.po"
289 exit
290esac 298esac
291 299
292echo "$0: Importing gnulib files ..." 300symlink_to_dir()
293if [ -n "$MODAVOID" ]; then 301{
294 gnulib_tool_options="`echo $MODAVOID | sed 's/\([^ ][^ ]*\)/--avoid &/g'`" 302 src=$1/$2
303 dst=${3-$2}
304
305 test -f "$src" && {
306
307 # If the destination directory doesn't exist, create it.
308 # This is required at least for "lib/uniwidth/cjk.h".
309 dst_dir=`dirname "$dst"`
310 if ! test -d "$dst_dir"; then
311 mkdir -p "$dst_dir"
312
313 # If we've just created a directory like lib/uniwidth,
314 # tell version control system(s) it's ignorable.
315 # FIXME: for now, this does only one level
316 parent=`dirname "$dst_dir"`
317 for dot_ig in x $vc_ignore; do
318 test $dot_ig = x && continue
319 ig=$parent/$dot_ig
320 insert_sorted_if_absent $ig `echo "$dst_dir"|sed 's,.*/,,'`
321 done
322 fi
323
324 if $copy; then
325 {
326 test ! -h "$dst" || {
327 echo "$0: rm -f $dst" &&
328 rm -f "$dst"
329 }
330 } &&
331 test -f "$dst" &&
332 cmp -s "$src" "$dst" || {
333 echo "$0: cp -fp $src $dst" &&
334 cp -fp "$src" "$dst"
335 }
336 else
337 test -h "$dst" &&
338 src_ls=`ls -diL "$src" 2>/dev/null` && set $src_ls && src_i=$1 &&
339 dst_ls=`ls -diL "$dst" 2>/dev/null` && set $dst_ls && dst_i=$1 &&
340 test "$src_i" = "$dst_i" || {
341 dot_dots=
342 case $src in
343 /*) ;;
344 *)
345 case /$dst/ in
346 *//* | */../* | */./* | /*/*/*/*/*/)
347 echo >&2 "$0: invalid symlink calculation: $src -> $dst"
348 exit 1;;
349 /*/*/*/*/) dot_dots=../../../;;
350 /*/*/*/) dot_dots=../../;;
351 /*/*/) dot_dots=../;;
352 esac;;
353 esac
354
355 echo "$0: ln -fs $dot_dots$src $dst" &&
356 ln -fs "$dot_dots$src" "$dst"
357 }
358 fi
359 }
360}
361
362cp_mark_as_generated()
363{
364 cp_src=$1
365 cp_dst=$2
366
367 if cmp -s "$cp_src" "$GNULIB_SRCDIR/$cp_dst"; then
368 symlink_to_dir "$GNULIB_SRCDIR" "$cp_dst"
369 elif cmp -s "$cp_src" "$local_gl_dir/$cp_dst"; then
370 symlink_to_dir $local_gl_dir "$cp_dst"
371 else
372 case $cp_dst in
373 *.[ch]) c1='/* '; c2=' */';;
374 *.texi) c1='@c '; c2= ;;
375 *.m4|*/Make*|Make*) c1='# ' ; c2= ;;
376 *) c1= ; c2= ;;
377 esac
378
379 # If the destination directory doesn't exist, create it.
380 # This is required at least for "lib/uniwidth/cjk.h".
381 dst_dir=`dirname "$cp_dst"`
382 test -d "$dst_dir" || mkdir -p "$dst_dir"
383
384 if test -z "$c1"; then
385 cmp -s "$cp_src" "$cp_dst" || {
386 echo "$0: cp -f $cp_src $cp_dst" &&
387 rm -f "$cp_dst" &&
388 sed "s!$bt_regex/!!g" "$cp_src" > "$cp_dst"
389 }
390 else
391 # Copy the file first to get proper permissions if it
392 # doesn't already exist. Then overwrite the copy.
393 cp "$cp_src" "$cp_dst-t" &&
394 (
395 echo "$c1-*- buffer-read-only: t -*- vi: set ro:$c2" &&
396 echo "${c1}DO NOT EDIT! GENERATED AUTOMATICALLY!$c2" &&
397 sed "s!$bt_regex/!!g" "$cp_src"
398 ) > $cp_dst-t &&
399 if cmp -s "$cp_dst-t" "$cp_dst"; then
400 rm -f "$cp_dst-t"
401 else
402 echo "$0: cp $cp_src $cp_dst # with edits" &&
403 mv -f "$cp_dst-t" "$cp_dst"
404 fi
405 fi
406 fi
407}
408
409version_controlled_file() {
410 dir=$1
411 file=$2
412 found=no
413 if test -d CVS; then
414 grep -F "/$file/" $dir/CVS/Entries 2>/dev/null |
415 grep '^/[^/]*/[0-9]' > /dev/null && found=yes
416 elif test -d .git; then
417 git rm -n "$dir/$file" > /dev/null 2>&1 && found=yes
418 elif test -d .svn; then
419 svn log -r HEAD "$dir/$file" > /dev/null 2>&1 && found=yes
420 else
421 echo "$0: no version control for $dir/$file?" >&2
422 fi
423 test $found = yes
424}
425
426slurp() {
427 for dir in . `(cd $1 && find * -type d -print)`; do
428 copied=
429 sep=
430 for file in `ls -a $1/$dir`; do
431 case $file in
432 .|..) continue;;
433 .*) continue;; # FIXME: should all file names starting with "." be ignored?
434 esac
435 test -d $1/$dir/$file && continue
436 for excluded_file in $excluded_files; do
437 test "$dir/$file" = "$excluded_file" && continue 2
438 done
439 if test $file = Makefile.am; then
440 copied=$copied${sep}$gnulib_mk; sep=$nl
441 remove_intl='/^[^#].*\/intl/s/^/#/;'"s!$bt_regex/!!g"
442 sed "$remove_intl" $1/$dir/$file | cmp -s - $dir/$gnulib_mk || {
443 echo "$0: Copying $1/$dir/$file to $dir/$gnulib_mk ..." &&
444 rm -f $dir/$gnulib_mk &&
445 sed "$remove_intl" $1/$dir/$file >$dir/$gnulib_mk
446 }
447 elif { test "${2+set}" = set && test -r $2/$dir/$file; } ||
448 version_controlled_file $dir $file; then
449 echo "$0: $dir/$file overrides $1/$dir/$file"
450 else
451 copied=$copied$sep$file; sep=$nl
452 if test $file = gettext.m4; then
453 echo "$0: patching m4/gettext.m4 to remove need for intl/* ..."
454 rm -f $dir/$file
455 sed '
456 /^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\
457 AC_DEFUN([AM_INTL_SUBDIR], [
458 /^AC_DEFUN(\[gt_INTL_SUBDIR_CORE],/,/^]/c\
459 AC_DEFUN([gt_INTL_SUBDIR_CORE], [])
460 $a\
461 AC_DEFUN([gl_LOCK_EARLY], [])
462 ' $1/$dir/$file >$dir/$file
463 else
464 cp_mark_as_generated $1/$dir/$file $dir/$file
465 fi
466 fi || exit
467 done
468
469 for dot_ig in x $vc_ignore; do
470 test $dot_ig = x && continue
471 ig=$dir/$dot_ig
472 if test -n "$copied"; then
473 insert_sorted_if_absent $ig "$copied"
474 # If an ignored file name ends with .in.h, then also add
475 # the name with just ".h". Many gnulib headers are generated,
476 # e.g., stdint.in.h -> stdint.h, dirent.in.h ->..., etc.
477 # Likewise for .gperf -> .h, .y -> .c, and .sin -> .sed
478 f=`echo "$copied"|sed 's/\.in\.h$/.h/;s/\.sin$/.sed/;s/\.y$/.c/;s/\.gperf$/.h/'`
479 insert_sorted_if_absent $ig "$f"
480
481 # For files like sys_stat.in.h and sys_time.in.h, record as
482 # ignorable the directory we might eventually create: sys/.
483 f=`echo "$copied"|sed 's/sys_.*\.in\.h$/sys/'`
484 insert_sorted_if_absent $ig "$f"
485 fi
486 done
487 done
488}
489
490
491# Create boot temporary directories to import from gnulib and gettext.
492rm -fr $bt $bt2 &&
493mkdir $bt $bt2 || exit
494
495# Import from gnulib.
496
497gnulib_tool_options="\
498 --import\
499 --no-changelog\
500 --aux-dir $bt/$build_aux\
501 --doc-base $bt/$doc_base\
502 --lib $gnulib_name\
503 --m4-base $bt/$m4_base/\
504 --source-base $bt/$source_base/\
505 --tests-base $bt/$tests_base\
506 --local-dir $local_gl_dir\
507 $gnulib_tool_option_extras\
508"
509echo "$0: $gnulib_tool $gnulib_tool_options --import ..."
510$gnulib_tool $gnulib_tool_options --import $gnulib_modules &&
511slurp $bt || exit
512
513for file in $gnulib_files; do
514 symlink_to_dir "$GNULIB_SRCDIR" $file || exit
515done
516
517
518# Import from gettext.
519with_gettext=yes
520grep '^[ ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \
521 with_gettext=no
522
523if test $with_gettext = yes; then
524 echo "$0: (cd $bt2; autopoint) ..."
525 cp configure.ac $bt2 &&
526 (cd $bt2 && autopoint && rm configure.ac) &&
527 slurp $bt2 $bt || exit
528
529 rm -fr $bt $bt2 || exit
295fi 530fi
296 531
297test -d $GNU_SOURCE_BASE || mkdir $GNU_SOURCE_BASE 532# Coreutils is unusual in that it generates some of its test-related
298gnulib-tool --import --source-base=$GNU_SOURCE_BASE $gnulib_tool_options $MODLIST 533# Makefile.am files. That must be done before invoking automake.
534mam_template=tests/Makefile.am.in
535if test -f $mam_template; then
536 PERL=perl
537 for tool in cut head join pr sort tac tail test tr uniq wc; do
538 m=tests/$tool/Makefile.am
539 t=${m}t
540 rm -f $m $t
541 sed -n '1,/^##test-files-begin/p' $mam_template > $t
542 echo "x = $tool" >> $t
543 srcdir=tests/$tool
544 $PERL -I$srcdir -w -- tests/mk-script $srcdir --list >> $t
545 sed -n '/^##test-files-end/,$p' $mam_template >> $t
546 chmod -w $t
547 mv $t $m
548 done
549fi
550
551# Remove any dangling symlink matching "*.m4" in the gnulib-populated
552# $m4_base directory, since such a file would cause aclocal to fail.
553# The following requires GNU find 4.2.3 or newer. Considering the usual
554# portability constraints of this script, that may seem a very demanding
555# requirement, but it should be ok. Ignore any failure, which is fine,
556# since this is only a convenience to help developers avoid the relatively
557# unusual case in which a symlinked-to .m4 file is git-removed from gnulib
558# between successive runs of this script.
559find "$m4_base" -name '*.m4' -depth -type l -xtype l -delete > /dev/null 2>&1
299 560
300echo "$0: Reconfiguring ..." 561# Reconfigure, getting other files.
301 562
302for command in \ 563for command in \
564 libtool \
303 'aclocal --force -I m4' \ 565 'aclocal --force -I m4' \
304 'autoconf --force' \ 566 'autoconf --force' \
305 'autoheader --force' \ 567 'autoheader --force' \
306 'automake --add-missing --copy --force-missing'; 568 'automake --add-missing --copy --force-missing';
307do 569do
570 if test "$command" = libtool; then
571 grep '^[ ]*AM_PROG_LIBTOOL\>' configure.ac >/dev/null ||
572 continue
573 command='libtoolize -c -f'
574 fi
308 echo "$0: $command ..." 575 echo "$0: $command ..."
309 $command || exit 576 $command || exit
310done 577done
311 578
579
580# Get some extra files from gnulib, overriding existing files.
581for file in $gnulib_extra_files; do
582 case $file in
583 */INSTALL) dst=INSTALL;;
584 build-aux/*) dst=$build_aux/`expr "$file" : 'build-aux/\(.*\)'`;;
585 *) dst=$file;;
586 esac
587 symlink_to_dir "$GNULIB_SRCDIR" $file $dst || exit
588done
589
590if test $with_gettext = yes; then
591 # Create gettext configuration.
592 echo "$0: Creating po/Makevars from po/Makevars.template ..."
593 rm -f po/Makevars
594 sed '
595 /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/
596 /^MSGID_BUGS_ADDRESS *=/s/=.*/= '"$MSGID_BUGS_ADDRESS"'/
597 /^COPYRIGHT_HOLDER *=/s/=.*/= '"$COPYRIGHT_HOLDER"'/
598 /^XGETTEXT_OPTIONS *=/{
599 s/$/ \\/
600 a\
601 '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+}
602 }
603 ' po/Makevars.template >po/Makevars
604
605 if test -d runtime-po; then
606 # Similarly for runtime-po/Makevars, but not quite the same.
607 rm -f runtime-po/Makevars
608 sed '
609 /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/
610 /^subdir *=.*/s/=.*/= runtime-po/
611 /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
612 /^COPYRIGHT_HOLDER *=/s/=.*/= '"$COPYRIGHT_HOLDER"'/
613 /^XGETTEXT_OPTIONS *=/{
614 s/$/ \\/
615 a\
616 '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+}
617 }
618 ' <po/Makevars.template >runtime-po/Makevars
619
620 # Copy identical files from po to runtime-po.
621 (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po)
622 fi
623fi
624
312echo "$0: done. Now you can run './configure'." 625echo "$0: done. Now you can run './configure'."

Return to:

Send suggestions and report system problems to the System administrator.