From patchwork Thu Mar 26 08:06:45 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff King X-Patchwork-Id: 11459547 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6902215AB for ; Thu, 26 Mar 2020 08:06:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 49A3720772 for ; Thu, 26 Mar 2020 08:06:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727636AbgCZIGq (ORCPT ); Thu, 26 Mar 2020 04:06:46 -0400 Received: from cloud.peff.net ([104.130.231.41]:51840 "HELO cloud.peff.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1726590AbgCZIGq (ORCPT ); Thu, 26 Mar 2020 04:06:46 -0400 Received: (qmail 647 invoked by uid 109); 26 Mar 2020 08:06:45 -0000 Received: from Unknown (HELO peff.net) (10.0.1.2) by cloud.peff.net (qpsmtpd/0.94) with SMTP; Thu, 26 Mar 2020 08:06:45 +0000 Authentication-Results: cloud.peff.net; auth=none Received: (qmail 12042 invoked by uid 111); 26 Mar 2020 08:16:39 -0000 Received: from coredump.intra.peff.net (HELO sigill.intra.peff.net) (10.0.0.2) by peff.net (qpsmtpd/0.94) with (TLS_AES_256_GCM_SHA384 encrypted) ESMTPS; Thu, 26 Mar 2020 04:16:39 -0400 Authentication-Results: peff.net; auth=none Date: Thu, 26 Mar 2020 04:06:45 -0400 From: Jeff King To: git@vger.kernel.org Subject: [PATCH 1/2] Makefile: avoid running curl-config multiple times Message-ID: <20200326080645.GA2200716@coredump.intra.peff.net> References: <20200326080540.GA2200522@coredump.intra.peff.net> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20200326080540.GA2200522@coredump.intra.peff.net> Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org If the user hasn't set the CURL_LDFLAGS Makefile variable, we invoke curl-config like this: CURL_LIBCURL += $(shell $(CURL_CONFIG) --libs) Because the shell function is run when the value is expanded, we invoke curl-config each time we need to link something (which generally ends up being four times for a full build). Instead, let's use an immediate Makefile variable, which only needs expanding once. We can't combine that with the existing "+=", but since we only do this when CURL_LDFLAGS is undefined, we can just set that variable. That also allows us to simplify our conditional a bit, since both sides will then put the result into CURL_LIBCURL. While we're touching it, let's fix the indentation to match the nearby code (we're inside an outer conditional, so everything else is indented one level). Signed-off-by: Jeff King --- Makefile | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index a5961113d8..93a8ef3a72 100644 --- a/Makefile +++ b/Makefile @@ -1365,11 +1365,10 @@ else CURL_LIBCURL = endif -ifdef CURL_LDFLAGS + ifndef CURL_LDFLAGS + CURL_LDFLAGS := $(shell $(CURL_CONFIG) --libs) + endif CURL_LIBCURL += $(CURL_LDFLAGS) -else - CURL_LIBCURL += $(shell $(CURL_CONFIG) --libs) -endif REMOTE_CURL_PRIMARY = git-remote-http$X REMOTE_CURL_ALIASES = git-remote-https$X git-remote-ftp$X git-remote-ftps$X From patchwork Thu Mar 26 08:08:55 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff King X-Patchwork-Id: 11459557 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B567717D4 for ; Thu, 26 Mar 2020 08:08:57 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 9F09020719 for ; Thu, 26 Mar 2020 08:08:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726590AbgCZII4 (ORCPT ); Thu, 26 Mar 2020 04:08:56 -0400 Received: from cloud.peff.net ([104.130.231.41]:51854 "HELO cloud.peff.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1726296AbgCZII4 (ORCPT ); Thu, 26 Mar 2020 04:08:56 -0400 Received: (qmail 1069 invoked by uid 109); 26 Mar 2020 08:08:56 -0000 Received: from Unknown (HELO peff.net) (10.0.1.2) by cloud.peff.net (qpsmtpd/0.94) with SMTP; Thu, 26 Mar 2020 08:08:56 +0000 Authentication-Results: cloud.peff.net; auth=none Received: (qmail 12077 invoked by uid 111); 26 Mar 2020 08:18:50 -0000 Received: from coredump.intra.peff.net (HELO sigill.intra.peff.net) (10.0.0.2) by peff.net (qpsmtpd/0.94) with (TLS_AES_256_GCM_SHA384 encrypted) ESMTPS; Thu, 26 Mar 2020 04:18:50 -0400 Authentication-Results: peff.net; auth=none Date: Thu, 26 Mar 2020 04:08:55 -0400 From: Jeff King To: git@vger.kernel.org Subject: [PATCH 2/2] Makefile: use curl-config --cflags Message-ID: <20200326080855.GB2200716@coredump.intra.peff.net> References: <20200326080540.GA2200522@coredump.intra.peff.net> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20200326080540.GA2200522@coredump.intra.peff.net> Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org We add the result of "curl-config --libs" when linking curl programs, but we never bother calling "curl-config --cflags". Presumably nobody noticed because: - a system libcurl installed into /usr/include/curl wouldn't need any flags ("/usr/include" is already in the search path, and the #include lines all look , etc). - using CURLDIR sets up both the includes and the library path However, if you prefer CURL_CONFIG to CURLDIR, something simple like: make CURL_CONFIG=/path/to/curl-config doesn't work. We'd link against the libcurl specified by that program, but not find its header files when compiling. Let's invoke "curl-config --cflags" similar to the way we do for "--libs". Note that we'll feed the result into BASIC_CFLAGS. The rest of the Makefile doesn't distinguish which files need curl support during compilation and which do not. That should be OK, though. At most this should be adding a "-I" directive, and this is how CURLDIR already behaves. And since we follow the immediate-variable pattern from CURL_LDFLAGS, we won't accidentally invoke curl-config once per compilation. Signed-off-by: Jeff King --- I didn't bother touching configure.ac here, because I don't think it would do anything useful. The existing configure script will run "curl-config --libs" to set CURL_LDFLAGS, suppressing the call to curl-config inside the Makefile. But with the caveat that you can convince it to pass something besides --libs (though what would be useful there, I have no idea, and the commit introducing it didn't shed any light). So following that pattern, at most we'd just be trading a call during configure time for one inside the Makefile. What _could_ be useful is if the configure script used curl-config as part of it's check of whether we have libcurl at all. But it doesn't. We don't even look for curl-config until we've been able to link against -lcurl. I have a feeling this could be fixed by reversing the order of the blocks, but I'm not sure of all of the subtle interactions with CURLDIR. And I don't care enough about autoconf to puzzle it out. We certainly aren't making anything worse with this patch. Makefile | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 93a8ef3a72..4550bf4a42 100644 --- a/Makefile +++ b/Makefile @@ -1359,9 +1359,10 @@ ifdef NO_CURL else ifdef CURLDIR # Try "-Wl,-rpath=$(CURLDIR)/$(lib)" in such a case. - BASIC_CFLAGS += -I$(CURLDIR)/include + CURL_CFLAGS = -I$(CURLDIR)/include CURL_LIBCURL = -L$(CURLDIR)/$(lib) $(CC_LD_DYNPATH)$(CURLDIR)/$(lib) else + CURL_CFLAGS = CURL_LIBCURL = endif @@ -1370,6 +1371,11 @@ else endif CURL_LIBCURL += $(CURL_LDFLAGS) + ifndef CURL_CFLAGS + CURL_CFLAGS := $(shell $(CURL_CONFIG) --cflags) + endif + BASIC_CFLAGS += $(CURL_CFLAGS) + REMOTE_CURL_PRIMARY = git-remote-http$X REMOTE_CURL_ALIASES = git-remote-https$X git-remote-ftp$X git-remote-ftps$X REMOTE_CURL_NAMES = $(REMOTE_CURL_PRIMARY) $(REMOTE_CURL_ALIASES)