Module: sip-router
Branch: master
Commit: 95dec431421ce9f809f3a15f4c6407fff2d401a7
URL:
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=95dec43…
Author: Daniel-Constantin Mierla <miconda(a)gmail.com>
Committer: Daniel-Constantin Mierla <miconda(a)gmail.com>
Date: Tue Jul 27 23:46:48 2010 +0200
core: new param -A to add cfg preprocesor directives
- defines can be specified from command line with option -A
- these defines are available from begining of parsing the config
- examples:
- '-A WITH_AUTH' is like having '#!define WITH_AUTH' at top of cfg
- '-A LISTENIP=127.0.0.1' is like '#!define LISTENIP=127.0.0.1'
---
cfg.lex | 6 ++----
main.c | 28 ++++++++++++++++++++++++++--
ppcfg.h | 3 +++
3 files changed, 31 insertions(+), 6 deletions(-)
diff --git a/cfg.lex b/cfg.lex
index 564cb56..804b9e6 100644
--- a/cfg.lex
+++ b/cfg.lex
@@ -166,8 +166,6 @@
struct sr_yy_fname *next;
} *sr_yy_fname_list = 0;
- static int pp_define(int len, const char * text);
- static int pp_define_set(int len, char * text);
static str *pp_define_get(int len, const char * text);
static int pp_ifdef_type(int pos);
static void pp_ifdef_var(int len, const char * text);
@@ -1614,7 +1612,7 @@ static int pp_lookup(int len, const char * text)
return -1;
}
-static int pp_define(int len, const char * text)
+int pp_define(int len, const char * text)
{
if (pp_num_defines == MAX_DEFINES) {
LOG(L_CRIT, "ERROR: too many defines -- adjust MAX_DEFINES\n");
@@ -1636,7 +1634,7 @@ static int pp_define(int len, const char * text)
return 0;
}
-static int pp_define_set(int len, char *text)
+int pp_define_set(int len, char *text)
{
if(len<=0) {
LOG(L_DBG, "no define value - ignoring\n");
diff --git a/main.c b/main.c
index 5b0c476..cc6f137 100644
--- a/main.c
+++ b/main.c
@@ -183,6 +183,7 @@
#include "basex.h" /* init */
#include "pvapi_init.h" /* init */
#include "pv_core.h" /* register core pvars */
+#include "ppcfg.h"
#ifdef DEBUG_DMALLOC
#include <dmalloc.h>
@@ -246,7 +247,8 @@ Options:\n\
-G file Create a pgid file\n\
-O nr Script optimization level (debugging option)\n\
-a mode Auto aliases mode: enable with yes or on,\n\
- disable with no or off\n"
+ disable with no or off\n\
+ -A define Add config pre-processor define (e.g., -A WITH_AUTH)\n"
#ifdef STATS
" -s file File to which statistics is dumped (disabled otherwise)\n"
#endif
@@ -1649,6 +1651,7 @@ int main(int argc, char** argv)
struct timeval tval;
fd_set fds;
int res;
+ char *p;
/*init*/
time(&up_since);
@@ -1667,7 +1670,7 @@ int main(int argc, char** argv)
"DBG_MSG_QA enabled, ser may exit abruptly\n");
#endif
- options= ":f:cm:dVhEb:l:L:n:vrRDTN:W:w:t:u:g:P:G:SQ:O:a:"
+ options= ":f:cm:dVhEb:l:L:n:vrRDTN:W:w:t:u:g:P:G:SQ:O:a:A:"
#ifdef STATS
"s:"
#endif
@@ -1749,6 +1752,26 @@ int main(int argc, char** argv)
/* user needed for possible shm. pre-init */
user=optarg;
break;
+ case 'A':
+ p = strchr(optarg, '=');
+ if(p) {
+ *p = '\0';
+ }
+ if(pp_define(strlen(optarg), optarg)<0) {
+ fprintf(stderr, "error at define param: -A %s\n",
+ optarg);
+ goto error;
+ }
+ if(p) {
+ *p = '=';
+ p++;
+ if(pp_define_set(strlen(p), p)<0) {
+ fprintf(stderr, "error at define value: -A %s\n",
+ optarg);
+ goto error;
+ }
+ }
+ break;
case 'b':
case 'l':
case 'n':
@@ -1864,6 +1887,7 @@ try_again:
case 'V':
case 'h':
case 'O':
+ case 'A':
break;
case 'E':
log_stderr=1; // use in both getopt switches
diff --git a/ppcfg.h b/ppcfg.h
index c8ff4fa..c3a01f4 100644
--- a/ppcfg.h
+++ b/ppcfg.h
@@ -25,6 +25,9 @@
int pp_subst_add(char *data);
int pp_subst_run(char **data);
+int pp_define(int len, const char * text);
+int pp_define_set(int len, char * text);
+
#endif /*_PPCFG_H_*/
/* vi: set ts=4 sw=4 tw=79:ai:cindent: */