You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by nw...@apache.org on 2014/01/14 20:20:47 UTC

[lucy-commits] [01/50] git commit: Add Charmonizer probe for regular expressions

Updated Branches:
  refs/heads/master [created] 40c0e55d4


Add Charmonizer probe for regular expressions

* Check headers for POSIX regexes and PCRE library.
* Check for OS X enhanced regexes (similar to GNU extensions).


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/6ea08d92
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/6ea08d92
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/6ea08d92

Branch: refs/heads/master
Commit: 6ea08d92cfa1a28950c1f63811264dbd5a641b7c
Parents: bbeb7ec
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Sat Mar 2 17:50:22 2013 +0100
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Sat Mar 9 17:51:55 2013 +0100

----------------------------------------------------------------------
 src/Charmonizer/Probe/Headers.c            |  1 +
 src/Charmonizer/Probe/RegularExpressions.c | 57 +++++++++++++++++++++++++
 src/Charmonizer/Probe/RegularExpressions.h | 38 +++++++++++++++++
 3 files changed, 96 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/6ea08d92/src/Charmonizer/Probe/Headers.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Probe/Headers.c b/src/Charmonizer/Probe/Headers.c
index 18974f3..69103ef 100644
--- a/src/Charmonizer/Probe/Headers.c
+++ b/src/Charmonizer/Probe/Headers.c
@@ -171,6 +171,7 @@ chaz_Headers_probe_posix(void) {
         "fcntl.h",
         "grp.h",
         "pwd.h",
+        "regex.h",
         "sys/stat.h",
         "sys/times.h",
         "sys/types.h",

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/6ea08d92/src/Charmonizer/Probe/RegularExpressions.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Probe/RegularExpressions.c b/src/Charmonizer/Probe/RegularExpressions.c
new file mode 100644
index 0000000..60a9034
--- /dev/null
+++ b/src/Charmonizer/Probe/RegularExpressions.c
@@ -0,0 +1,57 @@
+/* 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.
+ */
+
+#include "Charmonizer/Core/HeaderChecker.h"
+#include "Charmonizer/Core/ConfWriter.h"
+#include "Charmonizer/Probe/RegularExpressions.h"
+
+void
+chaz_RegularExpressions_run(void) {
+    int has_regex_h     = chaz_HeadCheck_check_header("regex.h");
+    int has_pcre_h      = chaz_HeadCheck_check_header("pcre.h");
+    int has_pcreposix_h = chaz_HeadCheck_check_header("pcreposix.h");
+
+    chaz_ConfWriter_start_module("RegularExpressions");
+
+    /* PCRE headers. */
+    if (has_pcre_h) {
+        chaz_ConfWriter_add_def("HAS_PCRE_H", NULL);
+    }
+    if (has_pcreposix_h) {
+        chaz_ConfWriter_add_def("HAS_PCREPOSIX_H", NULL);
+    }
+
+    /* Check for OS X enhanced regexes. */
+    if (has_regex_h) {
+        const char *reg_enhanced_code =
+            CHAZ_QUOTE(  #include <regex.h>                             )
+            CHAZ_QUOTE(  int main(int argc, char **argv) {              )
+            CHAZ_QUOTE(      regex_t re;                                )
+            CHAZ_QUOTE(      if (regcomp(&re, "^", REG_ENHANCED)) {     )
+            CHAZ_QUOTE(          return 1;                              )
+            CHAZ_QUOTE(      }                                          )
+            CHAZ_QUOTE(      return 0;                                  )
+            CHAZ_QUOTE(  }                                              );
+
+        if (chaz_CC_test_compile(reg_enhanced_code)) {
+            chaz_ConfWriter_add_def("HAS_REG_ENHANCED", NULL);
+        }
+    }
+
+    chaz_ConfWriter_end_module();
+}
+
+

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/6ea08d92/src/Charmonizer/Probe/RegularExpressions.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Probe/RegularExpressions.h b/src/Charmonizer/Probe/RegularExpressions.h
new file mode 100644
index 0000000..7bf6ec1
--- /dev/null
+++ b/src/Charmonizer/Probe/RegularExpressions.h
@@ -0,0 +1,38 @@
+/* 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/Probe/RegularExpressions.h -- regular expressions.
+ */
+
+#ifndef H_CHAZ_REGULAREXPRESSIONS
+#define H_CHAZ_REGULAREXPRESSIONS
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Run the RegularExpressions module.
+ */
+void chaz_RegularExpressions_run(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* H_CHAZ_REGULAREXPRESSIONS */
+
+
+


[lucy-commits] [04/50] git commit: Introduce chaz_Util_join

Posted by nw...@apache.org.
Introduce chaz_Util_join


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/8cf7b992
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/8cf7b992
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/8cf7b992

Branch: refs/heads/master
Commit: 8cf7b992f5a9c159692604424347c4ffef41b561
Parents: 5924fa9
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Sun Mar 24 17:06:40 2013 +0100
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Sun Mar 24 17:13:47 2013 +0100

----------------------------------------------------------------------
 src/Charmonizer/Core/Compiler.c        | 31 ++++++--------------
 src/Charmonizer/Core/Make.c            | 26 +++++------------
 src/Charmonizer/Core/OperatingSystem.c | 28 +++++-------------
 src/Charmonizer/Core/Util.c            | 44 +++++++++++++++++++++++++++++
 src/Charmonizer/Core/Util.h            |  5 ++++
 5 files changed, 71 insertions(+), 63 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/8cf7b992/src/Charmonizer/Core/Compiler.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Compiler.c b/src/Charmonizer/Core/Compiler.c
index 151d89a..516823c 100644
--- a/src/Charmonizer/Core/Compiler.c
+++ b/src/Charmonizer/Core/Compiler.c
@@ -84,16 +84,10 @@ chaz_CC_init(const char *compiler_command, const char *compiler_flags) {
     chaz_CC.extra_cflags    = chaz_Util_strdup("");
 
     /* Set names for the targets which we "try" to compile. */
-    {
-        const char *exe_ext = chaz_OS_exe_ext();
-        const char *obj_ext = chaz_OS_obj_ext();
-        size_t exe_len = strlen(CHAZ_CC_TRY_BASENAME) + strlen(exe_ext) + 1;
-        size_t obj_len = strlen(CHAZ_CC_TRY_BASENAME) + strlen(obj_ext) + 1;
-        chaz_CC.try_exe_name = (char*)malloc(exe_len);
-        chaz_CC.try_obj_name = (char*)malloc(obj_len);
-        sprintf(chaz_CC.try_exe_name, "%s%s", CHAZ_CC_TRY_BASENAME, exe_ext);
-        sprintf(chaz_CC.try_obj_name, "%s%s", CHAZ_CC_TRY_BASENAME, obj_ext);
-    }
+    chaz_CC.try_exe_name
+        = chaz_Util_join("", CHAZ_CC_TRY_BASENAME, chaz_OS_exe_ext(), NULL);
+    chaz_CC.try_obj_name
+        = chaz_Util_join("", CHAZ_CC_TRY_BASENAME, chaz_OS_obj_ext(), NULL);
 
     /* If we can't compile anything, game over. */
     if (chaz_Util_verbosity) {
@@ -337,12 +331,8 @@ chaz_CC_add_extra_cflags(const char *flags) {
         chaz_CC.extra_cflags = chaz_Util_strdup(flags);
     }
     else {
-        size_t size = strlen(chaz_CC.extra_cflags)
-                      + 1   // Space separation
-                      + strlen(flags)
-                      + 1;  // NULL termination
-        char *newflags = (char*)malloc(size);
-        sprintf(newflags, "%s %s", chaz_CC.extra_cflags, flags);
+        char *newflags
+            = chaz_Util_join(" ", chaz_CC.extra_cflags, flags, NULL);
         free(chaz_CC.extra_cflags);
         chaz_CC.extra_cflags = newflags;
     }
@@ -350,9 +340,7 @@ chaz_CC_add_extra_cflags(const char *flags) {
 
 void
 chaz_CC_add_include_dir(const char *dir) {
-    size_t size = strlen(chaz_CC.include_flag) + strlen(dir) + 1;
-    char *flag = (char*)malloc(size);
-    sprintf(flag, "%s%s", chaz_CC.include_flag, dir);
+    char *flag = chaz_Util_join("", chaz_CC.include_flag, dir, NULL);
     chaz_CC_add_extra_cflags(flag);
     free(flag);
 }
@@ -361,7 +349,6 @@ void
 chaz_CC_set_optimization_level(const char *level) {
     const char *opt_flag;
     char *flag;
-    size_t size;
 
     if (chaz_CC.intval__MSC_VER) {
         opt_flag = "/O";
@@ -369,9 +356,7 @@ chaz_CC_set_optimization_level(const char *level) {
     else {
         opt_flag = "-O";
     }
-    size = strlen(opt_flag) + strlen(level) + 1;
-    flag = (char*)malloc(size);
-    sprintf(flag, "%s%s", opt_flag, level);
+    flag = chaz_Util_join("", opt_flag, level, NULL);
     chaz_CC_add_extra_cflags(flag);
     free(flag);
 }

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/8cf7b992/src/Charmonizer/Core/Make.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Make.c b/src/Charmonizer/Core/Make.c
index 9a44d27..a434fdc 100644
--- a/src/Charmonizer/Core/Make.c
+++ b/src/Charmonizer/Core/Make.c
@@ -123,10 +123,7 @@ chaz_Make_detect(const char *make1, ...) {
 static int
 chaz_Make_audition(const char *make) {
     int succeeded = 0;
-    const char pattern[] = "%s -f _charm_Makefile";
-    size_t size = strlen(make) + sizeof(pattern) + 10;
-    char *command = (char*)malloc(size);
-    sprintf(command, pattern, make);
+    char *command = chaz_Util_join(" ", make, "-f", "_charm_Makefile", NULL);
 
     chaz_Util_remove_and_verify("_charm_foo");
     chaz_OS_run_redirected(command, "_charm_foo");
@@ -436,8 +433,7 @@ chaz_MakeRule_add_target(chaz_MakeRule *rule, const char *target) {
         targets = chaz_Util_strdup(target);
     }
     else {
-        targets = (char*)malloc(strlen(rule->targets) + strlen(target) + 20);
-        sprintf(targets, "%s %s", rule->targets, target);
+        targets = chaz_Util_join(" ", rule->targets, target, NULL);
         free(rule->targets);
     }
 
@@ -452,8 +448,7 @@ chaz_MakeRule_add_prereq(chaz_MakeRule *rule, const char *prereq) {
         prereqs = chaz_Util_strdup(prereq);
     }
     else {
-        prereqs = (char*)malloc(strlen(rule->prereqs) + strlen(prereq) + 20);
-        sprintf(prereqs, "%s %s", rule->prereqs, prereq);
+        prereqs = chaz_Util_join(" ", rule->prereqs, prereq, NULL);
         free(rule->prereqs);
     }
 
@@ -485,21 +480,16 @@ chaz_MakeRule_add_command_make(chaz_MakeRule *rule, const char *dir,
 
     if (chaz_Make.is_gnu_make) {
         if (!target) {
-            size_t size = strlen(dir) + 20;
-            command = (char*)malloc(size);
-            sprintf(command, "$(MAKE) -C %s", dir);
+            command = chaz_Util_join(" ", "$(MAKE)", "-C", dir, NULL);
         }
         else {
-            size_t size = strlen(dir) + strlen(target) + 20;
-            command = (char*)malloc(size);
-            sprintf(command, "$(MAKE) -C %s %s", dir, target);
+            command = chaz_Util_join(" ", "$(MAKE)", "-C", dir, target, NULL);
         }
         chaz_MakeRule_add_command(rule, command);
         free(command);
     }
     else if (chaz_Make.is_nmake) {
-        command = (char*)malloc(strlen(dir) + 20);
-        sprintf(command, "cd %s", dir);
+        command = chaz_Util_join(" ", "cd", dir, NULL);
         chaz_MakeRule_add_command(rule, command);
         free(command);
 
@@ -507,9 +497,7 @@ chaz_MakeRule_add_command_make(chaz_MakeRule *rule, const char *dir,
             chaz_MakeRule_add_command(rule, "$(MAKE)");
         }
         else {
-            size_t size = strlen(target) + 20;
-            command = (char*)malloc(size);
-            sprintf(command, "$(MAKE) %s", target);
+            command = chaz_Util_join(" ", "$(MAKE)", target, NULL);
             chaz_MakeRule_add_command(rule, command);
             free(command);
         }

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/8cf7b992/src/Charmonizer/Core/OperatingSystem.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/OperatingSystem.c b/src/Charmonizer/Core/OperatingSystem.c
index 3a9975f..519cffc 100644
--- a/src/Charmonizer/Core/OperatingSystem.c
+++ b/src/Charmonizer/Core/OperatingSystem.c
@@ -172,11 +172,9 @@ chaz_OS_remove(const char *name) {
 
 int
 chaz_OS_run_local_redirected(const char *command, const char *path) {
-    size_t size = strlen(command) + strlen(chaz_OS.local_command_start) + 20;
-    char *local_command = (char*)malloc(size);
-    int retval;
-    sprintf(local_command, "%s%s", chaz_OS.local_command_start, command);
-    retval = chaz_OS_run_redirected(local_command, path);
+    char *local_command
+        = chaz_Util_join("", chaz_OS.local_command_start, command, NULL);
+    int retval = chaz_OS_run_redirected(local_command, path);
     free(local_command);
     return retval;
 }
@@ -193,13 +191,7 @@ chaz_OS_run_redirected(const char *command, const char *path) {
     if (chaz_OS.shell_type == CHAZ_OS_POSIX
         || chaz_OS.shell_type == CHAZ_OS_CMD_EXE
         ) {
-        char pattern[] = "%s > %s 2>&1";
-        size_t size = sizeof(pattern)
-                      + strlen(command)
-                      + strlen(path)
-                      + 10;
-        quiet_command = (char*)malloc(size);
-        sprintf(quiet_command, pattern, command, path);
+        quiet_command = chaz_Util_join(" ", command, ">", path, "2>&1", NULL);
     }
     else {
         chaz_Util_die("Don't know the shell type");
@@ -224,9 +216,7 @@ chaz_OS_mkdir(const char *filepath) {
     if (chaz_OS.shell_type == CHAZ_OS_POSIX
         || chaz_OS.shell_type == CHAZ_OS_CMD_EXE
        ) {
-        unsigned size = sizeof("mkdir") + 1 + strlen(filepath) + 1;
-        command = (char*)malloc(size);
-        sprintf(command, "mkdir %s", filepath);
+        command = chaz_Util_join(" ", "mkdir", filepath, NULL);
     }
     else {
         chaz_Util_die("Don't know the shell type");
@@ -239,14 +229,10 @@ void
 chaz_OS_rmdir(const char *filepath) {
     char *command = NULL;
     if (chaz_OS.shell_type == CHAZ_OS_POSIX) {
-        unsigned size = strlen("rmdir") + 1 + strlen(filepath) + 1;
-        command = (char*)malloc(size);
-        sprintf(command, "rmdir %s", filepath);
+        command = chaz_Util_join(" ", "rmdir", filepath, NULL);
     }
     else if (chaz_OS.shell_type == CHAZ_OS_CMD_EXE) {
-        unsigned size = strlen("rmdir /q") + 1 + strlen(filepath) + 1;
-        command = (char*)malloc(size);
-        sprintf(command, "rmdir /q %s", filepath);
+        command = chaz_Util_join(" ", "rmdir", "/q", filepath, NULL);
     }
     else {
         chaz_Util_die("Don't know the shell type");

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/8cf7b992/src/Charmonizer/Core/Util.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Util.c b/src/Charmonizer/Core/Util.c
index 8f9e269..575e0db 100644
--- a/src/Charmonizer/Core/Util.c
+++ b/src/Charmonizer/Core/Util.c
@@ -116,6 +116,50 @@ chaz_Util_strdup(const char *string) {
     return copy;
 }
 
+char*
+chaz_Util_join(const char *sep, ...) {
+    va_list args;
+    const char *string;
+    char *result, *p;
+    size_t sep_len = strlen(sep);
+    size_t size;
+    int i;
+
+    /* Determine result size. */
+    va_start(args, sep);
+    size = 1;
+    string = va_arg(args, const char*);
+    for (i = 0; string; ++i) {
+        if (i != 0) { size += sep_len; }
+        size += strlen(string);
+        string = va_arg(args, const char*);
+    }
+    va_end(args);
+
+    result = (char*)malloc(size);
+
+    /* Create result string. */
+    va_start(args, sep);
+    p = result;
+    string = va_arg(args, const char*);
+    for (i = 0; string; ++i) {
+        size_t len;
+        if (i != 0) {
+            memcpy(p, sep, sep_len);
+            p += sep_len;
+        }
+        len = strlen(string);
+        memcpy(p, string, len);
+        p += len;
+        string = va_arg(args, const char*);
+    }
+    va_end(args);
+
+    *p = '\0';
+
+    return result;
+}
+
 void
 chaz_Util_die(const char* format, ...) {
     va_list args;

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/8cf7b992/src/Charmonizer/Core/Util.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Util.h b/src/Charmonizer/Core/Util.h
index 6dbfd90..cde04d0 100644
--- a/src/Charmonizer/Core/Util.h
+++ b/src/Charmonizer/Core/Util.h
@@ -46,6 +46,11 @@ chaz_Util_slurp_file(const char *file_path, size_t *len_ptr);
 char*
 chaz_Util_strdup(const char *string);
 
+/* Join a NULL-terminated list of strings using a separator.
+ */
+char*
+chaz_Util_join(const char *sep, ...);
+
 /* Get the length of a file (may overshoot on text files under DOS).
  */
 long


[lucy-commits] [10/50] git commit: Add chaz_CFlags_add_define

Posted by nw...@apache.org.
Add chaz_CFlags_add_define


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/b155655a
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/b155655a
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/b155655a

Branch: refs/heads/master
Commit: b155655ac25a6aca6bd5b643450588b37846b762
Parents: b5f6870
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Wed Apr 3 18:44:28 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Mon Apr 8 21:23:22 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Core/CFlags.c | 22 ++++++++++++++++++++++
 src/Charmonizer/Core/CFlags.h |  4 ++++
 2 files changed, 26 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/b155655a/src/Charmonizer/Core/CFlags.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/CFlags.c b/src/Charmonizer/Core/CFlags.c
index 6978a43..180427e 100644
--- a/src/Charmonizer/Core/CFlags.c
+++ b/src/Charmonizer/Core/CFlags.c
@@ -98,6 +98,28 @@ chaz_CFlags_set_output_exe(chaz_CFlags *flags, const char *filename) {
 }
 
 void
+chaz_CFlags_add_define(chaz_CFlags *flags, const char *name,
+                       const char *value) {
+    const char *define;
+    char *string;
+    if (flags->style == CHAZ_CFLAGS_STYLE_MSVC) {
+        define = "/D";
+    }
+    else {
+        /* POSIX */
+        define = "-D ";
+    }
+    if (value) {
+        string = chaz_Util_join("", define, name, "=", value, NULL);
+    }
+    else {
+        string = chaz_Util_join("", define, name, NULL);
+    }
+    chaz_CFlags_append(flags, string);
+    free(string);
+}
+
+void
 chaz_CFlags_add_include_dir(chaz_CFlags *flags, const char *dir) {
     const char *include;
     char *string;

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/b155655a/src/Charmonizer/Core/CFlags.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/CFlags.h b/src/Charmonizer/Core/CFlags.h
index 4749460..4e712ed 100644
--- a/src/Charmonizer/Core/CFlags.h
+++ b/src/Charmonizer/Core/CFlags.h
@@ -52,6 +52,10 @@ void
 chaz_CFlags_set_output_exe(chaz_CFlags *flags, const char *filename);
 
 void
+chaz_CFlags_add_define(chaz_CFlags *flags, const char *name,
+                       const char *value);
+
+void
 chaz_CFlags_add_include_dir(chaz_CFlags *flags, const char *dir);
 
 void


[lucy-commits] [15/50] git commit: Add chaz_CC_shared_lib_file

Posted by nw...@apache.org.
Add chaz_CC_shared_lib_file

Returns the filename of a shared library.


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/4dcac5a1
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/4dcac5a1
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/4dcac5a1

Branch: refs/heads/master
Commit: 4dcac5a1fdf3ea9060800bfaccd16230f008fb76
Parents: 271887f
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Mon Apr 29 02:22:58 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Tue Apr 30 22:28:31 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Core/Compiler.c | 15 +++++++++++++++
 src/Charmonizer/Core/Compiler.h |  3 +++
 src/Charmonizer/Core/Make.c     |  5 ++++-
 src/Charmonizer/Core/Make.h     |  4 ++--
 4 files changed, 24 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/4dcac5a1/src/Charmonizer/Core/Compiler.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Compiler.c b/src/Charmonizer/Core/Compiler.c
index 4ec8306..fb0d960 100644
--- a/src/Charmonizer/Core/Compiler.c
+++ b/src/Charmonizer/Core/Compiler.c
@@ -359,4 +359,19 @@ chaz_CC_link_command() {
     }
 }
 
+char*
+chaz_CC_shared_lib_file(const char *name) {
+    const char *prefix = "";
+    if (!chaz_CC.intval__MSC_VER) {
+        if (strcmp(chaz_OS_name(), "cygwin") == 0) {
+            prefix = "cyg";
+        }
+        else {
+            prefix = "lib";
+        }
+    }
+    const char *shlib_ext = chaz_OS_shared_lib_ext();
+    return chaz_Util_join("", prefix, name, shlib_ext, NULL);
+}
+
 

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/4dcac5a1/src/Charmonizer/Core/Compiler.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Compiler.h b/src/Charmonizer/Core/Compiler.h
index 68826ed..0ec499d 100644
--- a/src/Charmonizer/Core/Compiler.h
+++ b/src/Charmonizer/Core/Compiler.h
@@ -103,6 +103,9 @@ chaz_CC_msvc_version_num(void);
 const char*
 chaz_CC_link_command(void);
 
+char*
+chaz_CC_shared_lib_file(const char *name);
+
 #ifdef __cplusplus
 }
 #endif

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/4dcac5a1/src/Charmonizer/Core/Make.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Make.c b/src/Charmonizer/Core/Make.c
index 957be14..73ba316 100644
--- a/src/Charmonizer/Core/Make.c
+++ b/src/Charmonizer/Core/Make.c
@@ -332,7 +332,7 @@ chaz_MakeFile_add_compiled_exe(chaz_MakeFile *makefile, const char *exe,
 }
 
 chaz_MakeRule*
-chaz_MakeFile_add_shared_lib(chaz_MakeFile *makefile, const char *shared_lib,
+chaz_MakeFile_add_shared_lib(chaz_MakeFile *makefile, const char *name,
                              const char *sources, chaz_CFlags *link_flags) {
     int            cflags_style = chaz_CC_get_cflags_style();
     chaz_CFlags   *local_flags  = chaz_CFlags_new(cflags_style);
@@ -340,8 +340,10 @@ chaz_MakeFile_add_shared_lib(chaz_MakeFile *makefile, const char *shared_lib,
     const char    *link_flags_string = "";
     const char    *local_flags_string;
     chaz_MakeRule *rule;
+    char          *shared_lib;
     char          *command;
 
+    shared_lib = chaz_CC_shared_lib_file(name);
     rule = chaz_MakeFile_add_rule(makefile, shared_lib, sources);
 
     if (link_flags) {
@@ -357,6 +359,7 @@ chaz_MakeFile_add_shared_lib(chaz_MakeFile *makefile, const char *shared_lib,
     chaz_MakeFile_add_to_cleanup(makefile, shared_lib);
 
     chaz_CFlags_destroy(local_flags);
+    free(shared_lib);
     free(command);
     return rule;
 }

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/4dcac5a1/src/Charmonizer/Core/Make.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Make.h b/src/Charmonizer/Core/Make.h
index 1a365fd..47a55c5 100644
--- a/src/Charmonizer/Core/Make.h
+++ b/src/Charmonizer/Core/Make.h
@@ -138,12 +138,12 @@ chaz_MakeFile_add_compiled_exe(chaz_MakeFile *makefile, const char *exe,
  * to the list of files to clean.
  *
  * @param makefile The makefile.
- * @param shared_lib The name of the shared library.
+ * @param name The name of the shared library without prefix or extension.
  * @param sources The list of source files.
  * @param link_flags Additional link flags.
  */
 chaz_MakeRule*
-chaz_MakeFile_add_shared_lib(chaz_MakeFile *makefile, const char *shared_lib,
+chaz_MakeFile_add_shared_lib(chaz_MakeFile *makefile, const char *name,
                              const char *sources, chaz_CFlags *link_flags);
 
 /** Write the makefile to a file named 'Makefile' in the current directory.


[lucy-commits] [27/50] git commit: Move obj_ext to chaz_CC

Posted by nw...@apache.org.
Move obj_ext to chaz_CC

It depends on the compiler not the OS.


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/85252b4b
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/85252b4b
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/85252b4b

Branch: refs/heads/master
Commit: 85252b4bd9f13e1fe96a50ce3ec1448d44170e9d
Parents: 342197f
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Sat May 4 21:39:19 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Sat May 4 22:47:25 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Core/Compiler.c        | 27 +++++++++++++++++----------
 src/Charmonizer/Core/Compiler.h        |  5 +++++
 src/Charmonizer/Core/OperatingSystem.c | 10 +---------
 src/Charmonizer/Core/OperatingSystem.h |  5 -----
 4 files changed, 23 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/85252b4b/src/Charmonizer/Core/Compiler.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Compiler.c b/src/Charmonizer/Core/Compiler.c
index 22390b4..f2683b5 100644
--- a/src/Charmonizer/Core/Compiler.c
+++ b/src/Charmonizer/Core/Compiler.c
@@ -36,7 +36,7 @@ static struct {
     char     *cc_command;
     char     *cflags;
     char     *try_exe_name;
-    char     *try_obj_name;
+    char      obj_ext[10];
     char      gcc_version_str[30];
     int       cflags_style;
     int       intval___GNUC__;
@@ -47,8 +47,8 @@ static struct {
     chaz_CFlags *extra_cflags;
     chaz_CFlags *temp_cflags;
 } chaz_CC = {
-    NULL, NULL, NULL, NULL,
-    "",
+    NULL, NULL, NULL,
+    "", "",
     0, 0, 0, 0, 0, 0,
     NULL, NULL
 };
@@ -69,18 +69,18 @@ chaz_CC_init(const char *compiler_command, const char *compiler_flags) {
     /* Set names for the targets which we "try" to compile. */
     chaz_CC.try_exe_name
         = chaz_Util_join("", CHAZ_CC_TRY_BASENAME, chaz_OS_exe_ext(), NULL);
-    chaz_CC.try_obj_name
-        = chaz_Util_join("", CHAZ_CC_TRY_BASENAME, chaz_OS_obj_ext(), NULL);
 
     /* If we can't compile anything, game over. */
     if (chaz_Util_verbosity) {
         printf("Trying to compile a small test file...\n");
     }
     /* Try MSVC argument style. */
+    strcpy(chaz_CC.obj_ext, ".obj");
     chaz_CC.cflags_style = CHAZ_CFLAGS_STYLE_MSVC;
     compile_succeeded = chaz_CC_test_compile(code);
     if (!compile_succeeded) {
         /* Try POSIX argument style. */
+        strcpy(chaz_CC.obj_ext, ".o");
         chaz_CC.cflags_style = CHAZ_CFLAGS_STYLE_POSIX;
         compile_succeeded = chaz_CC_test_compile(code);
     }
@@ -152,7 +152,6 @@ void
 chaz_CC_clean_up(void) {
     free(chaz_CC.cc_command);
     free(chaz_CC.cflags);
-    free(chaz_CC.try_obj_name);
     free(chaz_CC.try_exe_name);
     chaz_CFlags_destroy(chaz_CC.extra_cflags);
     chaz_CFlags_destroy(chaz_CC.temp_cflags);
@@ -223,7 +222,7 @@ chaz_CC_compile_obj(const char *source_path, const char *obj_name,
     const char *extra_cflags_string = "";
     const char *temp_cflags_string  = "";
     const char *local_cflags_string;
-    char *obj_file = chaz_Util_join("", obj_name, chaz_OS_obj_ext(), NULL);
+    char *obj_file = chaz_Util_join("", obj_name, chaz_CC.obj_ext, NULL);
     char *command;
     int result;
 
@@ -264,12 +263,15 @@ chaz_CC_compile_obj(const char *source_path, const char *obj_name,
 int
 chaz_CC_test_compile(const char *source) {
     int compile_succeeded;
-    if (!chaz_Util_remove_and_verify(chaz_CC.try_obj_name)) {
-        chaz_Util_die("Failed to delete file '%s'", chaz_CC.try_obj_name);
+    char *try_obj_name
+        = chaz_Util_join("", CHAZ_CC_TRY_BASENAME, chaz_CC.obj_ext, NULL);
+    if (!chaz_Util_remove_and_verify(try_obj_name)) {
+        chaz_Util_die("Failed to delete file '%s'", try_obj_name);
     }
     compile_succeeded = chaz_CC_compile_obj(CHAZ_CC_TRY_SOURCE_PATH,
                                             CHAZ_CC_TRY_BASENAME, source);
-    chaz_Util_remove_and_verify(chaz_CC.try_obj_name);
+    chaz_Util_remove_and_verify(try_obj_name);
+    free(try_obj_name);
     return compile_succeeded;
 }
 
@@ -332,6 +334,11 @@ chaz_CC_get_temp_cflags(void) {
     return chaz_CC.temp_cflags;
 }
 
+const char*
+chaz_CC_obj_ext(void) {
+    return chaz_CC.obj_ext;
+}
+
 int
 chaz_CC_gcc_version_num(void) {
     return 10000 * chaz_CC.intval___GNUC__

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/85252b4b/src/Charmonizer/Core/Compiler.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Compiler.h b/src/Charmonizer/Core/Compiler.h
index 0ec499d..1e7803f 100644
--- a/src/Charmonizer/Core/Compiler.h
+++ b/src/Charmonizer/Core/Compiler.h
@@ -91,6 +91,11 @@ chaz_CC_get_extra_cflags(void);
 chaz_CFlags*
 chaz_CC_get_temp_cflags(void);
 
+/* Return the extension for a compiled object.
+ */
+const char*
+chaz_CC_obj_ext(void);
+
 int
 chaz_CC_gcc_version_num(void);
 

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/85252b4b/src/Charmonizer/Core/OperatingSystem.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/OperatingSystem.c b/src/Charmonizer/Core/OperatingSystem.c
index 4a23958..a8f933b 100644
--- a/src/Charmonizer/Core/OperatingSystem.c
+++ b/src/Charmonizer/Core/OperatingSystem.c
@@ -31,11 +31,10 @@ static struct {
     char name[CHAZ_OS_NAME_MAX+1];
     char dev_null[20];
     char exe_ext[5];
-    char obj_ext[5];
     char shared_lib_ext[7];
     char local_command_start[3];
     int  shell_type;
-} chaz_OS = { "", "", "", "", "", "", 0 };
+} chaz_OS = { "", "", "", "", "", 0 };
 
 void
 chaz_OS_init(void) {
@@ -68,7 +67,6 @@ chaz_OS_init(void) {
 
         strcpy(chaz_OS.dev_null, "/dev/null");
         strcpy(chaz_OS.exe_ext, "");
-        strcpy(chaz_OS.obj_ext, ".o");
         if (memcmp(chaz_OS.name, "darwin", 6) == 0) {
             strcpy(chaz_OS.shared_lib_ext, ".dylib");
         }
@@ -84,7 +82,6 @@ chaz_OS_init(void) {
         strcpy(chaz_OS.name, "windows");
         strcpy(chaz_OS.dev_null, "nul");
         strcpy(chaz_OS.exe_ext, ".exe");
-        strcpy(chaz_OS.obj_ext, ".obj");
         strcpy(chaz_OS.shared_lib_ext, ".dll");
         strcpy(chaz_OS.local_command_start, ".\\");
         chaz_OS.shell_type = CHAZ_OS_CMD_EXE;
@@ -116,11 +113,6 @@ chaz_OS_exe_ext(void) {
 }
 
 const char*
-chaz_OS_obj_ext(void) {
-    return chaz_OS.obj_ext;
-}
-
-const char*
 chaz_OS_shared_lib_ext(void) {
     return chaz_OS.shared_lib_ext;
 }

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/85252b4b/src/Charmonizer/Core/OperatingSystem.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/OperatingSystem.h b/src/Charmonizer/Core/OperatingSystem.h
index d28b78b..c335cf3 100644
--- a/src/Charmonizer/Core/OperatingSystem.h
+++ b/src/Charmonizer/Core/OperatingSystem.h
@@ -84,11 +84,6 @@ chaz_OS_is_cygwin(void);
 const char*
 chaz_OS_exe_ext(void);
 
-/* Return the extension for a compiled object on this system.
- */
-const char*
-chaz_OS_obj_ext(void);
-
 /* Return the extension for a shared object on this system.
  */
 const char*


[lucy-commits] [31/50] git commit: Move detection of directory separator to chaz_OS

Posted by nw...@apache.org.
Move detection of directory separator to chaz_OS


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/5d9d3384
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/5d9d3384
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/5d9d3384

Branch: refs/heads/master
Commit: 5d9d3384542ea5016ce6a013789b9f399cd88c8b
Parents: cc1ded3
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Tue May 14 21:30:52 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Wed May 15 19:13:53 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Core/OperatingSystem.c | 10 +++++++++-
 src/Charmonizer/Core/OperatingSystem.h |  5 +++++
 src/Charmonizer/Probe/DirManip.c       | 26 +-------------------------
 3 files changed, 15 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/5d9d3384/src/Charmonizer/Core/OperatingSystem.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/OperatingSystem.c b/src/Charmonizer/Core/OperatingSystem.c
index a8f933b..31db30c 100644
--- a/src/Charmonizer/Core/OperatingSystem.c
+++ b/src/Charmonizer/Core/OperatingSystem.c
@@ -30,11 +30,12 @@
 static struct {
     char name[CHAZ_OS_NAME_MAX+1];
     char dev_null[20];
+    char dir_sep[2];
     char exe_ext[5];
     char shared_lib_ext[7];
     char local_command_start[3];
     int  shell_type;
-} chaz_OS = { "", "", "", "", "", 0 };
+} chaz_OS = { "", "", "", "", "", "", 0 };
 
 void
 chaz_OS_init(void) {
@@ -66,6 +67,7 @@ chaz_OS_init(void) {
         free(uname);
 
         strcpy(chaz_OS.dev_null, "/dev/null");
+        strcpy(chaz_OS.dir_sep, "/");
         strcpy(chaz_OS.exe_ext, "");
         if (memcmp(chaz_OS.name, "darwin", 6) == 0) {
             strcpy(chaz_OS.shared_lib_ext, ".dylib");
@@ -81,6 +83,7 @@ chaz_OS_init(void) {
     else if (chaz_Util_can_open_file("nul")) {
         strcpy(chaz_OS.name, "windows");
         strcpy(chaz_OS.dev_null, "nul");
+        strcpy(chaz_OS.dir_sep, "\\");
         strcpy(chaz_OS.exe_ext, ".exe");
         strcpy(chaz_OS.shared_lib_ext, ".dll");
         strcpy(chaz_OS.local_command_start, ".\\");
@@ -122,6 +125,11 @@ chaz_OS_dev_null(void) {
     return chaz_OS.dev_null;
 }
 
+const char*
+chaz_OS_dir_sep(void) {
+    return chaz_OS.dir_sep;
+}
+
 int
 chaz_OS_shell_type(void) {
     return chaz_OS.shell_type;

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/5d9d3384/src/Charmonizer/Core/OperatingSystem.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/OperatingSystem.h b/src/Charmonizer/Core/OperatingSystem.h
index c335cf3..84a7ac0 100644
--- a/src/Charmonizer/Core/OperatingSystem.h
+++ b/src/Charmonizer/Core/OperatingSystem.h
@@ -94,6 +94,11 @@ chaz_OS_shared_lib_ext(void);
 const char*
 chaz_OS_dev_null(void);
 
+/* Return the directory separator on this system.
+ */
+const char*
+chaz_OS_dir_sep(void);
+
 /* Return the shell type of this system.
  */
 int

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/5d9d3384/src/Charmonizer/Probe/DirManip.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Probe/DirManip.c b/src/Charmonizer/Probe/DirManip.c
index 8664ed6..47f68df 100644
--- a/src/Charmonizer/Probe/DirManip.c
+++ b/src/Charmonizer/Probe/DirManip.c
@@ -117,23 +117,9 @@ chaz_DirManip_try_rmdir(void) {
     if (chaz_DirManip_compile_rmdir("direct.h"))   { return; }
 }
 
-static int
-chaz_DirManip_is_cygwin(void) {
-    static int is_cygwin = -1;
-    static const char cygwin_code[] =
-        CHAZ_QUOTE(#ifndef __CYGWIN__            )
-        CHAZ_QUOTE(  #error "Not Cygwin"         )
-        CHAZ_QUOTE(#endif                        )
-        CHAZ_QUOTE(int main() { return 0; }      );
-    if (is_cygwin == -1) {
-        is_cygwin = chaz_CC_test_compile(cygwin_code);
-    }
-    return is_cygwin;
-}
-
 void
 chaz_DirManip_run(void) {
-    char dir_sep[3];
+    const char *dir_sep = chaz_OS_dir_sep();
     int remove_zaps_dirs = false;
     int has_dirent_h = chaz_HeadCheck_check_header("dirent.h");
     int has_direct_h = chaz_HeadCheck_check_header("direct.h");
@@ -191,16 +177,6 @@ chaz_DirManip_run(void) {
         chaz_ConfWriter_add_def("MAKEDIR_MODE_IGNORED", "1");
     }
 
-    if (chaz_DirManip_is_cygwin()) {
-        strcpy(dir_sep, "/");
-    }
-    else if (chaz_HeadCheck_check_header("windows.h")) {
-        strcpy(dir_sep, "\\\\");
-    }
-    else {
-        strcpy(dir_sep, "/");
-    }
-
     {
         char scratch[5];
         sprintf(scratch, "\"%s\"", dir_sep);


[lucy-commits] [02/50] git commit: Add Charmonizer probe for math library flags

Posted by nw...@apache.org.
Add Charmonizer probe for math library flags


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/f5a3106e
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/f5a3106e
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/f5a3106e

Branch: refs/heads/master
Commit: f5a3106e95cca1e003b00f52beda89b429cc111d
Parents: f098de3
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Thu Mar 14 13:31:17 2013 +0100
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Thu Mar 14 13:42:59 2013 +0100

----------------------------------------------------------------------
 src/Charmonizer/Core/Compiler.c |  6 ++++++
 src/Charmonizer/Core/Compiler.h |  5 +++++
 src/Charmonizer/Probe/Floats.c  | 37 ++++++++++++++++++++++++++++++++++++
 src/Charmonizer/Probe/Floats.h  |  5 +++++
 4 files changed, 53 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/f5a3106e/src/Charmonizer/Core/Compiler.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Compiler.c b/src/Charmonizer/Core/Compiler.c
index 13bb0cd..19dbbb1 100644
--- a/src/Charmonizer/Core/Compiler.c
+++ b/src/Charmonizer/Core/Compiler.c
@@ -325,6 +325,12 @@ chaz_CC_capture_output(const char *source, size_t *output_len) {
 }
 
 void
+chaz_CC_set_extra_cflags(const char *flags) {
+    free(chaz_CC.extra_cflags);
+    chaz_CC.extra_cflags = chaz_Util_strdup(flags);
+}
+
+void
 chaz_CC_add_extra_cflags(const char *flags) {
     if (!strlen(chaz_CC.extra_cflags)) {
         free(chaz_CC.extra_cflags);

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/f5a3106e/src/Charmonizer/Core/Compiler.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Compiler.h b/src/Charmonizer/Core/Compiler.h
index 69469e6..c398148 100644
--- a/src/Charmonizer/Core/Compiler.h
+++ b/src/Charmonizer/Core/Compiler.h
@@ -68,6 +68,11 @@ chaz_CC_clean_up(void);
 void
 chaz_CC_set_warnings_as_errors(const int flag);
 
+/* (Re)set "extra" cflags.
+ */
+void
+chaz_CC_set_extra_cflags(const char *);
+
 /* Concatenate onto the end of the "extra" cflags.  A space will be inserted
  * automatically.
  */

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/f5a3106e/src/Charmonizer/Probe/Floats.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Probe/Floats.c b/src/Charmonizer/Probe/Floats.c
index c45526b..d4e6d58 100644
--- a/src/Charmonizer/Probe/Floats.c
+++ b/src/Charmonizer/Probe/Floats.c
@@ -46,4 +46,41 @@ chaz_Floats_run(void) {
     chaz_ConfWriter_end_module();
 }
 
+const char*
+chaz_Floats_math_library_flags(void) {
+    static const char sqrt_code[] =
+        CHAZ_QUOTE(  #include <math.h>                              )
+        CHAZ_QUOTE(  #include <stdio.h>                             )
+        CHAZ_QUOTE(  int main(void) {                               )
+        CHAZ_QUOTE(      printf("%p\n", sqrt);                      )
+        CHAZ_QUOTE(      return 0;                                  )
+        CHAZ_QUOTE(  }                                              );
+    char   *old_extra_cflags;
+    char   *output = NULL;
+    size_t  output_len;
+
+    output = chaz_CC_capture_output(sqrt_code, &output_len);
+    if (output != NULL) {
+        /* Linking against libm not needed. */
+        free(output);
+        return "";
+    }
+
+    old_extra_cflags = chaz_Util_strdup(chaz_CC_get_extra_cflags());
+    chaz_CC_add_extra_cflags("-lm");
+
+    output = chaz_CC_capture_output(sqrt_code, &output_len);
+
+    /* Restore extra cflags. */
+    chaz_CC_set_extra_cflags(old_extra_cflags);
+    free(old_extra_cflags);
+
+    if (output == NULL) {
+        chaz_Util_die("Don't know how to use math library.");
+    }
+
+    free(output);
+    return "-lm";
+}
+
 

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/f5a3106e/src/Charmonizer/Probe/Floats.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Probe/Floats.h b/src/Charmonizer/Probe/Floats.h
index 79ad734..605b38f 100644
--- a/src/Charmonizer/Probe/Floats.h
+++ b/src/Charmonizer/Probe/Floats.h
@@ -42,6 +42,11 @@ extern "C" {
 void
 chaz_Floats_run(void);
 
+/* Determine which flags are needed to link against the math library.
+ */
+const char*
+chaz_Floats_math_library_flags(void);
+
 #ifdef __cplusplus
 }
 #endif


[lucy-commits] [26/50] git commit: Add FIXME comment for alloca probe under MinGW

Posted by nw...@apache.org.
Add FIXME comment for alloca probe under MinGW


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/342197f9
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/342197f9
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/342197f9

Branch: refs/heads/master
Commit: 342197f9aaa0ddcee937c4ad15ffe638f57e57d0
Parents: 0d81e09
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Sat May 4 19:16:25 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Sat May 4 19:16:25 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Probe/Memory.c | 5 +++++
 1 file changed, 5 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/342197f9/src/Charmonizer/Probe/Memory.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Probe/Memory.c b/src/Charmonizer/Probe/Memory.c
index 0d552f6..947f212 100644
--- a/src/Charmonizer/Probe/Memory.c
+++ b/src/Charmonizer/Probe/Memory.c
@@ -77,6 +77,11 @@ chaz_Memory_probe_alloca(void) {
         chaz_ConfWriter_add_def("alloca", "alloca");
     }
     if (!has_alloca) {
+        /*
+         * FIXME: Under MinGW, alloca is defined in malloc.h. This probe
+         * produces compiler warnings but works regardless. These warnings
+         * are subsequently repeated during the build.
+         */
         sprintf(code_buf, alloca_code, "stdlib.h", "alloca");
         if (chaz_CC_test_compile(code_buf)) {
             has_alloca    = true;


[lucy-commits] [21/50] git commit: Remove newline from Windows rm command

Posted by nw...@apache.org.
Remove newline from Windows rm command


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/e3c8cedf
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/e3c8cedf
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/e3c8cedf

Branch: refs/heads/master
Commit: e3c8cedffe6c218b800b6db43de960518f5cb463
Parents: e815550
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Thu May 2 15:29:25 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Thu May 2 15:30:54 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Core/Make.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/e3c8cedf/src/Charmonizer/Core/Make.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Make.c b/src/Charmonizer/Core/Make.c
index eef026f..4bfdcd5 100644
--- a/src/Charmonizer/Core/Make.c
+++ b/src/Charmonizer/Core/Make.c
@@ -494,7 +494,7 @@ chaz_MakeRule_add_rm_command(chaz_MakeRule *rule, const char *files) {
     }
     else if (shell_type == CHAZ_OS_CMD_EXE) {
         command = chaz_Util_join("", "for %i in (", files,
-                                 ") do @if exist %i del /f %i\n", NULL);
+                                 ") do @if exist %i del /f %i", NULL);
     }
     else {
         chaz_Util_die("Unsupported shell type: %d", shell_type);
@@ -514,7 +514,7 @@ chaz_MakeRule_add_recursive_rm_command(chaz_MakeRule *rule, const char *dirs) {
     }
     else if (shell_type == CHAZ_OS_CMD_EXE) {
         command = chaz_Util_join("", "for %i in (", dirs,
-                                 ") do @if exist %i rmdir /s /q %i\n", NULL);
+                                 ") do @if exist %i rmdir /s /q %i", NULL);
     }
     else {
         chaz_Util_die("Unsupported shell type: %d", shell_type);


[lucy-commits] [23/50] git commit: Remove import library and export file under MSVC

Posted by nw...@apache.org.
Remove import library and export file under MSVC


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/d1337e36
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/d1337e36
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/d1337e36

Branch: refs/heads/master
Commit: d1337e36cc7b2e77f14765c03c5957b3c85290a2
Parents: e3c8ced
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Thu May 2 15:38:21 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Thu May 2 15:44:32 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Core/Make.c | 11 +++++++++++
 1 file changed, 11 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/d1337e36/src/Charmonizer/Core/Make.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Make.c b/src/Charmonizer/Core/Make.c
index 4bfdcd5..a35c1a8 100644
--- a/src/Charmonizer/Core/Make.c
+++ b/src/Charmonizer/Core/Make.c
@@ -333,6 +333,17 @@ chaz_MakeFile_add_shared_lib(chaz_MakeFile *makefile, const char *name,
 
     chaz_MakeRule_add_rm_command(makefile->clean, shared_lib);
 
+    if (chaz_CC_msvc_version_num()) {
+        /* Remove import library and export file under MSVC. */
+        char *filename;
+        filename = chaz_Util_join("", name, ".lib", NULL);
+        chaz_MakeRule_add_rm_command(makefile->clean, filename);
+        free(filename);
+        filename = chaz_Util_join("", name, ".exp", NULL);
+        chaz_MakeRule_add_rm_command(makefile->clean, filename);
+        free(filename);
+    }
+
     chaz_CFlags_destroy(local_flags);
     free(shared_lib);
     free(command);


[lucy-commits] [28/50] git commit: Support GNU make under Windows

Posted by nw...@apache.org.
Support GNU make under Windows


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/11924ab6
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/11924ab6
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/11924ab6

Branch: refs/heads/master
Commit: 11924ab6394a09b09d76cdb96569bde25e9de2f6
Parents: 85252b4
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Sat May 4 22:32:45 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Sat May 4 23:45:38 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Core/Make.c | 35 +++++++++++++++++++++++------------
 src/Charmonizer/Core/Make.h |  5 +++++
 2 files changed, 28 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/11924ab6/src/Charmonizer/Core/Make.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Make.c b/src/Charmonizer/Core/Make.c
index 5210154..f114a37 100644
--- a/src/Charmonizer/Core/Make.c
+++ b/src/Charmonizer/Core/Make.c
@@ -47,9 +47,10 @@ static struct {
     char *make_command;
     int   is_gnu_make;
     int   is_nmake;
+    int   shell_type;
 } chaz_Make = {
     NULL,
-    0, 0
+    0, 0, 0
 };
 
 /* Detect make command.
@@ -82,16 +83,24 @@ void
 chaz_Make_init(void) {
     const char *make;
 
-    chaz_Make_detect("make", "gmake", "nmake", "dmake", NULL);
+    chaz_Make_detect("make", "gmake", "nmake", "dmake", "mingw32-make",
+                     "mingw64-make", NULL);
     make = chaz_Make.make_command;
 
     if (make) {
-        if (strcmp(make, "make") == 0 || strcmp(make, "gmake") == 0) {
+        if (strcmp(make, "make") == 0
+            || strcmp(make, "gmake") == 0
+            || strcmp(make, "mingw32-make") == 0
+            || strcmp(make, "mingw64-make") == 0
+           ) {
             /* TODO: Add a feature test for GNU make. */
             chaz_Make.is_gnu_make = 1;
+            /* TODO: Feature test which shell GNU make uses on Windows. */
+            chaz_Make.shell_type = CHAZ_OS_POSIX;
         }
         else if (strcmp(make, "nmake") == 0) {
             chaz_Make.is_nmake = 1;
+            chaz_Make.shell_type = CHAZ_OS_CMD_EXE;
         }
     }
 }
@@ -106,6 +115,11 @@ chaz_Make_get_make(void) {
     return chaz_Make.make_command;
 }
 
+int
+chaz_Make_shell_type(void) {
+    return chaz_Make.shell_type;
+}
+
 static int
 chaz_Make_detect(const char *make1, ...) {
     va_list args;
@@ -352,7 +366,6 @@ chaz_MakeFile_add_shared_lib(chaz_MakeFile *makefile, const char *name,
 
 void
 chaz_MakeFile_write(chaz_MakeFile *makefile) {
-    int     shell_type = chaz_OS_shell_type();
     FILE   *out;
     size_t  i;
 
@@ -497,18 +510,17 @@ chaz_MakeRule_add_command(chaz_MakeRule *rule, const char *command) {
 
 void
 chaz_MakeRule_add_rm_command(chaz_MakeRule *rule, const char *files) {
-    int   shell_type = chaz_OS_shell_type();
     char *command;
 
-    if (shell_type == CHAZ_OS_POSIX) {
+    if (chaz_Make.shell_type == CHAZ_OS_POSIX) {
         command = chaz_Util_join(" ", "rm -f", files, NULL);
     }
-    else if (shell_type == CHAZ_OS_CMD_EXE) {
+    else if (chaz_Make.shell_type == CHAZ_OS_CMD_EXE) {
         command = chaz_Util_join("", "for %i in (", files,
                                  ") do @if exist %i del /f %i", NULL);
     }
     else {
-        chaz_Util_die("Unsupported shell type: %d", shell_type);
+        chaz_Util_die("Unsupported shell type: %d", chaz_Make.shell_type);
     }
 
     chaz_MakeRule_add_command(rule, command);
@@ -517,18 +529,17 @@ chaz_MakeRule_add_rm_command(chaz_MakeRule *rule, const char *files) {
 
 void
 chaz_MakeRule_add_recursive_rm_command(chaz_MakeRule *rule, const char *dirs) {
-    int   shell_type = chaz_OS_shell_type();
     char *command;
 
-    if (shell_type == CHAZ_OS_POSIX) {
+    if (chaz_Make.shell_type == CHAZ_OS_POSIX) {
         command = chaz_Util_join(" ", "rm -rf", dirs, NULL);
     }
-    else if (shell_type == CHAZ_OS_CMD_EXE) {
+    else if (chaz_Make.shell_type == CHAZ_OS_CMD_EXE) {
         command = chaz_Util_join("", "for %i in (", dirs,
                                  ") do @if exist %i rmdir /s /q %i", NULL);
     }
     else {
-        chaz_Util_die("Unsupported shell type: %d", shell_type);
+        chaz_Util_die("Unsupported shell type: %d", chaz_Make.shell_type);
     }
 
     chaz_MakeRule_add_command(rule, command);

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/11924ab6/src/Charmonizer/Core/Make.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Make.h b/src/Charmonizer/Core/Make.h
index 97cae84..8df49f6 100644
--- a/src/Charmonizer/Core/Make.h
+++ b/src/Charmonizer/Core/Make.h
@@ -47,6 +47,11 @@ chaz_Make_clean_up(void);
 const char*
 chaz_Make_get_make(void);
 
+/** Return the type of shell used by the detected 'make' executable.
+ */
+int
+chaz_Make_shell_type(void);
+
 /** Recursively list files in a directory. For every file a callback is called
  * with the filename and a context variable.
  *


[lucy-commits] [45/50] git commit: Fix Charmonizer test

Posted by nw...@apache.org.
Fix Charmonizer test

Make sure to employ boolean and integers types.


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/6bd3adf8
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/6bd3adf8
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/6bd3adf8

Branch: refs/heads/master
Commit: 6bd3adf84e924aa415ff793f92f3fbc346f1c20f
Parents: 1450545
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Mon May 20 18:28:00 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Mon May 20 21:01:13 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Test/TestIntegers.c | 2 ++
 1 file changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/6bd3adf8/src/Charmonizer/Test/TestIntegers.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Test/TestIntegers.c b/src/Charmonizer/Test/TestIntegers.c
index 9f55169..175affe 100644
--- a/src/Charmonizer/Test/TestIntegers.c
+++ b/src/Charmonizer/Test/TestIntegers.c
@@ -15,6 +15,8 @@
  */
 
 #define CHAZ_USE_SHORT_NAMES
+#define CHY_EMPLOY_BOOLEANS
+#define CHY_EMPLOY_INTEGERTYPES
 
 #include "Charmonizer/Test.h"
 #include "charmony.h"


[lucy-commits] [11/50] git commit: Charmonizer MakeFile destructor

Posted by nw...@apache.org.
Charmonizer MakeFile destructor


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/fc9ec623
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/fc9ec623
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/fc9ec623

Branch: refs/heads/master
Commit: fc9ec623e4e96abfcd84d69a2dfc9015862c0634
Parents: 054c666
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Tue Apr 9 22:11:14 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Tue Apr 9 22:13:01 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Core/Make.c | 34 ++++++++++++++++++++++++++++++++++
 src/Charmonizer/Core/Make.h |  5 +++++
 2 files changed, 39 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/fc9ec623/src/Charmonizer/Core/Make.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Make.c b/src/Charmonizer/Core/Make.c
index c5baee9..633996e 100644
--- a/src/Charmonizer/Core/Make.c
+++ b/src/Charmonizer/Core/Make.c
@@ -168,6 +168,40 @@ chaz_MakeFile_new() {
     return makefile;
 }
 
+void
+chaz_MakeFile_destroy(chaz_MakeFile *makefile) {
+    size_t i;
+
+    for (i = 0; makefile->vars[i]; i++) {
+        chaz_MakeVar *var = makefile->vars[i];
+        free(var->name);
+        free(var->value);
+        free(var);
+    }
+    free(makefile->vars);
+
+    for (i = 0; makefile->rules[i]; i++) {
+        chaz_MakeRule *rule = makefile->rules[i];
+        if (rule->targets)  { free(rule->targets); }
+        if (rule->prereqs)  { free(rule->prereqs); }
+        if (rule->commands) { free(rule->commands); }
+        free(rule);
+    }
+    free(makefile->rules);
+
+    for (i = 0; makefile->cleanup_files[i]; i++) {
+        free(makefile->cleanup_files[i]);
+    }
+    free(makefile->cleanup_files);
+
+    for (i = 0; makefile->cleanup_dirs[i]; i++) {
+        free(makefile->cleanup_dirs[i]);
+    }
+    free(makefile->cleanup_dirs);
+
+    free(makefile);
+}
+
 chaz_MakeVar*
 chaz_MakeFile_add_var(chaz_MakeFile *makefile, const char *name,
                       const char *value) {

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/fc9ec623/src/Charmonizer/Core/Make.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Make.h b/src/Charmonizer/Core/Make.h
index 4307fd1..3d08488 100644
--- a/src/Charmonizer/Core/Make.h
+++ b/src/Charmonizer/Core/Make.h
@@ -64,6 +64,11 @@ chaz_Make_list_files(const char *dir, const char *ext,
 chaz_MakeFile*
 chaz_MakeFile_new();
 
+/** MakeFile destructor.
+ */
+void
+chaz_MakeFile_destroy(chaz_MakeFile *makefile);
+
 /** Add a variable to a makefile.
  *
  * @param makefile The makefile.


[lucy-commits] [12/50] git commit: Fix some memory leaks in Charmonizer

Posted by nw...@apache.org.
Fix some memory leaks in Charmonizer


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/0273835a
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/0273835a
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/0273835a

Branch: refs/heads/master
Commit: 0273835aaa166be8448b06c9aa2ab767b35d50fc
Parents: fc9ec62
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Wed Apr 10 14:19:11 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Wed Apr 10 14:23:58 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Core/HeaderChecker.c   |  2 +-
 src/Charmonizer/Probe/Integers.c       | 30 +++++++++++++++++++----------
 src/Charmonizer/Probe/VariadicMacros.c |  2 ++
 3 files changed, 23 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/0273835a/src/Charmonizer/Core/HeaderChecker.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/HeaderChecker.c b/src/Charmonizer/Core/HeaderChecker.c
index 7445976..7aea085 100644
--- a/src/Charmonizer/Core/HeaderChecker.c
+++ b/src/Charmonizer/Core/HeaderChecker.c
@@ -101,7 +101,7 @@ chaz_HeadCheck_check_many_headers(const char **header_names) {
     static const char test_code[] = "int main() { return 0; }\n";
     int success;
     int i;
-    char *code_buf = chaz_Util_strdup("");
+    char *code_buf;
     size_t needed = sizeof(test_code) + 20;
 
     /* Build the source code string. */

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/0273835a/src/Charmonizer/Probe/Integers.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Probe/Integers.c b/src/Charmonizer/Probe/Integers.c
index d2d0d7c..a326eed 100644
--- a/src/Charmonizer/Probe/Integers.c
+++ b/src/Charmonizer/Probe/Integers.c
@@ -110,17 +110,20 @@ chaz_Integers_run(void) {
     /* Record sizeof() for several common integer types. */
     output = chaz_CC_capture_output(chaz_Integers_sizes_code, &output_len);
     if (output != NULL) {
+        char *ptr     = output;
         char *end_ptr = output;
 
-        sizeof_char  = strtol(output, &end_ptr, 10);
-        output       = end_ptr;
-        sizeof_short = strtol(output, &end_ptr, 10);
-        output       = end_ptr;
-        sizeof_int   = strtol(output, &end_ptr, 10);
-        output       = end_ptr;
-        sizeof_long  = strtol(output, &end_ptr, 10);
-        output       = end_ptr;
-        sizeof_ptr   = strtol(output, &end_ptr, 10);
+        sizeof_char  = strtol(ptr, &end_ptr, 10);
+        ptr          = end_ptr;
+        sizeof_short = strtol(ptr, &end_ptr, 10);
+        ptr          = end_ptr;
+        sizeof_int   = strtol(ptr, &end_ptr, 10);
+        ptr          = end_ptr;
+        sizeof_long  = strtol(ptr, &end_ptr, 10);
+        ptr          = end_ptr;
+        sizeof_ptr   = strtol(ptr, &end_ptr, 10);
+
+        free(output);
     }
 
     /* Determine whether long longs are available. */
@@ -129,6 +132,7 @@ chaz_Integers_run(void) {
     if (output != NULL) {
         has_long_long    = true;
         sizeof_long_long = strtol(output, NULL, 10);
+        free(output);
     }
 
     /* Determine whether the __int64 type is available. */
@@ -137,6 +141,7 @@ chaz_Integers_run(void) {
     if (output != NULL) {
         has___int64 = true;
         sizeof___int64 = strtol(output, NULL, 10);
+        free(output);
     }
 
     /* Figure out which integer types are available. */
@@ -181,12 +186,14 @@ chaz_Integers_run(void) {
         output = chaz_CC_capture_output(code_buf, &output_len);
         if (output != NULL) {
             strcpy(i64_t_postfix, "LL");
+            free(output);
         }
         else {
             sprintf(code_buf, chaz_Integers_literal64_code, "i64");
             output = chaz_CC_capture_output(code_buf, &output_len);
             if (output != NULL) {
                 strcpy(i64_t_postfix, "i64");
+                free(output);
             }
             else {
                 chaz_Util_die("64-bit types, but no literal syntax found");
@@ -196,12 +203,14 @@ chaz_Integers_run(void) {
         output = chaz_CC_capture_output(code_buf, &output_len);
         if (output != NULL) {
             strcpy(u64_t_postfix, "ULL");
+            free(output);
         }
         else {
             sprintf(code_buf, chaz_Integers_literal64_code, "Ui64");
             output = chaz_CC_capture_output(code_buf, &output_len);
             if (output != NULL) {
                 strcpy(u64_t_postfix, "Ui64");
+                free(output);
             }
             else {
                 chaz_Util_die("64-bit types, but no literal syntax found");
@@ -374,13 +383,14 @@ chaz_Integers_run(void) {
                 sprintf(code_buf, format_64_code, options[i], u64_t_postfix);
                 output = chaz_CC_capture_output(code_buf, &output_len);
 
-                if (output_len != 0
+                if (output != NULL
                     && strcmp(output, "18446744073709551615") == 0
                    ) {
                     sprintf(scratch, "\"%sd\"", options[i]);
                     chaz_ConfWriter_add_global_def("PRId64", scratch);
                     sprintf(scratch, "\"%su\"", options[i]);
                     chaz_ConfWriter_add_global_def("PRIu64", scratch);
+                    free(output);
                     break;
                 }
             }

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/0273835a/src/Charmonizer/Probe/VariadicMacros.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Probe/VariadicMacros.c b/src/Charmonizer/Probe/VariadicMacros.c
index 4ac98dd..ab70dfd 100644
--- a/src/Charmonizer/Probe/VariadicMacros.c
+++ b/src/Charmonizer/Probe/VariadicMacros.c
@@ -58,6 +58,7 @@ chaz_VariadicMacros_run(void) {
         has_iso_varmacros = true;
         chaz_ConfWriter_add_def("HAS_VARIADIC_MACROS", NULL);
         chaz_ConfWriter_add_def("HAS_ISO_VARIADIC_MACROS", NULL);
+        free(output);
     }
 
     /* Test for GNU-style variadic macros. */
@@ -69,6 +70,7 @@ chaz_VariadicMacros_run(void) {
             chaz_ConfWriter_add_def("HAS_VARIADIC_MACROS", NULL);
         }
         chaz_ConfWriter_add_def("HAS_GNUC_VARIADIC_MACROS", NULL);
+        free(output);
     }
 
     chaz_ConfWriter_end_module();


[lucy-commits] [36/50] git commit: Eliminate Makefile variables for file extensions

Posted by nw...@apache.org.
Eliminate Makefile variables for file extensions


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/4ed16e2f
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/4ed16e2f
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/4ed16e2f

Branch: refs/heads/master
Commit: 4ed16e2f3c86dad5d5b3bdc2879d4bef10304c28
Parents: 8462bc9
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Wed May 15 00:28:41 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Wed May 15 19:13:54 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Core/Make.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/4ed16e2f/src/Charmonizer/Core/Make.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Make.c b/src/Charmonizer/Core/Make.c
index b3aba56..d15751d 100644
--- a/src/Charmonizer/Core/Make.c
+++ b/src/Charmonizer/Core/Make.c
@@ -169,6 +169,9 @@ chaz_Make_audition(const char *make) {
 chaz_MakeFile*
 chaz_MakeFile_new() {
     chaz_MakeFile *makefile = (chaz_MakeFile*)malloc(sizeof(chaz_MakeFile));
+    const char    *exe_ext  = chaz_OS_exe_ext();
+    const char    *obj_ext  = chaz_CC_obj_ext();
+    char *generated;
 
     makefile->vars = (chaz_MakeVar**)malloc(sizeof(chaz_MakeVar*));
     makefile->vars[0] = NULL;
@@ -181,10 +184,11 @@ chaz_MakeFile_new() {
     makefile->clean     = S_new_rule("clean", NULL);
     makefile->distclean = S_new_rule("distclean", "clean");
 
-    chaz_MakeRule_add_rm_command(makefile->distclean,
-                                 "charmonizer$(EXE_EXT) charmonizer$(OBJ_EXT)"
-                                 " charmony.h Makefile");
+    generated = chaz_Util_join("", "charmonizer", exe_ext, " charmonizer",
+                               obj_ext, " charmony.h Makefile", NULL);
+    chaz_MakeRule_add_rm_command(makefile->distclean, generated);
 
+    free(generated);
     return makefile;
 }
 


[lucy-commits] [47/50] git commit: Simplify linking against library in build directory

Posted by nw...@apache.org.
Simplify linking against library in build directory

Make it easier to link against a shared library in the build directory
that has not been installed yet:

* Create all library symlinks in the build directory
* Set temporary install name with full path on Darwin


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/1d438481
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/1d438481
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/1d438481

Branch: refs/heads/master
Commit: 1d4384812265fe3f0c7b63644f50ecbcfe9aee52
Parents: 29e091d
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Tue May 28 19:29:08 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Tue May 28 19:43:37 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Core/Make.c | 42 ++++++++++++++++++++++++++++++++++------
 1 file changed, 36 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/1d438481/src/Charmonizer/Core/Make.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Make.c b/src/Charmonizer/Core/Make.c
index 77869b4..f54a146 100644
--- a/src/Charmonizer/Core/Make.c
+++ b/src/Charmonizer/Core/Make.c
@@ -333,6 +333,7 @@ chaz_MakeFile_add_shared_lib(chaz_MakeFile *makefile, chaz_SharedLib *lib,
                              const char *sources, chaz_CFlags *link_flags) {
     chaz_CFlags   *local_flags  = chaz_CC_new_cflags();
     const char    *link         = chaz_CC_link_command();
+    const char    *shlib_ext    = chaz_OS_shared_lib_ext();
     const char    *link_flags_string = "";
     const char    *local_flags_string;
     chaz_MakeRule *rule;
@@ -345,13 +346,25 @@ chaz_MakeFile_add_shared_lib(chaz_MakeFile *makefile, chaz_SharedLib *lib,
     if (link_flags) {
         link_flags_string = chaz_CFlags_get_string(link_flags);
     }
+
     if (chaz_CC_msvc_version_num()) {
         chaz_CFlags_append(local_flags, "/nologo");
     }
     chaz_CFlags_link_shared_library(local_flags);
+    if (strcmp(shlib_ext, ".dylib") == 0) {
+        /* Set temporary install name with full path on Darwin. */
+        const char *dir_sep = chaz_OS_dir_sep();
+        char *major_v_name = chaz_SharedLib_major_version_filename(lib);
+        char *install_name = chaz_Util_join("", "-install_name $(CURDIR)",
+                                            dir_sep, major_v_name, NULL);
+        chaz_CFlags_append(local_flags, install_name);
+        free(major_v_name);
+        free(install_name);
+    }
     chaz_CFlags_set_shared_library_version(local_flags, lib);
     chaz_CFlags_set_link_output(local_flags, filename);
     local_flags_string = chaz_CFlags_get_string(local_flags);
+
     command = chaz_Util_join(" ", link, sources, link_flags_string,
                              local_flags_string, NULL);
     chaz_MakeRule_add_command(rule, command);
@@ -359,14 +372,31 @@ chaz_MakeFile_add_shared_lib(chaz_MakeFile *makefile, chaz_SharedLib *lib,
 
     chaz_MakeRule_add_rm_command(makefile->clean, filename);
 
-    if (strcmp(chaz_OS_shared_lib_ext(), ".so") == 0) {
-        /* Add symlink for soname. */
-        char *soname = chaz_SharedLib_major_version_filename(lib);
-        command = chaz_Util_join(" ", "ln -sf", filename, soname, NULL);
+    /* Add symlinks. */
+    if (strcmp(shlib_ext, ".dll") != 0) {
+        char *major_v_name = chaz_SharedLib_major_version_filename(lib);
+        char *no_v_name    = chaz_SharedLib_no_version_filename(lib);
+
+        command = chaz_Util_join(" ", "ln -sf", filename, major_v_name, NULL);
+        chaz_MakeRule_add_command(rule, command);
+        free(command);
+
+        if (strcmp(shlib_ext, ".dylib") == 0) {
+            command = chaz_Util_join(" ", "ln -sf", filename, no_v_name,
+                                     NULL);
+        }
+        else {
+            command = chaz_Util_join(" ", "ln -sf", major_v_name, no_v_name,
+                                     NULL);
+        }
         chaz_MakeRule_add_command(rule, command);
         free(command);
-        chaz_MakeRule_add_rm_command(makefile->clean, soname);
-        free(soname);
+
+        chaz_MakeRule_add_rm_command(makefile->clean, major_v_name);
+        chaz_MakeRule_add_rm_command(makefile->clean, no_v_name);
+
+        free(major_v_name);
+        free(no_v_name);
     }
 
     if (chaz_CC_msvc_version_num()) {


[lucy-commits] [05/50] git commit: Charmonizer function to disable strict aliasing optimization

Posted by nw...@apache.org.
Charmonizer function to disable strict aliasing optimization


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/5924fa97
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/5924fa97
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/5924fa97

Branch: refs/heads/master
Commit: 5924fa976ad7f9ae407054001deded747d48674a
Parents: bd9d234
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Sun Mar 24 15:51:05 2013 +0100
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Sun Mar 24 17:13:47 2013 +0100

----------------------------------------------------------------------
 src/Charmonizer/Core/Compiler.c | 7 +++++++
 src/Charmonizer/Core/Compiler.h | 5 +++++
 2 files changed, 12 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/5924fa97/src/Charmonizer/Core/Compiler.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Compiler.c b/src/Charmonizer/Core/Compiler.c
index a5de6a9..151d89a 100644
--- a/src/Charmonizer/Core/Compiler.c
+++ b/src/Charmonizer/Core/Compiler.c
@@ -376,6 +376,13 @@ chaz_CC_set_optimization_level(const char *level) {
     free(flag);
 }
 
+void
+chaz_CC_disable_strict_aliasing() {
+    if (!chaz_CC.intval__MSC_VER) {
+       chaz_CC_add_extra_cflags("-fno-strict-aliasing");
+    }
+}
+
 const char*
 chaz_CC_get_cc(void) {
     return chaz_CC.cc_command;

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/5924fa97/src/Charmonizer/Core/Compiler.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Compiler.h b/src/Charmonizer/Core/Compiler.h
index 6fc4a5e..b95136f 100644
--- a/src/Charmonizer/Core/Compiler.h
+++ b/src/Charmonizer/Core/Compiler.h
@@ -89,6 +89,11 @@ chaz_CC_add_include_dir(const char *dir);
 void
 chaz_CC_set_optimization_level(const char *level);
 
+/* Disable strict aliasing.
+ */
+void
+chaz_CC_disable_strict_aliasing();
+
 /* Accessor for the compiler executable's string representation.
  */
 const char*


[lucy-commits] [09/50] git commit: Compile and link test executable with custom flags

Posted by nw...@apache.org.
Compile and link test executable with custom flags


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/d7dfbe17
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/d7dfbe17
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/d7dfbe17

Branch: refs/heads/master
Commit: d7dfbe17f6b3ad592b95481531c750f8c2d0d4dd
Parents: b155655
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Wed Apr 3 22:36:50 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Mon Apr 8 21:23:22 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Core/Make.c | 28 ++++++++++++++--------------
 src/Charmonizer/Core/Make.h | 12 ++++++------
 2 files changed, 20 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/d7dfbe17/src/Charmonizer/Core/Make.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Make.c b/src/Charmonizer/Core/Make.c
index 82fc379..c5baee9 100644
--- a/src/Charmonizer/Core/Make.c
+++ b/src/Charmonizer/Core/Make.c
@@ -241,24 +241,24 @@ chaz_MakeFile_add_dir_to_cleanup(chaz_MakeFile *makefile, const char *dir) {
 
 chaz_MakeRule*
 chaz_MakeFile_add_exe(chaz_MakeFile *makefile, const char *exe,
-                      const char *objects, chaz_CFlags *library_flags) {
+                      const char *sources, chaz_CFlags *link_flags) {
     int            cflags_style = chaz_CC_get_cflags_style();
     chaz_CFlags   *local_flags  = chaz_CFlags_new(cflags_style);
     const char    *link         = chaz_CC_link_command();
-    const char    *library_flags_string = "";
+    const char    *link_flags_string = "";
     const char    *local_flags_string;
     chaz_MakeRule *rule;
     char          *command;
 
-    rule = chaz_MakeFile_add_rule(makefile, exe, objects);
+    rule = chaz_MakeFile_add_rule(makefile, exe, sources);
 
-    if (library_flags) {
-        library_flags_string = chaz_CFlags_get_string(library_flags);
+    if (link_flags) {
+        link_flags_string = chaz_CFlags_get_string(link_flags);
     }
     chaz_CFlags_set_link_output(local_flags, exe);
     local_flags_string = chaz_CFlags_get_string(local_flags);
-    command = chaz_Util_join(" ", link, local_flags_string, objects,
-                             library_flags_string, NULL);
+    command = chaz_Util_join(" ", link, sources, link_flags_string,
+                             local_flags_string, NULL);
     chaz_MakeRule_add_command(rule, command);
 
     chaz_MakeFile_add_to_cleanup(makefile, exe);
@@ -270,25 +270,25 @@ chaz_MakeFile_add_exe(chaz_MakeFile *makefile, const char *exe,
 
 chaz_MakeRule*
 chaz_MakeFile_add_shared_lib(chaz_MakeFile *makefile, const char *shared_lib,
-                             const char *objects, chaz_CFlags *library_flags) {
+                             const char *sources, chaz_CFlags *link_flags) {
     int            cflags_style = chaz_CC_get_cflags_style();
     chaz_CFlags   *local_flags  = chaz_CFlags_new(cflags_style);
     const char    *link         = chaz_CC_link_command();
-    const char    *library_flags_string = "";
+    const char    *link_flags_string = "";
     const char    *local_flags_string;
     chaz_MakeRule *rule;
     char          *command;
 
-    rule = chaz_MakeFile_add_rule(makefile, shared_lib, objects);
+    rule = chaz_MakeFile_add_rule(makefile, shared_lib, sources);
 
-    if (library_flags) {
-        library_flags_string = chaz_CFlags_get_string(library_flags);
+    if (link_flags) {
+        link_flags_string = chaz_CFlags_get_string(link_flags);
     }
     chaz_CFlags_link_shared_library(local_flags);
     chaz_CFlags_set_link_output(local_flags, shared_lib);
     local_flags_string = chaz_CFlags_get_string(local_flags);
-    command = chaz_Util_join(" ", link, local_flags_string, objects,
-                             library_flags_string, NULL);
+    command = chaz_Util_join(" ", link, sources, link_flags_string,
+                             local_flags_string, NULL);
     chaz_MakeRule_add_command(rule, command);
 
     chaz_MakeFile_add_to_cleanup(makefile, shared_lib);

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/d7dfbe17/src/Charmonizer/Core/Make.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Make.h b/src/Charmonizer/Core/Make.h
index 103133d..4307fd1 100644
--- a/src/Charmonizer/Core/Make.h
+++ b/src/Charmonizer/Core/Make.h
@@ -110,24 +110,24 @@ chaz_MakeFile_add_dir_to_cleanup(chaz_MakeFile *makefile, const char *dir);
  *
  * @param makefile The makefile.
  * @param exe The name of the executable.
- * @param objects The list of object files.
- * @param library_flags Additional link flags for libraries.
+ * @param sources The list of source files.
+ * @param link_flags Additional link flags.
  */
 chaz_MakeRule*
 chaz_MakeFile_add_exe(chaz_MakeFile *makefile, const char *exe,
-                      const char *objects, chaz_CFlags *library_flags);
+                      const char *sources, chaz_CFlags *link_flags);
 
 /** Add a rule to link a shared library. The shared library will also be added
  * to the list of files to clean.
  *
  * @param makefile The makefile.
  * @param shared_lib The name of the shared library.
- * @param objects The list of object files.
- * @param library_flags Additional link flags for libraries.
+ * @param sources The list of source files.
+ * @param link_flags Additional link flags.
  */
 chaz_MakeRule*
 chaz_MakeFile_add_shared_lib(chaz_MakeFile *makefile, const char *shared_lib,
-                             const char *objects, chaz_CFlags *library_flags);
+                             const char *sources, chaz_CFlags *link_flags);
 
 /** Write the makefile to a file named 'Makefile' in the current directory.
  *


[lucy-commits] [46/50] git commit: Make charmonizer.c C89-compliant

Posted by nw...@apache.org.
Make charmonizer.c C89-compliant


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/29e091d6
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/29e091d6
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/29e091d6

Branch: refs/heads/master
Commit: 29e091d63ae087ada012115058abcc53901e4fb9
Parents: 6bd3adf
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Mon May 20 18:33:00 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Mon May 20 21:01:13 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Core/ConfWriterC.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/29e091d6/src/Charmonizer/Core/ConfWriterC.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/ConfWriterC.c b/src/Charmonizer/Core/ConfWriterC.c
index d50f779..1b0b7c4 100644
--- a/src/Charmonizer/Core/ConfWriterC.c
+++ b/src/Charmonizer/Core/ConfWriterC.c
@@ -281,10 +281,10 @@ chaz_ConfWriterC_end_module(void) {
                                                     defs[i].str2);
                 break;
             case CHAZ_CONFELEM_GLOBAL_TYPEDEF: {
-                ++num_globals;
                 char *sym = chaz_ConfWriterC_uppercase_string(defs[i].str1);
                 chaz_ConfWriterC_append_def_to_conf(sym, defs[i].str2);
                 free(sym);
+                ++num_globals;
             }
             /* fall through */
             case CHAZ_CONFELEM_TYPEDEF:


[lucy-commits] [14/50] git commit: Better error messages in Charmonizer::Core::CFlags

Posted by nw...@apache.org.
Better error messages in Charmonizer::Core::CFlags


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/7063130a
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/7063130a
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/7063130a

Branch: refs/heads/master
Commit: 7063130af4946669f5c85d34ec1ac224abde23c7
Parents: 4dcac5a
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Tue Apr 30 20:18:36 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Tue Apr 30 22:28:31 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Core/CFlags.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/7063130a/src/Charmonizer/Core/CFlags.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/CFlags.c b/src/Charmonizer/Core/CFlags.c
index 36aed5b..dd66ca5 100644
--- a/src/Charmonizer/Core/CFlags.c
+++ b/src/Charmonizer/Core/CFlags.c
@@ -160,7 +160,8 @@ chaz_CFlags_disable_strict_aliasing(chaz_CFlags *flags) {
         chaz_CFlags_append(flags, "-fno-strict-aliasing");
     }
     else {
-        chaz_Util_die("Unsupported compiler");
+        chaz_Util_die("Don't know how to disable strict aliasing with '%s'",
+                      chaz_CC_get_cc());
     }
 }
 
@@ -174,7 +175,8 @@ chaz_CFlags_set_warnings_as_errors(chaz_CFlags *flags) {
         string = "-Werror";
     }
     else {
-        chaz_Util_die("Unsupported compiler");
+        chaz_Util_die("Don't know how to set warnings as errors with '%s'",
+                      chaz_CC_get_cc());
     }
     chaz_CFlags_append(flags, string);
 }
@@ -217,7 +219,8 @@ chaz_CFlags_link_shared_library(chaz_CFlags *flags) {
         }
     }
     else {
-        chaz_Util_die("Unsupported compiler");
+        chaz_Util_die("Don't know how to link a shared library with '%s'",
+                      chaz_CC_get_cc());
     }
     chaz_CFlags_append(flags, string);
 }


[lucy-commits] [17/50] git commit: Add code coverage target to Makefile

Posted by nw...@apache.org.
Add code coverage target to Makefile

Create HTML pages with coverage data using lcov like this:

$ ./configure --enable-coverage
$ make
$ make coverage


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/d217b037
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/d217b037
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/d217b037

Branch: refs/heads/master
Commit: d217b03751b5a3da8c3a0647151f7e98e8491cba
Parents: 7063130
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Tue Apr 30 21:55:58 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Tue Apr 30 22:45:12 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Core/CFlags.c | 11 +++++++++++
 src/Charmonizer/Core/CFlags.h |  3 +++
 src/Charmonizer/Probe.c       |  6 ++++++
 src/Charmonizer/Probe.h       |  2 ++
 4 files changed, 22 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/d217b037/src/Charmonizer/Core/CFlags.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/CFlags.c b/src/Charmonizer/Core/CFlags.c
index dd66ca5..ffd5b9a 100644
--- a/src/Charmonizer/Core/CFlags.c
+++ b/src/Charmonizer/Core/CFlags.c
@@ -274,4 +274,15 @@ chaz_CFlags_add_library(chaz_CFlags *flags, const char *library) {
     free(string);
 }
 
+void
+chaz_CFlags_enable_code_coverage(chaz_CFlags *flags) {
+    if (flags->style == CHAZ_CFLAGS_STYLE_GNU) {
+        chaz_CFlags_append(flags, "--coverage");
+    }
+    else {
+        chaz_Util_die("Don't know how to enable code coverage with '%s'",
+                      chaz_CC_get_cc());
+    }
+}
+
 

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/d217b037/src/Charmonizer/Core/CFlags.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/CFlags.h b/src/Charmonizer/Core/CFlags.h
index 2b4ffe6..989518f 100644
--- a/src/Charmonizer/Core/CFlags.h
+++ b/src/Charmonizer/Core/CFlags.h
@@ -85,6 +85,9 @@ chaz_CFlags_add_library_path(chaz_CFlags *flags, const char *directory);
 void
 chaz_CFlags_add_library(chaz_CFlags *flags, const char *library);
 
+void
+chaz_CFlags_enable_code_coverage(chaz_CFlags *flags);
+
 #ifdef __cplusplus
 }
 #endif

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/d217b037/src/Charmonizer/Probe.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Probe.c b/src/Charmonizer/Probe.c
index c1475db..886589b 100644
--- a/src/Charmonizer/Probe.c
+++ b/src/Charmonizer/Probe.c
@@ -56,6 +56,12 @@ chaz_Probe_parse_cli_args(int argc, const char *argv[],
             args->charmony_rb = 1;
             output_enabled = 1;
         }
+        else if (strcmp(arg, "--enable-makefile") == 0) {
+            args->write_makefile = 1;
+        }
+        else if (strcmp(arg, "--enable-coverage") == 0) {
+            args->code_coverage = 1;
+        }
         else if (memcmp(arg, "--cc=", 5) == 0) {
             if (strlen(arg) > CHAZ_PROBE_MAX_CC_LEN - 5) {
                 fprintf(stderr, "Exceeded max length for compiler command");

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/d217b037/src/Charmonizer/Probe.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Probe.h b/src/Charmonizer/Probe.h
index 9d44efa..7f1e321 100644
--- a/src/Charmonizer/Probe.h
+++ b/src/Charmonizer/Probe.h
@@ -34,6 +34,8 @@ struct chaz_CLIArgs {
     int  charmony_pm;
     int  charmony_rb;
     int  verbosity;
+    int  write_makefile;
+    int  code_coverage;
 };
 
 /* Parse command line arguments, initializing and filling in the supplied


[lucy-commits] [25/50] git commit: Don't use -fPIC on Windows

Posted by nw...@apache.org.
Don't use -fPIC on Windows


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/0d81e095
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/0d81e095
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/0d81e095

Branch: refs/heads/master
Commit: 0d81e095ad8316decdb418629b09b3911dc0993a
Parents: 2d425e2
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Sat May 4 18:21:07 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Sat May 4 19:03:19 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Core/CFlags.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/0d81e095/src/Charmonizer/Core/CFlags.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/CFlags.c b/src/Charmonizer/Core/CFlags.c
index ffd5b9a..1651925 100644
--- a/src/Charmonizer/Core/CFlags.c
+++ b/src/Charmonizer/Core/CFlags.c
@@ -184,7 +184,9 @@ chaz_CFlags_set_warnings_as_errors(chaz_CFlags *flags) {
 void
 chaz_CFlags_compile_shared_library(chaz_CFlags *flags) {
     const char *string;
-    if (flags->style != CHAZ_CFLAGS_STYLE_GNU) {
+    if (flags->style != CHAZ_CFLAGS_STYLE_GNU
+        || strcmp(chaz_OS_shared_lib_ext(), ".dll") == 0
+       ) {
         return;
     }
     if (chaz_OS_is_darwin()) {


[lucy-commits] [48/50] git commit: Add probe for CHY_SIZEOF_SIZE_T

Posted by nw...@apache.org.
Add probe for CHY_SIZEOF_SIZE_T


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/f581f622
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/f581f622
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/f581f622

Branch: refs/heads/master
Commit: f581f622e358f68c193ccbed7a4c2d64848c08d7
Parents: 1d43848
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Mon Jul 22 21:41:27 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Thu Aug 8 11:08:03 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Probe/Integers.c | 24 +++++++++++++++---------
 1 file changed, 15 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/f581f622/src/Charmonizer/Probe/Integers.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Probe/Integers.c b/src/Charmonizer/Probe/Integers.c
index 3f44097..aec09b5 100644
--- a/src/Charmonizer/Probe/Integers.c
+++ b/src/Charmonizer/Probe/Integers.c
@@ -36,6 +36,7 @@ static const char chaz_Integers_sizes_code[] =
     CHAZ_QUOTE(      printf("%d ", (int)sizeof(int));      )
     CHAZ_QUOTE(      printf("%d ", (int)sizeof(long));     )
     CHAZ_QUOTE(      printf("%d ", (int)sizeof(void*));    )
+    CHAZ_QUOTE(      printf("%d ", (int)sizeof(size_t));   )
     CHAZ_QUOTE(      return 0;                             )
     CHAZ_QUOTE(  }                                         );
 
@@ -79,6 +80,7 @@ chaz_Integers_run(void) {
     int sizeof_long       = -1;
     int sizeof_long_long  = -1;
     int sizeof___int64    = -1;
+    int sizeof_size_t     = -1;
     int has_8             = false;
     int has_16            = false;
     int has_32            = false;
@@ -113,15 +115,17 @@ chaz_Integers_run(void) {
         char *ptr     = output;
         char *end_ptr = output;
 
-        sizeof_char  = strtol(ptr, &end_ptr, 10);
-        ptr          = end_ptr;
-        sizeof_short = strtol(ptr, &end_ptr, 10);
-        ptr          = end_ptr;
-        sizeof_int   = strtol(ptr, &end_ptr, 10);
-        ptr          = end_ptr;
-        sizeof_long  = strtol(ptr, &end_ptr, 10);
-        ptr          = end_ptr;
-        sizeof_ptr   = strtol(ptr, &end_ptr, 10);
+        sizeof_char   = strtol(ptr, &end_ptr, 10);
+        ptr           = end_ptr;
+        sizeof_short  = strtol(ptr, &end_ptr, 10);
+        ptr           = end_ptr;
+        sizeof_int    = strtol(ptr, &end_ptr, 10);
+        ptr           = end_ptr;
+        sizeof_long   = strtol(ptr, &end_ptr, 10);
+        ptr           = end_ptr;
+        sizeof_ptr    = strtol(ptr, &end_ptr, 10);
+        ptr           = end_ptr;
+        sizeof_size_t = strtol(ptr, &end_ptr, 10);
 
         free(output);
     }
@@ -243,6 +247,8 @@ chaz_Integers_run(void) {
     chaz_ConfWriter_add_def("SIZEOF_LONG", scratch);
     sprintf(scratch, "%d", sizeof_ptr);
     chaz_ConfWriter_add_def("SIZEOF_PTR", scratch);
+    sprintf(scratch, "%d", sizeof_size_t);
+    chaz_ConfWriter_add_def("SIZEOF_SIZE_T", scratch);
     if (has_long_long) {
         sprintf(scratch, "%d", sizeof_long_long);
         chaz_ConfWriter_add_def("SIZEOF_LONG_LONG", scratch);


[lucy-commits] [16/50] git commit: Add chaz_MakeFile_add_compiled_exe

Posted by nw...@apache.org.
Add chaz_MakeFile_add_compiled_exe

Used to compile and link an executable.


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/271887fc
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/271887fc
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/271887fc

Branch: refs/heads/master
Commit: 271887fc074e29c22510a4f67df74ce4ed2222f8
Parents: 4382b44
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Mon Apr 29 01:15:53 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Tue Apr 30 22:28:31 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Core/Make.c | 29 +++++++++++++++++++++++++++++
 src/Charmonizer/Core/Make.h | 12 ++++++++++++
 2 files changed, 41 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/271887fc/src/Charmonizer/Core/Make.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Make.c b/src/Charmonizer/Core/Make.c
index 633996e..957be14 100644
--- a/src/Charmonizer/Core/Make.c
+++ b/src/Charmonizer/Core/Make.c
@@ -303,6 +303,35 @@ chaz_MakeFile_add_exe(chaz_MakeFile *makefile, const char *exe,
 }
 
 chaz_MakeRule*
+chaz_MakeFile_add_compiled_exe(chaz_MakeFile *makefile, const char *exe,
+                               const char *sources, chaz_CFlags *cflags) {
+    int            cflags_style  = chaz_CC_get_cflags_style();
+    chaz_CFlags   *local_flags   = chaz_CFlags_new(cflags_style);
+    const char    *cc            = chaz_CC_get_cc();
+    const char    *cflags_string = "";
+    const char    *local_flags_string;
+    chaz_MakeRule *rule;
+    char          *command;
+
+    rule = chaz_MakeFile_add_rule(makefile, exe, sources);
+
+    if (cflags) {
+        cflags_string = chaz_CFlags_get_string(cflags);
+    }
+    chaz_CFlags_set_output_exe(local_flags, exe);
+    local_flags_string = chaz_CFlags_get_string(local_flags);
+    command = chaz_Util_join(" ", cc, sources, cflags_string,
+                             local_flags_string, NULL);
+    chaz_MakeRule_add_command(rule, command);
+
+    chaz_MakeFile_add_to_cleanup(makefile, exe);
+
+    chaz_CFlags_destroy(local_flags);
+    free(command);
+    return rule;
+}
+
+chaz_MakeRule*
 chaz_MakeFile_add_shared_lib(chaz_MakeFile *makefile, const char *shared_lib,
                              const char *sources, chaz_CFlags *link_flags) {
     int            cflags_style = chaz_CC_get_cflags_style();

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/271887fc/src/Charmonizer/Core/Make.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Make.h b/src/Charmonizer/Core/Make.h
index 3d08488..1a365fd 100644
--- a/src/Charmonizer/Core/Make.h
+++ b/src/Charmonizer/Core/Make.h
@@ -122,6 +122,18 @@ chaz_MakeRule*
 chaz_MakeFile_add_exe(chaz_MakeFile *makefile, const char *exe,
                       const char *sources, chaz_CFlags *link_flags);
 
+/** Add a rule to compile and link an executable. The executable will also be
+ * added to the list of files to clean.
+ *
+ * @param makefile The makefile.
+ * @param exe The name of the executable.
+ * @param sources The list of source files.
+ * @param cflags Additional compiler flags.
+ */
+chaz_MakeRule*
+chaz_MakeFile_add_compiled_exe(chaz_MakeFile *makefile, const char *exe,
+                               const char *sources, chaz_CFlags *cflags);
+
 /** Add a rule to link a shared library. The shared library will also be added
  * to the list of files to clean.
  *


[lucy-commits] [34/50] git commit: Functions to create lemon rules in chaz_MakeFile

Posted by nw...@apache.org.
Functions to create lemon rules in chaz_MakeFile


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/2a1179f5
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/2a1179f5
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/2a1179f5

Branch: refs/heads/master
Commit: 2a1179f5e0a89bd47bec9143233095fcfd642c6f
Parents: ad0b1af
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Tue May 14 21:31:57 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Wed May 15 19:13:54 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Core/Make.c | 44 ++++++++++++++++++++++++++++++++++++++++
 src/Charmonizer/Core/Make.h | 17 ++++++++++++++++
 2 files changed, 61 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/2a1179f5/src/Charmonizer/Core/Make.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Make.c b/src/Charmonizer/Core/Make.c
index 22d4764..ef7a2ee 100644
--- a/src/Charmonizer/Core/Make.c
+++ b/src/Charmonizer/Core/Make.c
@@ -370,6 +370,50 @@ chaz_MakeFile_add_shared_lib(chaz_MakeFile *makefile, chaz_SharedLib *lib,
     return rule;
 }
 
+chaz_MakeRule*
+chaz_MakeFile_add_lemon_exe(chaz_MakeFile *makefile, const char *dir) {
+    chaz_CFlags   *cflags = chaz_CC_new_cflags();
+    chaz_MakeRule *rule;
+    const char *dir_sep = chaz_OS_dir_sep();
+    const char *exe_ext = chaz_OS_exe_ext();
+    char *lemon_exe = chaz_Util_join("", dir, dir_sep, "lemon", exe_ext, NULL);
+    char *lemon_c   = chaz_Util_join(dir_sep, dir, "lemon.c", NULL);
+
+    chaz_CFlags_enable_optimization(cflags);
+    chaz_MakeFile_add_var(makefile, "LEMON_EXE", lemon_exe);
+    rule = chaz_MakeFile_add_compiled_exe(makefile, "$(LEMON_EXE)", lemon_c,
+                                          cflags);
+
+    chaz_CFlags_destroy(cflags);
+    free(lemon_c);
+    free(lemon_exe);
+    return rule;
+}
+
+chaz_MakeRule*
+chaz_MakeFile_add_lemon_grammar(chaz_MakeFile *makefile,
+                                const char *base_name) {
+    char *c_file  = chaz_Util_join(".", base_name, "c", NULL);
+    char *h_file  = chaz_Util_join(".", base_name, "h", NULL);
+    char *y_file  = chaz_Util_join(".", base_name, "y", NULL);
+    char *command = chaz_Util_join(" ", "$(LEMON_EXE) -q", y_file, NULL);
+
+    chaz_MakeRule *rule = chaz_MakeFile_add_rule(makefile, c_file, y_file);
+    chaz_MakeRule *clean_rule = chaz_MakeFile_clean_rule(makefile);
+
+    chaz_MakeRule_add_prereq(rule, "$(LEMON_EXE)");
+    chaz_MakeRule_add_command(rule, command);
+
+    chaz_MakeRule_add_rm_command(clean_rule, h_file);
+    chaz_MakeRule_add_rm_command(clean_rule, c_file);
+
+    free(c_file);
+    free(h_file);
+    free(y_file);
+    free(command);
+    return rule;
+}
+
 void
 chaz_MakeFile_write(chaz_MakeFile *makefile) {
     FILE   *out;

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/2a1179f5/src/Charmonizer/Core/Make.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Make.h b/src/Charmonizer/Core/Make.h
index 8f2cbc1..0ba87b0 100644
--- a/src/Charmonizer/Core/Make.h
+++ b/src/Charmonizer/Core/Make.h
@@ -150,6 +150,23 @@ chaz_MakeRule*
 chaz_MakeFile_add_shared_lib(chaz_MakeFile *makefile, chaz_SharedLib *lib,
                              const char *sources, chaz_CFlags *link_flags);
 
+/** Add a rule to build the lemon parser generator.
+ *
+ * @param makefile The makefile.
+ * @param dir The lemon directory.
+ */
+chaz_MakeRule*
+chaz_MakeFile_add_lemon_exe(chaz_MakeFile *makefile, const char *dir);
+
+/** Add a rule for a lemon grammar.
+ *
+ * @param makefile The makefile.
+ * @param base_name The filename of the grammar without extension.
+ */
+chaz_MakeRule*
+chaz_MakeFile_add_lemon_grammar(chaz_MakeFile *makefile,
+                                const char *base_name);
+
 /** Write the makefile to a file named 'Makefile' in the current directory.
  *
  * @param makefile The makefile.


[lucy-commits] [40/50] git commit: Create soname symlink

Posted by nw...@apache.org.
Create soname symlink


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/4528872e
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/4528872e
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/4528872e

Branch: refs/heads/master
Commit: 4528872e90e6fedbed65be5d9ad9fbc0e7d2a200
Parents: 4c0a62b
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Wed May 15 23:46:15 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Thu May 16 00:11:08 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Core/Make.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/4528872e/src/Charmonizer/Core/Make.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Make.c b/src/Charmonizer/Core/Make.c
index 2fbde93..77869b4 100644
--- a/src/Charmonizer/Core/Make.c
+++ b/src/Charmonizer/Core/Make.c
@@ -355,9 +355,20 @@ chaz_MakeFile_add_shared_lib(chaz_MakeFile *makefile, chaz_SharedLib *lib,
     command = chaz_Util_join(" ", link, sources, link_flags_string,
                              local_flags_string, NULL);
     chaz_MakeRule_add_command(rule, command);
+    free(command);
 
     chaz_MakeRule_add_rm_command(makefile->clean, filename);
 
+    if (strcmp(chaz_OS_shared_lib_ext(), ".so") == 0) {
+        /* Add symlink for soname. */
+        char *soname = chaz_SharedLib_major_version_filename(lib);
+        command = chaz_Util_join(" ", "ln -sf", filename, soname, NULL);
+        chaz_MakeRule_add_command(rule, command);
+        free(command);
+        chaz_MakeRule_add_rm_command(makefile->clean, soname);
+        free(soname);
+    }
+
     if (chaz_CC_msvc_version_num()) {
         /* Remove import library and export file under MSVC. */
         char *lib_filename = chaz_SharedLib_implib_filename(lib);
@@ -370,7 +381,6 @@ chaz_MakeFile_add_shared_lib(chaz_MakeFile *makefile, chaz_SharedLib *lib,
 
     chaz_CFlags_destroy(local_flags);
     free(filename);
-    free(command);
     return rule;
 }
 


[lucy-commits] [44/50] git commit: Don't use stdint types in Charmonizer::Probe::Floats

Posted by nw...@apache.org.
Don't use stdint types in Charmonizer::Probe::Floats

Use a char array to hold the floating point representations of special
values. This is needed for the upcoming changes that add the ability to
create a charmony.h which doesn't define the stdint types.


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/ff32689a
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/ff32689a
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/ff32689a

Branch: refs/heads/master
Commit: ff32689a0d4326651dd77b8fa42505fc3f692c4d
Parents: cc16e42
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Sat May 18 17:14:46 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Mon May 20 21:01:12 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Probe/Floats.c | 37 +++++++++++++++++++++++++++++--------
 1 file changed, 29 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/ff32689a/src/Charmonizer/Probe/Floats.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Probe/Floats.c b/src/Charmonizer/Probe/Floats.c
index b78ec00..6c3969d 100644
--- a/src/Charmonizer/Probe/Floats.c
+++ b/src/Charmonizer/Probe/Floats.c
@@ -27,14 +27,35 @@ chaz_Floats_run(void) {
     chaz_ConfWriter_start_module("Floats");
 
     chaz_ConfWriter_append_conf(
-        "typedef union { uint32_t i; float f; } chy_floatu32;\n"
-        "typedef union { uint64_t i; double d; } chy_floatu64;\n"
-        "static const chy_floatu32 chy_f32inf    = {UINT32_C(0x7f800000)};\n"
-        "static const chy_floatu32 chy_f32neginf = {UINT32_C(0xff800000)};\n"
-        "static const chy_floatu32 chy_f32nan    = {UINT32_C(0x7fc00000)};\n"
-        "static const chy_floatu64 chy_f64inf    = {UINT64_C(0x7ff0000000000000)};\n"
-        "static const chy_floatu64 chy_f64neginf = {UINT64_C(0xfff0000000000000)};\n"
-        "static const chy_floatu64 chy_f64nan    = {UINT64_C(0x7ff8000000000000)};\n"
+        "typedef union { unsigned char c[4]; float f; } chy_floatu32;\n"
+        "typedef union { unsigned char c[8]; double d; } chy_floatu64;\n"
+        "#ifdef CHY_BIG_END\n"
+        "static const chy_floatu32 chy_f32inf\n"
+        "    = { { 0x7F, 0x80, 0, 0 } };\n"
+        "static const chy_floatu32 chy_f32neginf\n"
+        "    = { { 0xFF, 0x80, 0, 0 } };\n"
+        "static const chy_floatu32 chy_f32nan\n"
+        "    = { { 0x7F, 0xC0, 0, 0 } };\n"
+        "static const chy_floatu64 chy_f64inf\n"
+        "    = { { 0x7F, 0xF0, 0, 0, 0, 0, 0, 0 } };\n"
+        "static const chy_floatu64 chy_f64neginf\n"
+        "    = { { 0xFF, 0xF0, 0, 0, 0, 0, 0, 0 } };\n"
+        "static const chy_floatu64 chy_f64nan\n"
+        "    = { { 0x7F, 0xF8, 0, 0, 0, 0, 0, 0 } };\n"
+        "#else /* BIG_END */\n"
+        "static const chy_floatu32 chy_f32inf\n"
+        "    = { { 0, 0, 0x80, 0x7F } };\n"
+        "static const chy_floatu32 chy_f32neginf\n"
+        "    = { { 0, 0, 0x80, 0xFF } };\n"
+        "static const chy_floatu32 chy_f32nan\n"
+        "    = { { 0, 0, 0xC0, 0x7F } };\n"
+        "static const chy_floatu64 chy_f64inf\n"
+        "    = { { 0, 0, 0, 0, 0, 0, 0xF0, 0x7F } };\n"
+        "static const chy_floatu64 chy_f64neginf\n"
+        "    = { { 0, 0, 0, 0, 0, 0, 0xF0, 0xFF } };\n"
+        "static const chy_floatu64 chy_f64nan\n"
+        "    = { { 0, 0, 0, 0, 0, 0, 0xF8, 0x7F } };\n"
+        "#endif /* BIG_END */\n"
     );
     chaz_ConfWriter_add_def("F32_INF", "(chy_f32inf.f)");
     chaz_ConfWriter_add_def("F32_NEGINF", "(chy_f32neginf.f)");


[lucy-commits] [29/50] git commit: Add version to filename of shared library

Posted by nw...@apache.org.
Add version to filename of shared library

Introduce a new Charmonizer class chaz_SharedLib to build various
filenames.


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/3ba0ea2a
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/3ba0ea2a
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/3ba0ea2a

Branch: refs/heads/master
Commit: 3ba0ea2aa15f52c79de8aa05110631f392fb3025
Parents: 11924ab
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Mon May 13 20:23:34 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Wed May 15 19:13:53 2013 +0200

----------------------------------------------------------------------
 buildbin/meld.pl                     |   1 +
 src/Charmonizer/Core/CFlags.c        |  20 ++++-
 src/Charmonizer/Core/CFlags.h        |  13 +--
 src/Charmonizer/Core/Compiler.c      |  15 ----
 src/Charmonizer/Core/Compiler.h      |   3 -
 src/Charmonizer/Core/Make.c          |  27 +++---
 src/Charmonizer/Core/Make.h          |   7 +-
 src/Charmonizer/Core/SharedLibrary.c | 135 ++++++++++++++++++++++++++++++
 src/Charmonizer/Core/SharedLibrary.h |  66 +++++++++++++++
 src/Charmonizer/Probe/Floats.c       |   2 +-
 10 files changed, 245 insertions(+), 44 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/3ba0ea2a/buildbin/meld.pl
----------------------------------------------------------------------
diff --git a/buildbin/meld.pl b/buildbin/meld.pl
index 2c73591..a615331 100755
--- a/buildbin/meld.pl
+++ b/buildbin/meld.pl
@@ -67,6 +67,7 @@ if ( !@probes ) {
 }
 
 my @core = qw(
+    SharedLibrary
     CFlags
     Compiler
     ConfWriter

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/3ba0ea2a/src/Charmonizer/Core/CFlags.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/CFlags.c b/src/Charmonizer/Core/CFlags.c
index 1651925..4642a99 100644
--- a/src/Charmonizer/Core/CFlags.c
+++ b/src/Charmonizer/Core/CFlags.c
@@ -16,9 +16,10 @@
 
 #include <string.h>
 #include <stdlib.h>
-#include "Charmonizer/Core/Flags.h"
+#include "Charmonizer/Core/CFlags.h"
 #include "Charmonizer/Core/Util.h"
 #include "Charmonizer/Core/OperatingSystem.h"
+#include "Charmonizer/Core/SharedLibrary.h"
 
 struct chaz_CFlags {
     int   style;
@@ -264,13 +265,26 @@ chaz_CFlags_add_library_path(chaz_CFlags *flags, const char *directory) {
 }
 
 void
-chaz_CFlags_add_library(chaz_CFlags *flags, const char *library) {
+chaz_CFlags_add_library(chaz_CFlags *flags, chaz_SharedLib *lib) {
+    char *filename;
+    if (flags->style == CHAZ_CFLAGS_STYLE_MSVC) {
+        filename = chaz_SharedLib_implib_filename(lib);
+    }
+    else {
+        filename = chaz_SharedLib_filename(lib);
+    }
+    chaz_CFlags_append(flags, filename);
+    free(filename);
+}
+
+void
+chaz_CFlags_add_external_library(chaz_CFlags *flags, const char *library) {
     char *string;
     if (flags->style == CHAZ_CFLAGS_STYLE_MSVC) {
         string = chaz_Util_join("", library, ".lib", NULL);
     }
     else {
-        string = chaz_Util_join("", "-l ", library, NULL);
+        string = chaz_Util_join(" ", "-l", library, NULL);
     }
     chaz_CFlags_append(flags, string);
     free(string);

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/3ba0ea2a/src/Charmonizer/Core/CFlags.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/CFlags.h b/src/Charmonizer/Core/CFlags.h
index 989518f..5f4151d 100644
--- a/src/Charmonizer/Core/CFlags.h
+++ b/src/Charmonizer/Core/CFlags.h
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
-/* Charmonizer/Core/Compiler.h
+/* Charmonizer/Core/CFlags.h
  */
 
-#ifndef H_CHAZ_FLAGS
-#define H_CHAZ_FLAGS
+#ifndef H_CHAZ_CFLAGS
+#define H_CHAZ_CFLAGS
 
 #ifdef __cplusplus
 extern "C" {
@@ -83,7 +83,10 @@ void
 chaz_CFlags_add_library_path(chaz_CFlags *flags, const char *directory);
 
 void
-chaz_CFlags_add_library(chaz_CFlags *flags, const char *library);
+chaz_CFlags_add_library(chaz_CFlags *flags, chaz_SharedLib *lib);
+
+void
+chaz_CFlags_add_external_library(chaz_CFlags *flags, const char *library);
 
 void
 chaz_CFlags_enable_code_coverage(chaz_CFlags *flags);
@@ -92,6 +95,6 @@ chaz_CFlags_enable_code_coverage(chaz_CFlags *flags);
 }
 #endif
 
-#endif /* H_CHAZ_FLAGS */
+#endif /* H_CHAZ_CFLAGS */
 
 

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/3ba0ea2a/src/Charmonizer/Core/Compiler.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Compiler.c b/src/Charmonizer/Core/Compiler.c
index f2683b5..9dd4841 100644
--- a/src/Charmonizer/Core/Compiler.c
+++ b/src/Charmonizer/Core/Compiler.c
@@ -366,19 +366,4 @@ chaz_CC_link_command() {
     }
 }
 
-char*
-chaz_CC_shared_lib_file(const char *name) {
-    const char *prefix = "";
-    const char *shlib_ext = chaz_OS_shared_lib_ext();
-    if (!chaz_CC.intval__MSC_VER) {
-        if (chaz_OS_is_cygwin()) {
-            prefix = "cyg";
-        }
-        else {
-            prefix = "lib";
-        }
-    }
-    return chaz_Util_join("", prefix, name, shlib_ext, NULL);
-}
-
 

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/3ba0ea2a/src/Charmonizer/Core/Compiler.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Compiler.h b/src/Charmonizer/Core/Compiler.h
index 1e7803f..820f84c 100644
--- a/src/Charmonizer/Core/Compiler.h
+++ b/src/Charmonizer/Core/Compiler.h
@@ -108,9 +108,6 @@ chaz_CC_msvc_version_num(void);
 const char*
 chaz_CC_link_command(void);
 
-char*
-chaz_CC_shared_lib_file(const char *name);
-
 #ifdef __cplusplus
 }
 #endif

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/3ba0ea2a/src/Charmonizer/Core/Make.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Make.c b/src/Charmonizer/Core/Make.c
index f114a37..410254e 100644
--- a/src/Charmonizer/Core/Make.c
+++ b/src/Charmonizer/Core/Make.c
@@ -321,7 +321,7 @@ chaz_MakeFile_add_compiled_exe(chaz_MakeFile *makefile, const char *exe,
 }
 
 chaz_MakeRule*
-chaz_MakeFile_add_shared_lib(chaz_MakeFile *makefile, const char *name,
+chaz_MakeFile_add_shared_lib(chaz_MakeFile *makefile, chaz_SharedLib *lib,
                              const char *sources, chaz_CFlags *link_flags) {
     int            cflags_style = chaz_CC_get_cflags_style();
     chaz_CFlags   *local_flags  = chaz_CFlags_new(cflags_style);
@@ -329,37 +329,36 @@ chaz_MakeFile_add_shared_lib(chaz_MakeFile *makefile, const char *name,
     const char    *link_flags_string = "";
     const char    *local_flags_string;
     chaz_MakeRule *rule;
-    char          *shared_lib;
+    char          *filename;
     char          *command;
 
-    shared_lib = chaz_CC_shared_lib_file(name);
-    rule = chaz_MakeFile_add_rule(makefile, shared_lib, sources);
+    filename = chaz_SharedLib_filename(lib);
+    rule = chaz_MakeFile_add_rule(makefile, filename, sources);
 
     if (link_flags) {
         link_flags_string = chaz_CFlags_get_string(link_flags);
     }
     chaz_CFlags_link_shared_library(local_flags);
-    chaz_CFlags_set_link_output(local_flags, shared_lib);
+    chaz_CFlags_set_link_output(local_flags, filename);
     local_flags_string = chaz_CFlags_get_string(local_flags);
     command = chaz_Util_join(" ", link, sources, link_flags_string,
                              local_flags_string, NULL);
     chaz_MakeRule_add_command(rule, command);
 
-    chaz_MakeRule_add_rm_command(makefile->clean, shared_lib);
+    chaz_MakeRule_add_rm_command(makefile->clean, filename);
 
     if (chaz_CC_msvc_version_num()) {
         /* Remove import library and export file under MSVC. */
-        char *filename;
-        filename = chaz_Util_join("", name, ".lib", NULL);
-        chaz_MakeRule_add_rm_command(makefile->clean, filename);
-        free(filename);
-        filename = chaz_Util_join("", name, ".exp", NULL);
-        chaz_MakeRule_add_rm_command(makefile->clean, filename);
-        free(filename);
+        char *lib_filename = chaz_SharedLib_implib_filename(lib);
+        char *exp_filename = chaz_SharedLib_export_filename(lib);
+        chaz_MakeRule_add_rm_command(makefile->clean, lib_filename);
+        chaz_MakeRule_add_rm_command(makefile->clean, exp_filename);
+        free(lib_filename);
+        free(exp_filename);
     }
 
     chaz_CFlags_destroy(local_flags);
-    free(shared_lib);
+    free(filename);
     free(command);
     return rule;
 }

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/3ba0ea2a/src/Charmonizer/Core/Make.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Make.h b/src/Charmonizer/Core/Make.h
index 8df49f6..8f2cbc1 100644
--- a/src/Charmonizer/Core/Make.h
+++ b/src/Charmonizer/Core/Make.h
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-/* Charmonizer/Core/Compiler.h
+/* Charmonizer/Core/Make.h
  */
 
 #ifndef H_CHAZ_MAKE
@@ -25,6 +25,7 @@ extern "C" {
 #endif
 
 #include "Charmonizer/Core/CFlags.h"
+#include "Charmonizer/Core/SharedLib.h"
 
 typedef struct chaz_MakeFile chaz_MakeFile;
 typedef struct chaz_MakeVar chaz_MakeVar;
@@ -141,12 +142,12 @@ chaz_MakeFile_add_compiled_exe(chaz_MakeFile *makefile, const char *exe,
  * to the list of files to clean.
  *
  * @param makefile The makefile.
- * @param name The name of the shared library without prefix or extension.
+ * @param lib The shared library.
  * @param sources The list of source files.
  * @param link_flags Additional link flags.
  */
 chaz_MakeRule*
-chaz_MakeFile_add_shared_lib(chaz_MakeFile *makefile, const char *name,
+chaz_MakeFile_add_shared_lib(chaz_MakeFile *makefile, chaz_SharedLib *lib,
                              const char *sources, chaz_CFlags *link_flags);
 
 /** Write the makefile to a file named 'Makefile' in the current directory.

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/3ba0ea2a/src/Charmonizer/Core/SharedLibrary.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/SharedLibrary.c b/src/Charmonizer/Core/SharedLibrary.c
new file mode 100644
index 0000000..5c9d0e9
--- /dev/null
+++ b/src/Charmonizer/Core/SharedLibrary.c
@@ -0,0 +1,135 @@
+/* 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.
+ */
+
+#include <string.h>
+#include <stdlib.h>
+#include "Charmonizer/Core/SharedLib.h"
+#include "Charmonizer/Core/Compiler.h"
+#include "Charmonizer/Core/Util.h"
+#include "Charmonizer/Core/OperatingSystem.h"
+
+struct chaz_SharedLib {
+    char *name;
+    char *version;
+    char *major_version;
+};
+
+static char*
+S_build_filename(chaz_SharedLib *lib, const char *version, const char *ext);
+
+static const char*
+S_get_prefix(void);
+
+chaz_SharedLib*
+chaz_SharedLib_new(const char *name, const char *version,
+                   const char *major_version) {
+    chaz_SharedLib *lib = (chaz_SharedLib*)malloc(sizeof(chaz_SharedLib));
+    lib->name          = chaz_Util_strdup(name);
+    lib->version       = chaz_Util_strdup(version);
+    lib->major_version = chaz_Util_strdup(major_version);
+    return lib;
+}
+
+void
+chaz_SharedLib_destroy(chaz_SharedLib *lib) {
+    free(lib->name);
+    free(lib->version);
+    free(lib->major_version);
+    free(lib);
+}
+
+const char*
+chaz_SharedLib_get_name(chaz_SharedLib *lib) {
+    return lib->name;
+}
+
+const char*
+chaz_SharedLib_get_version(chaz_SharedLib *lib) {
+    return lib->version;
+}
+
+const char*
+chaz_SharedLib_get_major_version(chaz_SharedLib *lib) {
+    return lib->major_version;
+}
+
+char*
+chaz_SharedLib_filename(chaz_SharedLib *lib) {
+    const char *shlib_ext = chaz_OS_shared_lib_ext();
+
+    if (strcmp(shlib_ext, ".dll") == 0) {
+        return S_build_filename(lib, lib->major_version, shlib_ext);
+    }
+    else {
+        return S_build_filename(lib, lib->version, shlib_ext);
+    }
+}
+
+char*
+chaz_SharedLib_major_version_filename(chaz_SharedLib *lib) {
+    const char *shlib_ext = chaz_OS_shared_lib_ext();
+
+    return S_build_filename(lib, lib->major_version, shlib_ext);
+}
+
+char*
+chaz_SharedLib_no_version_filename(chaz_SharedLib *lib) {
+    const char *prefix    = S_get_prefix();
+    const char *shlib_ext = chaz_OS_shared_lib_ext();
+
+    return chaz_Util_join("", prefix, lib->name, shlib_ext, NULL);
+}
+
+char*
+chaz_SharedLib_implib_filename(chaz_SharedLib *lib) {
+    return S_build_filename(lib, lib->major_version, ".lib");
+}
+
+char*
+chaz_SharedLib_export_filename(chaz_SharedLib *lib) {
+    return S_build_filename(lib, lib->major_version, ".exp");
+}
+
+static char*
+S_build_filename(chaz_SharedLib *lib, const char *version, const char *ext) {
+    const char *prefix    = S_get_prefix();
+    const char *shlib_ext = chaz_OS_shared_lib_ext();
+
+    if (strcmp(shlib_ext, ".dll") == 0) {
+        return chaz_Util_join("", prefix, lib->name, "-", version, ext, NULL);
+    }
+    else if (strcmp(shlib_ext, ".dylib") == 0) {
+        return chaz_Util_join("", prefix, lib->name, ".", version, ext, NULL);
+    }
+    else {
+        return chaz_Util_join("", prefix, lib->name, ext, ".", version, NULL);
+    }
+}
+
+static const char*
+S_get_prefix() {
+    if (chaz_CC_msvc_version_num()) {
+        return "";
+    }
+    else if (chaz_OS_is_cygwin()) {
+        return "cyg";
+    }
+    else {
+        return "lib";
+    }
+}
+
+

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/3ba0ea2a/src/Charmonizer/Core/SharedLibrary.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/SharedLibrary.h b/src/Charmonizer/Core/SharedLibrary.h
new file mode 100644
index 0000000..723f407
--- /dev/null
+++ b/src/Charmonizer/Core/SharedLibrary.h
@@ -0,0 +1,66 @@
+/* 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/SharedLibrary.h
+ */
+
+#ifndef H_CHAZ_SHARED_LIB
+#define H_CHAZ_SHARED_LIB
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct chaz_SharedLib chaz_SharedLib;
+
+chaz_SharedLib*
+chaz_SharedLib_new(const char *name, const char *version,
+                   const char *major_version);
+
+void
+chaz_SharedLib_destroy(chaz_SharedLib *flags);
+
+const char*
+chaz_SharedLib_get_name(chaz_SharedLib *lib);
+
+const char*
+chaz_SharedLib_get_version(chaz_SharedLib *lib);
+
+const char*
+chaz_SharedLib_get_major_version(chaz_SharedLib *lib);
+
+char*
+chaz_SharedLib_filename(chaz_SharedLib *lib);
+
+char*
+chaz_SharedLib_major_version_filename(chaz_SharedLib *lib);
+
+char*
+chaz_SharedLib_no_version_filename(chaz_SharedLib *lib);
+
+char*
+chaz_SharedLib_implib_filename(chaz_SharedLib *lib);
+
+char*
+chaz_SharedLib_export_filename(chaz_SharedLib *lib);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* H_CHAZ_SHARED_LIB */
+
+

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/3ba0ea2a/src/Charmonizer/Probe/Floats.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Probe/Floats.c b/src/Charmonizer/Probe/Floats.c
index fc31386..b78ec00 100644
--- a/src/Charmonizer/Probe/Floats.c
+++ b/src/Charmonizer/Probe/Floats.c
@@ -67,7 +67,7 @@ chaz_Floats_math_library(void) {
         return NULL;
     }
 
-    chaz_CFlags_add_library(temp_cflags, "m");
+    chaz_CFlags_add_external_library(temp_cflags, "m");
     output = chaz_CC_capture_output(sqrt_code, &output_len);
     chaz_CFlags_clear(temp_cflags);
 


[lucy-commits] [43/50] git commit: Move stdint typedefs from charmony.h to parcel.h

Posted by nw...@apache.org.
Move stdint typedefs from charmony.h to parcel.h

Change ConfWriterC to move global macro definitions, global typedefs,
and system includes into special sections that can be enabled by
defining macros of the form CHY_EMPLOY_MODULE.

Disable the stdint typedefs in Lucy's charmony.h and move them to
parcel.h.


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/14505452
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/14505452
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/14505452

Branch: refs/heads/master
Commit: 145054523fbf677084f9af28002b11c3fc4ef82e
Parents: 1c0f7c2
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Sat May 18 04:22:14 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Mon May 20 21:01:12 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Core/ConfWriterC.c | 86 ++++++++++++++++++++++++---------
 src/Charmonizer/Probe/Booleans.c   |  2 +-
 2 files changed, 64 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/14505452/src/Charmonizer/Core/ConfWriterC.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/ConfWriterC.c b/src/Charmonizer/Core/ConfWriterC.c
index 132a4e4..d50f779 100644
--- a/src/Charmonizer/Core/ConfWriterC.c
+++ b/src/Charmonizer/Core/ConfWriterC.c
@@ -44,6 +44,7 @@ typedef struct chaz_ConfElem {
 /* Static vars. */
 static struct {
     FILE          *fh;
+    char          *MODULE_NAME;
     chaz_ConfElem *defs;
     size_t         def_cap;
     size_t         def_count;
@@ -141,18 +142,17 @@ chaz_ConfWriterC_vappend_conf(const char *fmt, va_list args) {
 
 static int
 chaz_ConfWriterC_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 isupper(sym[0]);
+}
+
+static char*
+chaz_ConfWriterC_uppercase_string(const char *src) {
+    char *retval = chaz_Util_strdup(src);
+    size_t i;
+    for (i = 0; retval[i]; ++i) {
+        retval[i] = toupper(retval[i]);
     }
-    return true;
+    return retval;
 }
 
 static void
@@ -187,9 +187,10 @@ chaz_ConfWriterC_add_global_def(const char *sym, const char *value) {
 
 static void
 chaz_ConfWriterC_append_global_def_to_conf(const char *sym,
-        const char *value) {
+                                           const char *value) {
     char *name_end = strchr(sym, '(');
     if (name_end == NULL) {
+        if (strcmp(sym, value) == 0) { return; }
         fprintf(chaz_ConfWriterC.fh, "#ifndef %s\n", sym);
     }
     else {
@@ -231,7 +232,8 @@ chaz_ConfWriterC_add_global_typedef(const char *type, const char *alias) {
 
 static void
 chaz_ConfWriterC_append_global_typedef_to_conf(const char *type,
-        const char *alias) {
+                                               const char *alias) {
+    if (strcmp(type, alias) == 0) { return; }
     fprintf(chaz_ConfWriterC.fh, "typedef %s %s;\n", type, alias);
 }
 
@@ -260,32 +262,37 @@ chaz_ConfWriterC_append_local_include_to_conf(const char *header) {
 static void
 chaz_ConfWriterC_start_module(const char *module_name) {
     fprintf(chaz_ConfWriterC.fh, "\n/* %s */\n", module_name);
+    chaz_ConfWriterC.MODULE_NAME
+        = chaz_ConfWriterC_uppercase_string(module_name);
 }
 
 static void
 chaz_ConfWriterC_end_module(void) {
+    size_t num_globals = 0;
     size_t i;
     chaz_ConfElem *defs = chaz_ConfWriterC.defs;
     for (i = 0; i < chaz_ConfWriterC.def_count; i++) {
         switch (defs[i].type) {
+            case CHAZ_CONFELEM_GLOBAL_DEF:
+                ++num_globals;
+            /* fall through */
             case CHAZ_CONFELEM_DEF:
                 chaz_ConfWriterC_append_def_to_conf(defs[i].str1,
                                                     defs[i].str2);
                 break;
-            case CHAZ_CONFELEM_GLOBAL_DEF:
-                chaz_ConfWriterC_append_global_def_to_conf(defs[i].str1,
-                                                           defs[i].str2);
-                break;
+            case CHAZ_CONFELEM_GLOBAL_TYPEDEF: {
+                ++num_globals;
+                char *sym = chaz_ConfWriterC_uppercase_string(defs[i].str1);
+                chaz_ConfWriterC_append_def_to_conf(sym, defs[i].str2);
+                free(sym);
+            }
+            /* fall through */
             case CHAZ_CONFELEM_TYPEDEF:
                 chaz_ConfWriterC_append_typedef_to_conf(defs[i].str2,
                                                         defs[i].str1);
                 break;
-            case CHAZ_CONFELEM_GLOBAL_TYPEDEF:
-                chaz_ConfWriterC_append_global_typedef_to_conf(defs[i].str2,
-                                                               defs[i].str1);
-                break;
             case CHAZ_CONFELEM_SYS_INCLUDE:
-                chaz_ConfWriterC_append_sys_include_to_conf(defs[i].str1);
+                ++num_globals;
                 break;
             case CHAZ_CONFELEM_LOCAL_INCLUDE:
                 chaz_ConfWriterC_append_local_include_to_conf(defs[i].str1);
@@ -303,7 +310,7 @@ chaz_ConfWriterC_end_module(void) {
     );
     for (i = 0; i < chaz_ConfWriterC.def_count; i++) {
         switch (defs[i].type) {
-            case CHAZ_CONFELEM_DEF: 
+            case CHAZ_CONFELEM_DEF:
             case CHAZ_CONFELEM_TYPEDEF:
                 {
                     const char *sym = defs[i].str1;
@@ -330,8 +337,41 @@ chaz_ConfWriterC_end_module(void) {
     }
 
     fprintf(chaz_ConfWriterC.fh, "#endif /* USE_SHORT_NAMES */\n");
+
+    /* Write out global definitions and system includes. */
+    if (num_globals) {
+        fprintf(chaz_ConfWriterC.fh, "\n#ifdef CHY_EMPLOY_%s\n\n",
+                chaz_ConfWriterC.MODULE_NAME);
+        for (i = 0; i < chaz_ConfWriterC.def_count; i++) {
+            switch (defs[i].type) {
+                case CHAZ_CONFELEM_GLOBAL_DEF:
+                    chaz_ConfWriterC_append_global_def_to_conf(defs[i].str1,
+                                                               defs[i].str2);
+                    break;
+                case CHAZ_CONFELEM_GLOBAL_TYPEDEF:
+                    chaz_ConfWriterC_append_global_typedef_to_conf(
+                            defs[i].str2, defs[i].str1);
+                    break;
+                case CHAZ_CONFELEM_SYS_INCLUDE:
+                    chaz_ConfWriterC_append_sys_include_to_conf(defs[i].str1);
+                    break;
+                case CHAZ_CONFELEM_DEF:
+                case CHAZ_CONFELEM_TYPEDEF:
+                case CHAZ_CONFELEM_LOCAL_INCLUDE:
+                    /* no-op */
+                    break;
+                default:
+                    chaz_Util_die("Internal error: bad element type %d",
+                                  (int)defs[i].type);
+            }
+        }
+        fprintf(chaz_ConfWriterC.fh, "\n#endif /* EMPLOY_%s */\n",
+                chaz_ConfWriterC.MODULE_NAME);
+    }
+
     fprintf(chaz_ConfWriterC.fh, "\n");
 
+    free(chaz_ConfWriterC.MODULE_NAME);
     chaz_ConfWriterC_clear_def_list();
 }
 

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/14505452/src/Charmonizer/Probe/Booleans.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Probe/Booleans.c b/src/Charmonizer/Probe/Booleans.c
index 69ba35f..942e36b 100644
--- a/src/Charmonizer/Probe/Booleans.c
+++ b/src/Charmonizer/Probe/Booleans.c
@@ -30,7 +30,7 @@ chaz_Booleans_run(void) {
     }
     else {
         chaz_ConfWriter_append_conf(
-            "#ifndef __cplusplus\n"
+            "#if (defined(CHY_EMPLOY_BOOLEANS) && !defined(__cplusplus))\n"
             "  typedef int bool;\n"
             "  #ifndef true\n"
             "    #define true 1\n"


[lucy-commits] [39/50] git commit: Fix object extension for GCC/nmake

Posted by nw...@apache.org.
Fix object extension for GCC/nmake


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/4c0a62b9
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/4c0a62b9
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/4c0a62b9

Branch: refs/heads/master
Commit: 4c0a62b939f5203ad5bcfb7e6506bf2aaf6531bb
Parents: 9a64abb
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Wed May 15 22:13:02 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Wed May 15 22:19:40 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Core/Make.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/4c0a62b9/src/Charmonizer/Core/Make.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Make.c b/src/Charmonizer/Core/Make.c
index d15751d..2fbde93 100644
--- a/src/Charmonizer/Core/Make.c
+++ b/src/Charmonizer/Core/Make.c
@@ -443,11 +443,12 @@ chaz_MakeFile_write(chaz_MakeFile *makefile) {
 
     if (chaz_Make.is_nmake) {
         /* Inference rule for .c files. */
-        fprintf(out, ".c.obj :\n");
         if (chaz_CC_msvc_version_num()) {
+            fprintf(out, ".c.obj :\n");
             fprintf(out, "\t$(CC) /nologo $(CFLAGS) /c $< /Fo$@\n\n");
         }
         else {
+            fprintf(out, ".c.o :\n");
             fprintf(out, "\t$(CC) $(CFLAGS) -c $< -o $@\n\n");
         }
     }


[lucy-commits] [18/50] git commit: Rework creation of Makefile clean rules

Posted by nw...@apache.org.
Rework creation of Makefile clean rules

This allows to add custom commands to clean rules.


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/360df2cb
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/360df2cb
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/360df2cb

Branch: refs/heads/master
Commit: 360df2cbe445ab5946f6cc1a74bd44da74fe26c2
Parents: d217b03
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Wed May 1 18:14:58 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Wed May 1 18:14:58 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Core/Make.c | 226 +++++++++++++++++++--------------------
 src/Charmonizer/Core/Make.h |  32 ++++--
 2 files changed, 132 insertions(+), 126 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/360df2cb/src/Charmonizer/Core/Make.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Make.c b/src/Charmonizer/Core/Make.c
index 73ba316..eef026f 100644
--- a/src/Charmonizer/Core/Make.c
+++ b/src/Charmonizer/Core/Make.c
@@ -38,10 +38,8 @@ struct chaz_MakeFile {
     size_t          num_vars;
     chaz_MakeRule **rules;
     size_t          num_rules;
-    char          **cleanup_files;
-    size_t          num_cleanup_files;
-    char          **cleanup_dirs;
-    size_t          num_cleanup_dirs;
+    chaz_MakeRule  *clean;
+    chaz_MakeRule  *distclean;
 };
 
 /* Static vars. */
@@ -71,6 +69,15 @@ chaz_Make_detect(const char *make1, ...);
 static int
 chaz_Make_audition(const char *make);
 
+static chaz_MakeRule*
+S_new_rule(const char *target, const char *prereq);
+
+static void
+S_destroy_rule(chaz_MakeRule *rule);
+
+static void
+S_write_rule(chaz_MakeRule *rule, FILE *out);
+
 void
 chaz_Make_init(void) {
     const char *make;
@@ -157,13 +164,12 @@ chaz_MakeFile_new() {
     makefile->rules[0] = NULL;
     makefile->num_rules = 0;
 
-    makefile->cleanup_files = (char**)malloc(sizeof(char*));
-    makefile->cleanup_files[0] = NULL;
-    makefile->num_cleanup_files = 0;
+    makefile->clean     = S_new_rule("clean", NULL);
+    makefile->distclean = S_new_rule("distclean", "clean");
 
-    makefile->cleanup_dirs = (char**)malloc(sizeof(char*));
-    makefile->cleanup_dirs[0] = NULL;
-    makefile->num_cleanup_dirs = 0;
+    chaz_MakeRule_add_rm_command(makefile->distclean,
+                                 "charmonizer$(EXE_EXT) charmonizer$(OBJ_EXT)"
+                                 " charmony.h Makefile");
 
     return makefile;
 }
@@ -181,23 +187,12 @@ chaz_MakeFile_destroy(chaz_MakeFile *makefile) {
     free(makefile->vars);
 
     for (i = 0; makefile->rules[i]; i++) {
-        chaz_MakeRule *rule = makefile->rules[i];
-        if (rule->targets)  { free(rule->targets); }
-        if (rule->prereqs)  { free(rule->prereqs); }
-        if (rule->commands) { free(rule->commands); }
-        free(rule);
+        S_destroy_rule(makefile->rules[i]);
     }
     free(makefile->rules);
 
-    for (i = 0; makefile->cleanup_files[i]; i++) {
-        free(makefile->cleanup_files[i]);
-    }
-    free(makefile->cleanup_files);
-
-    for (i = 0; makefile->cleanup_dirs[i]; i++) {
-        free(makefile->cleanup_dirs[i]);
-    }
-    free(makefile->cleanup_dirs);
+    S_destroy_rule(makefile->clean);
+    S_destroy_rule(makefile->distclean);
 
     free(makefile);
 }
@@ -228,17 +223,10 @@ chaz_MakeFile_add_var(chaz_MakeFile *makefile, const char *name,
 chaz_MakeRule*
 chaz_MakeFile_add_rule(chaz_MakeFile *makefile, const char *target,
                        const char *prereq) {
-    chaz_MakeRule  *rule      = (chaz_MakeRule*)malloc(sizeof(chaz_MakeRule));
+    chaz_MakeRule  *rule      = S_new_rule(target, prereq);
     chaz_MakeRule **rules     = makefile->rules;
     size_t          num_rules = makefile->num_rules + 1;
 
-    rule->targets  = NULL;
-    rule->prereqs  = NULL;
-    rule->commands = NULL;
-
-    if (target) { chaz_MakeRule_add_target(rule, target); }
-    if (prereq) { chaz_MakeRule_add_prereq(rule, prereq); }
-
     rules = (chaz_MakeRule**)realloc(rules,
                                      (num_rules + 1) * sizeof(chaz_MakeRule*));
     rules[num_rules-1] = rule;
@@ -249,28 +237,14 @@ chaz_MakeFile_add_rule(chaz_MakeFile *makefile, const char *target,
     return rule;
 }
 
-void
-chaz_MakeFile_add_to_cleanup(chaz_MakeFile *makefile, const char *target) {
-    char   **files     = makefile->cleanup_files;
-    size_t   num_files = makefile->num_cleanup_files + 1;
-
-    files = (char**)realloc(files, (num_files + 1) * sizeof(char*));
-    files[num_files-1] = chaz_Util_strdup(target);
-    files[num_files]   = NULL;
-    makefile->cleanup_files     = files;
-    makefile->num_cleanup_files = num_files;
+chaz_MakeRule*
+chaz_MakeFile_clean_rule(chaz_MakeFile *makefile) {
+    return makefile->clean;
 }
 
-void
-chaz_MakeFile_add_dir_to_cleanup(chaz_MakeFile *makefile, const char *dir) {
-    char   **dirs     = makefile->cleanup_dirs;
-    size_t   num_dirs = makefile->num_cleanup_dirs + 1;
-
-    dirs = (char**)realloc(dirs, (num_dirs + 1) * sizeof(char*));
-    dirs[num_dirs-1] = chaz_Util_strdup(dir);
-    dirs[num_dirs]   = NULL;
-    makefile->cleanup_dirs     = dirs;
-    makefile->num_cleanup_dirs = num_dirs;
+chaz_MakeRule*
+chaz_MakeFile_distclean_rule(chaz_MakeFile *makefile) {
+    return makefile->distclean;
 }
 
 chaz_MakeRule*
@@ -295,7 +269,7 @@ chaz_MakeFile_add_exe(chaz_MakeFile *makefile, const char *exe,
                              local_flags_string, NULL);
     chaz_MakeRule_add_command(rule, command);
 
-    chaz_MakeFile_add_to_cleanup(makefile, exe);
+    chaz_MakeRule_add_rm_command(makefile->clean, exe);
 
     chaz_CFlags_destroy(local_flags);
     free(command);
@@ -324,7 +298,8 @@ chaz_MakeFile_add_compiled_exe(chaz_MakeFile *makefile, const char *exe,
                              local_flags_string, NULL);
     chaz_MakeRule_add_command(rule, command);
 
-    chaz_MakeFile_add_to_cleanup(makefile, exe);
+    chaz_MakeRule_add_rm_command(makefile->clean, exe);
+    /* TODO: Clean .obj file on Windows. */
 
     chaz_CFlags_destroy(local_flags);
     free(command);
@@ -356,7 +331,7 @@ chaz_MakeFile_add_shared_lib(chaz_MakeFile *makefile, const char *name,
                              local_flags_string, NULL);
     chaz_MakeRule_add_command(rule, command);
 
-    chaz_MakeFile_add_to_cleanup(makefile, shared_lib);
+    chaz_MakeRule_add_rm_command(makefile->clean, shared_lib);
 
     chaz_CFlags_destroy(local_flags);
     free(shared_lib);
@@ -382,69 +357,11 @@ chaz_MakeFile_write(chaz_MakeFile *makefile) {
     fprintf(out, "\n");
 
     for (i = 0; makefile->rules[i]; i++) {
-        chaz_MakeRule *rule = makefile->rules[i];
-        fprintf(out, "%s :", rule->targets);
-        if (rule->prereqs) {
-            fprintf(out, " %s", rule->prereqs);
-        }
-        fprintf(out, "\n");
-        if (rule->commands) {
-            fprintf(out, "%s", rule->commands);
-        }
-        fprintf(out, "\n");
-    }
-
-    if (makefile->cleanup_files[0] || makefile->cleanup_dirs[0]) {
-        fprintf(out, "clean :\n");
-        if (shell_type == CHAZ_OS_POSIX) {
-            if (makefile->cleanup_files[0]) {
-                fprintf(out, "\trm -f");
-                for (i = 0; makefile->cleanup_files[i]; i++) {
-                    const char *file = makefile->cleanup_files[i];
-                    fprintf(out, " \\\n\t    %s", file);
-                }
-                fprintf(out, "\n");
-            }
-            if (makefile->cleanup_dirs[0]) {
-                fprintf(out, "\trm -rf");
-                for (i = 0; makefile->cleanup_dirs[i]; i++) {
-                    const char *dir = makefile->cleanup_dirs[i];
-                    fprintf(out, " \\\n\t    %s", dir);
-                }
-                fprintf(out, "\n");
-            }
-        }
-        else if (shell_type == CHAZ_OS_CMD_EXE) {
-            for (i = 0; makefile->cleanup_files[i]; i++) {
-                const char *file = makefile->cleanup_files[i];
-                fprintf(out, "\tfor %%i in (%s) do @if exist %%i del /f %%i\n",
-                        file);
-            }
-            for (i = 0; makefile->cleanup_dirs[i]; i++) {
-                const char *dir = makefile->cleanup_dirs[i];
-                fprintf(out,
-                        "\tfor %%i in (%s) do @if exist %%i rmdir /s /q %%i\n",
-                        dir);
-            }
-        }
-        else {
-            chaz_Util_die("Unsupported shell type: %d", shell_type);
-        }
-        fprintf(out, "\n");
+        S_write_rule(makefile->rules[i], out);
     }
 
-    fprintf(out, "distclean : clean\n");
-    if (shell_type == CHAZ_OS_POSIX) {
-        fprintf(out, "\trm -f charmonizer$(EXE_EXT) charmony.h Makefile\n\n");
-    }
-    else if (shell_type == CHAZ_OS_CMD_EXE) {
-        fprintf(out,
-            "\tfor %%i in (charmonizer$(EXE_EXT) charmonizer$(OBJ_EXT)"
-            " charmony.h Makefile) do @if exist %%i del /f %%i\n\n");
-    }
-    else {
-        chaz_Util_die("Unsupported shell type: %d", shell_type);
-    }
+    S_write_rule(makefile->clean, out);
+    S_write_rule(makefile->distclean, out);
 
     if (chaz_Make.is_nmake) {
         /* Inference rule for .c files. */
@@ -485,6 +402,41 @@ chaz_MakeVar_append(chaz_MakeVar *var, const char *element) {
     var->num_elements++;
 }
 
+static chaz_MakeRule*
+S_new_rule(const char *target, const char *prereq) {
+    chaz_MakeRule *rule = (chaz_MakeRule*)malloc(sizeof(chaz_MakeRule));
+
+    rule->targets  = NULL;
+    rule->prereqs  = NULL;
+    rule->commands = NULL;
+
+    if (target) { chaz_MakeRule_add_target(rule, target); }
+    if (prereq) { chaz_MakeRule_add_prereq(rule, prereq); }
+
+    return rule;
+}
+
+static void
+S_destroy_rule(chaz_MakeRule *rule) {
+    if (rule->targets)  { free(rule->targets); }
+    if (rule->prereqs)  { free(rule->prereqs); }
+    if (rule->commands) { free(rule->commands); }
+    free(rule);
+}
+
+static void
+S_write_rule(chaz_MakeRule *rule, FILE *out) {
+    fprintf(out, "%s :", rule->targets);
+    if (rule->prereqs) {
+        fprintf(out, " %s", rule->prereqs);
+    }
+    fprintf(out, "\n");
+    if (rule->commands) {
+        fprintf(out, "%s", rule->commands);
+    }
+    fprintf(out, "\n");
+}
+
 void
 chaz_MakeRule_add_target(chaz_MakeRule *rule, const char *target) {
     char *targets;
@@ -533,7 +485,47 @@ chaz_MakeRule_add_command(chaz_MakeRule *rule, const char *command) {
 }
 
 void
-chaz_MakeRule_add_command_make(chaz_MakeRule *rule, const char *dir,
+chaz_MakeRule_add_rm_command(chaz_MakeRule *rule, const char *files) {
+    int   shell_type = chaz_OS_shell_type();
+    char *command;
+
+    if (shell_type == CHAZ_OS_POSIX) {
+        command = chaz_Util_join(" ", "rm -f", files, NULL);
+    }
+    else if (shell_type == CHAZ_OS_CMD_EXE) {
+        command = chaz_Util_join("", "for %i in (", files,
+                                 ") do @if exist %i del /f %i\n", NULL);
+    }
+    else {
+        chaz_Util_die("Unsupported shell type: %d", shell_type);
+    }
+
+    chaz_MakeRule_add_command(rule, command);
+    free(command);
+}
+
+void
+chaz_MakeRule_add_recursive_rm_command(chaz_MakeRule *rule, const char *dirs) {
+    int   shell_type = chaz_OS_shell_type();
+    char *command;
+
+    if (shell_type == CHAZ_OS_POSIX) {
+        command = chaz_Util_join(" ", "rm -rf", dirs, NULL);
+    }
+    else if (shell_type == CHAZ_OS_CMD_EXE) {
+        command = chaz_Util_join("", "for %i in (", dirs,
+                                 ") do @if exist %i rmdir /s /q %i\n", NULL);
+    }
+    else {
+        chaz_Util_die("Unsupported shell type: %d", shell_type);
+    }
+
+    chaz_MakeRule_add_command(rule, command);
+    free(command);
+}
+
+void
+chaz_MakeRule_add_make_command(chaz_MakeRule *rule, const char *dir,
                                const char *target) {
     char *command;
 

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/360df2cb/src/Charmonizer/Core/Make.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Make.h b/src/Charmonizer/Core/Make.h
index 47a55c5..97cae84 100644
--- a/src/Charmonizer/Core/Make.h
+++ b/src/Charmonizer/Core/Make.h
@@ -94,21 +94,19 @@ chaz_MakeRule*
 chaz_MakeFile_add_rule(chaz_MakeFile *makefile, const char *target,
                        const char *prereq);
 
-/** Add a file to the 'clean' target.
+/** Return the rule for the 'clean' target.
  *
  * @param makefile The makefile.
- * @param target The filename.
  */
-void
-chaz_MakeFile_add_to_cleanup(chaz_MakeFile *makefile, const char *target);
+chaz_MakeRule*
+chaz_MakeFile_clean_rule(chaz_MakeFile *makefile);
 
-/** Add a directory to the 'clean' target.
+/** Return the rule for the 'distclean' target.
  *
  * @param makefile The makefile.
- * @param dir The directory.
  */
-void
-chaz_MakeFile_add_dir_to_cleanup(chaz_MakeFile *makefile, const char *dir);
+chaz_MakeRule*
+chaz_MakeFile_distclean_rule(chaz_MakeFile *makefile);
 
 /** Add a rule to link an executable. The executable will also be added to the
  * list of files to clean.
@@ -186,6 +184,22 @@ chaz_MakeRule_add_prereq(chaz_MakeRule *rule, const char *prereq);
 void
 chaz_MakeRule_add_command(chaz_MakeRule *rule, const char *command);
 
+/** Add a command to remove one or more files.
+ *
+ * @param rule The rule.
+ * @param files The list of files.
+ */
+void
+chaz_MakeRule_add_rm_command(chaz_MakeRule *rule, const char *files);
+
+/** Add a command to remove one or more directories.
+ *
+ * @param rule The rule.
+ * @param dirs The list of directories.
+ */
+void
+chaz_MakeRule_add_recursive_rm_command(chaz_MakeRule *rule, const char *dirs);
+
 /** Add one or more commands to call another makefile recursively.
  *
  * @param rule The rule.
@@ -193,7 +207,7 @@ chaz_MakeRule_add_command(chaz_MakeRule *rule, const char *command);
  * @param target The target to call. Pass NULL for the default target.
  */
 void
-chaz_MakeRule_add_command_make(chaz_MakeRule *rule, const char *dir,
+chaz_MakeRule_add_make_command(chaz_MakeRule *rule, const char *dir,
                                const char *target);
 
 #ifdef __cplusplus


[lucy-commits] [32/50] git commit: Set shared library version

Posted by nw...@apache.org.
Set shared library version

Using '-current_version' for Mach-O and '-Wl,-soname' for ELF systems.


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/57bec55c
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/57bec55c
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/57bec55c

Branch: refs/heads/master
Commit: 57bec55ccedfe3195181379216fce66b91a8563d
Parents: 3ba0ea2
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Mon May 13 20:51:50 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Wed May 15 19:13:53 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Core/CFlags.c | 26 +++++++++++++++++++++++++-
 src/Charmonizer/Core/CFlags.h |  4 ++++
 src/Charmonizer/Core/Make.c   |  1 +
 3 files changed, 30 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/57bec55c/src/Charmonizer/Core/CFlags.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/CFlags.c b/src/Charmonizer/Core/CFlags.c
index 4642a99..5b4e15d 100644
--- a/src/Charmonizer/Core/CFlags.c
+++ b/src/Charmonizer/Core/CFlags.c
@@ -214,7 +214,7 @@ chaz_CFlags_link_shared_library(chaz_CFlags *flags) {
         string = "/DLL";
     }
     else if (flags->style == CHAZ_CFLAGS_STYLE_GNU) {
-        if (chaz_OS_is_darwin()) {
+        if (strcmp(chaz_OS_shared_lib_ext(), ".dylib") == 0) {
             string = "-dynamiclib";
         }
         else {
@@ -229,6 +229,30 @@ chaz_CFlags_link_shared_library(chaz_CFlags *flags) {
 }
 
 void
+chaz_CFlags_set_shared_library_version(chaz_CFlags *flags,
+                                       chaz_SharedLib *lib) {
+    const char *shlib_ext = chaz_OS_shared_lib_ext();
+    char       *string;
+
+    if (flags->style != CHAZ_CFLAGS_STYLE_GNU
+        || strcmp(shlib_ext, ".dll") == 0) {
+        return;
+    }
+
+    if (strcmp(chaz_OS_shared_lib_ext(), ".dylib") == 0) {
+        const char *version = chaz_SharedLib_get_version(lib);
+        string = chaz_Util_join(" ", "-current_version", version, NULL);
+    }
+    else {
+        char *soname = chaz_SharedLib_major_version_filename(lib);
+        string = chaz_Util_join("", "-Wl,-soname,", soname, NULL);
+        free(soname);
+    }
+    chaz_CFlags_append(flags, string);
+    free(string);
+}
+
+void
 chaz_CFlags_set_link_output(chaz_CFlags *flags, const char *filename) {
     const char *output;
     char *string;

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/57bec55c/src/Charmonizer/Core/CFlags.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/CFlags.h b/src/Charmonizer/Core/CFlags.h
index 5f4151d..cb9c75f 100644
--- a/src/Charmonizer/Core/CFlags.h
+++ b/src/Charmonizer/Core/CFlags.h
@@ -77,6 +77,10 @@ void
 chaz_CFlags_link_shared_library(chaz_CFlags *flags);
 
 void
+chaz_CFlags_set_shared_library_version(chaz_CFlags *flags,
+                                       chaz_SharedLib *lib);
+
+void
 chaz_CFlags_set_link_output(chaz_CFlags *flags, const char *filename);
 
 void

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/57bec55c/src/Charmonizer/Core/Make.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Make.c b/src/Charmonizer/Core/Make.c
index 410254e..1df757a 100644
--- a/src/Charmonizer/Core/Make.c
+++ b/src/Charmonizer/Core/Make.c
@@ -339,6 +339,7 @@ chaz_MakeFile_add_shared_lib(chaz_MakeFile *makefile, chaz_SharedLib *lib,
         link_flags_string = chaz_CFlags_get_string(link_flags);
     }
     chaz_CFlags_link_shared_library(local_flags);
+    chaz_CFlags_set_shared_library_version(local_flags, lib);
     chaz_CFlags_set_link_output(local_flags, filename);
     local_flags_string = chaz_CFlags_get_string(local_flags);
     command = chaz_Util_join(" ", link, sources, link_flags_string,


[lucy-commits] [35/50] git commit: Rework Makefile paths

Posted by nw...@apache.org.
Rework Makefile paths

Build paths in C and don't use Makefile variables.


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/8462bc96
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/8462bc96
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/8462bc96

Branch: refs/heads/master
Commit: 8462bc961144d5ede626afdc296b064603a4d8c6
Parents: 2a1179f
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Wed May 15 00:00:28 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Wed May 15 19:13:54 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Core/Make.c | 2 +-
 src/Charmonizer/Core/Make.h | 3 ++-
 2 files changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/8462bc96/src/Charmonizer/Core/Make.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Make.c b/src/Charmonizer/Core/Make.c
index ef7a2ee..b3aba56 100644
--- a/src/Charmonizer/Core/Make.c
+++ b/src/Charmonizer/Core/Make.c
@@ -713,7 +713,7 @@ chaz_Make_list_files(const char *dir, const char *ext,
                           file);
         }
 
-        callback(file + prefix_len, context);
+        callback(dir, file + prefix_len, context);
     }
 
     free(prefix);

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/8462bc96/src/Charmonizer/Core/Make.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Make.h b/src/Charmonizer/Core/Make.h
index 0ba87b0..7139dd4 100644
--- a/src/Charmonizer/Core/Make.h
+++ b/src/Charmonizer/Core/Make.h
@@ -31,7 +31,8 @@ typedef struct chaz_MakeFile chaz_MakeFile;
 typedef struct chaz_MakeVar chaz_MakeVar;
 typedef struct chaz_MakeRule chaz_MakeRule;
 
-typedef void (*chaz_Make_list_files_callback_t)(char *file, void *context);
+typedef void (*chaz_Make_list_files_callback_t)(const char *dir, char *file,
+                                                void *context);
 
 /** Initialize the environment.
  */


[lucy-commits] [06/50] git commit: Add some Charmonizer functions to work with shared libraries

Posted by nw...@apache.org.
Add some Charmonizer functions to work with shared libraries

* chaz_CC_shared_obj_cflags
* chaz_CC_library_path_flag
* chaz_CC_link_with_shared_obj_flag


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/bd9d2349
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/bd9d2349
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/bd9d2349

Branch: refs/heads/master
Commit: bd9d23492ca48585965f7c90a59db12f5af7cee1
Parents: f5a3106
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Mon Mar 11 20:20:45 2013 +0100
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Sun Mar 24 17:13:47 2013 +0100

----------------------------------------------------------------------
 src/Charmonizer/Core/Compiler.c | 45 +++++++++++++++++++++++++++++++++++-
 src/Charmonizer/Core/Compiler.h |  9 ++++++++
 2 files changed, 53 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/bd9d2349/src/Charmonizer/Core/Compiler.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Compiler.c b/src/Charmonizer/Core/Compiler.c
index 19dbbb1..a5de6a9 100644
--- a/src/Charmonizer/Core/Compiler.c
+++ b/src/Charmonizer/Core/Compiler.c
@@ -409,6 +409,19 @@ chaz_CC_msvc_version_num(void) {
 }
 
 const char*
+chaz_CC_shared_obj_cflags() {
+    if (chaz_CC.intval__MSC_VER) {
+        return "";
+    }
+    else if (chaz_OS_is_darwin()) {
+        return "-fno-common";
+    }
+    else {
+        return "-fPIC";
+    }
+}
+
+const char*
 chaz_CC_link_command() {
     if (chaz_CC.intval__MSC_VER) {
         return "link";
@@ -429,7 +442,7 @@ chaz_CC_link_shared_obj_flag() {
         return "/DLL";
     }
     else if (chaz_OS_is_darwin()) {
-        return "-dynamiclib ";
+        return "-dynamiclib";
     }
     else {
         return "-shared";
@@ -446,4 +459,34 @@ chaz_CC_link_output_flag() {
     }
 }
 
+char*
+chaz_CC_library_path_flag(const char *directory) {
+    char *flag = (char*)malloc(20 + sizeof(directory));
+    if (chaz_CC.intval__MSC_VER) {
+        if (strcmp(directory, ".") == 0) {
+            /* The MS linker searches the current directory by default. */
+            strcpy(flag, "");
+        }
+        else {
+            sprintf(flag, "/LIBPATH:%s", directory);
+        }
+    }
+    else {
+        sprintf(flag, "-L%s", directory);
+    }
+    return flag;
+}
+
+char*
+chaz_CC_link_with_shared_obj_flag(const char *shared_obj) {
+    char *flag = (char*)malloc(20 + sizeof(shared_obj));
+    if (chaz_CC.intval__MSC_VER) {
+        sprintf(flag, "%s.lib", shared_obj);
+    }
+    else {
+        sprintf(flag, "-l%s", shared_obj);
+    }
+    return flag;
+}
+
 

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/bd9d2349/src/Charmonizer/Core/Compiler.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Compiler.h b/src/Charmonizer/Core/Compiler.h
index c398148..6fc4a5e 100644
--- a/src/Charmonizer/Core/Compiler.h
+++ b/src/Charmonizer/Core/Compiler.h
@@ -114,6 +114,9 @@ int
 chaz_CC_msvc_version_num(void);
 
 const char*
+chaz_CC_shared_obj_cflags(void);
+
+const char*
 chaz_CC_link_command(void);
 
 const char*
@@ -125,6 +128,12 @@ chaz_CC_link_shared_obj_flag(void);
 const char*
 chaz_CC_link_output_flag(void);
 
+char*
+chaz_CC_library_path_flag(const char *directory);
+
+char*
+chaz_CC_link_with_shared_obj_flag(const char *shared_obj);
+
 #ifdef __cplusplus
 }
 #endif


[lucy-commits] [41/50] git commit: Include stdarg.h unconditionally

Posted by nw...@apache.org.
Include stdarg.h unconditionally

It's part of C89.


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/cc16e427
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/cc16e427
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/cc16e427

Branch: refs/heads/master
Commit: cc16e42768b1886d46f7f84be671399808c825b8
Parents: 4528872
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Sat May 18 02:02:22 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Mon May 20 21:01:11 2013 +0200

----------------------------------------------------------------------
 charmonize.c | 5 -----
 1 file changed, 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/cc16e427/charmonize.c
----------------------------------------------------------------------
diff --git a/charmonize.c b/charmonize.c
index 8c32c5d..b31ea6e 100644
--- a/charmonize.c
+++ b/charmonize.c
@@ -140,11 +140,6 @@ int main(int argc, char **argv) {
         "#endif\n\n"
     );
     chaz_ConfWriter_append_conf(
-        "#ifdef CHY_HAS_STDARG_H\n"
-        "  #include <stdarg.h>\n"
-        "#endif\n\n"
-    );
-    chaz_ConfWriter_append_conf(
         "#ifdef CHY_HAS_ALLOCA_H\n"
         "  #include <alloca.h>\n"
         "#elif defined(CHY_HAS_MALLOC_H)\n"


[lucy-commits] [49/50] git commit: Add debugging option to Charmonizer CFlags

Posted by nw...@apache.org.
Add debugging option to Charmonizer CFlags


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/399f6b9e
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/399f6b9e
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/399f6b9e

Branch: refs/heads/master
Commit: 399f6b9e42beb886f249cb897db8bc8177c6f9b3
Parents: f581f62
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Sat Dec 14 14:34:42 2013 +0100
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Sat Dec 14 14:46:46 2013 +0100

----------------------------------------------------------------------
 src/Charmonizer/Core/CFlags.c | 7 +++++++
 1 file changed, 7 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/399f6b9e/src/Charmonizer/Core/CFlags.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/CFlags.c b/src/Charmonizer/Core/CFlags.c
index 5b4e15d..f526a7d 100644
--- a/src/Charmonizer/Core/CFlags.c
+++ b/src/Charmonizer/Core/CFlags.c
@@ -153,6 +153,13 @@ chaz_CFlags_enable_optimization(chaz_CFlags *flags) {
 }
 
 void
+chaz_CFlags_enable_debugging(chaz_CFlags *flags) {
+    if (flags->style == CHAZ_CFLAGS_STYLE_GNU) {
+        chaz_CFlags_append(flags, "-g");
+    }
+}
+
+void
 chaz_CFlags_disable_strict_aliasing(chaz_CFlags *flags) {
     if (flags->style == CHAZ_CFLAGS_STYLE_MSVC) {
         return;


[lucy-commits] [03/50] git commit: Put extra link flags after objects

Posted by nw...@apache.org.
Put extra link flags after objects

On some systems, libraries have to specified after objects when linking.


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/f098de3f
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/f098de3f
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/f098de3f

Branch: refs/heads/master
Commit: f098de3fb5f61c8018f055324b302142b7833f20
Parents: 6ea08d9
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Thu Mar 14 13:33:28 2013 +0100
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Thu Mar 14 13:42:59 2013 +0100

----------------------------------------------------------------------
 src/Charmonizer/Core/Make.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/f098de3f/src/Charmonizer/Core/Make.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Make.c b/src/Charmonizer/Core/Make.c
index 8a8f149..9a44d27 100644
--- a/src/Charmonizer/Core/Make.c
+++ b/src/Charmonizer/Core/Make.c
@@ -258,13 +258,13 @@ chaz_MakeFile_add_exe(chaz_MakeFile *makefile, const char *exe,
     size = strlen(pattern)
            + strlen(link)
            + strlen(link_flags)
-           + strlen(extra_link_flags)
            + strlen(objects)
+           + strlen(extra_link_flags)
            + strlen(output_flag)
            + strlen(exe)
            + 50;
     command = (char*)malloc(size);
-    sprintf(command, pattern, link, link_flags, extra_link_flags, objects,
+    sprintf(command, pattern, link, link_flags, objects, extra_link_flags,
             output_flag, exe);
     chaz_MakeRule_add_command(rule, command);
 
@@ -292,14 +292,14 @@ chaz_MakeFile_add_shared_obj(chaz_MakeFile *makefile, const char *shared_obj,
            + strlen(link)
            + strlen(shobj_flags)
            + strlen(link_flags)
-           + strlen(extra_link_flags)
            + strlen(objects)
+           + strlen(extra_link_flags)
            + strlen(output_flag)
            + strlen(shared_obj)
            + 50;
     command = (char*)malloc(size);
-    sprintf(command, pattern, link, shobj_flags, link_flags, extra_link_flags,
-            objects, output_flag, shared_obj);
+    sprintf(command, pattern, link, shobj_flags, link_flags, objects,
+            extra_link_flags, output_flag, shared_obj);
     chaz_MakeRule_add_command(rule, command);
 
     chaz_MakeFile_add_to_cleanup(makefile, shared_obj);


[lucy-commits] [22/50] git commit: Add /nologo to recursive nmake invocations

Posted by nw...@apache.org.
Add /nologo to recursive nmake invocations


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/19d279b7
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/19d279b7
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/19d279b7

Branch: refs/heads/master
Commit: 19d279b756b1a9f7bd7765f6e233063e2e9e3d0f
Parents: d1337e3
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Thu May 2 15:41:24 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Thu May 2 15:44:32 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Core/Make.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/19d279b7/src/Charmonizer/Core/Make.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Make.c b/src/Charmonizer/Core/Make.c
index a35c1a8..5210154 100644
--- a/src/Charmonizer/Core/Make.c
+++ b/src/Charmonizer/Core/Make.c
@@ -556,10 +556,10 @@ chaz_MakeRule_add_make_command(chaz_MakeRule *rule, const char *dir,
         free(command);
 
         if (!target) {
-            chaz_MakeRule_add_command(rule, "$(MAKE)");
+            chaz_MakeRule_add_command(rule, "$(MAKE) /nologo");
         }
         else {
-            command = chaz_Util_join(" ", "$(MAKE)", target, NULL);
+            command = chaz_Util_join(" ", "$(MAKE) /nologo", target, NULL);
             chaz_MakeRule_add_command(rule, command);
             free(command);
         }


[lucy-commits] [24/50] git commit: Fix Cygwin detection

Posted by nw...@apache.org.
Fix Cygwin detection


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/2d425e29
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/2d425e29
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/2d425e29

Branch: refs/heads/master
Commit: 2d425e29c0fa99d5162c940ec95114fc4e3e1ff2
Parents: 19d279b
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Sat May 4 18:18:09 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Sat May 4 18:18:09 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Core/Compiler.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/2d425e29/src/Charmonizer/Core/Compiler.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Compiler.c b/src/Charmonizer/Core/Compiler.c
index 2130b47..22390b4 100644
--- a/src/Charmonizer/Core/Compiler.c
+++ b/src/Charmonizer/Core/Compiler.c
@@ -364,7 +364,7 @@ chaz_CC_shared_lib_file(const char *name) {
     const char *prefix = "";
     const char *shlib_ext = chaz_OS_shared_lib_ext();
     if (!chaz_CC.intval__MSC_VER) {
-        if (strcmp(chaz_OS_name(), "cygwin") == 0) {
+        if (chaz_OS_is_cygwin()) {
             prefix = "cyg";
         }
         else {


[lucy-commits] [33/50] git commit: Add MSVC /nologo automatically

Posted by nw...@apache.org.
Add MSVC /nologo automatically


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/ad0b1afc
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/ad0b1afc
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/ad0b1afc

Branch: refs/heads/master
Commit: ad0b1afc6271c441b785caf2337504be2a89c357
Parents: 5d9d338
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Tue May 14 21:46:48 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Wed May 15 19:13:53 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Core/Make.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/ad0b1afc/src/Charmonizer/Core/Make.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Make.c b/src/Charmonizer/Core/Make.c
index d57034e..22d4764 100644
--- a/src/Charmonizer/Core/Make.c
+++ b/src/Charmonizer/Core/Make.c
@@ -276,6 +276,9 @@ chaz_MakeFile_add_exe(chaz_MakeFile *makefile, const char *exe,
     if (link_flags) {
         link_flags_string = chaz_CFlags_get_string(link_flags);
     }
+    if (chaz_CC_msvc_version_num()) {
+        chaz_CFlags_append(local_flags, "/nologo");
+    }
     chaz_CFlags_set_link_output(local_flags, exe);
     local_flags_string = chaz_CFlags_get_string(local_flags);
     command = chaz_Util_join(" ", link, sources, link_flags_string,
@@ -304,6 +307,9 @@ chaz_MakeFile_add_compiled_exe(chaz_MakeFile *makefile, const char *exe,
     if (cflags) {
         cflags_string = chaz_CFlags_get_string(cflags);
     }
+    if (chaz_CC_msvc_version_num()) {
+        chaz_CFlags_append(local_flags, "/nologo");
+    }
     chaz_CFlags_set_output_exe(local_flags, exe);
     local_flags_string = chaz_CFlags_get_string(local_flags);
     command = chaz_Util_join(" ", cc, sources, cflags_string,
@@ -335,6 +341,9 @@ chaz_MakeFile_add_shared_lib(chaz_MakeFile *makefile, chaz_SharedLib *lib,
     if (link_flags) {
         link_flags_string = chaz_CFlags_get_string(link_flags);
     }
+    if (chaz_CC_msvc_version_num()) {
+        chaz_CFlags_append(local_flags, "/nologo");
+    }
     chaz_CFlags_link_shared_library(local_flags);
     chaz_CFlags_set_shared_library_version(local_flags, lib);
     chaz_CFlags_set_link_output(local_flags, filename);
@@ -388,7 +397,7 @@ chaz_MakeFile_write(chaz_MakeFile *makefile) {
         /* Inference rule for .c files. */
         fprintf(out, ".c.obj :\n");
         if (chaz_CC_msvc_version_num()) {
-            fprintf(out, "\t$(CC) $(CFLAGS) /c $< /Fo$@\n\n");
+            fprintf(out, "\t$(CC) /nologo $(CFLAGS) /c $< /Fo$@\n\n");
         }
         else {
             fprintf(out, "\t$(CC) $(CFLAGS) -c $< -o $@\n\n");


[lucy-commits] [38/50] git commit: Quote Windows DIR_SEP

Posted by nw...@apache.org.
Quote Windows DIR_SEP


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/9a64abbd
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/9a64abbd
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/9a64abbd

Branch: refs/heads/master
Commit: 9a64abbd7ce23954d1a7d6a3cf047486b401b7d8
Parents: 2b3f2b0
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Wed May 15 21:57:16 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Wed May 15 21:57:16 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Probe/DirManip.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/9a64abbd/src/Charmonizer/Probe/DirManip.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Probe/DirManip.c b/src/Charmonizer/Probe/DirManip.c
index 47f68df..c6465d7 100644
--- a/src/Charmonizer/Probe/DirManip.c
+++ b/src/Charmonizer/Probe/DirManip.c
@@ -177,7 +177,11 @@ chaz_DirManip_run(void) {
         chaz_ConfWriter_add_def("MAKEDIR_MODE_IGNORED", "1");
     }
 
-    {
+    if (strcmp(dir_sep, "\\") == 0) {
+        chaz_ConfWriter_add_def("DIR_SEP", "\"\\\\\"");
+        chaz_ConfWriter_add_def("DIR_SEP_CHAR", "'\\\\'");
+    }
+    else {
         char scratch[5];
         sprintf(scratch, "\"%s\"", dir_sep);
         chaz_ConfWriter_add_def("DIR_SEP", scratch);


[lucy-commits] [13/50] git commit: Windows fixes for C library

Posted by nw...@apache.org.
Windows fixes for C library


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/4382b440
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/4382b440
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/4382b440

Branch: refs/heads/master
Commit: 4382b4400ad2f8d7f871ec6acf2a128996bdc0bc
Parents: 0273835
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Sat Apr 27 21:18:00 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Sat Apr 27 21:18:00 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Core/CFlags.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/4382b440/src/Charmonizer/Core/CFlags.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/CFlags.c b/src/Charmonizer/Core/CFlags.c
index 3e2a2cc..36aed5b 100644
--- a/src/Charmonizer/Core/CFlags.c
+++ b/src/Charmonizer/Core/CFlags.c
@@ -182,7 +182,7 @@ chaz_CFlags_set_warnings_as_errors(chaz_CFlags *flags) {
 void
 chaz_CFlags_compile_shared_library(chaz_CFlags *flags) {
     const char *string;
-    if (!flags->style == CHAZ_CFLAGS_STYLE_GNU) {
+    if (flags->style != CHAZ_CFLAGS_STYLE_GNU) {
         return;
     }
     if (chaz_OS_is_darwin()) {


[lucy-commits] [50/50] git commit: Add a Python target for Charmonizer.

Posted by nw...@apache.org.
Add a Python target for Charmonizer.


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/40c0e55d
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/40c0e55d
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/40c0e55d

Branch: refs/heads/master
Commit: 40c0e55d4481ed39a4e3f4a3329c192ce51cb616
Parents: 399f6b9
Author: Marvin Humphrey <ma...@rectangular.com>
Authored: Sat Dec 28 15:20:15 2013 -0800
Committer: Marvin Humphrey <ma...@rectangular.com>
Committed: Sat Dec 28 15:20:15 2013 -0800

----------------------------------------------------------------------
 buildbin/meld.pl                        |   1 +
 src/Charmonizer/Core/ConfWriterPython.c | 223 +++++++++++++++++++++++++++
 src/Charmonizer/Core/ConfWriterPython.h |  37 +++++
 src/Charmonizer/Probe.c                 |  11 +-
 src/Charmonizer/Probe.h                 |   2 +
 5 files changed, 273 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/40c0e55d/buildbin/meld.pl
----------------------------------------------------------------------
diff --git a/buildbin/meld.pl b/buildbin/meld.pl
index a615331..4f84721 100755
--- a/buildbin/meld.pl
+++ b/buildbin/meld.pl
@@ -73,6 +73,7 @@ my @core = qw(
     ConfWriter
     ConfWriterC
     ConfWriterPerl
+    ConfWriterPython
     ConfWriterRuby
     HeaderChecker
     Make

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/40c0e55d/src/Charmonizer/Core/ConfWriterPython.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/ConfWriterPython.c b/src/Charmonizer/Core/ConfWriterPython.c
new file mode 100644
index 0000000..e4cc58b
--- /dev/null
+++ b/src/Charmonizer/Core/ConfWriterPython.c
@@ -0,0 +1,223 @@
+/* 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.
+ */
+
+#include "Charmonizer/Core/Util.h"
+#include "Charmonizer/Core/ConfWriter.h"
+#include "Charmonizer/Core/ConfWriterPython.h"
+#include <errno.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* Static vars. */
+static struct {
+    FILE *fh;
+} chaz_CWPython = { NULL };
+static chaz_ConfWriter CWPython_conf_writer;
+
+/* Open the charmony.py file handle.
+ */
+static void
+chaz_ConfWriterPython_open_config_py(void);
+
+static void
+chaz_ConfWriterPython_clean_up(void);
+static void
+chaz_ConfWriterPython_vappend_conf(const char *fmt, va_list args);
+static void
+chaz_ConfWriterPython_add_def(const char *sym, const char *value);
+static void
+chaz_ConfWriterPython_add_global_def(const char *sym, const char *value);
+static void
+chaz_ConfWriterPython_add_typedef(const char *type, const char *alias);
+static void
+chaz_ConfWriterPython_add_global_typedef(const char *type, const char *alias);
+static void
+chaz_ConfWriterPython_add_sys_include(const char *header);
+static void
+chaz_ConfWriterPython_add_local_include(const char *header);
+static void
+chaz_ConfWriterPython_start_module(const char *module_name);
+static void
+chaz_ConfWriterPython_end_module(void);
+
+void
+chaz_ConfWriterPython_enable(void) {
+    CWPython_conf_writer.clean_up           = chaz_ConfWriterPython_clean_up;
+    CWPython_conf_writer.vappend_conf       = chaz_ConfWriterPython_vappend_conf;
+    CWPython_conf_writer.add_def            = chaz_ConfWriterPython_add_def;
+    CWPython_conf_writer.add_global_def     = chaz_ConfWriterPython_add_global_def;
+    CWPython_conf_writer.add_typedef        = chaz_ConfWriterPython_add_typedef;
+    CWPython_conf_writer.add_global_typedef = chaz_ConfWriterPython_add_global_typedef;
+    CWPython_conf_writer.add_sys_include    = chaz_ConfWriterPython_add_sys_include;
+    CWPython_conf_writer.add_local_include  = chaz_ConfWriterPython_add_local_include;
+    CWPython_conf_writer.start_module       = chaz_ConfWriterPython_start_module;
+    CWPython_conf_writer.end_module         = chaz_ConfWriterPython_end_module;
+    chaz_ConfWriterPython_open_config_py();
+    chaz_ConfWriter_add_writer(&CWPython_conf_writer);
+    return;
+}
+
+static void
+chaz_ConfWriterPython_open_config_py(void) {
+    /* Open the filehandle. */
+    chaz_CWPython.fh = fopen("charmony.py", "w+");
+    if (chaz_CWPython.fh == NULL) {
+        chaz_Util_die("Can't open 'charmony.py': %s", strerror(errno));
+    }
+
+    /* Start the module. */
+    fprintf(chaz_CWPython.fh,
+            "# Auto-generated by Charmonizer. \n"
+            "# DO NOT EDIT THIS FILE!!\n"
+            "\n"
+            "class Charmony(object):\n"
+            "    @classmethod\n"
+            "    def config(cls):\n"
+            "        return cls.defs\n"
+            "\n"
+            "    defs = {}\n"
+            "\n"
+           );
+}
+
+static void
+chaz_ConfWriterPython_clean_up(void) {
+    /* No more code necessary to finish charmony.py, so just close. */
+    if (fclose(chaz_CWPython.fh)) {
+        chaz_Util_die("Couldn't close 'charmony.py': %s", strerror(errno));
+    }
+}
+
+static void
+chaz_ConfWriterPython_vappend_conf(const char *fmt, va_list args) {
+    (void)fmt;
+    (void)args;
+}
+
+static char*
+chaz_ConfWriterPython_quotify(const char *string, char *buf, size_t buf_size) {
+    char *quoted = buf;
+
+    /* Don't bother with NULL 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 CFPYTHON_MAX_BUF 100
+static void
+chaz_ConfWriterPython_add_def(const char *sym, const char *value) {
+    char sym_buf[CFPYTHON_MAX_BUF + 1];
+    char value_buf[CFPYTHON_MAX_BUF + 1];
+    char *quoted_sym;
+    char *quoted_value;
+
+    /* Quote key. */
+    if (!sym) {
+        chaz_Util_die("Can't handle NULL key");
+    }
+    quoted_sym = chaz_ConfWriterPython_quotify(sym, sym_buf, CFPYTHON_MAX_BUF);
+
+    /* Quote value or use "None". */
+    if (!value) {
+        strcpy(value_buf, "None");
+        quoted_value = value_buf;
+    }
+    else {
+        quoted_value = chaz_ConfWriterPython_quotify(value, value_buf,
+                                                     CFPYTHON_MAX_BUF);
+    }
+
+    fprintf(chaz_CWPython.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
+chaz_ConfWriterPython_add_global_def(const char *sym, const char *value) {
+    (void)sym;
+    (void)value;
+}
+
+static void
+chaz_ConfWriterPython_add_typedef(const char *type, const char *alias) {
+    (void)type;
+    (void)alias;
+}
+
+static void
+chaz_ConfWriterPython_add_global_typedef(const char *type, const char *alias) {
+    (void)type;
+    (void)alias;
+}
+
+static void
+chaz_ConfWriterPython_add_sys_include(const char *header) {
+    (void)header;
+}
+
+static void
+chaz_ConfWriterPython_add_local_include(const char *header) {
+    (void)header;
+}
+
+static void
+chaz_ConfWriterPython_start_module(const char *module_name) {
+    fprintf(chaz_CWPython.fh, "    # %s\n", module_name);
+}
+
+static void
+chaz_ConfWriterPython_end_module(void) {
+    fprintf(chaz_CWPython.fh, "\n");
+}
+

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/40c0e55d/src/Charmonizer/Core/ConfWriterPython.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/ConfWriterPython.h b/src/Charmonizer/Core/ConfWriterPython.h
new file mode 100644
index 0000000..00f13bf
--- /dev/null
+++ b/src/Charmonizer/Core/ConfWriterPython.h
@@ -0,0 +1,37 @@
+/* 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/ConfWriterPython.h -- Write to a Python module file.
+ */
+
+#ifndef H_CHAZ_CONFWRITERPYTHON
+#define H_CHAZ_CONFWRITERPYTHON 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Enable writing config to a Python module file.
+ */
+void
+chaz_ConfWriterPython_enable(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* H_CHAZ_CONFWRITERPYTHON */
+

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/40c0e55d/src/Charmonizer/Probe.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Probe.c b/src/Charmonizer/Probe.c
index 886589b..68b972b 100644
--- a/src/Charmonizer/Probe.c
+++ b/src/Charmonizer/Probe.c
@@ -22,6 +22,7 @@
 #include "Charmonizer/Core/ConfWriter.h"
 #include "Charmonizer/Core/ConfWriterC.h"
 #include "Charmonizer/Core/ConfWriterPerl.h"
+#include "Charmonizer/Core/ConfWriterPython.h"
 #include "Charmonizer/Core/ConfWriterRuby.h"
 #include "Charmonizer/Core/Util.h"
 #include "Charmonizer/Core/Compiler.h"
@@ -52,6 +53,10 @@ chaz_Probe_parse_cli_args(int argc, const char *argv[],
             args->charmony_pm = 1;
             output_enabled = 1;
         }
+        else if (strcmp(arg, "--enable-python") == 0) {
+            args->charmony_py = 1;
+            output_enabled = 1;
+        }
         else if (strcmp(arg, "--enable-ruby") == 0) {
             args->charmony_rb = 1;
             output_enabled = 1;
@@ -103,7 +108,7 @@ void
 chaz_Probe_die_usage(void) {
     fprintf(stderr,
             "Usage: ./charmonize --cc=CC_COMMAND [--enable-c] "
-            "[--enable-perl] [--enable-ruby] -- CFLAGS\n");
+            "[--enable-perl] [--enable-python] [--enable-ruby] -- CFLAGS\n");
     exit(1);
 }
 
@@ -135,6 +140,10 @@ chaz_Probe_init(struct chaz_CLIArgs *args) {
         chaz_ConfWriterPerl_enable();
         output_enabled = true;
     }
+    if (args->charmony_py) {
+        chaz_ConfWriterPython_enable();
+        output_enabled = true;
+    }
     if (args->charmony_rb) {
         chaz_ConfWriterRuby_enable();
         output_enabled = true;

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/40c0e55d/src/Charmonizer/Probe.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Probe.h b/src/Charmonizer/Probe.h
index 7f1e321..6323503 100644
--- a/src/Charmonizer/Probe.h
+++ b/src/Charmonizer/Probe.h
@@ -32,6 +32,7 @@ struct chaz_CLIArgs {
     char cflags[CHAZ_PROBE_MAX_CFLAGS_LEN + 1];
     int  charmony_h;
     int  charmony_pm;
+    int  charmony_py;
     int  charmony_rb;
     int  verbosity;
     int  write_makefile;
@@ -44,6 +45,7 @@ struct chaz_CLIArgs {
  *     APP_NAME --cc=CC_COMMAND
  *              [--enable-c]
  *              [--enable-perl]
+ *              [--enable-python]
  *              [--enable-ruby]
  *              [-- [CFLAGS]]
  *


[lucy-commits] [30/50] git commit: Convenience function to create new CFlags object

Posted by nw...@apache.org.
Convenience function to create new CFlags object


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/cc1ded39
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/cc1ded39
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/cc1ded39

Branch: refs/heads/master
Commit: cc1ded3950928d2dafe4542f90d44acdae0f7f37
Parents: 57bec55
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Tue May 14 20:19:34 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Wed May 15 19:13:53 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Core/Compiler.c | 10 +++++-----
 src/Charmonizer/Core/Compiler.h | 10 +++++-----
 src/Charmonizer/Core/Make.c     |  9 +++------
 3 files changed, 13 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/cc1ded39/src/Charmonizer/Core/Compiler.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Compiler.c b/src/Charmonizer/Core/Compiler.c
index 9dd4841..2ad4be8 100644
--- a/src/Charmonizer/Core/Compiler.c
+++ b/src/Charmonizer/Core/Compiler.c
@@ -319,11 +319,6 @@ chaz_CC_get_cflags(void) {
     return chaz_CC.cflags;
 }
 
-int
-chaz_CC_get_cflags_style(void) {
-    return chaz_CC.cflags_style;
-}
-
 chaz_CFlags*
 chaz_CC_get_extra_cflags(void) {
     return chaz_CC.extra_cflags;
@@ -334,6 +329,11 @@ chaz_CC_get_temp_cflags(void) {
     return chaz_CC.temp_cflags;
 }
 
+chaz_CFlags*
+chaz_CC_new_cflags(void) {
+    return chaz_CFlags_new(chaz_CC.cflags_style);
+}
+
 const char*
 chaz_CC_obj_ext(void) {
     return chaz_CC.obj_ext;

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/cc1ded39/src/Charmonizer/Core/Compiler.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Compiler.h b/src/Charmonizer/Core/Compiler.h
index 820f84c..51ec01b 100644
--- a/src/Charmonizer/Core/Compiler.h
+++ b/src/Charmonizer/Core/Compiler.h
@@ -76,11 +76,6 @@ chaz_CC_get_cc(void);
 const char*
 chaz_CC_get_cflags(void);
 
-/* Accessor for `cflags_style`.
- */
-int
-chaz_CC_get_cflags_style(void);
-
 /* Accessor for `extra_cflags`.
  */
 chaz_CFlags*
@@ -91,6 +86,11 @@ chaz_CC_get_extra_cflags(void);
 chaz_CFlags*
 chaz_CC_get_temp_cflags(void);
 
+/* Return a new CFlags object.
+ */
+chaz_CFlags*
+chaz_CC_new_cflags(void);
+
 /* Return the extension for a compiled object.
  */
 const char*

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/cc1ded39/src/Charmonizer/Core/Make.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Make.c b/src/Charmonizer/Core/Make.c
index 1df757a..d57034e 100644
--- a/src/Charmonizer/Core/Make.c
+++ b/src/Charmonizer/Core/Make.c
@@ -264,8 +264,7 @@ chaz_MakeFile_distclean_rule(chaz_MakeFile *makefile) {
 chaz_MakeRule*
 chaz_MakeFile_add_exe(chaz_MakeFile *makefile, const char *exe,
                       const char *sources, chaz_CFlags *link_flags) {
-    int            cflags_style = chaz_CC_get_cflags_style();
-    chaz_CFlags   *local_flags  = chaz_CFlags_new(cflags_style);
+    chaz_CFlags   *local_flags  = chaz_CC_new_cflags();
     const char    *link         = chaz_CC_link_command();
     const char    *link_flags_string = "";
     const char    *local_flags_string;
@@ -293,8 +292,7 @@ chaz_MakeFile_add_exe(chaz_MakeFile *makefile, const char *exe,
 chaz_MakeRule*
 chaz_MakeFile_add_compiled_exe(chaz_MakeFile *makefile, const char *exe,
                                const char *sources, chaz_CFlags *cflags) {
-    int            cflags_style  = chaz_CC_get_cflags_style();
-    chaz_CFlags   *local_flags   = chaz_CFlags_new(cflags_style);
+    chaz_CFlags   *local_flags   = chaz_CC_new_cflags();
     const char    *cc            = chaz_CC_get_cc();
     const char    *cflags_string = "";
     const char    *local_flags_string;
@@ -323,8 +321,7 @@ chaz_MakeFile_add_compiled_exe(chaz_MakeFile *makefile, const char *exe,
 chaz_MakeRule*
 chaz_MakeFile_add_shared_lib(chaz_MakeFile *makefile, chaz_SharedLib *lib,
                              const char *sources, chaz_CFlags *link_flags) {
-    int            cflags_style = chaz_CC_get_cflags_style();
-    chaz_CFlags   *local_flags  = chaz_CFlags_new(cflags_style);
+    chaz_CFlags   *local_flags  = chaz_CC_new_cflags();
     const char    *link         = chaz_CC_link_command();
     const char    *link_flags_string = "";
     const char    *local_flags_string;


[lucy-commits] [20/50] git commit: Fix detection of math library under C++

Posted by nw...@apache.org.
Fix detection of math library under C++

math.h functions might be overloaded under C++.


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/e815550b
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/e815550b
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/e815550b

Branch: refs/heads/master
Commit: e815550bba3b491917e4a5f3fee8190af54a8111
Parents: ae9f31e
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Thu May 2 14:30:31 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Thu May 2 14:55:22 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Probe/Floats.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/e815550b/src/Charmonizer/Probe/Floats.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Probe/Floats.c b/src/Charmonizer/Probe/Floats.c
index e486741..fc31386 100644
--- a/src/Charmonizer/Probe/Floats.c
+++ b/src/Charmonizer/Probe/Floats.c
@@ -51,8 +51,9 @@ chaz_Floats_math_library(void) {
     static const char sqrt_code[] =
         CHAZ_QUOTE(  #include <math.h>                              )
         CHAZ_QUOTE(  #include <stdio.h>                             )
+        CHAZ_QUOTE(  typedef double (*sqrt_t)(double);              )
         CHAZ_QUOTE(  int main(void) {                               )
-        CHAZ_QUOTE(      printf("%p\n", sqrt);                      )
+        CHAZ_QUOTE(      printf("%p\n", (sqrt_t)sqrt);              )
         CHAZ_QUOTE(      return 0;                                  )
         CHAZ_QUOTE(  }                                              );
     chaz_CFlags *temp_cflags = chaz_CC_get_temp_cflags();


[lucy-commits] [07/50] git commit: Introduce Charmonizer::Core::CFlags

Posted by nw...@apache.org.
Introduce Charmonizer::Core::CFlags

Move handling of compiler and linker flags to a separate Charmonizer
core class. Charmonizer now uses the following sets of flags:

* cflags: Provided via command line
* extra_cflags: Additional flags
* temp_cflags: Temporary flags used by some probes


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/b5f68704
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/b5f68704
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/b5f68704

Branch: refs/heads/master
Commit: b5f68704f5f68739616015f9017f9f7956af135f
Parents: 8cf7b99
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Fri Mar 29 19:34:47 2013 +0100
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Mon Apr 8 21:23:21 2013 +0200

----------------------------------------------------------------------
 buildbin/meld.pl                         |   1 +
 src/Charmonizer/Core/CFlags.c            | 244 ++++++++++++++++++++++
 src/Charmonizer/Core/CFlags.h            |  87 ++++++++
 src/Charmonizer/Core/Compiler.c          | 280 ++++++++------------------
 src/Charmonizer/Core/Compiler.h          |  60 ++----
 src/Charmonizer/Core/Make.c              |  79 ++++----
 src/Charmonizer/Core/Make.h              |  19 +-
 src/Charmonizer/Core/OperatingSystem.c   |  14 +-
 src/Charmonizer/Core/OperatingSystem.h   |   2 +-
 src/Charmonizer/Probe/BuildEnv.c         |   5 +-
 src/Charmonizer/Probe/Floats.c           |  21 +-
 src/Charmonizer/Probe/Floats.h           |   4 +-
 src/Charmonizer/Probe/SymbolVisibility.c |   6 +-
 13 files changed, 495 insertions(+), 327 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/b5f68704/buildbin/meld.pl
----------------------------------------------------------------------
diff --git a/buildbin/meld.pl b/buildbin/meld.pl
index 71f177d..2c73591 100755
--- a/buildbin/meld.pl
+++ b/buildbin/meld.pl
@@ -67,6 +67,7 @@ if ( !@probes ) {
 }
 
 my @core = qw(
+    CFlags
     Compiler
     ConfWriter
     ConfWriterC

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/b5f68704/src/Charmonizer/Core/CFlags.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/CFlags.c b/src/Charmonizer/Core/CFlags.c
new file mode 100644
index 0000000..6978a43
--- /dev/null
+++ b/src/Charmonizer/Core/CFlags.c
@@ -0,0 +1,244 @@
+/* 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.
+ */
+
+#include <string.h>
+#include <stdlib.h>
+#include "Charmonizer/Core/Flags.h"
+#include "Charmonizer/Core/Util.h"
+#include "Charmonizer/Core/OperatingSystem.h"
+
+struct chaz_CFlags {
+    int   style;
+    char *string;
+};
+
+chaz_CFlags*
+chaz_CFlags_new(int style) {
+    chaz_CFlags *flags = (chaz_CFlags*)malloc(sizeof(chaz_CFlags));
+    flags->style  = style;
+    flags->string = chaz_Util_strdup("");
+    return flags;
+}
+
+void
+chaz_CFlags_destroy(chaz_CFlags *flags) {
+    free(flags->string);
+    free(flags);
+}
+
+const char*
+chaz_CFlags_get_string(chaz_CFlags *flags) {
+    return flags->string;
+}
+
+void
+chaz_CFlags_append(chaz_CFlags *flags, const char *string) {
+    char *new_string;
+    if (flags->string[0] == '\0') {
+        new_string = chaz_Util_strdup(string);
+    }
+    else {
+        new_string = chaz_Util_join(" ", flags->string, string, NULL);
+    }
+    free(flags->string);
+    flags->string = new_string;
+}
+
+void
+chaz_CFlags_clear(chaz_CFlags *flags) {
+    if (flags->string[0] != '\0') {
+        free(flags->string);
+        flags->string = chaz_Util_strdup("");
+    }
+}
+
+void
+chaz_CFlags_set_output_obj(chaz_CFlags *flags, const char *filename) {
+    const char *output;
+    char *string;
+    if (flags->style == CHAZ_CFLAGS_STYLE_MSVC) {
+        output = "/c /Fo";
+    }
+    else {
+        /* POSIX */
+        output = "-c -o ";
+    }
+    string = chaz_Util_join("", output, filename, NULL);
+    chaz_CFlags_append(flags, string);
+    free(string);
+}
+
+void
+chaz_CFlags_set_output_exe(chaz_CFlags *flags, const char *filename) {
+    const char *output;
+    char *string;
+    if (flags->style == CHAZ_CFLAGS_STYLE_MSVC) {
+        output = "/Fe";
+    }
+    else {
+        /* POSIX */
+        output = "-o ";
+    }
+    string = chaz_Util_join("", output, filename, NULL);
+    chaz_CFlags_append(flags, string);
+    free(string);
+}
+
+void
+chaz_CFlags_add_include_dir(chaz_CFlags *flags, const char *dir) {
+    const char *include;
+    char *string;
+    if (flags->style == CHAZ_CFLAGS_STYLE_MSVC)  {
+        include = "/I ";
+    }
+    else {
+        /* POSIX */
+        include = "-I ";
+    }
+    string = chaz_Util_join("", include, dir, NULL);
+    chaz_CFlags_append(flags, string);
+    free(string);
+}
+
+void
+chaz_CFlags_enable_optimization(chaz_CFlags *flags) {
+    const char *string;
+    if (flags->style == CHAZ_CFLAGS_STYLE_MSVC) {
+        string = "/O2";
+    }
+    else if (flags->style == CHAZ_CFLAGS_STYLE_GNU) {
+        string = "-O2";
+    }
+    else {
+        /* POSIX */
+        string = "-O 1";
+    }
+    chaz_CFlags_append(flags, string);
+}
+
+void
+chaz_CFlags_disable_strict_aliasing(chaz_CFlags *flags) {
+    if (flags->style == CHAZ_CFLAGS_STYLE_MSVC) {
+        return;
+    }
+    else if (flags->style == CHAZ_CFLAGS_STYLE_GNU) {
+        chaz_CFlags_append(flags, "-fno-strict-aliasing");
+    }
+    else {
+        chaz_Util_die("Unsupported compiler");
+    }
+}
+
+void
+chaz_CFlags_set_warnings_as_errors(chaz_CFlags *flags) {
+    const char *string;
+    if (flags->style == CHAZ_CFLAGS_STYLE_MSVC) {
+        string = "/WX";
+    }
+    else if (flags->style == CHAZ_CFLAGS_STYLE_GNU) {
+        string = "-Werror";
+    }
+    else {
+        chaz_Util_die("Unsupported compiler");
+    }
+    chaz_CFlags_append(flags, string);
+}
+
+void
+chaz_CFlags_compile_shared_library(chaz_CFlags *flags) {
+    const char *string;
+    if (!flags->style == CHAZ_CFLAGS_STYLE_GNU) {
+        return;
+    }
+    if (chaz_OS_is_darwin()) {
+        string = "-fno-common";
+    }
+    else {
+        string = "-fPIC";
+    }
+    chaz_CFlags_append(flags, string);
+}
+
+void
+chaz_CFlags_link_shared_library(chaz_CFlags *flags) {
+    const char *string;
+    if (flags->style == CHAZ_CFLAGS_STYLE_MSVC) {
+        string = "/DLL";
+    }
+    else if (flags->style == CHAZ_CFLAGS_STYLE_GNU) {
+        if (chaz_OS_is_darwin()) {
+            string = "-dynamiclib";
+        }
+        else {
+            string = "-shared";
+        }
+    }
+    else {
+        chaz_Util_die("Unsupported compiler");
+    }
+    chaz_CFlags_append(flags, string);
+}
+
+void
+chaz_CFlags_set_link_output(chaz_CFlags *flags, const char *filename) {
+    const char *output;
+    char *string;
+    if (flags->style == CHAZ_CFLAGS_STYLE_MSVC) {
+        output = "/OUT:";
+    }
+    else {
+        output = "-o ";
+    }
+    string = chaz_Util_join("", output, filename, NULL);
+    chaz_CFlags_append(flags, string);
+    free(string);
+}
+
+void
+chaz_CFlags_add_library_path(chaz_CFlags *flags, const char *directory) {
+    const char *lib_path;
+    char *string;
+    if (flags->style == CHAZ_CFLAGS_STYLE_MSVC) {
+        if (strcmp(directory, ".") == 0) {
+            /* The MS linker searches the current directory by default. */
+            return;
+        }
+        else {
+            lib_path = "/LIBPATH:";
+        }
+    }
+    else {
+        lib_path = "-L ";
+    }
+    string = chaz_Util_join("", lib_path, directory, NULL);
+    chaz_CFlags_append(flags, string);
+    free(string);
+}
+
+void
+chaz_CFlags_add_library(chaz_CFlags *flags, const char *library) {
+    char *string;
+    if (flags->style == CHAZ_CFLAGS_STYLE_MSVC) {
+        string = chaz_Util_join("", library, ".lib", NULL);
+    }
+    else {
+        string = chaz_Util_join("", "-l ", library, NULL);
+    }
+    chaz_CFlags_append(flags, string);
+    free(string);
+}
+
+

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/b5f68704/src/Charmonizer/Core/CFlags.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/CFlags.h b/src/Charmonizer/Core/CFlags.h
new file mode 100644
index 0000000..4749460
--- /dev/null
+++ b/src/Charmonizer/Core/CFlags.h
@@ -0,0 +1,87 @@
+/* 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/Compiler.h
+ */
+
+#ifndef H_CHAZ_FLAGS
+#define H_CHAZ_FLAGS
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CHAZ_CFLAGS_STYLE_POSIX  1
+#define CHAZ_CFLAGS_STYLE_GNU    2
+#define CHAZ_CFLAGS_STYLE_MSVC   3
+
+typedef struct chaz_CFlags chaz_CFlags;
+
+chaz_CFlags*
+chaz_CFlags_new(int style);
+
+void
+chaz_CFlags_destroy(chaz_CFlags *flags);
+
+const char*
+chaz_CFlags_get_string(chaz_CFlags *flags);
+
+void
+chaz_CFlags_append(chaz_CFlags *flags, const char *string);
+
+void
+chaz_CFlags_clear(chaz_CFlags *flags);
+
+void
+chaz_CFlags_set_output_obj(chaz_CFlags *flags, const char *filename);
+
+void
+chaz_CFlags_set_output_exe(chaz_CFlags *flags, const char *filename);
+
+void
+chaz_CFlags_add_include_dir(chaz_CFlags *flags, const char *dir);
+
+void
+chaz_CFlags_enable_optimization(chaz_CFlags *flags);
+
+void
+chaz_CFlags_disable_strict_aliasing(chaz_CFlags *flags);
+
+void
+chaz_CFlags_set_warnings_as_errors(chaz_CFlags *flags);
+
+void
+chaz_CFlags_compile_shared_library(chaz_CFlags *flags);
+
+void
+chaz_CFlags_link_shared_library(chaz_CFlags *flags);
+
+void
+chaz_CFlags_set_link_output(chaz_CFlags *flags, const char *filename);
+
+void
+chaz_CFlags_add_library_path(chaz_CFlags *flags, const char *directory);
+
+void
+chaz_CFlags_add_library(chaz_CFlags *flags, const char *library);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* H_CHAZ_FLAGS */
+
+

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/b5f68704/src/Charmonizer/Core/Compiler.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Compiler.c b/src/Charmonizer/Core/Compiler.c
index 516823c..4ec8306 100644
--- a/src/Charmonizer/Core/Compiler.c
+++ b/src/Charmonizer/Core/Compiler.c
@@ -35,43 +35,25 @@ chaz_CC_detect_known_compilers(void);
 static struct {
     char     *cc_command;
     char     *cflags;
-    char     *extra_cflags;
     char     *try_exe_name;
     char     *try_obj_name;
-    char      include_flag[10];
-    char      object_flag[10];
-    char      exe_flag[10];
-    char      no_link_flag[10];
-    char      error_flag[10];
     char      gcc_version_str[30];
+    int       cflags_style;
     int       intval___GNUC__;
     int       intval___GNUC_MINOR__;
     int       intval___GNUC_PATCHLEVEL__;
     int       intval__MSC_VER;
     int       intval___clang__;
-    int       warnings_as_errors;
+    chaz_CFlags *extra_cflags;
+    chaz_CFlags *temp_cflags;
 } chaz_CC = {
-    NULL, NULL, NULL, NULL, NULL,
-    "", "", "", "", "", "",
-    0, 0, 0, 0, 0, 0
+    NULL, NULL, NULL, NULL,
+    "",
+    0, 0, 0, 0, 0, 0,
+    NULL, NULL
 };
 
 void
-chaz_CC_set_warnings_as_errors(const int flag) {
-    chaz_CC.warnings_as_errors = flag;
-    if (chaz_CC.warnings_as_errors) {
-        if (chaz_CC.intval__MSC_VER)  {
-            strcpy(chaz_CC.error_flag, "/WX");
-        } else {
-            strcpy(chaz_CC.error_flag, "-Werror");
-        }
-    }
-    else {
-        strcpy(chaz_CC.error_flag, "");
-    }
-}
-
-void
 chaz_CC_init(const char *compiler_command, const char *compiler_flags) {
     const char *code = "int main() { return 0; }\n";
     int compile_succeeded = 0;
@@ -79,9 +61,10 @@ chaz_CC_init(const char *compiler_command, const char *compiler_flags) {
     if (chaz_Util_verbosity) { printf("Creating compiler object...\n"); }
 
     /* Assign, init. */
-    chaz_CC.cc_command      = chaz_Util_strdup(compiler_command);
-    chaz_CC.cflags          = chaz_Util_strdup(compiler_flags);
-    chaz_CC.extra_cflags    = chaz_Util_strdup("");
+    chaz_CC.cc_command   = chaz_Util_strdup(compiler_command);
+    chaz_CC.cflags       = chaz_Util_strdup(compiler_flags);
+    chaz_CC.extra_cflags = NULL;
+    chaz_CC.temp_cflags  = NULL;
 
     /* Set names for the targets which we "try" to compile. */
     chaz_CC.try_exe_name
@@ -93,18 +76,12 @@ chaz_CC_init(const char *compiler_command, const char *compiler_flags) {
     if (chaz_Util_verbosity) {
         printf("Trying to compile a small test file...\n");
     }
-    /* Try POSIX argument style. */
-    strcpy(chaz_CC.include_flag, "-I ");
-    strcpy(chaz_CC.object_flag,  "-o ");
-    strcpy(chaz_CC.exe_flag,     "-o ");
-    strcpy(chaz_CC.no_link_flag, "-c ");
+    /* Try MSVC argument style. */
+    chaz_CC.cflags_style = CHAZ_CFLAGS_STYLE_MSVC;
     compile_succeeded = chaz_CC_test_compile(code);
     if (!compile_succeeded) {
-        /* Try MSVC argument style. */
-        strcpy(chaz_CC.include_flag, "/I");
-        strcpy(chaz_CC.object_flag,  "/Fo");
-        strcpy(chaz_CC.exe_flag,     "/Fe");
-        strcpy(chaz_CC.no_link_flag, "/c");
+        /* Try POSIX argument style. */
+        chaz_CC.cflags_style = CHAZ_CFLAGS_STYLE_POSIX;
         compile_succeeded = chaz_CC_test_compile(code);
     }
     if (!compile_succeeded) {
@@ -112,6 +89,18 @@ chaz_CC_init(const char *compiler_command, const char *compiler_flags) {
     }
 
     chaz_CC_detect_known_compilers();
+
+    if (chaz_CC.intval___GNUC__) {
+        chaz_CC.cflags_style = CHAZ_CFLAGS_STYLE_GNU;
+    }
+    else if (chaz_CC.intval__MSC_VER) {
+        chaz_CC.cflags_style = CHAZ_CFLAGS_STYLE_MSVC;
+    }
+    else {
+        chaz_CC.cflags_style = CHAZ_CFLAGS_STYLE_POSIX;
+    }
+    chaz_CC.extra_cflags = chaz_CFlags_new(chaz_CC.cflags_style);
+    chaz_CC.temp_cflags  = chaz_CFlags_new(chaz_CC.cflags_style);
 }
 
 static const char chaz_CC_detect_macro_code[] =
@@ -163,40 +152,38 @@ void
 chaz_CC_clean_up(void) {
     free(chaz_CC.cc_command);
     free(chaz_CC.cflags);
-    free(chaz_CC.extra_cflags);
     free(chaz_CC.try_obj_name);
     free(chaz_CC.try_exe_name);
+    chaz_CFlags_destroy(chaz_CC.extra_cflags);
+    chaz_CFlags_destroy(chaz_CC.temp_cflags);
 }
 
 int
 chaz_CC_compile_exe(const char *source_path, const char *exe_name,
                     const char *code) {
-    const char *exe_ext        = chaz_OS_exe_ext();
-    size_t   exe_file_buf_size = strlen(exe_name) + strlen(exe_ext) + 1;
-    char    *exe_file          = (char*)malloc(exe_file_buf_size);
-    size_t   junk_buf_size     = exe_file_buf_size + 3;
-    char    *junk              = (char*)malloc(junk_buf_size);
-    size_t   exe_file_buf_len  = sprintf(exe_file, "%s%s", exe_name, exe_ext);
-    size_t   command_max_size  = strlen(chaz_CC.cc_command)
-                                 + strlen(chaz_CC.error_flag)
-                                 + strlen(source_path)
-                                 + strlen(chaz_CC.exe_flag)
-                                 + exe_file_buf_len
-                                 + strlen(chaz_CC.cflags)
-                                 + strlen(chaz_CC.extra_cflags)
-                                 + 200; /* command start, _charm_run, etc.  */
-    char *command = (char*)malloc(command_max_size);
+    chaz_CFlags *local_cflags = chaz_CFlags_new(chaz_CC.cflags_style);
+    const char *extra_cflags_string = "";
+    const char *temp_cflags_string  = "";
+    const char *local_cflags_string;
+    char *exe_file = chaz_Util_join("", exe_name, chaz_OS_exe_ext(), NULL);
+    char *command;
     int result;
 
     /* Write the source file. */
     chaz_Util_write_file(source_path, code);
 
     /* Prepare and run the compiler command. */
-    sprintf(command, "%s %s %s %s%s %s %s",
-            chaz_CC.cc_command, chaz_CC.error_flag, 
-            source_path, chaz_CC.exe_flag, 
-            exe_file,
-            chaz_CC.cflags, chaz_CC.extra_cflags);
+    if (chaz_CC.extra_cflags) {
+        extra_cflags_string = chaz_CFlags_get_string(chaz_CC.extra_cflags);
+    }
+    if (chaz_CC.temp_cflags) {
+        temp_cflags_string = chaz_CFlags_get_string(chaz_CC.temp_cflags);
+    }
+    chaz_CFlags_set_output_exe(local_cflags, exe_file);
+    local_cflags_string = chaz_CFlags_get_string(local_cflags);
+    command = chaz_Util_join(" ", chaz_CC.cc_command, chaz_CC.cflags,
+                             source_path, extra_cflags_string,
+                             temp_cflags_string, local_cflags_string, NULL);
     if (chaz_Util_verbosity < 2) {
         chaz_OS_run_quietly(command);
     }
@@ -206,12 +193,15 @@ chaz_CC_compile_exe(const char *source_path, const char *exe_name,
 
     if (chaz_CC.intval__MSC_VER) {
         /* Zap MSVC junk. */
+        size_t  junk_buf_size = strlen(exe_file) + 4;
+        char   *junk          = (char*)malloc(junk_buf_size);
         sprintf(junk, "%s.obj", exe_name);
         chaz_Util_remove_and_verify(junk);
         sprintf(junk, "%s.ilk", exe_name);
         chaz_Util_remove_and_verify(junk);
         sprintf(junk, "%s.pdb", exe_name);
         chaz_Util_remove_and_verify(junk);
+        free(junk);
     }
 
     /* See if compilation was successful.  Remove the source file. */
@@ -220,8 +210,8 @@ chaz_CC_compile_exe(const char *source_path, const char *exe_name,
         chaz_Util_die("Failed to remove '%s'", source_path);
     }
 
+    chaz_CFlags_destroy(local_cflags);
     free(command);
-    free(junk);
     free(exe_file);
     return result;
 }
@@ -229,31 +219,29 @@ chaz_CC_compile_exe(const char *source_path, const char *exe_name,
 int
 chaz_CC_compile_obj(const char *source_path, const char *obj_name,
                     const char *code) {
-    const char *obj_ext        = chaz_OS_obj_ext();
-    size_t   obj_file_buf_size = strlen(obj_name) + strlen(obj_ext) + 1;
-    char    *obj_file          = (char*)malloc(obj_file_buf_size);
-    size_t   obj_file_buf_len  = sprintf(obj_file, "%s%s", obj_name, obj_ext);
-    size_t   command_max_size  = strlen(chaz_CC.cc_command)
-                                 + strlen(chaz_CC.no_link_flag)
-                                 + strlen(chaz_CC.error_flag)
-                                 + strlen(source_path)
-                                 + strlen(chaz_CC.object_flag)
-                                 + obj_file_buf_len
-                                 + strlen(chaz_CC.cflags)
-                                 + strlen(chaz_CC.extra_cflags)
-                                 + 200; /* command start, _charm_run, etc.  */
-    char *command = (char*)malloc(command_max_size);
+    chaz_CFlags *local_cflags = chaz_CFlags_new(chaz_CC.cflags_style);
+    const char *extra_cflags_string = "";
+    const char *temp_cflags_string  = "";
+    const char *local_cflags_string;
+    char *obj_file = chaz_Util_join("", obj_name, chaz_OS_obj_ext(), NULL);
+    char *command;
     int result;
 
     /* Write the source file. */
     chaz_Util_write_file(source_path, code);
 
     /* Prepare and run the compiler command. */
-    sprintf(command, "%s %s %s %s %s%s %s %s",
-            chaz_CC.cc_command, chaz_CC.no_link_flag, chaz_CC.error_flag,
-            source_path, chaz_CC.object_flag, 
-            obj_file,
-            chaz_CC.cflags, chaz_CC.extra_cflags);
+    if (chaz_CC.extra_cflags) {
+        extra_cflags_string = chaz_CFlags_get_string(chaz_CC.extra_cflags);
+    }
+    if (chaz_CC.temp_cflags) {
+        temp_cflags_string = chaz_CFlags_get_string(chaz_CC.temp_cflags);
+    }
+    chaz_CFlags_set_output_obj(local_cflags, obj_file);
+    local_cflags_string = chaz_CFlags_get_string(local_cflags);
+    command = chaz_Util_join(" ", chaz_CC.cc_command, chaz_CC.cflags,
+                             source_path, extra_cflags_string,
+                             temp_cflags_string, local_cflags_string, NULL);
     if (chaz_Util_verbosity < 2) {
         chaz_OS_run_quietly(command);
     }
@@ -267,6 +255,7 @@ chaz_CC_compile_obj(const char *source_path, const char *obj_name,
         chaz_Util_die("Failed to remove '%s'", source_path);
     }
 
+    chaz_CFlags_destroy(local_cflags);
     free(command);
     free(obj_file);
     return result;
@@ -318,56 +307,6 @@ chaz_CC_capture_output(const char *source, size_t *output_len) {
     return captured_output;
 }
 
-void
-chaz_CC_set_extra_cflags(const char *flags) {
-    free(chaz_CC.extra_cflags);
-    chaz_CC.extra_cflags = chaz_Util_strdup(flags);
-}
-
-void
-chaz_CC_add_extra_cflags(const char *flags) {
-    if (!strlen(chaz_CC.extra_cflags)) {
-        free(chaz_CC.extra_cflags);
-        chaz_CC.extra_cflags = chaz_Util_strdup(flags);
-    }
-    else {
-        char *newflags
-            = chaz_Util_join(" ", chaz_CC.extra_cflags, flags, NULL);
-        free(chaz_CC.extra_cflags);
-        chaz_CC.extra_cflags = newflags;
-    }
-}
-
-void
-chaz_CC_add_include_dir(const char *dir) {
-    char *flag = chaz_Util_join("", chaz_CC.include_flag, dir, NULL);
-    chaz_CC_add_extra_cflags(flag);
-    free(flag);
-}
-
-void
-chaz_CC_set_optimization_level(const char *level) {
-    const char *opt_flag;
-    char *flag;
-
-    if (chaz_CC.intval__MSC_VER) {
-        opt_flag = "/O";
-    }
-    else {
-        opt_flag = "-O";
-    }
-    flag = chaz_Util_join("", opt_flag, level, NULL);
-    chaz_CC_add_extra_cflags(flag);
-    free(flag);
-}
-
-void
-chaz_CC_disable_strict_aliasing() {
-    if (!chaz_CC.intval__MSC_VER) {
-       chaz_CC_add_extra_cflags("-fno-strict-aliasing");
-    }
-}
-
 const char*
 chaz_CC_get_cc(void) {
     return chaz_CC.cc_command;
@@ -378,11 +317,21 @@ chaz_CC_get_cflags(void) {
     return chaz_CC.cflags;
 }
 
-const char*
+int
+chaz_CC_get_cflags_style(void) {
+    return chaz_CC.cflags_style;
+}
+
+chaz_CFlags*
 chaz_CC_get_extra_cflags(void) {
     return chaz_CC.extra_cflags;
 }
 
+chaz_CFlags*
+chaz_CC_get_temp_cflags(void) {
+    return chaz_CC.temp_cflags;
+}
+
 int
 chaz_CC_gcc_version_num(void) {
     return 10000 * chaz_CC.intval___GNUC__
@@ -401,19 +350,6 @@ chaz_CC_msvc_version_num(void) {
 }
 
 const char*
-chaz_CC_shared_obj_cflags() {
-    if (chaz_CC.intval__MSC_VER) {
-        return "";
-    }
-    else if (chaz_OS_is_darwin()) {
-        return "-fno-common";
-    }
-    else {
-        return "-fPIC";
-    }
-}
-
-const char*
 chaz_CC_link_command() {
     if (chaz_CC.intval__MSC_VER) {
         return "link";
@@ -423,62 +359,4 @@ chaz_CC_link_command() {
     }
 }
 
-const char*
-chaz_CC_link_flags() {
-    return "";
-}
-
-const char*
-chaz_CC_link_shared_obj_flag() {
-    if (chaz_CC.intval__MSC_VER) {
-        return "/DLL";
-    }
-    else if (chaz_OS_is_darwin()) {
-        return "-dynamiclib";
-    }
-    else {
-        return "-shared";
-    }
-}
-
-const char*
-chaz_CC_link_output_flag() {
-    if (chaz_CC.intval__MSC_VER) {
-        return "/OUT:";
-    }
-    else {
-        return "-o ";
-    }
-}
-
-char*
-chaz_CC_library_path_flag(const char *directory) {
-    char *flag = (char*)malloc(20 + sizeof(directory));
-    if (chaz_CC.intval__MSC_VER) {
-        if (strcmp(directory, ".") == 0) {
-            /* The MS linker searches the current directory by default. */
-            strcpy(flag, "");
-        }
-        else {
-            sprintf(flag, "/LIBPATH:%s", directory);
-        }
-    }
-    else {
-        sprintf(flag, "-L%s", directory);
-    }
-    return flag;
-}
-
-char*
-chaz_CC_link_with_shared_obj_flag(const char *shared_obj) {
-    char *flag = (char*)malloc(20 + sizeof(shared_obj));
-    if (chaz_CC.intval__MSC_VER) {
-        sprintf(flag, "%s.lib", shared_obj);
-    }
-    else {
-        sprintf(flag, "-l%s", shared_obj);
-    }
-    return flag;
-}
-
 

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/b5f68704/src/Charmonizer/Core/Compiler.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Compiler.h b/src/Charmonizer/Core/Compiler.h
index b95136f..68826ed 100644
--- a/src/Charmonizer/Core/Compiler.h
+++ b/src/Charmonizer/Core/Compiler.h
@@ -26,6 +26,7 @@ extern "C" {
 
 #include <stddef.h>
 #include "Charmonizer/Core/Defines.h"
+#include "Charmonizer/Core/CFlags.h"
 
 /* Attempt to compile and link an executable.  Return true if the executable
  * file exists after the attempt.
@@ -65,35 +66,6 @@ chaz_CC_init(const char *cc_command, const char *cflags);
 void
 chaz_CC_clean_up(void);
 
-void
-chaz_CC_set_warnings_as_errors(const int flag);
-
-/* (Re)set "extra" cflags.
- */
-void
-chaz_CC_set_extra_cflags(const char *);
-
-/* Concatenate onto the end of the "extra" cflags.  A space will be inserted
- * automatically.
- */
-void
-chaz_CC_add_extra_cflags(const char *);
-
-/* Add include dir to extra cflags.
- */
-void
-chaz_CC_add_include_dir(const char *dir);
-
-/* Set optimization level.
- */
-void
-chaz_CC_set_optimization_level(const char *level);
-
-/* Disable strict aliasing.
- */
-void
-chaz_CC_disable_strict_aliasing();
-
 /* Accessor for the compiler executable's string representation.
  */
 const char*
@@ -104,11 +76,21 @@ chaz_CC_get_cc(void);
 const char*
 chaz_CC_get_cflags(void);
 
+/* Accessor for `cflags_style`.
+ */
+int
+chaz_CC_get_cflags_style(void);
+
 /* Accessor for `extra_cflags`.
  */
-const char*
+chaz_CFlags*
 chaz_CC_get_extra_cflags(void);
 
+/* Accessor for `temp_cflags`.
+ */
+chaz_CFlags*
+chaz_CC_get_temp_cflags(void);
+
 int
 chaz_CC_gcc_version_num(void);
 
@@ -119,26 +101,8 @@ int
 chaz_CC_msvc_version_num(void);
 
 const char*
-chaz_CC_shared_obj_cflags(void);
-
-const char*
 chaz_CC_link_command(void);
 
-const char*
-chaz_CC_link_flags(void);
-
-const char*
-chaz_CC_link_shared_obj_flag(void);
-
-const char*
-chaz_CC_link_output_flag(void);
-
-char*
-chaz_CC_library_path_flag(const char *directory);
-
-char*
-chaz_CC_link_with_shared_obj_flag(const char *shared_obj);
-
 #ifdef __cplusplus
 }
 #endif

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/b5f68704/src/Charmonizer/Core/Make.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Make.c b/src/Charmonizer/Core/Make.c
index a434fdc..82fc379 100644
--- a/src/Charmonizer/Core/Make.c
+++ b/src/Charmonizer/Core/Make.c
@@ -241,66 +241,60 @@ chaz_MakeFile_add_dir_to_cleanup(chaz_MakeFile *makefile, const char *dir) {
 
 chaz_MakeRule*
 chaz_MakeFile_add_exe(chaz_MakeFile *makefile, const char *exe,
-                      const char *objects, const char *extra_link_flags) {
-    const char    *pattern     = "%s %s %s %s %s%s";
-    const char    *link        = chaz_CC_link_command();
-    const char    *link_flags  = chaz_CC_link_flags();
-    const char    *output_flag = chaz_CC_link_output_flag();
+                      const char *objects, chaz_CFlags *library_flags) {
+    int            cflags_style = chaz_CC_get_cflags_style();
+    chaz_CFlags   *local_flags  = chaz_CFlags_new(cflags_style);
+    const char    *link         = chaz_CC_link_command();
+    const char    *library_flags_string = "";
+    const char    *local_flags_string;
     chaz_MakeRule *rule;
     char          *command;
-    size_t         size;
 
     rule = chaz_MakeFile_add_rule(makefile, exe, objects);
 
-    size = strlen(pattern)
-           + strlen(link)
-           + strlen(link_flags)
-           + strlen(objects)
-           + strlen(extra_link_flags)
-           + strlen(output_flag)
-           + strlen(exe)
-           + 50;
-    command = (char*)malloc(size);
-    sprintf(command, pattern, link, link_flags, objects, extra_link_flags,
-            output_flag, exe);
+    if (library_flags) {
+        library_flags_string = chaz_CFlags_get_string(library_flags);
+    }
+    chaz_CFlags_set_link_output(local_flags, exe);
+    local_flags_string = chaz_CFlags_get_string(local_flags);
+    command = chaz_Util_join(" ", link, local_flags_string, objects,
+                             library_flags_string, NULL);
     chaz_MakeRule_add_command(rule, command);
 
     chaz_MakeFile_add_to_cleanup(makefile, exe);
 
+    chaz_CFlags_destroy(local_flags);
+    free(command);
     return rule;
 }
 
 chaz_MakeRule*
-chaz_MakeFile_add_shared_obj(chaz_MakeFile *makefile, const char *shared_obj,
-                             const char *objects,
-                             const char *extra_link_flags) {
-    const char    *pattern     = "%s %s %s %s %s %s%s";
-    const char    *link        = chaz_CC_link_command();
-    const char    *shobj_flags = chaz_CC_link_shared_obj_flag();
-    const char    *link_flags  = chaz_CC_link_flags();
-    const char    *output_flag = chaz_CC_link_output_flag();
+chaz_MakeFile_add_shared_lib(chaz_MakeFile *makefile, const char *shared_lib,
+                             const char *objects, chaz_CFlags *library_flags) {
+    int            cflags_style = chaz_CC_get_cflags_style();
+    chaz_CFlags   *local_flags  = chaz_CFlags_new(cflags_style);
+    const char    *link         = chaz_CC_link_command();
+    const char    *library_flags_string = "";
+    const char    *local_flags_string;
     chaz_MakeRule *rule;
     char          *command;
-    size_t         size;
-
-    rule = chaz_MakeFile_add_rule(makefile, shared_obj, objects);
-
-    size = strlen(pattern)
-           + strlen(link)
-           + strlen(shobj_flags)
-           + strlen(link_flags)
-           + strlen(objects)
-           + strlen(extra_link_flags)
-           + strlen(output_flag)
-           + strlen(shared_obj)
-           + 50;
-    command = (char*)malloc(size);
-    sprintf(command, pattern, link, shobj_flags, link_flags, objects,
-            extra_link_flags, output_flag, shared_obj);
+
+    rule = chaz_MakeFile_add_rule(makefile, shared_lib, objects);
+
+    if (library_flags) {
+        library_flags_string = chaz_CFlags_get_string(library_flags);
+    }
+    chaz_CFlags_link_shared_library(local_flags);
+    chaz_CFlags_set_link_output(local_flags, shared_lib);
+    local_flags_string = chaz_CFlags_get_string(local_flags);
+    command = chaz_Util_join(" ", link, local_flags_string, objects,
+                             library_flags_string, NULL);
     chaz_MakeRule_add_command(rule, command);
 
-    chaz_MakeFile_add_to_cleanup(makefile, shared_obj);
+    chaz_MakeFile_add_to_cleanup(makefile, shared_lib);
 
+    chaz_CFlags_destroy(local_flags);
+    free(command);
     return rule;
 }
 
@@ -475,7 +469,6 @@ chaz_MakeRule_add_command(chaz_MakeRule *rule, const char *command) {
 void
 chaz_MakeRule_add_command_make(chaz_MakeRule *rule, const char *dir,
                                const char *target) {
-    const char *make = chaz_Make.make_command;
     char *command;
 
     if (chaz_Make.is_gnu_make) {

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/b5f68704/src/Charmonizer/Core/Make.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Make.h b/src/Charmonizer/Core/Make.h
index b7ed46b..103133d 100644
--- a/src/Charmonizer/Core/Make.h
+++ b/src/Charmonizer/Core/Make.h
@@ -24,6 +24,8 @@
 extern "C" {
 #endif
 
+#include "Charmonizer/Core/CFlags.h"
+
 typedef struct chaz_MakeFile chaz_MakeFile;
 typedef struct chaz_MakeVar chaz_MakeVar;
 typedef struct chaz_MakeRule chaz_MakeRule;
@@ -109,24 +111,23 @@ chaz_MakeFile_add_dir_to_cleanup(chaz_MakeFile *makefile, const char *dir);
  * @param makefile The makefile.
  * @param exe The name of the executable.
  * @param objects The list of object files.
- * @param extra_link_flags Additional link flags.
+ * @param library_flags Additional link flags for libraries.
  */
 chaz_MakeRule*
 chaz_MakeFile_add_exe(chaz_MakeFile *makefile, const char *exe,
-                      const char *objects, const char *extra_link_flags);
+                      const char *objects, chaz_CFlags *library_flags);
 
-/** Add a rule to link a shared object. The shared object will also be added to
- * the list of files to clean.
+/** Add a rule to link a shared library. The shared library will also be added
+ * to the list of files to clean.
  *
  * @param makefile The makefile.
- * @param shared_obj The name of the shared object.
+ * @param shared_lib The name of the shared library.
  * @param objects The list of object files.
- * @param extra_link_flags Additional link flags.
+ * @param library_flags Additional link flags for libraries.
  */
 chaz_MakeRule*
-chaz_MakeFile_add_shared_obj(chaz_MakeFile *makefile, const char *shared_obj,
-                             const char *objects,
-                             const char *extra_link_flags);
+chaz_MakeFile_add_shared_lib(chaz_MakeFile *makefile, const char *shared_lib,
+                             const char *objects, chaz_CFlags *library_flags);
 
 /** Write the makefile to a file named 'Makefile' in the current directory.
  *

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/b5f68704/src/Charmonizer/Core/OperatingSystem.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/OperatingSystem.c b/src/Charmonizer/Core/OperatingSystem.c
index 519cffc..4a23958 100644
--- a/src/Charmonizer/Core/OperatingSystem.c
+++ b/src/Charmonizer/Core/OperatingSystem.c
@@ -32,7 +32,7 @@ static struct {
     char dev_null[20];
     char exe_ext[5];
     char obj_ext[5];
-    char shared_obj_ext[7];
+    char shared_lib_ext[7];
     char local_command_start[3];
     int  shell_type;
 } chaz_OS = { "", "", "", "", "", "", 0 };
@@ -70,13 +70,13 @@ chaz_OS_init(void) {
         strcpy(chaz_OS.exe_ext, "");
         strcpy(chaz_OS.obj_ext, ".o");
         if (memcmp(chaz_OS.name, "darwin", 6) == 0) {
-            strcpy(chaz_OS.shared_obj_ext, ".dylib");
+            strcpy(chaz_OS.shared_lib_ext, ".dylib");
         }
         else if (memcmp(chaz_OS.name, "cygwin", 6) == 0) {
-            strcpy(chaz_OS.shared_obj_ext, ".dll");
+            strcpy(chaz_OS.shared_lib_ext, ".dll");
         }
         else {
-            strcpy(chaz_OS.shared_obj_ext, ".so");
+            strcpy(chaz_OS.shared_lib_ext, ".so");
         }
         strcpy(chaz_OS.local_command_start, "./");
     }
@@ -85,7 +85,7 @@ chaz_OS_init(void) {
         strcpy(chaz_OS.dev_null, "nul");
         strcpy(chaz_OS.exe_ext, ".exe");
         strcpy(chaz_OS.obj_ext, ".obj");
-        strcpy(chaz_OS.shared_obj_ext, ".dll");
+        strcpy(chaz_OS.shared_lib_ext, ".dll");
         strcpy(chaz_OS.local_command_start, ".\\");
         chaz_OS.shell_type = CHAZ_OS_CMD_EXE;
     }
@@ -121,8 +121,8 @@ chaz_OS_obj_ext(void) {
 }
 
 const char*
-chaz_OS_shared_obj_ext(void) {
-    return chaz_OS.shared_obj_ext;
+chaz_OS_shared_lib_ext(void) {
+    return chaz_OS.shared_lib_ext;
 }
 
 const char*

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/b5f68704/src/Charmonizer/Core/OperatingSystem.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/OperatingSystem.h b/src/Charmonizer/Core/OperatingSystem.h
index 490c1a0..d28b78b 100644
--- a/src/Charmonizer/Core/OperatingSystem.h
+++ b/src/Charmonizer/Core/OperatingSystem.h
@@ -92,7 +92,7 @@ chaz_OS_obj_ext(void);
 /* Return the extension for a shared object on this system.
  */
 const char*
-chaz_OS_shared_obj_ext(void);
+chaz_OS_shared_lib_ext(void);
 
 /* Return the equivalent of /dev/null on this system.
  */

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/b5f68704/src/Charmonizer/Probe/BuildEnv.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Probe/BuildEnv.c b/src/Charmonizer/Probe/BuildEnv.c
index 1be7d38..4f55514 100644
--- a/src/Charmonizer/Probe/BuildEnv.c
+++ b/src/Charmonizer/Probe/BuildEnv.c
@@ -20,11 +20,14 @@
 
 void
 chaz_BuildEnv_run(void) {
+    chaz_CFlags *extra_cflags = chaz_CC_get_extra_cflags();
+    const char  *extra_cflags_string = chaz_CFlags_get_string(extra_cflags);
+
     chaz_ConfWriter_start_module("BuildEnv");
 
     chaz_ConfWriter_add_def("CC", chaz_CC_get_cc());
     chaz_ConfWriter_add_def("CFLAGS", chaz_CC_get_cflags());
-    chaz_ConfWriter_add_def("EXTRA_CFLAGS", chaz_CC_get_extra_cflags());
+    chaz_ConfWriter_add_def("EXTRA_CFLAGS", extra_cflags_string);
 
     chaz_ConfWriter_end_module();
 }

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/b5f68704/src/Charmonizer/Probe/Floats.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Probe/Floats.c b/src/Charmonizer/Probe/Floats.c
index d4e6d58..e486741 100644
--- a/src/Charmonizer/Probe/Floats.c
+++ b/src/Charmonizer/Probe/Floats.c
@@ -47,7 +47,7 @@ chaz_Floats_run(void) {
 }
 
 const char*
-chaz_Floats_math_library_flags(void) {
+chaz_Floats_math_library(void) {
     static const char sqrt_code[] =
         CHAZ_QUOTE(  #include <math.h>                              )
         CHAZ_QUOTE(  #include <stdio.h>                             )
@@ -55,32 +55,27 @@ chaz_Floats_math_library_flags(void) {
         CHAZ_QUOTE(      printf("%p\n", sqrt);                      )
         CHAZ_QUOTE(      return 0;                                  )
         CHAZ_QUOTE(  }                                              );
-    char   *old_extra_cflags;
-    char   *output = NULL;
-    size_t  output_len;
+    chaz_CFlags *temp_cflags = chaz_CC_get_temp_cflags();
+    char        *output = NULL;
+    size_t       output_len;
 
     output = chaz_CC_capture_output(sqrt_code, &output_len);
     if (output != NULL) {
         /* Linking against libm not needed. */
         free(output);
-        return "";
+        return NULL;
     }
 
-    old_extra_cflags = chaz_Util_strdup(chaz_CC_get_extra_cflags());
-    chaz_CC_add_extra_cflags("-lm");
-
+    chaz_CFlags_add_library(temp_cflags, "m");
     output = chaz_CC_capture_output(sqrt_code, &output_len);
-
-    /* Restore extra cflags. */
-    chaz_CC_set_extra_cflags(old_extra_cflags);
-    free(old_extra_cflags);
+    chaz_CFlags_clear(temp_cflags);
 
     if (output == NULL) {
         chaz_Util_die("Don't know how to use math library.");
     }
 
     free(output);
-    return "-lm";
+    return "m";
 }
 
 

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/b5f68704/src/Charmonizer/Probe/Floats.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Probe/Floats.h b/src/Charmonizer/Probe/Floats.h
index 605b38f..2f71e9e 100644
--- a/src/Charmonizer/Probe/Floats.h
+++ b/src/Charmonizer/Probe/Floats.h
@@ -42,10 +42,10 @@ extern "C" {
 void
 chaz_Floats_run(void);
 
-/* Determine which flags are needed to link against the math library.
+/* Return the name of the math library to link against or NULL.
  */
 const char*
-chaz_Floats_math_library_flags(void);
+chaz_Floats_math_library(void);
 
 #ifdef __cplusplus
 }

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/b5f68704/src/Charmonizer/Probe/SymbolVisibility.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Probe/SymbolVisibility.c b/src/Charmonizer/Probe/SymbolVisibility.c
index 0b2af00..6639a4f 100644
--- a/src/Charmonizer/Probe/SymbolVisibility.c
+++ b/src/Charmonizer/Probe/SymbolVisibility.c
@@ -32,11 +32,12 @@ static const char chaz_SymbolVisibility_symbol_exporting_code[] =
 
 void
 chaz_SymbolVisibility_run(void) {
+    chaz_CFlags *temp_cflags = chaz_CC_get_temp_cflags();
     int can_control_visibility = false;
     char code_buf[sizeof(chaz_SymbolVisibility_symbol_exporting_code) + 100];
 
     chaz_ConfWriter_start_module("SymbolVisibility");
-    chaz_CC_set_warnings_as_errors(1);
+    chaz_CFlags_set_warnings_as_errors(temp_cflags);
 
     /* Windows. */
     if (!can_control_visibility) {
@@ -61,7 +62,8 @@ chaz_SymbolVisibility_run(void) {
             chaz_ConfWriter_add_def("IMPORT", NULL);
         }
     }
-    chaz_CC_set_warnings_as_errors(0);
+
+    chaz_CFlags_clear(temp_cflags);
 
     /* Default. */
     if (!can_control_visibility) {


[lucy-commits] [19/50] git commit: C89 fix for Charmonizer

Posted by nw...@apache.org.
C89 fix for Charmonizer


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/ae9f31e7
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/ae9f31e7
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/ae9f31e7

Branch: refs/heads/master
Commit: ae9f31e71cd94184f96be160ed856788492ff489
Parents: 360df2c
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Thu May 2 14:01:11 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Thu May 2 14:01:11 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Core/Compiler.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/ae9f31e7/src/Charmonizer/Core/Compiler.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/Compiler.c b/src/Charmonizer/Core/Compiler.c
index fb0d960..2130b47 100644
--- a/src/Charmonizer/Core/Compiler.c
+++ b/src/Charmonizer/Core/Compiler.c
@@ -362,6 +362,7 @@ chaz_CC_link_command() {
 char*
 chaz_CC_shared_lib_file(const char *name) {
     const char *prefix = "";
+    const char *shlib_ext = chaz_OS_shared_lib_ext();
     if (!chaz_CC.intval__MSC_VER) {
         if (strcmp(chaz_OS_name(), "cygwin") == 0) {
             prefix = "cyg";
@@ -370,7 +371,6 @@ chaz_CC_shared_lib_file(const char *name) {
             prefix = "lib";
         }
     }
-    const char *shlib_ext = chaz_OS_shared_lib_ext();
     return chaz_Util_join("", prefix, name, shlib_ext, NULL);
 }
 


[lucy-commits] [08/50] git commit: Compile C library with hidden symbols

Posted by nw...@apache.org.
Compile C library with hidden symbols


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/054c6663
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/054c6663
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/054c6663

Branch: refs/heads/master
Commit: 054c66636de4b688efd06c3c35adcb217570fbc3
Parents: d7dfbe1
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Wed Apr 3 22:46:51 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Mon Apr 8 21:23:22 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Core/CFlags.c | 8 ++++++++
 src/Charmonizer/Core/CFlags.h | 3 +++
 2 files changed, 11 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/054c6663/src/Charmonizer/Core/CFlags.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/CFlags.c b/src/Charmonizer/Core/CFlags.c
index 180427e..3e2a2cc 100644
--- a/src/Charmonizer/Core/CFlags.c
+++ b/src/Charmonizer/Core/CFlags.c
@@ -195,6 +195,14 @@ chaz_CFlags_compile_shared_library(chaz_CFlags *flags) {
 }
 
 void
+chaz_CFlags_hide_symbols(chaz_CFlags *flags) {
+    if (flags->style == CHAZ_CFLAGS_STYLE_GNU
+        && strcmp(chaz_OS_shared_lib_ext(), ".dll") != 0) {
+        chaz_CFlags_append(flags, "-fvisibility=hidden");
+    }
+}
+
+void
 chaz_CFlags_link_shared_library(chaz_CFlags *flags) {
     const char *string;
     if (flags->style == CHAZ_CFLAGS_STYLE_MSVC) {

http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/054c6663/src/Charmonizer/Core/CFlags.h
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Core/CFlags.h b/src/Charmonizer/Core/CFlags.h
index 4e712ed..2b4ffe6 100644
--- a/src/Charmonizer/Core/CFlags.h
+++ b/src/Charmonizer/Core/CFlags.h
@@ -71,6 +71,9 @@ void
 chaz_CFlags_compile_shared_library(chaz_CFlags *flags);
 
 void
+chaz_CFlags_hide_symbols(chaz_CFlags *flags);
+
+void
 chaz_CFlags_link_shared_library(chaz_CFlags *flags);
 
 void


[lucy-commits] [37/50] git commit: Remove ineffective const

Posted by nw...@apache.org.
Remove ineffective const

Discovered by -Wextra.


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/2b3f2b0e
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/2b3f2b0e
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/2b3f2b0e

Branch: refs/heads/master
Commit: 2b3f2b0ec56b82c57cd9a63a037e148515550319
Parents: 4ed16e2
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Wed May 15 19:21:48 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Wed May 15 19:23:05 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Probe/LargeFiles.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/2b3f2b0e/src/Charmonizer/Probe/LargeFiles.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Probe/LargeFiles.c b/src/Charmonizer/Probe/LargeFiles.c
index c0e51b8..c394245 100644
--- a/src/Charmonizer/Probe/LargeFiles.c
+++ b/src/Charmonizer/Probe/LargeFiles.c
@@ -47,7 +47,7 @@ typedef struct chaz_LargeFiles_unbuff_combo {
 
 /* Check for a 64-bit file pointer type.
  */
-static const int
+static int
 chaz_LargeFiles_probe_off64(void);
 
 /* Check what name 64-bit ftell, fseek go by.
@@ -114,7 +114,7 @@ chaz_LargeFiles_run(void) {
     chaz_ConfWriter_end_module();
 }
 
-static const int
+static int
 chaz_LargeFiles_probe_off64(void) {
     static const char off64_code[] =
         CHAZ_QUOTE(  %s                                        )


[lucy-commits] [42/50] git commit: Split up Charmonizer integer modules

Posted by nw...@apache.org.
Split up Charmonizer integer modules

This will allow us to create a charmony.h which doesn't define the
stdint types.


Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/1c0f7c28
Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/1c0f7c28
Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/1c0f7c28

Branch: refs/heads/master
Commit: 1c0f7c280167beaf79d168c70112818b4426da24
Parents: ff32689
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Sat May 18 18:57:18 2013 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Mon May 20 21:01:12 2013 +0200

----------------------------------------------------------------------
 src/Charmonizer/Probe/Integers.c | 280 ++++++++++++++++++++--------------
 1 file changed, 167 insertions(+), 113 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/1c0f7c28/src/Charmonizer/Probe/Integers.c
----------------------------------------------------------------------
diff --git a/src/Charmonizer/Probe/Integers.c b/src/Charmonizer/Probe/Integers.c
index a326eed..3f44097 100644
--- a/src/Charmonizer/Probe/Integers.c
+++ b/src/Charmonizer/Probe/Integers.c
@@ -61,7 +61,7 @@ static const char chaz_Integers_u64_to_double_code[] =
     CHAZ_QUOTE(  #include <stdio.h>                        )
     CHAZ_QUOTE(  int main()                                )
     CHAZ_QUOTE(  {                                         )
-    CHAZ_QUOTE(      unsigned __int64 int_num = 0;         )
+    CHAZ_QUOTE(      unsigned %s int_num = 0;              )
     CHAZ_QUOTE(      double float_num;                     )
     CHAZ_QUOTE(      float_num = (double)int_num;          )
     CHAZ_QUOTE(      printf("%%f\n", float_num);           )
@@ -218,13 +218,6 @@ chaz_Integers_run(void) {
         }
     }
 
-    /* Determine whether conversion of unsigned __int64 to double works */
-    if (has___int64) {
-        if (!chaz_CC_test_compile(chaz_Integers_u64_to_double_code)) {
-            can_convert_u64_to_double = false;
-        }
-    }
-
     /* Write out some conditional defines. */
     if (has_inttypes) {
         chaz_ConfWriter_add_def("HAS_INTTYPES_H", NULL);
@@ -273,92 +266,179 @@ chaz_Integers_run(void) {
         chaz_ConfWriter_add_def("HAS_INT64_T", NULL);
     }
 
-    /* Write typedefs, maximums/minimums and literals macros. */
-    if (has_inttypes) {
-        chaz_ConfWriter_add_sys_include("inttypes.h");
+    /* Create macro for promoting pointers to integers. */
+    if (has_64) {
+        if (sizeof_ptr == 8) {
+            chaz_ConfWriter_add_def("PTR_TO_I64(ptr)",
+                                    "((int64_t)(uint64_t)(ptr))");
+        }
+        else {
+            chaz_ConfWriter_add_def("PTR_TO_I64(ptr)",
+                                    "((int64_t)(uint32_t)(ptr))");
+        }
     }
-    else {
-        if (has_stdint) {
-            chaz_ConfWriter_add_sys_include("stdint.h");
+
+    /* Create macro for converting uint64_t to double. */
+    if (has_64) {
+        /*
+         * Determine whether unsigned 64-bit integers can be converted to
+         * double. Older MSVC versions don't support this conversion.
+         */
+        sprintf(code_buf, chaz_Integers_u64_to_double_code, i64_t_type);
+        output = chaz_CC_capture_output(code_buf, &output_len);
+        if (output != NULL) {
+            chaz_ConfWriter_add_def("U64_TO_DOUBLE(num)", "((double)(num))");
+            free(output);
         }
         else {
-            /* We support only the following subset of stdint.h
-             *   int8_t
-             *   int16_t
-             *   int32_t
-             *   int64_t
-             *   uint8_t
-             *   uint16_t
-             *   uint32_t
-             *   uint64_t
-             *   INT8_MAX
-             *   INT16_MAX
-             *   INT32_MAX
-             *   INT64_MAX
-             *   INT8_MIN
-             *   INT16_MIN
-             *   INT32_MIN
-             *   INT64_MIN
-             *   UINT8_MAX
-             *   UINT16_MAX
-             *   UINT32_MAX
-             *   UINT64_MAX
-             *   SIZE_MAX
-             *   INT32_C
-             *   INT64_C
-             *   UINT32_C
-             *   UINT64_C
-             */
-            if (has_8) {
-                chaz_ConfWriter_add_global_typedef("signed char", "int8_t");
-                chaz_ConfWriter_add_global_typedef("unsigned char", "uint8_t");
-                chaz_ConfWriter_add_global_def("INT8_MAX", "127");
-                chaz_ConfWriter_add_global_def("INT8_MIN", "-128");
-                chaz_ConfWriter_add_global_def("UINT8_MAX", "255");
-            }
-            if (has_16) {
-                chaz_ConfWriter_add_global_typedef("signed short", "int16_t");
-                chaz_ConfWriter_add_global_typedef("unsigned short",
-                                                   "uint16_t");
-                chaz_ConfWriter_add_global_def("INT16_MAX", "32767");
-                chaz_ConfWriter_add_global_def("INT16_MIN", "-32768");
-                chaz_ConfWriter_add_global_def("UINT16_MAX", "65535");
-            }
-            if (has_32) {
-                chaz_ConfWriter_add_global_typedef(i32_t_type, "int32_t");
-                sprintf(scratch, "unsigned %s", i32_t_type);
-                chaz_ConfWriter_add_global_typedef(scratch, "uint32_t");
-                chaz_ConfWriter_add_global_def("INT32_MAX", "2147483647");
-                chaz_ConfWriter_add_global_def("INT32_MIN", "(-INT32_MAX-1)");
-                chaz_ConfWriter_add_global_def("UINT32_MAX", "4294967295U");
-                if (strcmp(i32_t_postfix, "") == 0) {
-                    chaz_ConfWriter_add_global_def("INT32_C(n)", "n");
-                }
-                else {
-                    sprintf(scratch, "n##%s", i32_t_postfix);
-                    chaz_ConfWriter_add_global_def("INT32_C(n)", scratch);
-                }
-                sprintf(scratch, "n##%s", u32_t_postfix);
-                chaz_ConfWriter_add_global_def("UINT32_C(n)", scratch);
+            chaz_ConfWriter_add_def(
+                "U64_TO_DOUBLE(num)",
+                "((num) & UINT64_C(0x8000000000000000) ? "
+                "(double)(int64_t)((num) & UINT64_C(0x7FFFFFFFFFFFFFFF)) + "
+                "9223372036854775808.0 : "
+                "(double)(int64_t)(num))");
+        }
+    }
+
+    chaz_ConfWriter_end_module();
+
+    /* Integer typedefs. */
+
+    chaz_ConfWriter_start_module("IntegerTypes");
+
+    if (has_stdint) {
+        chaz_ConfWriter_add_sys_include("stdint.h");
+    }
+    else {
+        /* We support only the following subset of stdint.h
+         *   int8_t
+         *   int16_t
+         *   int32_t
+         *   int64_t
+         *   uint8_t
+         *   uint16_t
+         *   uint32_t
+         *   uint64_t
+         */
+        if (has_8) {
+            chaz_ConfWriter_add_global_typedef("signed char", "int8_t");
+            chaz_ConfWriter_add_global_typedef("unsigned char", "uint8_t");
+        }
+        if (has_16) {
+            chaz_ConfWriter_add_global_typedef("signed short", "int16_t");
+            chaz_ConfWriter_add_global_typedef("unsigned short", "uint16_t");
+        }
+        if (has_32) {
+            chaz_ConfWriter_add_global_typedef(i32_t_type, "int32_t");
+            sprintf(scratch, "unsigned %s", i32_t_type);
+            chaz_ConfWriter_add_global_typedef(scratch, "uint32_t");
+        }
+        if (has_64) {
+            chaz_ConfWriter_add_global_typedef(i64_t_type, "int64_t");
+            sprintf(scratch, "unsigned %s", i64_t_type);
+            chaz_ConfWriter_add_global_typedef(scratch, "uint64_t");
+        }
+    }
+
+    chaz_ConfWriter_end_module();
+
+    /* Integer limits. */
+
+    chaz_ConfWriter_start_module("IntegerLimits");
+
+    if (has_stdint) {
+        chaz_ConfWriter_add_sys_include("stdint.h");
+    }
+    else {
+        /* We support only the following subset of stdint.h
+         *   INT8_MAX
+         *   INT16_MAX
+         *   INT32_MAX
+         *   INT64_MAX
+         *   INT8_MIN
+         *   INT16_MIN
+         *   INT32_MIN
+         *   INT64_MIN
+         *   UINT8_MAX
+         *   UINT16_MAX
+         *   UINT32_MAX
+         *   UINT64_MAX
+         *   SIZE_MAX
+         */
+        if (has_8) {
+            chaz_ConfWriter_add_global_def("INT8_MAX", "127");
+            chaz_ConfWriter_add_global_def("INT8_MIN", "-128");
+            chaz_ConfWriter_add_global_def("UINT8_MAX", "255");
+        }
+        if (has_16) {
+            chaz_ConfWriter_add_global_def("INT16_MAX", "32767");
+            chaz_ConfWriter_add_global_def("INT16_MIN", "-32768");
+            chaz_ConfWriter_add_global_def("UINT16_MAX", "65535");
+        }
+        if (has_32) {
+            chaz_ConfWriter_add_global_def("INT32_MAX", "2147483647");
+            chaz_ConfWriter_add_global_def("INT32_MIN", "(-INT32_MAX-1)");
+            chaz_ConfWriter_add_global_def("UINT32_MAX", "4294967295U");
+        }
+        if (has_64) {
+            sprintf(scratch, "9223372036854775807%s", i64_t_postfix);
+            chaz_ConfWriter_add_global_def("INT64_MAX", scratch);
+            chaz_ConfWriter_add_global_def("INT64_MIN", "(-INT64_MAX-1)");
+            sprintf(scratch, "18446744073709551615%s", u64_t_postfix);
+            chaz_ConfWriter_add_global_def("UINT64_MAX", scratch);
+        }
+        chaz_ConfWriter_add_global_def("SIZE_MAX", "((size_t)-1)");
+    }
+
+    chaz_ConfWriter_end_module();
+
+    /* Integer literals. */
+
+    chaz_ConfWriter_start_module("IntegerLiterals");
+
+    if (has_stdint) {
+        chaz_ConfWriter_add_sys_include("stdint.h");
+    }
+    else {
+        /* We support only the following subset of stdint.h
+         *   INT32_C
+         *   INT64_C
+         *   UINT32_C
+         *   UINT64_C
+         */
+        if (has_32) {
+            if (strcmp(i32_t_postfix, "") == 0) {
+                chaz_ConfWriter_add_global_def("INT32_C(n)", "n");
             }
-            if (has_64) {
-                chaz_ConfWriter_add_global_typedef(i64_t_type, "int64_t");
-                sprintf(scratch, "unsigned %s", i64_t_type);
-                chaz_ConfWriter_add_global_typedef(scratch, "uint64_t");
-                sprintf(scratch, "9223372036854775807%s", i64_t_postfix);
-                chaz_ConfWriter_add_global_def("INT64_MAX", scratch);
-                chaz_ConfWriter_add_global_def("INT64_MIN", "(-INT64_MAX-1)");
-                sprintf(scratch, "18446744073709551615%s", u64_t_postfix);
-                chaz_ConfWriter_add_global_def("UINT64_MAX", scratch);
-                sprintf(scratch, "n##%s", i64_t_postfix);
-                chaz_ConfWriter_add_global_def("INT64_C(n)", scratch);
-                sprintf(scratch, "n##%s", u64_t_postfix);
-                chaz_ConfWriter_add_global_def("UINT64_C(n)", scratch);
+            else {
+                sprintf(scratch, "n##%s", i32_t_postfix);
+                chaz_ConfWriter_add_global_def("INT32_C(n)", scratch);
             }
-            chaz_ConfWriter_add_global_def("SIZE_MAX", "((size_t)-1)");
+            sprintf(scratch, "n##%s", u32_t_postfix);
+            chaz_ConfWriter_add_global_def("UINT32_C(n)", scratch);
+        }
+        if (has_64) {
+            sprintf(scratch, "n##%s", i64_t_postfix);
+            chaz_ConfWriter_add_global_def("INT64_C(n)", scratch);
+            sprintf(scratch, "n##%s", u64_t_postfix);
+            chaz_ConfWriter_add_global_def("UINT64_C(n)", scratch);
         }
+    }
+
+    chaz_ConfWriter_end_module();
 
-        /* Create the PRId64 and PRIu64 printf macros. */
+    /* Integer format strings. */
+
+    chaz_ConfWriter_start_module("IntegerFormatStrings");
+
+    if (has_inttypes) {
+        chaz_ConfWriter_add_sys_include("inttypes.h");
+    }
+    else {
+        /* We support only the following subset of inttypes.h
+         *   PRId64
+         *   PRIu64
+         */
         if (has_64) {
             int i;
             const char *options[] = {
@@ -397,32 +477,6 @@ chaz_Integers_run(void) {
         }
     }
 
-    /* Create macro for promoting pointers to integers. */
-    if (has_64) {
-        if (sizeof_ptr == 8) {
-            chaz_ConfWriter_add_def("PTR_TO_I64(ptr)",
-                                    "((int64_t)(uint64_t)(ptr))");
-        }
-        else {
-            chaz_ConfWriter_add_def("PTR_TO_I64(ptr)",
-                                    "((int64_t)(uint32_t)(ptr))");
-        }
-    }
-
-    /* Create macro for converting uint64_t to double. */
-    if (can_convert_u64_to_double) {
-        chaz_ConfWriter_add_def("U64_TO_DOUBLE(num)",
-                                "((double)(num))");
-    }
-    else {
-        chaz_ConfWriter_add_def(
-            "U64_TO_DOUBLE(num)",
-            "((num) & UINT64_C(0x8000000000000000) ? "
-            "(double)(int64_t)((num) & UINT64_C(0x7FFFFFFFFFFFFFFF)) + "
-            "9223372036854775808.0 : "
-            "(double)(int64_t)(num))");
-    }
-
     chaz_ConfWriter_end_module();
 }