commit 5a0cb621e914dbfab385a99a8cc79be81c1e0221 Author: Daniel Guzman Date: Fri May 2 02:13:08 2014 +0000 [PATCH] Use -lintl when libc doesn't provide dgettext dgettext is usually provided directly by libc, but when using uClibc, the macro is expanded to libintl_dgettext, which is provided by libintl. This causes a compilation failure, so this patch fixes that by explicitly checking if the libc provides dgettext, then checking if libintl provides it and mending the linker flags if so. If not, configure will properly fail. Signed-off-by: Daniel Guzman --- configure.ac | 34 ++++++++++++++++++++++++++++++++++ libasm/Makefile.am | 1 + libdw/Makefile.am | 2 +- libelf/Makefile.am | 1 + src/Makefile.am | 30 +++++++++++++++--------------- tests/Makefile.am | 20 ++++++++++---------- 6 files changed, 62 insertions(+), 26 deletions(-) diff --git a/configure.ac b/configure.ac index 5fbf883..cdd7709 100644 --- a/configure.ac +++ b/configure.ac @@ -326,6 +326,40 @@ else fi AC_SUBST([argp_LDADD]) +dnl Check if we have dgettext available from our libc +AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [#include ], + [char *test=dgettext("test","test"); return 0;] + )], + [libc_has_dgettext="true"], + [libc_has_dgettext="false"] +) + +dnl If our libc doesn't provide dgettext, then test for libintl support +if test "$libc_has_dgettext" = "false" ; then + OLD_LIBS="$LIBS" + LIBS="$OLD_LIBS -lintl" + AC_MSG_WARN("libc does not have dgettext") + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [#include ], + [char *test=dgettext("test","test"); return 0;] + )], + [libintl_has_dgettext="true"], + [libintl_has_dgettext="false"] + ) + if test "$libintl_has_dgettext" = "false"; then + AC_MSG_ERROR("no libintl with dgettext found") + else + intl_LDADD="-lintl" + fi + LIBS="$OLD_LIBS" +else + intl_LDADD="" +fi +AC_SUBST([intl_LDADD]) + dnl Check for __mempcpy AC_CHECK_FUNCS_ONCE([__mempcpy]) diff --git a/libasm/Makefile.am b/libasm/Makefile.am index 4d81536..d528add 100644 --- a/libasm/Makefile.am +++ b/libasm/Makefile.am @@ -59,6 +59,7 @@ libasm_pic_a_SOURCES = am_libasm_pic_a_OBJECTS = $(libasm_a_SOURCES:.c=.os) libasm_so_LDLIBS = +libasm_so_LDLIBS += $(intl_LDADD) if USE_LOCKS libasm_so_LDLIBS += -lpthread endif diff --git a/libdw/Makefile.am b/libdw/Makefile.am index b452c7d..ddfa367 100644 --- a/libdw/Makefile.am +++ b/libdw/Makefile.am @@ -111,7 +111,7 @@ libdw.so: $(srcdir)/libdw.map libdw_pic.a \ -Wl,--enable-new-dtags,-rpath,$(pkglibdir) \ -Wl,--version-script,$<,--no-undefined \ -Wl,--whole-archive $(filter-out $<,$^) -Wl,--no-whole-archive\ - -ldl $(argp_LDADD) $(zip_LIBS) + -ldl $(argp_LDADD) $(intl_LDADD) $(zip_LIBS) if $(READELF) -d $@ | fgrep -q TEXTREL; then exit 1; fi ln -fs $@ $@.$(VERSION) diff --git a/libelf/Makefile.am b/libelf/Makefile.am index 4646fba..489e13d 100644 --- a/libelf/Makefile.am +++ b/libelf/Makefile.am @@ -97,6 +97,7 @@ libelf_pic_a_SOURCES = am_libelf_pic_a_OBJECTS = $(libelf_a_SOURCES:.c=.os) libelf_so_LDLIBS = +libelf_so_LDLIBS += $(intl_LDADD) if USE_LOCKS libelf_so_LDLIBS += -lpthread endif diff --git a/src/Makefile.am b/src/Makefile.am index 40fa528..0a3c229 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -98,27 +98,27 @@ ldgeneric_no_Wunused = yes # Buggy old compilers. readelf_no_Werror = yes -readelf_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(libmudflap) $(argp_LDADD) -ldl -nm_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(libmudflap) $(argp_LDADD) -ldl \ +readelf_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(libmudflap) $(argp_LDADD) $(intl_LDADD) -ldl +nm_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(libmudflap) $(argp_LDADD) $(intl_LDADD) -ldl \ $(demanglelib) -size_LDADD = $(libelf) $(libeu) $(libmudflap) $(argp_LDADD) -strip_LDADD = $(libebl) $(libelf) $(libeu) $(libmudflap) $(argp_LDADD) -ldl -ld_LDADD = $(libebl) $(libelf) $(libeu) $(libmudflap) $(argp_LDADD) -ldl +size_LDADD = $(libelf) $(libeu) $(libmudflap) $(argp_LDADD) $(intl_LDADD) +strip_LDADD = $(libebl) $(libelf) $(libeu) $(libmudflap) $(argp_LDADD) $(intl_LDADD) -ldl +ld_LDADD = $(libebl) $(libelf) $(libeu) $(libmudflap) $(argp_LDADD) $(intl_LDADD) -ldl if NATIVE_LD # -ldl is always needed for libebl. ld_LDADD += libld_elf.a endif ld_LDFLAGS = -rdynamic -elflint_LDADD = $(libebl) $(libelf) $(libeu) $(libmudflap) $(argp_LDADD) -ldl -findtextrel_LDADD = $(libdw) $(libelf) $(libmudflap) $(argp_LDADD) -addr2line_LDADD = $(libdw) $(libelf) $(libmudflap) $(argp_LDADD) -elfcmp_LDADD = $(libebl) $(libelf) $(libmudflap) $(argp_LDADD) -ldl -objdump_LDADD = $(libasm) $(libebl) $(libelf) $(libeu) $(libmudflap) $(argp_LDADD) -ldl -ranlib_LDADD = libar.a $(libelf) $(libeu) $(libmudflap) $(argp_LDADD) -strings_LDADD = $(libelf) $(libeu) $(libmudflap) $(argp_LDADD) -ar_LDADD = libar.a $(libelf) $(libeu) $(libmudflap) $(argp_LDADD) -unstrip_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(libmudflap) $(argp_LDADD) -ldl -stack_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(libmudflap) $(argp_LDADD) -ldl \ +elflint_LDADD = $(libebl) $(libelf) $(libeu) $(libmudflap) $(argp_LDADD) $(intl_LDADD) -ldl +findtextrel_LDADD = $(libdw) $(libelf) $(libmudflap) $(argp_LDADD) $(intl_LDADD) +addr2line_LDADD = $(libdw) $(libelf) $(libmudflap) $(argp_LDADD) $(intl_LDADD) +elfcmp_LDADD = $(libebl) $(libelf) $(libmudflap) $(argp_LDADD) $(intl_LDADD) -ldl +objdump_LDADD = $(libasm) $(libebl) $(libelf) $(libeu) $(libmudflap) $(argp_LDADD) $(intl_LDADD) -ldl +ranlib_LDADD = libar.a $(libelf) $(libeu) $(libmudflap) $(argp_LDADD) $(intl_LDADD) +strings_LDADD = $(libelf) $(libeu) $(libmudflap) $(argp_LDADD) $(intl_LDADD) +ar_LDADD = libar.a $(libelf) $(libeu) $(libmudflap) $(argp_LDADD) $(intl_LDADD) +unstrip_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(libmudflap) $(argp_LDADD) $(intl_LDADD) -ldl +stack_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(libmudflap) $(argp_LDADD) $(intl_LDADD) -ldl \ $(demanglelib) ldlex.o: ldscript.c diff --git a/tests/Makefile.am b/tests/Makefile.am index 1688e8a..688dd39 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -346,12 +346,12 @@ get_files_LDADD = $(libdw) $(libelf) $(libmudflap) get_aranges_LDADD = $(libdw) $(libelf) $(libmudflap) allfcts_LDADD = $(libdw) $(libelf) $(libmudflap) line2addr_no_Wformat = yes -line2addr_LDADD = $(libdw) $(libmudflap) $(argp_LDADD) -addrscopes_LDADD = $(libdw) $(libmudflap) $(argp_LDADD) -funcscopes_LDADD = $(libdw) $(libmudflap) $(argp_LDADD) -funcretval_LDADD = $(libdw) $(libmudflap) $(argp_LDADD) -allregs_LDADD = $(libdw) $(libmudflap) $(argp_LDADD) -find_prologues_LDADD = $(libdw) $(libmudflap) $(argp_LDADD) +line2addr_LDADD = $(libdw) $(libmudflap) $(argp_LDADD) $(intl_LDADD) +addrscopes_LDADD = $(libdw) $(libmudflap) $(argp_LDADD) $(intl_LDADD) +funcscopes_LDADD = $(libdw) $(libmudflap) $(argp_LDADD) $(intl_LDADD) +funcretval_LDADD = $(libdw) $(libmudflap) $(argp_LDADD) $(intl_LDADD) +allregs_LDADD = $(libdw) $(libmudflap) $(argp_LDADD) $(intl_LDADD) +find_prologues_LDADD = $(libdw) $(libmudflap) $(argp_LDADD) $(intl_LDADD) #show_ciefde_LDADD = ../libdwarf/libdwarf.so $(libelf) $(libmudflap) asm_tst1_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl asm_tst2_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl @@ -362,24 +362,24 @@ asm_tst6_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl asm_tst7_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl asm_tst8_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl asm_tst9_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl -dwflmodtest_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) $(argp_LDADD) -ldl +dwflmodtest_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) $(argp_LDADD) $(intl_LDADD) -ldl rdwrmmap_LDADD = $(libelf) $(libmudflap) dwfl_bug_addr_overflow_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl arls_LDADD = $(libelf) $(libmudflap) dwfl_bug_fd_leak_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl dwfl_bug_report_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl dwfl_bug_getmodules_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl -dwfl_addr_sect_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) $(argp_LDADD) -ldl +dwfl_addr_sect_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) $(argp_LDADD) $(intl_LDADD) -ldl dwarf_getmacros_LDADD = $(libdw) $(libmudflap) dwarf_getstring_LDADD = $(libdw) $(libmudflap) -addrcfi_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) $(argp_LDADD) -ldl +addrcfi_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) $(argp_LDADD) $(intl_LDADD) -ldl test_flag_nobits_LDADD = $(libelf) $(libmudflap) rerequest_tag_LDADD = $(libdw) $(libmudflap) alldts_LDADD = $(libebl) $(libelf) $(libmudflap) md5_sha1_test_LDADD = $(libeu) typeiter_LDADD = $(libdw) $(libelf) $(libmudflap) typeiter2_LDADD = $(libdw) $(libelf) $(libmudflap) -low_high_pc_LDADD = $(libdw) $(libelf) $(libmudflap) $(argp_LDADD) +low_high_pc_LDADD = $(libdw) $(libelf) $(libmudflap) $(argp_LDADD) $(intl_LDADD) test_elf_cntl_gelf_getshdr_LDADD = $(libelf) $(libmudflap) dwflsyms_LDADD = $(libdw) $(libelf) $(libmudflap) dwfllines_LDADD = $(libdw) $(libelf) $(libmudflap)