# Bootstrap configuration.

# Copyright (C) 2006-2015 Free Software Foundation, Inc.

# 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.

# gnulib modules used by this package.
gnulib_modules='
  argmatch assert calloc-posix close closeout config-h c-strcase
  configmake
  dirname
  error extensions fdl fopen-safer
  getopt-gnu
  gettext git-version-gen gitlog-to-changelog
  gpl-3.0 hash inttypes isnan javacomp-script
  javaexec-script ldexpl malloc-gnu
  mbswidth
  non-recursive-gnulib-prefix-hack
  obstack
  obstack-printf
  perror progname
  quote quotearg
  readme-release
  realloc-posix
  spawn-pipe stdbool stpcpy strdup-posix strerror strverscmp
  unistd unistd-safer unlink unlocked-io
  update-copyright unsetenv verify
  warnings
  xalloc
  xalloc-die
  xconcat-filename
  xmemdup0
  xstrndup

  fprintf-posix printf-posix snprintf-posix sprintf-posix
  vsnprintf-posix vsprintf-posix
'

# Additional xgettext options to use.  Use "\\\newline" to break lines.
XGETTEXT_OPTIONS=$XGETTEXT_OPTIONS'\\\
 --from-code=UTF-8\\\
 --flag=asprintf:2:c-format\\\
 --flag=complain:3:c-format\\\
 --flag=complain_indent:4:c-format\\\
 --flag=unexpected_end:2:c-format\\\
'
XGETTEXT_OPTIONS_RUNTIME=$XGETTEXT_OPTIONS'\\\
 --keyword=YY_ \\\
'

# Gettext supplies these files, but we don't need them since
# we don't have an intl subdirectory.
excluded_files='
    m4/glibc2.m4
    m4/intdiv0.m4
    m4/intl.m4
    m4/intldir.m4
    m4/intmax.m4
    m4/lcmessage.m4
    m4/lock.m4
    m4/longdouble.m4
    m4/signed.m4
    m4/uintmax_t.m4
    m4/ulonglong.m4
    m4/visibility.m4
'

gnulib_tool_option_extras='--symlink --makefile-name=gnulib.mk'

bootstrap_post_import_hook()
{
  # Massage lib/gnulib.mk before using it later in the bootstrapping process.
  build-aux/prefix-gnulib-mk --lib-name=$gnulib_name lib/$gnulib_mk

  # Ensure that ChangeLog exists, for automake.
  test -f ChangeLog || touch ChangeLog
}

bootstrap_epilogue()
{
  # Make sure we don't need src/bison, which usually doesn't exist at
  # the time of a bootstrap.
  touch src/parse-gram.[ch]

  perl -pi -e "s/\@PACKAGE\@/$package/g" README-release
}

# Keep our bootstrap script in sync with gnulib's.  If we ever need to
# maintain our own bootstrap script again, set this to false, remove
# the bootstrap entry from the file .x-update-copyright, and add any
# needed copyright years to the copyright statement in the bootstrap
# script.
bootstrap_sync=true
