Provided by: icmake_7.21.01-1_amd64 bug

NAME

       icmbuild - A generic, easy configurable, program maintenance script

SYNOPSIS

       icmbuild mode

DESCRIPTION

       The  icmbuild  script is a generic script that can be used to do program maintenance using
       icmake(1).

       The script expects two files to be available in the directory where program maintenance is
       required, and the icmbuild script should be available in your path or it should be started
       as, e.g., ./icmbuild

       Icmbuild assumes that your sources exist in and below  a  directory  in  which  the  files
       icmconf  and  CLASSES  live.  The file CLASSES contains the names of all subdirectories in
       which class-specific sources are kept. The file icmconf in icmake(1)’s distribution offers
       an  example of the configuration parameters that are used for program maintenance. In this
       latter file it is assumed that C++ sources are maintained, but the icmbuild script is  not
       restricted to do maintenance for C++ programs.

       Icmbuild compiles all sources in each of the subdirectories named in the file CLASSES, and
       then compiles all sources  in  the  current  working  directory  (except  for  the  source
       containing main()).

       The  compiled  sources  result in object modules which are then kept in a library, against
       which the main-object module  is  linked.  It  is  also  possible  to  specify  additional
       libraries against which the program must be linked.

       Once  a library is constructed it is kept up to date by the script. Changing a source will
       result in replacing its former module by its new module in the library.

KICK-STARTING ICMBUILD

       Normally, icmbuild is installed and used as follows:

       o      Install icmbuild in your path;

       o      copy icmconf and CLASSES to your project’s base directory (i.e., the  directory  in
              which and where below the project’s sources are found);

       o      Modify the #defines in the file icmconf to taste;

       o      List the subdirectories containing sources in the file CLASSES

              Note  that the order of the classes mentioned in classes is relevant here.  It’s no
              problem to add new class (subdirectory) names, but reordering should be  prevented.
              If reordering is required, recompile the library, as the final object files contain
              class order-numbers.  These class-order numbers prevent  file-name  collisions  and
              thus prevent replacing file x.o from class A by file x.o from class B;

       o      Now simply run

                          icmbuild

              from  the project’s base directory and let the help-info tell you what your options
              are. See the next section for the modes of operation.

OPTIONS

       Icmbuild may be called with the following operational modes:

       o      clean
              clean up remnants of previous activities

       o      help
              provide help and exit (default when called without arguments)

       o      library
              build the library (static and optionally the dynamic library)

       o      program
              build the binary program

       o      program strip
              build the stripped binary program

       o      install <base> install the software in the locations defined in the  icmconf  file,
              optionally below the directory <base> The icmconf file may be given a line defining
              DEFCOM containing the default operational mode to use when none is specified. E.g.,

                  #define DEFCOM "program"

              constructs the program when the command `icmbuild’  is  entered.  DEFCOM  may  also
              contain combined options, like

                  #define DEFCOM "program strip"

              Note  that  DEFCOM  is ignored when an explicit operational mode is provided to the
              icmbuild script.

FILES

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

       o      /usr/share/icmake/icmconf Example of a icmbuild configuration file;

       o      /usr/share/icmake/CLASSES Example of a icmbuild CLASSES file.

EXAMPLES

       Here is an example of the configuration file icmconf for a  concrete  program,  using  the
       library libbobcat1 as an additional library:

           // Inspect the following #defines. Change them to taste. If you don’t
           // need a particular option, change its value into an empty string

           // For more information about this file: ’man 7 icmconf’

           // define any additional libraries the program may need:
       #define ADD_LIBRARIES       ""

           // define any additional paths (other than the standard paths) the
           // additional libraries are located in:
       #define ADD_LIBRARY_PATHS   ""

           // Uncomment to clear the screen just before starting the compilation
           // process
       //#define CLS

           // The compiler to use. Define CC instead if a C compiler should be used.
       #define CXX            "g++"
       //#define CC            "gcc"

           // The compiler options to use. Define CFLAGS instead if a C compiler is
           // used.
       #define CXXFLAGS        " --std=c++0x -Wall -g -O2"
       //#define CFLAGS        " -Wall -g -O2"

           // Options passed to the linker:
       #define LDFLAGS         ""

           // Uncomment to construct a library. Optionally use another name (don’t
           // use lib or an extension like .a)
       //#define LIBRARY           "modules"

           // The source containing main():
       #define MAIN                "main.cc"

           //  The extension of object modules:
       #define OBJ_EXT             ".o"

           // If a parser must be generated define the subdirectory containing the
           // parser’s specification file
       #define PARSER_DIR          ""

           // Specify additional grammar specification files using patterns
           // these files are (in)directly included by PARSSPEC. Specify patterns
           // relative to PARSER_DIR
       //#define PARSFILES           ""

           // Flags to provide PARSGEN with:
       #define PARSFLAGS           "-V"

           // What is the program generating a parser?
       #define PARSGEN             "bisonc++"

           // Name of the file generated by the parser generator containing the
           // parser function
       #define PARSOUT             "parse.cc"

           // What is the grammar specification file?
       #define PARSSPEC            "grammar"

           // Uncomment to relink the binary, even when no sources were changed
       //#define REFRESH

           // If a lexical scanner must be generated: the subdirectory containing
           // the scanner’s specification file.
       #define SCANNER_DIR         ""

           // Specify additional lexer specification files using patterns
           // these files are (in)directly included by SCANSPEC
       //#define SCANFILES            ""

           // Flags to provide SCANGEN with:
       #define SCANFLAGS           ""

           // What is the program generating the lexical scanner?
       #define SCANGEN             "flexc++"

           // Name of the file generated by the lexical scanner
       #define SCANOUT             "lex.cc"

           // Name of the lexical scanner specification file
       #define SCANSPEC            "lexer"

           // Uncomment to construct a shared library
       //#define SHARED

           // When creating a shared library:
           // Specify the names of any libraries and library paths that are required
           // by the shared library. E.g., if a library is found in /usr/lib/special
           // use "-L/usr/lib/special -lspecial" if the name of the library is
           // libspecial.so
           // The /lib and /usr/lib paths are usually predefined and need not be
           // specified
       #define SHAREDREQ           ""

           // The pattern locating sources in a directory:
       #define SOURCES             "*.cc"

           // Directory below this directory to contain temporary results
       #define TMP_DIR             "tmp"

           // Uncomment to use the ALL facility and a class dependency setup in the
           // CLASSES file. When a directory contains a file ALL (optionally rename
           // this filename by providing an alternative name) then all its sources
           // and all sources of all classes depending on it are also compiled.
           // Class dependencies are indicated by the class name (as the first
           // word on a line) optionally followed by additional class names, which
           // are the classes directly depending on the line’s first class name.
       //#define USE_ALL             "a"

           // should commands be echoed (ON) or not (OFF) ?
       #define USE_ECHO              ON

           //  Use the VERSION file
       #define USE_VERSION

           // #define DEFCOM "program" (or "library") may be added (by, e.g.,
           // icmstart)

SEE ALSO

       icmake(1), icmconf(7), icmstart(1), icmstart.rc(7)

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