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:48 UTC

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

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