summaryrefslogtreecommitdiff
path: root/mcon/U/fieldn.U
diff options
context:
space:
mode:
Diffstat (limited to 'mcon/U/fieldn.U')
-rw-r--r--mcon/U/fieldn.U82
1 files changed, 82 insertions, 0 deletions
diff --git a/mcon/U/fieldn.U b/mcon/U/fieldn.U
new file mode 100644
index 0000000..3c71a31
--- /dev/null
+++ b/mcon/U/fieldn.U
@@ -0,0 +1,82 @@
+?RCS: $Id: fieldn.U 167 2013-05-08 17:58:00Z rmanfredi $
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic License,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic License; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Findhdr.U,v $
+?RCS: Revision 3.0.1.2 1994/10/29 15:53:08 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 14:03:56 ram
+?RCS: patch23: cppminus must be after other cppflags, not before
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:04:54 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:fieldn cppfilter: grep test tr rm cat startsh \
+ cppstdin cppminus osname
+?MAKE: -pick add $@ %<
+?S:fieldn:
+?S: This variable is used internally by Configure. It contains the position
+?S: of the included file name in cpp output. That is to say, when cpp
+?S: pre-processes a #include <file> line, it replaces it by a # line which
+?S: contains the original position in the input file and the full name of
+?S: included file, between "quotes".
+?S:.
+?S:cppfilter:
+?S: This variable is used internally by Configure. It either contains
+?S: nothing or a shell piping stage to translate path components into "/".
+?S: It is meant to be used as "... | $cppfilter $grep ..." i.e. without any
+?S: explicit "|" character following it.
+?S:.
+?F:!fieldn
+?T:pos testaccess cline
+: determine filename position in cpp output
+echo " "
+echo "Computing filename position in cpp output for #include directives..." >&4
+echo '#include <stdio.h>' > foo.c
+case "$osname" in
+vos)
+ testaccess=-e
+?X: VOS: path component separator is >
+ cppfilter="tr '\\\\>' '/' |"
+ ;;
+*)
+ testaccess=-r
+ cppfilter=''
+ ;;
+esac
+$cat >fieldn <<EOF
+$startsh
+$cppstdin $cppminus <foo.c 2>/dev/null | \
+$grep '^[ ]*#.*stdio\.h' | \
+while read cline; do
+ pos=1
+ set \$cline
+ while $test \$# -gt 0; do
+ if $test $testaccess \`echo \$1 | $tr -d '"'\`; then
+ echo "\$pos"
+ exit 0
+ fi
+ shift
+ pos=\`expr \$pos + 1\`
+ done
+done
+EOF
+chmod +x fieldn
+fieldn=`./fieldn`
+$rm -f foo.c fieldn
+case $fieldn in
+'') pos='???';;
+1) pos=first;;
+2) pos=second;;
+3) pos=third;;
+*) pos="${fieldn}th";;
+esac
+echo "Your cpp writes the filename in the $pos field of the line."
+