init.sh: explain why $EXEEXT support uses aliases rather than functions
[gnulib.git] / build-aux / bootstrap
1 #! /bin/sh
2 # Print a version string.
3 scriptversion=2012-04-26.13; # UTC
4
5 # Bootstrap this package from checked-out sources.
6
7 # Copyright (C) 2003-2012 Free Software Foundation, Inc.
8
9 # This program is free software: you can redistribute it and/or modify
10 # it under the terms of the GNU General Public License as published by
11 # the Free Software Foundation, either version 3 of the License, or
12 # (at your option) any later version.
13
14 # This program is distributed in the hope that it will be useful,
15 # but WITHOUT ANY WARRANTY; without even the implied warranty of
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 # GNU General Public License for more details.
18
19 # You should have received a copy of the GNU General Public License
20 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
21
22 # Originally written by Paul Eggert.  The canonical version of this
23 # script is maintained as build-aux/bootstrap in gnulib, however, to
24 # be useful to your project, you should place a copy of it under
25 # version control in the top-level directory of your project.  The
26 # intent is that all customization can be done with a bootstrap.conf
27 # file also maintained in your version control; gnulib comes with a
28 # template build-aux/bootstrap.conf to get you started.
29
30 # Please report bugs or propose patches to bug-gnulib@gnu.org.
31
32 nl='
33 '
34
35 # Ensure file names are sorted consistently across platforms.
36 LC_ALL=C
37 export LC_ALL
38
39 # Ensure that CDPATH is not set.  Otherwise, the output from cd
40 # would cause trouble in at least one use below.
41 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
42
43 local_gl_dir=gl
44
45 me=$0
46
47 usage() {
48   cat <<EOF
49 Usage: $me [OPTION]...
50 Bootstrap this package from the checked-out sources.
51
52 Options:
53  --gnulib-srcdir=DIRNAME  specify the local directory where gnulib
54                           sources reside.  Use this if you already
55                           have gnulib sources on your machine, and
56                           do not want to waste your bandwidth downloading
57                           them again.  Defaults to \$GNULIB_SRCDIR
58  --bootstrap-sync         if this bootstrap script is not identical to
59                           the version in the local gnulib sources,
60                           update this script, and then restart it with
61                           /bin/sh or the shell \$CONFIG_SHELL
62  --no-bootstrap-sync      do not check whether bootstrap is out of sync
63  --copy                   copy files instead of creating symbolic links
64  --force                  attempt to bootstrap even if the sources seem
65                           not to have been checked out
66  --no-git                 do not use git to update gnulib.  Requires that
67                           --gnulib-srcdir point to a correct gnulib snapshot
68  --skip-po                do not download po files
69
70 If the file $me.conf exists in the same directory as this script, its
71 contents are read as shell variables to configure the bootstrap.
72
73 For build prerequisites, environment variables like \$AUTOCONF and \$AMTAR
74 are honored.
75
76 Running without arguments will suffice in most cases.
77 EOF
78 }
79
80 # Configuration.
81
82 # Name of the Makefile.am
83 gnulib_mk=gnulib.mk
84
85 # List of gnulib modules needed.
86 gnulib_modules=
87
88 # Any gnulib files needed that are not in modules.
89 gnulib_files=
90
91 : ${AUTOPOINT=autopoint}
92 : ${AUTORECONF=autoreconf}
93
94 # A function to be called right after gnulib-tool is run.
95 # Override it via your own definition in bootstrap.conf.
96 bootstrap_post_import_hook() { :; }
97
98 # A function to be called after everything else in this script.
99 # Override it via your own definition in bootstrap.conf.
100 bootstrap_epilogue() { :; }
101
102 # The command to download all .po files for a specified domain into
103 # a specified directory.  Fill in the first %s is the domain name, and
104 # the second with the destination directory.  Use rsync's -L and -r
105 # options because the latest/%s directory and the .po files within are
106 # all symlinks.
107 po_download_command_format=\
108 "rsync --delete --exclude '*.s1' -Lrtvz \
109  'translationproject.org::tp/latest/%s/' '%s'"
110
111 # Fallback for downloading .po files (if rsync fails).
112 po_download_command_format2=\
113 "wget --mirror -nd -q -np -A.po -P '%s' \
114  http://translationproject.org/latest/%s/"
115
116 extract_package_name='
117   /^AC_INIT(/{
118      /.*,.*,.*, */{
119        s///
120        s/[][]//g
121        s/)$//
122        p
123        q
124      }
125      s/AC_INIT(\[*//
126      s/]*,.*//
127      s/^GNU //
128      y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
129      s/[^A-Za-z0-9_]/-/g
130      p
131   }
132 '
133 package=`sed -n "$extract_package_name" configure.ac` || exit
134 gnulib_name=lib$package
135
136 build_aux=build-aux
137 source_base=lib
138 m4_base=m4
139 doc_base=doc
140 tests_base=tests
141 gnulib_extra_files=''
142
143 # Additional gnulib-tool options to use.  Use "\newline" to break lines.
144 gnulib_tool_option_extras=
145
146 # Other locale categories that need message catalogs.
147 EXTRA_LOCALE_CATEGORIES=
148
149 # Additional xgettext options to use.  Use "\\\newline" to break lines.
150 XGETTEXT_OPTIONS='\\\
151  --flag=_:1:pass-c-format\\\
152  --flag=N_:1:pass-c-format\\\
153  --flag=error:3:c-format --flag=error_at_line:5:c-format\\\
154 '
155
156 # Package bug report address and copyright holder for gettext files
157 COPYRIGHT_HOLDER='Free Software Foundation, Inc.'
158 MSGID_BUGS_ADDRESS=bug-$package@gnu.org
159
160 # Files we don't want to import.
161 excluded_files=
162
163 # File that should exist in the top directory of a checked out hierarchy,
164 # but not in a distribution tarball.
165 checkout_only_file=README-hacking
166
167 # Whether to use copies instead of symlinks.
168 copy=false
169
170 # Set this to '.cvsignore .gitignore' in bootstrap.conf if you want
171 # those files to be generated in directories like lib/, m4/, and po/.
172 # Or set it to 'auto' to make this script select which to use based
173 # on which version control system (if any) is used in the source directory.
174 vc_ignore=auto
175
176 # Set this to true in bootstrap.conf to enable --bootstrap-sync by
177 # default.
178 bootstrap_sync=false
179
180 # Use git to update gnulib sources
181 use_git=true
182
183 # find_tool ENVVAR NAMES...
184 # -------------------------
185 # Search for a required program.  Use the value of ENVVAR, if set,
186 # otherwise find the first of the NAMES that can be run (i.e.,
187 # supports --version).  If found, set ENVVAR to the program name,
188 # die otherwise.
189 find_tool ()
190 {
191   find_tool_envvar=$1
192   shift
193   find_tool_names=$@
194   eval "find_tool_res=\$$find_tool_envvar"
195   if test x"$find_tool_res" = x; then
196     for i
197     do
198       if ($i --version </dev/null) >/dev/null 2>&1; then
199        find_tool_res=$i
200        break
201       fi
202     done
203   else
204     find_tool_error_prefix="\$$find_tool_envvar: "
205   fi
206   if test x"$find_tool_res" = x; then
207     echo >&2 "$me: one of these is required: $find_tool_names"
208     exit 1
209   fi
210   ($find_tool_res --version </dev/null) >/dev/null 2>&1 || {
211     echo >&2 "$me: ${find_tool_error_prefix}cannot run $find_tool_res --version"
212     exit 1
213   }
214   eval "$find_tool_envvar=\$find_tool_res"
215   eval "export $find_tool_envvar"
216 }
217
218 # Find sha1sum, named gsha1sum on MacPorts, and shasum on MacOS 10.6.
219 find_tool SHA1SUM sha1sum gsha1sum shasum
220
221 # Override the default configuration, if necessary.
222 # Make sure that bootstrap.conf is sourced from the current directory
223 # if we were invoked as "sh bootstrap".
224 case "$0" in
225   */*) test -r "$0.conf" && . "$0.conf" ;;
226   *) test -r "$0.conf" && . ./"$0.conf" ;;
227 esac
228
229 # Extra files from gnulib, which override files from other sources.
230 test -z "${gnulib_extra_files}" && \
231   gnulib_extra_files="
232         $build_aux/install-sh
233         $build_aux/missing
234         $build_aux/mdate-sh
235         $build_aux/texinfo.tex
236         $build_aux/depcomp
237         $build_aux/config.guess
238         $build_aux/config.sub
239         doc/INSTALL
240 "
241
242 if test "$vc_ignore" = auto; then
243   vc_ignore=
244   test -d .git && vc_ignore=.gitignore
245   test -d CVS && vc_ignore="$vc_ignore .cvsignore"
246 fi
247
248 # Translate configuration into internal form.
249
250 # Parse options.
251
252 for option
253 do
254   case $option in
255   --help)
256     usage
257     exit;;
258   --gnulib-srcdir=*)
259     GNULIB_SRCDIR=`expr "X$option" : 'X--gnulib-srcdir=\(.*\)'`;;
260   --skip-po)
261     SKIP_PO=t;;
262   --force)
263     checkout_only_file=;;
264   --copy)
265     copy=true;;
266   --bootstrap-sync)
267     bootstrap_sync=true;;
268   --no-bootstrap-sync)
269     bootstrap_sync=false;;
270   --no-git)
271     use_git=false;;
272   *)
273     echo >&2 "$0: $option: unknown option"
274     exit 1;;
275   esac
276 done
277
278 if $use_git || test -d "$GNULIB_SRCDIR"; then
279   :
280 else
281   echo "$0: Error: --no-git requires --gnulib-srcdir" >&2
282   exit 1
283 fi
284
285 if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then
286   echo "$0: Bootstrapping from a non-checked-out distribution is risky." >&2
287   exit 1
288 fi
289
290 # Ensure that lines starting with ! sort last, per gitignore conventions
291 # for whitelisting exceptions after a more generic blacklist pattern.
292 sort_patterns() {
293   sort -u "$@" | sed '/^!/ {
294     H
295     d
296   }
297   $ {
298     P
299     x
300     s/^\n//
301   }' | sed '/^$/d'
302 }
303
304 # If $STR is not already on a line by itself in $FILE, insert it,
305 # sorting the new contents of the file and replacing $FILE with the result.
306 insert_sorted_if_absent() {
307   file=$1
308   str=$2
309   test -f $file || touch $file
310   echo "$str" | sort_patterns - $file | cmp - $file > /dev/null \
311     || { echo "$str" | sort_patterns - $file > $file.bak \
312       && mv $file.bak $file; } \
313     || exit 1
314 }
315
316 # Adjust $PATTERN for $VC_IGNORE_FILE and insert it with
317 # insert_sorted_if_absent.
318 insert_vc_ignore() {
319   vc_ignore_file="$1"
320   pattern="$2"
321   case $vc_ignore_file in
322   *.gitignore)
323     # A .gitignore entry that does not start with '/' applies
324     # recursively to subdirectories, so prepend '/' to every
325     # .gitignore entry.
326     pattern=`echo "$pattern" | sed s,^,/,`;;
327   esac
328   insert_sorted_if_absent "$vc_ignore_file" "$pattern"
329 }
330
331 # Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac.
332 found_aux_dir=no
333 grep '^[         ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'\])' configure.ac \
334     >/dev/null && found_aux_dir=yes
335 grep '^[         ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \
336     >/dev/null && found_aux_dir=yes
337 if test $found_aux_dir = no; then
338   echo "$0: expected line not found in configure.ac. Add the following:" >&2
339   echo "  AC_CONFIG_AUX_DIR([$build_aux])" >&2
340   exit 1
341 fi
342
343 # If $build_aux doesn't exist, create it now, otherwise some bits
344 # below will malfunction.  If creating it, also mark it as ignored.
345 if test ! -d $build_aux; then
346   mkdir $build_aux
347   for dot_ig in x $vc_ignore; do
348     test $dot_ig = x && continue
349     insert_vc_ignore $dot_ig $build_aux
350   done
351 fi
352
353 # Note this deviates from the version comparison in automake
354 # in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
355 # but this should suffice as we won't be specifying old
356 # version formats or redundant trailing .0 in bootstrap.conf.
357 # If we did want full compatibility then we should probably
358 # use m4_version_compare from autoconf.
359 sort_ver() { # sort -V is not generally available
360   ver1="$1"
361   ver2="$2"
362
363   # split on '.' and compare each component
364   i=1
365   while : ; do
366     p1=$(echo "$ver1" | cut -d. -f$i)
367     p2=$(echo "$ver2" | cut -d. -f$i)
368     if [ ! "$p1" ]; then
369       echo "$1 $2"
370       break
371     elif [ ! "$p2" ]; then
372       echo "$2 $1"
373       break
374     elif [ ! "$p1" = "$p2" ]; then
375       if [ "$p1" -gt "$p2" ] 2>/dev/null; then # numeric comparison
376         echo "$2 $1"
377       elif [ "$p2" -gt "$p1" ] 2>/dev/null; then # numeric comparison
378         echo "$1 $2"
379       else # numeric, then lexicographic comparison
380         lp=$(printf "$p1\n$p2\n" | LANG=C sort -n | tail -n1)
381         if [ "$lp" = "$p2" ]; then
382           echo "$1 $2"
383         else
384           echo "$2 $1"
385         fi
386       fi
387       break
388     fi
389     i=$(($i+1))
390   done
391 }
392
393 get_version() {
394   app=$1
395
396   $app --version >/dev/null 2>&1 || return 1
397
398   $app --version 2>&1 |
399   sed -n '# Move version to start of line.
400           s/.*[v ]\([0-9]\)/\1/
401
402           # Skip lines that do not start with version.
403           /^[0-9]/!d
404
405           # Remove characters after the version.
406           s/[^.a-z0-9-].*//
407
408           # The first component must be digits only.
409           s/^\([0-9]*\)[a-z-].*/\1/
410
411           #the following essentially does s/5.005/5.5/
412           s/\.0*\([1-9]\)/.\1/g
413           p
414           q'
415 }
416
417 check_versions() {
418   ret=0
419
420   while read app req_ver; do
421     # We only need libtoolize from the libtool package.
422     if test "$app" = libtool; then
423       app=libtoolize
424     fi
425     # Exempt git if --no-git is in effect.
426     if test "$app" = git; then
427       $use_git || continue
428     fi
429     # Honor $APP variables ($TAR, $AUTOCONF, etc.)
430     appvar=`echo $app | LC_ALL=C tr '[a-z]-' '[A-Z]_'`
431     test "$appvar" = TAR && appvar=AMTAR
432     case $appvar in
433         GZIP) ;; # Do not use $GZIP:  it contains gzip options.
434         *) eval "app=\${$appvar-$app}" ;;
435     esac
436
437     # Handle the still-experimental Automake-NG programs specially.
438     # They remain named as the mainstream Automake programs ("automake",
439     # and "aclocal") to avoid gratuitous incompatibilities with
440     # pre-existing usages (by, say, autoreconf, or custom autogen.sh
441     # scripts), but correctly identify themselves (as being part of
442     # "GNU automake-ng") when asked their version.
443     case $app in
444       automake-ng|aclocal-ng)
445         app=`echo "$app" | sed 's/-ng$//'`
446         ($app --version | grep '(GNU automake-ng)') >/dev/null 2>&1 || {
447           echo "$me: Error: '$app' not found or not from Automake-NG" >&2
448           ret=1
449           continue
450         } ;;
451     esac
452     if [ "$req_ver" = "-" ]; then
453       # Merely require app to exist; not all prereq apps are well-behaved
454       # so we have to rely on $? rather than get_version.
455       $app --version >/dev/null 2>&1
456       if [ 126 -le $? ]; then
457         echo "$me: Error: '$app' not found" >&2
458         ret=1
459       fi
460     else
461       # Require app to produce a new enough version string.
462       inst_ver=$(get_version $app)
463       if [ ! "$inst_ver" ]; then
464         echo "$me: Error: '$app' not found" >&2
465         ret=1
466       else
467         latest_ver=$(sort_ver $req_ver $inst_ver | cut -d' ' -f2)
468         if [ ! "$latest_ver" = "$inst_ver" ]; then
469           echo "$me: Error: '$app' version == $inst_ver is too old" >&2
470           echo "       '$app' version >= $req_ver is required" >&2
471           ret=1
472         fi
473       fi
474     fi
475   done
476
477   return $ret
478 }
479
480 print_versions() {
481   echo "Program    Min_version"
482   echo "----------------------"
483   printf %s "$buildreq"
484   echo "----------------------"
485   # can't depend on column -t
486 }
487
488 use_libtool=0
489 # We'd like to use grep -E, to see if any of LT_INIT,
490 # AC_PROG_LIBTOOL, AM_PROG_LIBTOOL is used in configure.ac,
491 # but that's not portable enough (e.g., for Solaris).
492 grep '^[         ]*A[CM]_PROG_LIBTOOL' configure.ac >/dev/null \
493   && use_libtool=1
494 grep '^[         ]*LT_INIT' configure.ac >/dev/null \
495   && use_libtool=1
496 if test $use_libtool = 1; then
497   find_tool LIBTOOLIZE glibtoolize libtoolize
498 fi
499
500 # gnulib-tool requires at least automake and autoconf.
501 # If either is not listed, add it (with minimum version) as a prerequisite.
502 case $buildreq in
503   *automake*) ;;
504   *) buildreq="automake 1.9
505 $buildreq" ;;
506 esac
507 case $buildreq in
508   *autoconf*) ;;
509   *) buildreq="autoconf 2.59
510 $buildreq" ;;
511 esac
512
513 # When we can deduce that gnulib-tool will require patch,
514 # and when patch is not already listed as a prerequisite, add it, too.
515 if test ! -d "$local_gl_dir" \
516     || find "$local_gl_dir" -name '*.diff' -exec false {} +; then
517   :
518 else
519   case $buildreq in
520     *patch*) ;;
521     *) buildreq="patch -
522 $buildreq" ;;
523   esac
524 fi
525
526 if ! printf "$buildreq" | check_versions; then
527   echo >&2
528   if test -f README-prereq; then
529     echo "$0: See README-prereq for how to get the prerequisite programs" >&2
530   else
531     echo "$0: Please install the prerequisite programs" >&2
532   fi
533   exit 1
534 fi
535
536 echo "$0: Bootstrapping from checked-out $package sources..."
537
538 # See if we can use gnulib's git-merge-changelog merge driver.
539 if test -d .git && (git --version) >/dev/null 2>/dev/null ; then
540   if git config merge.merge-changelog.driver >/dev/null ; then
541     :
542   elif (git-merge-changelog --version) >/dev/null 2>/dev/null ; then
543     echo "$0: initializing git-merge-changelog driver"
544     git config merge.merge-changelog.name 'GNU-style ChangeLog merge driver'
545     git config merge.merge-changelog.driver 'git-merge-changelog %O %A %B'
546   else
547     echo "$0: consider installing git-merge-changelog from gnulib"
548   fi
549 fi
550
551
552 cleanup_gnulib() {
553   status=$?
554   rm -fr "$gnulib_path"
555   exit $status
556 }
557
558 git_modules_config () {
559   test -f .gitmodules && git config --file .gitmodules "$@"
560 }
561
562 gnulib_path=`git_modules_config submodule.gnulib.path`
563 test -z "$gnulib_path" && gnulib_path=gnulib
564
565 # Get gnulib files.
566
567 case ${GNULIB_SRCDIR--} in
568 -)
569   if git_modules_config submodule.gnulib.url >/dev/null; then
570     echo "$0: getting gnulib files..."
571     git submodule init || exit $?
572     git submodule update || exit $?
573
574   elif [ ! -d "$gnulib_path" ]; then
575     echo "$0: getting gnulib files..."
576
577     trap cleanup_gnulib 1 2 13 15
578
579     shallow=
580     git clone -h 2>&1 | grep -- --depth > /dev/null && shallow='--depth 2'
581     git clone $shallow git://git.sv.gnu.org/gnulib "$gnulib_path" ||
582       cleanup_gnulib
583
584     trap - 1 2 13 15
585   fi
586   GNULIB_SRCDIR=$gnulib_path
587   ;;
588 *)
589   # Use GNULIB_SRCDIR as a reference.
590   if test -d "$GNULIB_SRCDIR"/.git && \
591         git_modules_config submodule.gnulib.url >/dev/null; then
592     echo "$0: getting gnulib files..."
593     if git submodule -h|grep -- --reference > /dev/null; then
594       # Prefer the one-liner available in git 1.6.4 or newer.
595       git submodule update --init --reference "$GNULIB_SRCDIR" \
596         "$gnulib_path" || exit $?
597     else
598       # This fallback allows at least git 1.5.5.
599       if test -f "$gnulib_path"/gnulib-tool; then
600         # Since file already exists, assume submodule init already complete.
601         git submodule update || exit $?
602       else
603         # Older git can't clone into an empty directory.
604         rmdir "$gnulib_path" 2>/dev/null
605         git clone --reference "$GNULIB_SRCDIR" \
606           "$(git_modules_config submodule.gnulib.url)" "$gnulib_path" \
607           && git submodule init && git submodule update \
608           || exit $?
609       fi
610     fi
611     GNULIB_SRCDIR=$gnulib_path
612   fi
613   ;;
614 esac
615
616 if $bootstrap_sync; then
617   cmp -s "$0" "$GNULIB_SRCDIR/build-aux/bootstrap" || {
618     echo "$0: updating bootstrap and restarting..."
619     exec sh -c \
620       'cp "$1" "$2" && shift && exec "${CONFIG_SHELL-/bin/sh}" "$@"' \
621       -- "$GNULIB_SRCDIR/build-aux/bootstrap" \
622       "$0" "$@" --no-bootstrap-sync
623   }
624 fi
625
626 gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
627 <$gnulib_tool || exit $?
628
629 # Get translations.
630
631 download_po_files() {
632   subdir=$1
633   domain=$2
634   echo "$me: getting translations into $subdir for $domain..."
635   cmd=`printf "$po_download_command_format" "$domain" "$subdir"`
636   eval "$cmd" && return
637   # Fallback to HTTP.
638   cmd=`printf "$po_download_command_format2" "$subdir" "$domain"`
639   eval "$cmd"
640 }
641
642 # Mirror .po files to $po_dir/.reference and copy only the new
643 # or modified ones into $po_dir.  Also update $po_dir/LINGUAS.
644 # Note po files that exist locally only are left in $po_dir but will
645 # not be included in LINGUAS and hence will not be distributed.
646 update_po_files() {
647   # Directory containing primary .po files.
648   # Overwrite them only when we're sure a .po file is new.
649   po_dir=$1
650   domain=$2
651
652   # Mirror *.po files into this dir.
653   # Usually contains *.s1 checksum files.
654   ref_po_dir="$po_dir/.reference"
655
656   test -d $ref_po_dir || mkdir $ref_po_dir || return
657   download_po_files $ref_po_dir $domain \
658     && ls "$ref_po_dir"/*.po 2>/dev/null |
659       sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS" || return
660
661   langs=`cd $ref_po_dir && echo *.po|sed 's/\.po//g'`
662   test "$langs" = '*' && langs=x
663   for po in $langs; do
664     case $po in x) continue;; esac
665     new_po="$ref_po_dir/$po.po"
666     cksum_file="$ref_po_dir/$po.s1"
667     if ! test -f "$cksum_file" ||
668         ! test -f "$po_dir/$po.po" ||
669         ! $SHA1SUM -c --status "$cksum_file" \
670             < "$new_po" > /dev/null; then
671       echo "$me: updated $po_dir/$po.po..."
672       cp "$new_po" "$po_dir/$po.po" \
673           && $SHA1SUM < "$new_po" > "$cksum_file"
674     fi
675   done
676 }
677
678 case $SKIP_PO in
679 '')
680   if test -d po; then
681     update_po_files po $package || exit
682   fi
683
684   if test -d runtime-po; then
685     update_po_files runtime-po $package-runtime || exit
686   fi;;
687 esac
688
689 symlink_to_dir()
690 {
691   src=$1/$2
692   dst=${3-$2}
693
694   test -f "$src" && {
695
696     # If the destination directory doesn't exist, create it.
697     # This is required at least for "lib/uniwidth/cjk.h".
698     dst_dir=`dirname "$dst"`
699     if ! test -d "$dst_dir"; then
700       mkdir -p "$dst_dir"
701
702       # If we've just created a directory like lib/uniwidth,
703       # tell version control system(s) it's ignorable.
704       # FIXME: for now, this does only one level
705       parent=`dirname "$dst_dir"`
706       for dot_ig in x $vc_ignore; do
707         test $dot_ig = x && continue
708         ig=$parent/$dot_ig
709         insert_vc_ignore $ig `echo "$dst_dir"|sed 's,.*/,,'`
710       done
711     fi
712
713     if $copy; then
714       {
715         test ! -h "$dst" || {
716           echo "$me: rm -f $dst" &&
717           rm -f "$dst"
718         }
719       } &&
720       test -f "$dst" &&
721       cmp -s "$src" "$dst" || {
722         echo "$me: cp -fp $src $dst" &&
723         cp -fp "$src" "$dst"
724       }
725     else
726       # Leave any existing symlink alone, if it already points to the source,
727       # so that broken build tools that care about symlink times
728       # aren't confused into doing unnecessary builds.  Conversely, if the
729       # existing symlink's time stamp is older than the source, make it afresh,
730       # so that broken tools aren't confused into skipping needed builds.  See
731       # <http://lists.gnu.org/archive/html/bug-gnulib/2011-05/msg00326.html>.
732       test -h "$dst" &&
733       src_ls=`ls -diL "$src" 2>/dev/null` && set $src_ls && src_i=$1 &&
734       dst_ls=`ls -diL "$dst" 2>/dev/null` && set $dst_ls && dst_i=$1 &&
735       test "$src_i" = "$dst_i" &&
736       both_ls=`ls -dt "$src" "$dst"` &&
737       test "X$both_ls" = "X$dst$nl$src" || {
738         dot_dots=
739         case $src in
740         /*) ;;
741         *)
742           case /$dst/ in
743           *//* | */../* | */./* | /*/*/*/*/*/)
744              echo >&2 "$me: invalid symlink calculation: $src -> $dst"
745              exit 1;;
746           /*/*/*/*/)    dot_dots=../../../;;
747           /*/*/*/)      dot_dots=../../;;
748           /*/*/)        dot_dots=../;;
749           esac;;
750         esac
751
752         echo "$me: ln -fs $dot_dots$src $dst" &&
753         ln -fs "$dot_dots$src" "$dst"
754       }
755     fi
756   }
757 }
758
759 # NOTE: we have to be careful to run both autopoint and libtoolize
760 # before gnulib-tool, since gnulib-tool is likely to provide newer
761 # versions of files "installed" by these two programs.
762 # Then, *after* gnulib-tool (see below), we have to be careful to
763 # run autoreconf in such a way that it does not run either of these
764 # two just-pre-run programs.
765
766 # Import from gettext.
767 with_gettext=yes
768 grep '^[         ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \
769     with_gettext=no
770
771 if test $with_gettext = yes; then
772   # Released autopoint has the tendency to install macros that have been
773   # obsoleted in current gnulib, so run this before gnulib-tool.
774   echo "$0: $AUTOPOINT --force"
775   $AUTOPOINT --force || exit
776 fi
777
778 # Autoreconf runs aclocal before libtoolize, which causes spurious
779 # warnings if the initial aclocal is confused by the libtoolized
780 # (or worse out-of-date) macro directory.
781 # libtoolize 1.9b added the --install option; but we support back
782 # to libtoolize 1.5.22, where the install action was default.
783 if test $use_libtool = 1; then
784   install=
785   case $($LIBTOOLIZE --help) in
786     *--install*) install=--install ;;
787   esac
788   echo "running: $LIBTOOLIZE $install --copy"
789   $LIBTOOLIZE $install --copy
790 fi
791
792 version_controlled_file() {
793   dir=$1
794   file=$2
795   found=no
796   if test -d CVS; then
797     grep -F "/$file/" $dir/CVS/Entries 2>/dev/null |
798              grep '^/[^/]*/[0-9]' > /dev/null && found=yes
799   elif test -d .git; then
800     git rm -n "$dir/$file" > /dev/null 2>&1 && found=yes
801   elif test -d .svn; then
802     svn log -r HEAD "$dir/$file" > /dev/null 2>&1 && found=yes
803   else
804     echo "$me: no version control for $dir/$file?" >&2
805   fi
806   test $found = yes
807 }
808
809 # Import from gnulib.
810
811 gnulib_tool_options="\
812  --import\
813  --no-changelog\
814  --aux-dir $build_aux\
815  --doc-base $doc_base\
816  --lib $gnulib_name\
817  --m4-base $m4_base/\
818  --source-base $source_base/\
819  --tests-base $tests_base\
820  --local-dir $local_gl_dir\
821  $gnulib_tool_option_extras\
822 "
823 if test $use_libtool = 1; then
824   case "$gnulib_tool_options " in
825     *' --libtool '*) ;;
826     *) gnulib_tool_options="$gnulib_tool_options --libtool" ;;
827   esac
828 fi
829 echo "$0: $gnulib_tool $gnulib_tool_options --import ..."
830 $gnulib_tool $gnulib_tool_options --import $gnulib_modules &&
831
832 for file in $gnulib_files; do
833   symlink_to_dir "$GNULIB_SRCDIR" $file || exit
834 done
835
836 bootstrap_post_import_hook \
837   || { echo >&2 "$me: bootstrap_post_import_hook failed"; exit 1; }
838
839 # Remove any dangling symlink matching "*.m4" or "*.[ch]" in some
840 # gnulib-populated directories.  Such .m4 files would cause aclocal to fail.
841 # The following requires GNU find 4.2.3 or newer.  Considering the usual
842 # portability constraints of this script, that may seem a very demanding
843 # requirement, but it should be ok.  Ignore any failure, which is fine,
844 # since this is only a convenience to help developers avoid the relatively
845 # unusual case in which a symlinked-to .m4 file is git-removed from gnulib
846 # between successive runs of this script.
847 find "$m4_base" "$source_base" \
848   -depth \( -name '*.m4' -o -name '*.[ch]' \) \
849   -type l -xtype l -delete > /dev/null 2>&1
850
851 # Some systems (RHEL 5) are using ancient autotools, for which the
852 # --no-recursive option had not been invented.  Detect that lack and
853 # omit the option when it's not supported.  FIXME in 2017: remove this
854 # hack when RHEL 5 autotools are updated, or when they become irrelevant.
855 no_recursive=
856 case $($AUTORECONF --help) in
857   *--no-recursive*) no_recursive=--no-recursive;;
858 esac
859
860 # Tell autoreconf not to invoke autopoint or libtoolize; they were run above.
861 echo "running: AUTOPOINT=true LIBTOOLIZE=true " \
862     "$AUTORECONF --verbose --install $no_recursive -I $m4_base $ACLOCAL_FLAGS"
863 AUTOPOINT=true LIBTOOLIZE=true \
864     $AUTORECONF --verbose --install $no_recursive -I $m4_base $ACLOCAL_FLAGS \
865   || exit 1
866
867 # Get some extra files from gnulib, overriding existing files.
868 for file in $gnulib_extra_files; do
869   case $file in
870   */INSTALL) dst=INSTALL;;
871   build-aux/*) dst=$build_aux/`expr "$file" : 'build-aux/\(.*\)'`;;
872   *) dst=$file;;
873   esac
874   symlink_to_dir "$GNULIB_SRCDIR" $file $dst || exit
875 done
876
877 if test $with_gettext = yes; then
878   # Create gettext configuration.
879   echo "$0: Creating po/Makevars from po/Makevars.template ..."
880   rm -f po/Makevars
881   sed '
882     /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/
883     /^COPYRIGHT_HOLDER *=/s/=.*/= '"$COPYRIGHT_HOLDER"'/
884     /^MSGID_BUGS_ADDRESS *=/s|=.*|= '"$MSGID_BUGS_ADDRESS"'|
885     /^XGETTEXT_OPTIONS *=/{
886       s/$/ \\/
887       a\
888           '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+}
889     }
890   ' po/Makevars.template >po/Makevars || exit 1
891
892   # If the 'gettext' module is in use, grab the latest Makefile.in.in.
893   # If only the 'gettext-h' module is in use, assume autopoint already
894   # put the correct version of this file into place.
895   case $gnulib_modules in
896   *gettext-h*) ;;
897   *gettext*)
898     cp $GNULIB_SRCDIR/build-aux/po/Makefile.in.in po/Makefile.in.in || exit 1
899     ;;
900   esac
901
902   if test -d runtime-po; then
903     # Similarly for runtime-po/Makevars, but not quite the same.
904     rm -f runtime-po/Makevars
905     sed '
906       /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/
907       /^subdir *=.*/s/=.*/= runtime-po/
908       /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
909       /^XGETTEXT_OPTIONS *=/{
910         s/$/ \\/
911         a\
912             '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+}
913       }
914     ' po/Makevars.template >runtime-po/Makevars || exit 1
915
916     # Copy identical files from po to runtime-po.
917     (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po)
918   fi
919 fi
920
921 bootstrap_epilogue
922
923 echo "$0: done.  Now you can run './configure'."
924
925 # Local variables:
926 # eval: (add-hook 'write-file-hooks 'time-stamp)
927 # time-stamp-start: "scriptversion="
928 # time-stamp-format: "%:y-%02m-%02d.%02H"
929 # time-stamp-time-zone: "UTC"
930 # time-stamp-end: "; # UTC"
931 # End: