Use rpath for test executable

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

Branch: refs/heads/master
Commit: be1957bfb5a645167d1dfbe2da1aff4d016bb7e2
Parents: f5e6cdd
Author: Nick Wellnhofer <[email protected]>
Authored: Wed Jul 6 17:30:32 2016 +0200
Committer: Nick Wellnhofer <[email protected]>
Committed: Wed Jul 6 17:37:56 2016 +0200

----------------------------------------------------------------------
 compiler/common/charmonizer.c   | 29 +++++++++++++++++++++++++
 runtime/common/charmonizer.c    | 42 +++++++++++++++++++++++++++---------
 runtime/common/charmonizer.main | 13 +++--------
 3 files changed, 64 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/be1957bf/compiler/common/charmonizer.c
----------------------------------------------------------------------
diff --git a/compiler/common/charmonizer.c b/compiler/common/charmonizer.c
index 19eff00..c224853 100644
--- a/compiler/common/charmonizer.c
+++ b/compiler/common/charmonizer.c
@@ -112,6 +112,9 @@ void
 chaz_CFlags_add_external_lib(chaz_CFlags *flags, const char *library);
 
 void
+chaz_CFlags_add_rpath(chaz_CFlags *flags, const char *path);
+
+void
 chaz_CFlags_enable_code_coverage(chaz_CFlags *flags);
 
 #endif /* H_CHAZ_CFLAGS */
@@ -2024,6 +2027,27 @@ chaz_CFlags_add_external_lib(chaz_CFlags *flags, const 
char *library) {
 }
 
 void
+chaz_CFlags_add_rpath(chaz_CFlags *flags, const char *path) {
+    char *string;
+
+    if (chaz_CC_binary_format() != CHAZ_CC_BINFMT_ELF) { return; }
+
+    if (flags->style == CHAZ_CFLAGS_STYLE_GNU) {
+        string = chaz_Util_join("", "-Wl,-rpath,", path, NULL);
+    }
+    else if (flags->style == CHAZ_CFLAGS_STYLE_SUN_C) {
+        string = chaz_Util_join(" ", "-R", path, NULL);
+    }
+    else {
+        chaz_Util_die("Don't know how to set rpath with '%s'",
+                      chaz_CC_get_cc());
+    }
+
+    chaz_CFlags_append(flags, string);
+    free(string);
+}
+
+void
 chaz_CFlags_enable_code_coverage(chaz_CFlags *flags) {
     if (flags->style == CHAZ_CFLAGS_STYLE_GNU) {
         chaz_CFlags_append(flags, "--coverage");
@@ -5088,6 +5112,11 @@ chaz_MakeFile_write(chaz_MakeFile *self) {
         chaz_Util_die("Can't open Makefile\n");
     }
 
+    if (chaz_Make.shell_type == CHAZ_OS_CMD_EXE) {
+        /* Make sure that mingw32-make uses the cmd.exe shell. */
+        fprintf(out, "SHELL = cmd\n");
+    }
+
     for (i = 0; self->vars[i]; i++) {
         chaz_MakeVar *var = self->vars[i];
         fprintf(out, "%s = %s\n", var->name, var->value);

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/be1957bf/runtime/common/charmonizer.c
----------------------------------------------------------------------
diff --git a/runtime/common/charmonizer.c b/runtime/common/charmonizer.c
index fda1309..5bce6b4 100644
--- a/runtime/common/charmonizer.c
+++ b/runtime/common/charmonizer.c
@@ -112,6 +112,9 @@ void
 chaz_CFlags_add_external_lib(chaz_CFlags *flags, const char *library);
 
 void
+chaz_CFlags_add_rpath(chaz_CFlags *flags, const char *path);
+
+void
 chaz_CFlags_enable_code_coverage(chaz_CFlags *flags);
 
 #endif /* H_CHAZ_CFLAGS */
@@ -2024,6 +2027,27 @@ chaz_CFlags_add_external_lib(chaz_CFlags *flags, const 
char *library) {
 }
 
 void
+chaz_CFlags_add_rpath(chaz_CFlags *flags, const char *path) {
+    char *string;
+
+    if (chaz_CC_binary_format() != CHAZ_CC_BINFMT_ELF) { return; }
+
+    if (flags->style == CHAZ_CFLAGS_STYLE_GNU) {
+        string = chaz_Util_join("", "-Wl,-rpath,", path, NULL);
+    }
+    else if (flags->style == CHAZ_CFLAGS_STYLE_SUN_C) {
+        string = chaz_Util_join(" ", "-R", path, NULL);
+    }
+    else {
+        chaz_Util_die("Don't know how to set rpath with '%s'",
+                      chaz_CC_get_cc());
+    }
+
+    chaz_CFlags_append(flags, string);
+    free(string);
+}
+
+void
 chaz_CFlags_enable_code_coverage(chaz_CFlags *flags) {
     if (flags->style == CHAZ_CFLAGS_STYLE_GNU) {
         chaz_CFlags_append(flags, "--coverage");
@@ -5088,6 +5112,11 @@ chaz_MakeFile_write(chaz_MakeFile *self) {
         chaz_Util_die("Can't open Makefile\n");
     }
 
+    if (chaz_Make.shell_type == CHAZ_OS_CMD_EXE) {
+        /* Make sure that mingw32-make uses the cmd.exe shell. */
+        fprintf(out, "SHELL = cmd\n");
+    }
+
     for (i = 0; self->vars[i]; i++) {
         chaz_MakeVar *var = self->vars[i];
         fprintf(out, "%s = %s\n", var->name, var->value);
@@ -9044,8 +9073,6 @@ cfish_MakeFile_write_c_test_rules(cfish_MakeFile *self) {
     chaz_CFlags     *link_cflags;
     chaz_MakeRule   *rule;
 
-    const char *test_command;
-
     exe = chaz_MakeFile_add_exe(self->makefile, "t", "test_cfish");
     chaz_MakeBinary_add_src_file(exe, "t", "test_cfish.c");
     chaz_MakeFile_add_rule(self->makefile, "$(TEST_CFISH_EXE_OBJS)",
@@ -9053,16 +9080,11 @@ cfish_MakeFile_write_c_test_rules(cfish_MakeFile *self) 
{
     link_cflags = chaz_MakeBinary_get_link_flags(exe);
     chaz_CFlags_add_shared_lib(link_cflags, NULL, "cfish",
                                cfish_major_version);
+    chaz_CFlags_add_rpath(link_cflags, "\"$$PWD\"");
     chaz_MakeBinary_add_prereq(exe, "$(CFISH_SHARED_LIB)");
 
     rule = chaz_MakeFile_add_rule(self->makefile, "test", "$(TEST_CFISH_EXE)");
-    if (chaz_CC_binary_format() == CHAZ_CC_BINFMT_ELF) {
-        test_command = "LD_LIBRARY_PATH=. $(TEST_CFISH_EXE)";
-    }
-    else {
-        test_command = "$(TEST_CFISH_EXE)";
-    }
-    chaz_MakeRule_add_command(rule, test_command);
+    chaz_MakeRule_add_command(rule, "$(TEST_CFISH_EXE)");
 
     if (chaz_OS_shell_type() == CHAZ_OS_POSIX) {
         const char *valgrind_command;
@@ -9091,7 +9113,7 @@ cfish_MakeFile_write_c_test_rules(cfish_MakeFile *self) {
                                   "lcov"
                                   " --zerocounters"
                                   " --directory $(BASE_DIR)");
-        chaz_MakeRule_add_command(rule, test_command);
+        chaz_MakeRule_add_command(rule, "$(TEST_CFISH_EXE)");
         chaz_MakeRule_add_command(rule,
                                   "lcov"
                                   " --capture"

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/be1957bf/runtime/common/charmonizer.main
----------------------------------------------------------------------
diff --git a/runtime/common/charmonizer.main b/runtime/common/charmonizer.main
index 7c8bdc7..e777c52 100644
--- a/runtime/common/charmonizer.main
+++ b/runtime/common/charmonizer.main
@@ -464,8 +464,6 @@ cfish_MakeFile_write_c_test_rules(cfish_MakeFile *self) {
     chaz_CFlags     *link_cflags;
     chaz_MakeRule   *rule;
 
-    const char *test_command;
-
     exe = chaz_MakeFile_add_exe(self->makefile, "t", "test_cfish");
     chaz_MakeBinary_add_src_file(exe, "t", "test_cfish.c");
     chaz_MakeFile_add_rule(self->makefile, "$(TEST_CFISH_EXE_OBJS)",
@@ -473,16 +471,11 @@ cfish_MakeFile_write_c_test_rules(cfish_MakeFile *self) {
     link_cflags = chaz_MakeBinary_get_link_flags(exe);
     chaz_CFlags_add_shared_lib(link_cflags, NULL, "cfish",
                                cfish_major_version);
+    chaz_CFlags_add_rpath(link_cflags, "\"$$PWD\"");
     chaz_MakeBinary_add_prereq(exe, "$(CFISH_SHARED_LIB)");
 
     rule = chaz_MakeFile_add_rule(self->makefile, "test", "$(TEST_CFISH_EXE)");
-    if (chaz_CC_binary_format() == CHAZ_CC_BINFMT_ELF) {
-        test_command = "LD_LIBRARY_PATH=. $(TEST_CFISH_EXE)";
-    }
-    else {
-        test_command = "$(TEST_CFISH_EXE)";
-    }
-    chaz_MakeRule_add_command(rule, test_command);
+    chaz_MakeRule_add_command(rule, "$(TEST_CFISH_EXE)");
 
     if (chaz_OS_shell_type() == CHAZ_OS_POSIX) {
         const char *valgrind_command;
@@ -511,7 +504,7 @@ cfish_MakeFile_write_c_test_rules(cfish_MakeFile *self) {
                                   "lcov"
                                   " --zerocounters"
                                   " --directory $(BASE_DIR)");
-        chaz_MakeRule_add_command(rule, test_command);
+        chaz_MakeRule_add_command(rule, "$(TEST_CFISH_EXE)");
         chaz_MakeRule_add_command(rule,
                                   "lcov"
                                   " --capture"

Reply via email to