Loading
Home ›
ICMAKE Part 4
Aug 01, 1994 By Frank B. Brokken and K. Kubat
in
In part 1, Brokken and Kubat explained where the ideas for icmake came from, the basics of the program and where you can get a copy. In Parts 2 and 3 we covered the grammar of icmake source files. In this final part of the article we show examples of the use of icmake.
Three examples will be given in this final section, completing our discussion of icmake. The first example illustrates a `traditional make script', used with icmake. The example was taken from the `callback utility', developed by Karel (and also available from beatrix.icce.rug.bl). The second example is a simple dos2unix script which may be used to convert DOS textfiles to Unix textfiles: it uses awk to do the hard work. Finally, the attic-move script is presented, implementing a non-destructive remove, by moving files into an `attic.zip'. More examples can be found in the icmake distribution tar.gz file. The examples are annotated by their own comment, and are presented as they are currently used.
#!/usr/local/bin/icmake -qi
#define CC "gcc"
#define CFLAGS "-c -Wall"
#define STRIP "strip"
#define AR "ar"
#define ARREPLACE "rvs"
#define DEBUG ""
#define CALLBACKDIR "/conf/callback"
#define BINDIR "/usr/local/bin"
#define VER "1.05v
int compdir (string dir)
{
int
i,
ret;
list
ofiles,
cfiles;
string
hfile,
curdir,
cfile,
ofile,
libfile;
curdir = chdir (".");
libfile = "lib" + dir + ".a";
hfile = dir + ".h";
chdir (dir);
if (hfile younger libfile)
cfiles = makelist ("*.c");
else
cfiles = makelist ("*.c", younger, libfile);
for (i = 0; i < sizeof (cfiles); i++)
{
cfile = element (i, cfiles);
ofile = change_ext (cfile, ".o");
if (! exists (ofile) || ofile older cfile)
exec (CC, DEBUG, CFLAGS, cfile);
}
if (ofiles = makelist ("*.o"))
{
exec (AR, ARREPLACE, libfile, "*.o");
exec ("rm", "*.o");
ret = 1;
}
chdir (curdir);
return (ret);
}
void linkprog (string dir)
{
chdir (dir);
exec (CC, DEBUG, "-o", dir, "-l" + dir, "-lrss", "-L. -L../rss");
chdir ("..");
}
void buildprogs ()
{
int
cblogin,
cbstat,
rss;
chdir ("src");
cblogin = compdir ("cblogin");
cbstat = compdir ("cbstat");
rss = compdir ("rss");
if (cblogin || rss)
linkprog ("cblogin");
if (cbstat || rss)
linkprog ("cbstat");
chdir ("..");
}
void instprog (string prog, string destdir)
{
chdir ("src/" + prog);
exec (STRIP, prog);
exec ("chmod", "700", prog);
exec ("cp", prog, destdir);
chdir ("../..");
}
void install ()
{
buildprogs ();
instprog ("cblogin", CALLBACKDIR);
instprog ("cbstat", BINDIR);
}
void cleandir (string dir)
{
chdir ("src/" + dir);
exec ("rm", "-f", "*.o lib*.a", dir);
chdir ("../..");
}
void clean ()
{
exec ("rm", "-f", "build.bim");
cleandir ("cblogin");
cleandir ("cbstat");
cleandir ("rss");
}
void makedist ()
{
list
examples;
int
i;
clean ();
chdir ("examples");
examples = makelist ("*");
for (i = 0; i < sizeof (examples); i++)
if (exists ("/conf/callback/" + element (i, examples)) &&
"/conf/callback/" + element (i, examples) younger
element (i, examples))
exec ("cp", "/conf/callback/" + element (i, examples),
element (i, examples));
chdir ("..");
exec ("rm", "-f", "callback-" + VER + ".tar*");
exec ("tar", "cvf", "callback-" + VER + ".tar", "*");
exec ("gzip", "callback-" + VER + ".tar");
exec ("mv", "callback-" + VER + ".tar.z",
"callback-" + VER + ".tar.gz");
}
void main (int argc, list argv)
{
if (element (1, argv) == "progs")
buildprogs ();
else if (element (1, argv) == "install")
install ();
else if (element (1, argv) == "clean")
clean ();
else if (element (1, argv) == "dist")
makedist ();
else
{
printf ("\n"
"Usage: build progs - builds programs\n"
" build install - installs program\n"
" build clean - cleanup .o files etc.\n"
"\n"
" build dist - makes .tar.gz distrib file\n"
"\n");
exit (1);
}
exit (0);
}
#!/usr/local/bin/icmake -qi
/*
DOS2UNIX
This script is used to change dos textfiles into unix textfiles.
*/
string
pidfile;
void usage(string prog)
{
prog = change_ext(get_base(prog), ""); // keep the scriptname
printf("\n"
"ICCE ", prog,
": Dos to Unix textfile conversion. Version 1.00\n"
"Copyright (c) ICCE 1993, 1994. All rights reserved\n"
"\n",
prog, " by Frank B. Brokken\n"
"\n"
"Usage: ", prog, " file(s)\n" // give help
"Where:\n"
"file(s): MS-DOS textfiles to convert to UNIX textfiles\n"
"\n");
exit (1); // and exit
}
void dos2unix(string file)
{
if (!exists(file))
printf("'", file, "' does not exist: skipped\n");
else
{
printf("converting: ", file, "\n");
exec("/bin/mv", file, pidfile);
system("/usr/bin/awk 'BEGIN {FS=\"\\r\"}; {print $1}' " +
pidfile + " > " + file);
}
}
void process(list argv)
{
int
i;
// make general scratchname
pidfile = "/tmp/dos2unix." + (string)getpid();
echo(OFF); // no echoing of exec-ed progs
for (i = 1; i < sizeof(argv); i++)
dos2unix(element(i, argv)); // convert dos 2 unix
if (exists(pidfile))
exec("/bin/rm", pidfile); // remove final junk
}
int main(int argc, list argv)
{
if (argc == 1)
usage(element(0, argv));
process(argv); // process all arguments
return (0); // return when ready
}
______________________
Trending Topics
| Make TV Awesome with Bluecop | May 16, 2012 |
| Hack and / - Password Cracking with GPUs, Part I: the Setup | May 15, 2012 |
| An Introduction to Application Development with Catalyst and Perl | May 14, 2012 |
| Cryptocurrency: Your Total Cost Is 01001010010 | May 09, 2012 |
| HTML5 for Audio Applications | May 07, 2012 |
| May 2012 Issue of Linux Journal: Programming | May 02, 2012 |
- Hack and / - Password Cracking with GPUs, Part I: the Setup
- An Introduction to Application Development with Catalyst and Perl
- Validate an E-Mail Address with PHP, the Right Way
- Make TV Awesome with Bluecop
- Monitoring Hard Disks with SMART
- Which one is the Best Free and Paid PDF editor for Mac
- Readers' Choice Awards 2011
- Examining Load Average
- Bash Regular Expressions
- Building an Ultra-Low-Power File Server with the Trim-Slice






2 hours 54 min ago
8 hours 31 min ago
11 hours 53 min ago
19 hours 40 min ago
1 day 8 hours ago
1 day 11 hours ago
1 day 17 hours ago
1 day 17 hours ago
1 day 19 hours ago
1 day 19 hours ago