From d4eaaf189c97f007e1a71d0e737cd5ac5faaee86 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Mon, 12 Oct 2009 23:19:36 +0000 Subject: [PATCH] Implement utilbox as an equivalent to busybox --- tools/Makefile | 38 +++ tools/project.conf | 9 + tools/utilbox.c | 109 +++++++ tools/utils.c | 759 +++++++++++++++++++++++++++++++++++++++++++++ tools/utils.sh | 81 +++++ 5 files changed, 996 insertions(+) create mode 100644 tools/Makefile create mode 100644 tools/project.conf create mode 100644 tools/utilbox.c create mode 100644 tools/utils.c create mode 100644 tools/utils.sh diff --git a/tools/Makefile b/tools/Makefile new file mode 100644 index 0000000..4e2a002 --- /dev/null +++ b/tools/Makefile @@ -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 diff --git a/tools/project.conf b/tools/project.conf new file mode 100644 index 0000000..e852efa --- /dev/null +++ b/tools/project.conf @@ -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 diff --git a/tools/utilbox.c b/tools/utilbox.c new file mode 100644 index 0000000..24a1ea5 --- /dev/null +++ b/tools/utilbox.c @@ -0,0 +1,109 @@ +/* $Id$ */ +/* Copyright (c) 2009 Pierre Pronchery */ +/* 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 . */ + + + +#include +#include +#include +#include + + +/* 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; +} diff --git a/tools/utils.c b/tools/utils.c new file mode 100644 index 0000000..9ef4661 --- /dev/null +++ b/tools/utils.c @@ -0,0 +1,759 @@ +/* $Id$ */ +/* Copyright (c) 2009 Pierre Pronchery */ +/* 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 . */ + + + +/* 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 } +}; diff --git a/tools/utils.sh b/tools/utils.sh new file mode 100644 index 0000000..f7cc301 --- /dev/null +++ b/tools/utils.sh @@ -0,0 +1,81 @@ +#!/bin/sh +#$Id$ +#Copyright (c) 2009 Pierre Pronchery +#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 . + + + +#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 */ +/* 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 . */ + + +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