1#!/bin/sh
2# Convenience script for regenerating all autogeneratable files that are
3# omitted from the version control repository. In particular, this script
4# also regenerates all aclocal.m4, config.h.in, Makefile.in, configure files
5# with new versions of autoconf or automake.
6#
7# This script requires autoconf-2.63 and automake-1.11 in the PATH.
8# It also requires either
9#   - the GNULIB_TOOL environment variable pointing to the gnulib-tool script
10#     in a gnulib checkout, or
11#   - the git program in the PATH and an internet connection.
12# It also requires
13#   - the gperf program.
14
15# Copyright (C) 2003-2009 Free Software Foundation, Inc.
16#
17# This program is free software: you can redistribute it and/or modify
18# it under the terms of the GNU General Public License as published by
19# the Free Software Foundation; either version 3 of the License, or
20# (at your option) any later version.
21#
22# This program is distributed in the hope that it will be useful,
23# but WITHOUT ANY WARRANTY; without even the implied warranty of
24# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
25# GNU General Public License for more details.
26#
27# You should have received a copy of the GNU General Public License
28# along with this program.  If not, see <http://www.gnu.org/licenses/>.
29
30# Usage: ./autogen.sh [--skip-gnulib]
31#
32# Usage from a git checkout:                 ./autogen.sh
33# This uses an up-to-date gnulib checkout.
34#
35# Usage from a released tarball:             ./autogen.sh --skip-gnulib
36# This does not use a gnulib checkout.
37
38skip_gnulib=false
39while :; do
40  case "$1" in
41    --skip-gnulib) skip_gnulib=true; shift;;
42    *) break ;;
43  esac
44done
45
46if test $skip_gnulib = false; then
47  # texinfo.tex
48  # The most recent snapshot of it is available in the gnulib repository.
49  # But this is a snapshot, with all possible dangers.
50  # A stable release of it is available through "automake --add-missing --copy",
51  # but that is too old (does not support @arrow{}). So take the version which
52  # matches the latest stable texinfo release.
53  if test ! -f build-aux/texinfo.tex; then
54    { wget -q --timeout=5 -O build-aux/texinfo.tex.tmp 'http://cvs.savannah.gnu.org/viewvc/*checkout*/texinfo/doc/texinfo.tex?root=texinfo&pathrev=texinfo_4_13' \
55        && mv build-aux/texinfo.tex.tmp build-aux/texinfo.tex; \
56    } || rm -f build-aux/texinfo.tex.tmp
57  fi
58  if test -z "$GNULIB_TOOL"; then
59    # Check out gnulib in a subdirectory 'gnulib'.
60    if test -d gnulib; then
61      (cd gnulib && git pull)
62    else
63      git clone git://git.savannah.gnu.org/gnulib.git
64    fi
65    # Now it should contain a gnulib-tool.
66    if test -f gnulib/gnulib-tool; then
67      GNULIB_TOOL=`pwd`/gnulib/gnulib-tool
68    else
69      echo "** warning: gnulib-tool not found" 1>&2
70    fi
71  fi
72  # Skip the gnulib-tool step if gnulib-tool was not found.
73  if test -n "$GNULIB_TOOL"; then
74    if test -f m4/gnulib-cache.m4; then
75      mv -f m4/gnulib-cache.m4 m4/gnulib-cache.m4~
76    fi
77    if test -f lib/Makefile.gnulib; then
78      mv -f lib/Makefile.gnulib lib/Makefile.gnulib~
79    fi
80    GNULIB_MODULES='
81      unitypes
82      unistr/base
83      unistr/u8-check
84      unistr/u8-chr
85      unistr/u8-cmp
86      unistr/u8-cmp2
87      unistr/u8-cpy
88      unistr/u8-cpy-alloc
89      unistr/u8-endswith
90      unistr/u8-mblen
91      unistr/u8-mbsnlen
92      unistr/u8-mbtouc
93      unistr/u8-mbtoucr
94      unistr/u8-mbtouc-unsafe
95      unistr/u8-move
96      unistr/u8-next
97      unistr/u8-prev
98      unistr/u8-set
99      unistr/u8-startswith
100      unistr/u8-stpcpy
101      unistr/u8-stpncpy
102      unistr/u8-strcat
103      unistr/u8-strchr
104      unistr/u8-strcmp
105      unistr/u8-strcoll
106      unistr/u8-strcpy
107      unistr/u8-strcspn
108      unistr/u8-strdup
109      unistr/u8-strlen
110      unistr/u8-strmblen
111      unistr/u8-strmbtouc
112      unistr/u8-strncat
113      unistr/u8-strncmp
114      unistr/u8-strncpy
115      unistr/u8-strnlen
116      unistr/u8-strpbrk
117      unistr/u8-strrchr
118      unistr/u8-strspn
119      unistr/u8-strstr
120      unistr/u8-strtok
121      unistr/u8-to-u16
122      unistr/u8-to-u32
123      unistr/u8-uctomb
124      unistr/u16-check
125      unistr/u16-chr
126      unistr/u16-cmp
127      unistr/u16-cmp2
128      unistr/u16-cpy
129      unistr/u16-cpy-alloc
130      unistr/u16-endswith
131      unistr/u16-mblen
132      unistr/u16-mbsnlen
133      unistr/u16-mbtouc
134      unistr/u16-mbtoucr
135      unistr/u16-mbtouc-unsafe
136      unistr/u16-move
137      unistr/u16-next
138      unistr/u16-prev
139      unistr/u16-set
140      unistr/u16-startswith
141      unistr/u16-stpcpy
142      unistr/u16-stpncpy
143      unistr/u16-strcat
144      unistr/u16-strchr
145      unistr/u16-strcmp
146      unistr/u16-strcoll
147      unistr/u16-strcpy
148      unistr/u16-strcspn
149      unistr/u16-strdup
150      unistr/u16-strlen
151      unistr/u16-strmblen
152      unistr/u16-strmbtouc
153      unistr/u16-strncat
154      unistr/u16-strncmp
155      unistr/u16-strncpy
156      unistr/u16-strnlen
157      unistr/u16-strpbrk
158      unistr/u16-strrchr
159      unistr/u16-strspn
160      unistr/u16-strstr
161      unistr/u16-strtok
162      unistr/u16-to-u32
163      unistr/u16-to-u8
164      unistr/u16-uctomb
165      unistr/u32-check
166      unistr/u32-chr
167      unistr/u32-cmp
168      unistr/u32-cmp2
169      unistr/u32-cpy
170      unistr/u32-cpy-alloc
171      unistr/u32-endswith
172      unistr/u32-mblen
173      unistr/u32-mbsnlen
174      unistr/u32-mbtouc
175      unistr/u32-mbtoucr
176      unistr/u32-mbtouc-unsafe
177      unistr/u32-move
178      unistr/u32-next
179      unistr/u32-prev
180      unistr/u32-set
181      unistr/u32-startswith
182      unistr/u32-stpcpy
183      unistr/u32-stpncpy
184      unistr/u32-strcat
185      unistr/u32-strchr
186      unistr/u32-strcmp
187      unistr/u32-strcoll
188      unistr/u32-strcpy
189      unistr/u32-strcspn
190      unistr/u32-strdup
191      unistr/u32-strlen
192      unistr/u32-strmblen
193      unistr/u32-strmbtouc
194      unistr/u32-strncat
195      unistr/u32-strncmp
196      unistr/u32-strncpy
197      unistr/u32-strnlen
198      unistr/u32-strpbrk
199      unistr/u32-strrchr
200      unistr/u32-strspn
201      unistr/u32-strstr
202      unistr/u32-strtok
203      unistr/u32-to-u16
204      unistr/u32-to-u8
205      unistr/u32-uctomb
206      uniconv/base
207      uniconv/u8-conv-from-enc
208      uniconv/u8-conv-to-enc
209      uniconv/u8-strconv-from-enc
210      uniconv/u8-strconv-from-locale
211      uniconv/u8-strconv-to-enc
212      uniconv/u8-strconv-to-locale
213      uniconv/u16-conv-from-enc
214      uniconv/u16-conv-to-enc
215      uniconv/u16-strconv-from-enc
216      uniconv/u16-strconv-from-locale
217      uniconv/u16-strconv-to-enc
218      uniconv/u16-strconv-to-locale
219      uniconv/u32-conv-from-enc
220      uniconv/u32-conv-to-enc
221      uniconv/u32-strconv-from-enc
222      uniconv/u32-strconv-from-locale
223      uniconv/u32-strconv-to-enc
224      uniconv/u32-strconv-to-locale
225      unistdio/base
226      unistdio/u8-asnprintf
227      unistdio/u8-asprintf
228      unistdio/u8-snprintf
229      unistdio/u8-sprintf
230      unistdio/u8-u8-asnprintf
231      unistdio/u8-u8-asprintf
232      unistdio/u8-u8-snprintf
233      unistdio/u8-u8-sprintf
234      unistdio/u8-u8-vasnprintf
235      unistdio/u8-u8-vasprintf
236      unistdio/u8-u8-vsnprintf
237      unistdio/u8-u8-vsprintf
238      unistdio/u8-vasnprintf
239      unistdio/u8-vasprintf
240      unistdio/u8-vsnprintf
241      unistdio/u8-vsprintf
242      unistdio/u16-asnprintf
243      unistdio/u16-asprintf
244      unistdio/u16-snprintf
245      unistdio/u16-sprintf
246      unistdio/u16-u16-asnprintf
247      unistdio/u16-u16-asprintf
248      unistdio/u16-u16-snprintf
249      unistdio/u16-u16-sprintf
250      unistdio/u16-u16-vasnprintf
251      unistdio/u16-u16-vasprintf
252      unistdio/u16-u16-vsnprintf
253      unistdio/u16-u16-vsprintf
254      unistdio/u16-vasnprintf
255      unistdio/u16-vasprintf
256      unistdio/u16-vsnprintf
257      unistdio/u16-vsprintf
258      unistdio/u32-asnprintf
259      unistdio/u32-asprintf
260      unistdio/u32-snprintf
261      unistdio/u32-sprintf
262      unistdio/u32-u32-asnprintf
263      unistdio/u32-u32-asprintf
264      unistdio/u32-u32-snprintf
265      unistdio/u32-u32-sprintf
266      unistdio/u32-u32-vasnprintf
267      unistdio/u32-u32-vasprintf
268      unistdio/u32-u32-vsnprintf
269      unistdio/u32-u32-vsprintf
270      unistdio/u32-vasnprintf
271      unistdio/u32-vasprintf
272      unistdio/u32-vsnprintf
273      unistdio/u32-vsprintf
274      unistdio/ulc-asnprintf
275      unistdio/ulc-asprintf
276      unistdio/ulc-fprintf
277      unistdio/ulc-snprintf
278      unistdio/ulc-sprintf
279      unistdio/ulc-vasnprintf
280      unistdio/ulc-vasprintf
281      unistdio/ulc-vfprintf
282      unistdio/ulc-vsnprintf
283      unistdio/ulc-vsprintf
284      uniname/base
285      uniname/uniname
286      unictype/base
287      unictype/bidicategory-all
288      unictype/block-all
289      unictype/category-all
290      unictype/combining-class
291      unictype/ctype-alnum
292      unictype/ctype-alpha
293      unictype/ctype-blank
294      unictype/ctype-cntrl
295      unictype/ctype-digit
296      unictype/ctype-graph
297      unictype/ctype-lower
298      unictype/ctype-print
299      unictype/ctype-punct
300      unictype/ctype-space
301      unictype/ctype-upper
302      unictype/ctype-xdigit
303      unictype/decimal-digit
304      unictype/digit
305      unictype/mirror
306      unictype/numeric
307      unictype/property-all
308      unictype/scripts-all
309      unictype/syntax-c-ident
310      unictype/syntax-c-whitespace
311      unictype/syntax-java-ident
312      unictype/syntax-java-whitespace
313      uniwidth/base
314      uniwidth/u8-strwidth
315      uniwidth/u8-width
316      uniwidth/u16-strwidth
317      uniwidth/u16-width
318      uniwidth/u32-strwidth
319      uniwidth/u32-width
320      uniwidth/width
321      uniwbrk/base
322      uniwbrk/u8-wordbreaks
323      uniwbrk/u16-wordbreaks
324      uniwbrk/u32-wordbreaks
325      uniwbrk/ulc-wordbreaks
326      uniwbrk/wordbreak-property
327      unilbrk/base
328      unilbrk/u8-possible-linebreaks
329      unilbrk/u8-width-linebreaks
330      unilbrk/u16-possible-linebreaks
331      unilbrk/u16-width-linebreaks
332      unilbrk/u32-possible-linebreaks
333      unilbrk/u32-width-linebreaks
334      unilbrk/ulc-possible-linebreaks
335      unilbrk/ulc-width-linebreaks
336      uninorm/base
337      uninorm/canonical-decomposition
338      uninorm/composition
339      uninorm/decomposition
340      uninorm/filter
341      uninorm/nfc
342      uninorm/nfd
343      uninorm/nfkc
344      uninorm/nfkd
345      uninorm/u8-normalize
346      uninorm/u8-normcmp
347      uninorm/u8-normcoll
348      uninorm/u8-normxfrm
349      uninorm/u16-normalize
350      uninorm/u16-normcmp
351      uninorm/u16-normcoll
352      uninorm/u16-normxfrm
353      uninorm/u32-normalize
354      uninorm/u32-normcmp
355      uninorm/u32-normcoll
356      uninorm/u32-normxfrm
357      unicase/base
358      unicase/empty-prefix-context
359      unicase/empty-suffix-context
360      unicase/locale-language
361      unicase/tolower
362      unicase/totitle
363      unicase/toupper
364      unicase/u8-casecmp
365      unicase/u8-casecoll
366      unicase/u8-casefold
367      unicase/u8-casexfrm
368      unicase/u8-ct-casefold
369      unicase/u8-ct-tolower
370      unicase/u8-ct-totitle
371      unicase/u8-ct-toupper
372      unicase/u8-is-cased
373      unicase/u8-is-casefolded
374      unicase/u8-is-lowercase
375      unicase/u8-is-titlecase
376      unicase/u8-is-uppercase
377      unicase/u8-tolower
378      unicase/u8-totitle
379      unicase/u8-toupper
380      unicase/u16-casecmp
381      unicase/u16-casecoll
382      unicase/u16-casefold
383      unicase/u16-casexfrm
384      unicase/u16-ct-casefold
385      unicase/u16-ct-tolower
386      unicase/u16-ct-totitle
387      unicase/u16-ct-toupper
388      unicase/u16-is-cased
389      unicase/u16-is-casefolded
390      unicase/u16-is-lowercase
391      unicase/u16-is-titlecase
392      unicase/u16-is-uppercase
393      unicase/u16-tolower
394      unicase/u16-totitle
395      unicase/u16-toupper
396      unicase/u32-casecmp
397      unicase/u32-casecoll
398      unicase/u32-casefold
399      unicase/u32-casexfrm
400      unicase/u32-ct-casefold
401      unicase/u32-ct-tolower
402      unicase/u32-ct-totitle
403      unicase/u32-ct-toupper
404      unicase/u32-is-cased
405      unicase/u32-is-casefolded
406      unicase/u32-is-lowercase
407      unicase/u32-is-titlecase
408      unicase/u32-is-uppercase
409      unicase/u32-tolower
410      unicase/u32-totitle
411      unicase/u32-toupper
412      unicase/ulc-casecmp
413      unicase/ulc-casecoll
414      unicase/ulc-casexfrm
415      relocatable-lib-lgpl
416    '
417    $GNULIB_TOOL --lib=libunistring --source-base=lib --m4-base=gnulib-m4 --tests-base=tests \
418      --with-tests --lgpl --makefile-name=Makefile.gnulib --libtool --local-dir=gnulib-local \
419      --import $GNULIB_MODULES
420    # Change lib/unistr.h to be usable standalone.
421    sed -e 's/ifdef GNULIB_[A-Za-z0-9_]*/if 1/' -e 's/defined GNULIB_[A-Za-z0-9_]*/1/g' \
422        -e 's/HAVE_INLINE/UNISTRING_HAVE_INLINE/g' \
423        < lib/unistr.h \
424        > lib/unistr.h.tmp \
425    && mv lib/unistr.h.tmp lib/unistr.h
426    # Change lib/unictype.h and lib/uninorm.h for shared libraries on Woe32 systems.
427    sed -e 's/extern const uc_general_category_t UC_/extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_/' \
428        -e 's/extern const uc_property_t UC_/extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_/' \
429        < lib/unictype.h \
430        > lib/unictype.h.tmp \
431    && mv lib/unictype.h.tmp lib/unictype.h
432    sed -e 's/extern const struct unicode_normalization_form /extern LIBUNISTRING_DLL_VARIABLE const struct unicode_normalization_form /' \
433        < lib/uninorm.h \
434        > lib/uninorm.h.tmp \
435    && mv lib/uninorm.h.tmp lib/uninorm.h
436    sed -e 's/extern const casing_/extern LIBUNISTRING_DLL_VARIABLE const casing_/' \
437        < lib/unicase.h \
438        > lib/unicase.h.tmp \
439    && mv lib/unicase.h.tmp lib/unicase.h
440    $GNULIB_TOOL --copy-file build-aux/config.guess; chmod a+x build-aux/config.guess
441    $GNULIB_TOOL --copy-file build-aux/config.sub;   chmod a+x build-aux/config.sub
442    # If we got no texinfo.tex so far, take the snapshot from gnulib.
443    if test ! -f build-aux/texinfo.tex; then
444      $GNULIB_TOOL --copy-file build-aux/texinfo.tex build-aux/texinfo.tex
445    fi
446  fi
447fi
448
449build-aux/fixaclocal aclocal -I m4 -I gnulib-m4
450autoconf
451autoheader && touch config.h.in
452automake --add-missing --copy
453