icmstart.rc(7)

NAME
icmstart.rc - The icmstart(1) resource file

DESCRIPTION

The icmstart.rc file specifies files to be installed by icmstart(1).

A default icmstart.rc is found in /etc/icmake/icmstart.rc, but if $HOME/.icmake/icmstart.rc exists then the latter file is used by icmstart(1). $HOME/.icmake/icmstart.rc in turn is overruled by specifying a -c option when invoking icmstart(1).

The default resource file contains the following specifications, preparing for the construction of a C++ program using icmbuild(1):
    CLASSES
    icmconf
    P  main.cc
    P  main.ih
    Pb usage.cc
    Pb version.cc
    P ? scanner
    P ? parser

The icmstart.rc file may contain:

o   empty lines, which are ignored;

o   lines beginning with a hash-character (#), also ignored;

o   an optional installation mode followed by a source-destination specification.

INSTALLATION MODE

An installation mode consists of a combination of:

o   either a P (don’t install with icmstart xxx library) or an L (don’t install with icmstart xxx program);

o   a D, indicating that the source must also be installed by default, i.e., if neither `program’ or `library’ was specified as second argument;

o   a b, indicating that the file must not be installed if the -b (basic installation) option was specified when calling icmstart;

o   Following the optional P, L, D, or b character a space delimited optional ? may be specified. If specified the installation of the file or directory must be confirmed by the user.

SOURCE-DESTINATION SPECIFICATIONS

The following source-destination specifications can be used in an icmstart.rc file (using skeletons below to refer to icmstart’s skeleton files directory):

o   source
    a file named source must exist in skeletons. It is installed in the destination directory `dest’ that’s specified when calling icmstart(1). Example:
        CLASSES

    skeletons/CLASSES is installed as dest/CLASSES;

o   pathspec
    if `pathspec’ does not begin with a slash it must exist in skeletons. It is installed as `pathspec’ in the destination directory specified when calling icmstart(1). Example:
        dir/file

    skeletons/file is installed as dest/dir/file;

o   /pathspec or ~/pathspec
    the ~-character is expanded to the user’s home directory. The pathspec’s final element is installed in the destination directory specified when calling icmstart(1). Example:
        ~/.icmake/file

    $HOME/.icmake/file is installed as dest/file

When the above source specifications are followed by a destination specification destspec (a file or non-absolute directory specification) then the source specification is installed as dest/destspec below the destination directory specified when calling icmstart(1). Examples:
    CLASSES CLASSES             # skeletons/CLASSES is installed as
                                #   dest/CLASSES
    dir/file dir/file           # skeletons/dir/file is installed as
                                #   dest/dir/file
    ~/.icmake/file .icmake/file # $HOME/.icmake/file is installed as
                                #   dest/.icmake/file

Icmstart converts destination specifications to absolute paths. If these absolute paths do not begin with dest’s absolute path then an error message is displayed and icmstart ends.

FINE-TUNING ICMCONF

The default icmconf file contains #defines which are used when a project uses a parser (by default generated by bisonc++(1)) and/or a scanner (by default generated by flexc++(1)). All those #defines are commented out in the default icmconf file. They are:
    #define PARSER_DIR          ""
    #define PARSGEN             "bisonc++"
    #define PARSFLAGS           "-V"
    #define PARSSPEC            "grammar"
    #define PARSFILES           ""
    #define PARSOUT             "parse.cc"

    #define SCANNER_DIR         ""
    #define SCANGEN             "flexc++"
    #define SCANFLAGS           ""
    #define SCANSPEC            "lexer"
    #define SCANFILES            ""
    #define SCANOUT             "lex.cc"

However, the icmstart.rc file can be modified so that these #defines are omitted from the project’s icmconf file unless a parser and/or scanner is actually used by the project. For this:

o   copy the files in /usr/share/icmake to ~/.icmake;

o   if the program uses a parser then define the file ~/.icmake/parser/icmconf containing
        #define PARSER_DIR          "parser"
        #define PARSGEN             "bisonc++"
        #define PARSFLAGS           "-V"
        #define PARSSPEC            "grammar"
        #define PARSFILES           ""
        #define PARSOUT             "parse.cc"

    (here `parser’ is the name of the directory containing the parser’s implementation; optionally another directory name can be specified);
    Remove the parser-defines from ~/.icmake/icmconf;
    In ~/.icmake/icmconf/icmstart.rc replace the parser-directory specification, like
        ? parser    parser

    by
        ? ~/.icmake/parser    parser

o   if the program uses a scanner then define the file ~/.icmake/scanner/icmconf containing
        #define SCANNER_DIR         "scanner"
        #define SCANGEN             "flexc++"
        #define SCANFLAGS           ""
        #define SCANSPEC            "lexer"
        #define SCANFILES            ""
        #define SCANOUT             "lex.cc"

    (here `scanner’ is the name of the directory containing the scanner’s implementation; optionally another directory name can be specified);n() Remove the scanner-defines from ~/.icmake/icmconf;
    In ~/.icmake/icmconf/icmstart.rc replace the scanner-directory specification, like
        ? scanner    scanner

    by
        ? ~/.icmake/scanner    scanner

In general: icmconf #defines can be redefined by removing them from ~/.icmake/icmconf, specifying their redefinitions in icmconf files in subdirectories of ~/.icmake/icmconf.

FILES
The mentioned paths are sugestive only and may be installation dependent:

o   /usr/share/icmake/icmconf: example of an icmbuild configuration file;

o   /usr/share/icmake/CLASSES: example of an icmbuild CLASSES file;

o   /usr/share/icmake/icmstart.rc: default skeleton resource file.

SEE ALSO
bisonc++(1), flexc++(1), icmake(1), icmbuild(1), icmconf(7), icmstart(1)

BUGS
None reported

COPYRIGHT
This is free software, distributed under the terms of the GNU General Public License (GPL).

AUTHOR
Frank B. Brokken (f.b.brokken@rug.nl).