# Bootstrap configuration.

# Copyright (C) 2021-2026 Simon Josefsson
# Copyright (C) 2006-2023 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 <https://www.gnu.org/licenses/>.

GNULIB_REVISION=aa527567a732fbb36d21d576fcd1a2c8486c812d

gnulib_name=libgl
source_base=gl
tests_base=gltests
COPYRIGHT_HOLDER='Simon Josefsson'
checkout_only_file=.gitignore

# gnulib modules used by this package.
gnulib_modules="
  autobuild
  close
  connect
  error
  getaddrinfo
  getopt-gnu
  getpass-gnu
  git-version-gen
  gitlog-to-changelog
  manywarnings
  netdb-h
  netinet_in-h
  pmccabe2html
  poll
  progname
  quote
  readline
  readme-release
  recv
  shutdown
  socket
  striconv
  strtok_r
  sys_time-h
  unistd-h
  update-copyright
  valgrind-tests
  vasprintf
  version-etc
  version-stamp
  xalloc
"

libgnulib_modules="
  base64
  c-ctype
  crypto/gc
  crypto/gc-hmac-md5
  crypto/gc-hmac-sha1
  crypto/gc-hmac-sha256
  crypto/gc-md5
  crypto/gc-pbkdf2
  crypto/gc-random
  crypto/gc-sha1
  crypto/gc-sha256
  getline
  gettext-h
  gss-extra
  lib-msvc-compat
  lib-symbol-versions
  lib-symbol-visibility
  memmem
  memxor
  minmax
  strndup
  strnlen
  strverscmp
  vasprintf
"

# Additional xgettext options to use.  Use "\\\newline" to break lines.
XGETTEXT_OPTIONS=$XGETTEXT_OPTIONS'\\\
 --from-code=UTF-8\\\
 --flag=asprintf:2:c-format --flag=vasprintf:2:c-format\\\
 --flag=asnprintf:3:c-format --flag=vasnprintf:3:c-format\\\
 --flag=wrapf:1:c-format\\\
'

# If "AM_GNU_GETTEXT(external" or "AM_GNU_GETTEXT([external]"
# appears in configure.ac, exclude some unnecessary files.
# Without grep's -E option (not portable enough, pre-configure),
# the following test is ugly.  Also, this depends on the existence
# of configure.ac, not the obsolescent-named configure.in.  But if
# you're using this infrastructure, you should care about such things.

gettext_external=0
grep '^[	 ]*AM_GNU_GETTEXT(external\>' configure.ac > /dev/null &&
  gettext_external=1
grep '^[	 ]*AM_GNU_GETTEXT(\[external\]' configure.ac > /dev/null &&
  gettext_external=1

if test $gettext_external = 1; then
  # 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/lcmessage.m4
      m4/lock.m4
      m4/printf-posix.m4
      m4/size_max.m4
      m4/uintmax_t.m4
      m4/ulonglong.m4
      m4/visibility.m4
      m4/xsize.m4
  '
fi

# The following --avoid's were added to fix Mingw.  The problem was
# that they ended up in gl/ but not lib/gl and lib/ called the
# function but not in any way that needed replacement.  Thus it caused
# a rpl_fopen or rpl_strdup link failure.
#
# fopen: gnulib replaces it because 1) to read /dev/null properly, and
# 2) to handle "x" and "e" modifiers.  We use neither.
# strdup: gnulib replaces it to get better errno.

gnulib_tool_option_extras="--without-tests --no-conditional-dependencies --avoid=fopen --avoid=fopen-gnu --avoid=strdup-posix"

# Build prerequisites
buildreq="\
autoconf   2.64
automake   1.13
git        1.5.5
tar        -
"

# Prime po/*.po from fall-back copy stored in git.
for po_in in po/*.po.in; do
    po=$(echo $po_in | sed 's/.in//')
    test -f $po || cp -v $po_in $po
done
ls po/*.po | sed 's|.*/||; s|\.po$||' > po/LINGUAS

bootstrap_post_import_hook ()
{
  ${GNULIB_SRCDIR}/gnulib-tool --import --lib=liblgl --source-base=lib/gl --local-dir=lib/gl --m4-base=lib/m4 --doc-base=doc --aux-dir=build-aux --tests-base=lib/gltests --lgpl=2 --no-conditional-dependencies --libtool --macro-prefix=lgl --without-tests $libgnulib_modules

  patch -d m4 < gl/0001-Fix-export-symbols-and-export-symbols-regex-support-.patch

  touch ChangeLog

  if ! gtkdocize; then
    echo "warning: gtkdocize missing -- gtk-doc manual will be missing"
    # rm because gtk-doc.make might be a link to a protected file
    rm -f gtk-doc.make
    echo "EXTRA_DIST =" > gtk-doc.make
    echo "CLEANFILES =" >> gtk-doc.make
  fi

  rm -rf gltests
}

bootstrap_epilogue() {
  perl -pi -e "s/\@PACKAGE\@/$package/g" README-release
  perl -pi -e "s/X.Y/X.Y.Z/g" README-release

    # Run automake again.  It seems the first time ./bootstrap runs
    # automake, it will not add some files to am__DIST_COMMON in
    # top-level Makefile.in, but on subsequent runs (for example
    # through autoreconf, which is triggered on 'make release') it
    # will add the files.  The missing files include
    # build-aux/depcomp, build-aux/mdate-sh, build-aux/texinfo.texi,
    # and build-aux/ylwrap.  We want the am__DIST_COMMON value to be
    # identical so that "make dist" and "make release" tarballs are
    # identical and reproducible.
    # │ │ -	build-aux/config.rpath build-aux/config.sub \
    # │ │ -	build-aux/install-sh build-aux/ltmain.sh build-aux/missing
    # │ │ +	build-aux/config.rpath build-aux/config.sub build-aux/depcomp \
    # │ │ +	build-aux/install-sh build-aux/ltmain.sh build-aux/mdate-sh \
    # │ │ +	build-aux/missing build-aux/texinfo.tex
    ${AUTOMAKE=automake} --no-force
}
