autoconf: Fixes and improvements (was: What's in git.git)
cover autoconf: Fixes and improvements (was: What's in git.git)
Quoted 10 lines · Junio C Hamano
(1) configure misdetects
NO_OPENSSL. The relevant parts are:checking for
SHA1_Initin -lssl... no
checking forSHA1_INITin -lcrypto... nobut I've been building git on Cygwin without
NO_OPENSSL(eh, that's double negation -- what I mean is I've been building git with -lssl just fine). I think the function to check in -lcrypto should beSHA1_Init, notSHA1_INIT(trivial patch attached at the end).
Should be corrected by patches 1 and 3 by Junio C Hamano. I had just not understood meaning of NEEDS_SSL_WITH_CRYPTO variable.
Quoted 2 lines
(2)
NO_STRLCPYis detected to be available by configure. I think we should update the default inMakefile.
Not adressed.
Quoted 8 lines
(3)
NEEDS_LIBICONVis found to be unnecessary by configure, but the link fails like this without it:builtin-mailinfo.o: In function `convert_to_utf8':
/git/builtin-mailinfo.c:539: undefined reference to_libiconv_open' /git/builtin-mailinfo.c:560: undefined reference to_libiconv' /git/builtin-mailinfo.c:561: undefined reference to `_libiconv_close' collect2: ld returned 1 exit status
Check if patch 2 corrects this error. Patch 5 does the same as patch 2 for NEEDS_SOCKET due to cleanup during making this change.
Quoted 6 lines
(4)
NO_IPV6is not detected yet -- you should be able to detect this by checking for "struct addrinfo". The compilation fails like this on Cygwin:
connect.c: In function `git_tcp_connect_sock':
connect.c:361: error: storage size of 'hints' isn't known
Patch 4 adresses this. Perhas one of the checks can be dropped (leaving easier or faster one).
Quoted 7 lines
(Z) When configure detects some
NO_XXXis unneeded, currently there is no way for generated config.mak.autogen to override the default set inMakefile. For example,NO_STRLCPYis set byMakefile, and the included config.mak.autogen does not say anything about it even though it knows strlcpy is usable. It might be better to explicitly undef unneededNO_XXXin config.mak.autogen?
Patch 5 tries to address this. Additionally it can be easily seen what was detested... but it is somewhat harder to see which variables are set among unset ones.
Signature · 2 lines
Jakub Narebski Poland
PATCH 1/5 autoconf: typofix to detect SHA1_Init in -lcrypto
Quoted 1 line
From
15951e524df655d12b2bc42b1cf0a4be39fc3278Mon Sep 17 00:00:00 2001
From: Junio C Hamano <[email protected]>
Date: Fri, 4 Aug 2006 22:17:35 +0200
Subject: [PATCH 1/5] autoconf: typofix to detect SHA1_Init in -lcrypto
--- configure.ac | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
configure.ac +0 -0
@@ -155,7 +155,7 @@ # # Define NO_OPENSSL environment variable if you do not have OpenSSL. # Define NEEDS_SSL_WITH_CRYPTO if you need -lcrypto with -lssl
(Darwin).
AC_CHECK_LIB([ssl], [SHA1_Init],[],
-[AC_CHECK_LIB([crypto], [SHA1_INIT], +[AC_CHECK_LIB([crypto], [SHA1_Init],
[GIT_CONF_APPEND_LINE(NEEDS_SSL_WITH_CRYPTO=YesPlease)], [GIT_CONF_APPEND_LINE(NO_OPENSSL=YesPlease)])])
#
Signature · 1 line
1.4.1.1
PATCH 2/5 autoconf: Set NEEDS_LIBICONV unconditionally if there is no iconv in libc
In reply to Jakub Narebski--- configure.ac | 3 +-- 1 files changed, 1 insertions(+), 2 deletions(-)
configure.ac +1 -2
@@ -172,8 +172,7 @@ AC_CHECK_LIB([expat], [XML_ParserCreate] # # Define NEEDS_LIBICONV if linking with libc is not enough (Darwin). AC_CHECK_LIB([c], [iconv],[], -[AC_CHECK_LIB([iconv],[iconv], - [GIT_CONF_APPEND_LINE(NEEDS_LIBICONV=YesPlease)],[])]) +[GIT_CONF_APPEND_LINE(NEEDS_LIBICONV=YesPlease)]) # # Define NEEDS_SOCKET if linking with libc is not enough (SunOS, # Patrick Mauritz).
Signature · 1 line
1.4.1.1
PATCH 3/5 autoconf: Fix NEEDS_SSL_WITH_CRYPTO detection
In reply to Jakub NarebskiQuoted 1 line
From
7829f2f76c429594602d845168841d378d269fbaMon Sep 17 00:00:00 2001
From: Junio C Hamano <[email protected]>
Date: Fri, 4 Aug 2006 13:06:33 -0700
Subject: [PATCH 3/5] autoconf: Fix NEEDS_SSL_WITH_CRYPTO detection
NEEDS_SSL_WITH_CRYPTO means you cannot just say "-lcrypto" to use SHA1 stuff, but need to say "-lcrypto -lssl", so the test should say "if we can get away with -lcrypto, we are happy, otherwise if we need -lssl, then say NEEDS_SSL_WITH_CRYPTO, otherwise we cannot use OpenSSL so say NO_OPENSSL", or something like that.
--- configure.ac | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
configure.ac +2 -2
@@ -154,8 +154,8 @@ AC_MSG_NOTICE([CHECKS for libraries]) # # Define NO_OPENSSL environment variable if you do not have OpenSSL. # Define NEEDS_SSL_WITH_CRYPTO if you need -lcrypto with -lssl (Darwin). -AC_CHECK_LIB([ssl], [SHA1_Init],[], -[AC_CHECK_LIB([crypto], [SHA1_Init], +AC_CHECK_LIB([crypto], [SHA1_Init],[], +[AC_CHECK_LIB([ssl], [SHA1_Init], [GIT_CONF_APPEND_LINE(NEEDS_SSL_WITH_CRYPTO=YesPlease)], [GIT_CONF_APPEND_LINE(NO_OPENSSL=YesPlease)])]) #
Signature · 1 line
1.4.1.1
PATCH 4/5 autoconf: Double check for IPv6 support
In reply to Jakub NarebskiCheck for IPv6 support, first by checking if "struct addrinfo" exists, then by checking if there is getaddrinfo() in standard libraries.
--- configure.ac | 13 +++++++++++-- 1 files changed, 11 insertions(+), 2 deletions(-)
configure.ac +11 -2
@@ -204,6 +204,13 @@ AC_CHECK_TYPE(struct sockaddr_storage,[] [GIT_CONF_APPEND_LINE(NO_SOCKADDR_STORAGE=YesPlease)], [#include <netinet/in.h>]) # +# Define NO_IPV6 if you lack IPv6 support and getaddrinfo(). +AC_CHECK_TYPE(struct addrinfo,[], +[GIT_CONF_APPEND_LINE(NO_IPV6=YesPlease)], +[#include <sys/types.h> +#include <sys/socket.h> +#include <netdb.h>]) +# # Define NO_C99_FORMAT if your formatted IO functions (printf/scanf et.al.) # do not support the 'size specifiers' introduced by C99, namely ll, hh, # j, z, t. (representing long long int, char, intmax_t, size_t, ptrdiff_t).
@@ -242,14 +249,16 @@ # Define NO_SETENV if you don't have set AC_CHECK_FUNC(setenv,[], [GIT_CONF_APPEND_LINE(NO_SETENV=YesPlease)]) # +# Define NO_IPV6 if you lack IPv6 support and getaddrinfo(). +AC_CHECK_FUNC(getaddrinfo,[], +[GIT_CONF_APPEND_LINE(NO_IPV6=YesPlease)]) +# # Define NO_MMAP if you want to avoid mmap. AC_FUNC_MMAP if test $ac_cv_func_mmap_fixed_mapped != yes; then GIT_CONF_APPEND_LINE(NO_MMAP=YesPlease) fi # -# Define NO_IPV6 if you lack IPv6 support and getaddrinfo(). -# # Define NO_ICONV if your libc does not properly support iconv.
Signature · 1 line
1.4.1.1
PATCH 5/5 autoconf: Unset NO_STH and NEED_STH when it is detected not needed
In reply to Jakub NarebskiWhen configure detects some NO_XXX or NEEDS_XXX is unneeded, unset this variable (actually set it to empty string). This allow autodetection to override the default set in Makefile.
--- configure.ac | 49 +++++++++++++++++++++++++++++++++---------------- 1 files changed, 33 insertions(+), 16 deletions(-)
configure.ac +33 -16
@@ -154,31 +154,36 @@ AC_MSG_NOTICE([CHECKS for libraries]) # # Define NO_OPENSSL environment variable if you do not have OpenSSL. # Define NEEDS_SSL_WITH_CRYPTO if you need -lcrypto with -lssl (Darwin). -AC_CHECK_LIB([crypto], [SHA1_Init],[], +AC_CHECK_LIB([crypto], [SHA1_Init], +[GIT_CONF_APPEND_LINE(NEEDS_SSL_WITH_CRYPTO=)], [AC_CHECK_LIB([ssl], [SHA1_Init], - [GIT_CONF_APPEND_LINE(NEEDS_SSL_WITH_CRYPTO=YesPlease)], + [GIT_CONF_APPEND_LINE(NEEDS_SSL_WITH_CRYPTO=YesPlease) + GIT_CONF_APPEND_LINE(NEEDS_SSL_WITH_CRYPTO=)], [GIT_CONF_APPEND_LINE(NO_OPENSSL=YesPlease)])]) # # Define NO_CURL if you do not have curl installed. git-http-pull and # git-http-push are not built, and you cannot use http:// and https:// # transports. -AC_CHECK_LIB([curl], [curl_global_init],[], +AC_CHECK_LIB([curl], [curl_global_init], +[GIT_CONF_APPEND_LINE(NO_CURL=)], [GIT_CONF_APPEND_LINE(NO_CURL=YesPlease)]) # # 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. -AC_CHECK_LIB([expat], [XML_ParserCreate],[], +AC_CHECK_LIB([expat], [XML_ParserCreate], +[GIT_CONF_APPEND_LINE(NO_EXPAT=)], [GIT_CONF_APPEND_LINE(NO_EXPAT=YesPlease)]) # # Define NEEDS_LIBICONV if linking with libc is not enough (Darwin). -AC_CHECK_LIB([c], [iconv],[], +AC_CHECK_LIB([c], [iconv], +[GIT_CONF_APPEND_LINE(NEEDS_LIBICONV=)], [GIT_CONF_APPEND_LINE(NEEDS_LIBICONV=YesPlease)]) # # Define NEEDS_SOCKET if linking with libc is not enough (SunOS, # Patrick Mauritz). -AC_CHECK_LIB([c], [socket],[], -[AC_CHECK_LIB([socket],[socket], - [GIT_CONF_APPEND_LINE(NEEDS_SOCKET=YesPlease)],[])]) +AC_CHECK_LIB([c], [socket], +[GIT_CONF_APPEND_LINE(NEEDS_SOCKET=)], +[GIT_CONF_APPEND_LINE(NEEDS_SOCKET=YesPlease)]) ## Checks for header files.
@@ -188,24 +193,28 @@ ## Checks for typedefs, structures, and AC_MSG_NOTICE([CHECKS for typedefs, structures, and compiler characteristics]) # # Define NO_D_INO_IN_DIRENT if you don't have d_ino in your struct dirent. -AC_CHECK_MEMBER(struct dirent.d_ino,[], +AC_CHECK_MEMBER(struct dirent.d_ino, +[GIT_CONF_APPEND_LINE(NO_D_INO_IN_DIRENT=)], [GIT_CONF_APPEND_LINE(NO_D_INO_IN_DIRENT=YesPlease)], [#include <dirent.h>]) # # 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,[], +AC_CHECK_MEMBER(struct dirent.d_type, +[GIT_CONF_APPEND_LINE(NO_D_TYPE_IN_DIRENT=)], [GIT_CONF_APPEND_LINE(NO_D_TYPE_IN_DIRENT=YesPlease)], [#include <dirent.h>]) # # Define NO_SOCKADDR_STORAGE if your platform does not have struct # sockaddr_storage. -AC_CHECK_TYPE(struct sockaddr_storage,[], +AC_CHECK_TYPE(struct sockaddr_storage, +[GIT_CONF_APPEND_LINE(NO_SOCKADDR_STORAGE=)], [GIT_CONF_APPEND_LINE(NO_SOCKADDR_STORAGE=YesPlease)], [#include <netinet/in.h>]) # # Define NO_IPV6 if you lack IPv6 support and getaddrinfo(). -AC_CHECK_TYPE(struct addrinfo,[], +AC_CHECK_TYPE(struct addrinfo, +[GIT_CONF_APPEND_LINE(NO_IPV6=)], [GIT_CONF_APPEND_LINE(NO_IPV6=YesPlease)], [#include <sys/types.h> #include <sys/socket.h>
@@ -230,6 +239,8 @@ AC_RUN_IFELSE( ]) if test $ac_cv_c_c99_format = no; then GIT_CONF_APPEND_LINE(NO_C99_FORMAT=YesPlease) +else + GIT_CONF_APPEND_LINE(NO_C99_FORMAT=) fi
@@ -238,25 +249,31 @@ ## (in default C library and libraries c AC_MSG_NOTICE([CHECKS for library functions]) # # Define NO_STRCASESTR if you don't have strcasestr. -AC_CHECK_FUNC(strcasestr,[], +AC_CHECK_FUNC(strcasestr, +[GIT_CONF_APPEND_LINE(NO_STRCASESTR=)], [GIT_CONF_APPEND_LINE(NO_STRCASESTR=YesPlease)]) # # Define NO_STRLCPY if you don't have strlcpy. -AC_CHECK_FUNC(strlcpy,[], +AC_CHECK_FUNC(strlcpy, +[GIT_CONF_APPEND_LINE(NO_STRLCPY=)], [GIT_CONF_APPEND_LINE(NO_STRLCPY=YesPlease)]) # # Define NO_SETENV if you don't have setenv in the C library. -AC_CHECK_FUNC(setenv,[], +AC_CHECK_FUNC(setenv, +[GIT_CONF_APPEND_LINE(NO_SETENV=)], [GIT_CONF_APPEND_LINE(NO_SETENV=YesPlease)]) # # Define NO_IPV6 if you lack IPv6 support and getaddrinfo(). -AC_CHECK_FUNC(getaddrinfo,[], +AC_CHECK_FUNC(getaddrinfo, +[GIT_CONF_APPEND_LINE(NO_IPV6=)], [GIT_CONF_APPEND_LINE(NO_IPV6=YesPlease)]) # # Define NO_MMAP if you want to avoid mmap. AC_FUNC_MMAP if test $ac_cv_func_mmap_fixed_mapped != yes; then GIT_CONF_APPEND_LINE(NO_MMAP=YesPlease) +else + GIT_CONF_APPEND_LINE(NO_MMAP=) fi # # Define NO_ICONV if your libc does not properly support iconv.
Signature · 1 line
1.4.1.1