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
