GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages


Manual Reference Pages  -  SHTOOL-SCPP (1)

.ds Aq ’

NAME

shtool scpp - GNU shtool C source file pre-processor

CONTENTS

SYNOPSIS

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 ...]

DESCRIPTION

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 typedefs, #defines, 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).

OPTIONS

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 lib.h.in.
-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.

EXAMPLE



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

 /* foo_p.h.in */
 #ifndef FOO_P_H
 #define FOO_P_H
 %%MARK%%
 #endif /* FOO_P_H */

 /* foo_bar.c */
 #include "foo_p.h"
 #if cpp
 #define OURS_INIT 4711
 #endif
 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++) {
         bar();
         printf("ours now %d\n", ours);
     }
     return 0;
 }



HISTORY

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

SEE ALSO

shtool(1), cpp(1).
Search for    or go to Top of page |  Section 1 |  Main Index


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

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with manServer 1.07.