Author: logie
Date: Fri Oct  5 16:45:43 2012
New Revision: 1394633

URL: http://svn.apache.org/viewvc?rev=1394633&view=rev
Log:
Added a ruby conf writer and hooked it up in all the various build points.

Added:
    lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriterRuby.c
    lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriterRuby.h
Modified:
    lucy/trunk/charmonizer/Makefile
    lucy/trunk/charmonizer/Makefile.MSVC
    lucy/trunk/charmonizer/Makefile.MinGW
    lucy/trunk/charmonizer/buildbin/meld.pl
    lucy/trunk/charmonizer/charmonize.c

Modified: lucy/trunk/charmonizer/Makefile
URL: 
http://svn.apache.org/viewvc/lucy/trunk/charmonizer/Makefile?rev=1394633&r1=1394632&r2=1394633&view=diff
==============================================================================
--- lucy/trunk/charmonizer/Makefile (original)
+++ lucy/trunk/charmonizer/Makefile Fri Oct  5 16:45:43 2012
@@ -26,11 +26,11 @@ PERL=/usr/bin/perl
 
 TESTS= TestDirManip TestFuncMacro TestHeaders TestIntegers TestLargeFiles 
TestUnusedVars TestVariadicMacros
 
-OBJS= charmonize.o src/Charmonizer/Core/Compiler.o 
src/Charmonizer/Core/ConfWriter.o src/Charmonizer/Core/ConfWriterC.o 
src/Charmonizer/Core/ConfWriterPerl.o src/Charmonizer/Core/HeaderChecker.o 
src/Charmonizer/Core/OperatingSystem.o src/Charmonizer/Core/Util.o 
src/Charmonizer/Probe.o src/Charmonizer/Probe/AtomicOps.o 
src/Charmonizer/Probe/DirManip.o src/Charmonizer/Probe/Floats.o 
src/Charmonizer/Probe/FuncMacro.o src/Charmonizer/Probe/Headers.o 
src/Charmonizer/Probe/Integers.o src/Charmonizer/Probe/LargeFiles.o 
src/Charmonizer/Probe/Memory.o src/Charmonizer/Probe/SymbolVisibility.o 
src/Charmonizer/Probe/UnusedVars.o src/Charmonizer/Probe/VariadicMacros.o
+OBJS= charmonize.o src/Charmonizer/Core/Compiler.o 
src/Charmonizer/Core/ConfWriter.o src/Charmonizer/Core/ConfWriterC.o 
src/Charmonizer/Core/ConfWriterPerl.o src/Charmonizer/Core/ConfWriterRuby.o 
src/Charmonizer/Core/HeaderChecker.o src/Charmonizer/Core/OperatingSystem.o 
src/Charmonizer/Core/Util.o src/Charmonizer/Probe.o 
src/Charmonizer/Probe/AtomicOps.o src/Charmonizer/Probe/DirManip.o 
src/Charmonizer/Probe/Floats.o src/Charmonizer/Probe/FuncMacro.o 
src/Charmonizer/Probe/Headers.o src/Charmonizer/Probe/Integers.o 
src/Charmonizer/Probe/LargeFiles.o src/Charmonizer/Probe/Memory.o 
src/Charmonizer/Probe/SymbolVisibility.o src/Charmonizer/Probe/UnusedVars.o 
src/Charmonizer/Probe/VariadicMacros.o
 
 TEST_OBJS= src/Charmonizer/Test.o src/Charmonizer/Test/TestDirManip.o 
src/Charmonizer/Test/TestFuncMacro.o src/Charmonizer/Test/TestHeaders.o 
src/Charmonizer/Test/TestIntegers.o src/Charmonizer/Test/TestLargeFiles.o 
src/Charmonizer/Test/TestUnusedVars.o src/Charmonizer/Test/TestVariadicMacros.o
 
-HEADERS= src/Charmonizer/Core/Compiler.h src/Charmonizer/Core/ConfWriter.h 
src/Charmonizer/Core/ConfWriterC.h src/Charmonizer/Core/ConfWriterPerl.h 
src/Charmonizer/Core/Defines.h src/Charmonizer/Core/HeaderChecker.h 
src/Charmonizer/Core/OperatingSystem.h src/Charmonizer/Core/Util.h 
src/Charmonizer/Probe.h src/Charmonizer/Probe/AtomicOps.h 
src/Charmonizer/Probe/DirManip.h src/Charmonizer/Probe/Floats.h 
src/Charmonizer/Probe/FuncMacro.h src/Charmonizer/Probe/Headers.h 
src/Charmonizer/Probe/Integers.h src/Charmonizer/Probe/LargeFiles.h 
src/Charmonizer/Probe/Memory.h src/Charmonizer/Probe/SymbolVisibility.h 
src/Charmonizer/Probe/UnusedVars.h src/Charmonizer/Probe/VariadicMacros.h 
src/Charmonizer/Test.h
+HEADERS= src/Charmonizer/Core/Compiler.h src/Charmonizer/Core/ConfWriter.h 
src/Charmonizer/Core/ConfWriterC.h src/Charmonizer/Core/ConfWriterPerl.h 
src/Charmonizer/Core/ConfWriterRuby.h src/Charmonizer/Core/Defines.h 
src/Charmonizer/Core/HeaderChecker.h src/Charmonizer/Core/OperatingSystem.h 
src/Charmonizer/Core/Util.h src/Charmonizer/Probe.h 
src/Charmonizer/Probe/AtomicOps.h src/Charmonizer/Probe/DirManip.h 
src/Charmonizer/Probe/Floats.h src/Charmonizer/Probe/FuncMacro.h 
src/Charmonizer/Probe/Headers.h src/Charmonizer/Probe/Integers.h 
src/Charmonizer/Probe/LargeFiles.h src/Charmonizer/Probe/Memory.h 
src/Charmonizer/Probe/SymbolVisibility.h src/Charmonizer/Probe/UnusedVars.h 
src/Charmonizer/Probe/VariadicMacros.h src/Charmonizer/Test.h
 
 CLEANABLE= $(OBJS) $(PROGNAME) $(TEST_OBJS) $(TESTS) 
 

Modified: lucy/trunk/charmonizer/Makefile.MSVC
URL: 
http://svn.apache.org/viewvc/lucy/trunk/charmonizer/Makefile.MSVC?rev=1394633&r1=1394632&r2=1394633&view=diff
==============================================================================
--- lucy/trunk/charmonizer/Makefile.MSVC (original)
+++ lucy/trunk/charmonizer/Makefile.MSVC Fri Oct  5 16:45:43 2012
@@ -26,11 +26,14 @@ PERL=/usr/bin/perl
 
 TESTS= TestDirManip.exe TestFuncMacro.exe TestHeaders.exe TestIntegers.exe 
TestLargeFiles.exe TestUnusedVars.exe TestVariadicMacros.exe
 
-OBJS= charmonize.obj src\Charmonizer\Core\Compiler.obj 
src\Charmonizer\Core\ConfWriter.obj src\Charmonizer\Core\ConfWriterC.obj 
src\Charmonizer\Core\ConfWriterPerl.obj src\Charmonizer\Core\HeaderChecker.obj 
src\Charmonizer\Core\OperatingSystem.obj src\Charmonizer\Core\Util.obj 
src\Charmonizer\Probe.obj src\Charmonizer\Probe\AtomicOps.obj 
src\Charmonizer\Probe\DirManip.obj src\Charmonizer\Probe\Floats.obj 
src\Charmonizer\Probe\FuncMacro.obj src\Charmonizer\Probe\Headers.obj 
src\Charmonizer\Probe\Integers.obj src\Charmonizer\Probe\LargeFiles.obj 
src\Charmonizer\Probe\Memory.obj src\Charmonizer\Probe\SymbolVisibility.obj 
src\Charmonizer\Probe\UnusedVars.obj src\Charmonizer\Probe\VariadicMacros.obj
+OBJS= charmonize.obj src\Charmonizer\Core\Compiler.obj
+src\Charmonizer\Core\ConfWriter.obj src\Charmonizer\Core\ConfWriterC.obj
+src\Charmonizer\Core\ConfWriterPerl.obj 
src\Charmonizer\Core\ConfWriterRuby.obj src\Charmonizer\Core\HeaderChecker.obj 
src\Charmonizer\Core\OperatingSystem.obj src\Charmonizer\Core\Util.obj 
src\Charmonizer\Probe.obj src\Charmonizer\Probe\AtomicOps.obj 
src\Charmonizer\Probe\DirManip.obj src\Charmonizer\Probe\Floats.obj 
src\Charmonizer\Probe\FuncMacro.obj src\Charmonizer\Probe\Headers.obj 
src\Charmonizer\Probe\Integers.obj src\Charmonizer\Probe\LargeFiles.obj 
src\Charmonizer\Probe\Memory.obj src\Charmonizer\Probe\SymbolVisibility.obj 
src\Charmonizer\Probe\UnusedVars.obj src\Charmonizer\Probe\VariadicMacros.obj
 
 TEST_OBJS= src\Charmonizer\Test.obj src\Charmonizer\Test\TestDirManip.obj 
src\Charmonizer\Test\TestFuncMacro.obj src\Charmonizer\Test\TestHeaders.obj 
src\Charmonizer\Test\TestIntegers.obj src\Charmonizer\Test\TestLargeFiles.obj 
src\Charmonizer\Test\TestUnusedVars.obj 
src\Charmonizer\Test\TestVariadicMacros.obj
 
-HEADERS= src\Charmonizer\Core\Compiler.h src\Charmonizer\Core\ConfWriter.h 
src\Charmonizer\Core\ConfWriterC.h src\Charmonizer\Core\ConfWriterPerl.h 
src\Charmonizer\Core\Defines.h src\Charmonizer\Core\HeaderChecker.h 
src\Charmonizer\Core\OperatingSystem.h src\Charmonizer\Core\Util.h 
src\Charmonizer\Probe.h src\Charmonizer\Probe\AtomicOps.h 
src\Charmonizer\Probe\DirManip.h src\Charmonizer\Probe\Floats.h 
src\Charmonizer\Probe\FuncMacro.h src\Charmonizer\Probe\Headers.h 
src\Charmonizer\Probe\Integers.h src\Charmonizer\Probe\LargeFiles.h 
src\Charmonizer\Probe\Memory.h src\Charmonizer\Probe\SymbolVisibility.h 
src\Charmonizer\Probe\UnusedVars.h src\Charmonizer\Probe\VariadicMacros.h 
src\Charmonizer\Test.h
+HEADERS= src\Charmonizer\Core\Compiler.h src\Charmonizer\Core\ConfWriter.h
+src\Charmonizer\Core\ConfWriterC.h src\Charmonizer\Core\ConfWriterPerl.h 
src\Charmonizer\Core\ConfWriterRuby.h src\Charmonizer\Core\Defines.h 
src\Charmonizer\Core\HeaderChecker.h src\Charmonizer\Core\OperatingSystem.h 
src\Charmonizer\Core\Util.h src\Charmonizer\Probe.h 
src\Charmonizer\Probe\AtomicOps.h src\Charmonizer\Probe\DirManip.h 
src\Charmonizer\Probe\Floats.h src\Charmonizer\Probe\FuncMacro.h 
src\Charmonizer\Probe\Headers.h src\Charmonizer\Probe\Integers.h 
src\Charmonizer\Probe\LargeFiles.h src\Charmonizer\Probe\Memory.h 
src\Charmonizer\Probe\SymbolVisibility.h src\Charmonizer\Probe\UnusedVars.h 
src\Charmonizer\Probe\VariadicMacros.h src\Charmonizer\Test.h
 
 CLEANABLE= $(OBJS) $(PROGNAME) $(TEST_OBJS) $(TESTS) *.pdb
 

Modified: lucy/trunk/charmonizer/Makefile.MinGW
URL: 
http://svn.apache.org/viewvc/lucy/trunk/charmonizer/Makefile.MinGW?rev=1394633&r1=1394632&r2=1394633&view=diff
==============================================================================
--- lucy/trunk/charmonizer/Makefile.MinGW (original)
+++ lucy/trunk/charmonizer/Makefile.MinGW Fri Oct  5 16:45:43 2012
@@ -26,11 +26,13 @@ PERL=/usr/bin/perl
 
 TESTS= TestDirManip.exe TestFuncMacro.exe TestHeaders.exe TestIntegers.exe 
TestLargeFiles.exe TestUnusedVars.exe TestVariadicMacros.exe
 
-OBJS= charmonize.o src\Charmonizer\Core\Compiler.o 
src\Charmonizer\Core\ConfWriter.o src\Charmonizer\Core\ConfWriterC.o 
src\Charmonizer\Core\ConfWriterPerl.o src\Charmonizer\Core\HeaderChecker.o 
src\Charmonizer\Core\OperatingSystem.o src\Charmonizer\Core\Util.o 
src\Charmonizer\Probe.o src\Charmonizer\Probe\AtomicOps.o 
src\Charmonizer\Probe\DirManip.o src\Charmonizer\Probe\Floats.o 
src\Charmonizer\Probe\FuncMacro.o src\Charmonizer\Probe\Headers.o 
src\Charmonizer\Probe\Integers.o src\Charmonizer\Probe\LargeFiles.o 
src\Charmonizer\Probe\Memory.o src\Charmonizer\Probe\SymbolVisibility.o 
src\Charmonizer\Probe\UnusedVars.o src\Charmonizer\Probe\VariadicMacros.o
+OBJS= charmonize.o src\Charmonizer\Core\Compiler.o
+src\Charmonizer\Core\ConfWriter.o src\Charmonizer\Core\ConfWriterC.o 
src\Charmonizer\Core\ConfWriterPerl.o src\Charmonizer\Core\ConfWriterRuby.o 
src\Charmonizer\Core\HeaderChecker.o src\Charmonizer\Core\OperatingSystem.o 
src\Charmonizer\Core\Util.o src\Charmonizer\Probe.o 
src\Charmonizer\Probe\AtomicOps.o src\Charmonizer\Probe\DirManip.o 
src\Charmonizer\Probe\Floats.o src\Charmonizer\Probe\FuncMacro.o 
src\Charmonizer\Probe\Headers.o src\Charmonizer\Probe\Integers.o 
src\Charmonizer\Probe\LargeFiles.o src\Charmonizer\Probe\Memory.o 
src\Charmonizer\Probe\SymbolVisibility.o src\Charmonizer\Probe\UnusedVars.o 
src\Charmonizer\Probe\VariadicMacros.o
 
 TEST_OBJS= src\Charmonizer\Test.o src\Charmonizer\Test\TestDirManip.o 
src\Charmonizer\Test\TestFuncMacro.o src\Charmonizer\Test\TestHeaders.o 
src\Charmonizer\Test\TestIntegers.o src\Charmonizer\Test\TestLargeFiles.o 
src\Charmonizer\Test\TestUnusedVars.o src\Charmonizer\Test\TestVariadicMacros.o
 
-HEADERS= src\Charmonizer\Core\Compiler.h src\Charmonizer\Core\ConfWriter.h 
src\Charmonizer\Core\ConfWriterC.h src\Charmonizer\Core\ConfWriterPerl.h 
src\Charmonizer\Core\Defines.h src\Charmonizer\Core\HeaderChecker.h 
src\Charmonizer\Core\OperatingSystem.h src\Charmonizer\Core\Util.h 
src\Charmonizer\Probe.h src\Charmonizer\Probe\AtomicOps.h 
src\Charmonizer\Probe\DirManip.h src\Charmonizer\Probe\Floats.h 
src\Charmonizer\Probe\FuncMacro.h src\Charmonizer\Probe\Headers.h 
src\Charmonizer\Probe\Integers.h src\Charmonizer\Probe\LargeFiles.h 
src\Charmonizer\Probe\Memory.h src\Charmonizer\Probe\SymbolVisibility.h 
src\Charmonizer\Probe\UnusedVars.h src\Charmonizer\Probe\VariadicMacros.h 
src\Charmonizer\Test.h
+HEADERS= src\Charmonizer\Core\Compiler.h src\Charmonizer\Core\ConfWriter.h
+src\Charmonizer\Core\ConfWriterC.h src\Charmonizer\Core\ConfWriterPerl.h 
src\Charmonizer\Core\ConfWriterRuby.h src\Charmonizer\Core\Defines.h 
src\Charmonizer\Core\HeaderChecker.h src\Charmonizer\Core\OperatingSystem.h 
src\Charmonizer\Core\Util.h src\Charmonizer\Probe.h 
src\Charmonizer\Probe\AtomicOps.h src\Charmonizer\Probe\DirManip.h 
src\Charmonizer\Probe\Floats.h src\Charmonizer\Probe\FuncMacro.h 
src\Charmonizer\Probe\Headers.h src\Charmonizer\Probe\Integers.h 
src\Charmonizer\Probe\LargeFiles.h src\Charmonizer\Probe\Memory.h 
src\Charmonizer\Probe\SymbolVisibility.h src\Charmonizer\Probe\UnusedVars.h 
src\Charmonizer\Probe\VariadicMacros.h src\Charmonizer\Test.h
 
 CLEANABLE= $(OBJS) $(PROGNAME) $(TEST_OBJS) $(TESTS) 
 

Modified: lucy/trunk/charmonizer/buildbin/meld.pl
URL: 
http://svn.apache.org/viewvc/lucy/trunk/charmonizer/buildbin/meld.pl?rev=1394633&r1=1394632&r2=1394633&view=diff
==============================================================================
--- lucy/trunk/charmonizer/buildbin/meld.pl (original)
+++ lucy/trunk/charmonizer/buildbin/meld.pl Fri Oct  5 16:45:43 2012
@@ -66,6 +66,7 @@ my @core = qw(
     ConfWriter
     ConfWriterC
     ConfWriterPerl
+    ConfWriterRuby
     HeaderChecker
     OperatingSystem
     Util

Modified: lucy/trunk/charmonizer/charmonize.c
URL: 
http://svn.apache.org/viewvc/lucy/trunk/charmonizer/charmonize.c?rev=1394633&r1=1394632&r2=1394633&view=diff
==============================================================================
--- lucy/trunk/charmonizer/charmonize.c (original)
+++ lucy/trunk/charmonizer/charmonize.c Fri Oct  5 16:45:43 2012
@@ -36,6 +36,7 @@
 #include "Charmonizer/Core/ConfWriter.h"
 #include "Charmonizer/Core/ConfWriterC.h"
 #include "Charmonizer/Core/ConfWriterPerl.h"
+#include "Charmonizer/Core/ConfWriterRuby.h"
 
 #define MAX_CC_LEN 128
 #define MAX_FLAGS_LEN 2048
@@ -45,6 +46,7 @@ struct CLIArgs {
     char cc_flags[MAX_FLAGS_LEN + 1];
     int  enable_c;
     int  enable_perl;
+    int  enable_ruby;
 };
 
 /* Parse command line arguments. */
@@ -69,6 +71,10 @@ S_parse_arguments(int argc, char **argv,
             args->enable_perl = 1;
             output_enabled = 1;
         }
+        else if (strcmp(arg, "--enable-ruby") == 0) {
+            args->enable_ruby = 1;
+            output_enabled = 1;
+        }
         else if (memcmp(arg, "--cc=", 5) == 0) {
             if (strlen(arg) > MAX_CC_LEN - 5) {
                 fprintf(stderr, "Exceeded max length for compiler command");
@@ -97,7 +103,7 @@ S_parse_arguments(int argc, char **argv,
        ) {
         fprintf(stderr,
                 "Usage: ./charmonize --cc=CC_COMMAND [--enable-c] "
-                "[--enable-perl] -- CC_FLAGS\n");
+                "[--enable-perl] [--enable-ruby] -- CC_FLAGS\n");
         exit(1);
     }
 
@@ -115,6 +121,9 @@ int main(int argc, char **argv) {
     if (args.enable_perl) {
         chaz_ConfWriterPerl_enable();
     }
+    if (args.enable_ruby) {
+        chaz_ConfWriterRuby_enable();
+    }
 
     /* Run probe modules. */
     chaz_DirManip_run();

Added: lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriterRuby.c
URL: 
http://svn.apache.org/viewvc/lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriterRuby.c?rev=1394633&view=auto
==============================================================================
--- lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriterRuby.c (added)
+++ lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriterRuby.c Fri Oct  5 
16:45:43 2012
@@ -0,0 +1,206 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define CHAZ_USE_SHORT_NAMES
+#define CHAZ_CONFWRITER_INTERNAL
+
+#include "Charmonizer/Core/Util.h"
+#include "Charmonizer/Core/ConfWriter.h"
+#include "Charmonizer/Core/ConfWriterRuby.h"
+#include <errno.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* Static vars. */
+static FILE *config_rb_fh  = NULL;
+static ConfWriter CWRuby_conf_writer;
+
+/* Open the Charmony.rb file handle.
+ */
+static void
+S_open_config_rb(void);
+
+static void
+S_ConfWriterRuby_clean_up(void);
+static void
+S_ConfWriterRuby_vappend_conf(const char *fmt, va_list args);
+static void
+S_ConfWriterRuby_add_def(const char *sym, const char *value);
+static void
+S_ConfWriterRuby_add_typedef(const char *type, const char *alias);
+static void
+S_ConfWriterRuby_add_sys_include(const char *header);
+static void
+S_ConfWriterRuby_add_local_include(const char *header);
+static void
+S_ConfWriterRuby_start_module(const char *module_name);
+static void
+S_ConfWriterRuby_end_module(void);
+
+void
+ConfWriterRuby_enable(void) {
+    CWRuby_conf_writer.clean_up          = S_ConfWriterRuby_clean_up;
+    CWRuby_conf_writer.vappend_conf      = S_ConfWriterRuby_vappend_conf;
+    CWRuby_conf_writer.add_def           = S_ConfWriterRuby_add_def;
+    CWRuby_conf_writer.add_typedef       = S_ConfWriterRuby_add_typedef;
+    CWRuby_conf_writer.add_sys_include   = S_ConfWriterRuby_add_sys_include;
+    CWRuby_conf_writer.add_local_include = S_ConfWriterRuby_add_local_include;
+    CWRuby_conf_writer.start_module      = S_ConfWriterRuby_start_module;
+    CWRuby_conf_writer.end_module        = S_ConfWriterRuby_end_module;
+    S_open_config_rb();
+    ConfWriter_add_writer(&CWRuby_conf_writer);
+    return;
+}
+
+static void
+S_open_config_rb(void) {
+    /* Open the filehandle. */
+    config_rb_fh = fopen("Charmony.rb", "w+");
+    if (config_rb_fh == NULL) {
+        Util_die("Can't open 'Charmony.rb': %s", strerror(errno));
+    }
+
+    /* Start the module. */
+    fprintf(config_rb_fh,
+            "# Auto-generated by Charmonizer. \n"
+            "# DO NOT EDIT THIS FILE!!\n"
+            "\n"
+            "module Charmony\n"
+            "\n"
+            "%%defs\n"
+            "\n"
+            "def config\n\\%%defs\nend\n"
+            "\n"
+           );
+}
+
+static void
+S_ConfWriterRuby_clean_up(void) {
+    /* Write the last bit of Charmony.rb and close. */
+    fprintf(config_rb_fh, "\nend\n\n");
+    if (fclose(config_rb_fh)) {
+        Util_die("Couldn't close 'Charmony.rb': %s", strerror(errno));
+    }
+}
+
+static void
+S_ConfWriterRuby_vappend_conf(const char *fmt, va_list args) {
+    (void)fmt;
+    (void)args;
+}
+
+static char*
+S_ConfWriterRuby_quotify(const char *string, char *buf, size_t buf_size) {
+    char *quoted = buf;
+
+    /* Don't bother with undef values here. */
+    if (!string) {
+        return NULL;
+    }
+
+    /* Allocate memory if necessary. */
+    {
+        const char *ptr;
+        size_t space = 3; /* Quotes plus NUL termination. */
+        for (ptr = string; *ptr; ptr++) {
+            if (*ptr == '\'' || *ptr == '\\') {
+                space += 2;
+            }
+            else {
+                space += 1;
+            }
+        }
+        if (space > buf_size) {
+            quoted = (char*)malloc(space);
+        }
+    }
+
+    /* Perform copying and escaping */
+    {
+        const char *ptr;
+        size_t pos = 0;
+        quoted[pos++] = '\'';
+        for (ptr = string; *ptr; ptr++) {
+            if (*ptr == '\'' || *ptr == '\\') {
+                quoted[pos++] = '\\';
+            }
+            quoted[pos++] = *ptr;
+        }
+        quoted[pos++] = '\'';
+        quoted[pos++] = '\0';
+    }
+
+    return quoted;
+}
+
+#define CFRUBY_MAX_BUF 100
+static void
+S_ConfWriterRuby_add_def(const char *sym, const char *value) {
+    char sym_buf[CFRUBY_MAX_BUF + 1];
+    char value_buf[CFRUBY_MAX_BUF + 1];
+    char *quoted_sym;
+    char *quoted_value;
+
+    /* Quote key. */
+    if (!sym) {
+        Util_die("Can't handle NULL key");
+    }
+    quoted_sym = S_ConfWriterRuby_quotify(sym, sym_buf, CFRUBY_MAX_BUF);
+
+    /* Quote value or use "undef". */
+    if (!value) {
+        strcpy(value_buf, "undef");
+        quoted_value = value_buf;
+    }
+    else {
+        quoted_value = S_ConfWriterRuby_quotify(value, value_buf,
+                                                CFRUBY_MAX_BUF);
+    }
+
+    fprintf(config_rb_fh, "defs[%s] = %s\n", quoted_sym, quoted_value);
+
+    if (quoted_sym   != sym_buf)   { free(quoted_sym);   }
+    if (quoted_value != value_buf) { free(quoted_value); }
+}
+
+static void
+S_ConfWriterRuby_add_typedef(const char *type, const char *alias) {
+    (void)type;
+    (void)alias;
+}
+
+static void
+S_ConfWriterRuby_add_sys_include(const char *header) {
+    (void)header;
+}
+
+static void
+S_ConfWriterRuby_add_local_include(const char *header) {
+    (void)header;
+}
+
+static void
+S_ConfWriterRuby_start_module(const char *module_name) {
+    fprintf(config_rb_fh, "# %s\n", module_name);
+}
+
+static void
+S_ConfWriterRuby_end_module(void) {
+    fprintf(config_rb_fh, "\n");
+}
+

Added: lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriterRuby.h
URL: 
http://svn.apache.org/viewvc/lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriterRuby.h?rev=1394633&view=auto
==============================================================================
--- lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriterRuby.h (added)
+++ lucy/trunk/charmonizer/src/Charmonizer/Core/ConfWriterRuby.h Fri Oct  5 
16:45:43 2012
@@ -0,0 +1,41 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* Charmonizer/Core/ConfWriterRuby.h -- Write to a Ruby module file.
+ */
+
+#ifndef H_CHAZ_CONFWRITERRUBY
+#define H_CHAZ_CONFWRITERRUBY 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Enable writing config to a Ruby module file.
+ */
+void
+chaz_ConfWriterRuby_enable(void);
+
+#ifdef   CHAZ_USE_SHORT_NAMES
+  #define ConfWriterRuby_enable   chaz_ConfWriterRuby_enable
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* H_CHAZ_CONFWRITERRUBY */
+


Reply via email to