Git 2.4.8基于kernel.org源代码构建,缺少HTTP/HTTPS帮助



这类似于git clone: fatal:无法为'https'找到远程助手。这和其他类似的问题有点不同。另一个类似的问题是在Ubuntu上,它有一个提供最新组件的包管理器。

这个设置基本上是一个废弃的操作系统。没有现有的Git,也没有可用的包管理器(如Yum、Apt-Get、Homebrew或Macports)。Git和cURL所需的一切都是从头开始构建并安装在/usr/local中,它包括:

    libz (Zlib库)libssl和libcrypto (OpenSSL库)
  • libidn (IDN library)
  • libiconv (iConvert library)
  • libpcre (PERL RE库)libcurl (cURL库)

我使用下面的cURL配方。cURL同时支持HTTP和HTTPS。cURL配置、构建、测试和安装都很好。

我对Git使用了下面的配方。Git配置和构建都很好。根据configure --help,我只需要调用cURL来获得HTTP和HTTPS支持:

$ ./configure --help | egrep -i "(http|openssl)"
  --with-openssl          use OpenSSL library (default is YES)
                          ARG can be prefix for openssl library and headers
  --with-curl             support http(s):// transports (default is YES)

但是,Git在尝试通过HTTP和HTTPS执行克隆时失败。我从零开始构建了两次,所以不管我做错了什么,我现在已经做了两次了。

为什么Git不能构建它需要的帮助程序?


Git配方

curl -k https://www.kernel.org/pub/software/scm/git/git-2.4.8.tar.gz -o git-2.4.8.tar.gz
tar zf git-2.4.8.tar.gz
cd git-2.4.8
make configure
sed -i "" 's|-lcrypto|/usr/local/lib/libcrypto.a|g' configure.ac configure Makefile
sed -i "" 's|-lssl|/usr/local/lib/libssl.a|g' configure.ac configure Makefile
sed -i "" 's|-lcurl|/usr/local/lib/libcurl.a|g' configure.ac configure Makefile
sed -i "" 's|-lpcre|/usr/local/lib/libpcre2-posix.a|g' configure.ac configure Makefile
./configure --with-openssl=/usr/local --with-libpcre=/usr/local --with-curl=/usr/local 
--with-zlib=/usr/local --with-iconv=/usr/local --prefix=/usr/local

旋度配方

curl -k http://curl.haxx.se/download/curl-7.44.0.tar.gz -o curl-7.44.0.tar.gz
tar zf curl-7.44.0.tar.gz
cd curl-7.44.0
sed -i "" 's|-lidn|/usr/local/lib/libidn.a|g' configure.ac configure lib/Makefile.m32 src/Makefile.m32
./configure --enable-optimize --disable-ldap --disable-ldaps --disable-rtsp --disable-dict 
--disable-ntlm-wb --disable-tls-srp --enable-http --enable-file --enable-proxy 
--enable-telnet --enable-tftp --enable-pop3 --enable-imap --enable-ftp --enable-smb 
--enable-smtp --enable-gopher --enable-manual --enable-ipv6 --enable-unix-sockets 
--enable-cookies --without-darwinssl --without-libssh2 --without-winidn --with-gnu-ld 
--with-libidn=/usr/local --with-glib=/usr/local --with-ssl=/usr/local 
--with-ca-path=/usr/share/curl --prefix=/usr/local

对食谱中sed的调用确保我使用静态链接。它在OS X上是必需的,因为苹果总是使用*.dylibs,如果它们可用的话(即使有-Bstatic这样的选项)。更糟糕的是,这是一台在PowerPC上运行OS X 10.5的老式PowerMac。它用于在处理器上测试软件。

为什么Git不能构建它需要的帮助程序?

似乎至少有两个问题。首先,Git的配置不会报告错误。相反,它会默默地吞下它们。它也无声地吞下了PCRE库的错误。

第二,cURL架构-arch ppc被更改为-arch ppc7400。所以这8个左右的依赖库是这样的:

$ file /usr/local/lib/libcrypto.a
/usr/local/lib/libcrypto.a: Mach-O universal binary with 2 architectures
/usr/local/lib/libcrypto.a (for architecture ppc):    current ar
archive random library
/usr/local/lib/libcrypto.a (for architecture ppc64):    current ar
archive random library

但是cURL看起来像:

$ file /usr/local/lib/libcurl.a
/usr/local/lib/libcurl.a: Mach-O universal binary with 2 architectures
/usr/local/lib/libcurl.a (for architecture ppc7400):    current ar
archive random library
/usr/local/lib/libcurl.a (for architecture ppc64):    current ar
archive random library

我验证了它不是我的设置:

export CFLAGS="-arch ppc"
./configure ...
make

:

$ find . -name libcurl.a
./lib/.libs/libcurl.a
$ lipo -info ./lib/.libs/libcurl.a
...
Non-fat file: ./lib/.libs/libcurl.a is architecture: ppc7400

export LDFLAGS="-arch ppc"对这个问题没有影响。

有一个相关的,后续的问题是跟踪从-arch ppc-arch ppc7400的变化原因的行为?

最新更新