Skip to content

Commit

Permalink
Use a common build script for both CURL and LibCURL (#4472)
Browse files Browse the repository at this point in the history
* Use a common build script for both CURL and LibCURL

Co-authored-by: Eric Hanson <5846501+ericphanson@users.noreply.github.com>

Co-authored-by: Mosè Giordano <giordano@users.noreply.github.com>

* Install only curl in CURL_jll, and remove curl from LibCURL_jll

* Delete build_tarballs.jl

Co-authored-by: Mosè Giordano <giordano@users.noreply.github.com>
  • Loading branch information
DilumAluthge and giordano authored Feb 24, 2022
1 parent 2fa71a4 commit 7cfae68
Show file tree
Hide file tree
Showing 3 changed files with 114 additions and 83 deletions.
3 changes: 3 additions & 0 deletions L/LibCURL/CURL/build_tarballs.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
include("../common.jl")

build_libcurl(ARGS, "CURL")
83 changes: 0 additions & 83 deletions L/LibCURL/build_tarballs.jl

This file was deleted.

111 changes: 111 additions & 0 deletions L/LibCURL/common.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
# Note that this script can accept some limited command-line arguments, run
# `julia build_tarballs.jl --help` to see a usage message.
using BinaryBuilder, Pkg

function build_libcurl(ARGS, name::String)
version = v"7.81.0"
hash = "ac8e1087711084548d788ef18b9b732c8de887457b81f616fc681d1044b32f98"

if name == "CURL"
this_is_curl_jll = true
elseif name == "LibCURL"
this_is_curl_jll = false
else
msg = "Not a valid name: $(name). Valid names are: LibCURL, CURL"
throw(ArgumentError(msg))
end

# Collection of sources required to build LibCURL
sources = [
ArchiveSource("https://curl.se/download/curl-$(version).tar.gz", hash),
]

# Bash recipe for building across all platforms
script = "THIS_IS_CURL=$(this_is_curl_jll)\n" * raw"""
cd $WORKSPACE/srcdir/curl-*
# Holy crow we really configure the bitlets out of this thing
FLAGS=(
# Disable....almost everything
--without-ssl --without-gnutls --without-gssapi
--without-libidn --without-libidn2 --without-librtmp
--without-nss --without-polarssl
--without-spnego --without-libpsl --disable-ares --disable-manual
--disable-ldap --disable-ldaps --without-zsh-functions-dir
--disable-static --without-libgsasl
# A few things we actually enable
--with-libssh2=${prefix} --with-zlib=${prefix} --with-nghttp2=${prefix}
--enable-versioned-symbols
)
if [[ ${target} == *mingw* ]]; then
# We need to tell it where to find libssh2 on windows
FLAGS+=(LDFLAGS="${LDFLAGS} -L${prefix}/bin")
# We also need to tell it to link against schannel (native TLS library)
FLAGS+=(--with-schannel)
elif [[ ${target} == *darwin* ]]; then
# On Darwin, we need to use SecureTransport (native TLS library)
FLAGS+=(--with-secure-transport)
# We need to explicitly request a higher `-mmacosx-version-min` here, so that it doesn't
# complain about: `Symbol not found: ___isOSVersionAtLeast`
if [[ "${target}" == *x86_64* ]]; then
export CFLAGS=-mmacosx-version-min=10.11
fi
else
# On all other systems, we use MbedTLS
FLAGS+=(--with-mbedtls=${prefix})
fi
./configure --prefix=$prefix --host=$target --build=${MACHTYPE} "${FLAGS[@]}"
make -j${nproc}
if [[ "${THIS_IS_CURL}" == true ]]; then
# Manually install only `curl`
install -Dm 755 "src/.libs/curl${exeext}" "${bindir}/curl${exeext}"
else
# Install everything...
make install
# ...but remove `curl`
rm "${bindir}/curl${exeext}"
fi
install_license COPYING
"""

# These are the platforms we will build for by default, unless further
# platforms are passed in on the command line
platforms = supported_platforms()

# The products that we will ensure are always built
if this_is_curl_jll
# CURL_jll only provides the executable
products = [
ExecutableProduct("curl", :curl),
]
else
# LibCURL only provides the library
products = [
LibraryProduct("libcurl", :libcurl),
]
end

# Dependencies that must be installed before this package can be built
dependencies = [
Dependency("LibSSH2_jll"),
Dependency("Zlib_jll"),
Dependency("nghttp2_jll"),
# Note that while we unconditionally list MbedTLS as a dependency,
# we default to schannel/SecureTransport on Windows/MacOS.
Dependency("MbedTLS_jll"; compat="~2.28.0", platforms=filter(p->Sys.islinux(p) || Sys.isfreebsd(p), platforms)),
]

if this_is_curl_jll
# Curl_jll depends on LibCURL_jll
push!(dependencies, Dependency("LibCURL_jll"; compat="$(version)"))
end

# Build the tarballs, and possibly a `build.jl` as well.
build_tarballs(ARGS, name, version, sources, script, platforms, products, dependencies; julia_compat="1.8")
end

0 comments on commit 7cfae68

Please sign in to comment.