# Copyright (C) 2002-2022 Free Software Foundation, Inc.
#
# This file 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 file 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 file.  If not, see <https://www.gnu.org/licenses/>.
#
# As a special exception to the GNU General Public License,
# this file may be distributed as part of a program that
# contains a configuration script generated by Autoconf, under
# the same distribution terms as the rest of that program.
#
# Generated by gnulib-tool.
#
# This file represents the specification of how gnulib-tool is used.
# It acts as a cache: It is written and read by gnulib-tool.
# In projects that use version control, this file is meant to be put under
# version control, like the configure.ac and various Makefile.am files.


# Specification in the form of a command-line invocation:
# gnulib-tool --import \
#  --lib=libgnu \
#  --source-base=import \
#  --m4-base=import/m4 \
#  --doc-base=doc \
#  --tests-base=tests \
#  --aux-dir=import/extra \
#  --no-conditional-dependencies \
#  --no-libtool \
#  --macro-prefix=gl \
#  --no-vc-files \
#  accept \
#  alloca \
#  bind \
#  canonicalize-lgpl \
#  chown \
#  connect \
#  count-one-bits \
#  dirent \
#  dirfd \
#  errno \
#  ffs \
#  fnmatch-gnu \
#  frexpl \
#  gendocs \
#  getcwd \
#  getline \
#  gettimeofday \
#  gitlog-to-changelog \
#  glob \
#  inet_ntop \
#  inttypes \
#  limits-h \
#  listen \
#  lstat \
#  memchr \
#  memmem \
#  mkdir \
#  mkdtemp \
#  mkostemp \
#  netdb \
#  pathmax \
#  rawmemchr \
#  readlink \
#  rename \
#  select \
#  setenv \
#  setsockopt \
#  signal-h \
#  socket \
#  strchrnul \
#  strerror_r-posix \
#  strstr \
#  strtok_r \
#  sys_stat \
#  sys_wait \
#  time_r \
#  unistd \
#  unsetenv \
#  update-copyright \
#  wchar \
#  wctype-h

# Specification in the form of a few gnulib-tool.m4 macro invocations:
gl_LOCAL_DIR([])
gl_MODULES([
  accept
  alloca
  bind
  canonicalize-lgpl
  chown
  connect
  count-one-bits
  dirent
  dirfd
  errno
  ffs
  fnmatch-gnu
  frexpl
  gendocs
  getcwd
  getline
  gettimeofday
  gitlog-to-changelog
  glob
  inet_ntop
  inttypes
  limits-h
  listen
  lstat
  memchr
  memmem
  mkdir
  mkdtemp
  mkostemp
  netdb
  pathmax
  rawmemchr
  readlink
  rename
  select
  setenv
  setsockopt
  signal-h
  socket
  strchrnul
  strerror_r-posix
  strstr
  strtok_r
  sys_stat
  sys_wait
  time_r
  unistd
  unsetenv
  update-copyright
  wchar
  wctype-h
])
gl_AVOID([])
gl_SOURCE_BASE([import])
gl_M4_BASE([import/m4])
gl_PO_BASE([])
gl_DOC_BASE([doc])
gl_TESTS_BASE([tests])
gl_LIB([libgnu])
gl_MAKEFILE_NAME([])
gl_MACRO_PREFIX([gl])
gl_PO_DOMAIN([])
gl_WITNESS_C_MACRO([])
gl_VC_FILES([false])
