icmstart.rc(7) icmstart resource file icmstart.rc(7)

# [NAME](#NAME)

icmstart.rc - The [icmstart(1)](/man/os/icmake/icmstart.1) resource file

# [DESCRIPTION](#DESCRIPTION)

The **icmstart.rc** file specifies files to be installed by [**icmstart**(1)](/man/os/icmake/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)](/man/os/icmake/icmstart.1). *$HOME/.icmake/icmstart.rc* in turn is overruled by specifying a *-c* option when invoking [**icmstart**(1)](/man/os/icmake/icmstart.1).

The default resource file contains the following specifications, preparing for the construction of a **C++** program using [**icmbuild**(1)](/man/os/icmake/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](#o)

empty lines, which are ignored;

[o](#o~2)

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

[o](#o~3)

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

# [INSTALLATION MODE](#INSTALLATION_MODE)

An installation mode consists of a combination of:

[o](#o~4)

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

[o](#o~5)

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](#o~6)

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

[o](#o~7)

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](#SOURCE)

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](#o~8)

*source*  
a file named *source* must exist in *skeletons*. It is installed in the destination directory *\`dest’* that’s specified when calling [**icmstart**(1)](/man/os/icmake/icmstart.1). Example:

```


    CLASSES     


 
```

*skeletons/CLASSES* is installed as *dest/CLASSES*;

[o](#o~9)

*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)](/man/os/icmake/icmstart.1). Example:

```


    dir/file


 
```

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

[o](#o~10)

*/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)](/man/os/icmake/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)](/man/os/icmake/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](#FINE)

The default *icmconf* file contains *#defines* which are used when a project uses a parser (by default generated by [**bisonc++**(1)](/man/os/icmake/bisonc++.1)) and/or a scanner (by default generated by [**flexc++**(1)](/man/os/icmake/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](#o~11)

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

[o](#o~12)

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](#o~13)

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](#FILES)

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

[o](#o~14)

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

[o](#o~15)

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

[o](#o~16)

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

# [SEE ALSO](#SEE_ALSO)

[**bisonc++**(1)](/man/os/icmake/bisonc++.1), [**flexc++**(1)](/man/os/icmake/flexc++.1), [**icmake**(1)](/man/os/icmake/icmake.1), [**icmbuild**(1)](/man/os/icmake/icmbuild.1), [**icmconf**(7)](/man/os/icmake/icmconf.7), [**icmstart**(1)](/man/os/icmake/icmstart.1)

# [BUGS](#BUGS)

None reported

# [COPYRIGHT](#COPYRIGHT)

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

# [AUTHOR](#AUTHOR)

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

1992-2026 icmake.13.06.01

---

Document: icmstart.rc(7) from icmake 13.06.01-r0 (Chainguard OS)
Source: https://gitlab.com/fbb-git/icmake.git
