Makefile: make NO_ICONV really mean "no iconv"
authorEric Sunshine <sunshine@sunshineco.com>
Fri, 15 Jun 2018 02:25:03 +0000 (22:25 -0400)
committerJunio C Hamano <gitster@pobox.com>
Fri, 15 Jun 2018 19:50:45 +0000 (12:50 -0700)
The Makefile tweak NO_ICONV is meant to allow Git to be built without
iconv in case iconv is not installed or is otherwise dysfunctional.
However, NO_ICONV's disabling of iconv is incomplete and can incorrectly
allow "-liconv" to slip into the linker flags when NEEDS_LIBICONV is
defined, which breaks the build when iconv is not installed.

On some platforms, iconv lives directly in libc, whereas, on others it
resides in libiconv. For the latter case, NEEDS_LIBICONV instructs the
Makefile to add "-liconv" to the linker flags. config.mak.uname
automatically defines NEEDS_LIBICONV for platforms which require it.
The adding of "-liconv" is done unconditionally, despite NO_ICONV.

Work around this problem by making NO_ICONV take precedence over
NEEDS_LIBICONV.

Reported by: Mahmoud Al-Qudsi <mqudsi@neosmart.net>
Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Makefile
index 7f40f76739e9c9eca58c2d6743a55c7d02bcab9c..4d3c9300c63d30a1dd0804d22ffcc44a2b5b4c25 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1288,17 +1288,19 @@ ifdef APPLE_COMMON_CRYPTO
        LIB_4_CRYPTO += -framework Security -framework CoreFoundation
 endif
 endif
-ifdef NEEDS_LIBICONV
-       ifdef ICONVDIR
-               BASIC_CFLAGS += -I$(ICONVDIR)/include
-               ICONV_LINK = -L$(ICONVDIR)/$(lib) $(CC_LD_DYNPATH)$(ICONVDIR)/$(lib)
-       else
-               ICONV_LINK =
-       endif
-       ifdef NEEDS_LIBINTL_BEFORE_LIBICONV
-               ICONV_LINK += -lintl
+ifndef NO_ICONV
+       ifdef NEEDS_LIBICONV
+               ifdef ICONVDIR
+                       BASIC_CFLAGS += -I$(ICONVDIR)/include
+                       ICONV_LINK = -L$(ICONVDIR)/$(lib) $(CC_LD_DYNPATH)$(ICONVDIR)/$(lib)
+               else
+                       ICONV_LINK =
+               endif
+               ifdef NEEDS_LIBINTL_BEFORE_LIBICONV
+                       ICONV_LINK += -lintl
+               endif
+               EXTLIBS += $(ICONV_LINK) -liconv
        endif
-       EXTLIBS += $(ICONV_LINK) -liconv
 endif
 ifdef NEEDS_LIBGEN
        EXTLIBS += -lgen