File: icmake.doc

package info (click to toggle)
icmake 6.22-2
  • links: PTS
  • area: main
  • in suites: woody
  • size: 2,120 kB
  • ctags: 1,045
  • sloc: ansic: 9,241; makefile: 1,138; asm: 126; sh: 124
file content (175 lines) | stat: -rw-r--r-- 7,867 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
=============================================================================
                                ICMAKE
                  the Intelligent C-like MAKEr, or
                        the ICce MAKE utility

            Copyright (c) Frank B. Brokken and Karel Kubat
                 frank@icce.rug.nl, karel@icce.rug.nl

           ICCE, State University of Groningen, Netherlands
	   
         This document is part of distribution 6.20 of ICMAKE
=============================================================================


Introduction
------------

        Icmake is a hybrid between a 'make' utility and a 'shell script'
language.  Originally, it was concocted to provide a useful tool for
automatic program maintenance and system administrative tasks on MS-DOS
platforms.  As we learned to appreciate its flexibility, Icmake was
eventually ported to Unix platforms (SCO and Linux). By now Icmake also runs
on a HP-Unix platform.

        To give an impression of "what Icmake does", take a look at the
following makefile. It is used for automatic program maintenance, where it
is assumed that in some directory all files with the extension ".c" (C
source files) constitute a program "myprog". The automatic maintenance makes
sure that, once Icmake is invoked, C source files which are more recent
(newer) than a library file "libmyprog.a" are recompiled and placed in the
library. A new program is then made and installed in a directory
"/home/user/bin".

void main ()
{
    list
        cfiles;                                 // list of .c files
    int
        i;                                      // counter variable
    string
        sourcefile;                             // string with name of
                                                // 1 source file

    cfiles = makelist ("*.c", younger,          // cfiles is now a list of
        "libmyprog.a");                         // all files to recompile

    if (cfiles)                                 // if there are any files..
        for (i = 0; i < sizeof (cfiles),        // recompile them
             i++)
        {
            sourcefile = element (i, cfiles);   // get the name from the list
            exec ("gcc", "-c -Wall", sourcefile); // recompile
        }

    if (makelist ("*.o"))                       // any "*.o" files here?
    {
        exec ("ar", "rvs", "libmyprog.a", "*.o");  // add to library
        exec ("rm", "*.o");                        // remove them
        exec ("gcc", "-o myprog", "libmyprog.a");  // re-link program
        exec ("mv", "myprog", "/home/user/bin");   // and install in bin dir
    }
}

        The source files for Icmake look remarkably like C sourcefiles. The
resemblance is so close that this cannot be pure chance!  Yes, we have
implemented Icmake to be a language with a syntax which largely overlaps C.
Since we know how to program in C, we decided that we didn't want to learn
some new macro language.  The Icmake language is a "subset" of C in the
sence that not all operators or functions of C are implemented (but a good
deal are, e.g., gets(), getch(), printf(), etc.).  The Icmake language has
its own extensions to make it a handy language for the purpose of
maintenance: e.g., the operator "younger" compares two files in respect to
their date of last modification, a type "list" is defined to hold several
strings.

        The usage of Icmake is not restricted to program maintenance. The
setup, which allows for functions, arguments, local or global variables, the
calling of external programs, etc.  makes Icmake also extremely suitable as
a shell script language.  E.g., it is easy to accomplish to let Icmake
figure out which files need to be backupped since the last backup date and
to start a process to do so, to send mail about it etc.

        This guide provides a short description how Icmake can be ported to
new platforms.  The documentation for the usage of Icmake, including a
description of the grammar and of all built-in functions, comes with the
distribution files.


Installing Icmake
-----------------

The icmake-X.YY.tgz contains all source files and installation information
if you want to install icmake from scratch. You *need* this file if you
want to install icmake on systems not running Linux or Ms-DOS.

The icmake-X.YY.bin.tgz contains linux and ms-dos executables. If you only
want to use the icmake programs, you can get this file, unpack it and start
using icmake.

See the file INSTALL for details. INSTALL is in icmake-X.YY.tgz, 
containing all other files necessary for installing icmake. 

To unpack the archives use (GNU-tar 1.11.2):
        
	        tar xzvf icmake-X.YY.tgz
and/or:		
	        tar xzvf icmake-X.YY.bin.tgz

which unpacks into an 'icmake' subdirectory below the current subdirectory.
Also, separate gzip and tar steps could be used, as in:

                gzip -c -d icmake-X.YY.tgz | tar xvf -
and/or:		
                gzip -c -d icmake-X.YY.bin.tgz | tar xvf -
		
The Documentation
-----------------

        Icmake is documented in a Postscript file, "icmake.ps", located in
the directory "doc".  This file is generated from a .dvi file using dvips,
and can be processed with GhostScript.  Note that the file is generated for
a printer resolution of 300 dpi, which suits a LaserJet family printer.  If
your site lacks the means to print this file, you can mail us at the address
below to obtain a printed copy of the documentation.  (However, we will
charge you a small amount to cover our costs).

        The directory "doc" furthermore contains the file "icmake.1". This
is a crude "man" page for Unix systems.  You can install it by copying it to
a directory which contains formatted manual pages.  To use this feature,
your "man" command must be able to show an already-formatted manual entry.
E.g., on Linux systems you can copy this file to "/usr/man/cat1".  Typing
"man icmake" will then show the information.  Some man systems also support
compressed manual pages.  On these systems you may achieve a lower disk
usage by compressing the file "icmake.1" to "icmake.1.Z", using the Unix
program "compress".

        A few makefiles are provided as examples in the directory
"examples". You may wish to look at these to see how makefiles can be
organized.

Some Legal Stuff
----------------

        You don't have to pay us for Icmake. This means that no fee is
charged for it by us.  As with everything that's free, there's no pay but
also *absolutely no warranty*.  Furthermore, you are allowed (and
encouraged) to distribute Icmake, provided that you include this information
with each distribution.  It is strongly suggested that you do *not* charge
money for the distribution of Icmake (possibly not even the $5 for
shipping).

        The source files and the documentation for Icmake are copyrighted by
us.  The reason for this is (a) that we'd like to have always the last
version of Icmake, and (b) that we'd like to have the last word in all
modifications.  If you have requests (or even better, "working code" to
include in Icmake) please mail us and we'll gladly oblige when we find the
time.


Requests, Bug Reports, etc.
---------------------------

        We'd very much appreciate it if you'd let us know if you encounter any 
bugs. Also, if you have requests or comments about the programs or the 
documentation, mail us. We can be reached at:

                Frank Brokken                   Karel Kubat
e-mail:         F.B.Brokken@icce.rug.nl         K.Kubat@icce.rug.nl
phone:          (+31) 50 63 36 88               (+31) 50 63 36 47
address:        Westerhaven 16                  Westerhaven 16
                Groningen                       Groningen
                Netherlands                     Netherlands

-----------------------------------------------------------------------------
(end of icmake.doc)