From f493b5b5b37f7b520ca2a1074ef83c71a1c58e1b Mon Sep 17 00:00:00 2001 From: Jeongho Hwang Date: Wed, 19 Sep 2012 14:06:46 +0900 Subject: [PATCH] Tizen 2.0 Alpha Signed-off-by: Jeongho Hwang --- COPYING | 83 ++ Changelog | 3861 ++++++++++++++++++++++++++++++++++++++++++++++++ INSTALL | 18 + Makefile | 84 ++ README | 37 + packaging/unifdef.spec | 57 + reversion.sh | 34 + runtests.sh | 29 + tests/args1.c | 3 + tests/args1.experr | 0 tests/args1.expout | 1 + tests/args1.exprc | 1 + tests/args1.sh | 1 + tests/args2.c | 3 + tests/args2.experr | 0 tests/args2.expout | 3 + tests/args2.exprc | 1 + tests/args2.sh | 1 + tests/blank0d.c | 25 + tests/blank0d.experr | 0 tests/blank0d.expout | 23 + tests/blank0d.exprc | 1 + tests/blank0d.sh | 1 + tests/blank0u.c | 25 + tests/blank0u.experr | 0 tests/blank0u.expout | 22 + tests/blank0u.exprc | 1 + tests/blank0u.sh | 1 + tests/blank1d.c | 25 + tests/blank1d.experr | 0 tests/blank1d.expout | 23 + tests/blank1d.exprc | 1 + tests/blank1d.sh | 1 + tests/blank1u.c | 25 + tests/blank1u.experr | 0 tests/blank1u.expout | 21 + tests/blank1u.exprc | 1 + tests/blank1u.sh | 1 + tests/blank2d.c | 25 + tests/blank2d.experr | 0 tests/blank2d.expout | 23 + tests/blank2d.exprc | 1 + tests/blank2d.sh | 1 + tests/blank2u.c | 25 + tests/blank2u.experr | 0 tests/blank2u.expout | 20 + tests/blank2u.exprc | 1 + tests/blank2u.sh | 1 + tests/blank3d.c | 25 + tests/blank3d.experr | 0 tests/blank3d.expout | 23 + tests/blank3d.exprc | 1 + tests/blank3d.sh | 1 + tests/blank3u.c | 25 + tests/blank3u.experr | 0 tests/blank3u.expout | 19 + tests/blank3u.exprc | 1 + tests/blank3u.sh | 1 + tests/blank4d.c | 25 + tests/blank4d.experr | 0 tests/blank4d.expout | 23 + tests/blank4d.exprc | 1 + tests/blank4d.sh | 1 + tests/blank4u.c | 25 + tests/blank4u.experr | 0 tests/blank4u.expout | 18 + tests/blank4u.exprc | 1 + tests/blank4u.sh | 1 + tests/crlf-a.experr | 0 tests/crlf-a.expout | 10 + tests/crlf-a.exprc | 1 + tests/crlf-a.sh | 1 + tests/crlf-b.experr | 0 tests/crlf-b.expout | 14 + tests/crlf-b.exprc | 1 + tests/crlf-b.sh | 1 + tests/crlf-c.experr | 0 tests/crlf-c.expout | 16 + tests/crlf-c.exprc | 1 + tests/crlf-c.sh | 1 + tests/crlf-d.experr | 0 tests/crlf-d.expout | 18 + tests/crlf-d.exprc | 1 + tests/crlf-d.sh | 1 + tests/crlf.c | 20 + tests/empty.c | 0 tests/empty.experr | 0 tests/empty.expout | 0 tests/empty.exprc | 1 + tests/empty.sh | 1 + tests/if1-a.experr | 0 tests/if1-a.expout | 16 + tests/if1-a.exprc | 1 + tests/if1-a.sh | 1 + tests/if1-k.c | 38 + tests/if1-k.experr | 0 tests/if1-k.expout | 30 + tests/if1-k.exprc | 1 + tests/if1-k.sh | 1 + tests/if1-kDU.c | 38 + tests/if1-kDU.experr | 0 tests/if1-kDU.expout | 20 + tests/if1-kDU.exprc | 1 + tests/if1-kDU.sh | 1 + tests/if1.c | 26 + tests/if1.experr | 0 tests/if1.expout | 16 + tests/if1.exprc | 1 + tests/if1.sh | 1 + tests/if1a.experr | 0 tests/if1a.expout | 24 + tests/if1a.exprc | 1 + tests/if1a.sh | 1 + tests/if2-a.experr | 0 tests/if2-a.expout | 13 + tests/if2-a.exprc | 1 + tests/if2-a.sh | 1 + tests/if2-k.c | 29 + tests/if2-k.experr | 0 tests/if2-k.expout | 21 + tests/if2-k.exprc | 1 + tests/if2-k.sh | 1 + tests/if2-kDU.c | 29 + tests/if2-kDU.experr | 0 tests/if2-kDU.expout | 17 + tests/if2-kDU.exprc | 1 + tests/if2-kDU.sh | 1 + tests/if2.c | 17 + tests/if2.experr | 0 tests/if2.expout | 13 + tests/if2.exprc | 1 + tests/if2.sh | 1 + tests/if3-a.experr | 0 tests/if3-a.expout | 13 + tests/if3-a.exprc | 1 + tests/if3-a.sh | 1 + tests/if3-k.c | 29 + tests/if3-k.experr | 0 tests/if3-k.expout | 21 + tests/if3-k.exprc | 1 + tests/if3-k.sh | 1 + tests/if3-kDU.c | 29 + tests/if3-kDU.experr | 0 tests/if3-kDU.expout | 17 + tests/if3-kDU.exprc | 1 + tests/if3-kDU.sh | 1 + tests/if3.c | 17 + tests/if3.experr | 0 tests/if3.expout | 13 + tests/if3.exprc | 1 + tests/if3.sh | 1 + tests/if4-a.experr | 0 tests/if4-a.expout | 22 + tests/if4-a.exprc | 1 + tests/if4-a.sh | 1 + tests/if4-k.c | 50 + tests/if4-k.experr | 0 tests/if4-k.expout | 42 + tests/if4-k.exprc | 1 + tests/if4-k.sh | 1 + tests/if4-kDU.c | 50 + tests/if4-kDU.experr | 0 tests/if4-kDU.expout | 26 + tests/if4-kDU.exprc | 1 + tests/if4-kDU.sh | 1 + tests/if4.c | 38 + tests/if4.experr | 0 tests/if4.expout | 22 + tests/if4.exprc | 1 + tests/if4.sh | 1 + tests/if5-a.experr | 0 tests/if5-a.expout | 28 + tests/if5-a.exprc | 1 + tests/if5-a.sh | 1 + tests/if5-k.c | 64 + tests/if5-k.experr | 0 tests/if5-k.expout | 56 + tests/if5-k.exprc | 1 + tests/if5-k.sh | 1 + tests/if5-kDU.c | 64 + tests/if5-kDU.experr | 0 tests/if5-kDU.expout | 32 + tests/if5-kDU.exprc | 1 + tests/if5-kDU.sh | 1 + tests/if5.c | 52 + tests/if5.experr | 0 tests/if5.expout | 28 + tests/if5.exprc | 1 + tests/if5.sh | 1 + tests/if6.c | 11 + tests/if6a.experr | 0 tests/if6a.expout | 1 + tests/if6a.exprc | 1 + tests/if6a.sh | 1 + tests/if6b.experr | 0 tests/if6b.expout | 5 + tests/if6b.exprc | 1 + tests/if6b.sh | 1 + tests/if6c.experr | 0 tests/if6c.expout | 7 + tests/if6c.exprc | 1 + tests/if6c.sh | 1 + tests/if6d.experr | 0 tests/if6d.expout | 9 + tests/if6d.exprc | 1 + tests/if6d.sh | 1 + tests/none.c | 5 + tests/none.experr | 0 tests/none.expout | 5 + tests/none.exprc | 1 + tests/none.sh | 1 + tests/outdir.experr | 0 tests/outdir.expout | 16 + tests/outdir.exprc | 1 + tests/outdir.sh | 4 + tests/outfile.experr | 0 tests/outfile.expout | 16 + tests/outfile.exprc | 1 + tests/outfile.sh | 3 + tests/overdir.experr | 0 tests/overdir.expout | 16 + tests/overdir.exprc | 1 + tests/overdir.sh | 5 + tests/overwrite.experr | 0 tests/overwrite.expout | 16 + tests/overwrite.exprc | 1 + tests/overwrite.sh | 4 + tests/small1.c | 17 + tests/small1.experr | 0 tests/small1.expout | 13 + tests/small1.exprc | 1 + tests/small1.sh | 1 + tests/small2.c | 17 + tests/small2.experr | 0 tests/small2.expout | 13 + tests/small2.exprc | 1 + tests/small2.sh | 1 + tests/spaces1.c | 17 + tests/spaces1.experr | 0 tests/spaces1.expout | 13 + tests/spaces1.exprc | 1 + tests/spaces1.sh | 1 + tests/spaces2.c | 17 + tests/spaces2.experr | 0 tests/spaces2.expout | 13 + tests/spaces2.exprc | 1 + tests/spaces2.sh | 1 + tests/spaces3.c | 17 + tests/spaces3.experr | 0 tests/spaces3.expout | 13 + tests/spaces3.exprc | 1 + tests/spaces3.sh | 1 + tests/spaces4.c | 17 + tests/spaces4.experr | 0 tests/spaces4.expout | 13 + tests/spaces4.exprc | 1 + tests/spaces4.sh | 1 + unifdef.1 | 413 ++++++ unifdef.c | 1230 +++++++++++++++ unifdef.txt | 180 +++ unifdefall.sh | 77 + version.sh | 2 + 262 files changed, 8123 insertions(+) create mode 100644 COPYING create mode 100644 Changelog create mode 100644 INSTALL create mode 100644 Makefile create mode 100644 README create mode 100644 packaging/unifdef.spec create mode 100755 reversion.sh create mode 100755 runtests.sh create mode 100644 tests/args1.c create mode 100644 tests/args1.experr create mode 100644 tests/args1.expout create mode 100644 tests/args1.exprc create mode 100644 tests/args1.sh create mode 100644 tests/args2.c create mode 100644 tests/args2.experr create mode 100644 tests/args2.expout create mode 100644 tests/args2.exprc create mode 100644 tests/args2.sh create mode 100644 tests/blank0d.c create mode 100644 tests/blank0d.experr create mode 100644 tests/blank0d.expout create mode 100644 tests/blank0d.exprc create mode 100644 tests/blank0d.sh create mode 100644 tests/blank0u.c create mode 100644 tests/blank0u.experr create mode 100644 tests/blank0u.expout create mode 100644 tests/blank0u.exprc create mode 100644 tests/blank0u.sh create mode 100644 tests/blank1d.c create mode 100644 tests/blank1d.experr create mode 100644 tests/blank1d.expout create mode 100644 tests/blank1d.exprc create mode 100644 tests/blank1d.sh create mode 100644 tests/blank1u.c create mode 100644 tests/blank1u.experr create mode 100644 tests/blank1u.expout create mode 100644 tests/blank1u.exprc create mode 100644 tests/blank1u.sh create mode 100644 tests/blank2d.c create mode 100644 tests/blank2d.experr create mode 100644 tests/blank2d.expout create mode 100644 tests/blank2d.exprc create mode 100644 tests/blank2d.sh create mode 100644 tests/blank2u.c create mode 100644 tests/blank2u.experr create mode 100644 tests/blank2u.expout create mode 100644 tests/blank2u.exprc create mode 100644 tests/blank2u.sh create mode 100644 tests/blank3d.c create mode 100644 tests/blank3d.experr create mode 100644 tests/blank3d.expout create mode 100644 tests/blank3d.exprc create mode 100644 tests/blank3d.sh create mode 100644 tests/blank3u.c create mode 100644 tests/blank3u.experr create mode 100644 tests/blank3u.expout create mode 100644 tests/blank3u.exprc create mode 100644 tests/blank3u.sh create mode 100644 tests/blank4d.c create mode 100644 tests/blank4d.experr create mode 100644 tests/blank4d.expout create mode 100644 tests/blank4d.exprc create mode 100644 tests/blank4d.sh create mode 100644 tests/blank4u.c create mode 100644 tests/blank4u.experr create mode 100644 tests/blank4u.expout create mode 100644 tests/blank4u.exprc create mode 100644 tests/blank4u.sh create mode 100644 tests/crlf-a.experr create mode 100644 tests/crlf-a.expout create mode 100644 tests/crlf-a.exprc create mode 100644 tests/crlf-a.sh create mode 100644 tests/crlf-b.experr create mode 100644 tests/crlf-b.expout create mode 100644 tests/crlf-b.exprc create mode 100644 tests/crlf-b.sh create mode 100644 tests/crlf-c.experr create mode 100644 tests/crlf-c.expout create mode 100644 tests/crlf-c.exprc create mode 100644 tests/crlf-c.sh create mode 100644 tests/crlf-d.experr create mode 100644 tests/crlf-d.expout create mode 100644 tests/crlf-d.exprc create mode 100644 tests/crlf-d.sh create mode 100644 tests/crlf.c create mode 100644 tests/empty.c create mode 100644 tests/empty.experr create mode 100644 tests/empty.expout create mode 100644 tests/empty.exprc create mode 100644 tests/empty.sh create mode 100644 tests/if1-a.experr create mode 100644 tests/if1-a.expout create mode 100644 tests/if1-a.exprc create mode 100644 tests/if1-a.sh create mode 100644 tests/if1-k.c create mode 100644 tests/if1-k.experr create mode 100644 tests/if1-k.expout create mode 100644 tests/if1-k.exprc create mode 100644 tests/if1-k.sh create mode 100644 tests/if1-kDU.c create mode 100644 tests/if1-kDU.experr create mode 100644 tests/if1-kDU.expout create mode 100644 tests/if1-kDU.exprc create mode 100644 tests/if1-kDU.sh create mode 100644 tests/if1.c create mode 100644 tests/if1.experr create mode 100644 tests/if1.expout create mode 100644 tests/if1.exprc create mode 100644 tests/if1.sh create mode 100644 tests/if1a.experr create mode 100644 tests/if1a.expout create mode 100644 tests/if1a.exprc create mode 100644 tests/if1a.sh create mode 100644 tests/if2-a.experr create mode 100644 tests/if2-a.expout create mode 100644 tests/if2-a.exprc create mode 100644 tests/if2-a.sh create mode 100644 tests/if2-k.c create mode 100644 tests/if2-k.experr create mode 100644 tests/if2-k.expout create mode 100644 tests/if2-k.exprc create mode 100644 tests/if2-k.sh create mode 100644 tests/if2-kDU.c create mode 100644 tests/if2-kDU.experr create mode 100644 tests/if2-kDU.expout create mode 100644 tests/if2-kDU.exprc create mode 100644 tests/if2-kDU.sh create mode 100644 tests/if2.c create mode 100644 tests/if2.experr create mode 100644 tests/if2.expout create mode 100644 tests/if2.exprc create mode 100644 tests/if2.sh create mode 100644 tests/if3-a.experr create mode 100644 tests/if3-a.expout create mode 100644 tests/if3-a.exprc create mode 100644 tests/if3-a.sh create mode 100644 tests/if3-k.c create mode 100644 tests/if3-k.experr create mode 100644 tests/if3-k.expout create mode 100644 tests/if3-k.exprc create mode 100644 tests/if3-k.sh create mode 100644 tests/if3-kDU.c create mode 100644 tests/if3-kDU.experr create mode 100644 tests/if3-kDU.expout create mode 100644 tests/if3-kDU.exprc create mode 100644 tests/if3-kDU.sh create mode 100644 tests/if3.c create mode 100644 tests/if3.experr create mode 100644 tests/if3.expout create mode 100644 tests/if3.exprc create mode 100644 tests/if3.sh create mode 100644 tests/if4-a.experr create mode 100644 tests/if4-a.expout create mode 100644 tests/if4-a.exprc create mode 100644 tests/if4-a.sh create mode 100644 tests/if4-k.c create mode 100644 tests/if4-k.experr create mode 100644 tests/if4-k.expout create mode 100644 tests/if4-k.exprc create mode 100644 tests/if4-k.sh create mode 100644 tests/if4-kDU.c create mode 100644 tests/if4-kDU.experr create mode 100644 tests/if4-kDU.expout create mode 100644 tests/if4-kDU.exprc create mode 100644 tests/if4-kDU.sh create mode 100644 tests/if4.c create mode 100644 tests/if4.experr create mode 100644 tests/if4.expout create mode 100644 tests/if4.exprc create mode 100644 tests/if4.sh create mode 100644 tests/if5-a.experr create mode 100644 tests/if5-a.expout create mode 100644 tests/if5-a.exprc create mode 100644 tests/if5-a.sh create mode 100644 tests/if5-k.c create mode 100644 tests/if5-k.experr create mode 100644 tests/if5-k.expout create mode 100644 tests/if5-k.exprc create mode 100644 tests/if5-k.sh create mode 100644 tests/if5-kDU.c create mode 100644 tests/if5-kDU.experr create mode 100644 tests/if5-kDU.expout create mode 100644 tests/if5-kDU.exprc create mode 100644 tests/if5-kDU.sh create mode 100644 tests/if5.c create mode 100644 tests/if5.experr create mode 100644 tests/if5.expout create mode 100644 tests/if5.exprc create mode 100644 tests/if5.sh create mode 100644 tests/if6.c create mode 100644 tests/if6a.experr create mode 100644 tests/if6a.expout create mode 100644 tests/if6a.exprc create mode 100644 tests/if6a.sh create mode 100644 tests/if6b.experr create mode 100644 tests/if6b.expout create mode 100644 tests/if6b.exprc create mode 100644 tests/if6b.sh create mode 100644 tests/if6c.experr create mode 100644 tests/if6c.expout create mode 100644 tests/if6c.exprc create mode 100644 tests/if6c.sh create mode 100644 tests/if6d.experr create mode 100644 tests/if6d.expout create mode 100644 tests/if6d.exprc create mode 100644 tests/if6d.sh create mode 100644 tests/none.c create mode 100644 tests/none.experr create mode 100644 tests/none.expout create mode 100644 tests/none.exprc create mode 100644 tests/none.sh create mode 100644 tests/outdir.experr create mode 100644 tests/outdir.expout create mode 100644 tests/outdir.exprc create mode 100644 tests/outdir.sh create mode 100644 tests/outfile.experr create mode 100644 tests/outfile.expout create mode 100644 tests/outfile.exprc create mode 100644 tests/outfile.sh create mode 100644 tests/overdir.experr create mode 100644 tests/overdir.expout create mode 100644 tests/overdir.exprc create mode 100644 tests/overdir.sh create mode 100644 tests/overwrite.experr create mode 100644 tests/overwrite.expout create mode 100644 tests/overwrite.exprc create mode 100644 tests/overwrite.sh create mode 100644 tests/small1.c create mode 100644 tests/small1.experr create mode 100644 tests/small1.expout create mode 100644 tests/small1.exprc create mode 100644 tests/small1.sh create mode 100644 tests/small2.c create mode 100644 tests/small2.experr create mode 100644 tests/small2.expout create mode 100644 tests/small2.exprc create mode 100644 tests/small2.sh create mode 100644 tests/spaces1.c create mode 100644 tests/spaces1.experr create mode 100644 tests/spaces1.expout create mode 100644 tests/spaces1.exprc create mode 100644 tests/spaces1.sh create mode 100644 tests/spaces2.c create mode 100644 tests/spaces2.experr create mode 100644 tests/spaces2.expout create mode 100644 tests/spaces2.exprc create mode 100644 tests/spaces2.sh create mode 100644 tests/spaces3.c create mode 100644 tests/spaces3.experr create mode 100644 tests/spaces3.expout create mode 100644 tests/spaces3.exprc create mode 100644 tests/spaces3.sh create mode 100644 tests/spaces4.c create mode 100644 tests/spaces4.experr create mode 100644 tests/spaces4.expout create mode 100644 tests/spaces4.exprc create mode 100644 tests/spaces4.sh create mode 100644 unifdef.1 create mode 100644 unifdef.c create mode 100644 unifdef.txt create mode 100755 unifdefall.sh create mode 100644 version.sh diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..d29e274 --- /dev/null +++ b/COPYING @@ -0,0 +1,83 @@ +unifdef copyright licence +------------------------- + +All files in this package are distributed under the two-clause BSD +copyright licence, except for the manual page unifdef.1 which has a +three-clause BSD copyright licence. + +Unifdef was derived from software contributed to Berkeley by Dave +Yost. It was rewritten to support ANSI C by Tony Finch. The original +version of unifdef.c carried the four-clause BSD copyright licence. +None of its code remains in this version (though some of the names +remain) so it now carries the more liberal two-clause licence. + +Unless otherwise stated, the files in this package are: + + Copyright (c) 2002 - 2010 Tony Finch + +unifdefall.sh is + + Copyright (c) 2002 - 2010 Tony Finch + Copyright (c) 2009 - 2010 Jonathan Nieder + +Some files in the tests directory are: + + Copyright 2004, 2008 Bob Proulx + +The two-clause BSD copyright licence applying to all the above files is: + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + +The three-clause BSD copyright licence for the manual page unifdef.1 +is below. The advertising clause was rescinded by the University of +California Berkeley in 1999. +ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change + + Copyright (c) 1985, 1991, 1993 + The Regents of the University of California. All rights reserved. + Copyright (c) 2002 - 2010 Tony Finch . All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + +- end - diff --git a/Changelog b/Changelog new file mode 100644 index 0000000..b7976a8 --- /dev/null +++ b/Changelog @@ -0,0 +1,3861 @@ +--------------------------------------------------- +2010-03-12 16:27:30 +0000 Tony Finch + +Release unifdef-2.3 + + web/index.html | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2010-03-12 16:23:35 +0000 Tony Finch + +Makefile: upload to github before chiark + + Makefile | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2010-03-12 16:21:27 +0000 Tony Finch + +Tweak the home page. + +Add the .htaccess file which keeps old URLs working. + + web/.htaccess | 11 +++++++++++ + web/index.html | 11 ++++++----- + 2 files changed, 17 insertions(+), 5 deletions(-) + +--------------------------------------------------- +2010-03-12 15:43:19 +0000 Tony Finch + +Make the home page and gitweb titles consistent. + + Makefile | 2 +- + web/index.html | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2010-03-12 15:29:12 +0000 Tony Finch + +Rename get-version.sh to reversion.sh for fun. + + Makefile | 4 ++-- + get-version.sh | 34 ---------------------------------- + reversion.sh | 34 ++++++++++++++++++++++++++++++++++ + 3 files changed, 36 insertions(+), 36 deletions(-) + +--------------------------------------------------- +2010-03-12 15:23:40 +0000 Tony Finch + +Makefile: do not try to build unifdef.txt by default. + +DISTFILES shouldn't be in non-release targets. + + Makefile | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2010-03-12 12:23:26 +0000 Tony Finch + +Merge commit 'book/master' + +--------------------------------------------------- +2010-03-12 12:22:51 +0000 Tony Finch + +Add -V and -S flags to synopses + + unifdef.1 | 2 +- + unifdef.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2010-03-12 11:13:52 +0000 Tony Finch + +Merge commit 'book/master' + +--------------------------------------------------- +2010-03-12 11:07:35 +0000 Tony Finch + +web/index.html: link to github + + web/index.html | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2010-03-12 11:07:35 +0000 Tony Finch + +web/index.html: link to github + + web/index.html | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2010-03-12 11:03:03 +0000 Tony Finch + +README: add information about obtaining unifdef using git. + + README | 9 ++++++--- + 1 files changed, 6 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2010-03-12 11:01:15 +0000 Tony Finch + +Makefile: tweak upload target + +Remove unsafe `git prune`. Push a copy to github. + + Makefile | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2010-03-12 11:00:26 +0000 Tony Finch + +web/index.html: Fix git clone URL. + + web/index.html | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2010-03-12 10:15:18 +0000 Tony Finch + +Release unifdef-2.2 + + web/index.html | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2010-03-12 10:08:04 +0000 Tony Finch + +unifdefall: print debugging output to stderr + + unifdefall.sh | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2010-03-12 10:04:14 +0000 Tony Finch + +unifdefall: correct exit status if the clean-up rm fails + +Reported-by: Bob Proulx + + unifdefall.sh | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2010-03-12 09:52:46 +0000 Tony Finch + +get-version.sh: fix build in clean git working tree + +`git show` exited non-zero which aborted the build. + + get-version.sh | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2010-03-12 09:34:18 +0000 Tony Finch + +Makefile: fix version.h -> unifdef.c -> unifdef dependencies. + + Makefile | 10 +++++----- + 1 files changed, 5 insertions(+), 5 deletions(-) + +--------------------------------------------------- +2010-03-12 09:28:02 +0000 Tony Finch + +get-version.sh fixes + +Test for the existence of version.sh (not version.h> before sourcing it. +Cat the version files after re-writing them. +Use printf(1) to create version.h for portability. + + get-version.sh | 8 +++++--- + 1 files changed, 5 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2010-03-11 21:41:45 +0000 Tony Finch + +Makefile: safer "realclean" target + + Makefile | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2010-03-11 21:17:58 +0000 Tony Finch + +Release unifdef-2.1 + + web/index.html | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2010-03-11 21:12:03 +0000 Tony Finch + +Add a -V option to print the embedded version details. + + unifdef.1 | 5 ++++- + unifdef.c | 19 ++++++++++++++++++- + 2 files changed, 22 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2010-03-11 21:01:23 +0000 Tony Finch + +Makefile: remove release.sh from DISTFILES + + Makefile | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2010-03-11 20:59:11 +0000 Tony Finch + +Makefile: prune .git before uploading + + Makefile | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +--------------------------------------------------- +2010-03-11 20:56:29 +0000 Tony Finch + +index.html: mention the git glone command + + web/index.html | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2010-03-11 20:52:26 +0000 Tony Finch + +Re-do the website handling and add an upload target. + + Makefile | 15 ++++++++++--- + index.html.in | 62 -------------------------------------------------------- + web/index.html | 49 ++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 60 insertions(+), 66 deletions(-) + +--------------------------------------------------- +2010-03-11 20:28:13 +0000 Tony Finch + +Tell git to ignore release files. + + .gitignore | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +--------------------------------------------------- +2010-03-11 20:27:04 +0000 Tony Finch + +Move release script into Makefile. + + Makefile | 45 ++++++++++++++++++++++++++++++++++++--------- + release.sh | 37 ------------------------------------- + 2 files changed, 36 insertions(+), 46 deletions(-) + +--------------------------------------------------- +2010-03-11 20:08:03 +0000 Tony Finch + +Tell git to ignore output files. + + .gitignore | 5 +++++ + 1 files changed, 5 insertions(+), 0 deletions(-) + +--------------------------------------------------- +2010-03-11 20:04:35 +0000 Tony Finch + +Makefile: do not clean inside .git directory. + + Makefile | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2010-03-11 18:57:37 +0000 Tony Finch + +Embed version information from git into the unifdef binary. + + Makefile | 9 ++++++--- + get-version.sh | 32 ++++++++++++++++++++++++++++++++ + unifdef.c | 9 +++++---- + 3 files changed, 43 insertions(+), 7 deletions(-) + +--------------------------------------------------- +2010-03-11 18:57:15 +0000 Tony Finch + +Makefile: clean trailing whitespace. + + Makefile | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2010-03-11 18:56:58 +0000 Tony Finch + +INSTALL: Note the CFLAGS and LDFLAGS make variables. + + INSTALL | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2010-03-11 18:56:34 +0000 Tony Finch + +Remove sccs, cvs, and svn revision tags. + + INSTALL | 2 +- + Makefile | 2 +- + README | 3 +-- + index.html.in | 1 - + release.sh | 2 -- + runtests.sh | 2 -- + unifdef.1 | 4 ---- + unifdef.c | 5 ++--- + unifdefall.sh | 2 -- + 9 files changed, 5 insertions(+), 18 deletions(-) + +--------------------------------------------------- +2010-03-10 17:42:54 +0000 Tony Finch + +Improved debugging support. + +Add line numbers to unifdef's debugging output. Flush the output stream +on each line when debugging to ensure stdout and stderr are properly +interleaved. Add a debugging mode to unifdefall.sh which outputs its +intermediate working files. + + unifdef.c | 12 ++++++++---- + unifdefall.sh | 20 +++++++++++++++----- + 2 files changed, 23 insertions(+), 9 deletions(-) + +--------------------------------------------------- +2010-03-07 18:11:07 +0000 Tony Finch + +Forced commit to note change to test suite. + + runtests.sh | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2010-03-07 17:56:06 +0000 Tony Finch + +Adjust tests for change in license header. + +The extra line at the beginning of if1.c caused the line numbers +in 'diff' output to change. Rather than playing catch-up, simplify +the relevant tests to keep working if if1.c changes in other ways +in the future. + +Submitted by: Jonathan Nieder + + tests/outdir.expout | 30 ++++++++++++++++-------------- + tests/outdir.sh | 2 +- + tests/outfile.expout | 30 ++++++++++++++++-------------- + tests/outfile.sh | 2 +- + tests/overdir.expout | 30 ++++++++++++++++-------------- + tests/overdir.sh | 2 +- + tests/overwrite.expout | 30 ++++++++++++++++-------------- + tests/overwrite.sh | 2 +- + 8 files changed, 68 insertions(+), 60 deletions(-) + +--------------------------------------------------- +2010-03-06 14:40:15 +0000 Tony Finch + +Add the COPYING file to the release. + + release.sh | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2010-03-06 14:38:50 +0000 Tony Finch + +Fix HTML markup snafu. + + index.html.in | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2010-03-06 14:37:14 +0000 Tony Finch + +Put the tests under the two-clause BSD copyright licence for consistency. + + tests/crlf-a.expout | 2 +- + tests/crlf-b.expout | 2 +- + tests/crlf-c.expout | 2 +- + tests/crlf-d.expout | 2 +- + tests/crlf.c | 2 +- + tests/if1-a.expout | 3 ++- + tests/if1-k.c | 3 ++- + tests/if1-k.expout | 3 ++- + tests/if1-kDU.c | 3 ++- + tests/if1-kDU.expout | 3 ++- + tests/if1.c | 3 ++- + tests/if1.expout | 3 ++- + tests/if1a.expout | 3 ++- + tests/if2-a.expout | 3 ++- + tests/if2-k.c | 3 ++- + tests/if2-k.expout | 3 ++- + tests/if2-kDU.c | 3 ++- + tests/if2-kDU.expout | 3 ++- + tests/if2.c | 3 ++- + tests/if2.expout | 3 ++- + tests/if3-a.expout | 3 ++- + tests/if3-k.c | 3 ++- + tests/if3-k.expout | 3 ++- + tests/if3-kDU.c | 3 ++- + tests/if3-kDU.expout | 3 ++- + tests/if3.c | 3 ++- + tests/if3.expout | 3 ++- + tests/if4-a.expout | 3 ++- + tests/if4-k.c | 3 ++- + tests/if4-k.expout | 3 ++- + tests/if4-kDU.c | 3 ++- + tests/if4-kDU.expout | 3 ++- + tests/if4.c | 3 ++- + tests/if4.expout | 3 ++- + tests/if5-a.expout | 3 ++- + tests/if5-k.c | 3 ++- + tests/if5-k.expout | 3 ++- + tests/if5-kDU.c | 3 ++- + tests/if5-kDU.expout | 3 ++- + tests/if5.c | 3 ++- + tests/if5.expout | 3 ++- + tests/none.c | 3 ++- + tests/none.expout | 3 ++- + tests/small1.c | 3 ++- + tests/small1.expout | 3 ++- + tests/small2.c | 3 ++- + tests/small2.expout | 3 ++- + tests/spaces1.c | 3 ++- + tests/spaces1.expout | 3 ++- + tests/spaces2.c | 3 ++- + tests/spaces2.expout | 3 ++- + tests/spaces3.c | 3 ++- + tests/spaces3.expout | 3 ++- + tests/spaces4.c | 3 ++- + tests/spaces4.expout | 3 ++- + 55 files changed, 105 insertions(+), 55 deletions(-) + +--------------------------------------------------- +2010-03-06 14:30:26 +0000 Tony Finch + +Add a COPYING file to consolidate licence terms in one place. + +Remove the public domain declaration from runtests.sh so it is under the +same licence as the other files. + +Improve the wording about the licensing of contributions. + + COPYING | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + README | 8 +++--- + index.html.in | 9 +++--- + runtests.sh | 6 +--- + 4 files changed, 93 insertions(+), 13 deletions(-) + +--------------------------------------------------- +2010-03-05 13:05:38 +0000 Tony Finch + +Adjust man page document title for backwards compatibility. + +Reported by: Bob Proulx + + unifdef.1 | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2010-02-23 12:27:11 +0000 Tony Finch + +Actually, don't drop the 1. from the version number. + +Keeping it gives us more flexibility to change the numbering scheme +while ensuring it continues to go up. + + release.sh | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2010-02-22 18:58:50 +0000 Tony Finch + +Drop 1. from the version number + + release.sh | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2010-02-22 18:58:30 +0000 Tony Finch + +Improve output of -S mode (list symbols with depths) + +Symbols tested in the same #if are listed on the same line. + + unifdef.c | 17 +++++++++++++---- + 1 files changed, 13 insertions(+), 4 deletions(-) + +--------------------------------------------------- +2010-02-21 16:55:04 +0000 Tony Finch + +We don't need to compile unifdef when preparing the release. + + release.sh | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2010-02-21 16:53:20 +0000 Tony Finch + +Fix the release build to ensure that junk files are not included. + +We were failing to properly clean the tests directory. + +Reported-by: Jonathan Nieder + + Makefile | 14 +++++++------- + release.sh | 7 +++++-- + 2 files changed, 12 insertions(+), 9 deletions(-) + +--------------------------------------------------- +2010-02-19 20:43:13 +0000 Tony Finch + +Use -mdoc macro package when invoking nroff. + + Makefile | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2010-02-19 20:25:50 +0000 Tony Finch + +Add a -S option for listing the nesting depth of symbols. + +Suggested by http://stackoverflow.com/questions/2012496 + + unifdef.1 | 23 +++++++++++++++-------- + unifdef.c | 19 ++++++++++++------- + 2 files changed, 27 insertions(+), 15 deletions(-) + +--------------------------------------------------- +2010-02-19 20:08:37 +0000 Tony Finch + +A small tidy-up in process() + + unifdef.c | 8 +++----- + 1 files changed, 3 insertions(+), 5 deletions(-) + +--------------------------------------------------- +2010-02-19 19:46:41 +0000 Tony Finch + +Expand ACCESSPERMS rather than conditionally #defining it. + + unifdef.c | 8 ++------ + 1 files changed, 2 insertions(+), 6 deletions(-) + +--------------------------------------------------- +2010-02-19 18:35:26 +0000 Tony Finch + +Define ACCESSPERMS on systems (like Cygwin) that lack it. + +Suggested by Mark Rushakoff. + + unifdef.c | 6 +++++- + 1 files changed, 5 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2010-02-19 17:30:50 +0000 Tony Finch + +Link to freshmeat.net for release announcements. + + README | 5 ++++- + index.html.in | 9 ++++++--- + 2 files changed, 10 insertions(+), 4 deletions(-) + +--------------------------------------------------- +2010-02-19 17:15:44 +0000 Tony Finch + +Improve portability to systems with native CRLF newlines. + + unifdef.c | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +--------------------------------------------------- +2010-02-19 17:11:39 +0000 Tony Finch + +Remove FreeBSD from manual page rubric, and update its date. + + unifdef.1 | 10 +++++----- + 1 files changed, 5 insertions(+), 5 deletions(-) + +--------------------------------------------------- +2010-02-19 16:44:02 +0000 Tony Finch + +List INSTALL file on homepage + + index.html.in | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2010-02-19 16:37:05 +0000 Tony Finch + +Fix a long-standing cpp compatibility bug. + +The -DFOO argument (without an explicit value) should define FOO to 1 +not to the empty string. + + tests/crlf-a.sh | 2 +- + tests/crlf-b.sh | 2 +- + tests/crlf-c.sh | 2 +- + tests/crlf-d.sh | 2 +- + tests/if6a.sh | 2 +- + tests/if6b.sh | 2 +- + tests/if6c.sh | 2 +- + tests/if6d.sh | 2 +- + unifdef.1 | 14 ++++++++------ + unifdef.c | 4 ++-- + 10 files changed, 18 insertions(+), 16 deletions(-) + +--------------------------------------------------- +2010-02-19 16:31:08 +0000 Tony Finch + +Add support for CRLF newlines. + +As a side-effect, remove the dependency on strlcpy(). + +Based on a suggestion from Mark Rushakoff. + + INSTALL | 5 +-- + tests/crlf-a.expout | 10 +++++++++ + tests/crlf-a.exprc | 1 + + tests/crlf-a.sh | 1 + + tests/crlf-b.expout | 14 +++++++++++++ + tests/crlf-b.exprc | 1 + + tests/crlf-b.sh | 1 + + tests/crlf-c.expout | 16 +++++++++++++++ + tests/crlf-c.exprc | 1 + + tests/crlf-c.sh | 1 + + tests/crlf-d.expout | 18 +++++++++++++++++ + tests/crlf-d.exprc | 1 + + tests/crlf-d.sh | 1 + + tests/crlf.c | 20 ++++++++++++++++++ + unifdef.c | 54 ++++++++++++++++++++++++++++++++++---------------- + 15 files changed, 125 insertions(+), 20 deletions(-) + +--------------------------------------------------- +2010-02-19 16:29:59 +0000 Tony Finch + +Fix tests to not rely on an uncommitted change. + + tests/if6a.sh | 2 +- + tests/if6b.sh | 2 +- + tests/if6c.sh | 2 +- + tests/if6d.sh | 2 +- + 4 files changed, 4 insertions(+), 4 deletions(-) + +--------------------------------------------------- +2010-02-19 16:03:44 +0000 Tony Finch + +More tests of keyword edits + + tests/if6.c | 11 +++++++++++ + tests/if6a.expout | 1 + + tests/if6a.exprc | 1 + + tests/if6a.sh | 1 + + tests/if6b.expout | 5 +++++ + tests/if6b.exprc | 1 + + tests/if6b.sh | 1 + + tests/if6c.expout | 7 +++++++ + tests/if6c.exprc | 1 + + tests/if6c.sh | 1 + + tests/if6d.expout | 9 +++++++++ + tests/if6d.exprc | 1 + + tests/if6d.sh | 1 + + 13 files changed, 41 insertions(+), 0 deletions(-) + +--------------------------------------------------- +2010-02-19 15:50:26 +0000 Tony Finch + +Test #elif -> #if edit + + tests/if1a.expout | 23 +++++++++++++++++++++++ + tests/if1a.exprc | 1 + + tests/if1a.sh | 1 + + 3 files changed, 25 insertions(+), 0 deletions(-) + +--------------------------------------------------- +2010-01-20 00:48:26 +0000 Tony Finch + +unifdef.c: better diagnostics on write failure + + unifdef.c | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2010-01-19 20:33:00 +0000 Tony Finch + +unifdef.c: fix portability to 64 bit platforms. + +printf("%.*s",i,s) expects an int not a ptrdiff_t + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2010-01-19 18:22:53 +0000 Tony Finch + +Fix English usage in wishlist comment + + unifdef.c | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2010-01-19 18:03:02 +0000 Tony Finch + +unifdef.c: re-arrange the introductory comment, #include lines, and + +embedded copyright strings so that the FreeBSD version of the code +is tidier. + + unifdef.c | 18 ++++++++---------- + 1 files changed, 8 insertions(+), 10 deletions(-) + +--------------------------------------------------- +2010-01-19 17:33:53 +0000 Tony Finch + +Update manual date and copyright. + + unifdef.1 | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2010-01-19 16:23:35 +0000 Tony Finch + +Add -o outfile option, which can be used to specify an output file. The + +file can even be the same as the input file. Idea from IRIX unifdef(1). +This version also fixes a bug in the NetBSD unifdef which refuses to +write to a -o outfile which does not exist. + +Obtained from: Brian Ginsbach via NetBSD + + tests/outdir.expout | 14 ++++++ + tests/outdir.exprc | 1 + + tests/outdir.sh | 4 ++ + tests/outfile.expout | 14 ++++++ + tests/outfile.exprc | 1 + + tests/outfile.sh | 3 + + tests/overdir.expout | 14 ++++++ + tests/overdir.exprc | 1 + + tests/overdir.sh | 5 ++ + tests/overwrite.expout | 14 ++++++ + tests/overwrite.exprc | 1 + + tests/overwrite.sh | 4 ++ + unifdef.1 | 17 +++++++- + unifdef.c | 106 ++++++++++++++++++++++++++++++++++++++++++----- + 14 files changed, 185 insertions(+), 14 deletions(-) + +--------------------------------------------------- +2010-01-19 16:09:50 +0000 Tony Finch + +unifdefall: tidy copyright notice to match unifdef.c + + unifdefall.sh | 7 +++---- + 1 files changed, 3 insertions(+), 4 deletions(-) + +--------------------------------------------------- +2010-01-19 13:37:00 +0000 Tony Finch + +release.sh: Add INSTALL to list of tarball contents. + + release.sh | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2010-01-19 13:36:22 +0000 Tony Finch + +Add Jonathan Nieder to unifdefall's copyright declaration. + + unifdefall.sh | 6 ++++-- + 1 files changed, 4 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2010-01-15 18:37:39 +0000 Tony Finch + +Clean up the Makefile. + + Makefile | 27 ++++++++++++++------------- + 1 files changed, 14 insertions(+), 13 deletions(-) + +--------------------------------------------------- +2010-01-15 18:33:05 +0000 Tony Finch + +Automatic install support. + +Add an install target to the Makefile. Using separate ${prefix} and +${DESTDIR} variables opens the door to hardcoding the path to unifdef +in unifdefall if we ever need to. + +Move the installation instructions from the README to a new INSTALL +file to make it easier for packagers to omit irrelevant compilation +instructions from the binary package's documentation. + +Submitted-by: Jonathan Nieder + + INSTALL | 18 ++++++++++++++++++ + Makefile | 20 +++++++++++++++++++- + README | 13 ++----------- + 3 files changed, 39 insertions(+), 12 deletions(-) + +--------------------------------------------------- +2010-01-15 17:43:17 +0000 Tony Finch + +Makefile: do not remove Changelog on clean + +Regenerating the Changelog requires access to the unifdef CVS +repository. + +Submitted-by: Jonathan Nieder + + Makefile | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2010-01-15 17:41:21 +0000 Tony Finch + +unifdefall: look for unifdef in $(dirname $0) + +For debugging and for the test suite it is convenient is +unifdefall can be run in place without relying on unifdef being +installed elsewhere. So change unifdefall to look for unifdef in +the containing directory. + +For compatibility, if unifdef is not present in the directory +containing unifdefall, fall back to searching the $PATH for it. +Some one might have installed unifdef and unifdefall to +different directories. + +With this change, 'make test' no longer fails in if1-a.sh when +unifdef is not present on the $PATH. Also, the test suite will +be a little better at catching new regressions if an old version +of unifdef is installed, since the unifdefall tests will no +longer be testing the installed unifdef. + +Submitted-by: Jonathan Nieder + + unifdefall.sh | 16 ++++++++++++---- + 1 files changed, 12 insertions(+), 4 deletions(-) + +--------------------------------------------------- +2009-12-02 15:21:22 +0000 Tony Finch + +Fix ident string -- gcc optimised it away. + + unifdef.c | 9 ++++----- + 1 files changed, 4 insertions(+), 5 deletions(-) + +--------------------------------------------------- +2009-11-27 17:30:39 +0000 Tony Finch + +Include full CVS log in the Changelog. + + Makefile | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2009-11-27 17:24:25 +0000 Tony Finch + +release.sh: remove tests/CVS from tarball, and upload files faster. + + release.sh | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2009-11-27 17:21:26 +0000 Tony Finch + +fix invalid array access when nesting limit exceeded + +If the number of nested #if blocks exceeds 64, nest() increments +the nesting depth and then reports an error. The message includes +the line number for the start of the current #if block, which is +read from past the end of the relevant array. + +Avoid the out-of-bounds read by reporting the error and exiting +before the nesting depth has a chance to increase. + +Submitted-by: Jonathan Nieder + + unifdef.c | 8 +++++--- + 1 files changed, 5 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2009-11-27 17:14:32 +0000 Tony Finch + +runtests.sh: portability: . does not search current directory + +POSIX.1-2008 dot searches only the $PATH and not the current +directory for pathnames with no / in them. Accordingly, since +version 4.0-alpha, bash does not search the current directory +when in posix (sh) mode. The fix is to specify ./ explicitly. + +Submitted-by: Jonathan Nieder + + runtests.sh | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2009-11-27 15:40:10 +0000 Tony Finch + +Include a link to the web page in a comment in unifdef.c + +This is mainly for the benefit of the Linux kernel's stand-alone version. + + unifdef.c | 6 ++++-- + 1 files changed, 4 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2009-11-27 14:35:51 +0000 Tony Finch + +Consistent ordering of ${got} and ${exp} in the test script + + runtests.sh | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2009-11-27 14:34:09 +0000 Tony Finch + +Include the tests in the web page + + index.html.in | 4 +++- + release.sh | 4 ++-- + 2 files changed, 5 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2009-11-27 14:32:49 +0000 Tony Finch + +Improve phrasing on web page + + index.html.in | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2009-11-27 14:30:02 +0000 Tony Finch + +Run the tests in the correct directory + + Makefile | 4 ++-- + runtests.sh | 3 ++- + 2 files changed, 4 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2009-11-27 14:21:36 +0000 Tony Finch + +Add some unifdefall test cases. + + tests/if1-a.exprc | 1 + + tests/if1-a.sh | 1 + + tests/if2-a.exprc | 1 + + tests/if2-a.sh | 1 + + tests/if3-a.exprc | 1 + + tests/if3-a.sh | 1 + + tests/if4-a.exprc | 1 + + tests/if4-a.sh | 1 + + tests/if5-a.exprc | 1 + + tests/if5-a.sh | 1 + + 10 files changed, 10 insertions(+), 0 deletions(-) + +--------------------------------------------------- +2009-11-27 14:20:59 +0000 Tony Finch + +Ensure we clean up after a successful test. + + runtests.sh | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2009-11-27 14:08:08 +0000 Tony Finch + +Simplify the test suite so that runtests.sh is not specific to unifdef. + + Makefile | 5 +-- + runtests.sh | 65 ++++++++++++++++++--------------------------------- + tests/args1.sh | 1 + + tests/args2.sh | 1 + + tests/blank0d.args | 1 - + tests/blank0d.sh | 1 + + tests/blank0u.args | 1 - + tests/blank0u.sh | 1 + + tests/blank1d.args | 1 - + tests/blank1d.sh | 1 + + tests/blank1u.args | 1 - + tests/blank1u.sh | 1 + + tests/blank2d.args | 1 - + tests/blank2d.sh | 1 + + tests/blank2u.args | 1 - + tests/blank2u.sh | 1 + + tests/blank3d.args | 1 - + tests/blank3d.sh | 1 + + tests/blank3u.args | 1 - + tests/blank3u.sh | 1 + + tests/blank4d.args | 1 - + tests/blank4d.sh | 1 + + tests/blank4u.args | 1 - + tests/blank4u.sh | 1 + + tests/empty.sh | 1 + + tests/if1-k.args | 1 - + tests/if1-k.sh | 1 + + tests/if1-kDU.args | 1 - + tests/if1-kDU.sh | 1 + + tests/if1.sh | 1 + + tests/if2-k.args | 1 - + tests/if2-k.sh | 1 + + tests/if2-kDU.args | 1 - + tests/if2-kDU.sh | 1 + + tests/if2.sh | 1 + + tests/if3-k.args | 1 - + tests/if3-k.sh | 1 + + tests/if3-kDU.args | 1 - + tests/if3-kDU.sh | 1 + + tests/if3.sh | 1 + + tests/if4-k.args | 1 - + tests/if4-k.sh | 1 + + tests/if4-kDU.args | 1 - + tests/if4-kDU.sh | 1 + + tests/if4.sh | 1 + + tests/if5-k.args | 1 - + tests/if5-k.sh | 1 + + tests/if5-kDU.args | 1 - + tests/if5-kDU.sh | 1 + + tests/if5.sh | 1 + + tests/none.sh | 1 + + tests/small1.sh | 1 + + tests/small2.sh | 1 + + tests/spaces1.sh | 1 + + tests/spaces2.sh | 1 + + tests/spaces3.sh | 1 + + tests/spaces4.sh | 1 + + 57 files changed, 60 insertions(+), 65 deletions(-) + +--------------------------------------------------- +2009-11-27 13:36:39 +0000 Tony Finch + +Test suite tweaks. + +Move the runtests script into the main source directory. +Remove the redundant .c. from the expected output filenames. +Run the tests in a separate working directory. +Include the tests in the release. + + Makefile | 8 ++++-- + release.sh | 7 +++-- + runtests.sh | 17 +++++++------- + tests/args1.c.expout | 1 - + tests/args1.c.exprc | 1 - + tests/args2.c.expout | 3 -- + tests/args2.c.exprc | 1 - + tests/blank0d.c.expout | 23 -------------------- + tests/blank0d.c.exprc | 1 - + tests/blank0u.c.expout | 22 ------------------- + tests/blank0u.c.exprc | 1 - + tests/blank1d.c.expout | 23 -------------------- + tests/blank1d.c.exprc | 1 - + tests/blank1u.c.expout | 21 ------------------ + tests/blank1u.c.exprc | 1 - + tests/blank2d.c.expout | 23 -------------------- + tests/blank2d.c.exprc | 1 - + tests/blank2u.c.expout | 20 ----------------- + tests/blank2u.c.exprc | 1 - + tests/blank3d.c.expout | 23 -------------------- + tests/blank3d.c.exprc | 1 - + tests/blank3u.c.expout | 19 ---------------- + tests/blank3u.c.exprc | 1 - + tests/blank4d.c.expout | 23 -------------------- + tests/blank4d.c.exprc | 1 - + tests/blank4u.c.expout | 18 --------------- + tests/blank4u.c.exprc | 1 - + tests/empty.c.exprc | 1 - + tests/if1-a.c.expout | 15 ------------- + tests/if1-k.c.expout | 29 ------------------------- + tests/if1-k.c.exprc | 1 - + tests/if1-kDU.c.expout | 19 ---------------- + tests/if1-kDU.c.exprc | 1 - + tests/if1.c.expout | 15 ------------- + tests/if1.c.exprc | 1 - + tests/if2-a.c.expout | 12 ---------- + tests/if2-k.c.expout | 20 ----------------- + tests/if2-k.c.exprc | 1 - + tests/if2-kDU.c.expout | 16 -------------- + tests/if2-kDU.c.exprc | 1 - + tests/if2.c.expout | 12 ---------- + tests/if2.c.exprc | 1 - + tests/if3-a.c.expout | 12 ---------- + tests/if3-k.c.expout | 20 ----------------- + tests/if3-k.c.exprc | 1 - + tests/if3-kDU.c.expout | 16 -------------- + tests/if3-kDU.c.exprc | 1 - + tests/if3.c.expout | 12 ---------- + tests/if3.c.exprc | 1 - + tests/if4-a.c.expout | 21 ------------------ + tests/if4-k.c.expout | 41 ----------------------------------- + tests/if4-k.c.exprc | 1 - + tests/if4-kDU.c.expout | 25 --------------------- + tests/if4-kDU.c.exprc | 1 - + tests/if4.c.expout | 21 ------------------ + tests/if4.c.exprc | 1 - + tests/if5-a.c.expout | 27 ----------------------- + tests/if5-k.c.expout | 55 ------------------------------------------------ + tests/if5-k.c.exprc | 1 - + tests/if5-kDU.c.expout | 31 --------------------------- + tests/if5-kDU.c.exprc | 1 - + tests/if5.c.expout | 27 ----------------------- + tests/if5.c.exprc | 1 - + tests/none.c.expout | 4 --- + tests/none.c.exprc | 1 - + tests/runtests | 51 -------------------------------------------- + tests/small1.c.expout | 12 ---------- + tests/small1.c.exprc | 1 - + tests/small2.c.expout | 12 ---------- + tests/small2.c.exprc | 1 - + tests/spaces1.c.expout | 12 ---------- + tests/spaces1.c.exprc | 1 - + tests/spaces2.c.expout | 12 ---------- + tests/spaces2.c.exprc | 1 - + tests/spaces3.c.expout | 12 ---------- + tests/spaces3.c.exprc | 1 - + tests/spaces4.c.expout | 12 ---------- + tests/spaces4.c.exprc | 1 - + 78 files changed, 18 insertions(+), 841 deletions(-) + +--------------------------------------------------- +2009-11-27 13:08:58 +0000 Tony Finch + +Additional tests from Bob Proulx + +Add his copyright notice to all the old tests. + + runtests.sh | 6 ++++- + tests/if1-a.c.expout | 15 +++++++++++ + tests/if1-a.expout | 15 +++++++++++ + tests/if1-k.args | 1 + + tests/if1-k.c | 37 ++++++++++++++++++++++++++++ + tests/if1-k.c.expout | 29 ++++++++++++++++++++++ + tests/if1-k.c.exprc | 1 + + tests/if1-k.expout | 29 ++++++++++++++++++++++ + tests/if1-k.exprc | 1 + + tests/if1-kDU.args | 1 + + tests/if1-kDU.c | 37 ++++++++++++++++++++++++++++ + tests/if1-kDU.c.expout | 19 ++++++++++++++ + tests/if1-kDU.c.exprc | 1 + + tests/if1-kDU.expout | 19 ++++++++++++++ + tests/if1-kDU.exprc | 1 + + tests/if1.c | 3 ++ + tests/if1.c.expout | 3 ++ + tests/if1.expout | 3 ++ + tests/if2-a.c.expout | 12 +++++++++ + tests/if2-a.expout | 12 +++++++++ + tests/if2-k.args | 1 + + tests/if2-k.c | 28 +++++++++++++++++++++ + tests/if2-k.c.expout | 20 +++++++++++++++ + tests/if2-k.c.exprc | 1 + + tests/if2-k.expout | 20 +++++++++++++++ + tests/if2-k.exprc | 1 + + tests/if2-kDU.args | 1 + + tests/if2-kDU.c | 28 +++++++++++++++++++++ + tests/if2-kDU.c.expout | 16 ++++++++++++ + tests/if2-kDU.c.exprc | 1 + + tests/if2-kDU.expout | 16 ++++++++++++ + tests/if2-kDU.exprc | 1 + + tests/if2.c | 3 ++ + tests/if2.c.expout | 3 ++ + tests/if2.expout | 3 ++ + tests/if3-a.c.expout | 12 +++++++++ + tests/if3-a.expout | 12 +++++++++ + tests/if3-k.args | 1 + + tests/if3-k.c | 28 +++++++++++++++++++++ + tests/if3-k.c.expout | 20 +++++++++++++++ + tests/if3-k.c.exprc | 1 + + tests/if3-k.expout | 20 +++++++++++++++ + tests/if3-k.exprc | 1 + + tests/if3-kDU.args | 1 + + tests/if3-kDU.c | 28 +++++++++++++++++++++ + tests/if3-kDU.c.expout | 16 ++++++++++++ + tests/if3-kDU.c.exprc | 1 + + tests/if3-kDU.expout | 16 ++++++++++++ + tests/if3-kDU.exprc | 1 + + tests/if3.c | 3 ++ + tests/if3.c.expout | 3 ++ + tests/if3.expout | 3 ++ + tests/if4-a.c.expout | 21 ++++++++++++++++ + tests/if4-a.expout | 21 ++++++++++++++++ + tests/if4-k.args | 1 + + tests/if4-k.c | 49 +++++++++++++++++++++++++++++++++++++ + tests/if4-k.c.expout | 41 +++++++++++++++++++++++++++++++ + tests/if4-k.c.exprc | 1 + + tests/if4-k.expout | 41 +++++++++++++++++++++++++++++++ + tests/if4-k.exprc | 1 + + tests/if4-kDU.args | 1 + + tests/if4-kDU.c | 49 +++++++++++++++++++++++++++++++++++++ + tests/if4-kDU.c.expout | 25 +++++++++++++++++++ + tests/if4-kDU.c.exprc | 1 + + tests/if4-kDU.expout | 25 +++++++++++++++++++ + tests/if4-kDU.exprc | 1 + + tests/if4.c | 3 ++ + tests/if4.c.expout | 3 ++ + tests/if4.expout | 3 ++ + tests/if5-a.c.expout | 27 ++++++++++++++++++++ + tests/if5-a.expout | 27 ++++++++++++++++++++ + tests/if5-k.args | 1 + + tests/if5-k.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++ + tests/if5-k.c.expout | 55 +++++++++++++++++++++++++++++++++++++++++ + tests/if5-k.c.exprc | 1 + + tests/if5-k.expout | 55 +++++++++++++++++++++++++++++++++++++++++ + tests/if5-k.exprc | 1 + + tests/if5-kDU.args | 1 + + tests/if5-kDU.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++ + tests/if5-kDU.c.expout | 31 +++++++++++++++++++++++ + tests/if5-kDU.c.exprc | 1 + + tests/if5-kDU.expout | 31 +++++++++++++++++++++++ + tests/if5-kDU.exprc | 1 + + tests/if5.c | 3 ++ + tests/if5.c.expout | 3 ++ + tests/if5.expout | 3 ++ + tests/none.c | 3 ++ + tests/none.c.expout | 3 ++ + tests/none.expout | 3 ++ + tests/runtests | 6 ++++- + tests/small1.c | 3 ++ + tests/small1.c.expout | 3 ++ + tests/small1.expout | 3 ++ + tests/small2.c | 3 ++ + tests/small2.c.expout | 3 ++ + tests/small2.expout | 3 ++ + tests/spaces1.c | 3 ++ + tests/spaces1.c.expout | 3 ++ + tests/spaces1.expout | 3 ++ + tests/spaces2.c | 3 ++ + tests/spaces2.c.expout | 3 ++ + tests/spaces2.expout | 3 ++ + tests/spaces3.c | 3 ++ + tests/spaces3.c.expout | 3 ++ + tests/spaces3.expout | 3 ++ + tests/spaces4.c | 3 ++ + tests/spaces4.c.expout | 3 ++ + tests/spaces4.expout | 3 ++ + 108 files changed, 1276 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2009-11-27 12:48:13 +0000 Tony Finch + +List significant contributions in the README + + README | 28 +++++++++++++++++++++------- + 1 files changed, 21 insertions(+), 7 deletions(-) + +--------------------------------------------------- +2009-11-27 12:36:54 +0000 Tony Finch + +Improve the blurb on the web page, based on the Debian package's + +description by Jonathan Nieder . + + index.html.in | 16 ++++++++++++---- + 1 files changed, 12 insertions(+), 4 deletions(-) + +--------------------------------------------------- +2009-11-26 14:12:30 +0000 Tony Finch + +Fix web page markup + + index.html.in | 14 ++++++++------ + 1 files changed, 8 insertions(+), 6 deletions(-) + +--------------------------------------------------- +2009-11-26 14:01:26 +0000 Tony Finch + +Makefile: clean index.html generated by release.sh + + Makefile | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2009-11-26 13:56:22 +0000 Tony Finch + +Do not edit index.html in place + + index.html.in | 4 ++-- + release.sh | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +--------------------------------------------------- +2009-11-26 13:54:10 +0000 Tony Finch + +Try again to prevent CVS keyword expansion in the wrong part of release.sh + + release.sh | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2009-11-26 13:52:09 +0000 Tony Finch + +Do not expand CVS keywords in the wrong part of release.sh + + release.sh | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2009-11-26 13:50:10 +0000 Tony Finch + +Improved release process. + +Calculate the version number from the sum of the CVS idents. +Adjust the version number in the web page. + + release.sh | 12 +++++++----- + 1 files changed, 7 insertions(+), 5 deletions(-) + +--------------------------------------------------- +2009-11-26 13:48:45 +0000 Tony Finch + +Add a web page. Use the same title in the README and index.html. + + README | 4 ++-- + index.html.in | 46 ++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 48 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2009-11-26 12:54:39 +0000 Tony Finch + +unifdefall: optimise the loop that builds the unifdef command. + +The old code used a shell loop to convert each controlling macro +definition into a command-line argument, reading the macro definitions +file each time. The new code converts the list of controlling macros +into a sed script which can run through the list of macro definitions +in one go. + +Add some explanatory comments, since the code is quite meta. + +Submitted-by: Jonathan Nieder + + unifdefall.sh | 24 ++++++++++++++++-------- + 1 files changed, 16 insertions(+), 8 deletions(-) + +--------------------------------------------------- +2009-11-26 02:22:24 +0000 Tony Finch + +unifdefall: Use {} instead of () for redirecting a group of commands. + +Submitted-by: Jonathan Nieder + + unifdefall.sh | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2009-11-26 02:14:47 +0000 Tony Finch + +unifdefall: remove debugging remnants. + + unifdefall.sh | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2009-11-25 19:54:34 +0000 Tony Finch + +unifdefall: update copyright dates. + + unifdefall.sh | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2009-11-25 19:33:51 +0000 Tony Finch + +Makefile: really clean more. + + Makefile | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2009-11-25 19:32:40 +0000 Tony Finch + +unifdefall: portability: do not try to use EREs with sed + +BSD sed uses -E and GNU sed uses -r to specify that extended +regular expressions should be used instead of BREs. + +Some of the sed scripts have been simplified by relying on 'cpp -dM' +to produce lines of the form '#define MACRO value', with a single +space as delimiting whitespace. + +While we're modifying the sed scripts, also change the shell +quoting script to correctly capture more characters when they +appear in the right-hand sides of macro definitions (e.g., $). + +Submitted-by: Jonathan Nieder + + unifdefall.sh | 17 ++++++++--------- + 1 files changed, 8 insertions(+), 9 deletions(-) + +--------------------------------------------------- +2009-11-25 19:24:59 +0000 Tony Finch + +unifdefall: fix mktemp invocation + +Actually remove the -t that should have gone in rev. 1.14 + + unifdefall.sh | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2009-11-25 19:23:12 +0000 Tony Finch + +unifdefall: simplify redirections to the temporary script + + unifdefall.sh | 19 ++++++++++--------- + 1 files changed, 10 insertions(+), 9 deletions(-) + +--------------------------------------------------- +2009-11-25 18:05:11 +0000 Tony Finch + +unifdefall: force the "C" locale to avoid braindamage + +Reported-by: Jonathan Nieder + + unifdefall.sh | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2009-11-25 18:02:41 +0000 Tony Finch + +unifdefall: clean up temporary files on failure + +Submitted-by: Jonathan Nieder + + unifdefall.sh | 5 ++--- + 1 files changed, 2 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2009-11-25 18:00:54 +0000 Tony Finch + +unifdefall: allow spaces in $TMPDIR + +Submitted-by: Jonathan Nieder + + unifdefall.sh | 28 ++++++++++++++-------------- + 1 files changed, 14 insertions(+), 14 deletions(-) + +--------------------------------------------------- +2009-11-25 17:56:10 +0000 Tony Finch + +unifdefall: portability: avoid mktemp -t + +GNU mktemp interprets the argument after -t as the entire template +and errors out if it contains no XXXX substring. BSD systems, on +the other hand, treat the argument as a prefix for the mktemp +template and use it verbatim, resulting in long, ugly filenames +like foo.XXXXX.e30GuhHVzU if the string contains embedded Xs. + +So avoid -t and use TMPDIR explicitly. + +Submitted-by: Jonathan Nieder + + unifdefall.sh | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2009-11-25 17:54:13 +0000 Tony Finch + +Use $() instead of `` in unifdefall. + + unifdefall.sh | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2009-11-25 00:11:02 +0000 Tony Finch + +Improve the behaviour of the -B option. + +Submitted-by: Anders H Kaseorg + + tests/blank1d.c.expout | 1 + + tests/blank1d.expout | 1 + + tests/blank2d.c.expout | 2 ++ + tests/blank2d.expout | 2 ++ + tests/blank3d.c.expout | 3 +++ + tests/blank3d.expout | 3 +++ + tests/blank4d.c.expout | 4 ++++ + tests/blank4d.expout | 4 ++++ + unifdef.1 | 4 ++-- + unifdef.c | 17 +++++++++++------ + 10 files changed, 33 insertions(+), 8 deletions(-) + +--------------------------------------------------- +2009-11-25 00:03:44 +0000 Tony Finch + +Add some test cases for blank line squashing. + + tests/blank0d.args | 1 + + tests/blank0d.c | 25 +++++++++++++++++++++++++ + tests/blank0d.c.expout | 23 +++++++++++++++++++++++ + tests/blank0d.c.exprc | 1 + + tests/blank0d.expout | 23 +++++++++++++++++++++++ + tests/blank0d.exprc | 1 + + tests/blank0u.args | 1 + + tests/blank0u.c | 25 +++++++++++++++++++++++++ + tests/blank0u.c.expout | 22 ++++++++++++++++++++++ + tests/blank0u.c.exprc | 1 + + tests/blank0u.expout | 22 ++++++++++++++++++++++ + tests/blank0u.exprc | 1 + + tests/blank1d.args | 1 + + tests/blank1d.c | 25 +++++++++++++++++++++++++ + tests/blank1d.c.expout | 22 ++++++++++++++++++++++ + tests/blank1d.c.exprc | 1 + + tests/blank1d.expout | 22 ++++++++++++++++++++++ + tests/blank1d.exprc | 1 + + tests/blank1u.args | 1 + + tests/blank1u.c | 25 +++++++++++++++++++++++++ + tests/blank1u.c.expout | 21 +++++++++++++++++++++ + tests/blank1u.c.exprc | 1 + + tests/blank1u.expout | 21 +++++++++++++++++++++ + tests/blank1u.exprc | 1 + + tests/blank2d.args | 1 + + tests/blank2d.c | 25 +++++++++++++++++++++++++ + tests/blank2d.c.expout | 21 +++++++++++++++++++++ + tests/blank2d.c.exprc | 1 + + tests/blank2d.expout | 21 +++++++++++++++++++++ + tests/blank2d.exprc | 1 + + tests/blank2u.args | 1 + + tests/blank2u.c | 25 +++++++++++++++++++++++++ + tests/blank2u.c.expout | 20 ++++++++++++++++++++ + tests/blank2u.c.exprc | 1 + + tests/blank2u.expout | 20 ++++++++++++++++++++ + tests/blank2u.exprc | 1 + + tests/blank3d.args | 1 + + tests/blank3d.c | 25 +++++++++++++++++++++++++ + tests/blank3d.c.expout | 20 ++++++++++++++++++++ + tests/blank3d.c.exprc | 1 + + tests/blank3d.expout | 20 ++++++++++++++++++++ + tests/blank3d.exprc | 1 + + tests/blank3u.args | 1 + + tests/blank3u.c | 25 +++++++++++++++++++++++++ + tests/blank3u.c.expout | 19 +++++++++++++++++++ + tests/blank3u.c.exprc | 1 + + tests/blank3u.expout | 19 +++++++++++++++++++ + tests/blank3u.exprc | 1 + + tests/blank4d.args | 1 + + tests/blank4d.c | 25 +++++++++++++++++++++++++ + tests/blank4d.c.expout | 19 +++++++++++++++++++ + tests/blank4d.c.exprc | 1 + + tests/blank4d.expout | 19 +++++++++++++++++++ + tests/blank4d.exprc | 1 + + tests/blank4u.args | 1 + + tests/blank4u.c | 25 +++++++++++++++++++++++++ + tests/blank4u.c.expout | 18 ++++++++++++++++++ + tests/blank4u.c.exprc | 1 + + tests/blank4u.expout | 18 ++++++++++++++++++ + tests/blank4u.exprc | 1 + + 60 files changed, 690 insertions(+), 0 deletions(-) + +--------------------------------------------------- +2009-11-24 23:46:36 +0000 Tony Finch + +Further test script clean-ups. + + runtests.sh | 27 ++++++++++++--------------- + tests/runtests | 27 ++++++++++++--------------- + 2 files changed, 24 insertions(+), 30 deletions(-) + +--------------------------------------------------- +2009-11-24 22:40:01 +0000 Tony Finch + +Add a couple of tests for macro argument handling + + tests/args1.c | 3 +++ + tests/args1.c.expout | 1 + + tests/args1.c.exprc | 1 + + tests/args1.expout | 1 + + tests/args1.exprc | 1 + + tests/args2.c | 3 +++ + tests/args2.c.expout | 3 +++ + tests/args2.c.exprc | 1 + + tests/args2.expout | 3 +++ + tests/args2.exprc | 1 + + 10 files changed, 18 insertions(+), 0 deletions(-) + +--------------------------------------------------- +2009-11-24 22:39:36 +0000 Tony Finch + +Automatically run newly-added tests. + + runtests.sh | 7 +++---- + tests/runtests | 7 +++---- + 2 files changed, 6 insertions(+), 8 deletions(-) + +--------------------------------------------------- +2009-11-24 22:32:35 +0000 Tony Finch + +Fix detection of missing test output files. + + runtests.sh | 3 +-- + tests/runtests | 3 +-- + 2 files changed, 2 insertions(+), 4 deletions(-) + +--------------------------------------------------- +2009-11-24 22:25:55 +0000 Tony Finch + +Move tests/Makefile into the main Makefile. + + Makefile | 6 +++++- + tests/Makefile | 5 ----- + 2 files changed, 5 insertions(+), 6 deletions(-) + +--------------------------------------------------- +2009-11-24 22:20:26 +0000 Tony Finch + +Support non-standard test command arguments. + + runtests.sh | 7 ++++++- + tests/runtests | 7 ++++++- + 2 files changed, 12 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2009-11-24 22:13:15 +0000 Tony Finch + +Remove redundancy from the test scripts. + + runtests.sh | 47 ++++++++++++++++++++++++++++++++++++++ + tests/Makefile | 11 +------- + tests/empty.c.exprc | 1 + + tests/empty.exprc | 1 + + tests/if1.c.exprc | 1 + + tests/if1.exprc | 1 + + tests/if2.c.exprc | 1 + + tests/if2.exprc | 1 + + tests/if3.c.exprc | 1 + + tests/if3.exprc | 1 + + tests/if4.c.exprc | 1 + + tests/if4.exprc | 1 + + tests/if5.c.exprc | 1 + + tests/if5.exprc | 1 + + tests/none.c.exprc | 1 + + tests/none.exprc | 1 + + tests/runtests | 47 ++++++++++++++++++++++++++++++++++++++ + tests/simple1 | 58 ----------------------------------------------- + tests/simple2 | 60 ------------------------------------------------- + tests/small1.c.exprc | 1 + + tests/small1.exprc | 1 + + tests/small2.c.exprc | 1 + + tests/small2.exprc | 1 + + tests/spaces1.c.exprc | 1 + + tests/spaces1.exprc | 1 + + tests/spaces2.c.exprc | 1 + + tests/spaces2.exprc | 1 + + tests/spaces3.c.exprc | 1 + + tests/spaces3.exprc | 1 + + tests/spaces4.c.exprc | 1 + + tests/spaces4.exprc | 1 + + 31 files changed, 122 insertions(+), 127 deletions(-) + +--------------------------------------------------- +2009-11-24 21:32:53 +0000 Tony Finch + +Make the simple3 test script redundant. + + tests/Makefile | 2 +- + tests/simple2 | 6 +++- + tests/simple3 | 58 -------------------------------------------------------- + 3 files changed, 5 insertions(+), 61 deletions(-) + +--------------------------------------------------- +2009-11-24 21:27:29 +0000 Tony Finch + +Reduce repetition of the test command in the scripts. + + tests/simple1 | 14 ++++++++------ + tests/simple2 | 14 ++++++++------ + tests/simple3 | 14 ++++++++------ + 3 files changed, 24 insertions(+), 18 deletions(-) + +--------------------------------------------------- +2009-11-24 21:23:30 +0000 Tony Finch + +Fix relative path from tests to unifdef executable. + + tests/simple1 | 2 +- + tests/simple2 | 2 +- + tests/simple3 | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2009-11-24 21:21:47 +0000 Tony Finch + +Import Bob Proulx's test suite from the Debian package. + + tests/Makefile | 12 ++++++++++ + tests/if1.c | 22 ++++++++++++++++++ + tests/if1.c.expout | 12 ++++++++++ + tests/if1.expout | 12 ++++++++++ + tests/if2.c | 13 +++++++++++ + tests/if2.c.expout | 9 +++++++ + tests/if2.expout | 9 +++++++ + tests/if3.c | 13 +++++++++++ + tests/if3.c.expout | 9 +++++++ + tests/if3.expout | 9 +++++++ + tests/if4.c | 34 +++++++++++++++++++++++++++++ + tests/if4.c.expout | 18 +++++++++++++++ + tests/if4.expout | 18 +++++++++++++++ + tests/if5.c | 48 +++++++++++++++++++++++++++++++++++++++++ + tests/if5.c.expout | 24 ++++++++++++++++++++ + tests/if5.expout | 24 ++++++++++++++++++++ + tests/none.c | 1 + + tests/none.c.expout | 1 + + tests/none.expout | 1 + + tests/simple1 | 56 ++++++++++++++++++++++++++++++++++++++++++++++++ + tests/simple2 | 56 ++++++++++++++++++++++++++++++++++++++++++++++++ + tests/simple3 | 56 ++++++++++++++++++++++++++++++++++++++++++++++++ + tests/small1.c | 13 +++++++++++ + tests/small1.c.expout | 9 +++++++ + tests/small1.expout | 9 +++++++ + tests/small2.c | 13 +++++++++++ + tests/small2.c.expout | 9 +++++++ + tests/small2.expout | 9 +++++++ + tests/spaces1.c | 13 +++++++++++ + tests/spaces1.c.expout | 9 +++++++ + tests/spaces1.expout | 9 +++++++ + tests/spaces2.c | 13 +++++++++++ + tests/spaces2.c.expout | 9 +++++++ + tests/spaces2.expout | 9 +++++++ + tests/spaces3.c | 13 +++++++++++ + tests/spaces3.c.expout | 9 +++++++ + tests/spaces3.expout | 9 +++++++ + tests/spaces4.c | 13 +++++++++++ + tests/spaces4.c.expout | 9 +++++++ + tests/spaces4.expout | 9 +++++++ + 40 files changed, 643 insertions(+), 0 deletions(-) + +--------------------------------------------------- +2009-11-24 17:50:35 +0000 Tony Finch + +Less stilted English in the man page. + + unifdef.1 | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2009-11-24 17:49:13 +0000 Tony Finch + +Handle macros with arguments. + +Submitted-by: Anders H Kaseorg + + unifdef.1 | 13 ++++++++++++- + unifdef.c | 32 ++++++++++++++++++++++++++++++-- + 2 files changed, 42 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2009-11-24 16:51:38 +0000 Tony Finch + +Use isalnum() instead of isalpha() + isdigit(). + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2009-11-24 12:14:37 +0000 Tony Finch + +Run the release script verbosely. + + release.sh | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2009-11-24 12:12:31 +0000 Tony Finch + +Add a non-portability note to the README. + + README | 8 +++++++- + 1 files changed, 7 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2009-11-24 11:58:41 +0000 Tony Finch + +Rename getline() to parseline() to avoid clashing with a glibc function. + + unifdef.c | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +--------------------------------------------------- +2009-11-23 19:15:42 +0000 Tony Finch + +Add a realclean target + + Makefile | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2009-11-23 19:14:02 +0000 Tony Finch + +Add a README file + + Makefile | 4 ++-- + README | 21 +++++++++++++++++++++ + release.sh | 3 ++- + 3 files changed, 25 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2009-11-23 19:07:17 +0000 Tony Finch + +Further improvements to the release scripts. + +Make the generated filenames more standard. + + Makefile | 16 ++++++++-------- + release.sh | 16 +++++++++++----- + 2 files changed, 19 insertions(+), 13 deletions(-) + +--------------------------------------------------- +2009-11-23 18:54:52 +0000 Tony Finch + +Include the Release script in the release. + + release.sh | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +--------------------------------------------------- +2009-11-23 18:53:35 +0000 Tony Finch + +Revamp Makefile and add a separate Release script. + + Makefile | 20 +++++++------------- + release.sh | 22 ++++++++++++++++++++++ + 2 files changed, 29 insertions(+), 13 deletions(-) + +--------------------------------------------------- +2009-11-23 18:37:17 +0000 Tony Finch + +Document -d flag and update copyright notices. + + unifdef.1 | 11 +++++++---- + unifdef.c | 6 +++--- + 2 files changed, 10 insertions(+), 7 deletions(-) + +--------------------------------------------------- +2009-11-23 18:24:55 +0000 Tony Finch + +Fix regression in ! operator. + +Since revision 1.180, unifdef is ignoring negations in the +outermost expression of an #if conditional. Fix the regression, +and add a debug statement to help if any similar problems ever +need to be tracked down. + +Submitted by: Jonathan Nieder + + unifdef.c | 7 +++++-- + 1 files changed, 5 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2009-11-23 17:59:33 +0000 Tony Finch + +Correct the HISTORY section and add an AUTHORS section. + +Obtained from FreeBSD. + + unifdef.1 | 10 ++++++++-- + 1 files changed, 8 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2009-11-23 17:58:27 +0000 Tony Finch + +Add a "release" target + + Makefile | 12 +++++++++++- + 1 files changed, 11 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2008-03-10 16:15:52 +0000 Tony Finch + +update synopsis + + unifdef.1 | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2008-03-10 16:08:47 +0000 Tony Finch + +backwards compatibility option + + unifdef.1 | 12 +++++++++++- + unifdef.c | 14 +++++++++----- + 2 files changed, 20 insertions(+), 6 deletions(-) + +--------------------------------------------------- +2008-03-10 15:56:15 +0000 Tony Finch + +Fix the state transition table. + + unifdef.c | 37 ++++++++++++++++++------------------- + 1 files changed, 18 insertions(+), 19 deletions(-) + +--------------------------------------------------- +2008-03-10 15:24:29 +0000 Tony Finch + +Lenient evaluation of && and || based on an idea from Ben Hutchings at + +Solarflare Communications. + + unifdef.1 | 74 +++++++++++++++++++++++---------- + unifdef.c | 136 +++++++++++++++++++++++++++++++++++++++--------------------- + 2 files changed, 139 insertions(+), 71 deletions(-) + +--------------------------------------------------- +2008-03-10 13:01:40 +0000 Tony Finch + +Compress blank lines, based on an idea from Ben Hutchings at + +Solarflare Communications. + + unifdef.1 | 28 ++++++++++++++++++---------- + unifdef.c | 37 ++++++++++++++++++++++++++----------- + 2 files changed, 44 insertions(+), 21 deletions(-) + +--------------------------------------------------- +2008-03-02 22:23:32 +0000 Tony Finch + +Typo in comment spotted by Hasso Tepper at DragonFlyBSD. + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2008-02-29 13:17:37 +0000 Tony Finch + +Ah, I have worked out another way of triggering the abort. + +I think this fix covers all the cases. + + unifdef.c | 21 ++++++++++++--------- + 1 files changed, 12 insertions(+), 9 deletions(-) + +--------------------------------------------------- +2008-02-29 12:44:25 +0000 Tony Finch + +Remove a bit of copyright crap. + + unifdef.c | 10 +++------- + 1 files changed, 3 insertions(+), 7 deletions(-) + +--------------------------------------------------- +2008-02-29 12:30:36 +0000 Tony Finch + +Sync usage with synopsis in man page + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2008-02-29 12:29:34 +0000 Tony Finch + +Ensure man page is ASCII. + + Makefile | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2008-02-29 12:26:04 +0000 Tony Finch + +Fix an abort caused by files that have #endif and no newline on the + +last line (reported by Joe Karthauser). Also fix a benign uninitialized +variable bug. + + unifdef.c | 19 ++++++++++++++----- + 1 files changed, 14 insertions(+), 5 deletions(-) + +--------------------------------------------------- +2007-04-30 07:37:17 +0000 Tony Finch + +Fix explanation of copyright history. + + unifdef.c | 20 +++++++++++--------- + 1 files changed, 11 insertions(+), 9 deletions(-) + +--------------------------------------------------- +2005-08-12 10:59:21 +0000 Tony Finch + +Allow #if defined SYM as well as #if defined(SYM) + + unifdef.c | 14 +++++++++----- + 1 files changed, 9 insertions(+), 5 deletions(-) + +--------------------------------------------------- +2005-03-08 12:39:01 +0000 Tony Finch + +sync with upstream + + unifdef.1 | 32 ++++++++++++++++---------------- + 1 files changed, 16 insertions(+), 16 deletions(-) + +--------------------------------------------------- +2005-03-08 12:38:48 +0000 Tony Finch + +copyright dates + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2005-03-08 12:07:27 +0000 Tony Finch + +Update the copyright notice to the FreeBSD standard. + +Do not recognize comment markers inside string and character literals. + + unifdef.c | 59 ++++++++++++++++++++++++++++++++++++++++++++--------------- + 1 files changed, 44 insertions(+), 15 deletions(-) + +--------------------------------------------------- +2003-08-12 20:51:30 +0000 Tony Finch + +simpler declaration of copyright[] + + unifdef.c | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2003-08-12 20:33:59 +0000 Tony Finch + +Make the embedded copyright and version information more portable. + +Remove NetBSD cvs id because it is no longer relevant. Remove FreeBSD +cvs id because it isn't relevant upstream. Keep Berkeley runes because +they go with the original licence. + + unifdef.c | 23 ++++++----------------- + 1 files changed, 6 insertions(+), 17 deletions(-) + +--------------------------------------------------- +2003-08-12 20:32:39 +0000 Tony Finch + +FreeBSD cvs id isn't relevant in this file in the upstream version. + + unifdefall.sh | 3 +-- + 1 files changed, 1 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2003-08-12 20:32:12 +0000 Tony Finch + +Current FreeBSD cvs id + + unifdef.1 | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2003-08-12 20:12:24 +0000 Tony Finch + +optionally add #line directives to the output + + unifdef.1 | 11 +++++++++-- + unifdef.c | 20 ++++++++++++++------ + 2 files changed, 23 insertions(+), 8 deletions(-) + +--------------------------------------------------- +2003-08-12 19:39:53 +0000 Tony Finch + +Add a little sanity checking to the state transition table code. + + unifdef.c | 16 +++++++++++++--- + 1 files changed, 13 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2003-08-12 19:35:31 +0000 Tony Finch + +a minor style improvement + + unifdef.c | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +--------------------------------------------------- +2003-08-12 19:23:12 +0000 Tony Finch + +Allow the user to run unifdef without defining any symbols. This is + +useful in conjunction with the -k flag. +Fix a bug in the -s handling code that would have caused out-of-bounds +array accesses. + + unifdef.c | 15 +++++++-------- + 1 files changed, 7 insertions(+), 8 deletions(-) + +--------------------------------------------------- +2003-08-07 16:01:10 +0000 Tony Finch + +Sync with FreeBSD + + unifdef.1 | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2003-07-31 08:21:00 +0000 Tony Finch + +All rights reserved + + unifdef.1 | 4 ++-- + unifdef.c | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +--------------------------------------------------- +2003-07-31 08:20:47 +0000 Tony Finch + +add FreeBSD-style copyright & licence + + unifdefall.sh | 27 +++++++++++++++++++++++++-- + 1 files changed, 25 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2003-07-31 08:10:39 +0000 Tony Finch + +Sync copyright and licence with the code. I've put my copyright line + +below Berkeley's since a lot of the old man page still remains. + + unifdef.1 | 11 ++++------- + 1 files changed, 4 insertions(+), 7 deletions(-) + +--------------------------------------------------- +2003-07-31 07:59:15 +0000 Tony Finch + +Remove clause three of the licence, as permitted by Berkeley. OpenBSD + +have done this globally, but Net- and Free- haven't. I've had two +questions about this recently, and since I don't distribute Berkeley's +licence change statement this is a good way to be clear. + + unifdef.c | 8 ++------ + 1 files changed, 2 insertions(+), 6 deletions(-) + +--------------------------------------------------- +2003-07-01 15:32:48 +0000 Tony Finch + +FreeBSD ident string + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2003-07-01 15:21:25 +0000 Tony Finch + +style tweak + + unifdef.c | 7 ++++--- + 1 files changed, 4 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2003-07-01 15:13:49 +0000 Tony Finch + +Make the handling of EOF a little more elegant. + + unifdef.c | 36 ++++++++++++++++-------------------- + 1 files changed, 16 insertions(+), 20 deletions(-) + +--------------------------------------------------- +2003-07-01 14:53:50 +0000 Tony Finch + +clean + + Makefile | 9 +++++++-- + 1 files changed, 7 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2003-07-01 08:34:43 +0000 Tony Finch + +a comment about line continuations + + unifdef.c | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2003-07-01 08:19:58 +0000 Tony Finch + +Improve the expression evaluator's debugging output. + + unifdef.c | 7 +++++-- + 1 files changed, 5 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2003-06-30 14:30:54 +0000 Tony Finch + +More improvements to comments regarding global variables. + + unifdef.c | 12 +++++++----- + 1 files changed, 7 insertions(+), 5 deletions(-) + +--------------------------------------------------- +2003-06-30 14:26:48 +0000 Tony Finch + +Make a note in a comment about the relationship between getline() and + +skipcomment() w.r.t. the linestate. + + unifdef.c | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2003-06-30 14:22:40 +0000 Tony Finch + +When in text mode, or when ignoring a symbol, skipcomment needs to + +adjust the linestate when it hits a newline. + + unifdef.c | 7 ++++--- + 1 files changed, 4 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2003-06-30 14:03:56 +0000 Tony Finch + +Sync with FreeBSD. + + unifdef.c | 12 +++++++----- + 1 files changed, 7 insertions(+), 5 deletions(-) + +--------------------------------------------------- +2003-01-20 14:43:55 +0000 Tony Finch + +makefile for unifdef + + Makefile | 11 +++++++++++ + 1 files changed, 11 insertions(+), 0 deletions(-) + +--------------------------------------------------- +2003-01-20 14:37:08 +0000 Tony Finch + +Slightly more correct SYNOPSIS + + unifdef.1 | 14 ++++++-------- + unifdef.c | 4 ++-- + 2 files changed, 8 insertions(+), 10 deletions(-) + +--------------------------------------------------- +2003-01-20 14:01:47 +0000 Tony Finch + +add a note about probalems caused by division + + unifdef.c | 6 ++++-- + 1 files changed, 4 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2003-01-20 13:48:06 +0000 Tony Finch + +typo + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2003-01-20 12:46:08 +0000 Tony Finch + +Sync $FreeBSD$ after downstream commit + + unifdef.1 | 4 ++-- + unifdef.c | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +--------------------------------------------------- +2003-01-20 12:05:41 +0000 Tony Finch + +clean up some -o remnants + + unifdef.c | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2003-01-20 12:03:48 +0000 Tony Finch + +terminological consistency: s/modify/edit/ + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2003-01-20 12:03:10 +0000 Tony Finch + +Compactify the Mfoo functions. + + unifdef.c | 15 ++++++--------- + 1 files changed, 6 insertions(+), 9 deletions(-) + +--------------------------------------------------- +2003-01-20 11:46:53 +0000 Tony Finch + +more idiomatic strlcpy usage + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2003-01-20 11:45:32 +0000 Tony Finch + +Correct dodgy handling -- line continuations in keywords are always an + +error. + + unifdef.c | 22 ++++++++++------------ + 1 files changed, 10 insertions(+), 12 deletions(-) + +--------------------------------------------------- +2003-01-20 11:36:12 +0000 Tony Finch + +Rename -o to -e, i.e. "less errors" instead of "allow obfuscation". + + unifdef.1 | 40 ++++++++++++++++++++-------------------- + unifdef.c | 12 ++++++------ + 2 files changed, 26 insertions(+), 26 deletions(-) + +--------------------------------------------------- +2003-01-20 11:22:44 +0000 Tony Finch + +remove another spurious space + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2003-01-20 02:58:11 +0000 Tony Finch + +Improve the handling of multiline preprocessor directives. Don't complain + +when they don't affect the output. Add a switch that causes us to fudge +it instead of complaining when it is possible to do so. + +Prompted by an error report from Poul-Henning Kamp + + unifdef.1 | 24 +++++++++- + unifdef.c | 142 +++++++++++++++++++++++++++++++++++++++++++----------------- + 2 files changed, 123 insertions(+), 43 deletions(-) + +--------------------------------------------------- +2003-01-20 02:53:27 +0000 Tony Finch + +replace accidentally zapped #endif + + unifdef.c | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2003-01-20 02:50:36 +0000 Tony Finch + +Sync $FreeBSD$ + + unifdef.c | 5 ++--- + 1 files changed, 2 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2003-01-20 01:51:11 +0000 Tony Finch + +Deconfuse ingnore[] (which is a per-symbol flag) and ignoring[] + +(which is the stack of ignore states). + + unifdef.c | 10 +++++----- + 1 files changed, 5 insertions(+), 5 deletions(-) + +--------------------------------------------------- +2003-01-20 01:32:23 +0000 Tony Finch + +Whitespace fixes from OpenBSD. + + unifdef.c | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +--------------------------------------------------- +2003-01-20 00:59:36 +0000 Tony Finch + +Be more explicit about the failure mode. + +Reported by: Poul-Henning Kamp + + unifdef.c | 7 ++++--- + 1 files changed, 4 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2003-01-20 00:50:06 +0000 Tony Finch + +typo: maintin -> maintain + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2003-01-20 00:01:49 +0000 Tony Finch + +Purge strcpy() to appease OpenBSD. Consistently use the term "edit" + +when talking about changing preprocessor keywords in the output. + +Suggested by: Ted Unangst + + unifdef.c | 26 +++++++++++++++++++------- + 1 files changed, 19 insertions(+), 7 deletions(-) + +--------------------------------------------------- +2003-01-17 19:19:13 +0000 Tony Finch + +mdoc pedantry from FreeBSD + + unifdef.1 | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +--------------------------------------------------- +2003-01-17 19:04:36 +0000 Tony Finch + +Style fix: brackets around the argument to return. From OpenBSD. + + unifdef.c | 68 ++++++++++++++++++++++++++++++------------------------------ + 1 files changed, 34 insertions(+), 34 deletions(-) + +--------------------------------------------------- +2003-01-17 19:03:02 +0000 Tony Finch + +Add a necessary cast to an argument of printf. From OpenBSD. + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2003-01-17 19:01:59 +0000 Tony Finch + +Whitespace fixes from OpenBSD. + + unifdef.c | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2002-12-13 15:26:41 +0000 Tony Finch + +Damnit, it makes sense for flushline() to be near the #if machine, + +and the diff is doomed to be vast anyway. + + unifdef.c | 37 ++++++++++++++++++------------------- + 1 files changed, 18 insertions(+), 19 deletions(-) + +--------------------------------------------------- +2002-12-13 15:20:05 +0000 Tony Finch + +make warns-clean in an evil manner + + unifdef.c | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2002-12-13 13:58:00 +0000 Tony Finch + +factor out an error message + + unifdef.c | 7 ++++--- + 1 files changed, 4 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2002-12-13 11:44:25 +0000 Tony Finch + +remove an XXX that has been addressed + + unifdef.c | 4 +--- + 1 files changed, 1 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2002-12-13 11:42:37 +0000 Tony Finch + +sort getopt cases + + unifdef.c | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +--------------------------------------------------- +2002-12-13 11:40:08 +0000 Tony Finch + +Use ISO/IEC 9899:1999 minimum translation limits + + unifdef.c | 13 ++++++++----- + 1 files changed, 8 insertions(+), 5 deletions(-) + +--------------------------------------------------- +2002-12-13 11:33:34 +0000 Tony Finch + +expand on unifdef's understanding of C + + unifdef.1 | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2002-12-13 11:24:26 +0000 Tony Finch + +note the appearance of ANSI support + + unifdef.1 | 5 ++++- + 1 files changed, 4 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2002-12-13 11:24:08 +0000 Tony Finch + +describe the limitation on preprocessor lines better + + unifdef.1 | 6 ++++-- + 1 files changed, 4 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-12-13 11:15:20 +0000 Tony Finch + +spot backslash-newline in a preprocessor keyword + + unifdef.c | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2002-12-13 11:13:02 +0000 Tony Finch + +fix an error message + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-12-13 11:11:11 +0000 Tony Finch + +less obfuscated ifdef/ifndef handling + + unifdef.c | 10 +++++----- + 1 files changed, 5 insertions(+), 5 deletions(-) + +--------------------------------------------------- +2002-12-13 11:04:43 +0000 Tony Finch + +comment the state enums + + unifdef.c | 50 +++++++++++++++++++++++++------------------------- + 1 files changed, 25 insertions(+), 25 deletions(-) + +--------------------------------------------------- +2002-12-12 19:53:53 +0000 Tony Finch + +move the forward declaration of struct ops to a better place + + unifdef.c | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2002-12-12 19:52:26 +0000 Tony Finch + +move flushline() back where it used to be + + unifdef.c | 38 +++++++++++++++++++------------------- + 1 files changed, 19 insertions(+), 19 deletions(-) + +--------------------------------------------------- +2002-12-12 19:50:15 +0000 Tony Finch + +more commentary on strlcmp() + + unifdef.c | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2002-12-12 19:46:44 +0000 Tony Finch + +comment all globals + + unifdef.c | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +--------------------------------------------------- +2002-12-12 19:45:29 +0000 Tony Finch + +terminological consistency for pass states + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-12-12 19:43:04 +0000 Tony Finch + +fix some comments + + unifdef.c | 8 ++++++-- + 1 files changed, 6 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-12-12 19:42:23 +0000 Tony Finch + +re-order enums to reduce diffs with FreeBSD + + unifdef.c | 50 +++++++++++++++++++++++++------------------------- + 1 files changed, 25 insertions(+), 25 deletions(-) + +--------------------------------------------------- +2002-12-12 19:38:45 +0000 Tony Finch + +remove some c&p garbage + + unifdef.c | 24 +----------------------- + 1 files changed, 1 insertions(+), 23 deletions(-) + +--------------------------------------------------- +2002-12-12 19:36:23 +0000 Tony Finch + +move flushline closer to its usage point + + unifdef.c | 60 +++++++++++++++++++++++++++++++++++++++++------------------- + 1 files changed, 41 insertions(+), 19 deletions(-) + +--------------------------------------------------- +2002-12-12 19:35:17 +0000 Tony Finch + +rename a variable in process() to reduce diffs with FreeBSD + + unifdef.c | 10 +++++----- + 1 files changed, 5 insertions(+), 5 deletions(-) + +--------------------------------------------------- +2002-12-12 19:29:02 +0000 Tony Finch + +move the tables closer to their interpreters + + unifdef.c | 317 +++++++++++++++++++++++++++++++------------------------------ + 1 files changed, 160 insertions(+), 157 deletions(-) + +--------------------------------------------------- +2002-12-12 19:15:24 +0000 Tony Finch + +reduce the space used by the state transition functions + + unifdef.c | 146 ++++++++++++++++++++++++------------------------------------- + 1 files changed, 57 insertions(+), 89 deletions(-) + +--------------------------------------------------- +2002-12-12 19:04:56 +0000 Tony Finch + +note another diagnostic + + unifdef.1 | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2002-12-12 19:04:56 +0000 Tony Finch + +make everything static, and improve the order of declarations + + unifdef.c | 328 ++++++++++++++++++++++++++++++++---------------------------- + 1 files changed, 175 insertions(+), 153 deletions(-) + +--------------------------------------------------- +2002-12-12 17:59:51 +0000 Tony Finch + +Improve the state table commentary. + + unifdef.c | 14 +++++++------- + 1 files changed, 7 insertions(+), 7 deletions(-) + +--------------------------------------------------- +2002-12-12 17:41:39 +0000 Tony Finch + +reduce state transition table line lengths below 80 + + unifdef.c | 24 ++++++++++++------------ + 1 files changed, 12 insertions(+), 12 deletions(-) + +--------------------------------------------------- +2002-12-12 17:30:55 +0000 Tony Finch + +reduce state function line lengths below 80 + + unifdef.c | 28 ++++++++++++++++------------ + 1 files changed, 16 insertions(+), 12 deletions(-) + +--------------------------------------------------- +2002-12-12 17:24:26 +0000 Tony Finch + +Exit 1 if the output differs from the input. + + unifdef.c | 9 ++++++--- + 1 files changed, 6 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2002-12-12 17:21:22 +0000 Tony Finch + +Exit 2 on error. + + unifdef.c | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2002-12-12 17:21:04 +0000 Tony Finch + +Bring the DIAGNOSTICS in line with reality. + + unifdef.1 | 12 ++++++++---- + 1 files changed, 8 insertions(+), 4 deletions(-) + +--------------------------------------------------- +2002-12-12 17:17:52 +0000 Tony Finch + +restore the complaint about EOF in comments + + unifdef.1 | 5 ++++- + unifdef.c | 6 ++++-- + 2 files changed, 8 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2002-12-12 17:12:57 +0000 Tony Finch + +skipsym doesn't need a separate test for '\0' + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-12-12 17:11:28 +0000 Tony Finch + +rename constexpr back to keepthis to reduce diffs + + unifdef.c | 14 +++++++------- + 1 files changed, 7 insertions(+), 7 deletions(-) + +--------------------------------------------------- +2002-12-12 17:06:15 +0000 Tony Finch + +stcomline isn't used any more + + unifdef.c | 3 +-- + 1 files changed, 1 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-12-12 17:05:00 +0000 Tony Finch + +Note that NO_COMMMENT is false, as before. + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-12-12 17:03:37 +0000 Tony Finch + +Move the error function back to the end + + unifdef.c | 21 +++++++++++---------- + 1 files changed, 11 insertions(+), 10 deletions(-) + +--------------------------------------------------- +2002-12-12 17:02:08 +0000 Tony Finch + +Better error messages outside #if groups + + unifdef.c | 9 ++++++--- + 1 files changed, 6 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2002-12-12 17:01:50 +0000 Tony Finch + +Note a new diagnostic for preprocessor lines we can't handle. + + unifdef.1 | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2002-12-12 17:00:04 +0000 Tony Finch + +Instead of quietly ballsing up the output, bitch if we encounter a + +preprocessor line we can't handle. + + unifdef.c | 30 +++++++++++++++++------------- + 1 files changed, 17 insertions(+), 13 deletions(-) + +--------------------------------------------------- +2002-12-12 16:04:04 +0000 Tony Finch + +Rename checkline() to getline() and move the fgets() inside it. + + unifdef.c | 13 ++++++------- + 1 files changed, 6 insertions(+), 7 deletions(-) + +--------------------------------------------------- +2002-12-11 20:46:06 +0000 Tony Finch + +Add a missing unignore() + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-12-11 20:42:47 +0000 Tony Finch + +Handle #ifs nested inside a false block correctly. + + unifdef.c | 16 +++++++++------- + 1 files changed, 9 insertions(+), 7 deletions(-) + +--------------------------------------------------- +2002-12-11 20:15:57 +0000 Tony Finch + +remove nul character comment + + unifdef.c | 4 +--- + 1 files changed, 1 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2002-12-11 20:05:52 +0000 Tony Finch + +Overhaul the #if state machine. It's now table-driven rather than hand- + +coded, and it doesn't have the old version's bugs. The debugging messages +have also been improved. + + unifdef.c | 452 ++++++++++++++++++++++++++++--------------------------------- + 1 files changed, 205 insertions(+), 247 deletions(-) + +--------------------------------------------------- +2002-12-11 20:04:40 +0000 Tony Finch + +some more bugs + + unifdef.1 | 9 ++++++++- + 1 files changed, 8 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2002-12-11 02:28:22 +0000 Tony Finch + +Rename keepthis to constexpr which is easier to think about. + +Re-comment and re-arrange some globals. + + unifdef.c | 24 +++++++++++------------- + 1 files changed, 11 insertions(+), 13 deletions(-) + +--------------------------------------------------- +2002-12-11 02:22:44 +0000 Tony Finch + +Add a note about trigraphs. + + unifdef.1 | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2002-12-11 02:13:04 +0000 Tony Finch + +Use fgets instead of getline() because the latter gets EOF wrong. + + unifdef.c | 77 +----------------------------------------------------------- + 1 files changed, 2 insertions(+), 75 deletions(-) + +--------------------------------------------------- +2002-12-11 02:07:02 +0000 Tony Finch + +Overhaul the comment and preprocessor line parsers. + + unifdef.1 | 4 +- + unifdef.c | 232 +++++++++++++++++++++++++++++++++++------------------------- + 2 files changed, 137 insertions(+), 99 deletions(-) + +--------------------------------------------------- +2002-12-11 01:44:04 +0000 Tony Finch + +Add an asymmetric variant of strncmp() called strlcmp(). + + unifdef.c | 20 +++++++++++++++++--- + 1 files changed, 17 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2002-12-11 00:00:47 +0000 Tony Finch + +handle end-of-string in skipsym() + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-12-10 23:20:14 +0000 Tony Finch + +A neater way of handling #elif + + unifdef.c | 14 ++++---------- + 1 files changed, 4 insertions(+), 10 deletions(-) + +--------------------------------------------------- +2002-12-10 23:02:11 +0000 Tony Finch + +Fix findsym()'s comment. + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-12-10 23:01:04 +0000 Tony Finch + +Improve findsym(). + + unifdef.c | 19 +++++++------------ + 1 files changed, 7 insertions(+), 12 deletions(-) + +--------------------------------------------------- +2002-12-10 21:11:58 +0000 Tony Finch + +Remove quote handling. + + unifdef.c | 70 +++++++----------------------------------------------------- + 1 files changed, 9 insertions(+), 61 deletions(-) + +--------------------------------------------------- +2002-12-10 21:11:19 +0000 Tony Finch + +Update the spec to relate better to ANSI C. Strings no longer affect + +the preprocessor, but line continuations do. + + unifdef.1 | 19 +++++++------------ + 1 files changed, 7 insertions(+), 12 deletions(-) + +--------------------------------------------------- +2002-12-10 17:28:09 +0000 Tony Finch + +Note that string parsing needs to be fixed. Actually it just needs to + +be ripped out and replaced with backslash line continuation handling +since strings can't contain newlines any more. + + unifdef.1 | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2002-12-10 17:23:54 +0000 Tony Finch + +Sync with FreeBSD + + unifdef.1 | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +--------------------------------------------------- +2002-12-10 17:12:58 +0000 Tony Finch + +Handle inquote more elegantly + + unifdef.c | 14 ++++---------- + 1 files changed, 4 insertions(+), 10 deletions(-) + +--------------------------------------------------- +2002-12-10 17:00:39 +0000 Tony Finch + +Make the symbol table zero-based, and remove an incorrect comment. + + unifdef.c | 29 +++++++++++++++-------------- + 1 files changed, 15 insertions(+), 14 deletions(-) + +--------------------------------------------------- +2002-12-10 16:22:12 +0000 Tony Finch + +Terminological consistency: only use the word "ignore" to mean non-C parsing. + + unifdef.c | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2002-12-10 16:10:51 +0000 Tony Finch + +Ensure that cursym is always set by checkline(). + + unifdef.c | 5 ++--- + 1 files changed, 2 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2002-09-24 19:52:11 +0000 Tony Finch + +update FreeBSD IDs + + unifdef.1 | 4 ++-- + unifdef.c | 4 ++-- + unifdefall.sh | 4 ++-- + 3 files changed, 6 insertions(+), 6 deletions(-) + +--------------------------------------------------- +2002-09-24 19:44:12 +0000 Tony Finch + +improve language + + unifdef.1 | 20 ++++++++++---------- + 1 files changed, 10 insertions(+), 10 deletions(-) + +--------------------------------------------------- +2002-09-24 19:43:57 +0000 Tony Finch + +conform to the spec -- the -k option to unifdef is now needed + + unifdefall.sh | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-09-24 19:16:29 +0000 Tony Finch + +Pass through constant #ifs unless invoked with -k. + + unifdef.1 | 26 +++++++++++++++++++++++--- + unifdef.c | 24 +++++++++++++++++------- + 2 files changed, 40 insertions(+), 10 deletions(-) + +--------------------------------------------------- +2002-05-30 11:50:13 +0000 Tony Finch + +add freebsd version string + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-05-30 11:47:26 +0000 Tony Finch + +Sync with FreeBSD's mdoc markup fixes. + + unifdef.1 | 84 ++++++++++++++++++++++++++++-------------------------------- + 1 files changed, 39 insertions(+), 45 deletions(-) + +--------------------------------------------------- +2002-05-21 17:33:41 +0000 Tony Finch + +style(9) whitespace + + unifdef.c | 10 +++++----- + 1 files changed, 5 insertions(+), 5 deletions(-) + +--------------------------------------------------- +2002-05-15 19:37:50 +0000 Tony Finch + +consistent spacing in the function declarations + + unifdef.c | 16 ++++++++-------- + 1 files changed, 8 insertions(+), 8 deletions(-) + +--------------------------------------------------- +2002-05-15 19:36:10 +0000 Tony Finch + +cast away qualifiers less evilly + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-05-15 19:34:40 +0000 Tony Finch + +Replace h0h0opt with getopt. + + unifdef.c | 135 +++++++++++++++++++++++++++++++++++-------------------------- + 1 files changed, 78 insertions(+), 57 deletions(-) + +--------------------------------------------------- +2002-05-15 18:55:14 +0000 Tony Finch + +Don't run off the end of command-line options inside findsym(). + + unifdef.c | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2002-05-15 15:43:14 +0000 Tony Finch + +a typo and a formatting fix from dwmalone + + unifdef.c | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2002-05-15 10:31:20 +0000 Tony Finch + +FreeBSD CVS ID correctness + + unifdefall.sh | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2002-05-14 22:15:03 +0000 Tony Finch + +be more optimistic about the level of expression support + + unifdef.1 | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-05-14 22:13:21 +0000 Tony Finch + +the #ifdef and #if on the .Nd line should be .Li but this doesn't seem + +to be possible, so write "preprocessor conditionals" instead. + + unifdef.1 | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-05-14 21:14:30 +0000 Tony Finch + +Correct the ordering and indentation of the CVS IDs according to FreeBSD style. + + unifdef.1 | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2002-05-14 21:11:50 +0000 Tony Finch + +add a missing comma to the SEE ALSO list + + unifdef.1 | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-05-14 21:11:14 +0000 Tony Finch + +Document unifdefall and the -I option. + + unifdef.1 | 40 +++++++++++++++++++++++++++++++++++++--- + 1 files changed, 37 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2002-05-02 12:38:29 +0000 Tony Finch + +Better function names -- doif() -> process() and doif_1() -> doif() + + unifdef.c | 22 +++++++++++----------- + 1 files changed, 11 insertions(+), 11 deletions(-) + +--------------------------------------------------- +2002-05-02 12:36:22 +0000 Tony Finch + +consistent commenting + + unifdef.c | 69 ++++++++++++++++++++++++++++++++++++++++++------------------ + 1 files changed, 48 insertions(+), 21 deletions(-) + +--------------------------------------------------- +2002-05-02 12:17:31 +0000 Tony Finch + +Consistent spacing in declaration of local variables, + +and simplified flushline(). + + unifdef.c | 41 ++++++++++++++++++----------------------- + 1 files changed, 18 insertions(+), 23 deletions(-) + +--------------------------------------------------- +2002-05-02 00:03:41 +0000 Tony Finch + +note #line wish + + unifdef.c | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2002-04-29 16:41:08 +0000 Tony Finch + +Handle symbols that are defined without a value correctly, again. + + unifdefall.sh | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-04-29 16:17:39 +0000 Tony Finch + +output of cpp needs to be sorted + + unifdefall.sh | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-04-29 03:08:10 +0000 Tony Finch + +clean up tmp dir + + unifdefall.sh | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2002-04-29 03:07:20 +0000 Tony Finch + +tidy up + + unifdefall.sh | 32 ++++++++------------------------ + 1 files changed, 8 insertions(+), 24 deletions(-) + +--------------------------------------------------- +2002-04-29 03:00:58 +0000 Tony Finch + +Don't get confused by symbols that are the prefix of other symbols. + + unifdefall.sh | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-04-29 02:55:15 +0000 Tony Finch + +mention support for the comparison operators + + unifdef.1 | 8 +++++++- + 1 files changed, 7 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2002-04-29 02:53:58 +0000 Tony Finch + +Overhaul the expression evaluator. The integer value of an expression + +is now calculated, rather than just the boolen value, and the evaluation +of binary operators is now table-driven. These two things combine to +make it easier to add support for new operators, such as comparisions. + + unifdef.c | 215 +++++++++++++++++++++++++++++++++++-------------------------- + 1 files changed, 123 insertions(+), 92 deletions(-) + +--------------------------------------------------- +2002-04-29 00:20:42 +0000 Tony Finch + +Handle symbols that are defined without a value correctly. + + unifdefall.sh | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-04-29 00:18:06 +0000 Tony Finch + +-d -> --debug + + unifdef.c | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2002-04-29 00:17:11 +0000 Tony Finch + +Fix handling of bracketed expressions -- we didn't pass over the ) + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-04-28 23:42:36 +0000 Tony Finch + +A script for stripping out as many #if's from a file as possible. + + unifdefall.sh | 42 ++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 42 insertions(+), 0 deletions(-) + +--------------------------------------------------- +2002-04-28 22:32:30 +0000 Tony Finch + +Ignore -Ifoo options so that the same options can be used with cpp -dM + + unifdef.c | 14 ++++++++++---- + 1 files changed, 10 insertions(+), 4 deletions(-) + +--------------------------------------------------- +2002-04-28 22:15:26 +0000 Tony Finch + +allow a - on the command line to mean "input from stdin" + + unifdef.c | 6 ++++-- + 1 files changed, 4 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-04-28 22:14:07 +0000 Tony Finch + +say explicitly that at least one -D or -U is needed + + unifdef.c | 6 ++++-- + 1 files changed, 4 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-04-27 17:27:14 +0000 Tony Finch + +allow longer lines in the input + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-04-27 17:26:53 +0000 Tony Finch + +avoid a potential buffer overflow + + unifdef.c | 9 +++++---- + 1 files changed, 5 insertions(+), 4 deletions(-) + +--------------------------------------------------- +2002-04-27 17:23:47 +0000 Tony Finch + +spell getlin() with an e + + unifdef.c | 10 +++++----- + 1 files changed, 5 insertions(+), 5 deletions(-) + +--------------------------------------------------- +2002-04-26 20:44:33 +0000 Tony Finch + +remove redundant function + + unifdef.c | 15 +++------------ + 1 files changed, 3 insertions(+), 12 deletions(-) + +--------------------------------------------------- +2002-04-26 20:32:23 +0000 Tony Finch + +Multiple __RCSID()s is not portable, so use __IDSTRING() instead. + + unifdef.c | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +--------------------------------------------------- +2002-04-26 20:23:09 +0000 Tony Finch + +move a #define to a better place + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-04-26 20:18:07 +0000 Tony Finch + +add a couple of missing [=val] phrases + + unifdef.1 | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2002-04-26 20:17:35 +0000 Tony Finch + +use .Li for #if directives + + unifdef.1 | 33 ++++++++++++++++++++++++++------- + 1 files changed, 26 insertions(+), 7 deletions(-) + +--------------------------------------------------- +2002-04-26 20:09:37 +0000 Tony Finch + +change the #if bug into an expression handling bug + + unifdef.1 | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-04-26 20:08:45 +0000 Tony Finch + +mention the elif diagnostic + + unifdef.1 | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-04-26 20:07:49 +0000 Tony Finch + +see also cpp(1) + + unifdef.1 | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2002-04-26 20:07:29 +0000 Tony Finch + +remove spurious historical note + + unifdef.1 | 7 +++---- + 1 files changed, 3 insertions(+), 4 deletions(-) + +--------------------------------------------------- +2002-04-26 20:05:12 +0000 Tony Finch + +explain the -s option + + unifdef.1 | 18 +++++++++++++++++- + 1 files changed, 17 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2002-04-26 20:01:06 +0000 Tony Finch + +Improve the explanation of the -D and -U options. + + unifdef.1 | 28 +++++++++++++--------------- + 1 files changed, 13 insertions(+), 15 deletions(-) + +--------------------------------------------------- +2002-04-26 19:54:54 +0000 Tony Finch + +better introductory paragraph + + unifdef.1 | 10 ++++++---- + 1 files changed, 6 insertions(+), 4 deletions(-) + +--------------------------------------------------- +2002-04-26 19:51:20 +0000 Tony Finch + +remove -compact from the flag list + + unifdef.1 | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-04-26 19:50:54 +0000 Tony Finch + +expand the introduction to explain the new functionality + + unifdef.1 | 27 ++++++++++++++++++++++----- + 1 files changed, 22 insertions(+), 5 deletions(-) + +--------------------------------------------------- +2002-04-26 19:26:10 +0000 Tony Finch + +add a paragraph gap between -l and -t + + unifdef.1 | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2002-04-26 19:24:47 +0000 Tony Finch + +Add the optional symbol value to the various places -Dsym is mentioned, + +and add the -s flag to the synopsis. + + unifdef.1 | 12 ++++++------ + 1 files changed, 6 insertions(+), 6 deletions(-) + +--------------------------------------------------- +2002-04-26 19:20:34 +0000 Tony Finch + +update document date and one-line description + + unifdef.1 | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2002-04-26 19:15:55 +0000 Tony Finch + +add $dotat$ + + unifdef.1 | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +--------------------------------------------------- +2002-04-26 19:15:14 +0000 Tony Finch + +add my name to the copyright section + + unifdef.1 | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2002-04-26 19:14:35 +0000 Tony Finch + +add unifdef manual page from FreeBSD + + unifdef.1 | 173 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 173 insertions(+), 0 deletions(-) + +--------------------------------------------------- +2002-04-26 19:12:22 +0000 Tony Finch + +Add a new option for printing a list of the symbols found in #if expressions. + + unifdef.c | 16 +++++++++++++--- + 1 files changed, 13 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2002-04-26 19:03:48 +0000 Tony Finch + +option variables in alphabetical order + + unifdef.c | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2002-04-26 19:02:45 +0000 Tony Finch + +parse options in alphabetical order + + unifdef.c | 10 +++++----- + 1 files changed, 5 insertions(+), 5 deletions(-) + +--------------------------------------------------- +2002-04-26 18:56:55 +0000 Tony Finch + +fix some h0h0 formatting + + unifdef.c | 8 ++------ + 1 files changed, 2 insertions(+), 6 deletions(-) + +--------------------------------------------------- +2002-04-26 18:51:19 +0000 Tony Finch + +Fix the handling of #elif. + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-04-26 18:13:43 +0000 Tony Finch + +put my name in the copyright section + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-04-26 17:42:31 +0000 Tony Finch + +Move all the global stuff to the start of the program in the order + +types, variables, function declarations, and ensure that all functions +are declared. The program now compiles cleanly with $FANFCFLAGS. + + unifdef.c | 141 +++++++++++++++++++++++++++++++------------------------------ + 1 files changed, 72 insertions(+), 69 deletions(-) + +--------------------------------------------------- +2002-04-26 17:33:47 +0000 Tony Finch + +use enums where appropriate + + unifdef.c | 64 ++++++++++++++++++++++++++++++++++-------------------------- + 1 files changed, 36 insertions(+), 28 deletions(-) + +--------------------------------------------------- +2002-04-26 17:25:50 +0000 Tony Finch + +blank lines after functions + + unifdef.c | 14 +++++++++++++- + 1 files changed, 13 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2002-04-26 17:23:57 +0000 Tony Finch + +const correctness + + unifdef.c | 110 +++++++++++++++++++++++++++++------------------------------- + 1 files changed, 53 insertions(+), 57 deletions(-) + +--------------------------------------------------- +2002-04-26 17:05:23 +0000 Tony Finch + +more bool correctness + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-04-26 17:02:17 +0000 Tony Finch + +Since MAXSYMS is bigger than CHAR_MAX, nsyms has to be an int. + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-04-26 17:01:38 +0000 Tony Finch + +ANSI function definitions + + unifdef.c | 62 ++++++++++++++++++------------------------------------------ + 1 files changed, 19 insertions(+), 43 deletions(-) + +--------------------------------------------------- +2002-04-26 16:56:34 +0000 Tony Finch + +Replace the homegrown Bool/YES/NO with stdbool.h things, and ensure + +that boolean variables are declared consistently. + + unifdef.c | 110 +++++++++++++++++++++++++++++------------------------------- + 1 files changed, 53 insertions(+), 57 deletions(-) + +--------------------------------------------------- +2002-04-26 16:49:11 +0000 Tony Finch + +Add __FBSDID and conditionalize the __RCSIDs + + unifdef.c | 7 ++++++- + 1 files changed, 6 insertions(+), 1 deletions(-) + +--------------------------------------------------- +2002-04-26 16:47:53 +0000 Tony Finch + +add some debugging code + + unifdef.c | 35 +++++++++++++++++++++++++++++++++-- + 1 files changed, 33 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-04-26 15:47:04 +0000 Tony Finch + +fix the line number reporting in the last change + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-04-26 15:38:59 +0000 Tony Finch + +Improve error reporting -- include the start line of the current #if. + + unifdef.c | 16 +++++++++++++--- + 1 files changed, 13 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2002-04-26 15:34:44 +0000 Tony Finch + +Remove some slight punning between comment types and booleans. + + unifdef.c | 12 +++++++----- + 1 files changed, 7 insertions(+), 5 deletions(-) + +--------------------------------------------------- +2002-04-26 15:06:30 +0000 Tony Finch + +Avoid reparsing the line that causes doif() to return to doif_1(). + + unifdef.c | 17 ++++++++--------- + 1 files changed, 8 insertions(+), 9 deletions(-) + +--------------------------------------------------- +2002-04-26 13:54:16 +0000 Tony Finch + +put the newline on the #endif that replaces #elif lines + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-04-26 13:51:41 +0000 Tony Finch + +Finish implementation of #elif and nesting. + +This version passes some initial tests. + + unifdef.c | 133 +++++++++++++++++++++++++++++++++++++++++++------------------ + 1 files changed, 94 insertions(+), 39 deletions(-) + +--------------------------------------------------- +2002-04-25 23:46:55 +0000 Tony Finch + +partial implementation of #elif and properly nesting #ifs. + + unifdef.c | 216 +++++++++++++++++++++++++++++++++++++------------------------ + 1 files changed, 130 insertions(+), 86 deletions(-) + +--------------------------------------------------- +2002-04-25 23:27:40 +0000 Tony Finch + +remove redundant stline variable + + unifdef.c | 4 +--- + 1 files changed, 1 insertions(+), 3 deletions(-) + +--------------------------------------------------- +2002-04-25 23:25:31 +0000 Tony Finch + +simplify error line number handling + + unifdef.c | 21 ++++++++++----------- + 1 files changed, 10 insertions(+), 11 deletions(-) + +--------------------------------------------------- +2002-04-25 23:02:51 +0000 Tony Finch + +simplify error handling + + unifdef.c | 59 +++++++++++++++++++++-------------------------------------- + 1 files changed, 21 insertions(+), 38 deletions(-) + +--------------------------------------------------- +2002-04-25 21:44:51 +0000 Tony Finch + +fix a comment to reflect the previous change + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-04-25 21:43:07 +0000 Tony Finch + +Change the "unknown symbol" return value from findsym() from -1 to 0. + + unifdef.c | 21 +++++++++------------ + 1 files changed, 9 insertions(+), 12 deletions(-) + +--------------------------------------------------- +2002-04-25 21:19:55 +0000 Tony Finch + +remove an unnecessary variable inside doif() + + unifdef.c | 11 +++++------ + 1 files changed, 5 insertions(+), 6 deletions(-) + +--------------------------------------------------- +2002-04-25 20:24:16 +0000 Tony Finch + +Remove the inif argument to doif() entirely, since inif == (depth != 0). + + unifdef.c | 19 +++++++++---------- + 1 files changed, 9 insertions(+), 10 deletions(-) + +--------------------------------------------------- +2002-04-25 20:20:05 +0000 Tony Finch + +Move the gall to getlin() up to doif() so that it will be able to + +examine the same line more than once. + + unifdef.c | 48 +++++++++++++++++++++--------------------------- + 1 files changed, 21 insertions(+), 27 deletions(-) + +--------------------------------------------------- +2002-04-25 19:59:46 +0000 Tony Finch + +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. + + unifdef.c | 19 +++++++------------ + 1 files changed, 7 insertions(+), 12 deletions(-) + +--------------------------------------------------- +2002-04-25 18:45:54 +0000 Tony Finch + +purge LT_OTHER since it's a synonym for LT_IF + + unifdef.c | 8 +++----- + 1 files changed, 3 insertions(+), 5 deletions(-) + +--------------------------------------------------- +2002-04-25 18:17:09 +0000 Tony Finch + +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. + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-04-25 18:15:23 +0000 Tony Finch + +use __RCSID for the sccs id and remove redundant #ifndef lint lines + + unifdef.c | 12 ++---------- + 1 files changed, 2 insertions(+), 10 deletions(-) + +--------------------------------------------------- +2002-04-25 18:10:00 +0000 Tony Finch + +Initial version of #if handling. + +Symbol 0 is used for tracking the state of #if/#else activity. +TODO: #elif, nested #if + + unifdef.c | 155 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++---- + 1 files changed, 145 insertions(+), 10 deletions(-) + +--------------------------------------------------- +2002-04-25 16:16:26 +0000 Tony Finch + +allow whitespace before # + + unifdef.c | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-04-25 16:12:23 +0000 Tony Finch + +fix location of a { + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-04-25 16:11:54 +0000 Tony Finch + +add a function that will evaluate if expressions + + unifdef.c | 13 +++++++++++-- + 1 files changed, 11 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-04-25 16:05:30 +0000 Tony Finch + +remove spurious fflush() + + unifdef.c | 3 +-- + 1 files changed, 1 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-04-25 16:04:55 +0000 Tony Finch + +style: #include ordering; variable alignment + + unifdef.c | 22 +++++++++++----------- + 1 files changed, 11 insertions(+), 11 deletions(-) + +--------------------------------------------------- +2002-04-25 16:03:16 +0000 Tony Finch + +use err() + + unifdef.c | 83 +++++++++++++++++++++++++------------------------------------ + 1 files changed, 34 insertions(+), 49 deletions(-) + +--------------------------------------------------- +2002-04-25 15:51:42 +0000 Tony Finch + +another formatting improvement + + unifdef.c | 17 +++++++---------- + 1 files changed, 7 insertions(+), 10 deletions(-) + +--------------------------------------------------- +2002-04-25 15:37:25 +0000 Tony Finch + +sensible else if formatting + + unifdef.c | 150 +++++++++++++++++++++++++++---------------------------------- + 1 files changed, 67 insertions(+), 83 deletions(-) + +--------------------------------------------------- +2002-04-25 15:31:28 +0000 Tony Finch + +deal with -Dsym=value + + unifdef.c | 30 +++++++++++++++++++++--------- + 1 files changed, 21 insertions(+), 9 deletions(-) + +--------------------------------------------------- +2002-04-25 15:02:48 +0000 Tony Finch + +move #endif comments to a better place + + unifdef.c | 16 ++++++++-------- + 1 files changed, 8 insertions(+), 8 deletions(-) + +--------------------------------------------------- +2002-04-25 14:59:59 +0000 Tony Finch + +allow a reasonable number of symbols + + unifdef.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--------------------------------------------------- +2002-04-25 14:57:56 +0000 Tony Finch + +remove BSS cruft + + unifdef.c | 39 +++++++++++++++++++-------------------- + 1 files changed, 19 insertions(+), 20 deletions(-) + +--------------------------------------------------- +2002-04-25 14:55:27 +0000 Tony Finch + +remove __P + + unifdef.c | 24 ++++++++++++------------ + 1 files changed, 12 insertions(+), 12 deletions(-) + +--------------------------------------------------- +2002-04-25 14:52:54 +0000 Tony Finch + +revert to the CSRG copyright/sccs rubric and add $dotat$ + + unifdef.c | 21 +++++++++++++-------- + 1 files changed, 13 insertions(+), 8 deletions(-) + +--------------------------------------------------- +2002-04-25 14:50:23 +0000 Tony Finch + +import from NetBSD + + unifdef.c | 684 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 684 insertions(+), 0 deletions(-) +--------------------------------------------------- diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..8507ac3 --- /dev/null +++ b/INSTALL @@ -0,0 +1,18 @@ +unifdef installation instructions + + +To build, type `make`. You can adjust the compilation options +using the POSIX standard CFLAGS and LDFLAGS make variables. + +To install in your home directory, type `make install` +or to install in /usr type `make prefix=/usr install`. +See the start of the Makefile for the install location +variables. + + +Non-portable dependencies: + +This program requires the BSD err.h functions, and C99 stdbool.h. + + +- end - diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..7c0f914 --- /dev/null +++ b/Makefile @@ -0,0 +1,84 @@ +# Makefile for unifdef + +prefix = ${HOME} +bindir = ${prefix}/bin +mandir = ${prefix}/share/man +man1dir= ${mandir}/man1 + +bindest= ${DESTDIR}${bindir} +man1dest= ${DESTDIR}${man1dir} + + +all: unifdef + +unifdef: unifdef.c +unifdef.c: version.h +version.h version.sh:: + ./reversion.sh + +test: unifdef + ./runtests.sh tests + +install: unifdef unifdefall.sh unifdef.1 + : commands + install -m 755 -d ${bindest} + install -m 755 unifdef ${bindest}/ + install -m 755 unifdefall.sh ${bindest}/unifdefall + : manual + install -m 755 -d ${man1dest} + install -m 644 unifdef.1 ${man1dest}/ + ln -s unifdef.1 ${man1dest}/unifdefall.1 + +clean: + rm -f unifdef unifdef.txt version.h + rm -f tests/*.out tests/*.err tests/*.rc + +realclean: clean + [ ! -d .git ] || rm -f Changelog version.sh + find . -name .git -prune -o \( \ + -name '*~' -o -name '.#*' -o \ + -name '*.orig' -o -name '*.core' \ + \) -delete + +DISTFILES= \ + Changelog \ + COPYING \ + INSTALL \ + Makefile \ + README \ + reversion.sh \ + runtests.sh \ + tests \ + unifdef.c \ + unifdef.1 \ + unifdef.txt \ + unifdefall.sh \ + version.sh + +release: version.sh unifdef.txt Changelog + . version.sh; \ + mkdir web/$$V; cp -R ${DISTFILES} web/$$V; \ + cd web; tar cfz $$V.tar.gz $$V; rm -R $$V + +unifdef.txt: unifdef.1 + nroff -Tascii -mdoc unifdef.1 | sed -e 's/.//g' >unifdef.txt + cp unifdef.txt web + +Changelog: + line="---------------------------------------------------"; \ + git log --stat --pretty=format:"$$line%n%ai %an <%ae>%n%n%s%n%n%b" |\ + awk '/^$$/ { n++ } \ + /./ && !n { print } \ + /./ && n { print ""; print; n=0 } \ + END { print "'$$line'" }' >Changelog + +upload: + git gc + git update-server-info + git push --all github + touch .git/git-daemon-export-ok + echo "selectively remove C preprocessor conditionals" >.git/description + rsync --delete --recursive --links .git/ chiark:public-git/unifdef.git/ + rsync --delete --recursive --links web/ chiark:public-html/prog/unifdef/ + +# eof diff --git a/README b/README new file mode 100644 index 0000000..bc33365 --- /dev/null +++ b/README @@ -0,0 +1,37 @@ +unifdef - selectively remove C preprocessor conditionals + +Written by Tony Finch - http://dotat.at/prog/unifdef/ + +Please see the INSTALL file for installation instructions. + +Pre-formatted documentation can be found in unifdef.txt + +You can subscribe to release announcements at: + http://freshmeat.net/projects/unifdef + +You can clone the development repository using: + git clone http://dotat.at/git/unifdef.git + +I also maintain a copy at http://github.com/fanf2/unifdef + +Please send bug reports and patches to me. Unless you state otherwise, +I will assume that any contributions are under the two-clause BSD +licence. See the COPYING file for details. + +Thanks to the following people for their contributions: + +Bob Proulx + - test suite + +Jonathan Nieder + - bug fixes, improved unifdefall + +Anders H Kaseorg + - bug fixes and other improvements + +Ben Hutchings at Solarflare Communications + - lenient evaluation of && and || + +Other contributions are listed in the Changelog. + +- end - diff --git a/packaging/unifdef.spec b/packaging/unifdef.spec new file mode 100644 index 0000000..db70e18 --- /dev/null +++ b/packaging/unifdef.spec @@ -0,0 +1,57 @@ +Summary: Removes ifdefs from C files. +Name: unifdef +Version: 2.3 +Release: 1 +License: BSD +Group: Development/Tools +URL: http://dotat.at/prog/unifdef/ +Source: http://dotat.at/prog/unifdef/%name-%version.tar.gz +BuildRoot: %_tmppath/%name-%version-%release + +%description +Unifdef is useful for removing ifdef'ed lines from a file while otherwise +leaving the file alone. Unifdef acts on #ifdef, #ifndef, #else, and #en­ +dif lines, and it knows only enough about C to know when one of these is +inactive because it is inside a comment, or a single or double quote. + +%track +prog %name = { + url = http://dotat.at/prog/unifdef/ + version = %version + regex = %name-(__VER__)\.tar\.gz +} + +%prep +%setup +make clean + +%build +make %?_smp_mflags CC=%__cc CFLAGS="$RPM_OPT_FLAGS" + +%install +rm -rf $RPM_BUILD_ROOT +make install DESTDIR="$RPM_BUILD_ROOT" prefix=%_prefix + +%clean +rm -rf $RPM_BUILD_ROOT + +%files +%_bindir/unifdef +%_bindir/unifdefall +%_mandir/man1/unifdef.1* +%_mandir/man1/unifdefall.1* + +%changelog +* Wed May 12 2010 Bernhard Rosenkraenzer 2.3-1ark +- 2.3 +- Allow crosscompiling + +* Sun Jan 27 2008 Bernhard Rosenkraenzer 1.0-3ark +- Rebuild to get a package into the x86_64 tree + +* Sat Jul 15 2006 Bernhard Rosenkraenzer 1.0-2ark +- Compile it instead of allowing make install to use the binary in the + tarball + +* Tue May 23 2006 Bernhard Rosenkraenzer 1.0-1ark +- initial package diff --git a/reversion.sh b/reversion.sh new file mode 100755 index 0000000..a9183da --- /dev/null +++ b/reversion.sh @@ -0,0 +1,34 @@ +#!/bin/sh + +[ ! -f version.sh ] && [ ! -d .git ] && exit 1 + +[ -f version.sh ] && . version.sh + +if [ -d .git ] +then + GV=$(git describe --abbrev=4) + git update-index -q --refresh + if git diff-index --quiet HEAD + then + GD="$(git show --pretty=format:%ai --quiet HEAD)" + else + GD="$(date +'%Y-%m-%d %H:%M:%S %z')" + GV=$GV-dirty + fi + if [ "$GV $GD" != "$V $D" ] + then + V="$GV" + D="$GD" + echo "V=\"$V\"" >version.sh + echo "D=\"$D\"" >>version.sh + cat version.sh + rm -f version.h + fi +fi + +if [ ! -f version.h ] +then + printf '"@(#) $Version: %s $\\n"\n' "$V" >version.h + printf '"@(#) $Date: %s $\\n"\n' "$D" >>version.h + cat version.h +fi diff --git a/runtests.sh b/runtests.sh new file mode 100755 index 0000000..8b42679 --- /dev/null +++ b/runtests.sh @@ -0,0 +1,29 @@ +#!/bin/sh + +${1:+cd} ${1:-:} +for cmd in *.sh +do + t=${cmd%.sh} + + . ./${cmd} >${t}.out 2>${t}.err + echo $? >${t}.rc + + ok=true + for e in out err rc + do + exp=${t}.exp${e} + got=${t}.${e} + if ! cmp -s ${exp} ${got} + then + echo FAILED: ${got}: $(cat ${cmd}) + diff -u ${exp} ${got} + ok=false + fi + done + + if ${ok} + then rm -f ${t}.out ${t}.err ${t}.rc + else rc=1 + fi +done +exit ${rc} diff --git a/tests/args1.c b/tests/args1.c new file mode 100644 index 0000000..1cb5546 --- /dev/null +++ b/tests/args1.c @@ -0,0 +1,3 @@ +#if defined(DUMMY) || FOO(arg) +hello +#endif diff --git a/tests/args1.experr b/tests/args1.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/args1.expout b/tests/args1.expout new file mode 100644 index 0000000..ce01362 --- /dev/null +++ b/tests/args1.expout @@ -0,0 +1 @@ +hello diff --git a/tests/args1.exprc b/tests/args1.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/args1.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/args1.sh b/tests/args1.sh new file mode 100644 index 0000000..0a909f4 --- /dev/null +++ b/tests/args1.sh @@ -0,0 +1 @@ +../unifdef -DFOO=1 -DFOOB=42 -UBAR args1.c diff --git a/tests/args2.c b/tests/args2.c new file mode 100644 index 0000000..8fe476b --- /dev/null +++ b/tests/args2.c @@ -0,0 +1,3 @@ +#if defined(FOO) || BAR(arg) +hello +#endif diff --git a/tests/args2.experr b/tests/args2.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/args2.expout b/tests/args2.expout new file mode 100644 index 0000000..8fe476b --- /dev/null +++ b/tests/args2.expout @@ -0,0 +1,3 @@ +#if defined(FOO) || BAR(arg) +hello +#endif diff --git a/tests/args2.exprc b/tests/args2.exprc new file mode 100644 index 0000000..573541a --- /dev/null +++ b/tests/args2.exprc @@ -0,0 +1 @@ +0 diff --git a/tests/args2.sh b/tests/args2.sh new file mode 100644 index 0000000..0b246e2 --- /dev/null +++ b/tests/args2.sh @@ -0,0 +1 @@ +../unifdef -DFOO=1 -DFOOB=42 -UBAR args2.c diff --git a/tests/blank0d.c b/tests/blank0d.c new file mode 100644 index 0000000..c435ac5 --- /dev/null +++ b/tests/blank0d.c @@ -0,0 +1,25 @@ +#ifdef FOO4 +four +#endif + + + + +#ifdef FOO3 +three +#endif + + + +#ifdef FOO2 +two +#endif + + +#ifdef FOO1 +one +#endif + +#ifdef FOO0 +zero +#endif diff --git a/tests/blank0d.experr b/tests/blank0d.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/blank0d.expout b/tests/blank0d.expout new file mode 100644 index 0000000..9c22614 --- /dev/null +++ b/tests/blank0d.expout @@ -0,0 +1,23 @@ +#ifdef FOO4 +four +#endif + + + + +#ifdef FOO3 +three +#endif + + + +#ifdef FOO2 +two +#endif + + +#ifdef FOO1 +one +#endif + +zero diff --git a/tests/blank0d.exprc b/tests/blank0d.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/blank0d.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/blank0d.sh b/tests/blank0d.sh new file mode 100644 index 0000000..225da11 --- /dev/null +++ b/tests/blank0d.sh @@ -0,0 +1 @@ +../unifdef -B -DFOO0 blank0d.c diff --git a/tests/blank0u.c b/tests/blank0u.c new file mode 100644 index 0000000..c435ac5 --- /dev/null +++ b/tests/blank0u.c @@ -0,0 +1,25 @@ +#ifdef FOO4 +four +#endif + + + + +#ifdef FOO3 +three +#endif + + + +#ifdef FOO2 +two +#endif + + +#ifdef FOO1 +one +#endif + +#ifdef FOO0 +zero +#endif diff --git a/tests/blank0u.experr b/tests/blank0u.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/blank0u.expout b/tests/blank0u.expout new file mode 100644 index 0000000..165d0a9 --- /dev/null +++ b/tests/blank0u.expout @@ -0,0 +1,22 @@ +#ifdef FOO4 +four +#endif + + + + +#ifdef FOO3 +three +#endif + + + +#ifdef FOO2 +two +#endif + + +#ifdef FOO1 +one +#endif + diff --git a/tests/blank0u.exprc b/tests/blank0u.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/blank0u.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/blank0u.sh b/tests/blank0u.sh new file mode 100644 index 0000000..18c8624 --- /dev/null +++ b/tests/blank0u.sh @@ -0,0 +1 @@ +../unifdef -B -UFOO0 blank0u.c diff --git a/tests/blank1d.c b/tests/blank1d.c new file mode 100644 index 0000000..c435ac5 --- /dev/null +++ b/tests/blank1d.c @@ -0,0 +1,25 @@ +#ifdef FOO4 +four +#endif + + + + +#ifdef FOO3 +three +#endif + + + +#ifdef FOO2 +two +#endif + + +#ifdef FOO1 +one +#endif + +#ifdef FOO0 +zero +#endif diff --git a/tests/blank1d.experr b/tests/blank1d.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/blank1d.expout b/tests/blank1d.expout new file mode 100644 index 0000000..05f6bc5 --- /dev/null +++ b/tests/blank1d.expout @@ -0,0 +1,23 @@ +#ifdef FOO4 +four +#endif + + + + +#ifdef FOO3 +three +#endif + + + +#ifdef FOO2 +two +#endif + + +one + +#ifdef FOO0 +zero +#endif diff --git a/tests/blank1d.exprc b/tests/blank1d.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/blank1d.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/blank1d.sh b/tests/blank1d.sh new file mode 100644 index 0000000..907b8a3 --- /dev/null +++ b/tests/blank1d.sh @@ -0,0 +1 @@ +../unifdef -B -DFOO1 blank1d.c diff --git a/tests/blank1u.c b/tests/blank1u.c new file mode 100644 index 0000000..c435ac5 --- /dev/null +++ b/tests/blank1u.c @@ -0,0 +1,25 @@ +#ifdef FOO4 +four +#endif + + + + +#ifdef FOO3 +three +#endif + + + +#ifdef FOO2 +two +#endif + + +#ifdef FOO1 +one +#endif + +#ifdef FOO0 +zero +#endif diff --git a/tests/blank1u.experr b/tests/blank1u.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/blank1u.expout b/tests/blank1u.expout new file mode 100644 index 0000000..f793379 --- /dev/null +++ b/tests/blank1u.expout @@ -0,0 +1,21 @@ +#ifdef FOO4 +four +#endif + + + + +#ifdef FOO3 +three +#endif + + + +#ifdef FOO2 +two +#endif + + +#ifdef FOO0 +zero +#endif diff --git a/tests/blank1u.exprc b/tests/blank1u.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/blank1u.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/blank1u.sh b/tests/blank1u.sh new file mode 100644 index 0000000..e04da88 --- /dev/null +++ b/tests/blank1u.sh @@ -0,0 +1 @@ +../unifdef -B -UFOO1 blank1u.c diff --git a/tests/blank2d.c b/tests/blank2d.c new file mode 100644 index 0000000..c435ac5 --- /dev/null +++ b/tests/blank2d.c @@ -0,0 +1,25 @@ +#ifdef FOO4 +four +#endif + + + + +#ifdef FOO3 +three +#endif + + + +#ifdef FOO2 +two +#endif + + +#ifdef FOO1 +one +#endif + +#ifdef FOO0 +zero +#endif diff --git a/tests/blank2d.experr b/tests/blank2d.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/blank2d.expout b/tests/blank2d.expout new file mode 100644 index 0000000..ba127f5 --- /dev/null +++ b/tests/blank2d.expout @@ -0,0 +1,23 @@ +#ifdef FOO4 +four +#endif + + + + +#ifdef FOO3 +three +#endif + + + +two + + +#ifdef FOO1 +one +#endif + +#ifdef FOO0 +zero +#endif diff --git a/tests/blank2d.exprc b/tests/blank2d.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/blank2d.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/blank2d.sh b/tests/blank2d.sh new file mode 100644 index 0000000..e4919c4 --- /dev/null +++ b/tests/blank2d.sh @@ -0,0 +1 @@ +../unifdef -B -DFOO2 blank2d.c diff --git a/tests/blank2u.c b/tests/blank2u.c new file mode 100644 index 0000000..c435ac5 --- /dev/null +++ b/tests/blank2u.c @@ -0,0 +1,25 @@ +#ifdef FOO4 +four +#endif + + + + +#ifdef FOO3 +three +#endif + + + +#ifdef FOO2 +two +#endif + + +#ifdef FOO1 +one +#endif + +#ifdef FOO0 +zero +#endif diff --git a/tests/blank2u.experr b/tests/blank2u.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/blank2u.expout b/tests/blank2u.expout new file mode 100644 index 0000000..cee6dd7 --- /dev/null +++ b/tests/blank2u.expout @@ -0,0 +1,20 @@ +#ifdef FOO4 +four +#endif + + + + +#ifdef FOO3 +three +#endif + + + +#ifdef FOO1 +one +#endif + +#ifdef FOO0 +zero +#endif diff --git a/tests/blank2u.exprc b/tests/blank2u.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/blank2u.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/blank2u.sh b/tests/blank2u.sh new file mode 100644 index 0000000..ae35299 --- /dev/null +++ b/tests/blank2u.sh @@ -0,0 +1 @@ +../unifdef -B -UFOO2 blank2u.c diff --git a/tests/blank3d.c b/tests/blank3d.c new file mode 100644 index 0000000..c435ac5 --- /dev/null +++ b/tests/blank3d.c @@ -0,0 +1,25 @@ +#ifdef FOO4 +four +#endif + + + + +#ifdef FOO3 +three +#endif + + + +#ifdef FOO2 +two +#endif + + +#ifdef FOO1 +one +#endif + +#ifdef FOO0 +zero +#endif diff --git a/tests/blank3d.experr b/tests/blank3d.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/blank3d.expout b/tests/blank3d.expout new file mode 100644 index 0000000..31a633a --- /dev/null +++ b/tests/blank3d.expout @@ -0,0 +1,23 @@ +#ifdef FOO4 +four +#endif + + + + +three + + + +#ifdef FOO2 +two +#endif + + +#ifdef FOO1 +one +#endif + +#ifdef FOO0 +zero +#endif diff --git a/tests/blank3d.exprc b/tests/blank3d.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/blank3d.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/blank3d.sh b/tests/blank3d.sh new file mode 100644 index 0000000..649e521 --- /dev/null +++ b/tests/blank3d.sh @@ -0,0 +1 @@ +../unifdef -B -DFOO3 blank3d.c diff --git a/tests/blank3u.c b/tests/blank3u.c new file mode 100644 index 0000000..c435ac5 --- /dev/null +++ b/tests/blank3u.c @@ -0,0 +1,25 @@ +#ifdef FOO4 +four +#endif + + + + +#ifdef FOO3 +three +#endif + + + +#ifdef FOO2 +two +#endif + + +#ifdef FOO1 +one +#endif + +#ifdef FOO0 +zero +#endif diff --git a/tests/blank3u.experr b/tests/blank3u.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/blank3u.expout b/tests/blank3u.expout new file mode 100644 index 0000000..d90cca9 --- /dev/null +++ b/tests/blank3u.expout @@ -0,0 +1,19 @@ +#ifdef FOO4 +four +#endif + + + + +#ifdef FOO2 +two +#endif + + +#ifdef FOO1 +one +#endif + +#ifdef FOO0 +zero +#endif diff --git a/tests/blank3u.exprc b/tests/blank3u.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/blank3u.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/blank3u.sh b/tests/blank3u.sh new file mode 100644 index 0000000..7c7ef85 --- /dev/null +++ b/tests/blank3u.sh @@ -0,0 +1 @@ +../unifdef -B -UFOO3 blank3u.c diff --git a/tests/blank4d.c b/tests/blank4d.c new file mode 100644 index 0000000..c435ac5 --- /dev/null +++ b/tests/blank4d.c @@ -0,0 +1,25 @@ +#ifdef FOO4 +four +#endif + + + + +#ifdef FOO3 +three +#endif + + + +#ifdef FOO2 +two +#endif + + +#ifdef FOO1 +one +#endif + +#ifdef FOO0 +zero +#endif diff --git a/tests/blank4d.experr b/tests/blank4d.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/blank4d.expout b/tests/blank4d.expout new file mode 100644 index 0000000..782ff9d --- /dev/null +++ b/tests/blank4d.expout @@ -0,0 +1,23 @@ +four + + + + +#ifdef FOO3 +three +#endif + + + +#ifdef FOO2 +two +#endif + + +#ifdef FOO1 +one +#endif + +#ifdef FOO0 +zero +#endif diff --git a/tests/blank4d.exprc b/tests/blank4d.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/blank4d.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/blank4d.sh b/tests/blank4d.sh new file mode 100644 index 0000000..d78b1f0 --- /dev/null +++ b/tests/blank4d.sh @@ -0,0 +1 @@ +../unifdef -B -DFOO4 blank4d.c diff --git a/tests/blank4u.c b/tests/blank4u.c new file mode 100644 index 0000000..c435ac5 --- /dev/null +++ b/tests/blank4u.c @@ -0,0 +1,25 @@ +#ifdef FOO4 +four +#endif + + + + +#ifdef FOO3 +three +#endif + + + +#ifdef FOO2 +two +#endif + + +#ifdef FOO1 +one +#endif + +#ifdef FOO0 +zero +#endif diff --git a/tests/blank4u.experr b/tests/blank4u.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/blank4u.expout b/tests/blank4u.expout new file mode 100644 index 0000000..72f0fa7 --- /dev/null +++ b/tests/blank4u.expout @@ -0,0 +1,18 @@ +#ifdef FOO3 +three +#endif + + + +#ifdef FOO2 +two +#endif + + +#ifdef FOO1 +one +#endif + +#ifdef FOO0 +zero +#endif diff --git a/tests/blank4u.exprc b/tests/blank4u.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/blank4u.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/blank4u.sh b/tests/blank4u.sh new file mode 100644 index 0000000..6ee2c17 --- /dev/null +++ b/tests/blank4u.sh @@ -0,0 +1 @@ +../unifdef -B -UFOO4 blank4u.c diff --git a/tests/crlf-a.experr b/tests/crlf-a.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/crlf-a.expout b/tests/crlf-a.expout new file mode 100644 index 0000000..29e1b63 --- /dev/null +++ b/tests/crlf-a.expout @@ -0,0 +1,10 @@ +int f1() { return 0; } +\/ +/\ +comment +/\ +*\ +comment +*\ +/\ +eof diff --git a/tests/crlf-a.exprc b/tests/crlf-a.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/crlf-a.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/crlf-a.sh b/tests/crlf-a.sh new file mode 100644 index 0000000..1c48951 --- /dev/null +++ b/tests/crlf-a.sh @@ -0,0 +1 @@ +../unifdef -DF1 crlf.c diff --git a/tests/crlf-b.experr b/tests/crlf-b.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/crlf-b.expout b/tests/crlf-b.expout new file mode 100644 index 0000000..011b81a --- /dev/null +++ b/tests/crlf-b.expout @@ -0,0 +1,14 @@ +#if F1 +int f1() { return 0; } +#else +int f2() { return 0; } +#endif +\/ +/\ +comment +/\ +*\ +comment +*\ +/\ +eof diff --git a/tests/crlf-b.exprc b/tests/crlf-b.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/crlf-b.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/crlf-b.sh b/tests/crlf-b.sh new file mode 100644 index 0000000..e6c46d6 --- /dev/null +++ b/tests/crlf-b.sh @@ -0,0 +1 @@ +../unifdef -DF2 crlf.c diff --git a/tests/crlf-c.experr b/tests/crlf-c.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/crlf-c.expout b/tests/crlf-c.expout new file mode 100644 index 0000000..f9fdaf8 --- /dev/null +++ b/tests/crlf-c.expout @@ -0,0 +1,16 @@ +#if F1 +int f1() { return 0; } +#elif F2 +int f2() { return 0; } +#else +int f3() { return 0; } +#endif +\/ +/\ +comment +/\ +*\ +comment +*\ +/\ +eof diff --git a/tests/crlf-c.exprc b/tests/crlf-c.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/crlf-c.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/crlf-c.sh b/tests/crlf-c.sh new file mode 100644 index 0000000..68f7dda --- /dev/null +++ b/tests/crlf-c.sh @@ -0,0 +1 @@ +../unifdef -DF3 crlf.c diff --git a/tests/crlf-d.experr b/tests/crlf-d.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/crlf-d.expout b/tests/crlf-d.expout new file mode 100644 index 0000000..295d337 --- /dev/null +++ b/tests/crlf-d.expout @@ -0,0 +1,18 @@ +#if F1 +int f1() { return 0; } +#elif F2 +int f2() { return 0; } +#elif F3 +int f3() { return 0; } +#else +int f4() { return 0; } +#endif +\/ +/\ +comment +/\ +*\ +comment +*\ +/\ +eof diff --git a/tests/crlf-d.exprc b/tests/crlf-d.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/crlf-d.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/crlf-d.sh b/tests/crlf-d.sh new file mode 100644 index 0000000..50111be --- /dev/null +++ b/tests/crlf-d.sh @@ -0,0 +1 @@ +../unifdef -DF4 crlf.c diff --git a/tests/crlf.c b/tests/crlf.c new file mode 100644 index 0000000..ad911dc --- /dev/null +++ b/tests/crlf.c @@ -0,0 +1,20 @@ +#if F1 +int f1() { return 0; } +#elif F2 +int f2() { return 0; } +#elif F3 +int f3() { return 0; } +#elif F4 +int f4() { return 0; } +#else +int f() { return 0; } +#endif +\/ +/\ +comment +/\ +*\ +comment +*\ +/\ +eof diff --git a/tests/empty.c b/tests/empty.c new file mode 100644 index 0000000..e69de29 diff --git a/tests/empty.experr b/tests/empty.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/empty.expout b/tests/empty.expout new file mode 100644 index 0000000..e69de29 diff --git a/tests/empty.exprc b/tests/empty.exprc new file mode 100644 index 0000000..573541a --- /dev/null +++ b/tests/empty.exprc @@ -0,0 +1 @@ +0 diff --git a/tests/empty.sh b/tests/empty.sh new file mode 100644 index 0000000..a4e994a --- /dev/null +++ b/tests/empty.sh @@ -0,0 +1 @@ +../unifdef -DFOO=1 -DFOOB=42 -UBAR empty.c diff --git a/tests/if1-a.experr b/tests/if1-a.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/if1-a.expout b/tests/if1-a.expout new file mode 100644 index 0000000..56ae03c --- /dev/null +++ b/tests/if1-a.expout @@ -0,0 +1,16 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +int foo() { return 0; } + +int bar() { return 0; } + +int main() +{ + foo(); + bar(); +} diff --git a/tests/if1-a.exprc b/tests/if1-a.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/if1-a.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/if1-a.sh b/tests/if1-a.sh new file mode 100644 index 0000000..e59baa2 --- /dev/null +++ b/tests/if1-a.sh @@ -0,0 +1 @@ +../unifdefall.sh -DFOO=1 -DFOOB=42 -UBAR if1.c diff --git a/tests/if1-k.c b/tests/if1-k.c new file mode 100644 index 0000000..712350f --- /dev/null +++ b/tests/if1-k.c @@ -0,0 +1,38 @@ +/* Copyright 2004, 2008 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +#if 0 +/* This code is commented out. "#if 0 then" */ +#else +/* This code is passed through. "#if 0 else" */ +#endif + +#if 1 +/* This code is passed through. "#if 1 then" */ +#else +/* This code is commented out. "#if 1 else" */ +#endif + +#if FOO +int foo() { return 0; } +#else +#error FOO not defined +#endif + +#if BAR +int foo() { return 0; } +#elif FOO +int bar() { return 0; } +#else +#error FOO not defined +#endif + +int main() +{ + foo(); + bar(); +} diff --git a/tests/if1-k.experr b/tests/if1-k.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/if1-k.expout b/tests/if1-k.expout new file mode 100644 index 0000000..2be8567 --- /dev/null +++ b/tests/if1-k.expout @@ -0,0 +1,30 @@ +/* Copyright 2004, 2008 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +/* This code is passed through. "#if 0 else" */ + +/* This code is passed through. "#if 1 then" */ + +#if FOO +int foo() { return 0; } +#else +#error FOO not defined +#endif + +#if BAR +int foo() { return 0; } +#elif FOO +int bar() { return 0; } +#else +#error FOO not defined +#endif + +int main() +{ + foo(); + bar(); +} diff --git a/tests/if1-k.exprc b/tests/if1-k.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/if1-k.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/if1-k.sh b/tests/if1-k.sh new file mode 100644 index 0000000..e6d9615 --- /dev/null +++ b/tests/if1-k.sh @@ -0,0 +1 @@ +../unifdef -k if1-k.c diff --git a/tests/if1-kDU.c b/tests/if1-kDU.c new file mode 100644 index 0000000..712350f --- /dev/null +++ b/tests/if1-kDU.c @@ -0,0 +1,38 @@ +/* Copyright 2004, 2008 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +#if 0 +/* This code is commented out. "#if 0 then" */ +#else +/* This code is passed through. "#if 0 else" */ +#endif + +#if 1 +/* This code is passed through. "#if 1 then" */ +#else +/* This code is commented out. "#if 1 else" */ +#endif + +#if FOO +int foo() { return 0; } +#else +#error FOO not defined +#endif + +#if BAR +int foo() { return 0; } +#elif FOO +int bar() { return 0; } +#else +#error FOO not defined +#endif + +int main() +{ + foo(); + bar(); +} diff --git a/tests/if1-kDU.experr b/tests/if1-kDU.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/if1-kDU.expout b/tests/if1-kDU.expout new file mode 100644 index 0000000..c308e43 --- /dev/null +++ b/tests/if1-kDU.expout @@ -0,0 +1,20 @@ +/* Copyright 2004, 2008 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +/* This code is passed through. "#if 0 else" */ + +/* This code is passed through. "#if 1 then" */ + +int foo() { return 0; } + +int bar() { return 0; } + +int main() +{ + foo(); + bar(); +} diff --git a/tests/if1-kDU.exprc b/tests/if1-kDU.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/if1-kDU.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/if1-kDU.sh b/tests/if1-kDU.sh new file mode 100644 index 0000000..502df38 --- /dev/null +++ b/tests/if1-kDU.sh @@ -0,0 +1 @@ +../unifdef -k -DFOO=1 -DFOOB=42 -UBAR if1-kDU.c diff --git a/tests/if1.c b/tests/if1.c new file mode 100644 index 0000000..9e588c2 --- /dev/null +++ b/tests/if1.c @@ -0,0 +1,26 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +#if FOO +int foo() { return 0; } +#else +#error FOO not defined +#endif + +#if BAR +int foo() { return 0; } +#elif FOO +int bar() { return 0; } +#else +#error FOO not defined +#endif + +int main() +{ + foo(); + bar(); +} diff --git a/tests/if1.experr b/tests/if1.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/if1.expout b/tests/if1.expout new file mode 100644 index 0000000..56ae03c --- /dev/null +++ b/tests/if1.expout @@ -0,0 +1,16 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +int foo() { return 0; } + +int bar() { return 0; } + +int main() +{ + foo(); + bar(); +} diff --git a/tests/if1.exprc b/tests/if1.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/if1.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/if1.sh b/tests/if1.sh new file mode 100644 index 0000000..df22c5e --- /dev/null +++ b/tests/if1.sh @@ -0,0 +1 @@ +../unifdef -DFOO=1 -DFOOB=42 -UBAR if1.c diff --git a/tests/if1a.experr b/tests/if1a.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/if1a.expout b/tests/if1a.expout new file mode 100644 index 0000000..956eea0 --- /dev/null +++ b/tests/if1a.expout @@ -0,0 +1,24 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +#if FOO +int foo() { return 0; } +#else +#error FOO not defined +#endif + +#if FOO +int bar() { return 0; } +#else +#error FOO not defined +#endif + +int main() +{ + foo(); + bar(); +} diff --git a/tests/if1a.exprc b/tests/if1a.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/if1a.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/if1a.sh b/tests/if1a.sh new file mode 100644 index 0000000..bcf251c --- /dev/null +++ b/tests/if1a.sh @@ -0,0 +1 @@ +../unifdef -UBAR if1.c diff --git a/tests/if2-a.experr b/tests/if2-a.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/if2-a.expout b/tests/if2-a.expout new file mode 100644 index 0000000..b64cfc2 --- /dev/null +++ b/tests/if2-a.expout @@ -0,0 +1,13 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +int foo() { return 0; } + +int main() +{ + foo(); +} diff --git a/tests/if2-a.exprc b/tests/if2-a.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/if2-a.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/if2-a.sh b/tests/if2-a.sh new file mode 100644 index 0000000..a4dc6a0 --- /dev/null +++ b/tests/if2-a.sh @@ -0,0 +1 @@ +../unifdefall.sh -DFOO=1 -DFOOB=42 -UBAR if2.c diff --git a/tests/if2-k.c b/tests/if2-k.c new file mode 100644 index 0000000..b5a9109 --- /dev/null +++ b/tests/if2-k.c @@ -0,0 +1,29 @@ +/* Copyright 2004, 2008 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +#if 0 +/* This code is commented out. "#if 0 then" */ +#else +/* This code is passed through. "#if 0 else" */ +#endif + +#if 1 +/* This code is passed through. "#if 1 then" */ +#else +/* This code is passed through. "#if 1 else" */ +#endif + +#if defined(FOO) +int foo() { return 0; } +#else +#error FOO not defined +#endif + +int main() +{ + foo(); +} diff --git a/tests/if2-k.experr b/tests/if2-k.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/if2-k.expout b/tests/if2-k.expout new file mode 100644 index 0000000..6a173a4 --- /dev/null +++ b/tests/if2-k.expout @@ -0,0 +1,21 @@ +/* Copyright 2004, 2008 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +/* This code is passed through. "#if 0 else" */ + +/* This code is passed through. "#if 1 then" */ + +#if defined(FOO) +int foo() { return 0; } +#else +#error FOO not defined +#endif + +int main() +{ + foo(); +} diff --git a/tests/if2-k.exprc b/tests/if2-k.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/if2-k.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/if2-k.sh b/tests/if2-k.sh new file mode 100644 index 0000000..693be85 --- /dev/null +++ b/tests/if2-k.sh @@ -0,0 +1 @@ +../unifdef -k if2-k.c diff --git a/tests/if2-kDU.c b/tests/if2-kDU.c new file mode 100644 index 0000000..b5a9109 --- /dev/null +++ b/tests/if2-kDU.c @@ -0,0 +1,29 @@ +/* Copyright 2004, 2008 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +#if 0 +/* This code is commented out. "#if 0 then" */ +#else +/* This code is passed through. "#if 0 else" */ +#endif + +#if 1 +/* This code is passed through. "#if 1 then" */ +#else +/* This code is passed through. "#if 1 else" */ +#endif + +#if defined(FOO) +int foo() { return 0; } +#else +#error FOO not defined +#endif + +int main() +{ + foo(); +} diff --git a/tests/if2-kDU.experr b/tests/if2-kDU.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/if2-kDU.expout b/tests/if2-kDU.expout new file mode 100644 index 0000000..7cf0ddc --- /dev/null +++ b/tests/if2-kDU.expout @@ -0,0 +1,17 @@ +/* Copyright 2004, 2008 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +/* This code is passed through. "#if 0 else" */ + +/* This code is passed through. "#if 1 then" */ + +int foo() { return 0; } + +int main() +{ + foo(); +} diff --git a/tests/if2-kDU.exprc b/tests/if2-kDU.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/if2-kDU.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/if2-kDU.sh b/tests/if2-kDU.sh new file mode 100644 index 0000000..258cbeb --- /dev/null +++ b/tests/if2-kDU.sh @@ -0,0 +1 @@ +../unifdef -k -DFOO=1 -DFOOB=42 -UBAR if2-kDU.c diff --git a/tests/if2.c b/tests/if2.c new file mode 100644 index 0000000..44fdae0 --- /dev/null +++ b/tests/if2.c @@ -0,0 +1,17 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +#if defined(FOO) +int foo() { return 0; } +#else +#error FOO not defined +#endif + +int main() +{ + foo(); +} diff --git a/tests/if2.experr b/tests/if2.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/if2.expout b/tests/if2.expout new file mode 100644 index 0000000..b64cfc2 --- /dev/null +++ b/tests/if2.expout @@ -0,0 +1,13 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +int foo() { return 0; } + +int main() +{ + foo(); +} diff --git a/tests/if2.exprc b/tests/if2.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/if2.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/if2.sh b/tests/if2.sh new file mode 100644 index 0000000..425942d --- /dev/null +++ b/tests/if2.sh @@ -0,0 +1 @@ +../unifdef -DFOO=1 -DFOOB=42 -UBAR if2.c diff --git a/tests/if3-a.experr b/tests/if3-a.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/if3-a.expout b/tests/if3-a.expout new file mode 100644 index 0000000..b64cfc2 --- /dev/null +++ b/tests/if3-a.expout @@ -0,0 +1,13 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +int foo() { return 0; } + +int main() +{ + foo(); +} diff --git a/tests/if3-a.exprc b/tests/if3-a.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/if3-a.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/if3-a.sh b/tests/if3-a.sh new file mode 100644 index 0000000..6ca0298 --- /dev/null +++ b/tests/if3-a.sh @@ -0,0 +1 @@ +../unifdefall.sh -DFOO=1 -DFOOB=42 -UBAR if3.c diff --git a/tests/if3-k.c b/tests/if3-k.c new file mode 100644 index 0000000..c901021 --- /dev/null +++ b/tests/if3-k.c @@ -0,0 +1,29 @@ +/* Copyright 2004, 2008 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +#if 0 +/* This code is commented out. "#if 0 then" */ +#else +/* This code is passed through. "#if 0 else" */ +#endif + +#if 1 +/* This code is passed through. "#if 1 then" */ +#else +/* This code is passed through. "#if 1 else" */ +#endif + +#if ! defined(BAR) +int foo() { return 0; } +#else +#error BAR defined +#endif + +int main() +{ + foo(); +} diff --git a/tests/if3-k.experr b/tests/if3-k.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/if3-k.expout b/tests/if3-k.expout new file mode 100644 index 0000000..e0e2386 --- /dev/null +++ b/tests/if3-k.expout @@ -0,0 +1,21 @@ +/* Copyright 2004, 2008 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +/* This code is passed through. "#if 0 else" */ + +/* This code is passed through. "#if 1 then" */ + +#if ! defined(BAR) +int foo() { return 0; } +#else +#error BAR defined +#endif + +int main() +{ + foo(); +} diff --git a/tests/if3-k.exprc b/tests/if3-k.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/if3-k.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/if3-k.sh b/tests/if3-k.sh new file mode 100644 index 0000000..b6765a0 --- /dev/null +++ b/tests/if3-k.sh @@ -0,0 +1 @@ +../unifdef -k if3-k.c diff --git a/tests/if3-kDU.c b/tests/if3-kDU.c new file mode 100644 index 0000000..c901021 --- /dev/null +++ b/tests/if3-kDU.c @@ -0,0 +1,29 @@ +/* Copyright 2004, 2008 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +#if 0 +/* This code is commented out. "#if 0 then" */ +#else +/* This code is passed through. "#if 0 else" */ +#endif + +#if 1 +/* This code is passed through. "#if 1 then" */ +#else +/* This code is passed through. "#if 1 else" */ +#endif + +#if ! defined(BAR) +int foo() { return 0; } +#else +#error BAR defined +#endif + +int main() +{ + foo(); +} diff --git a/tests/if3-kDU.experr b/tests/if3-kDU.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/if3-kDU.expout b/tests/if3-kDU.expout new file mode 100644 index 0000000..7cf0ddc --- /dev/null +++ b/tests/if3-kDU.expout @@ -0,0 +1,17 @@ +/* Copyright 2004, 2008 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +/* This code is passed through. "#if 0 else" */ + +/* This code is passed through. "#if 1 then" */ + +int foo() { return 0; } + +int main() +{ + foo(); +} diff --git a/tests/if3-kDU.exprc b/tests/if3-kDU.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/if3-kDU.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/if3-kDU.sh b/tests/if3-kDU.sh new file mode 100644 index 0000000..51db801 --- /dev/null +++ b/tests/if3-kDU.sh @@ -0,0 +1 @@ +../unifdef -k -DFOO=1 -DFOOB=42 -UBAR if3-kDU.c diff --git a/tests/if3.c b/tests/if3.c new file mode 100644 index 0000000..2a87102 --- /dev/null +++ b/tests/if3.c @@ -0,0 +1,17 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +#if ! defined(BAR) +int foo() { return 0; } +#else +#error BAR defined +#endif + +int main() +{ + foo(); +} diff --git a/tests/if3.experr b/tests/if3.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/if3.expout b/tests/if3.expout new file mode 100644 index 0000000..b64cfc2 --- /dev/null +++ b/tests/if3.expout @@ -0,0 +1,13 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +int foo() { return 0; } + +int main() +{ + foo(); +} diff --git a/tests/if3.exprc b/tests/if3.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/if3.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/if3.sh b/tests/if3.sh new file mode 100644 index 0000000..ced7e98 --- /dev/null +++ b/tests/if3.sh @@ -0,0 +1 @@ +../unifdef -DFOO=1 -DFOOB=42 -UBAR if3.c diff --git a/tests/if4-a.experr b/tests/if4-a.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/if4-a.expout b/tests/if4-a.expout new file mode 100644 index 0000000..55dfe32 --- /dev/null +++ b/tests/if4-a.expout @@ -0,0 +1,22 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +int foo1() { return 0; } + +int foo2() { return 0; } + +int foo3() { return 0; } + +int foo4() { return 0; } + +int main() +{ + foo1(); + foo2(); + foo3(); + foo4(); +} diff --git a/tests/if4-a.exprc b/tests/if4-a.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/if4-a.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/if4-a.sh b/tests/if4-a.sh new file mode 100644 index 0000000..7b7cb92 --- /dev/null +++ b/tests/if4-a.sh @@ -0,0 +1 @@ +../unifdefall.sh -DFOO=1 -DFOOB=42 -UBAR if4.c diff --git a/tests/if4-k.c b/tests/if4-k.c new file mode 100644 index 0000000..b31bca4 --- /dev/null +++ b/tests/if4-k.c @@ -0,0 +1,50 @@ +/* Copyright 2004, 2008 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +#if 0 +/* This code is commented out. "#if 0 then" */ +#else +/* This code is passed through. "#if 0 else" */ +#endif + +#if 1 +/* This code is passed through. "#if 1 then" */ +#else +/* This code is passed through. "#if 1 else" */ +#endif + +#if defined(FOO) || defined(FOOB) +int foo1() { return 0; } +#else +#error FOO or FOOB not defined +#endif + +#if defined(FOOB) || defined(FOO) +int foo2() { return 0; } +#else +#error FOO or FOOB not defined +#endif + +#if defined(FOO) && defined(FOOB) +int foo3() { return 0; } +#else +#error FOO and FOOB not defined +#endif + +#if defined(FOOB) && defined(FOO) +int foo4() { return 0; } +#else +#error FOO and FOOB not defined +#endif + +int main() +{ + foo1(); + foo2(); + foo3(); + foo4(); +} diff --git a/tests/if4-k.experr b/tests/if4-k.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/if4-k.expout b/tests/if4-k.expout new file mode 100644 index 0000000..bb94d6a --- /dev/null +++ b/tests/if4-k.expout @@ -0,0 +1,42 @@ +/* Copyright 2004, 2008 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +/* This code is passed through. "#if 0 else" */ + +/* This code is passed through. "#if 1 then" */ + +#if defined(FOO) || defined(FOOB) +int foo1() { return 0; } +#else +#error FOO or FOOB not defined +#endif + +#if defined(FOOB) || defined(FOO) +int foo2() { return 0; } +#else +#error FOO or FOOB not defined +#endif + +#if defined(FOO) && defined(FOOB) +int foo3() { return 0; } +#else +#error FOO and FOOB not defined +#endif + +#if defined(FOOB) && defined(FOO) +int foo4() { return 0; } +#else +#error FOO and FOOB not defined +#endif + +int main() +{ + foo1(); + foo2(); + foo3(); + foo4(); +} diff --git a/tests/if4-k.exprc b/tests/if4-k.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/if4-k.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/if4-k.sh b/tests/if4-k.sh new file mode 100644 index 0000000..8b69c0e --- /dev/null +++ b/tests/if4-k.sh @@ -0,0 +1 @@ +../unifdef -k if4-k.c diff --git a/tests/if4-kDU.c b/tests/if4-kDU.c new file mode 100644 index 0000000..b31bca4 --- /dev/null +++ b/tests/if4-kDU.c @@ -0,0 +1,50 @@ +/* Copyright 2004, 2008 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +#if 0 +/* This code is commented out. "#if 0 then" */ +#else +/* This code is passed through. "#if 0 else" */ +#endif + +#if 1 +/* This code is passed through. "#if 1 then" */ +#else +/* This code is passed through. "#if 1 else" */ +#endif + +#if defined(FOO) || defined(FOOB) +int foo1() { return 0; } +#else +#error FOO or FOOB not defined +#endif + +#if defined(FOOB) || defined(FOO) +int foo2() { return 0; } +#else +#error FOO or FOOB not defined +#endif + +#if defined(FOO) && defined(FOOB) +int foo3() { return 0; } +#else +#error FOO and FOOB not defined +#endif + +#if defined(FOOB) && defined(FOO) +int foo4() { return 0; } +#else +#error FOO and FOOB not defined +#endif + +int main() +{ + foo1(); + foo2(); + foo3(); + foo4(); +} diff --git a/tests/if4-kDU.experr b/tests/if4-kDU.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/if4-kDU.expout b/tests/if4-kDU.expout new file mode 100644 index 0000000..919bd63 --- /dev/null +++ b/tests/if4-kDU.expout @@ -0,0 +1,26 @@ +/* Copyright 2004, 2008 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +/* This code is passed through. "#if 0 else" */ + +/* This code is passed through. "#if 1 then" */ + +int foo1() { return 0; } + +int foo2() { return 0; } + +int foo3() { return 0; } + +int foo4() { return 0; } + +int main() +{ + foo1(); + foo2(); + foo3(); + foo4(); +} diff --git a/tests/if4-kDU.exprc b/tests/if4-kDU.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/if4-kDU.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/if4-kDU.sh b/tests/if4-kDU.sh new file mode 100644 index 0000000..6568e10 --- /dev/null +++ b/tests/if4-kDU.sh @@ -0,0 +1 @@ +../unifdef -k -DFOO=1 -DFOOB=42 -UBAR if4-kDU.c diff --git a/tests/if4.c b/tests/if4.c new file mode 100644 index 0000000..a8be348 --- /dev/null +++ b/tests/if4.c @@ -0,0 +1,38 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +#if defined(FOO) || defined(FOOB) +int foo1() { return 0; } +#else +#error FOO or FOOB not defined +#endif + +#if defined(FOOB) || defined(FOO) +int foo2() { return 0; } +#else +#error FOO or FOOB not defined +#endif + +#if defined(FOO) && defined(FOOB) +int foo3() { return 0; } +#else +#error FOO and FOOB not defined +#endif + +#if defined(FOOB) && defined(FOO) +int foo4() { return 0; } +#else +#error FOO and FOOB not defined +#endif + +int main() +{ + foo1(); + foo2(); + foo3(); + foo4(); +} diff --git a/tests/if4.experr b/tests/if4.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/if4.expout b/tests/if4.expout new file mode 100644 index 0000000..55dfe32 --- /dev/null +++ b/tests/if4.expout @@ -0,0 +1,22 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +int foo1() { return 0; } + +int foo2() { return 0; } + +int foo3() { return 0; } + +int foo4() { return 0; } + +int main() +{ + foo1(); + foo2(); + foo3(); + foo4(); +} diff --git a/tests/if4.exprc b/tests/if4.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/if4.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/if4.sh b/tests/if4.sh new file mode 100644 index 0000000..366da40 --- /dev/null +++ b/tests/if4.sh @@ -0,0 +1 @@ +../unifdef -DFOO=1 -DFOOB=42 -UBAR if4.c diff --git a/tests/if5-a.experr b/tests/if5-a.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/if5-a.expout b/tests/if5-a.expout new file mode 100644 index 0000000..b0f8cd2 --- /dev/null +++ b/tests/if5-a.expout @@ -0,0 +1,28 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +int foo1() { return 0; } + +int foo2() { return 0; } + +intx foo3() { return 0; } + +int foo4() { return 0; } + +int foo5() { return 0; } + +int foo6() { return 0; } + +int main() +{ + foo1(); + foo2(); + foo3(); + foo4(); + foo5(); + foo6(); +} diff --git a/tests/if5-a.exprc b/tests/if5-a.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/if5-a.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/if5-a.sh b/tests/if5-a.sh new file mode 100644 index 0000000..a52ab0f --- /dev/null +++ b/tests/if5-a.sh @@ -0,0 +1 @@ +../unifdefall.sh -DFOO=1 -DFOOB=42 -UBAR if5.c diff --git a/tests/if5-k.c b/tests/if5-k.c new file mode 100644 index 0000000..2be1847 --- /dev/null +++ b/tests/if5-k.c @@ -0,0 +1,64 @@ +/* Copyright 2004, 2008 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +#if 0 +/* This code is commented out. "#if 0 then" */ +#else +/* This code is passed through. "#if 0 else" */ +#endif + +#if 1 +/* This code is passed through. "#if 1 then" */ +#else +/* This code is passed through. "#if 1 else" */ +#endif + +#if FOOB == 42 +int foo1() { return 0; } +#else +#error FOOB not 42 +#endif + +#if FOOB != 42 +#error FOO is 2 +#else +int foo2() { return 0; } +#endif + +#if FOOB == 42 || FOO == 1 +intx foo3() { return 0; } +#else +#error FOO not 1 or BAR not 1 +#endif + +#if FOOB != 42 && FOO != 1 +#error FOOB not 42 and FOO not 1 +#else +int foo4() { return 0; } +#endif + +#if FOOB == 42 || FOO != 1 +int foo5() { return 0; } +#else +#error FOOB is 42 or FOO is not 1 +#endif + +#if FOO != 1 || FOOB != 42 +#error FOO is 1 or FOOB is 42 +#else +int foo6() { return 0; } +#endif + +int main() +{ + foo1(); + foo2(); + foo3(); + foo4(); + foo5(); + foo6(); +} diff --git a/tests/if5-k.experr b/tests/if5-k.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/if5-k.expout b/tests/if5-k.expout new file mode 100644 index 0000000..4ae22c6 --- /dev/null +++ b/tests/if5-k.expout @@ -0,0 +1,56 @@ +/* Copyright 2004, 2008 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +/* This code is passed through. "#if 0 else" */ + +/* This code is passed through. "#if 1 then" */ + +#if FOOB == 42 +int foo1() { return 0; } +#else +#error FOOB not 42 +#endif + +#if FOOB != 42 +#error FOO is 2 +#else +int foo2() { return 0; } +#endif + +#if FOOB == 42 || FOO == 1 +intx foo3() { return 0; } +#else +#error FOO not 1 or BAR not 1 +#endif + +#if FOOB != 42 && FOO != 1 +#error FOOB not 42 and FOO not 1 +#else +int foo4() { return 0; } +#endif + +#if FOOB == 42 || FOO != 1 +int foo5() { return 0; } +#else +#error FOOB is 42 or FOO is not 1 +#endif + +#if FOO != 1 || FOOB != 42 +#error FOO is 1 or FOOB is 42 +#else +int foo6() { return 0; } +#endif + +int main() +{ + foo1(); + foo2(); + foo3(); + foo4(); + foo5(); + foo6(); +} diff --git a/tests/if5-k.exprc b/tests/if5-k.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/if5-k.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/if5-k.sh b/tests/if5-k.sh new file mode 100644 index 0000000..6a8d7a8 --- /dev/null +++ b/tests/if5-k.sh @@ -0,0 +1 @@ +../unifdef -k if5-k.c diff --git a/tests/if5-kDU.c b/tests/if5-kDU.c new file mode 100644 index 0000000..2be1847 --- /dev/null +++ b/tests/if5-kDU.c @@ -0,0 +1,64 @@ +/* Copyright 2004, 2008 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +#if 0 +/* This code is commented out. "#if 0 then" */ +#else +/* This code is passed through. "#if 0 else" */ +#endif + +#if 1 +/* This code is passed through. "#if 1 then" */ +#else +/* This code is passed through. "#if 1 else" */ +#endif + +#if FOOB == 42 +int foo1() { return 0; } +#else +#error FOOB not 42 +#endif + +#if FOOB != 42 +#error FOO is 2 +#else +int foo2() { return 0; } +#endif + +#if FOOB == 42 || FOO == 1 +intx foo3() { return 0; } +#else +#error FOO not 1 or BAR not 1 +#endif + +#if FOOB != 42 && FOO != 1 +#error FOOB not 42 and FOO not 1 +#else +int foo4() { return 0; } +#endif + +#if FOOB == 42 || FOO != 1 +int foo5() { return 0; } +#else +#error FOOB is 42 or FOO is not 1 +#endif + +#if FOO != 1 || FOOB != 42 +#error FOO is 1 or FOOB is 42 +#else +int foo6() { return 0; } +#endif + +int main() +{ + foo1(); + foo2(); + foo3(); + foo4(); + foo5(); + foo6(); +} diff --git a/tests/if5-kDU.experr b/tests/if5-kDU.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/if5-kDU.expout b/tests/if5-kDU.expout new file mode 100644 index 0000000..a8de2a1 --- /dev/null +++ b/tests/if5-kDU.expout @@ -0,0 +1,32 @@ +/* Copyright 2004, 2008 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +/* This code is passed through. "#if 0 else" */ + +/* This code is passed through. "#if 1 then" */ + +int foo1() { return 0; } + +int foo2() { return 0; } + +intx foo3() { return 0; } + +int foo4() { return 0; } + +int foo5() { return 0; } + +int foo6() { return 0; } + +int main() +{ + foo1(); + foo2(); + foo3(); + foo4(); + foo5(); + foo6(); +} diff --git a/tests/if5-kDU.exprc b/tests/if5-kDU.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/if5-kDU.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/if5-kDU.sh b/tests/if5-kDU.sh new file mode 100644 index 0000000..375f53b --- /dev/null +++ b/tests/if5-kDU.sh @@ -0,0 +1 @@ +../unifdef -k -DFOO=1 -DFOOB=42 -UBAR if5-kDU.c diff --git a/tests/if5.c b/tests/if5.c new file mode 100644 index 0000000..d40b3cb --- /dev/null +++ b/tests/if5.c @@ -0,0 +1,52 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +#if FOOB == 42 +int foo1() { return 0; } +#else +#error FOOB not 42 +#endif + +#if FOOB != 42 +#error FOO is 2 +#else +int foo2() { return 0; } +#endif + +#if FOOB == 42 || FOO == 1 +intx foo3() { return 0; } +#else +#error FOO not 1 or BAR not 1 +#endif + +#if FOOB != 42 && FOO != 1 +#error FOOB not 42 and FOO not 1 +#else +int foo4() { return 0; } +#endif + +#if FOOB == 42 || FOO != 1 +int foo5() { return 0; } +#else +#error FOOB is 42 or FOO is not 1 +#endif + +#if FOO != 1 || FOOB != 42 +#error FOO is 1 or FOOB is 42 +#else +int foo6() { return 0; } +#endif + +int main() +{ + foo1(); + foo2(); + foo3(); + foo4(); + foo5(); + foo6(); +} diff --git a/tests/if5.experr b/tests/if5.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/if5.expout b/tests/if5.expout new file mode 100644 index 0000000..b0f8cd2 --- /dev/null +++ b/tests/if5.expout @@ -0,0 +1,28 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +int foo1() { return 0; } + +int foo2() { return 0; } + +intx foo3() { return 0; } + +int foo4() { return 0; } + +int foo5() { return 0; } + +int foo6() { return 0; } + +int main() +{ + foo1(); + foo2(); + foo3(); + foo4(); + foo5(); + foo6(); +} diff --git a/tests/if5.exprc b/tests/if5.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/if5.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/if5.sh b/tests/if5.sh new file mode 100644 index 0000000..f1ee817 --- /dev/null +++ b/tests/if5.sh @@ -0,0 +1 @@ +../unifdef -DFOO=1 -DFOOB=42 -UBAR if5.c diff --git a/tests/if6.c b/tests/if6.c new file mode 100644 index 0000000..6abadb1 --- /dev/null +++ b/tests/if6.c @@ -0,0 +1,11 @@ +#if F1 +int f1() { return 0; } +#elif F2 +int f2() { return 0; } +#elif F3 +int f3() { return 0; } +#elif F4 +int f4() { return 0; } +#else +int f() { return 0; } +#endif diff --git a/tests/if6a.experr b/tests/if6a.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/if6a.expout b/tests/if6a.expout new file mode 100644 index 0000000..c51d7a6 --- /dev/null +++ b/tests/if6a.expout @@ -0,0 +1 @@ +int f1() { return 0; } diff --git a/tests/if6a.exprc b/tests/if6a.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/if6a.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/if6a.sh b/tests/if6a.sh new file mode 100644 index 0000000..a0ba172 --- /dev/null +++ b/tests/if6a.sh @@ -0,0 +1 @@ +../unifdef -DF1 if6.c diff --git a/tests/if6b.experr b/tests/if6b.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/if6b.expout b/tests/if6b.expout new file mode 100644 index 0000000..0b7aa04 --- /dev/null +++ b/tests/if6b.expout @@ -0,0 +1,5 @@ +#if F1 +int f1() { return 0; } +#else +int f2() { return 0; } +#endif diff --git a/tests/if6b.exprc b/tests/if6b.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/if6b.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/if6b.sh b/tests/if6b.sh new file mode 100644 index 0000000..d6ab237 --- /dev/null +++ b/tests/if6b.sh @@ -0,0 +1 @@ +../unifdef -DF2 if6.c diff --git a/tests/if6c.experr b/tests/if6c.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/if6c.expout b/tests/if6c.expout new file mode 100644 index 0000000..03341d9 --- /dev/null +++ b/tests/if6c.expout @@ -0,0 +1,7 @@ +#if F1 +int f1() { return 0; } +#elif F2 +int f2() { return 0; } +#else +int f3() { return 0; } +#endif diff --git a/tests/if6c.exprc b/tests/if6c.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/if6c.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/if6c.sh b/tests/if6c.sh new file mode 100644 index 0000000..f707a8f --- /dev/null +++ b/tests/if6c.sh @@ -0,0 +1 @@ +../unifdef -DF3 if6.c diff --git a/tests/if6d.experr b/tests/if6d.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/if6d.expout b/tests/if6d.expout new file mode 100644 index 0000000..76d7011 --- /dev/null +++ b/tests/if6d.expout @@ -0,0 +1,9 @@ +#if F1 +int f1() { return 0; } +#elif F2 +int f2() { return 0; } +#elif F3 +int f3() { return 0; } +#else +int f4() { return 0; } +#endif diff --git a/tests/if6d.exprc b/tests/if6d.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/if6d.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/if6d.sh b/tests/if6d.sh new file mode 100644 index 0000000..f85d137 --- /dev/null +++ b/tests/if6d.sh @@ -0,0 +1 @@ +../unifdef -DF4 if6.c diff --git a/tests/none.c b/tests/none.c new file mode 100644 index 0000000..09d66b6 --- /dev/null +++ b/tests/none.c @@ -0,0 +1,5 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +int foo() { return 0; } diff --git a/tests/none.experr b/tests/none.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/none.expout b/tests/none.expout new file mode 100644 index 0000000..09d66b6 --- /dev/null +++ b/tests/none.expout @@ -0,0 +1,5 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +int foo() { return 0; } diff --git a/tests/none.exprc b/tests/none.exprc new file mode 100644 index 0000000..573541a --- /dev/null +++ b/tests/none.exprc @@ -0,0 +1 @@ +0 diff --git a/tests/none.sh b/tests/none.sh new file mode 100644 index 0000000..828a4ef --- /dev/null +++ b/tests/none.sh @@ -0,0 +1 @@ +../unifdef -DFOO=1 -DFOOB=42 -UBAR none.c diff --git a/tests/outdir.experr b/tests/outdir.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/outdir.expout b/tests/outdir.expout new file mode 100644 index 0000000..56ae03c --- /dev/null +++ b/tests/outdir.expout @@ -0,0 +1,16 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +int foo() { return 0; } + +int bar() { return 0; } + +int main() +{ + foo(); + bar(); +} diff --git a/tests/outdir.exprc b/tests/outdir.exprc new file mode 100644 index 0000000..573541a --- /dev/null +++ b/tests/outdir.exprc @@ -0,0 +1 @@ +0 diff --git a/tests/outdir.sh b/tests/outdir.sh new file mode 100644 index 0000000..29b4910 --- /dev/null +++ b/tests/outdir.sh @@ -0,0 +1,4 @@ +mkdir -p outdir +../unifdef -DFOO=1 -DFOOB=42 -UBAR -ooutdir/outfile.c if1.c +cat outdir/outfile.c +rm -r outdir diff --git a/tests/outfile.experr b/tests/outfile.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/outfile.expout b/tests/outfile.expout new file mode 100644 index 0000000..56ae03c --- /dev/null +++ b/tests/outfile.expout @@ -0,0 +1,16 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +int foo() { return 0; } + +int bar() { return 0; } + +int main() +{ + foo(); + bar(); +} diff --git a/tests/outfile.exprc b/tests/outfile.exprc new file mode 100644 index 0000000..573541a --- /dev/null +++ b/tests/outfile.exprc @@ -0,0 +1 @@ +0 diff --git a/tests/outfile.sh b/tests/outfile.sh new file mode 100644 index 0000000..0a434c2 --- /dev/null +++ b/tests/outfile.sh @@ -0,0 +1,3 @@ +../unifdef -DFOO=1 -DFOOB=42 -UBAR -ooutfile.c if1.c +cat outfile.c +rm outfile.c diff --git a/tests/overdir.experr b/tests/overdir.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/overdir.expout b/tests/overdir.expout new file mode 100644 index 0000000..56ae03c --- /dev/null +++ b/tests/overdir.expout @@ -0,0 +1,16 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +int foo() { return 0; } + +int bar() { return 0; } + +int main() +{ + foo(); + bar(); +} diff --git a/tests/overdir.exprc b/tests/overdir.exprc new file mode 100644 index 0000000..573541a --- /dev/null +++ b/tests/overdir.exprc @@ -0,0 +1 @@ +0 diff --git a/tests/overdir.sh b/tests/overdir.sh new file mode 100644 index 0000000..97734f8 --- /dev/null +++ b/tests/overdir.sh @@ -0,0 +1,5 @@ +mkdir -p overdir +cp if1.c overdir/overwrite.c +../unifdef -DFOO=1 -DFOOB=42 -UBAR -ooverdir/overwrite.c overdir/overwrite.c +cat overdir/overwrite.c +rm -r overdir diff --git a/tests/overwrite.experr b/tests/overwrite.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/overwrite.expout b/tests/overwrite.expout new file mode 100644 index 0000000..56ae03c --- /dev/null +++ b/tests/overwrite.expout @@ -0,0 +1,16 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +int foo() { return 0; } + +int bar() { return 0; } + +int main() +{ + foo(); + bar(); +} diff --git a/tests/overwrite.exprc b/tests/overwrite.exprc new file mode 100644 index 0000000..573541a --- /dev/null +++ b/tests/overwrite.exprc @@ -0,0 +1 @@ +0 diff --git a/tests/overwrite.sh b/tests/overwrite.sh new file mode 100644 index 0000000..ba09def --- /dev/null +++ b/tests/overwrite.sh @@ -0,0 +1,4 @@ +cp if1.c overwrite.c +../unifdef -DFOO=1 -DFOOB=42 -UBAR -ooverwrite.c overwrite.c +cat overwrite.c +rm overwrite.c diff --git a/tests/small1.c b/tests/small1.c new file mode 100644 index 0000000..eb1c26d --- /dev/null +++ b/tests/small1.c @@ -0,0 +1,17 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +#ifdef FOO +int foo() { return 0; } +#else +#error FOO not defined +#endif + +int main() +{ + foo(); +} diff --git a/tests/small1.experr b/tests/small1.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/small1.expout b/tests/small1.expout new file mode 100644 index 0000000..b64cfc2 --- /dev/null +++ b/tests/small1.expout @@ -0,0 +1,13 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +int foo() { return 0; } + +int main() +{ + foo(); +} diff --git a/tests/small1.exprc b/tests/small1.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/small1.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/small1.sh b/tests/small1.sh new file mode 100644 index 0000000..2db693b --- /dev/null +++ b/tests/small1.sh @@ -0,0 +1 @@ +../unifdef -DFOO=1 -DFOOB=42 -UBAR small1.c diff --git a/tests/small2.c b/tests/small2.c new file mode 100644 index 0000000..4a5c813 --- /dev/null +++ b/tests/small2.c @@ -0,0 +1,17 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +#ifndef BAR +int bar() { return 0; } +#else +#error BAR not defined +#endif + +int main() +{ + bar(); +} diff --git a/tests/small2.experr b/tests/small2.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/small2.expout b/tests/small2.expout new file mode 100644 index 0000000..5c1f8b4 --- /dev/null +++ b/tests/small2.expout @@ -0,0 +1,13 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +#include +#include + +int bar() { return 0; } + +int main() +{ + bar(); +} diff --git a/tests/small2.exprc b/tests/small2.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/small2.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/small2.sh b/tests/small2.sh new file mode 100644 index 0000000..fde6ef2 --- /dev/null +++ b/tests/small2.sh @@ -0,0 +1 @@ +../unifdef -DFOO=1 -DFOOB=42 -UBAR small2.c diff --git a/tests/spaces1.c b/tests/spaces1.c new file mode 100644 index 0000000..947dacf --- /dev/null +++ b/tests/spaces1.c @@ -0,0 +1,17 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +# include +# include + +# ifdef FOO +int foo() { return 0; } +# else +# error FOO not defined +# endif + +int main() +{ + foo(); +} diff --git a/tests/spaces1.experr b/tests/spaces1.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/spaces1.expout b/tests/spaces1.expout new file mode 100644 index 0000000..766f235 --- /dev/null +++ b/tests/spaces1.expout @@ -0,0 +1,13 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +# include +# include + +int foo() { return 0; } + +int main() +{ + foo(); +} diff --git a/tests/spaces1.exprc b/tests/spaces1.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/spaces1.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/spaces1.sh b/tests/spaces1.sh new file mode 100644 index 0000000..452033a --- /dev/null +++ b/tests/spaces1.sh @@ -0,0 +1 @@ +../unifdef -DFOO=1 -DFOOB=42 -UBAR spaces1.c diff --git a/tests/spaces2.c b/tests/spaces2.c new file mode 100644 index 0000000..f5a250a --- /dev/null +++ b/tests/spaces2.c @@ -0,0 +1,17 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +# include +# include + +# ifndef BAR +int bar() { return 0; } +# else +# error BAR defined +# endif + +int main() +{ + bar(); +} diff --git a/tests/spaces2.experr b/tests/spaces2.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/spaces2.expout b/tests/spaces2.expout new file mode 100644 index 0000000..7d37759 --- /dev/null +++ b/tests/spaces2.expout @@ -0,0 +1,13 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +# include +# include + +int bar() { return 0; } + +int main() +{ + bar(); +} diff --git a/tests/spaces2.exprc b/tests/spaces2.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/spaces2.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/spaces2.sh b/tests/spaces2.sh new file mode 100644 index 0000000..9771d25 --- /dev/null +++ b/tests/spaces2.sh @@ -0,0 +1 @@ +../unifdef -DFOO=1 -DFOOB=42 -UBAR spaces2.c diff --git a/tests/spaces3.c b/tests/spaces3.c new file mode 100644 index 0000000..7284634 --- /dev/null +++ b/tests/spaces3.c @@ -0,0 +1,17 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +# include + # include + + # ifndef BAR +int bar() { return 0; } + # else + # error BAR defined + # endif + +int main() +{ + bar(); +} diff --git a/tests/spaces3.experr b/tests/spaces3.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/spaces3.expout b/tests/spaces3.expout new file mode 100644 index 0000000..60aceee --- /dev/null +++ b/tests/spaces3.expout @@ -0,0 +1,13 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +# include + # include + +int bar() { return 0; } + +int main() +{ + bar(); +} diff --git a/tests/spaces3.exprc b/tests/spaces3.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/spaces3.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/spaces3.sh b/tests/spaces3.sh new file mode 100644 index 0000000..3a46246 --- /dev/null +++ b/tests/spaces3.sh @@ -0,0 +1 @@ +../unifdef -DFOO=1 -DFOOB=42 -UBAR spaces3.c diff --git a/tests/spaces4.c b/tests/spaces4.c new file mode 100644 index 0000000..6fbc6f2 --- /dev/null +++ b/tests/spaces4.c @@ -0,0 +1,17 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +# include + # include + + # ifdef FOO +int foo() { return 0; } + # else + # error FOO defined + # endif + +int main() +{ + foo(); +} diff --git a/tests/spaces4.experr b/tests/spaces4.experr new file mode 100644 index 0000000..e69de29 diff --git a/tests/spaces4.expout b/tests/spaces4.expout new file mode 100644 index 0000000..fbf0d3c --- /dev/null +++ b/tests/spaces4.expout @@ -0,0 +1,13 @@ +/* Copyright 2004 Bob Proulx +Distributed under the two-clause BSD licence; +see the COPYING file for details. */ + +# include + # include + +int foo() { return 0; } + +int main() +{ + foo(); +} diff --git a/tests/spaces4.exprc b/tests/spaces4.exprc new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/spaces4.exprc @@ -0,0 +1 @@ +1 diff --git a/tests/spaces4.sh b/tests/spaces4.sh new file mode 100644 index 0000000..ae297ab --- /dev/null +++ b/tests/spaces4.sh @@ -0,0 +1 @@ +../unifdef -DFOO=1 -DFOOB=42 -UBAR spaces4.c diff --git a/unifdef.1 b/unifdef.1 new file mode 100644 index 0000000..406870b --- /dev/null +++ b/unifdef.1 @@ -0,0 +1,413 @@ +.\" Copyright (c) 1985, 1991, 1993 +.\" The Regents of the University of California. All rights reserved. +.\" Copyright (c) 2002 - 2010 Tony Finch . All rights reserved. +.\" +.\" This code is derived from software contributed to Berkeley by +.\" Dave Yost. It was rewritten to support ANSI C by Tony Finch. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.Dd March 11, 2010 +.Dt UNIFDEF 1 PRM +.Os " " +.Sh NAME +.Nm unifdef , unifdefall +.Nd remove preprocessor conditionals from code +.Sh SYNOPSIS +.Nm +.Op Fl bBcdeKknsStV +.Op Fl I Ns Ar path +.Op Fl D Ns Ar sym Ns Op = Ns Ar val +.Op Fl U Ns Ar sym +.Op Fl iD Ns Ar sym Ns Op = Ns Ar val +.Op Fl iU Ns Ar sym +.Ar ... +.Op Fl o Ar outfile +.Op Ar infile +.Nm unifdefall +.Op Fl I Ns Ar path +.Ar ... +.Ar file +.Sh DESCRIPTION +The +.Nm +utility selectively processes conditional +.Xr cpp 1 +directives. +It removes from a file +both the directives +and any additional text that they specify should be removed, +while otherwise leaving the file alone. +.Pp +The +.Nm +utility acts on +.Ic #if , #ifdef , #ifndef , #elif , #else , +and +.Ic #endif +lines. +A directive is only processed +if the symbols specified on the command line are sufficient to allow +.Nm +to get a definite value for its control expression. +If the result is false, +the directive and the following lines under its control are removed. +If the result is true, +only the directive is removed. +An +.Ic #ifdef +or +.Ic #ifndef +directive is passed through unchanged +if its controlling symbol is not specified on the command line. +Any +.Ic #if +or +.Ic #elif +control expression that has an unknown value or that +.Nm +cannot parse is passed through unchanged. +By default, +.Nm +ignores +.Ic #if +and +.Ic #elif +lines with constant expressions; +it can be told to process them by specifying the +.Fl k +flag on the command line. +.Pp +It understands a commonly-used subset +of the expression syntax for +.Ic #if +and +.Ic #elif +lines: +integer constants, +integer values of symbols defined on the command line, +the +.Fn defined +operator, +the operators +.Ic \&! , < , > , <= , >= , == , != , && , || , +and parenthesized expressions. +A kind of +.Dq "short circuit" +evaluation is used for the +.Ic && +operator: +if either operand is definitely false then the result is false, +even if the value of the other operand is unknown. +Similarly, +if either operand of +.Ic || +is definitely true then the result is true. +.Pp +In most cases, the +.Nm +utility does not distinguish between object-like macros +(without arguments) and function-like arguments (with arguments). +If a macro is not explicitly defined, or is defined with the +.Fl D +flag on the command-line, its arguments are ignored. +If a macro is explicitly undefined on the command line with the +.Fl U +flag, it may not have any arguments since this leads to a syntax error. +.Pp +The +.Nm +utility understands just enough about C +to know when one of the directives is inactive +because it is inside +a comment, +or affected by a backslash-continued line. +It spots unusually-formatted preprocessor directives +and knows when the layout is too odd for it to handle. +.Pp +A script called +.Nm unifdefall +can be used to remove all conditional +.Xr cpp 1 +directives from a file. +It uses +.Nm Fl s +and +.Nm cpp Fl dM +to get lists of all the controlling symbols +and their definitions (or lack thereof), +then invokes +.Nm +with appropriate arguments to process the file. +.Sh OPTIONS +.Pp +.Bl -tag -width indent -compact +.It Fl D Ns Ar sym Ns = Ns Ar val +Specify that a symbol is defined to a given value +which is used when evaluating +.Ic #if +and +.Ic #elif +control expressions. +.Pp +.It Fl D Ns Ar sym +Specify that a symbol is defined to the value 1. +.Pp +.It Fl U Ns Ar sym +Specify that a symbol is undefined. +If the same symbol appears in more than one argument, +the last occurrence dominates. +.Pp +.It Fl b +Replace removed lines with blank lines +instead of deleting them. +Mutually exclusive with the +.Fl B +option. +.Pp +.It Fl B +Compress blank lines around a deleted section. +Mutually exclusive with the +.Fl b +option. +.Pp +.It Fl c +If the +.Fl c +flag is specified, +then the operation of +.Nm +is complemented, +i.e., the lines that would have been removed or blanked +are retained and vice versa. +.Pp +.It Fl d +Turn on printing of degugging messages. +.Pp +.It Fl e +Because +.Nm +processes its input one line at a time, +it cannot remove preprocessor directives that span more than one line. +The most common example of this is a directive with a multi-line +comment hanging off its right hand end. +By default, +if +.Nm +has to process such a directive, +it will complain that the line is too obfuscated. +The +.Fl e +option changes the behaviour so that, +where possible, +such lines are left unprocessed instead of reporting an error. +.Pp +.It Fl K +Always treat the result of +.Ic && +and +.Ic || +operators as unknown if either operand is unknown, +instead of short-circuiting when unknown operands can't affect the result. +This option is for compatibility with older versions of +.Nm . +.Pp +.It Fl k +Process +.Ic #if +and +.Ic #elif +lines with constant expressions. +By default, sections controlled by such lines are passed through unchanged +because they typically start +.Dq Li "#if 0" +and are used as a kind of comment to sketch out future or past development. +It would be rude to strip them out, just as it would be for normal comments. +.Pp +.It Fl n +Add +.Li #line +directives to the output following any deleted lines, +so that errors produced when compiling the output file correspond to +line numbers in the input file. +.Pp +.It Fl o Ar outfile +Write output to the file +.Ar outfile +instead of the standard output. +If +.Ar outfile +is the same as the input file, +the output is written to a temporary file +which is renamed into place when +.Nm +completes successfully. +.Pp +.It Fl s +Instead of processing the input file as usual, +this option causes +.Nm +to produce a list of symbols that appear in expressions +that +.Nm +understands. +It is useful in conjunction with the +.Fl dM +option of +.Xr cpp 1 +for creating +.Nm +command lines. +.Pp +.It Fl S +Like the +.Fl s +option, but the nesting depth of each symbol is also printed. +This is useful for working out the number of possible combinations +of interdependent defined/undefined symbols. +.Pp +.It Fl t +Disables parsing for C comments +and line continuations, +which is useful +for plain text. +.Pp +.It Fl iD Ns Ar sym Ns Op = Ns Ar val +.It Fl iU Ns Ar sym +Ignore +.Ic #ifdef Ns s . +If your C code uses +.Ic #ifdef Ns s +to delimit non-C lines, +such as comments +or code which is under construction, +then you must tell +.Nm +which symbols are used for that purpose so that it will not try to parse +comments +and line continuations +inside those +.Ic #ifdef Ns s . +You can specify ignored symbols with +.Fl iD Ns Ar sym Ns Oo = Ns Ar val Oc +and +.Fl iU Ns Ar sym +similar to +.Fl D Ns Ar sym Ns Op = Ns Ar val +and +.Fl U Ns Ar sym +above. +.Pp +.It Fl I Ns Ar path +Specifies to +.Nm unifdefall +an additional place to look for +.Ic #include +files. +This option is ignored by +.Nm +for compatibility with +.Xr cpp 1 +and to simplify the implementation of +.Nm unifdefall . +.Pp +.It Fl V +Print version details. +.El +.Pp +The +.Nm +utility copies its output to +.Em stdout +and will take its input from +.Em stdin +if no +.Ar file +argument is given. +.Pp +The +.Nm +utility works nicely with the +.Fl D Ns Ar sym +option of +.Xr diff 1 . +.Sh EXIT STATUS +The +.Nm +utility exits 0 if the output is an exact copy of the input, +1 if not, and 2 if in trouble. +.Sh DIAGNOSTICS +.Bl -item +.It +Too many levels of nesting. +.It +Inappropriate +.Ic #elif , +.Ic #else +or +.Ic #endif . +.It +Obfuscated preprocessor control line. +.It +Premature +.Tn EOF +(with the line number of the most recent unterminated +.Ic #if ) . +.It +.Tn EOF +in comment. +.El +.Sh SEE ALSO +.Xr cpp 1 , +.Xr diff 1 +.Sh HISTORY +The +.Nm +command appeared in +.Bx 2.9 . +.Tn ANSI\~C +support was added in +.Fx 4.7 . +.Sh AUTHORS +The original implementation was written by +.An Dave Yost Aq Dave@Yost.com . +.An Tony Finch Aq dot@dotat.at +rewrote it to support +.Tn ANSI\~C . +.Sh BUGS +Expression evaluation is very limited. +.Pp +Preprocessor control lines split across more than one physical line +(because of comments or backslash-newline) +cannot be handled in every situation. +.Pp +Trigraphs are not recognized. +.Pp +There is no support for symbols with different definitions at +different points in the source file. +.Pp +The text-mode and ignore functionality does not correspond to modern +.Xr cpp 1 +behaviour. diff --git a/unifdef.c b/unifdef.c new file mode 100644 index 0000000..fcc27bf --- /dev/null +++ b/unifdef.c @@ -0,0 +1,1230 @@ +/* + * Copyright (c) 2002 - 2010 Tony Finch + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* + * unifdef - remove ifdef'ed lines + * + * This code was derived from software contributed to Berkeley by Dave Yost. + * It was rewritten to support ANSI C by Tony Finch. The original version + * of unifdef carried the 4-clause BSD copyright licence. None of its code + * remains in this version (though some of the names remain) so it now + * carries a more liberal licence. + * + * Wishlist: + * provide an option which will append the name of the + * appropriate symbol after #else's and #endif's + * provide an option which will check symbols after + * #else's and #endif's to see that they match their + * corresponding #ifdef or #ifndef + * + * These require better buffer handling, which would also make + * it possible to handle all "dodgy" directives correctly. + */ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const char copyright[] = + #include "version.h" + "@(#) $Author: Tony Finch (dot@dotat.at) $\n" + "@(#) $URL: http://dotat.at/prog/unifdef $\n" +; + +/* types of input lines: */ +typedef enum { + LT_TRUEI, /* a true #if with ignore flag */ + LT_FALSEI, /* a false #if with ignore flag */ + LT_IF, /* an unknown #if */ + LT_TRUE, /* a true #if */ + LT_FALSE, /* a false #if */ + LT_ELIF, /* an unknown #elif */ + LT_ELTRUE, /* a true #elif */ + LT_ELFALSE, /* a false #elif */ + LT_ELSE, /* #else */ + LT_ENDIF, /* #endif */ + LT_DODGY, /* flag: directive is not on one line */ + LT_DODGY_LAST = LT_DODGY + LT_ENDIF, + LT_PLAIN, /* ordinary line */ + LT_EOF, /* end of file */ + LT_ERROR, /* unevaluable #if */ + LT_COUNT +} Linetype; + +static char const * const linetype_name[] = { + "TRUEI", "FALSEI", "IF", "TRUE", "FALSE", + "ELIF", "ELTRUE", "ELFALSE", "ELSE", "ENDIF", + "DODGY TRUEI", "DODGY FALSEI", + "DODGY IF", "DODGY TRUE", "DODGY FALSE", + "DODGY ELIF", "DODGY ELTRUE", "DODGY ELFALSE", + "DODGY ELSE", "DODGY ENDIF", + "PLAIN", "EOF", "ERROR" +}; + +/* state of #if processing */ +typedef enum { + IS_OUTSIDE, + IS_FALSE_PREFIX, /* false #if followed by false #elifs */ + IS_TRUE_PREFIX, /* first non-false #(el)if is true */ + IS_PASS_MIDDLE, /* first non-false #(el)if is unknown */ + IS_FALSE_MIDDLE, /* a false #elif after a pass state */ + IS_TRUE_MIDDLE, /* a true #elif after a pass state */ + IS_PASS_ELSE, /* an else after a pass state */ + IS_FALSE_ELSE, /* an else after a true state */ + IS_TRUE_ELSE, /* an else after only false states */ + IS_FALSE_TRAILER, /* #elifs after a true are false */ + IS_COUNT +} Ifstate; + +static char const * const ifstate_name[] = { + "OUTSIDE", "FALSE_PREFIX", "TRUE_PREFIX", + "PASS_MIDDLE", "FALSE_MIDDLE", "TRUE_MIDDLE", + "PASS_ELSE", "FALSE_ELSE", "TRUE_ELSE", + "FALSE_TRAILER" +}; + +/* state of comment parser */ +typedef enum { + NO_COMMENT = false, /* outside a comment */ + C_COMMENT, /* in a comment like this one */ + CXX_COMMENT, /* between // and end of line */ + STARTING_COMMENT, /* just after slash-backslash-newline */ + FINISHING_COMMENT, /* star-backslash-newline in a C comment */ + CHAR_LITERAL, /* inside '' */ + STRING_LITERAL /* inside "" */ +} Comment_state; + +static char const * const comment_name[] = { + "NO", "C", "CXX", "STARTING", "FINISHING", "CHAR", "STRING" +}; + +/* state of preprocessor line parser */ +typedef enum { + LS_START, /* only space and comments on this line */ + LS_HASH, /* only space, comments, and a hash */ + LS_DIRTY /* this line can't be a preprocessor line */ +} Line_state; + +static char const * const linestate_name[] = { + "START", "HASH", "DIRTY" +}; + +/* + * Minimum translation limits from ISO/IEC 9899:1999 5.2.4.1 + */ +#define MAXDEPTH 64 /* maximum #if nesting */ +#define MAXLINE 4096 /* maximum length of line */ +#define MAXSYMS 4096 /* maximum number of symbols */ + +/* + * Sometimes when editing a keyword the replacement text is longer, so + * we leave some space at the end of the tline buffer to accommodate this. + */ +#define EDITSLOP 10 + +/* + * For temporary filenames + */ +#define TEMPLATE "unifdef.XXXXXX" + +/* + * Globals. + */ + +static bool compblank; /* -B: compress blank lines */ +static bool lnblank; /* -b: blank deleted lines */ +static bool complement; /* -c: do the complement */ +static bool debugging; /* -d: debugging reports */ +static bool iocccok; /* -e: fewer IOCCC errors */ +static bool strictlogic; /* -K: keep ambiguous #ifs */ +static bool killconsts; /* -k: eval constant #ifs */ +static bool lnnum; /* -n: add #line directives */ +static bool symlist; /* -s: output symbol list */ +static bool symdepth; /* -S: output symbol depth */ +static bool text; /* -t: this is a text file */ + +static const char *symname[MAXSYMS]; /* symbol name */ +static const char *value[MAXSYMS]; /* -Dsym=value */ +static bool ignore[MAXSYMS]; /* -iDsym or -iUsym */ +static int nsyms; /* number of symbols */ + +static FILE *input; /* input file pointer */ +static const char *filename; /* input file name */ +static int linenum; /* current line number */ +static FILE *output; /* output file pointer */ +static const char *ofilename; /* output file name */ +static bool overwriting; /* output overwrites input */ +static char tempname[FILENAME_MAX]; /* used when overwriting */ + +static char tline[MAXLINE+EDITSLOP];/* input buffer plus space */ +static char *keyword; /* used for editing #elif's */ + +static const char *newline; /* input file format */ +static const char newline_unix[] = "\n"; +static const char newline_crlf[] = "\r\n"; + +static Comment_state incomment; /* comment parser state */ +static Line_state linestate; /* #if line parser state */ +static Ifstate ifstate[MAXDEPTH]; /* #if processor state */ +static bool ignoring[MAXDEPTH]; /* ignore comments state */ +static int stifline[MAXDEPTH]; /* start of current #if */ +static int depth; /* current #if nesting */ +static int delcount; /* count of deleted lines */ +static unsigned blankcount; /* count of blank lines */ +static unsigned blankmax; /* maximum recent blankcount */ +static bool constexpr; /* constant #if expression */ +static bool zerosyms = true; /* to format symdepth output */ +static bool firstsym; /* ditto */ + +static int exitstat; /* program exit status */ + +static void addsym(bool, bool, char *); +static void closeout(void); +static void debug(const char *, ...); +static void done(void); +static void error(const char *); +static int findsym(const char *); +static void flushline(bool); +static Linetype parseline(void); +static Linetype ifeval(const char **); +static void ignoreoff(void); +static void ignoreon(void); +static void keywordedit(const char *); +static void nest(void); +static void process(void); +static const char *skipargs(const char *); +static const char *skipcomment(const char *); +static const char *skipsym(const char *); +static void state(Ifstate); +static int strlcmp(const char *, const char *, size_t); +static void unnest(void); +static void usage(void); +static void version(void); + +#define endsym(c) (!isalnum((unsigned char)c) && c != '_') + +/* + * The main program. + */ +int +main(int argc, char *argv[]) +{ + int opt; + + while ((opt = getopt(argc, argv, "i:D:U:I:o:bBcdeKklnsStV")) != -1) + switch (opt) { + case 'i': /* treat stuff controlled by these symbols as text */ + /* + * For strict backwards-compatibility the U or D + * should be immediately after the -i but it doesn't + * matter much if we relax that requirement. + */ + opt = *optarg++; + if (opt == 'D') + addsym(true, true, optarg); + else if (opt == 'U') + addsym(true, false, optarg); + else + usage(); + break; + case 'D': /* define a symbol */ + addsym(false, true, optarg); + break; + case 'U': /* undef a symbol */ + addsym(false, false, optarg); + break; + case 'I': /* no-op for compatibility with cpp */ + break; + case 'b': /* blank deleted lines instead of omitting them */ + case 'l': /* backwards compatibility */ + lnblank = true; + break; + case 'B': /* compress blank lines around removed section */ + compblank = true; + break; + case 'c': /* treat -D as -U and vice versa */ + complement = true; + break; + case 'd': + debugging = true; + break; + case 'e': /* fewer errors from dodgy lines */ + iocccok = true; + break; + case 'K': /* keep ambiguous #ifs */ + strictlogic = true; + break; + case 'k': /* process constant #ifs */ + killconsts = true; + break; + case 'n': /* add #line directive after deleted lines */ + lnnum = true; + break; + case 'o': /* output to a file */ + ofilename = optarg; + break; + case 's': /* only output list of symbols that control #ifs */ + symlist = true; + break; + case 'S': /* list symbols with their nesting depth */ + symlist = symdepth = true; + break; + case 't': /* don't parse C comments */ + text = true; + break; + case 'V': /* print version */ + version(); + default: + usage(); + } + argc -= optind; + argv += optind; + if (compblank && lnblank) + errx(2, "-B and -b are mutually exclusive"); + if (argc > 1) { + errx(2, "can only do one file"); + } else if (argc == 1 && strcmp(*argv, "-") != 0) { + filename = *argv; + input = fopen(filename, "rb"); + if (input == NULL) + err(2, "can't open %s", filename); + } else { + filename = "[stdin]"; + input = stdin; + } + if (ofilename == NULL) { + ofilename = "[stdout]"; + output = stdout; + } else { + struct stat ist, ost; + memset(&ist, 0, sizeof(ist)); + memset(&ost, 0, sizeof(ost)); + + if (fstat(fileno(input), &ist) != 0) + err(2, "can't fstat %s", filename); + if (stat(ofilename, &ost) != 0 && errno != ENOENT) + warn("can't stat %s", ofilename); + + overwriting = (ist.st_dev == ost.st_dev + && ist.st_ino == ost.st_ino); + if (overwriting) { + const char *dirsep; + int ofd; + + dirsep = strrchr(ofilename, '/'); + if (dirsep != NULL) + snprintf(tempname, sizeof(tempname), + "%.*s/" TEMPLATE, + (int)(dirsep - ofilename), ofilename); + else + snprintf(tempname, sizeof(tempname), + TEMPLATE); + ofd = mkstemp(tempname); + if (ofd != -1) + output = fdopen(ofd, "wb+"); + if (output == NULL) + err(2, "can't create temporary file"); + fchmod(ofd, ist.st_mode & (S_IRWXU|S_IRWXG|S_IRWXO)); + } else { + output = fopen(ofilename, "wb"); + if (output == NULL) + err(2, "can't open %s", ofilename); + } + } + process(); + abort(); /* bug */ +} + +static void +version(void) +{ + const char *c = copyright; + for (;;) { + while (*++c != '$') + if (*c == '\0') + exit(0); + while (*++c != '$') + putc(*c, stderr); + putc('\n', stderr); + } +} + +static void +usage(void) +{ + fprintf(stderr, "usage: unifdef [-bBcdeKknsStV] [-Ipath]" + " [-Dsym[=val]] [-Usym] [-iDsym[=val]] [-iUsym] ... [file]\n"); + exit(2); +} + +/* + * A state transition function alters the global #if processing state + * in a particular way. The table below is indexed by the current + * processing state and the type of the current line. + * + * Nesting is handled by keeping a stack of states; some transition + * functions increase or decrease the depth. They also maintain the + * ignore state on a stack. In some complicated cases they have to + * alter the preprocessor directive, as follows. + * + * When we have processed a group that starts off with a known-false + * #if/#elif sequence (which has therefore been deleted) followed by a + * #elif that we don't understand and therefore must keep, we edit the + * latter into a #if to keep the nesting correct. + * + * When we find a true #elif in a group, the following block will + * always be kept and the rest of the sequence after the next #elif or + * #else will be discarded. We edit the #elif into a #else and the + * following directive to #endif since this has the desired behaviour. + * + * "Dodgy" directives are split across multiple lines, the most common + * example being a multi-line comment hanging off the right of the + * directive. We can handle them correctly only if there is no change + * from printing to dropping (or vice versa) caused by that directive. + * If the directive is the first of a group we have a choice between + * failing with an error, or passing it through unchanged instead of + * evaluating it. The latter is not the default to avoid questions from + * users about unifdef unexpectedly leaving behind preprocessor directives. + */ +typedef void state_fn(void); + +/* report an error */ +static void Eelif (void) { error("Inappropriate #elif"); } +static void Eelse (void) { error("Inappropriate #else"); } +static void Eendif(void) { error("Inappropriate #endif"); } +static void Eeof (void) { error("Premature EOF"); } +static void Eioccc(void) { error("Obfuscated preprocessor control line"); } +/* plain line handling */ +static void print (void) { flushline(true); } +static void drop (void) { flushline(false); } +/* output lacks group's start line */ +static void Strue (void) { drop(); ignoreoff(); state(IS_TRUE_PREFIX); } +static void Sfalse(void) { drop(); ignoreoff(); state(IS_FALSE_PREFIX); } +static void Selse (void) { drop(); state(IS_TRUE_ELSE); } +/* print/pass this block */ +static void Pelif (void) { print(); ignoreoff(); state(IS_PASS_MIDDLE); } +static void Pelse (void) { print(); state(IS_PASS_ELSE); } +static void Pendif(void) { print(); unnest(); } +/* discard this block */ +static void Dfalse(void) { drop(); ignoreoff(); state(IS_FALSE_TRAILER); } +static void Delif (void) { drop(); ignoreoff(); state(IS_FALSE_MIDDLE); } +static void Delse (void) { drop(); state(IS_FALSE_ELSE); } +static void Dendif(void) { drop(); unnest(); } +/* first line of group */ +static void Fdrop (void) { nest(); Dfalse(); } +static void Fpass (void) { nest(); Pelif(); } +static void Ftrue (void) { nest(); Strue(); } +static void Ffalse(void) { nest(); Sfalse(); } +/* variable pedantry for obfuscated lines */ +static void Oiffy (void) { if (!iocccok) Eioccc(); Fpass(); ignoreon(); } +static void Oif (void) { if (!iocccok) Eioccc(); Fpass(); } +static void Oelif (void) { if (!iocccok) Eioccc(); Pelif(); } +/* ignore comments in this block */ +static void Idrop (void) { Fdrop(); ignoreon(); } +static void Itrue (void) { Ftrue(); ignoreon(); } +static void Ifalse(void) { Ffalse(); ignoreon(); } +/* edit this line */ +static void Mpass (void) { strncpy(keyword, "if ", 4); Pelif(); } +static void Mtrue (void) { keywordedit("else"); state(IS_TRUE_MIDDLE); } +static void Melif (void) { keywordedit("endif"); state(IS_FALSE_TRAILER); } +static void Melse (void) { keywordedit("endif"); state(IS_FALSE_ELSE); } + +static state_fn * const trans_table[IS_COUNT][LT_COUNT] = { +/* IS_OUTSIDE */ +{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Eelif, Eelif, Eelif, Eelse, Eendif, + Oiffy, Oiffy, Fpass, Oif, Oif, Eelif, Eelif, Eelif, Eelse, Eendif, + print, done, abort }, +/* IS_FALSE_PREFIX */ +{ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Mpass, Strue, Sfalse,Selse, Dendif, + Idrop, Idrop, Fdrop, Fdrop, Fdrop, Mpass, Eioccc,Eioccc,Eioccc,Eioccc, + drop, Eeof, abort }, +/* IS_TRUE_PREFIX */ +{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Dfalse,Dfalse,Dfalse,Delse, Dendif, + Oiffy, Oiffy, Fpass, Oif, Oif, Eioccc,Eioccc,Eioccc,Eioccc,Eioccc, + print, Eeof, abort }, +/* IS_PASS_MIDDLE */ +{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Pelif, Mtrue, Delif, Pelse, Pendif, + Oiffy, Oiffy, Fpass, Oif, Oif, Pelif, Oelif, Oelif, Pelse, Pendif, + print, Eeof, abort }, +/* IS_FALSE_MIDDLE */ +{ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Pelif, Mtrue, Delif, Pelse, Pendif, + Idrop, Idrop, Fdrop, Fdrop, Fdrop, Eioccc,Eioccc,Eioccc,Eioccc,Eioccc, + drop, Eeof, abort }, +/* IS_TRUE_MIDDLE */ +{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Melif, Melif, Melif, Melse, Pendif, + Oiffy, Oiffy, Fpass, Oif, Oif, Eioccc,Eioccc,Eioccc,Eioccc,Pendif, + print, Eeof, abort }, +/* IS_PASS_ELSE */ +{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Eelif, Eelif, Eelif, Eelse, Pendif, + Oiffy, Oiffy, Fpass, Oif, Oif, Eelif, Eelif, Eelif, Eelse, Pendif, + print, Eeof, abort }, +/* IS_FALSE_ELSE */ +{ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Eelif, Eelif, Eelif, Eelse, Dendif, + Idrop, Idrop, Fdrop, Fdrop, Fdrop, Eelif, Eelif, Eelif, Eelse, Eioccc, + drop, Eeof, abort }, +/* IS_TRUE_ELSE */ +{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Eelif, Eelif, Eelif, Eelse, Dendif, + Oiffy, Oiffy, Fpass, Oif, Oif, Eelif, Eelif, Eelif, Eelse, Eioccc, + print, Eeof, abort }, +/* IS_FALSE_TRAILER */ +{ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Dfalse,Dfalse,Dfalse,Delse, Dendif, + Idrop, Idrop, Fdrop, Fdrop, Fdrop, Dfalse,Dfalse,Dfalse,Delse, Eioccc, + drop, Eeof, abort } +/*TRUEI FALSEI IF TRUE FALSE ELIF ELTRUE ELFALSE ELSE ENDIF + TRUEI FALSEI IF TRUE FALSE ELIF ELTRUE ELFALSE ELSE ENDIF (DODGY) + PLAIN EOF ERROR */ +}; + +/* + * State machine utility functions + */ +static void +ignoreoff(void) +{ + if (depth == 0) + abort(); /* bug */ + ignoring[depth] = ignoring[depth-1]; +} +static void +ignoreon(void) +{ + ignoring[depth] = true; +} +static void +keywordedit(const char *replacement) +{ + snprintf(keyword, tline + sizeof(tline) - keyword, + "%s%s", replacement, newline); + print(); +} +static void +nest(void) +{ + if (depth > MAXDEPTH-1) + abort(); /* bug */ + if (depth == MAXDEPTH-1) + error("Too many levels of nesting"); + depth += 1; + stifline[depth] = linenum; +} +static void +unnest(void) +{ + if (depth == 0) + abort(); /* bug */ + depth -= 1; +} +static void +state(Ifstate is) +{ + ifstate[depth] = is; +} + +/* + * Write a line to the output or not, according to command line options. + */ +static void +flushline(bool keep) +{ + if (symlist) + return; + if (keep ^ complement) { + bool blankline = tline[strspn(tline, " \t\r\n")] == '\0'; + if (blankline && compblank && blankcount != blankmax) { + delcount += 1; + blankcount += 1; + } else { + if (lnnum && delcount > 0) + printf("#line %d%s", linenum, newline); + fputs(tline, output); + delcount = 0; + blankmax = blankcount = blankline ? blankcount + 1 : 0; + } + } else { + if (lnblank) + fputs(newline, output); + exitstat = 1; + delcount += 1; + blankcount = 0; + } + if (debugging) + fflush(output); +} + +/* + * The driver for the state machine. + */ +static void +process(void) +{ + /* When compressing blank lines, act as if the file + is preceded by a large number of blank lines. */ + blankmax = blankcount = 1000; + for (;;) { + Linetype lineval = parseline(); + trans_table[ifstate[depth]][lineval](); + debug("process line %d %s -> %s depth %d", + linenum, linetype_name[lineval], + ifstate_name[ifstate[depth]], depth); + } +} + +/* + * Flush the output and handle errors. + */ +static void +closeout(void) +{ + if (symdepth && !zerosyms) + printf("\n"); + if (fclose(output) == EOF) { + warn("couldn't write to %s", ofilename); + if (overwriting) { + unlink(tempname); + errx(2, "%s unchanged", filename); + } else { + exit(2); + } + } +} + +/* + * Clean up and exit. + */ +static void +done(void) +{ + if (incomment) + error("EOF in comment"); + closeout(); + if (overwriting && rename(tempname, filename) == -1) { + warn("couldn't rename temporary file"); + unlink(tempname); + errx(2, "%s unchanged", filename); + } + exit(exitstat); +} + +/* + * Parse a line and determine its type. We keep the preprocessor line + * parser state between calls in the global variable linestate, with + * help from skipcomment(). + */ +static Linetype +parseline(void) +{ + const char *cp; + int cursym; + int kwlen; + Linetype retval; + Comment_state wascomment; + + linenum++; + if (fgets(tline, MAXLINE, input) == NULL) + return (LT_EOF); + if (newline == NULL) { + if (strrchr(tline, '\n') == strrchr(tline, '\r') + 1) + newline = newline_crlf; + else + newline = newline_unix; + } + retval = LT_PLAIN; + wascomment = incomment; + cp = skipcomment(tline); + if (linestate == LS_START) { + if (*cp == '#') { + linestate = LS_HASH; + firstsym = true; + cp = skipcomment(cp + 1); + } else if (*cp != '\0') + linestate = LS_DIRTY; + } + if (!incomment && linestate == LS_HASH) { + keyword = tline + (cp - tline); + cp = skipsym(cp); + kwlen = cp - keyword; + /* no way can we deal with a continuation inside a keyword */ + if (strncmp(cp, "\\\r\n", 3) == 0 || + strncmp(cp, "\\\n", 2) == 0) + Eioccc(); + if (strlcmp("ifdef", keyword, kwlen) == 0 || + strlcmp("ifndef", keyword, kwlen) == 0) { + cp = skipcomment(cp); + if ((cursym = findsym(cp)) < 0) + retval = LT_IF; + else { + retval = (keyword[2] == 'n') + ? LT_FALSE : LT_TRUE; + if (value[cursym] == NULL) + retval = (retval == LT_TRUE) + ? LT_FALSE : LT_TRUE; + if (ignore[cursym]) + retval = (retval == LT_TRUE) + ? LT_TRUEI : LT_FALSEI; + } + cp = skipsym(cp); + } else if (strlcmp("if", keyword, kwlen) == 0) + retval = ifeval(&cp); + else if (strlcmp("elif", keyword, kwlen) == 0) + retval = ifeval(&cp) - LT_IF + LT_ELIF; + else if (strlcmp("else", keyword, kwlen) == 0) + retval = LT_ELSE; + else if (strlcmp("endif", keyword, kwlen) == 0) + retval = LT_ENDIF; + else { + linestate = LS_DIRTY; + retval = LT_PLAIN; + } + cp = skipcomment(cp); + if (*cp != '\0') { + linestate = LS_DIRTY; + if (retval == LT_TRUE || retval == LT_FALSE || + retval == LT_TRUEI || retval == LT_FALSEI) + retval = LT_IF; + if (retval == LT_ELTRUE || retval == LT_ELFALSE) + retval = LT_ELIF; + } + if (retval != LT_PLAIN && (wascomment || incomment)) { + retval += LT_DODGY; + if (incomment) + linestate = LS_DIRTY; + } + /* skipcomment normally changes the state, except + if the last line of the file lacks a newline, or + if there is too much whitespace in a directive */ + if (linestate == LS_HASH) { + size_t len = cp - tline; + if (fgets(tline + len, MAXLINE - len, input) == NULL) { + /* append the missing newline */ + strcpy(tline + len, newline); + cp += strlen(newline); + linestate = LS_START; + } else { + linestate = LS_DIRTY; + } + } + } + if (linestate == LS_DIRTY) { + while (*cp != '\0') + cp = skipcomment(cp + 1); + } + debug("parser line %d state %s comment %s line", linenum, + comment_name[incomment], linestate_name[linestate]); + return (retval); +} + +/* + * These are the binary operators that are supported by the expression + * evaluator. + */ +static Linetype op_strict(int *p, int v, Linetype at, Linetype bt) { + if(at == LT_IF || bt == LT_IF) return (LT_IF); + return (*p = v, v ? LT_TRUE : LT_FALSE); +} +static Linetype op_lt(int *p, Linetype at, int a, Linetype bt, int b) { + return op_strict(p, a < b, at, bt); +} +static Linetype op_gt(int *p, Linetype at, int a, Linetype bt, int b) { + return op_strict(p, a > b, at, bt); +} +static Linetype op_le(int *p, Linetype at, int a, Linetype bt, int b) { + return op_strict(p, a <= b, at, bt); +} +static Linetype op_ge(int *p, Linetype at, int a, Linetype bt, int b) { + return op_strict(p, a >= b, at, bt); +} +static Linetype op_eq(int *p, Linetype at, int a, Linetype bt, int b) { + return op_strict(p, a == b, at, bt); +} +static Linetype op_ne(int *p, Linetype at, int a, Linetype bt, int b) { + return op_strict(p, a != b, at, bt); +} +static Linetype op_or(int *p, Linetype at, int a, Linetype bt, int b) { + if (!strictlogic && (at == LT_TRUE || bt == LT_TRUE)) + return (*p = 1, LT_TRUE); + return op_strict(p, a || b, at, bt); +} +static Linetype op_and(int *p, Linetype at, int a, Linetype bt, int b) { + if (!strictlogic && (at == LT_FALSE || bt == LT_FALSE)) + return (*p = 0, LT_FALSE); + return op_strict(p, a && b, at, bt); +} + +/* + * An evaluation function takes three arguments, as follows: (1) a pointer to + * an element of the precedence table which lists the operators at the current + * level of precedence; (2) a pointer to an integer which will receive the + * value of the expression; and (3) a pointer to a char* that points to the + * expression to be evaluated and that is updated to the end of the expression + * when evaluation is complete. The function returns LT_FALSE if the value of + * the expression is zero, LT_TRUE if it is non-zero, LT_IF if the expression + * depends on an unknown symbol, or LT_ERROR if there is a parse failure. + */ +struct ops; + +typedef Linetype eval_fn(const struct ops *, int *, const char **); + +static eval_fn eval_table, eval_unary; + +/* + * The precedence table. Expressions involving binary operators are evaluated + * in a table-driven way by eval_table. When it evaluates a subexpression it + * calls the inner function with its first argument pointing to the next + * element of the table. Innermost expressions have special non-table-driven + * handling. + */ +static const struct ops { + eval_fn *inner; + struct op { + const char *str; + Linetype (*fn)(int *, Linetype, int, Linetype, int); + } op[5]; +} eval_ops[] = { + { eval_table, { { "||", op_or } } }, + { eval_table, { { "&&", op_and } } }, + { eval_table, { { "==", op_eq }, + { "!=", op_ne } } }, + { eval_unary, { { "<=", op_le }, + { ">=", op_ge }, + { "<", op_lt }, + { ">", op_gt } } } +}; + +/* + * Function for evaluating the innermost parts of expressions, + * viz. !expr (expr) number defined(symbol) symbol + * We reset the constexpr flag in the last two cases. + */ +static Linetype +eval_unary(const struct ops *ops, int *valp, const char **cpp) +{ + const char *cp; + char *ep; + int sym; + bool defparen; + Linetype lt; + + cp = skipcomment(*cpp); + if (*cp == '!') { + debug("eval%d !", ops - eval_ops); + cp++; + lt = eval_unary(ops, valp, &cp); + if (lt == LT_ERROR) + return (LT_ERROR); + if (lt != LT_IF) { + *valp = !*valp; + lt = *valp ? LT_TRUE : LT_FALSE; + } + } else if (*cp == '(') { + cp++; + debug("eval%d (", ops - eval_ops); + lt = eval_table(eval_ops, valp, &cp); + if (lt == LT_ERROR) + return (LT_ERROR); + cp = skipcomment(cp); + if (*cp++ != ')') + return (LT_ERROR); + } else if (isdigit((unsigned char)*cp)) { + debug("eval%d number", ops - eval_ops); + *valp = strtol(cp, &ep, 0); + if (ep == cp) + return (LT_ERROR); + lt = *valp ? LT_TRUE : LT_FALSE; + cp = skipsym(cp); + } else if (strncmp(cp, "defined", 7) == 0 && endsym(cp[7])) { + cp = skipcomment(cp+7); + debug("eval%d defined", ops - eval_ops); + if (*cp == '(') { + cp = skipcomment(cp+1); + defparen = true; + } else { + defparen = false; + } + sym = findsym(cp); + if (sym < 0) { + lt = LT_IF; + } else { + *valp = (value[sym] != NULL); + lt = *valp ? LT_TRUE : LT_FALSE; + } + cp = skipsym(cp); + cp = skipcomment(cp); + if (defparen && *cp++ != ')') + return (LT_ERROR); + constexpr = false; + } else if (!endsym(*cp)) { + debug("eval%d symbol", ops - eval_ops); + sym = findsym(cp); + cp = skipsym(cp); + if (sym < 0) { + lt = LT_IF; + cp = skipargs(cp); + } else if (value[sym] == NULL) { + *valp = 0; + lt = LT_FALSE; + } else { + *valp = strtol(value[sym], &ep, 0); + if (*ep != '\0' || ep == value[sym]) + return (LT_ERROR); + lt = *valp ? LT_TRUE : LT_FALSE; + cp = skipargs(cp); + } + constexpr = false; + } else { + debug("eval%d bad expr", ops - eval_ops); + return (LT_ERROR); + } + + *cpp = cp; + debug("eval%d = %d", ops - eval_ops, *valp); + return (lt); +} + +/* + * Table-driven evaluation of binary operators. + */ +static Linetype +eval_table(const struct ops *ops, int *valp, const char **cpp) +{ + const struct op *op; + const char *cp; + int val; + Linetype lt, rt; + + debug("eval%d", ops - eval_ops); + cp = *cpp; + lt = ops->inner(ops+1, valp, &cp); + if (lt == LT_ERROR) + return (LT_ERROR); + for (;;) { + cp = skipcomment(cp); + for (op = ops->op; op->str != NULL; op++) + if (strncmp(cp, op->str, strlen(op->str)) == 0) + break; + if (op->str == NULL) + break; + cp += strlen(op->str); + debug("eval%d %s", ops - eval_ops, op->str); + rt = ops->inner(ops+1, &val, &cp); + if (rt == LT_ERROR) + return (LT_ERROR); + lt = op->fn(valp, lt, *valp, rt, val); + } + + *cpp = cp; + debug("eval%d = %d", ops - eval_ops, *valp); + debug("eval%d lt = %s", ops - eval_ops, linetype_name[lt]); + return (lt); +} + +/* + * Evaluate the expression on a #if or #elif line. If we can work out + * the result we return LT_TRUE or LT_FALSE accordingly, otherwise we + * return just a generic LT_IF. + */ +static Linetype +ifeval(const char **cpp) +{ + int ret; + int val = 0; + + debug("eval %s", *cpp); + constexpr = killconsts ? false : true; + ret = eval_table(eval_ops, &val, cpp); + debug("eval = %d", val); + return (constexpr ? LT_IF : ret == LT_ERROR ? LT_IF : ret); +} + +/* + * Skip over comments, strings, and character literals and stop at the + * next character position that is not whitespace. Between calls we keep + * the comment state in the global variable incomment, and we also adjust + * the global variable linestate when we see a newline. + * XXX: doesn't cope with the buffer splitting inside a state transition. + */ +static const char * +skipcomment(const char *cp) +{ + if (text || ignoring[depth]) { + for (; isspace((unsigned char)*cp); cp++) + if (*cp == '\n') + linestate = LS_START; + return (cp); + } + while (*cp != '\0') + /* don't reset to LS_START after a line continuation */ + if (strncmp(cp, "\\\r\n", 3) == 0) + cp += 3; + else if (strncmp(cp, "\\\n", 2) == 0) + cp += 2; + else switch (incomment) { + case NO_COMMENT: + if (strncmp(cp, "/\\\r\n", 4) == 0) { + incomment = STARTING_COMMENT; + cp += 4; + } else if (strncmp(cp, "/\\\n", 3) == 0) { + incomment = STARTING_COMMENT; + cp += 3; + } else if (strncmp(cp, "/*", 2) == 0) { + incomment = C_COMMENT; + cp += 2; + } else if (strncmp(cp, "//", 2) == 0) { + incomment = CXX_COMMENT; + cp += 2; + } else if (strncmp(cp, "\'", 1) == 0) { + incomment = CHAR_LITERAL; + linestate = LS_DIRTY; + cp += 1; + } else if (strncmp(cp, "\"", 1) == 0) { + incomment = STRING_LITERAL; + linestate = LS_DIRTY; + cp += 1; + } else if (strncmp(cp, "\n", 1) == 0) { + linestate = LS_START; + cp += 1; + } else if (strchr(" \r\t", *cp) != NULL) { + cp += 1; + } else + return (cp); + continue; + case CXX_COMMENT: + if (strncmp(cp, "\n", 1) == 0) { + incomment = NO_COMMENT; + linestate = LS_START; + } + cp += 1; + continue; + case CHAR_LITERAL: + case STRING_LITERAL: + if ((incomment == CHAR_LITERAL && cp[0] == '\'') || + (incomment == STRING_LITERAL && cp[0] == '\"')) { + incomment = NO_COMMENT; + cp += 1; + } else if (cp[0] == '\\') { + if (cp[1] == '\0') + cp += 1; + else + cp += 2; + } else if (strncmp(cp, "\n", 1) == 0) { + if (incomment == CHAR_LITERAL) + error("unterminated char literal"); + else + error("unterminated string literal"); + } else + cp += 1; + continue; + case C_COMMENT: + if (strncmp(cp, "*\\\r\n", 4) == 0) { + incomment = FINISHING_COMMENT; + cp += 4; + } else if (strncmp(cp, "*\\\n", 3) == 0) { + incomment = FINISHING_COMMENT; + cp += 3; + } else if (strncmp(cp, "*/", 2) == 0) { + incomment = NO_COMMENT; + cp += 2; + } else + cp += 1; + continue; + case STARTING_COMMENT: + if (*cp == '*') { + incomment = C_COMMENT; + cp += 1; + } else if (*cp == '/') { + incomment = CXX_COMMENT; + cp += 1; + } else { + incomment = NO_COMMENT; + linestate = LS_DIRTY; + } + continue; + case FINISHING_COMMENT: + if (*cp == '/') { + incomment = NO_COMMENT; + cp += 1; + } else + incomment = C_COMMENT; + continue; + default: + abort(); /* bug */ + } + return (cp); +} + +/* + * Skip macro arguments. + */ +static const char * +skipargs(const char *cp) +{ + const char *ocp = cp; + int level = 0; + cp = skipcomment(cp); + if (*cp != '(') + return (cp); + do { + if (*cp == '(') + level++; + if (*cp == ')') + level--; + cp = skipcomment(cp+1); + } while (level != 0 && *cp != '\0'); + if (level == 0) + return (cp); + else + /* Rewind and re-detect the syntax error later. */ + return (ocp); +} + +/* + * Skip over an identifier. + */ +static const char * +skipsym(const char *cp) +{ + while (!endsym(*cp)) + ++cp; + return (cp); +} + +/* + * Look for the symbol in the symbol table. If it is found, we return + * the symbol table index, else we return -1. + */ +static int +findsym(const char *str) +{ + const char *cp; + int symind; + + cp = skipsym(str); + if (cp == str) + return (-1); + if (symlist) { + if (symdepth && firstsym) + printf("%s%3d", zerosyms ? "" : "\n", depth); + firstsym = zerosyms = false; + printf("%s%.*s%s", + symdepth ? " " : "", + (int)(cp-str), str, + symdepth ? "" : "\n"); + /* we don't care about the value of the symbol */ + return (0); + } + for (symind = 0; symind < nsyms; ++symind) { + if (strlcmp(symname[symind], str, cp-str) == 0) { + debug("findsym %s %s", symname[symind], + value[symind] ? value[symind] : ""); + return (symind); + } + } + return (-1); +} + +/* + * Add a symbol to the symbol table. + */ +static void +addsym(bool ignorethis, bool definethis, char *sym) +{ + int symind; + char *val; + + symind = findsym(sym); + if (symind < 0) { + if (nsyms >= MAXSYMS) + errx(2, "too many symbols"); + symind = nsyms++; + } + symname[symind] = sym; + ignore[symind] = ignorethis; + val = sym + (skipsym(sym) - sym); + if (definethis) { + if (*val == '=') { + value[symind] = val+1; + *val = '\0'; + } else if (*val == '\0') + value[symind] = "1"; + else + usage(); + } else { + if (*val != '\0') + usage(); + value[symind] = NULL; + } + debug("addsym %s=%s", symname[symind], + value[symind] ? value[symind] : "undef"); +} + +/* + * Compare s with n characters of t. + * The same as strncmp() except that it checks that s[n] == '\0'. + */ +static int +strlcmp(const char *s, const char *t, size_t n) +{ + while (n-- && *t != '\0') + if (*s != *t) + return ((unsigned char)*s - (unsigned char)*t); + else + ++s, ++t; + return ((unsigned char)*s); +} + +/* + * Diagnostics. + */ +static void +debug(const char *msg, ...) +{ + va_list ap; + + if (debugging) { + va_start(ap, msg); + vwarnx(msg, ap); + va_end(ap); + } +} + +static void +error(const char *msg) +{ + if (depth == 0) + warnx("%s: %d: %s", filename, linenum, msg); + else + warnx("%s: %d: %s (#if line %d depth %d)", + filename, linenum, msg, stifline[depth], depth); + closeout(); + errx(2, "output may be truncated"); +} diff --git a/unifdef.txt b/unifdef.txt new file mode 100644 index 0000000..f6b5973 --- /dev/null +++ b/unifdef.txt @@ -0,0 +1,180 @@ +UNIFDEF(1) Programmer's Manual UNIFDEF(1) + +NAME + unifdef, unifdefall -- remove preprocessor conditionals from code + +SYNOPSIS + unifdef [-bBcdeKknsStV] [-Ipath] [-Dsym[=val]] [-Usym] [-iDsym[=val]] + [-iUsym] ... [-o outfile] [infile] + unifdefall [-Ipath] ... file + +DESCRIPTION + The unifdef utility selectively processes conditional cpp(1) directives. + It removes from a file both the directives and any additional text that + they specify should be removed, while otherwise leaving the file alone. + + The unifdef utility acts on #if, #ifdef, #ifndef, #elif, #else, and + #endif lines. A directive is only processed if the symbols specified on + the command line are sufficient to allow unifdef to get a definite value + for its control expression. If the result is false, the directive and + the following lines under its control are removed. If the result is + true, only the directive is removed. An #ifdef or #ifndef directive is + passed through unchanged if its controlling symbol is not specified on + the command line. Any #if or #elif control expression that has an + unknown value or that unifdef cannot parse is passed through unchanged. + By default, unifdef ignores #if and #elif lines with constant expres- + sions; it can be told to process them by specifying the -k flag on the + command line. + + It understands a commonly-used subset of the expression syntax for #if + and #elif lines: integer constants, integer values of symbols defined on + the command line, the defined() operator, the operators !, <, >, <=, >=, + ==, !=, &&, ||, and parenthesized expressions. A kind of ``short + circuit'' evaluation is used for the && operator: if either operand is + definitely false then the result is false, even if the value of the other + operand is unknown. Similarly, if either operand of || is definitely + true then the result is true. + + In most cases, the unifdef utility does not distinguish between object- + like macros (without arguments) and function-like arguments (with argu- + ments). If a macro is not explicitly defined, or is defined with the -D + flag on the command-line, its arguments are ignored. If a macro is + explicitly undefined on the command line with the -U flag, it may not + have any arguments since this leads to a syntax error. + + The unifdef utility understands just enough about C to know when one of + the directives is inactive because it is inside a comment, or affected by + a backslash-continued line. It spots unusually-formatted preprocessor + directives and knows when the layout is too odd for it to handle. + + A script called unifdefall can be used to remove all conditional cpp(1) + directives from a file. It uses unifdef -s and cpp -dM to get lists of + all the controlling symbols and their definitions (or lack thereof), then + invokes unifdef with appropriate arguments to process the file. + +OPTIONS + -Dsym=val + Specify that a symbol is defined to a given value which is used + when evaluating #if and #elif control expressions. + + -Dsym Specify that a symbol is defined to the value 1. + + -Usym Specify that a symbol is undefined. If the same symbol appears + in more than one argument, the last occurrence dominates. + + -b Replace removed lines with blank lines instead of deleting them. + Mutually exclusive with the -B option. + + -B Compress blank lines around a deleted section. Mutually exclu- + sive with the -b option. + + -c If the -c flag is specified, then the operation of unifdef is + complemented, i.e., the lines that would have been removed or + blanked are retained and vice versa. + + -d Turn on printing of degugging messages. + + -e Because unifdef processes its input one line at a time, it cannot + remove preprocessor directives that span more than one line. The + most common example of this is a directive with a multi-line com- + ment hanging off its right hand end. By default, if unifdef has + to process such a directive, it will complain that the line is + too obfuscated. The -e option changes the behaviour so that, + where possible, such lines are left unprocessed instead of + reporting an error. + + -K Always treat the result of && and || operators as unknown if + either operand is unknown, instead of short-circuiting when + unknown operands can't affect the result. This option is for + compatibility with older versions of unifdef. + + -k Process #if and #elif lines with constant expressions. By + default, sections controlled by such lines are passed through + unchanged because they typically start ``#if 0'' and are used as + a kind of comment to sketch out future or past development. It + would be rude to strip them out, just as it would be for normal + comments. + + -n Add #line directives to the output following any deleted lines, + so that errors produced when compiling the output file correspond + to line numbers in the input file. + + -o outfile + Write output to the file outfile instead of the standard output. + If outfile is the same as the input file, the output is written + to a temporary file which is renamed into place when unifdef com- + pletes successfully. + + -s Instead of processing the input file as usual, this option causes + unifdef to produce a list of symbols that appear in expressions + that unifdef understands. It is useful in conjunction with the + -dM option of cpp(1) for creating unifdef command lines. + + -S Like the -s option, but the nesting depth of each symbol is also + printed. This is useful for working out the number of possible + combinations of interdependent defined/undefined symbols. + + -t Disables parsing for C comments and line continuations, which is + useful for plain text. + + -iDsym[=val] + -iUsym Ignore #ifdefs. If your C code uses #ifdefs to delimit non-C + lines, such as comments or code which is under construction, then + you must tell unifdef which symbols are used for that purpose so + that it will not try to parse comments and line continuations + inside those #ifdefs. You can specify ignored symbols with + -iDsym[=val] and -iUsym similar to -Dsym[=val] and -Usym above. + + -Ipath Specifies to unifdefall an additional place to look for #include + files. This option is ignored by unifdef for compatibility with + cpp(1) and to simplify the implementation of unifdefall. + + -V Print version details. + + The unifdef utility copies its output to stdout and will take its input + from stdin if no file argument is given. + + The unifdef utility works nicely with the -Dsym option of diff(1). + +EXIT STATUS + The unifdef utility exits 0 if the output is an exact copy of the input, + 1 if not, and 2 if in trouble. + +DIAGNOSTICS + Too many levels of nesting. + + Inappropriate #elif, #else or #endif. + + Obfuscated preprocessor control line. + + Premature EOF (with the line number of the most recent unterminated #if). + + EOF in comment. + +SEE ALSO + cpp(1), diff(1) + +HISTORY + The unifdef command appeared in 2.9BSD. ANSI C support was added in + FreeBSD 4.7. + +AUTHORS + The original implementation was written by Dave Yost . + Tony Finch rewrote it to support ANSI C. + +BUGS + Expression evaluation is very limited. + + Preprocessor control lines split across more than one physical line + (because of comments or backslash-newline) cannot be handled in every + situation. + + Trigraphs are not recognized. + + There is no support for symbols with different definitions at different + points in the source file. + + The text-mode and ignore functionality does not correspond to modern + cpp(1) behaviour. + + March 11, 2010 diff --git a/unifdefall.sh b/unifdefall.sh new file mode 100755 index 0000000..79e4dec --- /dev/null +++ b/unifdefall.sh @@ -0,0 +1,77 @@ +#!/bin/sh +# +# unifdefall: remove all the #if's from a source file +# +# Copyright (c) 2002 - 2010 Tony Finch +# Copyright (c) 2009 - 2010 Jonathan Nieder +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. + +set -e + +unifdef="$(dirname "$0")/unifdef" +if [ ! -e "$unifdef" ] +then + unifdef=unifdef +fi + +case "$@" in +"-d "*) echo DEBUGGING 1>&2 + debug=-d + shift +esac + +basename=$(basename "$0") +tmp=$(mktemp -d "${TMPDIR:-/tmp}/$basename.XXXXXXXXXX") || exit 2 +trap 'rm -r "$tmp" || exit 2' EXIT + +export LC_ALL=C + +# list of all controlling macros +"$unifdef" $debug -s "$@" | sort | uniq >"$tmp/ctrl" +# list of all macro definitions +cpp -dM "$@" | sort | sed 's/^#define //' >"$tmp/hashdefs" +# list of defined macro names +sed 's/[^A-Za-z0-9_].*$//' <"$tmp/hashdefs" >"$tmp/alldef" +# list of undefined and defined controlling macros +comm -23 "$tmp/ctrl" "$tmp/alldef" >"$tmp/undef" +comm -12 "$tmp/ctrl" "$tmp/alldef" >"$tmp/def" +# create a sed script that extracts the controlling macro definitions +# and converts them to unifdef command-line arguments +sed 's|.*|s/^&\\(([^)]*)\\)\\{0,1\\} /-D&=/p|' <"$tmp/def" >"$tmp/script" +# create the final unifdef command +{ echo "$unifdef" $debug -k '\' + # convert the controlling undefined macros to -U arguments + sed 's/.*/-U& \\/' <"$tmp/undef" + # convert the controlling defined macros to quoted -D arguments + sed -nf "$tmp/script" <"$tmp/hashdefs" | + sed "s/'/'\\\\''/g;s/.*/'&' \\\\/" + echo '"$@"' +} >"$tmp/cmd" +case $debug in +-d) for i in ctrl hashdefs alldef undef def script cmd + do echo ==== $i + cat "$tmp/$i" + done 1>&2 +esac +# run the command we just created +sh "$tmp/cmd" "$@" diff --git a/version.sh b/version.sh new file mode 100644 index 0000000..27ed991 --- /dev/null +++ b/version.sh @@ -0,0 +1,2 @@ +V="unifdef-2.3" +D="2010-03-12 16:27:30 +0000" -- 2.7.4