bionic (1) icmbuild.1.gz

Provided by: icmake_9.02.06-1_amd64 bug

NAME

       icmbuild - A generic, C++/C program maintenance facility

SYNOPSIS

       icmbuild [-h] [-c] args

DESCRIPTION

       Icmbuild  is  a  small  C  program calling icmake(1) to do program maintenance as defined in the icmbuild
       script that’s (commonly) found in /usr/lib/icmake.

       Icmbuild’s actions are tailored through a configuration file (icmconf)  which  must  be  present  in  the
       directory  where  program  maintenance is requested. This file is automatically installed by icmstart(1).
       Refer to icmconf(7)’s man-page for details about this file.

       Icmbuild assumes that your sources exist in and below the current working directory. The file icmconf  in
       icmake(1)’s  distribution  provides  an  example of an icmconf file that can be used by icmbuild. In that
       example icmconf file it is assumed that C++ sources are maintained, but program maintenance for, e.g.,  C
       sources  can  easily  be  configured.  If  icmbuild is called, but icmconf is not available it displays a
       usage-summary after which icm() ends.

       Icmbuild() handles the maintenance for all sources in each  of  the  subdirectories  named  in  the  file
       CLASSES,  and  in addition the maintenance of all sources in the current working directory. `Maintenance’
       involves compiling all as yet uncompiled source  files,  recompilation  of  modified  source  files,  and
       optionally  library  maintenance  and  the  pre-compilation  of header files, which commonly results in a
       marked reduction of source compilation times.

       When source files are compiled object modules are produced which may be  stored  in  a  library,  against
       which  the  object  module  of  the  program’s  main  function  is linked. It is also possible to specify
       additional libraries against which the program must be linked.

       If a library is constructed it is kept up to date by icmbuild. When a source is successfully compiled its
       new  object  module  replaces the old one that is found in the library. At that point the separate object
       files are no longer required and are removed by icmbuild.

       Up to icmake version 9.01.00 icmbuild  was  installed  as  an  executable  icmake  script  in  (commonly)
       /usr/bin.  The  dependency  of  this  script  on  the  file  icmconf  made  it difficult to provide usage
       information if icmconf was absent. Since version 9.02.00 the icmbuild script has been moved to (commonly)
       /usr/lib/icmake, and icmbuild now is a little C program providing the usage information when necessary or
       requested, but otherwise executes icmake to process the icmbuild script.

KICK-STARTING ICMBUILD

       To use icmbuild do as follows:

       o      Install icmbuild in your path (icmake’s installation procedure should already have taken  care  of
              that);

       o      Copy  icmconf  (and probably a file CLASSES) to your project’s base directory (i.e., the directory
              in which and where below the project’s sources are found). Usually this  has  already  been  taken
              care of by the icmstart script;

       Next:

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

       o      Enter the names of subdirectories containing sources on separate lines in the file CLASSES

              Note  that  the  order  of  the  classes  mentioned  in  CLASSES  is  relevant  in  that new class
              (subdirectory) names can always be added at the end of the file CLASSES, but reordering the  lines
              in the CLASSES file should be avoided.

              If  reordering  is  necessary,  then first run the command icmbuild clean to remove all files that
              were thus far created by icmbuild. Recompilation is necessary as the names  of  the  object  files
              contain  class  order-numbers  for  identification.   These  class-order numbers prevent file-name
              collisions (e.g., two classes might use  a  file  data.cc)  and  because  of  the  number-prefixes
              replacement of a file x.o from class A by file x.o from class B is prevented;

       o      Start icmbuild.

       The next section covers icmbuild’s  modes of operation.

OPTIONS

       Icmbuild supports two options, at most one should be specified:

       o      -h:  Display a usage summary (also automatically shown when the current directory does not contain
              a file icmconf);

       o      -c: Clear the screen (using tput clear) before starting the maintenance process.

       Next (after optionally specifying -c) icmbuild can be provided with the following arguments:

       o      No arguments at all: if icmconf contains the line

                  #define DEFCOM "program"

              then this is quivalent to the command icmbuild program;
              if icmconf contains the line

                  #define DEFCOM "strip"

              then this is quivalent to the command icmbuild strip;
              if if icmconf contains the line

                  #define DEFCOM "library"

              then this is quivalent to the command icmbuild library.
              (these commands are further elaborated in this section.)  DEFCOM specifications are  ignored  when
              an explicit argument is passed to icmbuild.

       o      clean
              clean up remnants of previous actions;

       o      install program <path>
              install  the  constructed  program  in  the  specified  <path>  (to be used after issuing icmbuild
              program, see below). Example:

                  icmbuild install ~/bin/program

              This installs the constructed binary program in the user’s bin direcotry with the name program;

       o      install static <path>
              install the constructed static library in the specified path (to be used  after  issuing  icmbuild
              library, see below). Example:

                  icmbuild static /usr/lib/

              This   installs   the   constructed   static   library   (e.g.   libspecial.a)   in   /usr/lib  as
              /usr/lib/libspecial.a.

       o      install shared path install the constructed shared library in the specified path (to be used after
              issuing icmbuild library), when icmconf defines SHARED (cf. icmconf(7)). Example:

                  icmbuild shared /usr/lib/

              This  installs  the  constructed  binary  shared  library  (e.g.  libspecial.so)  in  /usr/lib  as
              /usr/lib/libspecial.so. In addition, the soft-links

                  libspecial.so -> libspecial.so.X
                  libspecial.so.X -> libspecial.so.X.Y.Y.Z

              are defined in /usr/lib, where X.Y.Z are the major, minor and subminor  versions  defined  in  the
              file VERSION.

       o      library
              do  library  maintenance  (builds  a  static  and  optionally (if icmconf defines SHARED) a shared
              (dynamic) library);

       o      program
              do program maintenance (builds a program from the sources in the  current  working  directory  and
              from the sources in the directories specified in the file CLASSES);

       o      program strip
              same as program, but the final program is stripped (using the linker’s -s option);

ICM-DEP

       Class  dependencies  are  handled  by  icmake’s  support program icm-dep. It can be called from icmake by
       passing it the option -d. All options and arguments following -d are forwared to icm-dep.

       The program icm-dep is automatically called by  icmbuild  to  handle  class  dependencies.  Consider  two
       classes  Options  and  Process. If Process uses Options and if precompiled header files are used, then in
       addition to Option’s header file, Process’s header must also  be  precompiled  if  Option’s  header  file
       changes.  Likewise,  if  Option’s  data organization is changed and Option defines inline members used by
       Process or Process defines an Option data member then, in addition to Option’s sources sources  Process’s
       sources must also be compiled. For the latter case icmconf uses the USE_ALL specification: if a `USE_ALL’
       file exists in a directory, then all sources of that directory are recompiled.

       The program icm_dep determines all such class dependencies, and will recompile class header files of  all
       classes  depending  on  classes  whose  header files must be recompiled. Furthermore, if a `USE_ALL’ file
       exists in a directory then  all  sources  of  classes  depending  on  that  directory’s  class  are  also
       recompiled.

       Icm-dep’s options are described in icmake(1)’s man-page.

       To  start  its  work,  icm_dep needs one command-line argument: go. Any other argument results in icm_dep
       performing a `dry run’: it will perform all its duties (and verbose messages are displayed as if  go  had
       been  specified),  but  no  files  (precompiled  headers or USE_ALL files) will be touched or removed. If
       neither options nor arguments are specified icm_dep writes its usage summary to the standard output.

       By default icmbuild calls icmake -d -V go: icm_dep is called to  perform  its  duties  and  to  show  its
       actions on the standard output stream. By specifying a #define ICM_DEP parameter in the icmconf file this
       default can be overruled (cf. icmconf(7)).

FILES

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

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

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

EXAMPLES

       Here is an example of the configuration file icmconf for a concrete  program,  using  facilities  of  the
       bobcat library:

           #define CLS
           #define LIBRARY             "modules"
           #define MAIN                "main.cc"
           #define SOURCES             "*.cc"
           #define OBJ_EXT             ".o"
           #define SHAREDREQ           ""
           #define TMP_DIR             "tmp"
           #define USE_ALL             "a"
           #define USE_ECHO              ON
           #define CXX                 "g++"
           #define CXXFLAGS            " --std=c++14 -Wall -O2 -pthread" " -fdiagnostics-color=never "
           #define IH                  ".ih"
           #define PRECOMP             "-x c++-header"
           #define REFRESH
           #define LDFLAGS             ""
           #define ADD_LIBRARIES       "bobcat"
           #define ADD_LIBRARY_PATHS   ""

           #define DEFCOM              "program"

SEE ALSO

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

BUGS

       None reported

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

AUTHOR

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