Skip to content

Commit 34cdb18

Browse files
authored
Merge pull request #70 from stunnel/feature/trurl
compile trurl
2 parents f4f7d3b + 753cd3f commit 34cdb18

File tree

6 files changed

+152
-23
lines changed

6 files changed

+152
-23
lines changed

.github/workflows/release.yaml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ jobs:
3131
ZSTD_VERSION: ${{ vars.ZSTD_VERSION }}
3232
LIBSSH2_VERSION: ${{ vars.LIBSSH2_VERSION }}
3333
ARES_VERSION: ${{ vars.ARES_VERSION }}
34+
ENABLE_TRURL: ${{ vars.ENABLE_TRURL }}
35+
TRURL_VERSION: ${{ vars.TRURL_VERSION }}
3436
LIBC: glibc
3537
STATIC_LIBRARY: 1
3638
CONTAINER_IMAGE: debian:latest
@@ -52,6 +54,8 @@ jobs:
5254
ZSTD_VERSION=${ZSTD_VERSION}
5355
LIBSSH2_VERSION=${LIBSSH2_VERSION}
5456
ARES_VERSION=${ARES_VERSION}
57+
ENABLE_TRURL=${ENABLE_TRURL}
58+
TRURL_VERSION=${TRURL_VERSION}
5559
LIBC=${LIBC}
5660
STATIC_LIBRARY=${STATIC_LIBRARY}
5761
CONTAINER_IMAGE=${CONTAINER_IMAGE}
@@ -107,6 +111,8 @@ jobs:
107111
ZSTD_VERSION: ${{ vars.ZSTD_VERSION }}
108112
LIBSSH2_VERSION: ${{ vars.LIBSSH2_VERSION }}
109113
ARES_VERSION: ${{ vars.ARES_VERSION }}
114+
ENABLE_TRURL: ${{ vars.ENABLE_TRURL }}
115+
TRURL_VERSION: ${{ vars.TRURL_VERSION }}
110116
LIBC: musl
111117
CONTAINER_IMAGE: debian:latest
112118
TOKEN_READ: ${{ secrets.GITHUB_TOKEN }}
@@ -127,6 +133,8 @@ jobs:
127133
ZSTD_VERSION=${ZSTD_VERSION}
128134
LIBSSH2_VERSION=${LIBSSH2_VERSION}
129135
ARES_VERSION=${ARES_VERSION}
136+
ENABLE_TRURL=${ENABLE_TRURL}
137+
TRURL_VERSION=${TRURL_VERSION}
130138
LIBC=${LIBC}
131139
CONTAINER_IMAGE=${CONTAINER_IMAGE}
132140
TOKEN_READ=${TOKEN_READ}
@@ -181,6 +189,8 @@ jobs:
181189
ZSTD_VERSION: ${{ vars.ZSTD_VERSION }}
182190
LIBSSH2_VERSION: ${{ vars.LIBSSH2_VERSION }}
183191
ARES_VERSION: ${{ vars.ARES_VERSION }}
192+
ENABLE_TRURL: ${{ vars.ENABLE_TRURL }}
193+
TRURL_VERSION: ${{ vars.TRURL_VERSION }}
184194
CONTAINER_IMAGE: mstorsjo/llvm-mingw:latest
185195
TOKEN_READ: ${{ secrets.GITHUB_TOKEN }}
186196
ARCHES: "x86_64 aarch64 armv7 i686"
@@ -200,6 +210,8 @@ jobs:
200210
ZSTD_VERSION=${ZSTD_VERSION}
201211
LIBSSH2_VERSION=${LIBSSH2_VERSION}
202212
ARES_VERSION=${ARES_VERSION}
213+
ENABLE_TRURL=${ENABLE_TRURL}
214+
TRURL_VERSION=${TRURL_VERSION}
203215
CONTAINER_IMAGE=${CONTAINER_IMAGE}
204216
TOKEN_READ=${TOKEN_READ}
205217
sh curl-static-win.sh

README.md

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ Simply execute it to compile the most recent version.
1919
- [libidn2](https://github.com/libidn/libidn2)
2020
- [c-ares](https://c-ares.haxx.se)
2121
- [libpsl](https://rockdaboot.github.io/libpsl/)
22+
- [trurl](https://curl.se/trurl/)
2223

2324
`curl -V`
2425
- Protocols: dict file ftp ftps gopher gophers http https imap imaps mqtt pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp ws wss
@@ -36,6 +37,7 @@ The binary is built with GitHub Actions.
3637
- `curl-linux-ARCH-dev-VERSION`: binaries, headers and static library archives for Linux, for development
3738
- `curl-linux-ARCH-musl-VERSION`: binaries for Linux, linked with `musl`
3839
- `curl-macOS-ARCH-VERSION`: binaries for macOS
40+
- `curl-macOS-ARCH-dev-VERSION`: binaries, headers and static library archives for macOS, for development
3941
- `curl-windows-ARCH-VERSION`: binaries for Windows
4042
- `curl-windows-ARCH-dev-VERSION`: binaries, headers and library archives for Windows, for development
4143

@@ -90,6 +92,8 @@ script will create a container and compile the host architecture cURL only.
9092
-e LIBIDN2_VERSION="" \
9193
-e LIBPSL_VERSION="" \
9294
-e ARES_VERSION="" \
95+
-e ENABLE_TRURL="true" \
96+
-e TRURL_VERSION="" \
9397
debian:latest sh curl-static-cross.sh
9498
```
9599

@@ -140,6 +144,8 @@ ARCHES="x86_64 arm64" \
140144
-e LIBIDN2_VERSION="" \
141145
-e LIBPSL_VERSION="" \
142146
-e ARES_VERSION="" \
147+
-e ENABLE_TRURL="true" \
148+
-e TRURL_VERSION="" \
143149
mstorsjo/llvm-mingw:latest sh curl-static-win.sh
144150
```
145151

@@ -164,10 +170,8 @@ For all `VERSION` variables, leaving them blank will automatically fetch the lat
164170
- `BROTLI_VERSION`: The version of brotli.
165171
- `ZSTD_VERSION`: The version of zstd.
166172
- `ARES_VERSION`: The version of c-ares.
173+
- `TRURL_VERSION`: The version of trurl.
174+
- `ENABLE_TRURL`: Compile trurl. Default is `false`, set to `true` or `yes` to enable it. NOT available for macOS.
167175
- `ENABLE_DEBUG`: Enable curl debug. Default is `false`, set to `true` or `yes` to enable it.
168176

169177
The compiled files will be saved in the current `release` directory.
170-
171-
## Why build cURL on my own?
172-
173-
Because I need to test HTTP3, but currently there is no Linux distribution's cURL that supports HTTP3.

curl-static-cross.sh

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
# -e BROTLI_VERSION="" \
2828
# -e ZSTD_VERSION="" \
2929
# -e LIBSSH2_VERSION="" \
30+
# -e ENABLE_TRURL="" \
31+
# -e TRURL_VERSION="" \
3032
# -e LIBC="" \
3133
# -e STATIC_LIBRARY=1 \
3234
# -e CONTAINER_IMAGE=debian:latest \
@@ -66,6 +68,7 @@ init_env() {
6668
echo "zstd version: ${ZSTD_VERSION}"
6769
echo "libssh2 version: ${LIBSSH2_VERSION}"
6870
echo "c-ares version: ${ARES_VERSION}"
71+
echo "trurl version: ${TRURL_VERSION}"
6972

7073
export PKG_CONFIG_PATH="${PREFIX}/lib/pkgconfig:${PREFIX}/lib64/pkgconfig";
7174

@@ -669,8 +672,32 @@ compile_zstd() {
669672
-DZSTD_BUILD_STATIC=ON -DZSTD_BUILD_SHARED=OFF ..;
670673
cmake --build . --config Release --target install;
671674

672-
if [ ! -f "${PREFIX}/lib/libzstd.a" ]; then cp -f lib/libzstd.a "${PREFIX}/lib/libzstd.a"; fi
673675
_copy_license ../../../LICENSE zstd
676+
if [ ! -f "${PREFIX}/lib/libzstd.a" ]; then cp -f lib/libzstd.a "${PREFIX}/lib/libzstd.a"; fi
677+
}
678+
679+
compile_trurl() {
680+
case "${ENABLE_TRURL}" in
681+
true|1|yes|on|y|Y)
682+
echo ;;
683+
*)
684+
return ;;
685+
esac
686+
687+
echo "Compiling trurl, Arch: ${ARCH}" | tee "${RELEASE_DIR}/running"
688+
local url
689+
change_dir;
690+
691+
url_from_github curl/trurl "${TRURL_VERSION}"
692+
url="${URL}"
693+
download_and_extract "${url}"
694+
695+
export PATH=${PREFIX}/bin:$PATH
696+
697+
LDFLAGS="-static -Wl,-s ${LDFLAGS}" make PREFIX="${PREFIX}";
698+
make install;
699+
700+
_copy_license LICENSES/curl.txt trurl;
674701
}
675702

676703
curl_config() {
@@ -753,17 +780,21 @@ compile_curl() {
753780
install_curl() {
754781
mkdir -p "${RELEASE_DIR}/release/bin/"
755782

756-
ls -l src/curl
757-
cp -pf src/curl "${RELEASE_DIR}/release/bin/curl-linux-${ARCH}${libc_flag}"
783+
ls -l "${PREFIX}/bin/curl";
784+
cp -pf "${PREFIX}/bin/curl" "${RELEASE_DIR}/release/bin/curl-linux-${ARCH}${libc_flag}";
785+
if [ -f "${PREFIX}/bin/trurl" ]; then
786+
ls -l "${PREFIX}/bin/trurl";
787+
cp -pf "${PREFIX}/bin/trurl" "${RELEASE_DIR}/release/bin/trurl-linux-${ARCH}${libc_flag}";
788+
fi
758789

759790
if [ ! -f "${RELEASE_DIR}/release/version.txt" ]; then
760791
echo "${CURL_VERSION}" > "${RELEASE_DIR}/release/version.txt"
761792
fi
762793
if [ ! -f "${RELEASE_DIR}/release/version-info.txt" ]; then
763-
src/curl -V >> "${RELEASE_DIR}/release/version-info.txt"
794+
"${PREFIX}"/bin/curl -V >> "${RELEASE_DIR}/release/version-info.txt"
764795
fi
765796

766-
if [ -z "${STATIC_LIBRARY}" ]; then
797+
if [ -n "${STATIC_LIBRARY}" ]; then
767798
XZ_OPT=-9 tar -Jcf "${RELEASE_DIR}/release/curl-linux-${ARCH}-dev-${CURL_VERSION}.tar.xz" -C "${DIR}" "curl-${ARCH}"
768799
fi
769800
}
@@ -833,6 +864,8 @@ _build_in_docker() {
833864
-e LIBSSH2_VERSION="${LIBSSH2_VERSION}" \
834865
-e LIBUNISTRING_VERSION="${LIBUNISTRING_VERSION}" \
835866
-e LIBIDN2_VERSION="${LIBIDN2_VERSION}" \
867+
-e ENABLE_TRURL="${ENABLE_TRURL}" \
868+
-e TRURL_VERSION="${TRURL_VERSION}" \
836869
-e LIBC="${LIBC}" \
837870
-e STATIC_LIBRARY="${STATIC_LIBRARY}" \
838871
"${container_image}" sh "${RELEASE_DIR}/${base_name}" 2>&1 | tee -a "${container_name}.log"
@@ -858,6 +891,7 @@ compile() {
858891
compile_nghttp2;
859892
compile_brotli;
860893
compile_curl;
894+
compile_trurl;
861895

862896
install_curl;
863897
}

curl-static-mac.sh

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,12 @@ change_dir() {
243243
cd "${DIR}";
244244
}
245245

246+
_copy_license() {
247+
# $1: original file name; $2: target file name
248+
mkdir -p "${PREFIX}/licenses/";
249+
cp -p "${1}" "${PREFIX}/licenses/${2}";
250+
}
251+
246252
compile_zlib() {
247253
echo "Compiling zlib, Arch: ${ARCH}" | tee "${RELEASE_DIR}/running"
248254
local url
@@ -255,6 +261,8 @@ compile_zlib() {
255261
./configure --prefix="${PREFIX}" --static;
256262
make -j "${CPU_CORES}";
257263
make install;
264+
265+
_copy_license LICENSE zlib;
258266
}
259267

260268
compile_libunistring() {
@@ -269,6 +277,8 @@ compile_libunistring() {
269277
./configure --host="${TARGET}" --prefix="${PREFIX}" --disable-rpath --disable-shared;
270278
make -j "${CPU_CORES}";
271279
make install;
280+
281+
_copy_license COPYING libunistring;
272282
}
273283

274284
compile_libidn2() {
@@ -288,6 +298,8 @@ compile_libidn2() {
288298
--disable-shared;
289299
make -j "${CPU_CORES}";
290300
make install;
301+
302+
_copy_license COPYING libidn2;
291303
}
292304

293305
compile_libpsl() {
@@ -305,6 +317,8 @@ compile_libpsl() {
305317
--enable-static --enable-shared=no --enable-builtin --disable-runtime;
306318
make -j "${CPU_CORES}";
307319
make install;
320+
321+
_copy_license LICENSE libpsl;
308322
}
309323

310324
compile_ares() {
@@ -319,6 +333,8 @@ compile_ares() {
319333
./configure --host="${TARGET}" --prefix="${PREFIX}" --enable-static --disable-shared;
320334
make -j "$(nproc)";
321335
make install;
336+
337+
_copy_license LICENSE.md c-ares;
322338
}
323339

324340
compile_tls() {
@@ -349,6 +365,8 @@ compile_tls() {
349365

350366
make -j "${CPU_CORES}";
351367
make install_sw;
368+
369+
_copy_license LICENSE.txt openssl;
352370
}
353371

354372
compile_libssh2() {
@@ -368,6 +386,8 @@ compile_libssh2() {
368386
--with-crypto=openssl --with-libssl-prefix="${PREFIX}";
369387
make -j "${CPU_CORES}";
370388
make install;
389+
390+
_copy_license COPYING libssh2;
371391
}
372392

373393
compile_nghttp2() {
@@ -385,6 +405,8 @@ compile_nghttp2() {
385405
--enable-lib-only --enable-shared=no;
386406
make -j "${CPU_CORES}";
387407
make install;
408+
409+
_copy_license COPYING nghttp2;
388410
}
389411

390412
compile_ngtcp2() {
@@ -408,6 +430,8 @@ compile_ngtcp2() {
408430
make install;
409431
cp -a crypto/includes/ngtcp2/ngtcp2_crypto_quictls.h crypto/includes/ngtcp2/ngtcp2_crypto.h \
410432
"${PREFIX}/include/ngtcp2/"
433+
434+
_copy_license COPYING ngtcp2;
411435
}
412436

413437
compile_nghttp3() {
@@ -425,6 +449,8 @@ compile_nghttp3() {
425449
--enable-lib-only --disable-dependency-tracking;
426450
make -j "${CPU_CORES}";
427451
make install;
452+
453+
_copy_license COPYING nghttp3;
428454
}
429455

430456
compile_brotli() {
@@ -445,6 +471,7 @@ compile_brotli() {
445471
PKG_CONFIG="pkg-config --static" \
446472
cmake --build . --config Release --target install;
447473

474+
_copy_license ../LICENSE brotli;
448475
cd "${PREFIX}/lib/"
449476
if [ -f libbrotlidec-static.a ] && [ ! -f libbrotlidec.a ]; then ln -f libbrotlidec-static.a libbrotlidec.a; fi
450477
if [ -f libbrotlienc-static.a ] && [ ! -f libbrotlienc.a ]; then ln -f libbrotlienc-static.a libbrotlienc.a; fi
@@ -463,6 +490,8 @@ compile_zstd() {
463490
PKG_CONFIG="pkg-config --static" \
464491
make -j "${CPU_CORES}" PREFIX="${PREFIX}";
465492
make install;
493+
494+
_copy_license LICENSE zstd
466495
}
467496

468497
curl_config() {
@@ -541,22 +570,24 @@ compile_curl() {
541570
CFLAGS="-I${PREFIX}/include -I${PREFIX}/include/brotli" \
542571
CPPFLAGS="-I${PREFIX}/include -I${PREFIX}/include/brotli" \
543572
make -j "${CPU_CORES}";
573+
574+
_copy_license COPYING curl;
575+
make install;
544576
}
545577

546578
install_curl() {
547579
mkdir -p "${RELEASE_DIR}/release/bin/"
548580

549-
ls -l src/curl
550-
file src/curl
551-
otool -L src/curl
552-
sha256sum src/curl
553-
src/curl -V || true
581+
ls -l "${PREFIX}"/bin/curl;
582+
cp -pf "${PREFIX}/bin/curl" "${RELEASE_DIR}/release/bin/curl-macos-${ARCH}";
554583

555-
cp -f src/curl "${RELEASE_DIR}/release/bin/curl-macos-${ARCH}"
584+
${PREFIX}/bin/curl -V || true
556585

557586
if [ ! -f "${RELEASE_DIR}/version.txt" ]; then
558587
echo "${CURL_VERSION}" > "${RELEASE_DIR}/version.txt"
559588
fi
589+
590+
XZ_OPT=-9 tar -Jcf "${RELEASE_DIR}/release/curl-macos-${ARCH}-dev-${CURL_VERSION}.tar.xz" -C "${DIR}" "curl-${ARCH}"
560591
}
561592

562593
_arch_match() {

0 commit comments

Comments
 (0)