Rework Makefile flags

- Disable strict aliasing
- Use platform-specific flags for shared libraries
- Use new Charmonizer functions for link flags


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

Branch: refs/heads/master
Commit: 8d1abdd59a6e1efffeadcb0581a8a294bdbf08bf
Parents: 180dab3
Author: Nick Wellnhofer <[email protected]>
Authored: Sun Mar 24 17:09:57 2013 +0100
Committer: Nick Wellnhofer <[email protected]>
Committed: Sun Mar 24 17:13:47 2013 +0100

----------------------------------------------------------------------
 common/charmonizer.main |   25 +++++++++++++++++--------
 1 files changed, 17 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy/blob/8d1abdd5/common/charmonizer.main
----------------------------------------------------------------------
diff --git a/common/charmonizer.main b/common/charmonizer.main
index c369a65..b2be36d 100644
--- a/common/charmonizer.main
+++ b/common/charmonizer.main
@@ -184,6 +184,8 @@ S_write_makefile() {
         chaz_CC_add_extra_cflags("/nologo");
     }
     chaz_CC_set_optimization_level("2");
+    chaz_CC_disable_strict_aliasing();
+    chaz_CC_add_extra_cflags(chaz_CC_shared_obj_cflags());
 
     /* TODO: This makes extra_cflags and subsequent probes unusable. Find a
      * better way to get flags for include dirs.
@@ -288,24 +290,31 @@ S_write_makefile() {
     chaz_MakeRule_add_prereq(rule, json_parser_c);
     chaz_MakeRule_add_prereq(rule, "$(AUTOGEN_DIR)");
 
-    const char *pcre_link_flags = "";
+    char *pcre_link_flag;
     if (chaz_HeadCheck_check_header("pcre.h")) {
-        pcre_link_flags = "-lpcre";
+        pcre_link_flag = chaz_CC_link_with_shared_obj_flag("pcre");
     }
-    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);
+    else {
+        pcre_link_flag = chaz_Util_strdup("");
+    }
+    char *link_flags
+        = chaz_Util_join(" ", math_link_flags, pcre_link_flag, NULL);
     chaz_MakeFile_add_shared_obj(makefile, "$(LUCY_SHOBJ)", "$(LUCY_OBJS)",
                                  link_flags);
     free(link_flags);
+    free(pcre_link_flag);
 
     chaz_MakeFile_add_rule(makefile, "$(TEST_LUCY_OBJS)", "$(AUTOGEN_DIR)");
 
+    char *library_path_flag = chaz_CC_library_path_flag(".");
+    char *lucy_link_flag    = chaz_CC_link_with_shared_obj_flag("lucy");
+    link_flags = chaz_Util_join(" ", library_path_flag, lucy_link_flag, NULL);
     rule = chaz_MakeFile_add_exe(makefile, "$(TEST_LUCY_EXE)",
-                                 "$(TEST_LUCY_OBJS)", "-L. -llucy");
+                                 "$(TEST_LUCY_OBJS)", link_flags);
     chaz_MakeRule_add_prereq(rule, "$(LUCY_SHOBJ)");
+    free(link_flags);
+    free(lucy_link_flag);
+    free(library_path_flag);
 
     rule = chaz_MakeFile_add_rule(makefile, "test", "$(TEST_LUCY_EXE)");
     const char *test_command = "$(TEST_LUCY_EXE)";

Reply via email to