From 7b7aa536c3ee66a1b3c7691b73ac46c4b451063a Mon Sep 17 00:00:00 2001 From: erickson Date: Mon, 20 Mar 2006 22:57:44 +0000 Subject: [PATCH] added mod_xmlent to the build process git-svn-id: svn://svn.open-ils.org/ILS/trunk@3403 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- Open-ILS/src/Makefile | 13 +++++-- Open-ILS/src/apachemods/Makefile | 13 +++++-- Open-ILS/src/apachemods/mod_xmlent.c | 54 +++++++++++++++++++++------- 3 files changed, 63 insertions(+), 17 deletions(-) diff --git a/Open-ILS/src/Makefile b/Open-ILS/src/Makefile index 8ce6f0ffbf..34cfd0eb6d 100644 --- a/Open-ILS/src/Makefile +++ b/Open-ILS/src/Makefile @@ -8,11 +8,11 @@ export INCDIR = "$(INCLUDEDIR)/openils/" export STAFF_CLIENT_BUILD_ID = `/bin/cat ../xul/staff_client/build/BUILD_ID` -all: mod_xmlbuilder mod_ils_rest_gateway c_apps client-xul +all: mod_xmlbuilder mod_ils_rest_gateway c_apps client-xul mod_xmlent install: perl-install web-install server-xul string-templates-install storage-bootstrap cgi-bootstrap xsl-install c_apps-install circ_rules-install -web-install: webcore-install autojs-install mod_xmlbuilder-install mod_ils_rest_gateway-install +web-install: webcore-install autojs-install mod_xmlbuilder-install mod_ils_rest_gateway-install mod_xmlent-install circ_rules-install: @echo $@ @@ -31,6 +31,10 @@ mod_ils_rest_gateway-install: make -C apachemods libfieldmapper-install make -C apachemods mod_ils_rest_gateway-install +mod_xmlent: + @echo $@ + make -C apachemods mod_xmlent.so + mod_xmlbuilder: @echo $@ make -C apachemods mod_xmlbuilder.so @@ -47,6 +51,11 @@ mod_xmlbuilder-install: @echo $@ make -C apachemods mod_xmlbuilder-install +mod_xmlent-install: + @echo $@ + make -C apachemods mod_xmlent-install + + client-xul: @echo $@ @echo "Building staff client" diff --git a/Open-ILS/src/apachemods/Makefile b/Open-ILS/src/apachemods/Makefile index 359eb279bf..5a99b2e770 100644 --- a/Open-ILS/src/apachemods/Makefile +++ b/Open-ILS/src/apachemods/Makefile @@ -1,9 +1,9 @@ LDLIBS += -lxml2 -lopensrf -lxslt -all: mod_xmlbuilder.so mod_ils_rest_gateway.so +all: mod_xmlbuilder.so mod_ils_rest_gateway.so mod_xmlent.so -install: mod_xmlbuilder-install mod_ils_rest_gateway-install libfieldmapper-install +install: mod_xmlbuilder-install mod_ils_rest_gateway-install libfieldmapper-install mod_xmlent-install mod_xmlbuilder.o: mod_xmlbuilder.h mod_xmlbuilder.c @@ -18,6 +18,12 @@ fieldmapper_lookup.c: ./fieldmapper_lookup-gen.pl fieldmapper_lookup.c +mod_xmlent.o: mod_xmlent.c +mod_xmlent.so: mod_xmlent.o + @echo $@ + $(CC) $(LDFLAGS) $(LDLIBS) -shared -W1 mod_xmlent.o -lexpat -o $@ + + # ------------------------------------------------------ mod_xmlbuilder.so: mod_xmlbuilder.o apachetools.o @@ -62,6 +68,9 @@ mod_ils_rest_gateway-install: mod_xmlbuilder-install: $(APXS2) -i -a -n xmlbuilder mod_xmlbuilder.so +mod_xmlent-install: + $(APXS2) -i -a -n xmlent mod_xmlent.so + clean: echo $@ diff --git a/Open-ILS/src/apachemods/mod_xmlent.c b/Open-ILS/src/apachemods/mod_xmlent.c index b9570be304..83d08f8241 100644 --- a/Open-ILS/src/apachemods/mod_xmlent.c +++ b/Open-ILS/src/apachemods/mod_xmlent.c @@ -23,6 +23,12 @@ #define MODXMLENT_CONFIG_CONTENT_TYPE_DEFAULT "text/html" #define MODXMLENT_CONFIG_STRIP_PI "XMLEntStripPI" #define MODXMLENT_CONFIG_STRIP_PI_DEFAULT "yes" +#define MODXMLENT_CONFIG_DOCTYPE "XMLEntDoctype" +/* +#define MODXMLENT_CONFIG_STRIP_DOCTYPE \ + "doctype = (char*) arg; + return NULL; +} + /* Tell apache how to set our config variables */ static const command_rec xmlEntCommands[] = { AP_INIT_TAKE1( MODXMLENT_CONFIG_STRIP_COMMENTS, @@ -71,6 +85,8 @@ static const command_rec xmlEntCommands[] = { xmlEntSetContentType, NULL, ACCESS_CONF, "XMLENT Content Type"), AP_INIT_TAKE1( MODXMLENT_CONFIG_STRIP_PI, xmlEntSetStripPI, NULL, ACCESS_CONF, "XMLENT Strip XML Processing Instructions"), + AP_INIT_TAKE1( MODXMLENT_CONFIG_DOCTYPE, + xmlEntSetDoctype, NULL, ACCESS_CONF, "XMLENT Doctype Declaration"), {NULL} }; @@ -85,6 +101,7 @@ static void* xmlEntCreateDirConfig( apr_pool_t* p, char* dir ) { (MODXMLENT_CONFIG_STRIP_PI_DEFAULT && !strcasecmp(MODXMLENT_CONFIG_STRIP_PI_DEFAULT, "yes")) ? 1 : 0; config->contentType = MODXMLENT_CONFIG_CONTENT_TYPE_DEFAULT; + config->doctype = NULL; return (void*) config; } @@ -149,10 +166,6 @@ static void XMLCALL charHandler( void* userData, const XML_Char* s, int len ) { } static void XMLCALL handlePI( void* userData, const XML_Char* target, const XML_Char* data) { - /* - fprintf(stderr, "target=%s : data=%s\n", target, data); - fflush(stderr); - */ ap_filter_t* filter = (ap_filter_t*) userData; _fwrite(filter, "", target, data); } @@ -185,9 +198,12 @@ static int xmlEntHandler( ap_filter_t *f, apr_bucket_brigade *brigade ) { /* set the content type based on the config */ ap_set_content_type(f->r, config->contentType); + /* create the XML parser */ + int firstrun = 0; if( parser == NULL ) { - parser = XML_ParserCreate(NULL); + firstrun = 1; + parser = XML_ParserCreate("UTF-8"); XML_SetUserData(parser, f); XML_SetElementHandler(parser, startElement, endElement); XML_SetCharacterDataHandler(parser, charHandler); @@ -202,6 +218,18 @@ static int xmlEntHandler( ap_filter_t *f, apr_bucket_brigade *brigade ) { ctx->parser = parser; } + + if(firstrun) { /* we haven't started writing the data to the stream yet */ + + /* go ahead and write the doctype out if we have one defined */ + if(config->doctype) { + ap_log_rerror( APLOG_MARK, APLOG_DEBUG, + 0, f->r, "XMLENT DOCTYPE => %s", config->doctype); + _fwrite(f, "%s\n\n", config->doctype); + } + } + + /* cycle through the buckets in the brigade */ while (!APR_BRIGADE_EMPTY(brigade)) { @@ -262,12 +290,12 @@ static void xmlEntRegisterHook(apr_pool_t *pool) { /* Define the module data */ module AP_MODULE_DECLARE_DATA xmlent_module = { STANDARD20_MODULE_STUFF, - xmlEntCreateDirConfig, /* dir config creater */ - NULL, /*xmlEntMergeDirConfig,*/ /* dir merger --- default is to override */ - NULL, /* server config */ - NULL, /* merge server config */ - xmlEntCommands, /* command apr_table_t */ - xmlEntRegisterHook /* register hook */ + xmlEntCreateDirConfig, /* dir config creater */ + NULL, /* dir merger --- default is to override */ + NULL, /* server config */ + NULL, /* merge server config */ + xmlEntCommands, /* command apr_table_t */ + xmlEntRegisterHook /* register hook */ }; -- 2.43.2