summaryrefslogtreecommitdiff
path: root/makedepend.SH
diff options
context:
space:
mode:
authorKarl Williamson <public@khwilliamson.com>2013-02-27 14:30:51 -0700
committerKarl Williamson <khw@cpan.org>2014-10-21 09:26:49 -0600
commit86c3d61a7d00d9c0436b87cee87cb18a0055b6f8 (patch)
tree12f133c7f90c048b6d4618af1241e86b606a8b1c /makedepend.SH
parent6edd329f2057bbd709a169f99a8ea89d83e6b1ad (diff)
downloadperl-86c3d61a7d00d9c0436b87cee87cb18a0055b6f8.tar.gz
makedepend.SH: Retain '/**/' comments
These comments may actually be necessary.
Diffstat (limited to 'makedepend.SH')
-rwxr-xr-xmakedepend.SH27
1 files changed, 18 insertions, 9 deletions
diff --git a/makedepend.SH b/makedepend.SH
index 3b8e050858..ca9cce1817 100755
--- a/makedepend.SH
+++ b/makedepend.SH
@@ -141,14 +141,22 @@ for file in `$cat .clist`; do
# && defined(BAR) /* comment */ \
# && defined(BAZ) /* comment */ \
# etc.
- # This code processes these latter situations first; it assumes there is
- # at most one straightforward comment per continued preprocessor line. (It
- # would be easier to handle more general cases if sed had a non-greedy '*'
- # quantifier; but typically preprocessor directive lines are rather
- # simple.) The continuation line is joined, and the process repeated on
- # the enlarged line as long as there are continuations. At the end, if
- # there are any comments remaining, they should be like the first situation,
- # and can just be deleted. (Subsequent lines of the comment are irrelevant
+ # Also, in lines like
+ # #defined FOO(a,b) a/**/b
+ # the comment may be important and so needs to be retained.
+ # This code processes the single-line comments first; it assumes there is
+ # at most one straightforward comment per continued preprocessor line,
+ # replacing each non-empty comment (and its surrounding white space) by a
+ # single space. (sed only has a greedy '*' quantifier, so this doesn't
+ # work right if there are multiple comments per line, and strings can look
+ # like comments to it; both are unlikely in a preprocessor statement.) Any
+ # continuation line is joined, and the process repeated on the enlarged
+ # line as long as there are continuations. At the end, if there are any
+ # comments remaining, they are either completely empty or are like the
+ # first situation. The latter are just deleted by first deleting to the
+ # end of line (including preceding white space) things that start with '/*'
+ # and the next char isn't a '*'; then things that start with '/**', but the
+ # next char isn't a '/'. (Subsequent lines of the comment are irrelevant
# and get dropped.)
( $echo "#line 2 \"$file\""; \
$sed -n <$file \
@@ -162,7 +170,8 @@ for file in `$cat .clist`; do
-e 's/\\\n/ /g' \
-e '/^#line/d' \
-e '/^[ ]*#/{' \
- -e 's|/\*.*$||' \
+ -e 's|/\*[^*].*$||' \
+ -e 's|/\*\*[^/].*$||' \
-e p \
-e '}' ) >UU/$file.c