Git 2.4.8 从 kernel.org 来源构建,缺少 HTTP/HTTPS 助手

Git 2.4.8 built from kernel.org sources and missing HTTP/HTTPS helpers

这类似于。这与其他类似问题略有不同。另一个类似的问题是关于 Ubuntu 并且有一个包管理器提供了最新的组件。

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

我正在使用下面的 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 食谱

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 上是必需的,因为 Apple 总是使用 *.dylibs 如果它们可用(即使有像 -Bstatic 这样的选项)。更糟糕的是,这是 PowerPC 上的旧 PowerMac 运行 OS X 10.5。它用于在处理器上测试软件。

Why is Git failing to build the helpers it needs?

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

其次,cURL 架构 -arch ppc 正在更改为 -arch ppc7400。所以八个左右的依赖库看起来像:

$ 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" 对问题没有影响。

有一个相关的后续问题正在追踪

处的行为