Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH v2 0/3] package/git: Fix static compilation
@ 2015-11-01 20:36 Remi Pommarel
  2015-11-01 20:36 ` [Buildroot] [PATCH v2 1/3] package/git: Add needed library for " Remi Pommarel
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Remi Pommarel @ 2015-11-01 20:36 UTC (permalink / raw)
  To: buildroot

Hi,

This patch series fixes git package static compilation. This fixes missing
library dependency coming from static library undefined symbols as well as
backport of submitted and accepted git patches.

Thanks
Remi

Remi Pommarel (3):
  package/git: Add needed library for static compilation
  package/git: Add git patch for static compilation
  package/git: Used curl-config program for target

 .../0001-Makefile-link-libcurl-before-zlib.patch   | 62 +++++++++++++++
 ...kefile-make-curl-config-path-configurable.patch | 88 ++++++++++++++++++++++
 ...configure.ac-detect-ssl-need-with-libcurl.patch | 46 +++++++++++
 package/git/git.mk                                 |  8 +-
 4 files changed, 202 insertions(+), 2 deletions(-)
 create mode 100644 package/git/0001-Makefile-link-libcurl-before-zlib.patch
 create mode 100644 package/git/0002-Makefile-make-curl-config-path-configurable.patch
 create mode 100644 package/git/0003-configure.ac-detect-ssl-need-with-libcurl.patch

-- 
2.0.1

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Buildroot] [PATCH v2 1/3] package/git: Add needed library for static compilation
  2015-11-01 20:36 [Buildroot] [PATCH v2 0/3] package/git: Fix static compilation Remi Pommarel
@ 2015-11-01 20:36 ` Remi Pommarel
  2015-11-02  4:25   ` Baruch Siach
  2015-11-01 20:36 ` [Buildroot] [PATCH v2 2/3] package/git: Add git patch " Remi Pommarel
  2015-11-01 20:36 ` [Buildroot] [PATCH v2 3/3] package/git: Used curl-config program for target Remi Pommarel
  2 siblings, 1 reply; 6+ messages in thread
From: Remi Pommarel @ 2015-11-01 20:36 UTC (permalink / raw)
  To: buildroot

Add missing ssl crypto libraries in LIBS variable used by configure.

A statically compiled libcurl need to be linked with some libraries to get all
its undefined symbols resolved. Indeed when libcurl supports openssl it needs
-lssl to satisfy all its dependencies, the same goes for crypto symbols.

Configure uses LIBS variable to get additional library when it compile
applilcations to probe for features.

Signed-off-by: Remi Pommarel <repk@triplefau.lt>
---
 package/git/git.mk | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package/git/git.mk b/package/git/git.mk
index 2bd6a01..6e1b44b 100644
--- a/package/git/git.mk
+++ b/package/git/git.mk
@@ -14,7 +14,7 @@ GIT_DEPENDENCIES = zlib host-gettext
 ifeq ($(BR2_PACKAGE_OPENSSL),y)
 GIT_DEPENDENCIES += openssl
 GIT_CONF_OPTS += --with-openssl
-GIT_CONF_ENV_LIBS += $(if $(BR2_STATIC_LIBS),-lz)
+GIT_CONF_ENV_LIBS += $(if $(BR2_STATIC_LIBS),-lssl -lcrypto -lz)
 else
 GIT_CONF_OPTS += --without-openssl
 endif
@@ -57,7 +57,7 @@ endif
 
 # assume yes for these tests, configure will bail out otherwise
 # saying error: cannot run test program while cross compiling
-GIT_CONF_ENV = \
+GIT_CONF_ENV += \
 	ac_cv_fread_reads_directories=yes \
 	ac_cv_snprintf_returns_bogus=yes LIBS='$(GIT_CONF_ENV_LIBS)'
 
-- 
2.0.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Buildroot] [PATCH v2 2/3] package/git: Add git patch for static compilation
  2015-11-01 20:36 [Buildroot] [PATCH v2 0/3] package/git: Fix static compilation Remi Pommarel
  2015-11-01 20:36 ` [Buildroot] [PATCH v2 1/3] package/git: Add needed library for " Remi Pommarel
@ 2015-11-01 20:36 ` Remi Pommarel
  2015-11-01 20:36 ` [Buildroot] [PATCH v2 3/3] package/git: Used curl-config program for target Remi Pommarel
  2 siblings, 0 replies; 6+ messages in thread
From: Remi Pommarel @ 2015-11-01 20:36 UTC (permalink / raw)
  To: buildroot

Use submitted git patches that fix static compilation:
	- The first patch fix library link order
	- The second patch adds -lssl when needed with libcurl

These patches fix missing library in the Makefile for git compilation. configure
still need additional library to be passed to LIBS variable to compile test
programs for feature detection.

Signed-off-by: Remi Pommarel <repk@triplefau.lt>
---
 .../0001-Makefile-link-libcurl-before-zlib.patch   | 62 ++++++++++++++++++++++
 ...configure.ac-detect-ssl-need-with-libcurl.patch | 46 ++++++++++++++++
 package/git/git.mk                                 |  2 +
 3 files changed, 110 insertions(+)
 create mode 100644 package/git/0001-Makefile-link-libcurl-before-zlib.patch
 create mode 100644 package/git/0003-configure.ac-detect-ssl-need-with-libcurl.patch

diff --git a/package/git/0001-Makefile-link-libcurl-before-zlib.patch b/package/git/0001-Makefile-link-libcurl-before-zlib.patch
new file mode 100644
index 0000000..8b6786e
--- /dev/null
+++ b/package/git/0001-Makefile-link-libcurl-before-zlib.patch
@@ -0,0 +1,62 @@
+From 9eaa78b0b037964da85d6a15f0128639f2118a53 Mon Sep 17 00:00:00 2001
+From: Remi Pommarel <repk@triplefau.lt>
+Date: Wed, 21 Oct 2015 19:01:13 +0200
+Subject: [PATCH 1/3] Makefile: link libcurl before zlib
+
+For static linking especially library order while linking is important. For
+example, libcurl wants symbols from zlib when building http-push, http-fetch
+and remote-curl. So for these programs libcurl has to be linked before zlib.
+
+Signed-off-by: Remi Pommarel <repk@triplefau.lt>
+Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
+Signed-off-by: Junio C Hamano <gitster@pobox.com>
+---
+ Makefile | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index ce0cfe2..9787385 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1029,7 +1029,7 @@ ifdef HAVE_ALLOCA_H
+ endif
+ 
+ IMAP_SEND_BUILDDEPS =
+-IMAP_SEND_LDFLAGS = $(OPENSSL_LINK) $(OPENSSL_LIBSSL) $(LIB_4_CRYPTO)
++IMAP_SEND_LDFLAGS =
+ 
+ ifdef NO_CURL
+ 	BASIC_CFLAGS += -DNO_CURL
+@@ -1086,6 +1086,7 @@ else
+ 		endif
+ 	endif
+ endif
++IMAP_SEND_LDFLAGS += $(OPENSSL_LINK) $(OPENSSL_LIBSSL) $(LIB_4_CRYPTO)
+ 
+ ifdef ZLIB_PATH
+ 	BASIC_CFLAGS += -I$(ZLIB_PATH)/include
+@@ -1971,10 +1972,10 @@ git-imap-send$X: imap-send.o $(IMAP_SEND_BUILDDEPS) GIT-LDFLAGS $(GITLIBS)
+ 
+ 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) \
+@@ -1988,7 +1989,7 @@ $(REMOTE_CURL_ALIASES): $(REMOTE_CURL_PRIMARY)
+ 
+ $(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 $@ $^
+-- 
+2.0.1
+
diff --git a/package/git/0003-configure.ac-detect-ssl-need-with-libcurl.patch b/package/git/0003-configure.ac-detect-ssl-need-with-libcurl.patch
new file mode 100644
index 0000000..d39987e
--- /dev/null
+++ b/package/git/0003-configure.ac-detect-ssl-need-with-libcurl.patch
@@ -0,0 +1,46 @@
+From 7e91e8d73a757801c0604a03fd2f0fa8003e4ac0 Mon Sep 17 00:00:00 2001
+From: Remi Pommarel <repk@triplefau.lt>
+Date: Thu, 24 Sep 2015 21:14:00 +0200
+Subject: [PATCH 3/3] configure.ac: detect ssl need with libcurl
+
+When libcurl has been statically compiled with openssl support they both
+need to be linked in everytime libcurl is used.
+
+During configuration this can be detected by looking for Curl_ssl_init
+function symbol in libcurl, which will only be present if libcurl has been
+compiled statically built with openssl.
+
+configure.ac checks for Curl_ssl_init function in libcurl and if such function
+exists; it sets NEEDS_SSL_WITH_CURL that is used by the Makefile to include
+-lssl alongside with -lcurl.
+
+Signed-off-by: Remi Pommarel <repk@triplefau.lt>
+Signed-off-by: Junio C Hamano <gitster@pobox.com>
+---
+ configure.ac | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/configure.ac b/configure.ac
+index 01b07ad..fd22d41 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -521,6 +521,16 @@ 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])
+-- 
+2.0.1
+
diff --git a/package/git/git.mk b/package/git/git.mk
index 6e1b44b..13f1bc9 100644
--- a/package/git/git.mk
+++ b/package/git/git.mk
@@ -9,6 +9,8 @@ GIT_SOURCE = git-$(GIT_VERSION).tar.xz
 GIT_SITE = https://www.kernel.org/pub/software/scm/git
 GIT_LICENSE = GPLv2 LGPLv2.1+
 GIT_LICENSE_FILES = COPYING LGPL-2.1
+# configure.ac gets patched, so autoreconf is necessary
+GIT_AUTORECONF = YES
 GIT_DEPENDENCIES = zlib host-gettext
 
 ifeq ($(BR2_PACKAGE_OPENSSL),y)
-- 
2.0.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Buildroot] [PATCH v2 3/3] package/git: Used curl-config program for target
  2015-11-01 20:36 [Buildroot] [PATCH v2 0/3] package/git: Fix static compilation Remi Pommarel
  2015-11-01 20:36 ` [Buildroot] [PATCH v2 1/3] package/git: Add needed library for " Remi Pommarel
  2015-11-01 20:36 ` [Buildroot] [PATCH v2 2/3] package/git: Add git patch " Remi Pommarel
@ 2015-11-01 20:36 ` Remi Pommarel
  2 siblings, 0 replies; 6+ messages in thread
From: Remi Pommarel @ 2015-11-01 20:36 UTC (permalink / raw)
  To: buildroot

Fix cross compilation by using curl-config script for target instead of the
one from host.

Signed-off-by: Remi Pommarel <repk@triplefau.lt>
---
 ...kefile-make-curl-config-path-configurable.patch | 88 ++++++++++++++++++++++
 package/git/git.mk                                 |  2 +
 2 files changed, 90 insertions(+)
 create mode 100644 package/git/0002-Makefile-make-curl-config-path-configurable.patch

diff --git a/package/git/0002-Makefile-make-curl-config-path-configurable.patch b/package/git/0002-Makefile-make-curl-config-path-configurable.patch
new file mode 100644
index 0000000..b281b99
--- /dev/null
+++ b/package/git/0002-Makefile-make-curl-config-path-configurable.patch
@@ -0,0 +1,88 @@
+From f89158760d5f02ba59f644799abd921e6be22f13 Mon Sep 17 00:00:00 2001
+From: Remi Pommarel <repk@triplefau.lt>
+Date: Wed, 21 Oct 2015 19:10:46 +0200
+Subject: [PATCH 2/3] Makefile: make curl-config path configurable
+
+There are situations, e.g. during cross compilation, where curl-config
+program is not present in the PATH.
+
+Make the makefile use a configurable curl-config program passed through
+CURL_CONFIG variable which can be set through config.mak.
+
+Also make this variable tunable through use of autoconf/configure. Configure
+will set CURL_CONFIG variable in config.mak.autogen to whatever value has been
+passed to ac_cv_prog_CURL_CONFIG.
+
+Signed-off-by: Remi Pommarel <repk@triplefau.lt>
+Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
+Signed-off-by: Junio C Hamano <gitster@pobox.com>
+---
+ Makefile     |  8 ++++++--
+ configure.ac | 13 +++++++++++++
+ 2 files changed, 19 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 9787385..64d17d0 100644
+--- a/Makefile
++++ b/Makefile
+@@ -39,6 +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).
+ #
+@@ -425,6 +428,7 @@ TCL_PATH = tclsh
+ TCLTK_PATH = wish
+ XGETTEXT = xgettext
+ MSGFMT = msgfmt
++CURL_CONFIG = curl-config
+ PTHREAD_LIBS = -lpthread
+ PTHREAD_CFLAGS =
+ GCOV = gcov
+@@ -1059,13 +1063,13 @@ else
+ 	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
+diff --git a/configure.ac b/configure.ac
+index 14012fa..01b07ad 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -525,6 +525,19 @@ 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.
+-- 
+2.0.1
+
diff --git a/package/git/git.mk b/package/git/git.mk
index 13f1bc9..7cfc0d4 100644
--- a/package/git/git.mk
+++ b/package/git/git.mk
@@ -31,6 +31,8 @@ endif
 ifeq ($(BR2_PACKAGE_CURL),y)
 GIT_DEPENDENCIES += libcurl
 GIT_CONF_OPTS += --with-curl
+GIT_CONF_ENV +=	\
+	ac_cv_prog_curl_config=$(STAGING_DIR)/usr/bin/$(LIBCURL_CONFIG_SCRIPTS)
 else
 GIT_CONF_OPTS += --without-curl
 endif
-- 
2.0.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Buildroot] [PATCH v2 1/3] package/git: Add needed library for static compilation
  2015-11-01 20:36 ` [Buildroot] [PATCH v2 1/3] package/git: Add needed library for " Remi Pommarel
@ 2015-11-02  4:25   ` Baruch Siach
  2015-11-02  8:11     ` Remi Pommarel
  0 siblings, 1 reply; 6+ messages in thread
From: Baruch Siach @ 2015-11-02  4:25 UTC (permalink / raw)
  To: buildroot

Hi Remi,

On Sun, Nov 01, 2015 at 09:36:21PM +0100, Remi Pommarel wrote:
> @@ -57,7 +57,7 @@ endif
>  
>  # assume yes for these tests, configure will bail out otherwise
>  # saying error: cannot run test program while cross compiling
> -GIT_CONF_ENV = \
> +GIT_CONF_ENV += \
>  	ac_cv_fread_reads_directories=yes \
>  	ac_cv_snprintf_returns_bogus=yes LIBS='$(GIT_CONF_ENV_LIBS)'

Please move this hunk to patch #3 in this series, which is where it logically 
belongs.

baruch

-- 
     http://baruch.siach.name/blog/                  ~. .~   Tk Open Systems
=}------------------------------------------------ooO--U--Ooo------------{=
   - baruch at tkos.co.il - tel: +972.2.679.5364, http://www.tkos.co.il -

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Buildroot] [PATCH v2 1/3] package/git: Add needed library for static compilation
  2015-11-02  4:25   ` Baruch Siach
@ 2015-11-02  8:11     ` Remi Pommarel
  0 siblings, 0 replies; 6+ messages in thread
From: Remi Pommarel @ 2015-11-02  8:11 UTC (permalink / raw)
  To: buildroot

Hi baruch,

On Mon, Nov 02, 2015 at 06:25:20AM +0200, Baruch Siach wrote:
> Hi Remi,
> 
> On Sun, Nov 01, 2015 at 09:36:21PM +0100, Remi Pommarel wrote:
> > @@ -57,7 +57,7 @@ endif
> >  
> >  # assume yes for these tests, configure will bail out otherwise
> >  # saying error: cannot run test program while cross compiling
> > -GIT_CONF_ENV = \
> > +GIT_CONF_ENV += \
> >  	ac_cv_fread_reads_directories=yes \
> >  	ac_cv_snprintf_returns_bogus=yes LIBS='$(GIT_CONF_ENV_LIBS)'
> 
> Please move this hunk to patch #3 in this series, which is where it logically 
> belongs.
> 

I removed the gettext part from v1 because it is not needed anymore with
the git patches. But this hunk escapes my attention.

Thanks.
Remi

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2015-11-02  8:11 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-11-01 20:36 [Buildroot] [PATCH v2 0/3] package/git: Fix static compilation Remi Pommarel
2015-11-01 20:36 ` [Buildroot] [PATCH v2 1/3] package/git: Add needed library for " Remi Pommarel
2015-11-02  4:25   ` Baruch Siach
2015-11-02  8:11     ` Remi Pommarel
2015-11-01 20:36 ` [Buildroot] [PATCH v2 2/3] package/git: Add git patch " Remi Pommarel
2015-11-01 20:36 ` [Buildroot] [PATCH v2 3/3] package/git: Used curl-config program for target Remi Pommarel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox