Regen charmonizer.c for --rpath fix
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 @@
#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 @@
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 @@
}
/* 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) {