Author: marvin
Date: Fri Jun 15 15:54:48 2012
New Revision: 1350667
URL: http://svn.apache.org/viewvc?rev=1350667&view=rev
Log:
Factor ConfWriterC out of ConfWriter.
Move all code which is specific to writing the C header config format
into ConfWriterC, transforming ConfWriter into a generic dispatcher.
Added:
lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriterC.c
- copied, changed from r1350647,
lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriter.c
lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriterC.h
- copied, changed from r1350647,
lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriter.h
Modified:
lucy/trunk/charmonizer/buildbin/meld.pl
lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriter.c
Modified: lucy/trunk/charmonizer/buildbin/meld.pl
URL:
http://svn.apache.org/viewvc/lucy/trunk/charmonizer/buildbin/meld.pl?rev=1350667&r1=1350666&r2=1350667&view=diff
==============================================================================
--- lucy/trunk/charmonizer/buildbin/meld.pl (original)
+++ lucy/trunk/charmonizer/buildbin/meld.pl Fri Jun 15 15:54:48 2012
@@ -61,8 +61,17 @@ if ( !@probes ) {
@probes = map { $_ =~ s/\.c$//; $_ } grep {/\.c$/} readdir $dh;
}
+my @core = qw(
+ Compiler
+ ConfWriter
+ ConfWriterC
+ HeaderChecker
+ OperatingSystem
+ Util
+);
+
# Add Core headers.
-for (qw( Defines Compiler ConfWriter HeaderChecker OperatingSystem Util )) {
+for ( 'Defines', @core ) {
push @charm_files, catfile( qw( src Charmonizer Core ), "$_.h" );
}
push @charm_files, catfile(qw( src Charmonizer Probe.h ));
@@ -73,7 +82,7 @@ for ( sort @probes ) {
}
# Add Core implementation files.
-for (qw( Compiler ConfWriter HeaderChecker OperatingSystem Util )) {
+for (@core) {
push @charm_files, catfile( qw( src Charmonizer Core ), "$_.c" );
}
push @charm_files, catfile(qw( src Charmonizer Probe.c ));
Modified: lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriter.c
URL:
http://svn.apache.org/viewvc/lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriter.c?rev=1350667&r1=1350666&r2=1350667&view=diff
==============================================================================
--- lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriter.c (original)
+++ lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriter.c Fri Jun 15
15:54:48 2012
@@ -18,167 +18,48 @@
#include "Charmonizer/Core/Util.h"
#include "Charmonizer/Core/ConfWriter.h"
-#include "Charmonizer/Core/OperatingSystem.h"
-#include "Charmonizer/Core/Compiler.h"
-#include <errno.h>
+#include "Charmonizer/Core/ConfWriterC.h"
#include <stdarg.h>
#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-typedef enum ConfElemType {
- CONFELEM_DEF,
- CONFELEM_TYPEDEF,
- CONFELEM_SYS_INCLUDE,
- CONFELEM_LOCAL_INCLUDE
-} ConfElemType;
-
-typedef struct ConfElem {
- char *str1;
- char *str2;
- ConfElemType type;
-} ConfElem;
-
-/* Static vars. */
-static FILE *charmony_fh = NULL;
-static ConfElem *defs = NULL;
-static size_t def_cap = 0;
-static size_t def_count = 0;
-
-/* Open the charmony.h file handle. Print supplied text to it, if non-null.
- * Print an explanatory comment and open the include guard.
- */
-static void
-S_open_charmony_h(const char *charmony_start);
-
-/* Push a new elem onto the def list. */
-static void
-S_push_def_list_item(const char *str1, const char *str2, ConfElemType type);
-
-/* Free the def list. */
-static void
-S_clear_def_list(void);
void
ConfWriter_init(void) {
- S_open_charmony_h(NULL);
+ ConfWriterC_enable();
return;
}
-static void
-S_open_charmony_h(const char *charmony_start) {
- /* Open the filehandle. */
- charmony_fh = fopen("charmony.h", "w+");
- if (charmony_fh == NULL) {
- Util_die("Can't open 'charmony.h': %s", strerror(errno));
- }
-
- /* Print supplied text (if any) along with warning, open include guard. */
- if (charmony_start != NULL) {
- fwrite(charmony_start, sizeof(char), strlen(charmony_start),
- charmony_fh);
- }
- fprintf(charmony_fh,
- "/* Header file auto-generated by Charmonizer. \n"
- " * DO NOT EDIT THIS FILE!!\n"
- " */\n\n"
- "#ifndef H_CHARMONY\n"
- "#define H_CHARMONY 1\n\n"
- );
-}
-
void
ConfWriter_clean_up(void) {
- /* Write the last bit of charmony.h and close. */
- fprintf(charmony_fh, "#endif /* H_CHARMONY */\n\n");
- if (fclose(charmony_fh)) {
- Util_die("Couldn't close 'charmony.h': %s", strerror(errno));
- }
+ ConfWriterC_clean_up();
}
void
ConfWriter_append_conf(const char *fmt, ...) {
va_list args;
-
+
va_start(args, fmt);
- vfprintf(charmony_fh, fmt, args);
+ ConfWriterC_vappend_conf(fmt, args);
va_end(args);
}
-static int
-S_sym_is_uppercase(const char *sym) {
- unsigned i;
- for (i = 0; sym[i] != 0; i++) {
- if (!isupper(sym[i])) {
- if (islower(sym[i])) {
- return false;
- }
- else if (sym[i] != '_') {
- return true;
- }
- }
- }
- return true;
-}
-
void
ConfWriter_add_def(const char *sym, const char *value) {
- S_push_def_list_item(sym, value, CONFELEM_DEF);
-}
-
-static void
-S_append_def_to_conf(const char *sym, const char *value) {
- if (value) {
- if (S_sym_is_uppercase(sym)) {
- fprintf(charmony_fh, "#define CHY_%s %s\n", sym, value);
- }
- else {
- fprintf(charmony_fh, "#define chy_%s %s\n", sym, value);
- }
- }
- else {
- if (S_sym_is_uppercase(sym)) {
- fprintf(charmony_fh, "#define CHY_%s\n", sym);
- }
- else {
- fprintf(charmony_fh, "#define chy_%s\n", sym);
- }
- }
+ ConfWriterC_add_def(sym, value);
}
void
ConfWriter_add_typedef(const char *type, const char *alias) {
- S_push_def_list_item(alias, type, CONFELEM_TYPEDEF);
-}
-
-static void
-S_append_typedef_to_conf(const char *type, const char *alias) {
- if (S_sym_is_uppercase(alias)) {
- fprintf(charmony_fh, "typedef %s CHY_%s;\n", type, alias);
- }
- else {
- fprintf(charmony_fh, "typedef %s chy_%s;\n", type, alias);
- }
+ ConfWriterC_add_typedef(type, alias);
}
void
ConfWriter_add_sys_include(const char *header) {
- S_push_def_list_item(header, NULL, CONFELEM_SYS_INCLUDE);
-}
-
-static void
-S_append_sys_include_to_conf(const char *header) {
- fprintf(charmony_fh, "#include <%s>\n", header);
+ ConfWriterC_add_sys_include(header);
}
void
ConfWriter_add_local_include(const char *header) {
- S_push_def_list_item(header, NULL, CONFELEM_LOCAL_INCLUDE);
-}
-
-static void
-S_append_local_include_to_conf(const char *header) {
- fprintf(charmony_fh, "#include \"%s\"\n", header);
+ ConfWriterC_add_local_include(header);
}
void
@@ -186,90 +67,11 @@ ConfWriter_start_module(const char *modu
if (chaz_Util_verbosity > 0) {
printf("Running %s module...\n", module_name);
}
- ConfWriter_append_conf("\n/* %s */\n", module_name);
+ ConfWriterC_start_module(module_name);
}
void
ConfWriter_end_module(void) {
- size_t i;
- for (i = 0; i < def_count; i++) {
- switch (defs[i].type) {
- case CONFELEM_DEF:
- S_append_def_to_conf(defs[i].str1, defs[i].str2);
- break;
- case CONFELEM_TYPEDEF:
- S_append_typedef_to_conf(defs[i].str2, defs[i].str1);
- break;
- case CONFELEM_SYS_INCLUDE:
- S_append_sys_include_to_conf(defs[i].str1);
- break;
- case CONFELEM_LOCAL_INCLUDE:
- S_append_local_include_to_conf(defs[i].str1);
- break;
- default:
- Util_die("Internal error: bad element type %d",
- (int)defs[i].type);
- }
- }
-
- /* Write out short names. */
- ConfWriter_append_conf(
- "\n#if defined(CHY_USE_SHORT_NAMES) "
- "|| defined(CHAZ_USE_SHORT_NAMES)\n"
- );
- for (i = 0; i < def_count; i++) {
- switch (defs[i].type) {
- case CONFELEM_DEF:
- case CONFELEM_TYPEDEF:
- {
- const char *sym = defs[i].str1;
- const char *value = defs[i].str2;
- if (!value || strcmp(sym, value) != 0) {
- const char *prefix = S_sym_is_uppercase(sym)
- ? "CHY_" : "chy_";
- ConfWriter_append_conf(" #define %s %s%s\n", sym,
- prefix, sym);
- }
- }
- break;
- case CONFELEM_SYS_INCLUDE:
- case CONFELEM_LOCAL_INCLUDE:
- /* no-op */
- break;
- default:
- Util_die("Internal error: bad element type %d",
- (int)defs[i].type);
- }
- }
-
- ConfWriter_append_conf("#endif /* USE_SHORT_NAMES */\n");
- ConfWriter_append_conf("\n");
-
- S_clear_def_list();
-}
-
-static void
-S_push_def_list_item(const char *str1, const char *str2, ConfElemType type) {
- if (def_count >= def_cap) {
- def_cap += 10;
- defs = (ConfElem*)realloc(defs, def_cap * sizeof(ConfElem));
- }
- defs[def_count].str1 = str1 ? Util_strdup(str1) : NULL;
- defs[def_count].str2 = str2 ? Util_strdup(str2) : NULL;
- defs[def_count].type = type;
- def_count++;
-}
-
-static void
-S_clear_def_list(void) {
- size_t i;
- for (i = 0; i < def_count; i++) {
- free(defs[i].str1);
- free(defs[i].str2);
- }
- free(defs);
- defs = NULL;
- def_cap = 0;
- def_count = 0;
+ ConfWriterC_end_module();
}
Copied: lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriterC.c (from
r1350647, lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriter.c)
URL:
http://svn.apache.org/viewvc/lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriterC.c?p2=lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriterC.c&p1=lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriter.c&r1=1350647&r2=1350667&rev=1350667&view=diff
==============================================================================
--- lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriter.c (original)
+++ lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriterC.c Fri Jun 15
15:54:48 2012
@@ -17,7 +17,7 @@
#define CHAZ_USE_SHORT_NAMES
#include "Charmonizer/Core/Util.h"
-#include "Charmonizer/Core/ConfWriter.h"
+#include "Charmonizer/Core/ConfWriterC.h"
#include "Charmonizer/Core/OperatingSystem.h"
#include "Charmonizer/Core/Compiler.h"
#include <errno.h>
@@ -60,7 +60,7 @@ static void
S_clear_def_list(void);
void
-ConfWriter_init(void) {
+ConfWriterC_enable(void) {
S_open_charmony_h(NULL);
return;
}
@@ -88,7 +88,7 @@ S_open_charmony_h(const char *charmony_s
}
void
-ConfWriter_clean_up(void) {
+ConfWriterC_clean_up(void) {
/* Write the last bit of charmony.h and close. */
fprintf(charmony_fh, "#endif /* H_CHARMONY */\n\n");
if (fclose(charmony_fh)) {
@@ -97,14 +97,19 @@ ConfWriter_clean_up(void) {
}
void
-ConfWriter_append_conf(const char *fmt, ...) {
+ConfWriterC_append_conf(const char *fmt, ...) {
va_list args;
va_start(args, fmt);
- vfprintf(charmony_fh, fmt, args);
+ ConfWriterC_vappend_conf(fmt, args);
va_end(args);
}
+void
+ConfWriterC_vappend_conf(const char *fmt, va_list args) {
+ vfprintf(charmony_fh, fmt, args);
+}
+
static int
S_sym_is_uppercase(const char *sym) {
unsigned i;
@@ -122,7 +127,7 @@ S_sym_is_uppercase(const char *sym) {
}
void
-ConfWriter_add_def(const char *sym, const char *value) {
+ConfWriterC_add_def(const char *sym, const char *value) {
S_push_def_list_item(sym, value, CONFELEM_DEF);
}
@@ -147,7 +152,7 @@ S_append_def_to_conf(const char *sym, co
}
void
-ConfWriter_add_typedef(const char *type, const char *alias) {
+ConfWriterC_add_typedef(const char *type, const char *alias) {
S_push_def_list_item(alias, type, CONFELEM_TYPEDEF);
}
@@ -162,7 +167,7 @@ S_append_typedef_to_conf(const char *typ
}
void
-ConfWriter_add_sys_include(const char *header) {
+ConfWriterC_add_sys_include(const char *header) {
S_push_def_list_item(header, NULL, CONFELEM_SYS_INCLUDE);
}
@@ -172,7 +177,7 @@ S_append_sys_include_to_conf(const char
}
void
-ConfWriter_add_local_include(const char *header) {
+ConfWriterC_add_local_include(const char *header) {
S_push_def_list_item(header, NULL, CONFELEM_LOCAL_INCLUDE);
}
@@ -182,15 +187,12 @@ S_append_local_include_to_conf(const cha
}
void
-ConfWriter_start_module(const char *module_name) {
- if (chaz_Util_verbosity > 0) {
- printf("Running %s module...\n", module_name);
- }
- ConfWriter_append_conf("\n/* %s */\n", module_name);
+ConfWriterC_start_module(const char *module_name) {
+ ConfWriterC_append_conf("\n/* %s */\n", module_name);
}
void
-ConfWriter_end_module(void) {
+ConfWriterC_end_module(void) {
size_t i;
for (i = 0; i < def_count; i++) {
switch (defs[i].type) {
@@ -213,7 +215,7 @@ ConfWriter_end_module(void) {
}
/* Write out short names. */
- ConfWriter_append_conf(
+ ConfWriterC_append_conf(
"\n#if defined(CHY_USE_SHORT_NAMES) "
"|| defined(CHAZ_USE_SHORT_NAMES)\n"
);
@@ -227,7 +229,7 @@ ConfWriter_end_module(void) {
if (!value || strcmp(sym, value) != 0) {
const char *prefix = S_sym_is_uppercase(sym)
? "CHY_" : "chy_";
- ConfWriter_append_conf(" #define %s %s%s\n", sym,
+ ConfWriterC_append_conf(" #define %s %s%s\n", sym,
prefix, sym);
}
}
@@ -242,8 +244,8 @@ ConfWriter_end_module(void) {
}
}
- ConfWriter_append_conf("#endif /* USE_SHORT_NAMES */\n");
- ConfWriter_append_conf("\n");
+ ConfWriterC_append_conf("#endif /* USE_SHORT_NAMES */\n");
+ ConfWriterC_append_conf("\n");
S_clear_def_list();
}
Copied: lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriterC.h (from
r1350647, lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriter.h)
URL:
http://svn.apache.org/viewvc/lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriterC.h?p2=lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriterC.h&p1=lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriter.h&r1=1350647&r2=1350667&rev=1350667&view=diff
==============================================================================
--- lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriter.h (original)
+++ lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriterC.h Fri Jun 15
15:54:48 2012
@@ -14,83 +14,86 @@
* limitations under the License.
*/
-/* Charmonizer/Core/ConfWriter.h -- Write to a config file.
+/* Charmonizer/Core/ConfWriterC.h -- Write to a C header file.
*/
-#ifndef H_CHAZ_CONFWRITER
-#define H_CHAZ_CONFWRITER 1
+#ifndef H_CHAZ_CONFWRITERC
+#define H_CHAZ_CONFWRITERC 1
#ifdef __cplusplus
extern "C" {
#endif
#include <stddef.h>
+#include <stdarg.h>
#include "Charmonizer/Core/Defines.h"
-/* Initialize elements needed by ConfWriter. Must be called before anything
- * else, but after os and compiler are initialized.
+/* Enable writing config to a C header file.
*/
void
-chaz_ConfWriter_init(void);
+chaz_ConfWriterC_enable(void);
/* Close the include guard on charmony.h, then close the file. Delete temp
* files and perform any other needed cleanup.
*/
void
-chaz_ConfWriter_clean_up(void);
+chaz_ConfWriterC_clean_up(void);
/* Print output to charmony.h.
*/
void
-chaz_ConfWriter_append_conf(const char *fmt, ...);
+chaz_ConfWriterC_append_conf(const char *fmt, ...);
+
+void
+chaz_ConfWriterC_vappend_conf(const char *fmt, va_list args);
/* Add a pound-define.
*/
void
-chaz_ConfWriter_add_def(const char *sym, const char *value);
+chaz_ConfWriterC_add_def(const char *sym, const char *value);
/* Add a typedef.
*/
void
-chaz_ConfWriter_add_typedef(const char *type, const char *alias);
+chaz_ConfWriterC_add_typedef(const char *type, const char *alias);
/* Pound-include a system header (within angle brackets).
*/
void
-chaz_ConfWriter_add_sys_include(const char *header);
+chaz_ConfWriterC_add_sys_include(const char *header);
/* Pound-include a locally created header (within quotes).
*/
void
-chaz_ConfWriter_add_local_include(const char *header);
+chaz_ConfWriterC_add_local_include(const char *header);
/* Print a "chapter heading" comment in the conf file when starting a module.
*/
void
-chaz_ConfWriter_start_module(const char *module_name);
+chaz_ConfWriterC_start_module(const char *module_name);
/* Leave a little whitespace at the end of each module.
*/
void
-chaz_ConfWriter_end_module(void);
+chaz_ConfWriterC_end_module(void);
#ifdef CHAZ_USE_SHORT_NAMES
- #define ConfWriter_init chaz_ConfWriter_init
- #define ConfWriter_clean_up chaz_ConfWriter_clean_up
- #define ConfWriter_build_charm_run chaz_ConfWriter_build_charm_run
- #define ConfWriter_start_module chaz_ConfWriter_start_module
- #define ConfWriter_end_module chaz_ConfWriter_end_module
- #define ConfWriter_append_conf chaz_ConfWriter_append_conf
- #define ConfWriter_add_def chaz_ConfWriter_add_def
- #define ConfWriter_add_typedef chaz_ConfWriter_add_typedef
- #define ConfWriter_add_sys_include chaz_ConfWriter_add_sys_include
- #define ConfWriter_add_local_include chaz_ConfWriter_add_local_include
+ #define ConfWriterC_enable chaz_ConfWriterC_enable
+ #define ConfWriterC_clean_up chaz_ConfWriterC_clean_up
+ #define ConfWriterC_start_module chaz_ConfWriterC_start_module
+ #define ConfWriterC_end_module chaz_ConfWriterC_end_module
+ #define ConfWriterC_append_conf chaz_ConfWriterC_append_conf
+ #define ConfWriterC_vappend_conf chaz_ConfWriterC_vappend_conf
+ #define ConfWriterC_add_def chaz_ConfWriterC_add_def
+ #define ConfWriterC_add_typedef chaz_ConfWriterC_add_typedef
+ #define ConfWriterC_add_sys_include chaz_ConfWriterC_add_sys_include
+ #define ConfWriterC_add_local_include chaz_ConfWriterC_add_local_include
#endif
#ifdef __cplusplus
}
#endif
-#endif /* H_CHAZ_CONFWRITER */
+#endif /* H_CHAZ_CONFWRITERC */