Merge branch 'rp/link-curl-before-ssl'
authorJunio C Hamano <gitster@pobox.com>
Thu, 29 Oct 2015 20:59:20 +0000 (13:59 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 29 Oct 2015 20:59:20 +0000 (13:59 -0700)
The linkage order of libraries was wrong in places around libcurl.

* rp/link-curl-before-ssl:
configure.ac: detect ssl need with libcurl
Makefile: make curl-config path configurable
Makefile: link libcurl before zlib

1  2 
Makefile
configure.ac
diff --combined Makefile
index 8466333027490a0595c8482b7c1d3df4dac78565,64d17d0dc5feb986c12e90520c87a686a3d82d9e..e0717b0fa107ea7ead0eb3b5e35545c1263c9f13
+++ b/Makefile
@@@ -39,6 -39,9 +39,9 @@@ all:
  # Define CURLDIR=/foo/bar if your curl header and library files are in
  # /foo/bar/include and /foo/bar/lib directories.
  #
+ # Define CURL_CONFIG to curl's configuration program that prints information
+ # about the library (e.g., its version number).  The default is 'curl-config'.
+ #
  # Define NO_EXPAT if you do not have expat installed.  git-http-push is
  # not built, and you cannot push using http:// and https:// transports (dumb).
  #
@@@ -74,6 -77,8 +77,6 @@@
  # Define HAVE_PATHS_H if you have paths.h and want to use the default PATH
  # it specifies.
  #
 -# Define NO_D_INO_IN_DIRENT if you don't have d_ino in your struct dirent.
 -#
  # Define NO_D_TYPE_IN_DIRENT if your platform defines DT_UNKNOWN but lacks
  # d_type in struct dirent (Cygwin 1.5, fixed in Cygwin 1.7).
  #
@@@ -373,9 -378,6 +376,9 @@@ ALL_CFLAGS = $(CPPFLAGS) $(CFLAGS
  ALL_LDFLAGS = $(LDFLAGS)
  STRIP ?= strip
  
 +# Create as necessary, replace existing, make ranlib unneeded.
 +ARFLAGS = rcs
 +
  # Among the variables below, these:
  #   gitexecdir
  #   template_dir
@@@ -426,6 -428,7 +429,7 @@@ TCL_PATH = tcls
  TCLTK_PATH = wish
  XGETTEXT = xgettext
  MSGFMT = msgfmt
+ CURL_CONFIG = curl-config
  PTHREAD_LIBS = -lpthread
  PTHREAD_CFLAGS =
  GCOV = gcov
@@@ -468,6 -471,7 +472,6 @@@ TEST_PROGRAMS_NEED_X 
  # interactive shell sessions without exporting it.
  unexport CDPATH
  
 -SCRIPT_SH += git-am.sh
  SCRIPT_SH += git-bisect.sh
  SCRIPT_SH += git-difftool--helper.sh
  SCRIPT_SH += git-filter-branch.sh
@@@ -475,6 -479,7 +479,6 @@@ SCRIPT_SH += git-merge-octopus.s
  SCRIPT_SH += git-merge-one-file.sh
  SCRIPT_SH += git-merge-resolve.sh
  SCRIPT_SH += git-mergetool.sh
 -SCRIPT_SH += git-pull.sh
  SCRIPT_SH += git-quiltimport.sh
  SCRIPT_SH += git-rebase.sh
  SCRIPT_SH += git-remote-testgit.sh
@@@ -594,7 -599,6 +598,7 @@@ TEST_PROGRAMS_NEED_X += test-sha
  TEST_PROGRAMS_NEED_X += test-sha1-array
  TEST_PROGRAMS_NEED_X += test-sigchain
  TEST_PROGRAMS_NEED_X += test-string-list
 +TEST_PROGRAMS_NEED_X += test-submodule-config
  TEST_PROGRAMS_NEED_X += test-subprocess
  TEST_PROGRAMS_NEED_X += test-svn-fe
  TEST_PROGRAMS_NEED_X += test-urlmatch-normalization
@@@ -763,7 -767,6 +767,7 @@@ LIB_OBJS += reachable.
  LIB_OBJS += read-cache.o
  LIB_OBJS += reflog-walk.o
  LIB_OBJS += refs.o
 +LIB_OBJS += ref-filter.o
  LIB_OBJS += remote.o
  LIB_OBJS += replace_object.o
  LIB_OBJS += rerere.o
@@@ -786,10 -789,8 +790,10 @@@ LIB_OBJS += strbuf.
  LIB_OBJS += streaming.o
  LIB_OBJS += string-list.o
  LIB_OBJS += submodule.o
 +LIB_OBJS += submodule-config.o
  LIB_OBJS += symlinks.o
  LIB_OBJS += tag.o
 +LIB_OBJS += tempfile.o
  LIB_OBJS += trace.o
  LIB_OBJS += trailer.o
  LIB_OBJS += transport.o
@@@ -808,7 -809,6 +812,7 @@@ LIB_OBJS += version.
  LIB_OBJS += versioncmp.o
  LIB_OBJS += walker.o
  LIB_OBJS += wildmatch.o
 +LIB_OBJS += worktree.o
  LIB_OBJS += wrapper.o
  LIB_OBJS += write_or_die.o
  LIB_OBJS += ws.o
@@@ -817,7 -817,6 +821,7 @@@ LIB_OBJS += xdiff-interface.
  LIB_OBJS += zlib.o
  
  BUILTIN_OBJS += builtin/add.o
 +BUILTIN_OBJS += builtin/am.o
  BUILTIN_OBJS += builtin/annotate.o
  BUILTIN_OBJS += builtin/apply.o
  BUILTIN_OBJS += builtin/archive.o
@@@ -883,7 -882,6 +887,7 @@@ BUILTIN_OBJS += builtin/pack-refs.
  BUILTIN_OBJS += builtin/patch-id.o
  BUILTIN_OBJS += builtin/prune-packed.o
  BUILTIN_OBJS += builtin/prune.o
 +BUILTIN_OBJS += builtin/pull.o
  BUILTIN_OBJS += builtin/push.o
  BUILTIN_OBJS += builtin/read-tree.o
  BUILTIN_OBJS += builtin/receive-pack.o
@@@ -904,7 -902,6 +908,7 @@@ BUILTIN_OBJS += builtin/shortlog.
  BUILTIN_OBJS += builtin/show-branch.o
  BUILTIN_OBJS += builtin/show-ref.o
  BUILTIN_OBJS += builtin/stripspace.o
 +BUILTIN_OBJS += builtin/submodule--helper.o
  BUILTIN_OBJS += builtin/symbolic-ref.o
  BUILTIN_OBJS += builtin/tag.o
  BUILTIN_OBJS += builtin/unpack-file.o
@@@ -1036,7 -1033,7 +1040,7 @@@ ifdef HAVE_ALLOCA_
  endif
  
  IMAP_SEND_BUILDDEPS =
- IMAP_SEND_LDFLAGS = $(OPENSSL_LINK) $(OPENSSL_LIBSSL) $(LIB_4_CRYPTO)
+ IMAP_SEND_LDFLAGS =
  
  ifdef NO_CURL
        BASIC_CFLAGS += -DNO_CURL
        REMOTE_CURL_NAMES = $(REMOTE_CURL_PRIMARY) $(REMOTE_CURL_ALIASES)
        PROGRAM_OBJS += http-fetch.o
        PROGRAMS += $(REMOTE_CURL_NAMES)
-       curl_check := $(shell (echo 070908; curl-config --vernum | sed -e '/^70[BC]/s/^/0/') 2>/dev/null | sort -r | sed -ne 2p)
+       curl_check := $(shell (echo 070908; $(CURL_CONFIG) --vernum | sed -e '/^70[BC]/s/^/0/') 2>/dev/null | sort -r | sed -ne 2p)
        ifeq "$(curl_check)" "070908"
                ifndef NO_EXPAT
                        PROGRAM_OBJS += http-push.o
                endif
        endif
-       curl_check := $(shell (echo 072200; curl-config --vernum | sed -e '/^70[BC]/s/^/0/') 2>/dev/null | sort -r | sed -ne 2p)
+       curl_check := $(shell (echo 072200; $(CURL_CONFIG) --vernum | sed -e '/^70[BC]/s/^/0/') 2>/dev/null | sort -r | sed -ne 2p)
        ifeq "$(curl_check)" "072200"
                USE_CURL_FOR_IMAP_SEND = YesPlease
        endif
                endif
        endif
  endif
+ IMAP_SEND_LDFLAGS += $(OPENSSL_LINK) $(OPENSSL_LIBSSL) $(LIB_4_CRYPTO)
  
  ifdef ZLIB_PATH
        BASIC_CFLAGS += -I$(ZLIB_PATH)/include
@@@ -1163,6 -1161,9 +1168,6 @@@ endi
  ifdef NO_D_TYPE_IN_DIRENT
        BASIC_CFLAGS += -DNO_D_TYPE_IN_DIRENT
  endif
 -ifdef NO_D_INO_IN_DIRENT
 -      BASIC_CFLAGS += -DNO_D_INO_IN_DIRENT
 -endif
  ifdef NO_GECOS_IN_PWENT
        BASIC_CFLAGS += -DNO_GECOS_IN_PWENT
  endif
@@@ -1465,13 -1466,13 +1470,13 @@@ endi
  QUIET_SUBDIR0  = +$(MAKE) -C # space to separate -C and subdir
  QUIET_SUBDIR1  =
  
 -ifneq ($(findstring $(MAKEFLAGS),w),w)
 +ifneq ($(findstring w,$(MAKEFLAGS)),w)
  PRINT_DIR = --no-print-directory
  else # "make -w"
  NO_SUBDIR = :
  endif
  
 -ifneq ($(findstring $(MAKEFLAGS),s),s)
 +ifneq ($(findstring s,$(MAKEFLAGS)),s)
  ifndef V
        QUIET_CC       = @echo '   ' CC $@;
        QUIET_AR       = @echo '   ' AR $@;
@@@ -1703,7 -1704,7 +1708,7 @@@ $(BUILT_INS): git$
  common-cmds.h: generate-cmdlist.sh command-list.txt
  
  common-cmds.h: $(wildcard Documentation/git-*.txt)
 -      $(QUIET_GEN)./generate-cmdlist.sh command-list.txt >$@+ && mv $@+ $@
 +      $(QUIET_GEN)$(SHELL_PATH) ./generate-cmdlist.sh command-list.txt >$@+ && mv $@+ $@
  
  SCRIPT_DEFINES = $(SHELL_PATH_SQ):$(DIFF_SQ):$(GIT_VERSION):\
        $(localedir_SQ):$(NO_CURL):$(USE_GETTEXT_SCHEME):$(SANE_TOOL_PATH_SQ):\
@@@ -1975,10 -1976,10 +1980,10 @@@ git-imap-send$X: imap-send.o $(IMAP_SEN
  
  git-http-fetch$X: http.o http-walker.o http-fetch.o GIT-LDFLAGS $(GITLIBS)
        $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
-               $(LIBS) $(CURL_LIBCURL)
+               $(CURL_LIBCURL) $(LIBS)
  git-http-push$X: http.o http-push.o GIT-LDFLAGS $(GITLIBS)
        $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
-               $(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)
+               $(CURL_LIBCURL) $(EXPAT_LIBEXPAT) $(LIBS)
  
  git-remote-testsvn$X: remote-testsvn.o GIT-LDFLAGS $(GITLIBS) $(VCSSVN_LIB)
        $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS) \
@@@ -1992,16 -1993,16 +1997,16 @@@ $(REMOTE_CURL_ALIASES): $(REMOTE_CURL_P
  
  $(REMOTE_CURL_PRIMARY): remote-curl.o http.o http-walker.o GIT-LDFLAGS $(GITLIBS)
        $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) \
-               $(LIBS) $(CURL_LIBCURL) $(EXPAT_LIBEXPAT)
+               $(CURL_LIBCURL) $(EXPAT_LIBEXPAT) $(LIBS)
  
  $(LIB_FILE): $(LIB_OBJS)
 -      $(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $^
 +      $(QUIET_AR)$(RM) $@ && $(AR) $(ARFLAGS) $@ $^
  
  $(XDIFF_LIB): $(XDIFF_OBJS)
 -      $(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $^
 +      $(QUIET_AR)$(RM) $@ && $(AR) $(ARFLAGS) $@ $^
  
  $(VCSSVN_LIB): $(VCSSVN_OBJS)
 -      $(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $^
 +      $(QUIET_AR)$(RM) $@ && $(AR) $(ARFLAGS) $@ $^
  
  export DEFAULT_EDITOR DEFAULT_PAGER
  
diff --combined configure.ac
index 3fcca618d252d999c69de2bb9372b5d7a4478014,fd22d41b2f654ce92f66292b3276616086958892..76170ad06d1e8a591af209b91c622d3073c691dd
@@@ -521,10 -521,33 +521,33 @@@ AC_CHECK_LIB([curl], [curl_global_init]
  [NO_CURL=],
  [NO_CURL=YesPlease])
  
+ if test -z "${NO_CURL}" && test -z "${NO_OPENSSL}"; then
+ AC_CHECK_LIB([curl], [Curl_ssl_init],
+ [NEEDS_SSL_WITH_CURL=YesPlease],
+ [NEEDS_SSL_WITH_CURL=])
+ GIT_CONF_SUBST([NEEDS_SSL_WITH_CURL])
+ fi
  GIT_UNSTASH_FLAGS($CURLDIR)
  
  GIT_CONF_SUBST([NO_CURL])
  
+ if test -z "$NO_CURL"; then
+ AC_CHECK_PROG([CURL_CONFIG], [curl-config],
+ [curl-config],
+ [no])
+ if test $CURL_CONFIG != no; then
+     GIT_CONF_SUBST([CURL_CONFIG])
+ fi
+ fi
  #
  # Define NO_EXPAT if you do not have expat installed.  git-http-push is
  # not built, and you cannot push using http:// and https:// transports.
@@@ -767,6 -790,13 +790,6 @@@ elif test x$ac_cv_member_struct_stat_st
        GIT_CONF_SUBST([NO_NSEC])
  fi
  #
 -# Define NO_D_INO_IN_DIRENT if you don't have d_ino in your struct dirent.
 -AC_CHECK_MEMBER(struct dirent.d_ino,
 -[NO_D_INO_IN_DIRENT=],
 -[NO_D_INO_IN_DIRENT=YesPlease],
 -[#include <dirent.h>])
 -GIT_CONF_SUBST([NO_D_INO_IN_DIRENT])
 -#
  # Define NO_D_TYPE_IN_DIRENT if your platform defines DT_UNKNOWN but lacks
  # d_type in struct dirent (latest Cygwin -- will be fixed soonish).
  AC_CHECK_MEMBER(struct dirent.d_type,