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 2013/03/14 16:41:13 UTC

[lucy-commits] [6/7] git commit: refs/heads/master - Regenerate charmonizer.c

Regenerate charmonizer.c


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

Branch: refs/heads/master
Commit: 18bc527f72ddb63c97e20edb0dd1d18a99ffe143
Parents: f084e27
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Thu Mar 14 14:43:32 2013 +0100
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Thu Mar 14 14:43:32 2013 +0100

----------------------------------------------------------------------
 clownfish/compiler/common/charmonizer.c |   21 +++++--
 clownfish/runtime/common/charmonizer.c  |   63 +++++++++++++++++--
 common/charmonizer.c                    |   89 +++++++++++++++++++++++--
 3 files changed, 155 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy/blob/18bc527f/clownfish/compiler/common/charmonizer.c
----------------------------------------------------------------------
diff --git a/clownfish/compiler/common/charmonizer.c b/clownfish/compiler/common/charmonizer.c
index e9bec80..d79f642 100644
--- a/clownfish/compiler/common/charmonizer.c
+++ b/clownfish/compiler/common/charmonizer.c
@@ -87,6 +87,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.
  */
@@ -1341,6 +1346,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);
@@ -2807,13 +2818,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);
 
@@ -2841,14 +2852,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);

http://git-wip-us.apache.org/repos/asf/lucy/blob/18bc527f/clownfish/runtime/common/charmonizer.c
----------------------------------------------------------------------
diff --git a/clownfish/runtime/common/charmonizer.c b/clownfish/runtime/common/charmonizer.c
index 0b7524c..d243fe4 100644
--- a/clownfish/runtime/common/charmonizer.c
+++ b/clownfish/runtime/common/charmonizer.c
@@ -87,6 +87,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.
  */
@@ -918,6 +923,11 @@ void chaz_DirManip_run(void);
 void
 chaz_Floats_run(void);
 
+/* Determine which flags are needed to link against the math library.
+ */
+const char*
+chaz_Floats_math_library_flags(void);
+
 #endif /* H_CHAZ_FLOATS */
 
 
@@ -1641,6 +1651,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);
@@ -3107,13 +3123,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);
 
@@ -3141,14 +3157,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);
@@ -4376,6 +4392,43 @@ 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/blob/18bc527f/common/charmonizer.c
----------------------------------------------------------------------
diff --git a/common/charmonizer.c b/common/charmonizer.c
index 326307f..7149c1f 100644
--- a/common/charmonizer.c
+++ b/common/charmonizer.c
@@ -87,6 +87,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.
  */
@@ -918,6 +923,11 @@ void chaz_DirManip_run(void);
 void
 chaz_Floats_run(void);
 
+/* Determine which flags are needed to link against the math library.
+ */
+const char*
+chaz_Floats_math_library_flags(void);
+
 #endif /* H_CHAZ_FLOATS */
 
 
@@ -1641,6 +1651,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);
@@ -3107,13 +3123,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);
 
@@ -3141,14 +3157,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);
@@ -4376,6 +4392,43 @@ 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";
+}
+
 
 
 /***************************************************************************/
@@ -6025,12 +6078,18 @@ S_write_makefile() {
 
     /* C compiler */
 
+    const char *math_link_flags = chaz_Floats_math_library_flags();
+
     chaz_MakeFile_add_var(makefile, "CC", chaz_CC_get_cc());
 
     if (chaz_CC_msvc_version_num()) {
         chaz_CC_add_extra_cflags("/nologo");
     }
     chaz_CC_set_optimization_level("2");
+
+    /* TODO: This makes extra_cflags and subsequent probes unusable. Find a
+     * better way to get flags for include dirs.
+     */
     chaz_CC_add_include_dir(".");
     chaz_CC_add_include_dir("$(SRC_DIR)");
     chaz_CC_add_include_dir("$(CORE_DIR)");
@@ -6123,16 +6182,26 @@ S_write_makefile() {
     chaz_MakeRule_add_command(rule, scratch);
     free(scratch);
 
+    /* Needed for parallel builds. */
+    rule = chaz_MakeFile_add_rule(makefile, "$(AUTOGEN_DIR)" DIR_SEP "source"
+                                  DIR_SEP "parcel.c", "$(AUTOGEN_DIR)");
+
     rule = chaz_MakeFile_add_rule(makefile, "$(LUCY_OBJS)", NULL);
     chaz_MakeRule_add_prereq(rule, json_parser_c);
     chaz_MakeRule_add_prereq(rule, "$(AUTOGEN_DIR)");
 
-    const char *link_flags = "";
+    const char *pcre_link_flags = "";
     if (chaz_HeadCheck_check_header("pcre.h")) {
-        link_flags = "-lpcre";
+        pcre_link_flags = "-lpcre";
     }
+    size_t link_flags_size = strlen(math_link_flags)
+                             + strlen(pcre_link_flags)
+                             + 20;
+    char *link_flags = (char*)malloc(link_flags_size);
+    sprintf(link_flags, "%s %s", math_link_flags, pcre_link_flags);
     chaz_MakeFile_add_shared_obj(makefile, "$(LUCY_SHOBJ)", "$(LUCY_OBJS)",
                                  link_flags);
+    free(link_flags);
 
     chaz_MakeFile_add_rule(makefile, "$(TEST_LUCY_OBJS)", "$(AUTOGEN_DIR)");
 
@@ -6141,7 +6210,11 @@ S_write_makefile() {
     chaz_MakeRule_add_prereq(rule, "$(LUCY_SHOBJ)");
 
     rule = chaz_MakeFile_add_rule(makefile, "test", "$(TEST_LUCY_EXE)");
-    chaz_MakeRule_add_command(rule, "$(TEST_LUCY_EXE)");
+    const char *test_command = "$(TEST_LUCY_EXE)";
+    if (strcmp(chaz_OS_shared_obj_ext(), ".so") == 0) {
+        test_command = "LD_LIBRARY_PATH=. $(TEST_LUCY_EXE)";
+    }
+    chaz_MakeRule_add_command(rule, test_command);
 
     chaz_MakeFile_add_to_cleanup(makefile, "$(TEST_LUCY_OBJS)");
     chaz_MakeFile_add_to_cleanup(makefile, "$(LUCY_OBJS)");