This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch roland/sysd-rules created. glibc-2.17-809-ga97c50e
- From: roland at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 13 Jun 2013 22:11:15 -0000
- Subject: GNU C Library master sources branch roland/sysd-rules created. glibc-2.17-809-ga97c50e
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, roland/sysd-rules has been created
at a97c50e27aec1082cf889d01740ff0c4eb3648d0 (commit)
- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=a97c50e27aec1082cf889d01740ff0c4eb3648d0
commit a97c50e27aec1082cf889d01740ff0c4eb3648d0
Author: Roland McGrath <roland@hack.frob.com>
Date: Thu Jun 13 14:42:35 2013 -0700
Sort sysd-rules-patterns by descending pattern length.
diff --git a/ChangeLog b/ChangeLog
index 64798df..b952bea 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
2013-06-13 Roland McGrath <roland@hack.frob.com>
+ * scripts/sysd-rules.awk: Sort sysd_rules_patterns by descending
+ length of target pattern, then descending length of dependency pattern.
+ * configure.in (AWK): Require gawk 3.1.2 or newer.
+ * manual/install.texi (Tools for Compilation): Say that we do.
+ * configure: Regenerated.
+
* Makerules [inhibit-sysdep-asm] (check-inhibit-asm): Variable removed.
($(common-objpfx)sysd-rules): Replace shell logic with running ...
* scripts/sysd-rules.awk: ... this new script.
diff --git a/configure b/configure
index 8c538f5..09d8336 100755
--- a/configure
+++ b/configure
@@ -4993,7 +4993,7 @@ $as_echo_n "checking version of $AWK... " >&6; }
ac_prog_version=`$AWK --version 2>&1 | sed -n 's/^.*GNU Awk[^0-9]*\([0-9][0-9.]*\).*$/\1/p'`
case $ac_prog_version in
'') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
- [3-9].*)
+ 3.1.[2-9]*|3.[2-9]*|[4-9]*)
ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
*) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
diff --git a/configure.in b/configure.in
index bd90bac..8b11081 100644
--- a/configure.in
+++ b/configure.in
@@ -986,7 +986,7 @@ AC_CHECK_PROG_VER(SED, sed, --version,
SED=: aux_missing="$aux_missing sed")
AC_CHECK_PROG_VER(AWK, gawk, --version,
[GNU Awk[^0-9]*\([0-9][0-9.]*\)],
- [[3-9].*], critic_missing="$critic_missing gawk")
+ [3.1.[2-9]*|3.[2-9]*|[4-9]*], critic_missing="$critic_missing gawk")
AC_CHECK_TOOL(NM, nm, false)
diff --git a/manual/install.texi b/manual/install.texi
index e6c1baf..3608a11 100644
--- a/manual/install.texi
+++ b/manual/install.texi
@@ -379,10 +379,11 @@ understand all the tags used in the document, and the installation
mechanism for the info files is not present or works differently.
@item
-GNU @code{awk} 3.0, or higher
+GNU @code{awk} 3.1.2, or higher
-@code{Awk} is used in several places to generate files.
-@code{gawk} 3.0 is known to work.
+@code{awk} is used in several places to generate files.
+Some @code{gawk} extensions are used, including the @code{asorti}
+function, which was introduced in version 3.1.2 of @code{gawk}.
@item
Perl 5
diff --git a/scripts/sysd-rules.awk b/scripts/sysd-rules.awk
index 2fb044e..cc14334 100644
--- a/scripts/sysd-rules.awk
+++ b/scripts/sysd-rules.awk
@@ -14,6 +14,25 @@ BEGIN {
nsysdirs = split(config_sysdirs, sysdirs);
npatterns = split(sysd_rules_patterns, patterns);
+ # Each element of $(sysd-rules-patterns) is a pair TARGET:DEP.
+ # They are no in particular order. We need to sort them so that
+ # the longest TARGET is first, and, among elements with the same
+ # TARGET, the longest DEP is first.
+ for (i = 1; i <= npatterns; ++i) {
+ if (split(patterns[i], td, ":") != 2) {
+ msg = "bad sysd-rules-patterns element '" patterns[i] "'";
+ print msg > "/dev/stderr";
+ exit 2;
+ }
+ target_order = sprintf("%09d", npatterns + 1 - length(td[1]));
+ dep_order = sprintf("%09d", npatterns - length(td[2]));
+ sort_patterns[target_order SUBSEP dep_order] = patterns[i];
+ }
+ asorti(sort_patterns, map_patterns);
+ for (i in map_patterns) {
+ patterns[i] = sort_patterns[map_patterns[i]];
+ }
+
for (sysdir_idx = 1; sysdir_idx <= nsysdirs; ++sysdir_idx) {
dir = sysdirs[sysdir_idx];
if (dir !~ /^\//) dir = "$(..)" dir;
@@ -28,10 +47,7 @@ BEGIN {
o = suffixes[suffix_idx];
for (pattern_idx = 1; pattern_idx <= npatterns; ++pattern_idx) {
pattern = patterns[pattern_idx];
- if (split(pattern, td, ":") != 2) {
- print "bad sysd-rules-patterns element '" pattern "'" > "/dev/stderr";
- exit 2;
- }
+ split(pattern, td, ":");
target_pattern = td[1];
dep_pattern = td[2];
if (target_pattern == "%") {
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=7af1e6f796be800df49bcd6405601a610fa28468
commit 7af1e6f796be800df49bcd6405601a610fa28468
Author: Roland McGrath <roland@hack.frob.com>
Date: Thu Jun 13 15:10:48 2013 -0700
Rewrite sysd-rules generation using an awk script.
diff --git a/ChangeLog b/ChangeLog
index 494c919..64798df 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
2013-06-13 Roland McGrath <roland@hack.frob.com>
+ * Makerules [inhibit-sysdep-asm] (check-inhibit-asm): Variable removed.
+ ($(common-objpfx)sysd-rules): Replace shell logic with running ...
+ * scripts/sysd-rules.awk: ... this new script.
+ * sysdeps/mach/hurd/Makefile (inhibit-sysdep-asm): Use a regexp rather
+ than a glob-style pattern.
+
+2013-06-13 Roland McGrath <roland@hack.frob.com>
+
* posix/tst-waitid.c (do_test): Distinguish different instances of
stopped/continued in CHECK_SIGCHLD uses. Insert a delay between
sending SIGSTOP and calling waitpid to ensure SIGCHLD gets delivered
diff --git a/Makerules b/Makerules
index 2c25233..03eafb0 100644
--- a/Makerules
+++ b/Makerules
@@ -217,14 +217,9 @@ endif
# later directory would be chosen over a .c file in an earlier directory,
# which does not preserve the desired sysdeps ordering behavior.
-# System-dependent makefiles can put in `inhibit-sysdep-asm' wildcard
-# patterns matching sysdep directories whose assembly source files should
-# be suppressed.
-ifdef inhibit-sysdep-asm
-define check-inhibit-asm
-case $$sysdir in $(subst $(empty) ,|,$(inhibit-sysdep-asm))) asm= ;; esac;
-endef
-endif
+# System-dependent makefiles can put in `inhibit-sysdep-asm' regexps
+# matching sysdep directories whose assembly source files should be
+# suppressed.
-include $(common-objpfx)sysd-rules
ifneq ($(sysd-rules-sysdirs),$(config-sysdirs))
@@ -233,34 +228,16 @@ ifneq ($(sysd-rules-sysdirs),$(config-sysdirs))
sysd-rules-force = FORCE
FORCE:
endif
-$(common-objpfx)sysd-rules: $(common-objpfx)config.make $(..)Makerules \
+$(common-objpfx)sysd-rules: $(..)scripts/sysd-rules.awk \
+ $(common-objpfx)config.make $(..)Makerules \
$(sysdep-makefiles) $(sysdep-makeconfigs) \
$(sysd-rules-force)
-@rm -f $@T
- (echo 'sysd-rules-sysdirs := $(config-sysdirs)'; \
- for dir in $(config-sysdirs); do \
- case "$$dir" in \
- /*) ;; \
- *) dir="\$$(..)$$dir" ;; \
- esac; \
- asm='.S'; \
- $(check-inhibit-asm) \
- for o in $(all-object-suffixes); do \
- set $(subst :, ,$(sysd-rules-patterns)); \
- while [ $$# -ge 2 ]; do \
- t=$$1; shift; \
- d=$$1; shift; \
- v=$${t%%%}; [ x"$$v" = x ] || v="\$$($${v}CPPFLAGS)"; \
- for s in $$asm .c; do \
- echo "\$$(objpfx)$$t$$o: $$dir/$$d$$s \$$(before-compile)"; \
- echo " \$$(compile-command$$s) $$v"; \
- done; \
- done; \
- done; \
- echo "\$$(inst_includedir)/%.h: $$dir/%.h \$$(+force)"; \
- echo " \$$(do-install)"; \
- done; \
- echo 'sysd-rules-done = t') > $@T
+ LC_ALL=C $(AWK) -f $< > $@T \
+ -v all_object_suffixes='$(all-object-suffixes)' \
+ -v inhibit_sysdep_asm='$(inhibit-sysdep-asm)' \
+ -v sysd_rules_patterns='$(sysd-rules-patterns)' \
+ -v config_sysdirs='$(config-sysdirs)'
mv -f $@T $@
ifndef sysd-rules-done
diff --git a/scripts/sysd-rules.awk b/scripts/sysd-rules.awk
new file mode 100644
index 0000000..2fb044e
--- /dev/null
+++ b/scripts/sysd-rules.awk
@@ -0,0 +1,60 @@
+# This is a GAWK script to generate the sysd-rules file.
+# It does not read any input, but it requires that several variables
+# be set on its command line (using -v) to their makefile counterparts:
+# all_object_suffixes $(all-object-suffixes)
+# inhibit_sysdep_asm $(inhibit-sysdep-asm)
+# config_sysdirs $(config_sysdirs)
+# sysd_rules_patterns $(sysd-rules-patterns)
+
+BEGIN {
+ print "sysd-rules-sysdirs :=", config_sysdirs;
+
+ nsuffixes = split(all_object_suffixes, suffixes);
+ ninhibit_asm = split(inhibit_sysdep_asm, inhibit_asm);
+ nsysdirs = split(config_sysdirs, sysdirs);
+ npatterns = split(sysd_rules_patterns, patterns);
+
+ for (sysdir_idx = 1; sysdir_idx <= nsysdirs; ++sysdir_idx) {
+ dir = sysdirs[sysdir_idx];
+ if (dir !~ /^\//) dir = "$(..)" dir;
+ asm_rules = 1;
+ for (i = 1; i <= ninhibit_asm; ++i) {
+ if (dir ~ ("^.*sysdeps/" inhibit_asm[i] "$")) {
+ asm_rules = 0;
+ break;
+ }
+ }
+ for (suffix_idx = 1; suffix_idx <= nsuffixes; ++suffix_idx) {
+ o = suffixes[suffix_idx];
+ for (pattern_idx = 1; pattern_idx <= npatterns; ++pattern_idx) {
+ pattern = patterns[pattern_idx];
+ if (split(pattern, td, ":") != 2) {
+ print "bad sysd-rules-patterns element '" pattern "'" > "/dev/stderr";
+ exit 2;
+ }
+ target_pattern = td[1];
+ dep_pattern = td[2];
+ if (target_pattern == "%") {
+ command_suffix = "";
+ } else {
+ prefix = gensub(/%/, "", "", target_pattern);
+ command_suffix = " $(" prefix "CPPFLAGS)";
+ }
+ target = "$(objpfx)" target_pattern o ":";
+ if (asm_rules) {
+ dep = dir "/" dep_pattern ".S";
+ print target, dep, "$(before-compile)";
+ print "\t$(compile-command.S)" command_suffix;
+ }
+ dep = dir "/" dep_pattern ".c";
+ print target, dep, "$(before-compile)";
+ print "\t$(compile-command.c)" command_suffix;
+ }
+ }
+ print "$(inst_includedir)/%.h:", dir "/%.h", "$(+force)";
+ print "\t$(do-install)";
+ }
+
+ print "sysd-rules-done := t";
+ exit 0;
+}
diff --git a/sysdeps/mach/hurd/Makefile b/sysdeps/mach/hurd/Makefile
index 68aedb6..7ff9a92 100644
--- a/sysdeps/mach/hurd/Makefile
+++ b/sysdeps/mach/hurd/Makefile
@@ -28,7 +28,7 @@ includes += -I$(..)hurd -I$(common-objpfx)hurd/
# Do not use any assembly code from sysdeps/unix (and subdirectories).
# This bypasses all the system call stubs and uses any existing posix or
# generic C files instead.
-inhibit-sysdep-asm += unix*
+inhibit-sysdep-asm += unix.*
inhibit-unix-syscalls = yes
# Don't try to generate anything from the installed Unix system and its
-----------------------------------------------------------------------
hooks/post-receive
--
GNU C Library master sources