Implement utilbox as an equivalent to busybox

This commit is contained in:
Pierre Pronchery 2009-10-12 23:19:36 +00:00
parent 5db44191b0
commit d4eaaf189c
5 changed files with 996 additions and 0 deletions

38
tools/Makefile Normal file
View File

@ -0,0 +1,38 @@
TARGETS = utilbox
PREFIX = /usr/local
DESTDIR =
BINDIR = $(PREFIX)/bin
CC = cc
CPPFLAGSF=
CPPFLAGS=
CFLAGSF = -W
CFLAGS = -Wall -g -O2 -pedantic
RM = rm -f
LN = ln -f
MKDIR = mkdir -p
INSTALL = install
all: $(TARGETS)
utilbox_OBJS = utilbox.o
utilbox_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
utilbox_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)
utilbox: $(utilbox_OBJS) utils.c
$(CC) -o utilbox $(utilbox_OBJS) $(utilbox_LDFLAGS)
utilbox.o: utilbox.c
$(CC) $(utilbox_CFLAGS) -c utilbox.c
clean:
$(RM) $(utilbox_OBJS)
distclean: clean
$(RM) $(TARGETS)
install: all
uninstall:
.PHONY: all clean distclean install uninstall

9
tools/project.conf Normal file
View File

@ -0,0 +1,9 @@
targets=utilbox
cflags_force=-W
cflags=-Wall -g -O2 -pedantic
dist=Makefile,utils.sh,utils.c
[utilbox]
type=binary
sources=utilbox.c
depends=utils.c

109
tools/utilbox.c Normal file
View File

@ -0,0 +1,109 @@
/* $Id$ */
/* Copyright (c) 2009 Pierre Pronchery <khorben@defora.org> */
/* This file is part of DeforaOS Unix utils */
/* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <libgen.h>
/* utilbox */
/* private */
/* types */
typedef struct _Call
{
char const * name;
int (*call)(int argc, char * argv[]);
} Call;
/* variables */
#include "utils.c"
/* prototypes */
static int _error(char const * message, int ret);
static int _list(Call * calls);
static int _usage(void);
/* functions */
/* error */
static int _error(char const * message, int ret)
{
fputs("utilbox: ", stderr);
perror(message);
return ret;
}
/* list */
static int _list(Call * calls)
{
size_t i;
for(i = 0; calls[i].name != NULL; i++)
printf("%s\n", calls[i].name);
return 0;
}
/* usage */
static int _usage(void)
{
fputs("Usage: utilbox program [arguments...]\n"
" utilbox -l\n"
" -l List available programs\n", stderr);
return 1;
}
/* public */
/* functions */
/* main */
int main(int argc, char * argv[])
{
char * p;
char const * q;
size_t i;
int o;
if((p = strdup(argv[0])) == NULL)
return _error(NULL, 2);
q = basename(p);
for(i = 0; _calls[i].name != NULL; i++)
if(strcmp(_calls[i].name, q) == 0)
{
free(p);
return _calls[i].call(argc, argv);
}
free(p);
while((o = getopt(argc, argv, "l")) != -1)
switch(o)
{
case 'l':
return _list(_calls);
default:
return _usage();
}
if(optind == argc)
return _usage();
for(i = 0; _calls[i].name != NULL; i++)
if(strcmp(_calls[i].name, argv[optind]) == 0)
return _calls[i].call(argc - optind, &argv[optind]);
return 0;
}

759
tools/utils.c Normal file
View File

@ -0,0 +1,759 @@
/* $Id$ */
/* Copyright (c) 2009 Pierre Pronchery <khorben@defora.org> */
/* This file is part of DeforaOS Unix utils */
/* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* basename.c */
#define main _basename_main
#define _usage _basename_usage
#define _Prefs _basename_Prefs
#define Prefs basename_Prefs
#define _prefs_parse _basename_prefs_parse
#define _basename __basename
#include "../src/basename.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _basename
/* cat.c */
#define main _cat_main
#define _usage _cat_usage
#define _Prefs _cat_Prefs
#define Prefs cat_Prefs
#define _prefs_parse _cat_prefs_parse
#define _cat __cat
#include "../src/cat.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _cat
/* chgrp.c */
#define main _chgrp_main
#define _usage _chgrp_usage
#define _Prefs _chgrp_Prefs
#define Prefs chgrp_Prefs
#define _prefs_parse _chgrp_prefs_parse
#define _chgrp __chgrp
#include "../src/chgrp.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _chgrp
/* chmod.c */
#define main _chmod_main
#define _usage _chmod_usage
#define _Prefs _chmod_Prefs
#define Prefs chmod_Prefs
#define _prefs_parse _chmod_prefs_parse
#define _chmod __chmod
#include "../src/chmod.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _chmod
/* chown.c */
#define main _chown_main
#define _usage _chown_usage
#define _Prefs _chown_Prefs
#define Prefs chown_Prefs
#define _prefs_parse _chown_prefs_parse
#define _chown __chown
#include "../src/chown.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _chown
/* cksum.c */
#define main _cksum_main
#define _usage _cksum_usage
#define _Prefs _cksum_Prefs
#define Prefs cksum_Prefs
#define _prefs_parse _cksum_prefs_parse
#define _cksum __cksum
#include "../src/cksum.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _cksum
/* cmp.c */
#define main _cmp_main
#define _usage _cmp_usage
#define _Prefs _cmp_Prefs
#define Prefs cmp_Prefs
#define _prefs_parse _cmp_prefs_parse
#define _cmp __cmp
#include "../src/cmp.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _cmp
/* cp.c */
#define main _cp_main
#define _usage _cp_usage
#define _Prefs _cp_Prefs
#define Prefs cp_Prefs
#define _prefs_parse _cp_prefs_parse
#define _cp __cp
#include "../src/cp.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _cp
/* df.c */
#define main _df_main
#define _usage _df_usage
#define _Prefs _df_Prefs
#define Prefs df_Prefs
#define _prefs_parse _df_prefs_parse
#define _df __df
#include "../src/df.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _df
/* dirname.c */
#define main _dirname_main
#define _usage _dirname_usage
#define _Prefs _dirname_Prefs
#define Prefs dirname_Prefs
#define _prefs_parse _dirname_prefs_parse
#define _dirname __dirname
#include "../src/dirname.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _dirname
/* du.c */
#define main _du_main
#define _usage _du_usage
#define _Prefs _du_Prefs
#define Prefs du_Prefs
#define _prefs_parse _du_prefs_parse
#define _du __du
#include "../src/du.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _du
/* echo.c */
#define main _echo_main
#define _usage _echo_usage
#define _Prefs _echo_Prefs
#define Prefs echo_Prefs
#define _prefs_parse _echo_prefs_parse
#define _echo __echo
#include "../src/echo.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _echo
/* false.c */
#define main _false_main
#define _usage _false_usage
#define _Prefs _false_Prefs
#define Prefs false_Prefs
#define _prefs_parse _false_prefs_parse
#define _false __false
#include "../src/false.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _false
/* file.c */
#define main _file_main
#define _usage _file_usage
#define _Prefs _file_Prefs
#define Prefs file_Prefs
#define _prefs_parse _file_prefs_parse
#define _file __file
#include "../src/file.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _file
/* find.c */
#define main _find_main
#define _usage _find_usage
#define _Prefs _find_Prefs
#define Prefs find_Prefs
#define _prefs_parse _find_prefs_parse
#define _find __find
#include "../src/find.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _find
/* head.c */
#define main _head_main
#define _usage _head_usage
#define _Prefs _head_Prefs
#define Prefs head_Prefs
#define _prefs_parse _head_prefs_parse
#define _head __head
#include "../src/head.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _head
/* id.c */
#define main _id_main
#define _usage _id_usage
#define _Prefs _id_Prefs
#define Prefs id_Prefs
#define _prefs_parse _id_prefs_parse
#define _id __id
#include "../src/id.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _id
/* kill.c */
#define main _kill_main
#define _usage _kill_usage
#define _Prefs _kill_Prefs
#define Prefs kill_Prefs
#define _prefs_parse _kill_prefs_parse
#define _kill __kill
#include "../src/kill.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _kill
/* link.c */
#define main _link_main
#define _usage _link_usage
#define _Prefs _link_Prefs
#define Prefs link_Prefs
#define _prefs_parse _link_prefs_parse
#define _link __link
#include "../src/link.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _link
/* ln.c */
#define main _ln_main
#define _usage _ln_usage
#define _Prefs _ln_Prefs
#define Prefs ln_Prefs
#define _prefs_parse _ln_prefs_parse
#define _ln __ln
#include "../src/ln.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _ln
/* locale.c */
#define main _locale_main
#define _usage _locale_usage
#define _Prefs _locale_Prefs
#define Prefs locale_Prefs
#define _prefs_parse _locale_prefs_parse
#define _locale __locale
#include "../src/locale.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _locale
/* logname.c */
#define main _logname_main
#define _usage _logname_usage
#define _Prefs _logname_Prefs
#define Prefs logname_Prefs
#define _prefs_parse _logname_prefs_parse
#define _logname __logname
#include "../src/logname.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _logname
/* ls.c */
#define main _ls_main
#define _usage _ls_usage
#define _Prefs _ls_Prefs
#define Prefs ls_Prefs
#define _prefs_parse _ls_prefs_parse
#define _ls __ls
#include "../src/ls.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _ls
/* mkdir.c */
#define main _mkdir_main
#define _usage _mkdir_usage
#define _Prefs _mkdir_Prefs
#define Prefs mkdir_Prefs
#define _prefs_parse _mkdir_prefs_parse
#define _mkdir __mkdir
#include "../src/mkdir.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _mkdir
/* mkfifo.c */
#define main _mkfifo_main
#define _usage _mkfifo_usage
#define _Prefs _mkfifo_Prefs
#define Prefs mkfifo_Prefs
#define _prefs_parse _mkfifo_prefs_parse
#define _mkfifo __mkfifo
#include "../src/mkfifo.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _mkfifo
/* mv.c */
#define main _mv_main
#define _usage _mv_usage
#define _Prefs _mv_Prefs
#define Prefs mv_Prefs
#define _prefs_parse _mv_prefs_parse
#define _mv __mv
#include "../src/mv.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _mv
/* nice.c */
#define main _nice_main
#define _usage _nice_usage
#define _Prefs _nice_Prefs
#define Prefs nice_Prefs
#define _prefs_parse _nice_prefs_parse
#define _nice __nice
#include "../src/nice.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _nice
/* pr.c */
#define main _pr_main
#define _usage _pr_usage
#define _Prefs _pr_Prefs
#define Prefs pr_Prefs
#define _prefs_parse _pr_prefs_parse
#define _pr __pr
#include "../src/pr.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _pr
/* printf.c */
#define main _printf_main
#define _usage _printf_usage
#define _Prefs _printf_Prefs
#define Prefs printf_Prefs
#define _prefs_parse _printf_prefs_parse
#define _printf __printf
#include "../src/printf.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _printf
/* pwd.c */
#define main _pwd_main
#define _usage _pwd_usage
#define _Prefs _pwd_Prefs
#define Prefs pwd_Prefs
#define _prefs_parse _pwd_prefs_parse
#define _pwd __pwd
#include "../src/pwd.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _pwd
/* renice.c */
#define main _renice_main
#define _usage _renice_usage
#define _Prefs _renice_Prefs
#define Prefs renice_Prefs
#define _prefs_parse _renice_prefs_parse
#define _renice __renice
#include "../src/renice.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _renice
/* rm.c */
#define main _rm_main
#define _usage _rm_usage
#define _Prefs _rm_Prefs
#define Prefs rm_Prefs
#define _prefs_parse _rm_prefs_parse
#define _rm __rm
#include "../src/rm.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _rm
/* rmdir.c */
#define main _rmdir_main
#define _usage _rmdir_usage
#define _Prefs _rmdir_Prefs
#define Prefs rmdir_Prefs
#define _prefs_parse _rmdir_prefs_parse
#define _rmdir __rmdir
#include "../src/rmdir.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _rmdir
/* sleep.c */
#define main _sleep_main
#define _usage _sleep_usage
#define _Prefs _sleep_Prefs
#define Prefs sleep_Prefs
#define _prefs_parse _sleep_prefs_parse
#define _sleep __sleep
#include "../src/sleep.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _sleep
/* strings.c */
#define main _strings_main
#define _usage _strings_usage
#define _Prefs _strings_Prefs
#define Prefs strings_Prefs
#define _prefs_parse _strings_prefs_parse
#define _strings __strings
#include "../src/strings.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _strings
/* tail.c */
#define main _tail_main
#define _usage _tail_usage
#define _Prefs _tail_Prefs
#define Prefs tail_Prefs
#define _prefs_parse _tail_prefs_parse
#define _tail __tail
#include "../src/tail.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _tail
/* test.c */
#define main _test_main
#define _usage _test_usage
#define _Prefs _test_Prefs
#define Prefs test_Prefs
#define _prefs_parse _test_prefs_parse
#define _test __test
#include "../src/test.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _test
/* time.c */
#define main _time_main
#define _usage _time_usage
#define _Prefs _time_Prefs
#define Prefs time_Prefs
#define _prefs_parse _time_prefs_parse
#define _time __time
#include "../src/time.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _time
/* touch.c */
#define main _touch_main
#define _usage _touch_usage
#define _Prefs _touch_Prefs
#define Prefs touch_Prefs
#define _prefs_parse _touch_prefs_parse
#define _touch __touch
#include "../src/touch.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _touch
/* true.c */
#define main _true_main
#define _usage _true_usage
#define _Prefs _true_Prefs
#define Prefs true_Prefs
#define _prefs_parse _true_prefs_parse
#define _true __true
#include "../src/true.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _true
/* tty.c */
#define main _tty_main
#define _usage _tty_usage
#define _Prefs _tty_Prefs
#define Prefs tty_Prefs
#define _prefs_parse _tty_prefs_parse
#define _tty __tty
#include "../src/tty.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _tty
/* uname.c */
#define main _uname_main
#define _usage _uname_usage
#define _Prefs _uname_Prefs
#define Prefs uname_Prefs
#define _prefs_parse _uname_prefs_parse
#define _uname __uname
#include "../src/uname.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _uname
/* uniq.c */
#define main _uniq_main
#define _usage _uniq_usage
#define _Prefs _uniq_Prefs
#define Prefs uniq_Prefs
#define _prefs_parse _uniq_prefs_parse
#define _uniq __uniq
#include "../src/uniq.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _uniq
/* unlink.c */
#define main _unlink_main
#define _usage _unlink_usage
#define _Prefs _unlink_Prefs
#define Prefs unlink_Prefs
#define _prefs_parse _unlink_prefs_parse
#define _unlink __unlink
#include "../src/unlink.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _unlink
/* wc.c */
#define main _wc_main
#define _usage _wc_usage
#define _Prefs _wc_Prefs
#define Prefs wc_Prefs
#define _prefs_parse _wc_prefs_parse
#define _wc __wc
#include "../src/wc.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _wc
/* who.c */
#define main _who_main
#define _usage _who_usage
#define _Prefs _who_Prefs
#define Prefs who_Prefs
#define _prefs_parse _who_prefs_parse
#define _who __who
#include "../src/who.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _who
static Call _calls[] =
{
{ "basename", _basename_main },
{ "cat", _cat_main },
{ "chgrp", _chgrp_main },
{ "chmod", _chmod_main },
{ "chown", _chown_main },
{ "cksum", _cksum_main },
{ "cmp", _cmp_main },
{ "cp", _cp_main },
{ "df", _df_main },
{ "dirname", _dirname_main },
{ "du", _du_main },
{ "echo", _echo_main },
{ "false", _false_main },
{ "file", _file_main },
{ "find", _find_main },
{ "head", _head_main },
{ "id", _id_main },
{ "kill", _kill_main },
{ "link", _link_main },
{ "ln", _ln_main },
{ "locale", _locale_main },
{ "logname", _logname_main },
{ "ls", _ls_main },
{ "mkdir", _mkdir_main },
{ "mkfifo", _mkfifo_main },
{ "mv", _mv_main },
{ "nice", _nice_main },
{ "pr", _pr_main },
{ "printf", _printf_main },
{ "pwd", _pwd_main },
{ "renice", _renice_main },
{ "rm", _rm_main },
{ "rmdir", _rmdir_main },
{ "sleep", _sleep_main },
{ "strings", _strings_main },
{ "tail", _tail_main },
{ "test", _test_main },
{ "time", _time_main },
{ "touch", _touch_main },
{ "true", _true_main },
{ "tty", _tty_main },
{ "uname", _uname_main },
{ "uniq", _uniq_main },
{ "unlink", _unlink_main },
{ "wc", _wc_main },
{ "who", _who_main },
{ NULL, NULL }
};

81
tools/utils.sh Normal file
View File

@ -0,0 +1,81 @@
#!/bin/sh
#$Id$
#Copyright (c) 2009 Pierre Pronchery <khorben@defora.org>
#This file is part of DeforaOS Unix utils
#This program is free software: you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
#the Free Software Foundation, version 3 of the License.
#
#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#GNU General Public License for more details.
#
#You should have received a copy of the GNU General Public License
#along with this program. If not, see <http://www.gnu.org/licenses/>.
#functions
#includes
includes() {
BASENAME="$1"
PROGRAM="$2"
cat << EOF
/* $BASENAME */
#define main _${PROGRAM}_main
#define _usage _${PROGRAM}_usage
#define _Prefs _${PROGRAM}_Prefs
#define Prefs ${PROGRAM}_Prefs
#define _prefs_parse _${PROGRAM}_prefs_parse
#define _${PROGRAM} __${PROGRAM}
#include "../src/$BASENAME"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _${PROGRAM}
EOF
}
#main
cat > "utils.c" << EOF
/* \$Id\$ */
/* Copyright (c) 2009 Pierre Pronchery <khorben@defora.org> */
/* This file is part of DeforaOS Unix utils */
/* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. */
EOF
for i in ../src/*.c; do
BASENAME=`basename $i`
PROGRAM=${BASENAME%%.c}
#there is an exception
[ "$PROGRAM" = "common" ] && continue
includes "$BASENAME" "$PROGRAM"
CALLS="$CALLS
{ \"$PROGRAM\", _${PROGRAM}_main },"
done >> "utils.c"
cat >> "utils.c" << EOF
static Call _calls[] =
{
$CALLS
{ NULL, NULL }
};
EOF