# Bootstrap configuration.                                   -*-shell-script-*-

# Copyright (C) 2018-2020 Free Software Foundation, Inc.

# GNU Make 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.

# GNU Make 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/>.

# Allow bootstrap to know that this is not a package
checkout_only_file=README.git

# Additional xgettext options to use.  Use "\\\newline" to break lines.
# Ensure that all our magical output macros are correctly marked as
# C (printf) format strings.
XGETTEXT_OPTIONS='\\\
 --from-code=UTF-8\\\
 --flag=_:1:pass-c-format\\\
 --flag=N_:1:pass-c-format\\\
 --flag=DB:2:c-format --flag=DBF:2:c-format --flag=DBS:2:c-format\\\
 --flag=O:3:c-format  --flag=OSN:3:c-format --flag=ONS:3:c-format\\\
 --flag=OS:3:c-format --flag=OSS:3:c-format --flag=OSSS:3:c-format\\\
 --flag=ON:3:c-format --flag=ONN:3:c-format\\\
'

# We manage our own .gitignore files
vc_ignore=

# Build prerequisites
buildreq="\
autoconf   2.69
automake   1.16.1
"

gnulib_name=libgnu
gnulib_files=doc/make-stds.texi

gnulib_modules="\
alloca
fdl
findprog-in
getloadavg
host-cpu-c-abi
strerror
make-glob"
