# Copyright (C) 2016-2021 Simon Josefsson
# Copyright (C) 2016,2018 Tim Rühsen

# 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 library name
source_base=lib/gl
local_gl_dir=$source_base
tests_base=tests-gl
gnulib_name=libgnu
gnulib_tool_option_extras="--lgpl=2 --without-tests --no-vc-files"
checkout_only_file=.gitignore

gnulib_modules="
c-ctype
git-version-gen
gitlog-to-changelog
intprops
lib-msvc-compat
lib-symbol-versions
lib-symbol-visibility
manywarnings
minmax
readme-release
stdint
strverscmp
update-copyright
valgrind-tests
"

# Build prerequisites
buildreq="\
autoconf   2.64
automake   1.13
git        1.4.4
bison      -
make       -
"

GTKDOCIZE=$(which gtkdocize 2>/dev/null)
if test $? -ne 0; then
  echo "No gtk-doc support found. You can't build the docs."
  # rm because gtk-doc.make might be a link to a protected file
  rm -f gtk-doc.make 2>/dev/null
  echo "EXTRA_DIST =" >gtk-doc.make
  echo "CLEANFILES =" >>gtk-doc.make
  GTKDOCIZE=""
else
  $GTKDOCIZE --copy
fi

bootstrap_post_import_hook ()
{
  # Automake requires that ChangeLog exist.
  touch ChangeLog || return 1
}
