[sr-dev] git:master: core: new param -A to add cfg preprocesor directives

Daniel-Constantin Mierla miconda at gmail.com
Tue Jul 27 23:53:57 CEST 2010


Module: sip-router
Branch: master
Commit: 95dec431421ce9f809f3a15f4c6407fff2d401a7
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=95dec431421ce9f809f3a15f4c6407fff2d401a7

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at 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: */




More information about the sr-dev mailing list