From ea5ee9f73d7b9d143d04e6b91020fe9dc7b18a40 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Sat, 2 Jul 2011 15:52:51 -0700 Subject: [PATCH] Rewrite local headers check to be more robust and informative. --- ChangeLog | 4 ++++ Makefile | 3 ++- scripts/check-local-headers.sh | 31 +++++++++++++++++-------------- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2ef1710..70c31cb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2011-07-02 Roland McGrath + * scripts/check-local-headers.sh: Rewritten using awk. + Match by word, not by line. Print error messages for matches. + * Makefile ($(objpfx)check-local-headers.out): Pass AWK in to it. + * Makerules [shlib-lds-flags empty]: ($(common-objpfx)libc_pic.opts): New target. ($(common-objpfx)libc_pic.os.clean): New target. diff --git a/Makefile b/Makefile index aac2557..287f671 100644 --- a/Makefile +++ b/Makefile @@ -284,7 +284,8 @@ endif endif $(objpfx)check-local-headers.out: scripts/check-local-headers.sh - scripts/check-local-headers.sh "$(includedir)" "$(objpfx)" > $@ + AWK='$(AWK)' scripts/check-local-headers.sh \ + "$(includedir)" "$(objpfx)" > $@ ifneq ($(PERL),no) installed-headers = argp/argp.h assert/assert.h catgets/nl_types.h \ diff --git a/scripts/check-local-headers.sh b/scripts/check-local-headers.sh index d15e9a4..b73078d 100755 --- a/scripts/check-local-headers.sh +++ b/scripts/check-local-headers.sh @@ -1,5 +1,5 @@ #! /bin/bash -# Copyright (C) 2005, 2007, 2009 Free Software Foundation, Inc. +# Copyright (C) 2005,2007,2009,2011 Free Software Foundation, Inc. # This file is part of the GNU C Library. # The GNU C Library is free software; you can redistribute it and/or @@ -23,18 +23,21 @@ objpfx="$2" # To avoid long paths. cd "$objpfx" - # Search all dependency files for file names in the include directory. # There are a few system headers we are known to use. -if fgrep "$includedir" */*.{o,os,oS}.d | -fgrep -v "$includedir/asm" | -fgrep -v "$includedir/linux" | -fgrep -v "$includedir/selinux" | -fgrep -v "$includedir/sys/capability.h" | -fgrep -v "$includedir/gd" | -fgrep -v "$includedir/nss3"; then - # If we found a match something is wrong. - exit 1 -fi - -exit 0 +exec ${AWK} -v includedir="$includedir" ' +BEGIN { + status = 0 + exclude = "^" includedir \ + "/(asm[-/]|linux/|selinux/|gd|nss3/|sys/capability\\.h)" +} +/^[^ ]/ && $1 ~ /.*:/ { obj = $1 } +{ + for (i = 1; i <= NF; ++i) { + if ($i ~ ("^" includedir) && $i !~ exclude) { + print "***", obj, "uses", $i + status = 1 + } + } +} +END { exit status }' */*.{o,os,oS}.d -- 2.7.4