Date: Fri, 26 Apr 2002 15:22:50 +0100 From: Tony Finch <dot@dotat.at> To: freebsd-hackers@freebsd.org Cc: dot@dotat.at Subject: improved unifdef(1) Message-ID: <20020426152250.B18410@chiark.greenend.org.uk>
next in thread | raw e-mail | index | archive | help
The unifdef in the system is not suited to heavyweight tasks like (say) xterm's main.c or wu-ftpd for a number of reasons: * it has a very low limit on the number of command-line arguments that it can cope with (100) -- I've sumbitted PR#37454 about this. * it doesn't have the slightest clue about #elif * it doesn't attempt to handle #if Because I needed an unifdef with a bit more oomph and couldn't find a better one, I have done my own tune-up job on the BSD one, starting from the NetBSD sources (which seemed to have a mostly-superset of the changes made by the other BSDs). It's available from <http://dotat.at/prog/misc/unifdef.c>. The detailed change list is below. Note that only a very limited subset of #if expressions are understood, involving just defined(), !, &&, ||, and brackets. If anyone is interested I'd appreciate some testing, and it would be nice to get it committed eventually. Tony. -- f.a.n.finch <dot@dotat.at> http://dotat.at/ NORTH UTSIRE SOUTH UTSIRE: SOUTHEASTERLY VEERING WESTERLY 6 OR 7, OCCASIONALLY GALE 8 IN NORTH UTSIRE. RAIN THEN SHOWERS. MODERATE BECOMING GOOD. 2002/04/25 14:50:23 fanf import from NetBSD 2002/04/25 14:52:54 fanf revert to the CSRG copyright/sccs rubric and add $dotat$ 2002/04/25 14:55:27 fanf remove __P 2002/04/25 14:57:56 fanf remove BSS cruft 2002/04/25 14:59:59 fanf allow a reasonable number of symbols 2002/04/25 15:02:48 fanf move #endif comments to a better place 2002/04/25 15:31:28 fanf deal with -Dsym=value 2002/04/25 15:37:25 fanf sensible else if formatting 2002/04/25 15:51:42 fanf another formatting improvement 2002/04/25 16:03:16 fanf use err() 2002/04/25 16:04:55 fanf style: #include ordering; variable alignment 2002/04/25 16:05:30 fanf remove spurious fflush() 2002/04/25 16:11:54 fanf add a function that will evaluate if expressions 2002/04/25 16:12:23 fanf fix location of a { 2002/04/25 16:16:26 fanf allow whitespace before # 2002/04/25 18:10:00 fanf Initial version of #if handling. Symbol 0 is used for tracking the state of #if/#else activity. TODO: #elif, nested #if 2002/04/25 18:15:23 fanf use __RCSID for the sccs id and remove redundant #ifndef lint lines 2002/04/25 18:17:09 fanf Restore the requirement that at least one -D or -U must be present on the command line, which was broken when #if handling was added. 2002/04/25 18:45:54 fanf purge LT_OTHER since it's a synonym for LT_IF 2002/04/25 19:59:46 fanf Simplify doif()'s inif argument to just a boolean, since the IN_ELSE value isn't very different from IN_IF, and the idea doesn't work well with #elif. 2002/04/25 20:20:05 fanf Move the gall to getlin() up to doif() so that it will be able to examine the same line more than once. 2002/04/25 20:24:16 fanf Remove the inif argument to doif() entirely, since inif == (depth != 0). 2002/04/25 21:19:55 fanf remove an unnecessary variable inside doif() 2002/04/25 21:43:07 fanf Change the "unknown symbol" return value from findsym() from -1 to 0. 2002/04/25 21:44:51 fanf fix a comment to reflect the previous change 2002/04/25 23:02:51 fanf simplify error handling 2002/04/25 23:25:31 fanf simplify error line number handling 2002/04/25 23:27:40 fanf remove redundant stline variable 2002/04/25 23:46:55 fanf partial implementation of #elif and properly nesting #ifs. 2002/04/26 13:51:41 fanf Finish implementation of #elif and nesting. This version passes some initial tests. 2002/04/26 13:54:16 fanf put the newline on the #endif that replaces #elif lines To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020426152250.B18410>