Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
SHTOOL-SCPP.TMP(1)	    GNU	Portable Shell Tool	    SHTOOL-SCPP.TMP(1)

       shtool scpp - GNU shtool	C source file pre-processor

       shtool scpp [-v|--verbose] [-p|--preserve] [-f|--filter filter]
       [-o|--output ofile] [-t|--template tfile] [-M|--mark mark] [-D|--define
       dname] [-C|--class cname] file [file ...]

       This command is an additional ANSI C source file	pre-processor for
       sharing cpp(1) code segments, internal variables	and internal
       functions. The intention	for this comes from writing libraries in ANSI
       C. Here a common	shared internal	header file is usually used for
       sharing information between the library source files.

       The operation is	to parse special constructs in files, generate a few
       things out of these constructs and insert them at position mark in
       tfile by	writing	the output to ofile. Additionally the files are	never
       touched or modified. Instead the	constructs are removed later by	the
       cpp(1) phase of the build process. The only prerequisite	is that	every
       file has	a ``"#include ""ofile"""'' at the top.

       This command provides the following features: First it avoids namespace
       pollution and reduces prototyping efforts for internal symbols by
       recognizing functions and variables which are defined with the storage
       class identifier	``cname''.  For	instance if cname is ``intern'', a
       function	``"intern void *foobar(int quux)"'' in one of the files	is
       translated into both a ``"#define foobar	__foobar"'' and	a ``"extern
       void *foobar(int	quux);"'' in ofile. Additionally a global ``"#define"
       cname "/**/"'' is also created in ofile to let the compiler silently
       ignore this additional storage class identifier.

       Second, the library source files	usually	want to	share "typedef"s,
       "#define"s, etc.	 over the source file boundaries. To achieve this one
       can either place	this stuff manually into tfile or use the second
       feature of scpp:	All code in files encapsulated with ``"#if "dname ...
       "#endif"'' is automatically copied to ofile. Additionally a global
       ``"#define" dname 0'' is	also created in	ofile to let the compiler
       silently	skip this parts	(because it was	already	found in the header).

       The following command line options are available.

       -v, --verbose
	   Display some	processing information.

       -p, --preserve
	   Preserves ofile independent of the generated	``#line'' lines. This
	   is useful for Makefiles if the real contents	of ofile will not
	   change, just	line numbers. Default is to overwrite.

       -f, --filter filter
	   Apply one or	more pre-processing sed(1) filter commands (usually of
	   type	``"s/.../.../"'') to each input	file before their input	is
	   parsed.  This option	can occur multiple times.

       -o, --output ofile
	   Output file name. Default is	"lib.h".

       -t, --template tfile
	   Template file name. Default is "".

       -M, --mark mark
	   Mark	to be replaced by generated constructs.	Default	is "%%MARK%%".

       -D, --define dname
	   FIXME. Default is "cpp".

       -C, --class cname
	   FIXME. Default is "intern".

	#   Makefile
	SRCS=foo_bar.c foo_quux.c
	     shtool scpp -o foo_p.h -t \
			 -M %%MARK%% -D	cpp -C intern $(SRCS)

	/* */
	#ifndef	FOO_P_H
	#define	FOO_P_H
	#endif /* FOO_P_H */

	/* foo_bar.c */
	#include "foo_p.h"
	#if cpp
	#define	OURS_INIT 4711
	intern int ours;
	static int myone = 0815;
	intern int bar(void)
	    ours += myone;

	/* foo_quux.c */
	#include "foo_p.h"
	int main(int argc, char	*argv[])
	    int	i;
	    ours = OURS_INIT
	    for	(i = 0;	i < 10;	i++) {
		printf("ours now %d\n",	ours);
	    return 0;

       The GNU shtool scpp command was originally written by Ralf S.
       Engelschall <> in 1999 for GNU shtool.  Its was
       prompted	by the need to have a pre-processing facility in the GNU pth

       shtool(1), cpp(1).

18-Jul-2008			 shtool	2.0.8		    SHTOOL-SCPP.TMP(1)


Want to link to this manual page? Use this URL:

home | help