{
const char * fmt = "m4_define( [[%s]], [[%s]])m4_dnl\n";
char * str;
- int len;
val = val?val:"";
str = (char*)flex_alloc(strlen(fmt) + strlen(def) + strlen(val) + 2);
buf_append(buf, &str, 1);
}
+/** Pushes "m4_undefine([[def]])m4_dnl" to end of buffer.
+ * @param buf A buffer as a list of strings.
+ * @param def The m4 symbol to undefine.
+ * @return buf
+ */
+struct Buf *buf_m4_undefine (struct Buf *buf, const char* def)
+{
+ const char * fmt = "m4_undefine( [[%s]])m4_dnl\n";
+ char * str;
+
+ str = (char*)flex_alloc(strlen(fmt) + strlen(def) + 2);
+
+ sprintf(str, fmt, def);
+ buf_append(buf, &str, 1);
+}
+
/* create buf with 0 elements, each of size elem_size. */
void buf_init (buf, elem_size)
struct Buf *buf;
PROTO ((struct Buf * buf, const char *str, const char *def));
extern struct Buf *buf_prints PROTO((struct Buf *buf, const char *fmt, const char* s));
extern struct Buf *buf_m4_define PROTO((struct Buf *buf, const char* def, const char* val));
+extern struct Buf *buf_m4_undefine PROTO((struct Buf *buf, const char* def));
extern struct Buf *buf_print_strings PROTO((struct Buf * buf, FILE* out));
/* a string buffer for #define's generated by user-options on cmd line. */
do{ \
if ( should_define ) \
buf_m4_define( &m4defs_buf, def, NULL);\
+ else \
+ buf_m4_undefine( &m4defs_buf, def);\
} while(0)
#define MARK_END_OF_PROLOG mark_prolog();