ci/cd: fetch x264 from the GitHub mirror (overlay port)

vcpkg's x264 port downloads from code.videolan.org, whose GitLab serves
the archive behind an anti-bot challenge: CI runners hit curl 7/35
(connection/SSL) or 404 at random, so whether a vcpkg install succeeded
was a coin flip. This overlay port is a verbatim copy of the builtin
port at baseline 771b0a2e with vcpkg_from_gitlab swapped for
vcpkg_from_github against mirror/x264 (byte-identical archive, same
SHA512); both workflows now pass --overlay-ports tooling/vcpkg-ports.

Verified locally in debian:12: the port downloaded from
github.com/mirror/x264 and built libx264.a. No other port in the tree
uses code.videolan.org (dav1d/x265 already fetch from GitHub).
This commit is contained in:
2026-09-24 18:28:36 +08:00
parent 1dc5a77ab0
commit a1268df2f6
10 changed files with 292 additions and 4 deletions
+2 -2
View File
@@ -274,7 +274,7 @@ jobs:
# whole install — vcpkg refuses to retry that class of curl
# error — so retry here.
for attempt in 1 2 3; do
vcpkg install --triplet ${{ matrix.triplet }} --overlay-triplets tooling/vcpkg-triplets/release && exit 0
vcpkg install --triplet ${{ matrix.triplet }} --overlay-triplets tooling/vcpkg-triplets/release --overlay-ports tooling/vcpkg-ports && exit 0
echo "vcpkg install failed (attempt $attempt); retrying"
sleep 15
done
@@ -285,7 +285,7 @@ jobs:
shell: pwsh
run: |
for ($i = 1; $i -le 3; $i++) {
vcpkg install --triplet ${{ matrix.triplet }} --overlay-triplets tooling/vcpkg-triplets/release
vcpkg install --triplet ${{ matrix.triplet }} --overlay-triplets tooling/vcpkg-triplets/release --overlay-ports tooling/vcpkg-ports
if ($LASTEXITCODE -eq 0) { exit 0 }
Write-Host "vcpkg install failed (attempt $i); retrying"
Start-Sleep -Seconds 15
+2 -2
View File
@@ -315,7 +315,7 @@ jobs:
# error — so retry here. vcpkg resumes from its archive and
# download caches, so a repeat attempt is cheap.
for attempt in 1 2 3; do
vcpkg install --triplet ${{ matrix.triplet }} --overlay-triplets tooling/vcpkg-triplets/release && exit 0
vcpkg install --triplet ${{ matrix.triplet }} --overlay-triplets tooling/vcpkg-triplets/release --overlay-ports tooling/vcpkg-ports && exit 0
echo "vcpkg install failed (attempt $attempt); retrying"
sleep 15
done
@@ -326,7 +326,7 @@ jobs:
shell: pwsh
run: |
for ($i = 1; $i -le 3; $i++) {
vcpkg install --triplet ${{ matrix.triplet }} --overlay-triplets tooling/vcpkg-triplets/release
vcpkg install --triplet ${{ matrix.triplet }} --overlay-triplets tooling/vcpkg-triplets/release --overlay-ports tooling/vcpkg-ports
if ($LASTEXITCODE -eq 0) { exit 0 }
Write-Host "vcpkg install failed (attempt $i); retrying"
Start-Sleep -Seconds 15
+23
View File
@@ -0,0 +1,23 @@
# vcpkg overlay ports
Passed to `vcpkg install` with `--overlay-ports tooling/vcpkg-ports`
(both workflows, see `.github/workflows/ci.yml` and
`.github/workflows/cd.yml`).
## x264
vcpkg's builtin x264 port downloads its source from `code.videolan.org`,
whose GitLab sits behind an anti-bot challenge: CI runners intermittently
failed the download (`curl` error 7 / HTTP 404), which made every vcpkg
install a coin flip. This overlay is a verbatim copy of the port at
baseline `771b0a2e7c473c3a6bee56553be4d5bb32bb653c` with
`vcpkg_from_gitlab` swapped for `vcpkg_from_github` against the
`mirror/x264` GitHub mirror. The mirror archive is byte-identical to
GitLab's (same SHA512), so only the fetch URL changes.
No other port in the dependency tree uses code.videolan.org (dav1d and
x265 already fetch from GitHub).
Refresh the copy (portfile, patches, `vcpkg.json`) whenever the
manifest's `builtin-baseline` moves so it keeps matching the resolved
version.
@@ -0,0 +1,15 @@
diff --git a/configure b/configure
index 6f95e2314..e677e36f4 100644
--- a/configure
+++ b/configure
@@ -606,9 +606,9 @@ if [[ $host_os = mingw* || $host_os = msys* || $host_os = cygwin* ]]; then
if cc_check '' -Qdiag-error:10006,10157 ; then
CHECK_CFLAGS="$CHECK_CFLAGS -Qdiag-error:10006,10157"
fi
- elif [[ "$cc_base" = cl || "$cc_base" = cl[\ .]* ]]; then
+ elif [[ "$cc_base" = cl || "$cc_base" = cl[\ .]* || "$cc_base" = clang-cl || "$cc_base" = clang-cl[\ .]* ]]; then
# Standard Microsoft Visual Studio
compiler=CL
compiler_style=MS
CFLAGS="$CFLAGS -nologo -GS- -DHAVE_STRING_H -I\$(SRCPATH)/extras"
cpp_check '' '' '_MSC_VER > 1800 || (_MSC_VER == 1800 && _MSC_FULL_VER >= 180030324)' || die "Microsoft Visual Studio support requires Visual Studio 2013 Update 2 or newer"
+29
View File
@@ -0,0 +1,29 @@
diff --git a/configure b/configure
index 5116bb97..e4ff41cc 100755
--- a/configure
+++ b/configure
@@ -1,4 +1,7 @@
-#!/bin/bash
+#!/usr/bin/env bash
+
+export CFLAGS="${CPPFLAGS} ${CFLAGS}"
+test "${AS:-:}" = ":" && unset AS
if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
cat <<EOF
@@ -865,6 +868,7 @@ case $host_cpu in
AS="${AS-${SRCPATH}/tools/gas-preprocessor.pl -arch aarch64 -as-type armasm -- armasm64 -nologo}"
else
AS="${AS-${CC}}"
+ test "${AS}" = "${CC}" && ASFLAGS="${CPPFLAGS} ${ASFLAGS}"
fi
;;
arm*)
@@ -883,6 +887,7 @@ case $host_cpu in
AS="${AS-${SRCPATH}/tools/gas-preprocessor.pl -arch arm -as-type clang -force-thumb -- ${CC} -mimplicit-it=always}"
else
AS="${AS-${CC}}"
+ test "${AS}" = "${CC}" && ASFLAGS="${CPPFLAGS} ${ASFLAGS}"
fi
;;
s390|s390x)
@@ -0,0 +1,14 @@
diff --git a/configure b/configure
index 6f95e23..30924ba 100755
--- a/configure
+++ b/configure
@@ -1565,7 +1565,8 @@ fi
if [ "$cli" = "yes" ]; then
echo 'default: cli' >> config.mak
- echo 'install: install-cli' >> config.mak
+ echo 'install:' >> config.mak
+ echo ' $(MAKE) install-cli' >> config.mak
fi
if [ "$shared" = "yes" ]; then
+140
View File
@@ -0,0 +1,140 @@
# Oak overlay of vcpkg's x264 port (baseline 771b0a2e7c473c3a6bee56553be4d5bb32bb653c).
# The only change: the source comes from the GitHub mirror `mirror/x264`
# instead of code.videolan.org, whose GitLab serves the archive behind an
# anti-bot challenge — CI runners intermittently could not download it
# (curl 7 / 404), which made every vcpkg install a coin flip. The mirror
# archive is byte-identical (same SHA512), so only the fetch URL changes.
# The other port files are verbatim copies; refresh them when vcpkg's
# builtin baseline moves.
# The latest ref in branch stable
set(ref b35605ace3ddf7c1a5d67a2eb553f034aef41d55)
# Note on x264 versioning:
# The pc file exports "0.<ABI>.<N>" where N is the number of commits.
# The binary releases on https://artifacts.videolan.org/x264/ are named x264-r<N>-<COMMIT>.
# With a git clone, this can be determined by running `versions.sh`.
# With vcpkg_from_gitlab, we modify `versions.sh` accordingly.
# For --editable mode, use configured patch instead of vcpkg_replace_string.
string(REGEX MATCH "^......." short_ref "${ref}")
string(REGEX MATCH "[0-9]+\$" revision "${VERSION}")
configure_file("${CURRENT_PORT_DIR}/version.diff.in" "${CURRENT_BUILDTREES_DIR}/src/version-${VERSION}.diff" @ONLY)
vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO mirror/x264
REF "${ref}"
SHA512 bfac118da55da2fcc4587b17a3184d9ed70d6e03188bc0497f5922df22b5685fa49fa4325f9c5196c76d03e6e3f56d5906475c540d0df7e1739dc4182816eebe
HEAD_REF master
PATCHES
"${CURRENT_BUILDTREES_DIR}/src/version-${VERSION}.diff"
uwp-cflags.patch
parallel-install.patch
allow-clang-cl.patch
configure.patch
)
function(add_cross_prefix)
if(configure_env MATCHES "CC=([^\/]*-)gcc$")
vcpkg_list(APPEND arg_OPTIONS "--cross-prefix=${CMAKE_MATCH_1}")
endif()
set(arg_OPTIONS "${arg_OPTIONS}" PARENT_SCOPE)
endfunction()
set(nasm_archs x86 x64)
set(gaspp_archs arm arm64)
if(NOT "asm" IN_LIST FEATURES)
vcpkg_list(APPEND OPTIONS --disable-asm)
elseif(NOT "$ENV{AS}" STREQUAL "")
# Accept setting from triplet
elseif(VCPKG_TARGET_ARCHITECTURE IN_LIST nasm_archs)
vcpkg_find_acquire_program(NASM)
vcpkg_insert_program_into_path("${NASM}")
set(ENV{AS} "${NASM}")
elseif(VCPKG_TARGET_ARCHITECTURE IN_LIST gaspp_archs AND VCPKG_TARGET_IS_WINDOWS AND VCPKG_HOST_IS_WINDOWS)
vcpkg_find_acquire_program(GASPREPROCESSOR)
list(FILTER GASPREPROCESSOR INCLUDE REGEX gas-preprocessor)
file(INSTALL "${GASPREPROCESSOR}" DESTINATION "${SOURCE_PATH}/tools" RENAME "gas-preprocessor.pl")
endif()
vcpkg_list(SET OPTIONS_RELEASE)
if("tool" IN_LIST FEATURES)
vcpkg_list(APPEND OPTIONS_RELEASE --enable-cli)
else()
vcpkg_list(APPEND OPTIONS_RELEASE --disable-cli)
endif()
if("chroma-format-all" IN_LIST FEATURES)
vcpkg_list(APPEND OPTIONS --chroma-format=all)
endif()
if(NOT "gpl" IN_LIST FEATURES)
vcpkg_list(APPEND OPTIONS --disable-gpl)
endif()
if(VCPKG_TARGET_IS_UWP)
list(APPEND OPTIONS --extra-cflags=-D_WIN32_WINNT=0x0A00)
endif()
vcpkg_make_configure(
SOURCE_PATH "${SOURCE_PATH}"
DISABLE_CPPFLAGS # Build is not using CPP/CPPFLAGS
DISABLE_MSVC_WRAPPERS
LANGUAGES ASM C CXX # Requires NASM to compile
DISABLE_MSVC_TRANSFORMATIONS # disable warnings about unknown -Xcompiler/-Xlinker flags
PRE_CONFIGURE_CMAKE_COMMANDS
add_cross_prefix
OPTIONS
${OPTIONS}
--enable-pic
--disable-lavf
--disable-swscale
--disable-avs
--disable-ffms
--disable-gpac
--disable-lsmash
--disable-bashcompletion
OPTIONS_RELEASE
${OPTIONS_RELEASE}
--enable-strip
"--bindir=\\\${prefix}/bin"
OPTIONS_DEBUG
--enable-debug
--disable-cli
"--bindir=\\\${prefix}/bin"
)
vcpkg_make_install()
if("tool" IN_LIST FEATURES)
vcpkg_copy_tools(TOOL_NAMES x264 AUTO_CLEAN)
endif()
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")
if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW)
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/lib/pkgconfig/x264.pc" "-lx264" "-llibx264")
if(NOT VCPKG_BUILD_TYPE)
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/x264.pc" "-lx264" "-llibx264")
endif()
endif()
if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic" AND VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW)
file(RENAME "${CURRENT_PACKAGES_DIR}/lib/libx264.dll.lib" "${CURRENT_PACKAGES_DIR}/lib/libx264.lib")
if (NOT VCPKG_BUILD_TYPE)
file(RENAME "${CURRENT_PACKAGES_DIR}/debug/lib/libx264.dll.lib" "${CURRENT_PACKAGES_DIR}/debug/lib/libx264.lib")
endif()
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/x264.h" "#ifdef X264_API_IMPORTS" "#if 1")
elseif(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/x264.h" "defined(U_STATIC_IMPLEMENTATION)" "1" IGNORE_UNCHANGED)
file(REMOVE_RECURSE
"${CURRENT_PACKAGES_DIR}/bin"
"${CURRENT_PACKAGES_DIR}/debug/bin"
)
endif()
vcpkg_fixup_pkgconfig()
vcpkg_copy_pdbs()
vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/COPYING")
+12
View File
@@ -0,0 +1,12 @@
diff --git a/configure b/configure
index f7b14d9..2c92b2a 100644
--- a/configure
+++ b/configure
@@ -821,7 +821,6 @@ if [ $SYS = WINDOWS ]; then
if cpp_check "winapifamily.h" "" "!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)" ; then
[ $compiler = CL ] || die "WinRT requires MSVC"
define HAVE_WINRT
- CFLAGS="$CFLAGS -MD"
LDFLAGS="$LDFLAGS -appcontainer"
if ! cpp_check "" "" "defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x0603" ; then
die "_WIN32_WINNT must be defined to at least 0x0603 (Windows 8.1) for WinRT"
+40
View File
@@ -0,0 +1,40 @@
{
"name": "x264",
"version": "0.165.3222",
"description": "x264 is a free software library and application for encoding video streams into the H.264/MPEG-4 AVC compression format",
"homepage": "https://www.videolan.org/developers/x264.html",
"license": "GPL-2.0-or-later",
"supports": "!xbox",
"dependencies": [
{
"name": "vcpkg-make",
"host": true
}
],
"default-features": [
{
"name": "asm",
"platform": "!(arm32 & windows)"
},
{
"name": "gpl",
"platform": "!(arm32 & windows)"
}
],
"features": {
"asm": {
"description": "Enable platform-specific assembly optimizations",
"supports": "!(arm32 & windows)"
},
"chroma-format-all": {
"description": "Output all chroma formats"
},
"gpl": {
"description": "Allow use of GPL code, the resulting libs and binaries will be under GPL"
},
"tool": {
"description": "Build the command line tool",
"supports": "!uwp"
}
}
}
+15
View File
@@ -0,0 +1,15 @@
diff --git a/version.sh b/version.sh
index 178fc952..06728796 100755
--- a/version.sh
+++ b/version.sh
@@ -3,8 +3,8 @@
cd "$(dirname "$0")" >/dev/null && [ -f x264.h ] || exit 1
api="$(grep '#define X264_BUILD' < x264.h | sed 's/^.* \([1-9][0-9]*\).*$/\1/')"
-ver="x"
-version=""
+ver="@revision@ @short_ref@"
+version=" r${ver} vcpkg"
if [ -d .git ] && command -v git >/dev/null 2>&1 ; then
localver="$(($(git rev-list HEAD | wc -l)))"