Repository: lucy
Updated Branches:
  refs/heads/master 5535d25f8 -> 598b4d074


Regen charmonizer.c for --rpath fix


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

Branch: refs/heads/master
Commit: b22794165abfcd33d5fd4e578397a6a1926f9c6b
Parents: 5535d25
Author: Nick Wellnhofer <wellnho...@aevum.de>
Authored: Sat May 20 15:02:38 2017 +0200
Committer: Nick Wellnhofer <wellnho...@aevum.de>
Committed: Sat May 20 15:02:38 2017 +0200

----------------------------------------------------------------------
 common/charmonizer.c | 73 +++++++++++++++++++++++++++--------------------
 1 file changed, 42 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy/blob/b2279416/common/charmonizer.c
----------------------------------------------------------------------
diff --git a/common/charmonizer.c b/common/charmonizer.c
index 21641b1..84970d0 100644
--- a/common/charmonizer.c
+++ b/common/charmonizer.c
@@ -664,6 +664,7 @@ chaz_HeadCheck_size_of_type(const char *type, const char 
*includes, int hint);
 #define H_CHAZ_MAKE
 
 /* #include "Charmonizer/Core/CFlags.h" */
+/* #include "Charmonizer/Core/CLI.h" */
 
 typedef struct chaz_MakeFile chaz_MakeFile;
 typedef struct chaz_MakeVar chaz_MakeVar;
@@ -2107,7 +2108,15 @@ chaz_CFlags_add_rpath(chaz_CFlags *flags, const char 
*path) {
     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);
+        /* If "new dtags" are enabled by default, DT_RUNPATH is set instead of
+         * DT_RPATH. Unfortunately, DT_RUNPATH is not applied transitively
+         * when searching for indirect dependencies. See
+         *
+         * https://bugs.launchpad.net/ubuntu/+source/eglibc/+bug/1253638
+         * https://sourceware.org/bugzilla/show_bug.cgi?id=13945
+         */
+        string = chaz_Util_join("", "-Wl,--disable-new-dtags -Wl,-rpath,",
+                                path, NULL);
     }
     else if (flags->style == CHAZ_CFLAGS_STYLE_SUN_C) {
         string = chaz_Util_join(" ", "-R", path, NULL);
@@ -3590,39 +3599,41 @@ chaz_ConfWriterC_end_module(void) {
     }
 
     /* Write out short names. */
-    fprintf(chaz_ConfWriterC.fh,
-        "\n#if defined(CHY_USE_SHORT_NAMES) "
-        "|| defined(CHAZ_USE_SHORT_NAMES)\n"
-    );
-    for (i = 0; i < chaz_ConfWriterC.def_count; i++) {
-        switch (defs[i].type) {
-            case CHAZ_CONFELEM_DEF:
-            case CHAZ_CONFELEM_TYPEDEF:
-                {
-                    const char *sym = defs[i].str1;
-                    const char *value = defs[i].str2;
-                    if (!value || strcmp(sym, value) != 0) {
-                        const char *prefix
-                            = chaz_ConfWriterC_sym_is_uppercase(sym)
-                              ? "CHY_" : "chy_";
-                        fprintf(chaz_ConfWriterC.fh, "  #define %s %s%s\n",
-                                sym, prefix, sym);
+    if (chaz_ConfWriterC.def_count > 0) {
+        fprintf(chaz_ConfWriterC.fh,
+            "\n#if defined(CHY_USE_SHORT_NAMES) "
+            "|| defined(CHAZ_USE_SHORT_NAMES)\n"
+        );
+        for (i = 0; i < chaz_ConfWriterC.def_count; i++) {
+            switch (defs[i].type) {
+                case CHAZ_CONFELEM_DEF:
+                case CHAZ_CONFELEM_TYPEDEF:
+                    {
+                        const char *sym = defs[i].str1;
+                        const char *value = defs[i].str2;
+                        if (!value || strcmp(sym, value) != 0) {
+                            const char *prefix
+                                = chaz_ConfWriterC_sym_is_uppercase(sym)
+                                  ? "CHY_" : "chy_";
+                            fprintf(chaz_ConfWriterC.fh, "  #define %s %s%s\n",
+                                    sym, prefix, sym);
+                        }
                     }
-                }
-                break;
-            case CHAZ_CONFELEM_GLOBAL_DEF:
-            case CHAZ_CONFELEM_GLOBAL_TYPEDEF:
-            case CHAZ_CONFELEM_SYS_INCLUDE:
-            case CHAZ_CONFELEM_LOCAL_INCLUDE:
-                /* no-op */
-                break;
-            default:
-                chaz_Util_die("Internal error: bad element type %d",
-                              (int)defs[i].type);
+                    break;
+                case CHAZ_CONFELEM_GLOBAL_DEF:
+                case CHAZ_CONFELEM_GLOBAL_TYPEDEF:
+                case CHAZ_CONFELEM_SYS_INCLUDE:
+                case CHAZ_CONFELEM_LOCAL_INCLUDE:
+                    /* no-op */
+                    break;
+                default:
+                    chaz_Util_die("Internal error: bad element type %d",
+                                  (int)defs[i].type);
+            }
         }
-    }
 
-    fprintf(chaz_ConfWriterC.fh, "#endif /* USE_SHORT_NAMES */\n");
+        fprintf(chaz_ConfWriterC.fh, "#endif /* USE_SHORT_NAMES */\n");
+    }
 
     /* Write out global definitions and system includes. */
     if (num_globals) {

Reply via email to