summaryrefslogtreecommitdiff
path: root/config/argz.mk
diff options
context:
space:
mode:
authorJim Meyering <meyering@redhat.com>2008-06-03 11:42:12 +0200
committerJim Meyering <meyering@redhat.com>2008-06-05 20:02:00 +0200
commiteb61774da0aea434755a8684e2bb2f6854bd4e1c (patch)
tree5cfcbace9724908b74284dbd4b29f91571112686 /config/argz.mk
parent2b2986f1776a2850832d60e699b5231d54aa2d01 (diff)
downloadgnulib-eb61774da0aea434755a8684e2bb2f6854bd4e1c.tar.gz
generate argz.c and argz.in.h from glibc sources
* config/argz.mk: New file, with rules to generate the two files. * modules/argz (Depends-on): Add mempcpy, stpcpy, strndup and strnlen. Suggested by David Lutterkort. * m4/argz.m4: Require AC_C_RESTRICT. Check only for the existence of one function, argz_replace, since it seems to have been added most recently. Also, remove the side effect of defining HAVE_ARGZ_* symbols. * lib/argz.c: Now generated directly from glibc sources, rather than imported from libtool. Includes the following additional functions: argz_extract, argz_create, argz_delete, str_append, argz_replace. * lib/argz.in.h: Likewise. * config/srclist.txt: Reflect that argz* files are no longer pulled from libtool.
Diffstat (limited to 'config/argz.mk')
-rw-r--r--config/argz.mk63
1 files changed, 63 insertions, 0 deletions
diff --git a/config/argz.mk b/config/argz.mk
new file mode 100644
index 0000000000..14b00fdde0
--- /dev/null
+++ b/config/argz.mk
@@ -0,0 +1,63 @@
+# Generate argz.c and argz.in.h from glibc sources.
+
+glibc_dir = ../glibc
+glibc_dir = /mirror/d/glibc
+
+argz_names = \
+ append addsep ctsep insert next stringify count \
+ extract create delete replace
+argz_files = $(patsubst %, $(glibc_dir)/string/argz-%.c, $(argz_names))
+
+define print-header
+ printf '%s\n' \
+"/* Functions for dealing with '\0' separated arg vectors." \
+" Copyright (C) 1995-1998, 2000-2002, 2006 Free Software Foundation, Inc."\
+" This file is part of the GNU C Library." \
+"" \
+" 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 2, 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, write to the Free Software Foundation," \
+" Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */"\
+"" \
+"#include <config.h>" \
+"" \
+"#include <argz.h>" \
+"#include <errno.h>" \
+"#include <stdlib.h>" \
+"#include <string.h>"
+endef
+
+targets = argz.c argz.in.h
+
+all: $(targets)
+
+argz.c: $(argz_files)
+ ($(print-header); \
+ for i in $^; do \
+ perl -pe 's/__(argz_|st|mem)/$$1/g' $$i \
+ | perl -0x0 -pe 's,/\*(.|\n)+?\*/\n,,' \
+ | grep -vE '^(#include|INTDEF|weak_alias|libc_hidden_def)'; \
+ done) > $@-t && mv $@-t $@
+
+argz.in.h: $(glibc_dir)/string/argz.h
+ perl -pe 's/__(restrict|const|st|mem)/$$1/g;' \
+ -e 's/\s*__THROW//;' \
+ -e 's/\s*__attribute_pure__//;' \
+ $< \
+ | perl -ne \
+ '/^(#include <features\.h>|__(?:BEGIN|END)_DECLS)/ or print' \
+ | perl -0x3b -pe 's/extern \S+ \*?__argz_(.|\n)*?\)\n*;//' \
+ | perl -pe 's/__(argz_next)/$$1/g;' \
+ > $@-t && mv $@-t $@
+
+clean:
+ rm -f $(targets)