Add Charmonizer probe for math library flags

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

Branch: refs/heads/master
Commit: 3f842657d2a586ad360e9d5d0d4729a65c652818
Parents: 6e157f8
Author: Nick Wellnhofer <[email protected]>
Authored: Thu Mar 14 13:31:17 2013 +0100
Committer: Nick Wellnhofer <[email protected]>
Committed: Thu Mar 14 13:42:59 2013 +0100

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


http://git-wip-us.apache.org/repos/asf/lucy/blob/3f842657/charmonizer/src/Charmonizer/Core/Compiler.c
----------------------------------------------------------------------
diff --git a/charmonizer/src/Charmonizer/Core/Compiler.c 
b/charmonizer/src/Charmonizer/Core/Compiler.c
index 13bb0cd..19dbbb1 100644
--- a/charmonizer/src/Charmonizer/Core/Compiler.c
+++ b/charmonizer/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/blob/3f842657/charmonizer/src/Charmonizer/Core/Compiler.h
----------------------------------------------------------------------
diff --git a/charmonizer/src/Charmonizer/Core/Compiler.h 
b/charmonizer/src/Charmonizer/Core/Compiler.h
index 69469e6..c398148 100644
--- a/charmonizer/src/Charmonizer/Core/Compiler.h
+++ b/charmonizer/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/blob/3f842657/charmonizer/src/Charmonizer/Probe/Floats.c
----------------------------------------------------------------------
diff --git a/charmonizer/src/Charmonizer/Probe/Floats.c 
b/charmonizer/src/Charmonizer/Probe/Floats.c
index c45526b..d4e6d58 100644
--- a/charmonizer/src/Charmonizer/Probe/Floats.c
+++ b/charmonizer/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/blob/3f842657/charmonizer/src/Charmonizer/Probe/Floats.h
----------------------------------------------------------------------
diff --git a/charmonizer/src/Charmonizer/Probe/Floats.h 
b/charmonizer/src/Charmonizer/Probe/Floats.h
index 79ad734..605b38f 100644
--- a/charmonizer/src/Charmonizer/Probe/Floats.h
+++ b/charmonizer/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

Reply via email to