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/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/4413eaa1
Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/4413eaa1
Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/4413eaa1

Branch: refs/heads/master
Commit: 4413eaa13fd0c70d2b55b6d029dc5466f8a2a768
Parents: 9a4efa6
Author: Nick Wellnhofer <[email protected]>
Authored: Mon Mar 11 20:20:45 2013 +0100
Committer: Nick Wellnhofer <[email protected]>
Committed: Sun Mar 24 17:13:47 2013 +0100

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


http://git-wip-us.apache.org/repos/asf/lucy/blob/4413eaa1/charmonizer/src/Charmonizer/Core/Compiler.c
----------------------------------------------------------------------
diff --git a/charmonizer/src/Charmonizer/Core/Compiler.c 
b/charmonizer/src/Charmonizer/Core/Compiler.c
index 19dbbb1..a5de6a9 100644
--- a/charmonizer/src/Charmonizer/Core/Compiler.c
+++ b/charmonizer/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/blob/4413eaa1/charmonizer/src/Charmonizer/Core/Compiler.h
----------------------------------------------------------------------
diff --git a/charmonizer/src/Charmonizer/Core/Compiler.h 
b/charmonizer/src/Charmonizer/Core/Compiler.h
index c398148..6fc4a5e 100644
--- a/charmonizer/src/Charmonizer/Core/Compiler.h
+++ b/charmonizer/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

Reply via email to