Compare commits
95 commits
edge
...
gitlab-fos
Author | SHA1 | Date | |
---|---|---|---|
b59929e82a | |||
85764269af | |||
1e0c3cd01f | |||
c5fc10b53d | |||
548b889d5e | |||
5a59874811 | |||
1958bae670 | |||
e651f24ad8 | |||
ba71cb700d | |||
5100af70c5 | |||
28b2be2fdb | |||
8fcddfd555 | |||
541b5c03f5 | |||
7d1eb1acd1 | |||
8acf280f53 | |||
0901922683 | |||
3a1d0dbc58 | |||
b87d30fff2 | |||
6c3e374a4f | |||
228e5dc632 | |||
8c9db59fb8 | |||
8a107fb7bd | |||
e61b92462a | |||
ea8c2410d2 | |||
fb675c7e0d | |||
2ebd5a7f95 | |||
e4941f9419 | |||
d77620cf6d | |||
739955203a | |||
203915a8ed | |||
1a4e9f5409 | |||
f1573c5d51 | |||
a3fff41b9b | |||
7e003770a4 | |||
ef224859e2 | |||
789bf106dc | |||
734dbfd42e | |||
50a5dfc5ba | |||
5a0233d8df | |||
94bdd0d626 | |||
c5ba2fd706 | |||
2e43c8fa73 | |||
c7c6c5734f | |||
cf08702b85 | |||
db8fbfc9a3 | |||
fa520b2599 | |||
47e8c8d4f5 | |||
e8336635fe | |||
e1230d065a | |||
76aee0710e | |||
d83a9dbbda | |||
8082ac390f | |||
6187ef0774 | |||
228d753920 | |||
46daf7941d | |||
aa3219fa5f | |||
31ee2bf5ce | |||
2f19d1ccd8 | |||
96621c9e91 | |||
c58a58a36c | |||
2ff1536f38 | |||
3a1419cdf2 | |||
2117869911 | |||
f3a60cf7ec | |||
719728761a | |||
20cd011cbb | |||
9a4e64a8b3 | |||
015c4bd1e9 | |||
7d345131cc | |||
12755a28c4 | |||
07073d1b39 | |||
a7260073fb | |||
40e20e6376 | |||
abbe39a72a | |||
4286b39a70 | |||
343a7b9e18 | |||
323104b1d1 | |||
b3a2c3594e | |||
96f96f6f66 | |||
52319ab232 | |||
3a4d3d55e5 | |||
43b0187448 | |||
d72a876723 | |||
46a4b33e8c | |||
035664670a | |||
92e698b890 | |||
d9857592d3 | |||
cc8f014f81 | |||
a37508f00c | |||
3713b328ef | |||
00ca8438d4 | |||
6fd2c3ac0b | |||
a45cc734ed | |||
bd513b5135 | |||
4f0d086e36 |
518 changed files with 109511 additions and 16162 deletions
|
@ -1,177 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# expects the following env variables:
|
|
||||||
# downstream: downstream repo
|
|
||||||
#
|
|
||||||
# env variables to track minor or bug-fix updates
|
|
||||||
# minor_only: array of packages that should only track minor releases (seperate by space)
|
|
||||||
# default: none
|
|
||||||
# all packages: all
|
|
||||||
# fix_only: array of packages that should only track bug fix releases (seperated by space)
|
|
||||||
# default: none
|
|
||||||
# all packages: all
|
|
||||||
#
|
|
||||||
# If either minor_only or fix_only is set, only packages with semantic versioning schemes
|
|
||||||
# will be tracked.
|
|
||||||
#
|
|
||||||
# If a package is both minor_only and fix_only, the minor releases will be tracked
|
|
||||||
#
|
|
||||||
# optional env variables
|
|
||||||
# ALL_PACKAGES: when true, ignore is package is owned by me
|
|
||||||
# skip_package: array of packages to skip
|
|
||||||
# add_package: array of additional packages to check
|
|
||||||
#
|
|
||||||
|
|
||||||
repo=${downstream/*\/}
|
|
||||||
release=${downstream/\/$repo/}
|
|
||||||
release=${release/*\/}
|
|
||||||
release=${release/v}
|
|
||||||
arch=$(apk --print-arch)
|
|
||||||
# add special case for postmarketos
|
|
||||||
[ "$release" == "postmarketos" ] && { release=$repo; repo="pmos"; arch="aarch64"; }
|
|
||||||
[ "$release" == "master" ] && release=edge
|
|
||||||
|
|
||||||
is_semantic() {
|
|
||||||
local downstream_version_dot=${1//[^.]}
|
|
||||||
if [[ ${#downstream_version_dot} -eq 2 ]]; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
echo "Checking $downstream for out of date packages"
|
|
||||||
curl --silent $downstream/$arch/APKINDEX.tar.gz | tar -O -zx APKINDEX > APKINDEX
|
|
||||||
|
|
||||||
if [ "$ALL_PACKAGES" == "true" ]; then
|
|
||||||
owned_by_you=$(awk -F ':' '{if($1=="o"){print $2}}' APKINDEX | sort | uniq)
|
|
||||||
echo "Found $(printf '%s\n' $owned_by_you | wc -l ) packages"
|
|
||||||
else
|
|
||||||
owned_by_you=$(awk -v RS= -v ORS="\n\n" '/m:Antoine Martin \(ayakael\) <dev@ayakael.net>/' APKINDEX | awk -F ':' '{if($1=="o"){print $2}}' | sort | uniq)
|
|
||||||
echo "Found $(printf '%s\n' $owned_by_you | wc -l ) packages owned by you"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# add additionnal packages
|
|
||||||
owned_by_you="$owned_by_you $add_package"
|
|
||||||
|
|
||||||
rm -f out_of_date not_in_anitya
|
|
||||||
|
|
||||||
for pkg in $owned_by_you; do
|
|
||||||
downstream_version=$(sed -n "/^P:$pkg$/,/^$/p" APKINDEX | awk -F ':' '{if($1=="V"){print $2}}' | sort -V | tail -n 1)
|
|
||||||
downstream_version=${downstream_version/-*}
|
|
||||||
|
|
||||||
# skip package if in $skip_package array
|
|
||||||
if [[ "$skip_package" == *$pkg* ]]; then
|
|
||||||
echo "$pkg skipped"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
# special cases where package is not semantic
|
|
||||||
case $pkg in
|
|
||||||
# track u-boot-pine64-pinenote against mainline u-boot, and track upstream rockchip blobs
|
|
||||||
u-boot-pine64-pinenote)
|
|
||||||
upstream_version="$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/u-boot" | jq -r '.stable_versions.[]' | head -n1)"
|
|
||||||
commit=$(sed -n "/^P:$pkg$/,/^$/p" APKINDEX | awk -F ':' '{if($1=="c"){print $2}}')
|
|
||||||
commit=${commit/-dirty/}
|
|
||||||
|
|
||||||
# fetches upstream version for blobs using ini file
|
|
||||||
upstream_trust="$(curl --fail -s 'https://raw.githubusercontent.com/rockchip-linux/rkbin/master/RKTRUST/RK3566TRUST_ULTRA.ini' | grep bl31 | awk -F '=' '{if($1"="PATH){print $2}}' | grep -o -P '(?<=_v).*(?=.elf)')"
|
|
||||||
upstream_ddr="$(curl --fail -s 'https://raw.githubusercontent.com/rockchip-linux/rkbin/master/RKBOOT/RK3566MINIALL_ULTRA.ini' | grep ddr | awk -F '=' '{if($1"="PATH){print $2}}' | head -n 1 | grep -o -P '(?<=_v).*(?=.bin)')"
|
|
||||||
|
|
||||||
# extracts downstream version via _trust_ver and _ddr_ver variable
|
|
||||||
downstream_trust=$(curl --fail -X GET -s "https://gitlab.postmarketos.org/postmarketOS/pmaports/-/raw/$commit/device/testing/u-boot-pine64-pinenote/APKBUILD" | awk -F '=' '{if($1=="_trust_ver"){print $2}}')
|
|
||||||
downstream_ddr=$(curl --fail -X GET -s "https://gitlab.postmarketos.org/postmarketOS/pmaports/-/raw/$commit/device/testing/u-boot-pine64-pinenote/APKBUILD" | awk -F '=' '{if($1=="_ddr_ver"){print $2}}')
|
|
||||||
|
|
||||||
# compares versions and creates newline in out_of_date if problematic
|
|
||||||
if [ "$upstream_trust" != "$downstream_trust" ]; then
|
|
||||||
echo "$pkg new Trust blob $upstream_trust version available"
|
|
||||||
echo "$pkg(trust) $downstream_trust $upstream_trust $repo $release" >> out_of_date
|
|
||||||
fi
|
|
||||||
if [ "$upstream_ddr" != "$downstream_ddr" ]; then
|
|
||||||
echo "$pkg new ddr blob $upstream_ddr version available"
|
|
||||||
echo "$pkg(ddr) $downstream_ddr $upstream_ddr $repo $release" >> out_of_date
|
|
||||||
fi
|
|
||||||
|
|
||||||
;;
|
|
||||||
# release-monitoring omits the extra B, while we keep it but put it after the version no.
|
|
||||||
looking-glass) upstream_version="$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r '.stable_versions.[]' | head -n1)b";;
|
|
||||||
# we want to track both Firefox security upgrades + Zotero upgrades
|
|
||||||
zotero)
|
|
||||||
commit=$(sed -n "/^P:$pkg$/,/^$/p" APKINDEX | awk -F ':' '{if($1=="c"){print $2}}')
|
|
||||||
downstream_fx_ver=$(curl --fail -X GET -s "https://gitlab.alpinelinux.org/alpine/aports/-/raw/$commit/community/zotero/APKBUILD" | awk -F '=' '{if($1=="_fxver"){print $2}}')
|
|
||||||
upstream_fx_ver=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/firefox-esr" | jq -r ".stable_versions.[] | match(\"${downstream_fx_ver/.*.*}.*\").string" | head -n1)
|
|
||||||
if [ "$upstream_fx_ver" != "$downstream_fx_ver" ]; then
|
|
||||||
echo "$pkg new Firefox $upstream_fx_ver version available"
|
|
||||||
echo "$pkg(fx_ver) $downstream_fx_ver $upstream_fx_ver $repo $release" >> out_of_date
|
|
||||||
fi
|
|
||||||
upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r '.stable_versions.[]' | head -n1)
|
|
||||||
;;
|
|
||||||
# aports omits the -beta part of the version
|
|
||||||
freetube) upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/packages/?name=$pkg&distribution=Alpine" | jq -r '.items.[].version' | sed "s|-beta||");;
|
|
||||||
# we only track x.x.1xx feature branches of SDK and stage0
|
|
||||||
dotnet*sdk|dotnet*stage0) upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r ".stable_versions.[] | match(\"${downstream_version::-2}.*\").string" | sed 's|-.*||' | head -n1);;
|
|
||||||
# we want to track both current major version and upstream latest
|
|
||||||
electron)
|
|
||||||
upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/projects/?name=$pkg&distribution=Alpine" | jq -r '.items.[].stable_versions' | jq -r ".[] | match(\"${downstream_version/.*}.*\").string" | head -n 1)
|
|
||||||
latest_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/packages/?name=$pkg&distribution=Alpine" | jq -r '.items.[].stable_version' )
|
|
||||||
# append version number to signal that this is not latest major version
|
|
||||||
if [ "${upstream_version/.*}" != "${latest_version/.*}" ]; then
|
|
||||||
echo "$pkg(${latest_version/.*}) major version available"
|
|
||||||
echo "$pkg(${latest_version/.*}) $downstream_version $latest_version $repo $release" >> out_of_date
|
|
||||||
pkg="$pkg(${upstream_version/.*})"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
# we want to track LTS rather than latest
|
|
||||||
arm-trusted-firmware) upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r ".stable_versions.[] | match(\"${downstream_version%.*}.*\").string" | head -n1);;
|
|
||||||
# track linux-pine64-pinenote against latest
|
|
||||||
linux-pine64-pinenote)
|
|
||||||
upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/315000" | jq -r ".stable_versions.[] | match(\"${downstream_version%.*}.*\").string" | head -n1)
|
|
||||||
latest_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/315000" | jq -r ".stable_versions.[]" | head -n1)
|
|
||||||
|
|
||||||
# append version number to signal that this is not latest major version
|
|
||||||
if [ "${upstream_version/.*.*}" != "${latest_version/.*.*}" ]; then
|
|
||||||
echo "$pkg(${latest_version/.*.*}) major version available"
|
|
||||||
echo "$pkg(${latest_version/.*.*}) $downstream_version $latest_version $repo $release" >> out_of_date
|
|
||||||
pkg="$pkg(${upstream_version%.*})"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
# track linux-radxa against BSP kernel (usually got awful late
|
|
||||||
linux-radxa)
|
|
||||||
upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r '.stable_versions.[]' | head -n1)
|
|
||||||
upstream_version=${upstream_version/-*}
|
|
||||||
;;
|
|
||||||
# removes last bit in github tag from usbboot release, as not needed
|
|
||||||
raspberrypi-usbboot) curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r '.stable_versions.[]' | head -n1 | sed 's|-.*||';;
|
|
||||||
*)
|
|
||||||
# continues when package version scheme is not semantic, but minor_only or fix_only is set
|
|
||||||
if [ -n "${minor_only}" ] || [ -n "${fix_only}" ]; then
|
|
||||||
if ! is_semantic $downstream_version; then
|
|
||||||
echo "$pkg is not semantic, and fix_only or minor_only is set"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "${minor_only}" == "all" ] || [[ "${minor_only}" == *$pkg* ]]; then
|
|
||||||
upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r ".stable_versions.[] | match(\"${downstream_version%.*.*}.*\").string" | head -n1)
|
|
||||||
elif [ "${fix_only}" == "all" ] || [[ "${fix_only}" == *$pkg* ]]; then
|
|
||||||
upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r ".stable_versions.[] | match(\"${downstream_version%.*}.*\").string" | head -n1)
|
|
||||||
else
|
|
||||||
upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r '.stable_versions.[]' | head -n1)
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
if [ -z "$upstream_version" ]; then
|
|
||||||
echo "$pkg not in anitya"
|
|
||||||
# do not track not_in_anitya if either minor_only or fix_only is set
|
|
||||||
if [ -z ${minor_only+x} ] && [ -z ${fix_only+x} ]; then
|
|
||||||
echo "$pkg" >> not_in_anitya
|
|
||||||
fi
|
|
||||||
elif [ "$downstream_version" != "$(printf '%s\n' $upstream_version $downstream_version | sort -V | head -n 1)" ]; then
|
|
||||||
echo "$pkg higher downstream $upstream_version"
|
|
||||||
continue
|
|
||||||
elif [ "$upstream_version" != "$downstream_version" ]; then
|
|
||||||
echo "$pkg upstream version $upstream_version does not match downstream version $downstream_version in $release"
|
|
||||||
echo "$pkg $downstream_version $upstream_version $repo $release" >> out_of_date
|
|
||||||
fi
|
|
||||||
done
|
|
|
@ -1,22 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
TARGET_REPO=$1
|
|
||||||
ARCH="x86 x86_64 armhf armv7 aarch64 ppc64le s390x mips64 riscv64 loongarch64"
|
|
||||||
|
|
||||||
for arch in $ARCH; do
|
|
||||||
# check if repo exists
|
|
||||||
wget --spider $TARGET_REPO/$arch/APKINDEX.tar.gz -o /dev/null || continue
|
|
||||||
echo ">>> Clearing repo $TARGET_REPO/$arch"
|
|
||||||
|
|
||||||
curl --silent $TARGET_REPO/$arch/APKINDEX.tar.gz | tar -O -zx APKINDEX > APKINDEX
|
|
||||||
|
|
||||||
pkgs=$(awk -F ':' '{if($1=="o"){print $2}}' APKINDEX | sort | uniq)
|
|
||||||
|
|
||||||
for pkg in $pkgs; do
|
|
||||||
pkgvers=$(sed -n "/^P:$pkg$/,/^$/p" APKINDEX | awk -F ':' '{if($1=="V"){print $2}}')
|
|
||||||
for pkgver in $pkgvers; do
|
|
||||||
echo "Deleting $pkg-$pkgver of arch $arch from $TARGET_REPO"
|
|
||||||
curl -s --user $FORGE_REPO_USER:$FORGE_REPO_TOKEN -X DELETE $TARGET_REPO/$arch/$pkg-$pkgver.apk
|
|
||||||
done
|
|
||||||
done
|
|
||||||
done
|
|
|
@ -1,189 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# expects:
|
|
||||||
# env variable ISSUE_TOKEN
|
|
||||||
# file out_of_date
|
|
||||||
|
|
||||||
IFS='
|
|
||||||
'
|
|
||||||
repo=${downstream/*\/}
|
|
||||||
|
|
||||||
does_it_exist() {
|
|
||||||
name=$1
|
|
||||||
downstream_version=$2
|
|
||||||
upstream_version=$3
|
|
||||||
repo=$4
|
|
||||||
release=$5
|
|
||||||
|
|
||||||
query="$repo/$name: upgrade to $upstream_version"
|
|
||||||
if [ "$release" != "edge" ]; then
|
|
||||||
query="%22[$release] $query%22"
|
|
||||||
elif [ "$repo" != "pmos" ] && [ "$repo" != "user" ]; then
|
|
||||||
# workaround to this query matching both stable and edge branch
|
|
||||||
query="%22$query%22&labels=Edge"
|
|
||||||
else
|
|
||||||
query="%22$query%22"
|
|
||||||
fi
|
|
||||||
query="$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' | sed 's|\[|%5B|g' | sed 's|\]|%5D|g')"
|
|
||||||
|
|
||||||
result="$(curl --silent -X 'GET' \
|
|
||||||
"$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues&sort=latest" \
|
|
||||||
-H 'accept: application/json' \
|
|
||||||
-H "Authorization: token $ISSUE_TOKEN"
|
|
||||||
)"
|
|
||||||
|
|
||||||
if [ "$result" == "[]" ]; then
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
is_it_old() {
|
|
||||||
name=$1
|
|
||||||
downstream_version=$2
|
|
||||||
upstream_version=$3
|
|
||||||
repo=$4
|
|
||||||
release=$5
|
|
||||||
|
|
||||||
query="$repo/$name: upgrade to"
|
|
||||||
if [ "$release" != "edge" ]; then
|
|
||||||
query="%22[$release] $query%22"
|
|
||||||
elif [ "$repo" != "pmos" ] && [ "$repo" != "user" ]; then
|
|
||||||
# workaround to this query matching both stable and edge branch
|
|
||||||
query="%22$query%22&labels=Edge"
|
|
||||||
else
|
|
||||||
query="%22$query%22"
|
|
||||||
fi
|
|
||||||
query="$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' | sed 's|\[|%5B|g' | sed 's|\]|%5D|g')"
|
|
||||||
|
|
||||||
result="$(curl --silent -X 'GET' \
|
|
||||||
"$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues&sort=latest" \
|
|
||||||
-H 'accept: application/json' \
|
|
||||||
-H "authorization: token $ISSUE_TOKEN"
|
|
||||||
)"
|
|
||||||
|
|
||||||
result_title="$(echo $result | jq -r '.[].title' )"
|
|
||||||
result_id="$(echo $result | jq -r '.[].number' )"
|
|
||||||
result_upstream_version="$(echo $result_title | awk '{print $4}')"
|
|
||||||
|
|
||||||
if [ "$upstream_version" != "$result_upstream_version" ]; then
|
|
||||||
echo $result_id
|
|
||||||
else
|
|
||||||
echo 0
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
update_title() {
|
|
||||||
name=$1
|
|
||||||
downstream_version=$2
|
|
||||||
upstream_version=$3
|
|
||||||
repo=$4
|
|
||||||
release=$5
|
|
||||||
id=$6
|
|
||||||
|
|
||||||
result=$(curl --silent -X 'PATCH' \
|
|
||||||
"$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues/$id" \
|
|
||||||
-H 'accept: application/json' \
|
|
||||||
-H "authorization: token $ISSUE_TOKEN" \
|
|
||||||
-H 'Content-Type: application/json' \
|
|
||||||
-d "{
|
|
||||||
\"title\": \"$repo/$name: upgrade to $upstream_version\"
|
|
||||||
}"
|
|
||||||
)
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
create_issue() {
|
|
||||||
name=$1
|
|
||||||
downstream_version=$2
|
|
||||||
upstream_version=$3
|
|
||||||
repo=$4
|
|
||||||
release=$5
|
|
||||||
|
|
||||||
title="$repo/$name: upgrade to $upstream_version"
|
|
||||||
if [ "$release" != "edge" ]; then title="[$release] $title"; fi
|
|
||||||
|
|
||||||
result=$(curl --silent -X 'POST' \
|
|
||||||
"$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues" \
|
|
||||||
-H 'accept: application/json' \
|
|
||||||
-H "authorization: token $ISSUE_TOKEN" \
|
|
||||||
-H 'Content-Type: application/json' \
|
|
||||||
-d "{
|
|
||||||
\"title\": \"$title\",
|
|
||||||
\"labels\": [
|
|
||||||
$LABEL_NUMBER
|
|
||||||
]
|
|
||||||
}")
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
if [ -f out_of_date ]; then
|
|
||||||
out_of_date="$(cat out_of_date)"
|
|
||||||
|
|
||||||
echo "Detected $(wc -l out_of_date) out-of-date packages, creating issues"
|
|
||||||
|
|
||||||
for pkg in $out_of_date; do
|
|
||||||
name="$(echo $pkg | awk '{print $1}')"
|
|
||||||
downstream_version="$(echo $pkg | awk '{print $2}')"
|
|
||||||
upstream_version="$(echo $pkg | awk '{print $3}')"
|
|
||||||
repo="$(echo $pkg | awk '{print $4}')"
|
|
||||||
release="$(echo $pkg | awk '{print $5}')"
|
|
||||||
|
|
||||||
if does_it_exist $name $downstream_version $upstream_version $repo $release; then
|
|
||||||
echo "Issue for $repo/$name already exists"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
id=$(is_it_old $name $downstream_version $upstream_version $repo $release)
|
|
||||||
|
|
||||||
if [ "$id" != "0" ] && [ -n "$id" ]; then
|
|
||||||
echo "Issue for $repo/$name needs updating"
|
|
||||||
update_title $name $downstream_version $upstream_version $repo $release $id
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Creating issue for $repo/$name"
|
|
||||||
create_issue $name $downstream_version $upstream_version $repo $release
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -f not_in_anitya ]; then
|
|
||||||
query="Add missing $repo packages to anitya"
|
|
||||||
query="%22$(echo $query | sed 's| |%20|g')%22"
|
|
||||||
|
|
||||||
result="$(curl --silent -X 'GET' \
|
|
||||||
"$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues&sort=latest" \
|
|
||||||
-H 'accept: application/json' \
|
|
||||||
-H "authorization: token $ISSUE_TOKEN"
|
|
||||||
)"
|
|
||||||
|
|
||||||
if [ "$result" == "[]" ]; then
|
|
||||||
echo "Creating anitya issue"
|
|
||||||
result=$(curl --silent -X 'POST' \
|
|
||||||
"$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues" \
|
|
||||||
-H 'accept: application/json' \
|
|
||||||
-H "authorization: token $ISSUE_TOKEN" \
|
|
||||||
-H 'Content-Type: application/json' \
|
|
||||||
-d "{
|
|
||||||
\"title\": \"Add missing $repo packages to anitya\",
|
|
||||||
\"body\": \"- [ ] $(sed '{:q;N;s/\n/\\n- [ ] /g;t q}' not_in_anitya)\",
|
|
||||||
\"labels\": [
|
|
||||||
$LABEL_NUMBER
|
|
||||||
]
|
|
||||||
}")
|
|
||||||
|
|
||||||
else
|
|
||||||
echo "Updating anitya issue"
|
|
||||||
result_id="$(echo $result | jq -r '.[].number' )"
|
|
||||||
result=$(curl --silent -X 'PATCH' \
|
|
||||||
"$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues/$result_id" \
|
|
||||||
-H 'accept: application/json' \
|
|
||||||
-H "authorization: token $ISSUE_TOKEN" \
|
|
||||||
-H 'Content-Type: application/json' \
|
|
||||||
-d "{
|
|
||||||
\"body\": \"- [ ] $(sed '{:q;N;s/\n/\\n- [ ] /g;t q}' not_in_anitya)\"
|
|
||||||
}"
|
|
||||||
)
|
|
||||||
fi
|
|
||||||
fi
|
|
|
@ -1,26 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# shellcheck disable=SC3040
|
|
||||||
set -eu -o pipefail
|
|
||||||
|
|
||||||
readonly REPOS="backports user"
|
|
||||||
readonly BASEBRANCH=$CI_MERGE_REQUEST_TARGET_BRANCH_NAME
|
|
||||||
readonly TARGET_REPO=$CI_ALPINE_REPO
|
|
||||||
|
|
||||||
apkgs=$(find package -type f -name "*.apk")
|
|
||||||
|
|
||||||
for apk in $apkgs; do
|
|
||||||
branch=$(echo $apk | awk -F '/' '{print $2}')
|
|
||||||
arch=$(echo $apk | awk -F '/' '{print $3}')
|
|
||||||
name=$(echo $apk | awk -F '/' '{print $4}')
|
|
||||||
|
|
||||||
echo "Sending $name of arch $arch to $TARGET_REPO/$BASEBRANCH/$branch"
|
|
||||||
return=$(curl -s --user $FORGE_REPO_USER:$FORGE_REPO_TOKEN --upload-file $apk $TARGET_REPO/$BASEBRANCH/$branch 2>&1)
|
|
||||||
echo $return
|
|
||||||
if [ "$return" == "package file already exists" ]; then
|
|
||||||
echo "Package already exists, refreshing..."
|
|
||||||
curl -s --user $FORGE_REPO_USER:$FORGE_REPO_TOKEN -X DELETE $TARGET_REPO/$BASEBRANCH/$branch/$arch/$name
|
|
||||||
curl -s --user $FORGE_REPO_USER:$FORGE_REPO_TOKEN --upload-file $apk $TARGET_REPO/$BASEBRANCH/$branch
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
|
@ -1,54 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
TARGET_RELEASE=$1
|
|
||||||
shift
|
|
||||||
TARGET_ARCH=$@
|
|
||||||
CURRENT_ARCH=$(cat /etc/apk/arch)
|
|
||||||
|
|
||||||
if [ -z "$TARGET_RELEASE" ]; then
|
|
||||||
echo ">>> No target release specified, assumming edge"
|
|
||||||
TARGET_RELEASE=edge
|
|
||||||
fi
|
|
||||||
[[ "$TARGET_RELEASE" == "edge" ]] && TARGET_BRANCH=master || TARGET_BRANCH="${TARGET_RELEASE/v}-stable"
|
|
||||||
|
|
||||||
if [[ ! -d "aports-$TARGET_RELEASE" ]]; then
|
|
||||||
echo ">>> Fetching aports for $TARGET_RELEASE"
|
|
||||||
git init aports-$TARGET_RELEASE
|
|
||||||
git -C aports-$TARGET_RELEASE remote add origin https://gitlab.alpinelinux.org/alpine/aports
|
|
||||||
git -C aports-$TARGET_RELEASE fetch --depth 1 origin $TARGET_BRANCH
|
|
||||||
git -C aports-$TARGET_RELEASE checkout $TARGET_BRANCH
|
|
||||||
[[ $? -ne 0 ]] && { echo ">>> Git fetch failed, does your release exist?"; exit; } || true
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$TARGET_ARCH" ]; then
|
|
||||||
echo ">>> No arch specified, assuming target to all arches supported by upstream for release $TARGET_RELEASE"
|
|
||||||
TARGET_ARCH=$(cat aports-$TARGET_RELEASE/scripts/mkimg.minirootfs.sh | tr -d "\t" | awk -F "=" '{if($1=="arch"){print $2}}' | tr -d \" | sed "s| $CURRENT_ARCH||")
|
|
||||||
if [ -z "$TARGET_ARCH" ]; then
|
|
||||||
echo ">>> Could not compute arches that are supported, does your release exist?"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
. /usr/share/abuild/functions.sh
|
|
||||||
|
|
||||||
for arch in $TARGET_ARCH; do
|
|
||||||
if [[ "$(arch_to_hostspec $arch)" == "unknown" ]]; then
|
|
||||||
echo ">>> $arch not valid arch, please chose among the following"
|
|
||||||
sed -n '/^arch_to_hostspec/,/esac$/ {s/esac//;p;}' /usr/share/abuild/functions.sh | sed -e '/unknown/d' -e '/arch/d' -e '/case/d' -e "/$CURRENT_ARCH/d" | awk '{print $1}' | tr -d ')'
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
echo ">>> Targetting $TARGET_ARCH for cross generation"
|
|
||||||
|
|
||||||
(
|
|
||||||
cd aports-$TARGET_RELEASE/scripts
|
|
||||||
# this stops bootstrap from building the whole base system
|
|
||||||
sed -i 's|^msg "Cross building base system"|exit; msg "Cross building base system"|' bootstrap.sh
|
|
||||||
for arch in $TARGET_ARCH; do
|
|
||||||
echo ">>> Building cross-compilers for $arch"
|
|
||||||
./bootstrap.sh $arch
|
|
||||||
[[ $? -ne 0 ]] && { echo ">>> Cross-build failure"; exit; } || true
|
|
||||||
done
|
|
||||||
echo ">>> Building done"
|
|
||||||
)
|
|
|
@ -1,54 +0,0 @@
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
types: [ assigned, opened, synchronize, reopened ]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-aarch64:
|
|
||||||
runs-on: aarch64
|
|
||||||
container:
|
|
||||||
image: alpinelinux/alpine-gitlab-ci:latest
|
|
||||||
env:
|
|
||||||
CI_PROJECT_DIR: ${{ github.workspace }}
|
|
||||||
CI_DEBUG_BUILD: ${{ runner.debug }}
|
|
||||||
CI_MERGE_REQUEST_PROJECT_URL: ${{ github.server_url }}/${{ github.repository }}
|
|
||||||
CI_MERGE_REQUEST_TARGET_BRANCH_NAME: ${{ github.base_ref }}
|
|
||||||
steps:
|
|
||||||
- name: Environment setup
|
|
||||||
run: |
|
|
||||||
doas apk upgrade -a
|
|
||||||
doas apk add nodejs git patch curl
|
|
||||||
cd /etc/apk/keys
|
|
||||||
doas curl -JO https://ayakael.net/api/packages/forge/alpine/key
|
|
||||||
- name: Repo pull
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 500
|
|
||||||
- name: Package build
|
|
||||||
run: |
|
|
||||||
${{ github.workspace }}/.forgejo/bin/build.sh
|
|
||||||
touch packages/dummy
|
|
||||||
- name: Package upload
|
|
||||||
uses: forgejo/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: package
|
|
||||||
path: packages
|
|
||||||
|
|
||||||
deploy-aarch64:
|
|
||||||
needs: [build-aarch64]
|
|
||||||
runs-on: aarch64
|
|
||||||
container:
|
|
||||||
image: alpine:latest
|
|
||||||
env:
|
|
||||||
CI_ALPINE_REPO: 'https://ayakael.net/api/packages/forge/alpine'
|
|
||||||
CI_MERGE_REQUEST_TARGET_BRANCH_NAME: ${{ github.base_ref }}
|
|
||||||
FORGE_REPO_TOKEN: ${{ secrets.FORGE_REPO_TOKEN }}
|
|
||||||
FORGE_REPO_USER: ${{ vars.FORGE_REPO_USER }}
|
|
||||||
steps:
|
|
||||||
- name: Setting up environment
|
|
||||||
run: apk add nodejs curl findutils git gawk
|
|
||||||
- name: Repo pull
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
- name: Package download
|
|
||||||
uses: forgejo/download-artifact@v3
|
|
||||||
- name: Package deployment
|
|
||||||
run: ${{ github.workspace }}/.forgejo/bin/deploy.sh
|
|
|
@ -1,59 +0,0 @@
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
target_arch:
|
|
||||||
description: 'target arch'
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-cross:
|
|
||||||
runs-on: x86_64
|
|
||||||
container:
|
|
||||||
image: alpinelinux/alpine-gitlab-ci:latest
|
|
||||||
env:
|
|
||||||
CI_PROJECT_DIR: ${{ github.workspace }}
|
|
||||||
CI_DEBUG_BUILD: ${{ runner.debug }}
|
|
||||||
CI_MERGE_REQUEST_PROJECT_URL: ${{ github.server_url }}/${{ github.repository }}
|
|
||||||
CI_MERGE_REQUEST_TARGET_BRANCH_NAME: ${{ github.ref_name }}
|
|
||||||
steps:
|
|
||||||
- name: Environment setup
|
|
||||||
run: |
|
|
||||||
doas apk upgrade -a
|
|
||||||
doas apk add nodejs git patch curl bash
|
|
||||||
cd /etc/apk/keys
|
|
||||||
doas curl -JO https://ayakael.net/api/packages/forge/alpine/key
|
|
||||||
- name: Repo pull
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 500
|
|
||||||
- name: Package build
|
|
||||||
run: |
|
|
||||||
${{ github.workspace }}/.forgejo/bin/build.sh
|
|
||||||
${{ github.workspace }}/.forgejo/bin/generate-cross.sh ${{ github.ref_name }} ${{ inputs.target_arch }}
|
|
||||||
mv -v /home/buildozer/packages/main ${{ github.workspace }}/packages/cross
|
|
||||||
- name: Package upload
|
|
||||||
uses: forgejo/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: package
|
|
||||||
path: packages
|
|
||||||
|
|
||||||
deploy-cross:
|
|
||||||
needs: [build-cross]
|
|
||||||
runs-on: x86_64
|
|
||||||
container:
|
|
||||||
image: alpine:latest
|
|
||||||
env:
|
|
||||||
CI_ALPINE_REPO: 'https://ayakael.net/api/packages/forge/alpine'
|
|
||||||
CI_MERGE_REQUEST_TARGET_BRANCH_NAME: ${{ github.ref_name }}
|
|
||||||
FORGE_REPO_TOKEN: ${{ secrets.FORGE_REPO_TOKEN }}
|
|
||||||
FORGE_REPO_USER: ${{ vars.FORGE_REPO_USER }}
|
|
||||||
steps:
|
|
||||||
- name: Setting up environment
|
|
||||||
run: apk add nodejs curl findutils git gawk
|
|
||||||
- name: Repo pull
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
- name: Package download
|
|
||||||
uses: forgejo/download-artifact@v3
|
|
||||||
- name: Package deployment
|
|
||||||
run: ${{ github.workspace }}/.forgejo/bin/deploy.sh
|
|
|
@ -1,54 +0,0 @@
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
types: [ assigned, opened, synchronize, reopened ]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-x86_64:
|
|
||||||
runs-on: x86_64
|
|
||||||
container:
|
|
||||||
image: alpinelinux/alpine-gitlab-ci:latest
|
|
||||||
env:
|
|
||||||
CI_PROJECT_DIR: ${{ github.workspace }}
|
|
||||||
CI_DEBUG_BUILD: ${{ runner.debug }}
|
|
||||||
CI_MERGE_REQUEST_PROJECT_URL: ${{ github.server_url }}/${{ github.repository }}
|
|
||||||
CI_MERGE_REQUEST_TARGET_BRANCH_NAME: ${{ github.base_ref }}
|
|
||||||
steps:
|
|
||||||
- name: Environment setup
|
|
||||||
run: |
|
|
||||||
doas apk upgrade -a
|
|
||||||
doas apk add nodejs git patch curl
|
|
||||||
cd /etc/apk/keys
|
|
||||||
doas curl -JO https://ayakael.net/api/packages/forge/alpine/key
|
|
||||||
- name: Repo pull
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 500
|
|
||||||
- name: Package build
|
|
||||||
run: |
|
|
||||||
${{ github.workspace }}/.forgejo/bin/build.sh
|
|
||||||
touch packages/dummy
|
|
||||||
- name: Package upload
|
|
||||||
uses: forgejo/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: package
|
|
||||||
path: packages
|
|
||||||
|
|
||||||
deploy-x86_64:
|
|
||||||
needs: [build-x86_64]
|
|
||||||
runs-on: x86_64
|
|
||||||
container:
|
|
||||||
image: alpine:latest
|
|
||||||
env:
|
|
||||||
CI_ALPINE_REPO: 'https://ayakael.net/api/packages/forge/alpine'
|
|
||||||
CI_MERGE_REQUEST_TARGET_BRANCH_NAME: ${{ github.base_ref }}
|
|
||||||
FORGE_REPO_TOKEN: ${{ secrets.FORGE_REPO_TOKEN }}
|
|
||||||
FORGE_REPO_USER: ${{ vars.FORGE_REPO_USER }}
|
|
||||||
steps:
|
|
||||||
- name: Setting up environment
|
|
||||||
run: apk add nodejs curl findutils git gawk
|
|
||||||
- name: Repo pull
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
- name: Package download
|
|
||||||
uses: forgejo/download-artifact@v3
|
|
||||||
- name: Package deployment
|
|
||||||
run: ${{ github.workspace }}/.forgejo/bin/deploy.sh
|
|
|
@ -1,28 +0,0 @@
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
schedule:
|
|
||||||
- cron: '0 5 * * *'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
check-backports:
|
|
||||||
name: Check backports repo
|
|
||||||
runs-on: x86_64
|
|
||||||
container:
|
|
||||||
image: alpine:latest
|
|
||||||
env:
|
|
||||||
downstream: https://ayakael.net/api/packages/forge/alpine/v3.22/backports
|
|
||||||
ISSUE_TOKEN: ${{ secrets.issue_token }}
|
|
||||||
LABEL_NUMBER: 1
|
|
||||||
ALL_PACKAGES: true
|
|
||||||
steps:
|
|
||||||
- name: Environment setup
|
|
||||||
run: apk add grep coreutils gawk curl wget bash nodejs git jq sed
|
|
||||||
- name: Get scripts
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 1
|
|
||||||
- name: Check out-of-date packages
|
|
||||||
run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh
|
|
||||||
- name: Create issues
|
|
||||||
run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh
|
|
|
@ -1,49 +0,0 @@
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
schedule:
|
|
||||||
- cron: '0 5 * * *'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
check-community-edge:
|
|
||||||
name: Check community(edge) repo
|
|
||||||
runs-on: x86_64
|
|
||||||
container:
|
|
||||||
image: alpine:latest
|
|
||||||
env:
|
|
||||||
downstream: https://dl-cdn.alpinelinux.org/alpine/edge/community
|
|
||||||
ISSUE_TOKEN: ${{ secrets.issue_token }}
|
|
||||||
LABEL_NUMBER: 4
|
|
||||||
steps:
|
|
||||||
- name: Environment setup
|
|
||||||
run: apk add grep coreutils gawk curl wget bash nodejs git jq sed
|
|
||||||
- name: Get scripts
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 1
|
|
||||||
- name: Check out-of-date packages
|
|
||||||
run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh
|
|
||||||
- name: Create issues
|
|
||||||
run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh
|
|
||||||
check-community-3.22:
|
|
||||||
name: Check community(3.22) repo
|
|
||||||
runs-on: x86_64
|
|
||||||
container:
|
|
||||||
image: alpine:latest
|
|
||||||
env:
|
|
||||||
downstream: https://dl-cdn.alpinelinux.org/alpine/v3.22/community
|
|
||||||
ISSUE_TOKEN: ${{ secrets.issue_token }}
|
|
||||||
LABEL_NUMBER: 13
|
|
||||||
fix_only: all
|
|
||||||
skip_package: dotnet9-stage0 dotnet8-stage0 py3-boto3 py3-botocore
|
|
||||||
steps:
|
|
||||||
- name: Environment setup
|
|
||||||
run: apk add grep coreutils gawk curl wget bash nodejs git jq sed
|
|
||||||
- name: Get scripts
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 1
|
|
||||||
- name: Check out-of-date packages
|
|
||||||
run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh
|
|
||||||
- name: Create issues
|
|
||||||
run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh
|
|
|
@ -1,111 +0,0 @@
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
schedule:
|
|
||||||
- cron: '0 5 * * *'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
check-main-edge:
|
|
||||||
name: Check main(edge) repo
|
|
||||||
runs-on: x86_64
|
|
||||||
container:
|
|
||||||
image: alpine:latest
|
|
||||||
env:
|
|
||||||
downstream: https://dl-cdn.alpinelinux.org/alpine/edge/main
|
|
||||||
ISSUE_TOKEN: ${{ secrets.issue_token }}
|
|
||||||
LABEL_NUMBER: 4
|
|
||||||
steps:
|
|
||||||
- name: Environment setup
|
|
||||||
run: apk add grep coreutils gawk curl wget bash nodejs git jq sed
|
|
||||||
- name: Get scripts
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 1
|
|
||||||
- name: Check out-of-date packages
|
|
||||||
run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh
|
|
||||||
- name: Create issues
|
|
||||||
run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh
|
|
||||||
check-main-3.22:
|
|
||||||
name: Check main(3.22) repo
|
|
||||||
runs-on: x86_64
|
|
||||||
container:
|
|
||||||
image: alpine:latest
|
|
||||||
env:
|
|
||||||
downstream: https://dl-cdn.alpinelinux.org/alpine/v3.22/main
|
|
||||||
ISSUE_TOKEN: ${{ secrets.issue_token }}
|
|
||||||
LABEL_NUMBER: 13
|
|
||||||
fix_only: all
|
|
||||||
steps:
|
|
||||||
- name: Environment setup
|
|
||||||
run: apk add grep coreutils gawk curl wget bash nodejs git jq sed
|
|
||||||
- name: Get scripts
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 1
|
|
||||||
- name: Check out-of-date packages
|
|
||||||
run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh
|
|
||||||
- name: Create issues
|
|
||||||
run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh
|
|
||||||
check-main-3.21:
|
|
||||||
name: Check main(3.21) repo
|
|
||||||
runs-on: x86_64
|
|
||||||
container:
|
|
||||||
image: alpine:latest
|
|
||||||
env:
|
|
||||||
downstream: https://dl-cdn.alpinelinux.org/alpine/v3.21/main
|
|
||||||
ISSUE_TOKEN: ${{ secrets.issue_token }}
|
|
||||||
LABEL_NUMBER: 13
|
|
||||||
fix_only: all
|
|
||||||
steps:
|
|
||||||
- name: Environment setup
|
|
||||||
run: apk add grep coreutils gawk curl wget bash nodejs git jq sed
|
|
||||||
- name: Get scripts
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 1
|
|
||||||
- name: Check out-of-date packages
|
|
||||||
run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh
|
|
||||||
- name: Create issues
|
|
||||||
run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh
|
|
||||||
check-main-3.20:
|
|
||||||
name: Check main(3.20) repo
|
|
||||||
runs-on: x86_64
|
|
||||||
container:
|
|
||||||
image: alpine:latest
|
|
||||||
env:
|
|
||||||
downstream: https://dl-cdn.alpinelinux.org/alpine/v3.20/main
|
|
||||||
ISSUE_TOKEN: ${{ secrets.issue_token }}
|
|
||||||
LABEL_NUMBER: 13
|
|
||||||
fix_only: all
|
|
||||||
steps:
|
|
||||||
- name: Environment setup
|
|
||||||
run: apk add grep coreutils gawk curl wget bash nodejs git jq sed
|
|
||||||
- name: Get scripts
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 1
|
|
||||||
- name: Check out-of-date packages
|
|
||||||
run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh
|
|
||||||
- name: Create issues
|
|
||||||
run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh
|
|
||||||
check-main-3.19:
|
|
||||||
name: Check main(3.19) repo
|
|
||||||
runs-on: x86_64
|
|
||||||
container:
|
|
||||||
image: alpine:latest
|
|
||||||
env:
|
|
||||||
downstream: https://dl-cdn.alpinelinux.org/alpine/v3.19/main
|
|
||||||
ISSUE_TOKEN: ${{ secrets.issue_token }}
|
|
||||||
LABEL_NUMBER: 13
|
|
||||||
fix_only: all
|
|
||||||
steps:
|
|
||||||
- name: Environment setup
|
|
||||||
run: apk add grep coreutils gawk curl wget bash nodejs git jq sed
|
|
||||||
- name: Get scripts
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 1
|
|
||||||
- name: Check out-of-date packages
|
|
||||||
run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh
|
|
||||||
- name: Create issues
|
|
||||||
run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh
|
|
|
@ -1,28 +0,0 @@
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
schedule:
|
|
||||||
- cron: '0 5 * * *'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
check-community-pmos:
|
|
||||||
name: Check pmos(edge) repo
|
|
||||||
runs-on: x86_64
|
|
||||||
container:
|
|
||||||
image: alpine:latest
|
|
||||||
env:
|
|
||||||
downstream: http://mirror.postmarketos.org/postmarketos/master
|
|
||||||
ISSUE_TOKEN: ${{ secrets.issue_token }}
|
|
||||||
LABEL_NUMBER: 14
|
|
||||||
skip_package: device-clockworkpi-uconsole-radxa-cm5 device-pine64-pinenote u-boot-radxa-cm5
|
|
||||||
steps:
|
|
||||||
- name: Environment setup
|
|
||||||
run: apk add grep coreutils gawk curl wget bash nodejs git jq sed
|
|
||||||
- name: Get scripts
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 1
|
|
||||||
- name: Check out-of-date packages
|
|
||||||
run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh
|
|
||||||
- name: Create issues
|
|
||||||
run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh
|
|
|
@ -1,28 +0,0 @@
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
schedule:
|
|
||||||
- cron: '0 5 * * *'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
check-community:
|
|
||||||
name: Check testing repo
|
|
||||||
runs-on: x86_64
|
|
||||||
container:
|
|
||||||
image: alpine:latest
|
|
||||||
env:
|
|
||||||
downstream: https://dl-cdn.alpinelinux.org/alpine/edge/testing
|
|
||||||
ISSUE_TOKEN: ${{ secrets.issue_token }}
|
|
||||||
LABEL_NUMBER: 4
|
|
||||||
skip_package: dotnet6-stage0 dotnet6-build
|
|
||||||
steps:
|
|
||||||
- name: Environment setup
|
|
||||||
run: apk add grep coreutils gawk curl wget bash nodejs git jq sed
|
|
||||||
- name: Get scripts
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 1
|
|
||||||
- name: Check out-of-date packages
|
|
||||||
run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh
|
|
||||||
- name: Create issues
|
|
||||||
run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh
|
|
|
@ -1,27 +0,0 @@
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
schedule:
|
|
||||||
- cron: '0 5 * * *'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
check-user:
|
|
||||||
name: Check user repo
|
|
||||||
runs-on: x86_64
|
|
||||||
container:
|
|
||||||
image: alpine:latest
|
|
||||||
env:
|
|
||||||
downstream: https://ayakael.net/api/packages/forge/alpine/edge/user
|
|
||||||
ISSUE_TOKEN: ${{ secrets.issue_token }}
|
|
||||||
LABEL_NUMBER: 12
|
|
||||||
steps:
|
|
||||||
- name: Environment setup
|
|
||||||
run: apk add grep coreutils gawk curl wget bash nodejs git jq sed
|
|
||||||
- name: Get scripts
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 1
|
|
||||||
- name: Check out-of-date packages
|
|
||||||
run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh
|
|
||||||
- name: Create issues
|
|
||||||
run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh
|
|
|
@ -1,25 +0,0 @@
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
target_repo:
|
|
||||||
description: 'target repo'
|
|
||||||
default: 'edge/user'
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
clear-repo:
|
|
||||||
runs-on: x86_64
|
|
||||||
container:
|
|
||||||
image: alpine:latest
|
|
||||||
env:
|
|
||||||
TARGET_REPO: 'https://ayakael.net/api/packages/forge/alpine/${{ inputs.target_repo }}'
|
|
||||||
FORGE_REPO_TOKEN: ${{ secrets.FORGE_REPO_TOKEN }}
|
|
||||||
FORGE_REPO_USER: ${{ vars.FORGE_REPO_USER }}
|
|
||||||
steps:
|
|
||||||
- name: Setting up environment
|
|
||||||
run: apk add nodejs curl findutils git gawk
|
|
||||||
- name: Repo pull
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
- name: Clear repo
|
|
||||||
run: ${{ github.workspace }}/.forgejo/bin/clear-repo.sh $TARGET_REPO
|
|
|
@ -1,23 +0,0 @@
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
types: [ assigned, opened, synchronize, reopened ]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
lint:
|
|
||||||
run-name: lint
|
|
||||||
runs-on: x86_64
|
|
||||||
container:
|
|
||||||
image: alpinelinux/apkbuild-lint-tools:latest
|
|
||||||
env:
|
|
||||||
CI_PROJECT_DIR: ${{ github.workspace }}
|
|
||||||
CI_DEBUG_BUILD: ${{ runner.debug }}
|
|
||||||
CI_MERGE_REQUEST_PROJECT_URL: ${{ github.server_url }}/${{ github.repository }}
|
|
||||||
CI_MERGE_REQUEST_TARGET_BRANCH_NAME: ${{ github.base_ref }}
|
|
||||||
steps:
|
|
||||||
- run: |
|
|
||||||
doas apk upgrade -a
|
|
||||||
doas apk add nodejs git
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 500
|
|
||||||
- run: lint
|
|
107
.gitlab-ci.yml
Normal file
107
.gitlab-ci.yml
Normal file
|
@ -0,0 +1,107 @@
|
||||||
|
stages:
|
||||||
|
- verify
|
||||||
|
- build
|
||||||
|
- deploy
|
||||||
|
|
||||||
|
variables:
|
||||||
|
GIT_STRATEGY: clone
|
||||||
|
GIT_DEPTH: "500"
|
||||||
|
|
||||||
|
lint:
|
||||||
|
stage: verify
|
||||||
|
interruptible: true
|
||||||
|
script:
|
||||||
|
- |
|
||||||
|
sudo apk add shellcheck atools sudo abuild
|
||||||
|
export PATH="$PATH:$CI_PROJECT_DIR/.gitlab/bin"
|
||||||
|
lint
|
||||||
|
allow_failure: true
|
||||||
|
only:
|
||||||
|
- merge_requests
|
||||||
|
tags:
|
||||||
|
- apk-$CI_MERGE_REQUEST_TARGET_BRANCH_NAME-x86_64
|
||||||
|
|
||||||
|
.build:
|
||||||
|
stage: build
|
||||||
|
interruptible: true
|
||||||
|
script:
|
||||||
|
- |
|
||||||
|
sudo apk add alpine-sdk lua-aports sudo
|
||||||
|
sudo addgroup $USER abuild
|
||||||
|
export PATH="$PATH:$CI_PROJECT_DIR/.gitlab/bin"
|
||||||
|
sudo -Eu $USER build.sh
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- packages/
|
||||||
|
- keys/
|
||||||
|
- logs/
|
||||||
|
expire_in: 7 days
|
||||||
|
only:
|
||||||
|
- merge_requests
|
||||||
|
|
||||||
|
.cross:
|
||||||
|
stage: build
|
||||||
|
interruptible: true
|
||||||
|
script:
|
||||||
|
- |
|
||||||
|
sudo apk add alpine-sdk lua-aports sudo gzip xz qemu-$CI_QEMU_TARGET_ARCH
|
||||||
|
sudo addgroup $USER abuild
|
||||||
|
export PATH="$PATH:$CI_PROJECT_DIR/.gitlab/bin"
|
||||||
|
build-rootfs.sh alpine${CI_MERGE_REQUEST_TARGET_BRANCH_NAME/v} $CI_ALPINE_TARGET_ARCH --rootfsdir $HOME/sysroot-$CI_ALPINE_TARGET_ARCH
|
||||||
|
cp /etc/apk/repositories $HOME/sysroot-$CI_ALPINE_TARGET_ARCH/etc/apk/.
|
||||||
|
sudo -Eu $USER CHOST=$CI_TARGET_ALPINE_ARCH build.sh
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- packages/
|
||||||
|
- keys/
|
||||||
|
- logs/
|
||||||
|
expire_in: 7 days
|
||||||
|
only:
|
||||||
|
- merge_requests
|
||||||
|
|
||||||
|
build-x86_64:
|
||||||
|
extends: .build
|
||||||
|
when: always
|
||||||
|
tags:
|
||||||
|
- apk-$CI_MERGE_REQUEST_TARGET_BRANCH_NAME-x86_64
|
||||||
|
|
||||||
|
build-aarch64:
|
||||||
|
extends: .build
|
||||||
|
when: always
|
||||||
|
tags:
|
||||||
|
- apk-$CI_MERGE_REQUEST_TARGET_BRANCH_NAME-aarch64
|
||||||
|
|
||||||
|
build-ppc64le:
|
||||||
|
extends: .build
|
||||||
|
when: manual
|
||||||
|
tags:
|
||||||
|
- apk-$CI_MERGE_REQUEST_TARGET_BRANCH_NAME-ppc64le
|
||||||
|
|
||||||
|
build-s390x:
|
||||||
|
extends: .build
|
||||||
|
when: manual
|
||||||
|
tags:
|
||||||
|
- apk-$CI_MERGE_REQUEST_TARGET_BRANCH_NAME-s390x
|
||||||
|
|
||||||
|
build-armv7:
|
||||||
|
extends: .cross
|
||||||
|
when: manual
|
||||||
|
tags:
|
||||||
|
- apk-$CI_MERGE_REQUEST_TARGET_BRANCH_NAME-x86_64
|
||||||
|
variables:
|
||||||
|
CI_ALPINE_TARGET_ARCH: armv7
|
||||||
|
CI_QEMU_TARGET_ARCH: arm
|
||||||
|
|
||||||
|
push:
|
||||||
|
interruptible: true
|
||||||
|
stage: deploy
|
||||||
|
script:
|
||||||
|
- |
|
||||||
|
sudo apk add abuild git-lfs findutils
|
||||||
|
export PATH="$PATH:$CI_PROJECT_DIR/.gitlab/bin"
|
||||||
|
push.sh
|
||||||
|
rules:
|
||||||
|
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
||||||
|
when: manual
|
||||||
|
tags:
|
||||||
|
- repo
|
111
.gitlab/bin/APKBUILD_SHIM
Executable file
111
.gitlab/bin/APKBUILD_SHIM
Executable file
|
@ -0,0 +1,111 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
arch=
|
||||||
|
builddir=
|
||||||
|
checkdepends=
|
||||||
|
depends=
|
||||||
|
depends_dev=
|
||||||
|
depends_doc=
|
||||||
|
depends_libs=
|
||||||
|
depends_openrc=
|
||||||
|
depends_static=
|
||||||
|
install=
|
||||||
|
install_if=
|
||||||
|
langdir=
|
||||||
|
ldpath=
|
||||||
|
license=
|
||||||
|
makedepends=
|
||||||
|
makedepends_build=
|
||||||
|
makedepends_host=
|
||||||
|
md5sums=
|
||||||
|
options=
|
||||||
|
patch_args=
|
||||||
|
pkgbasedir=
|
||||||
|
pkgdesc=
|
||||||
|
pkgdir=
|
||||||
|
pkgname=
|
||||||
|
pkgrel=
|
||||||
|
pkgver=
|
||||||
|
pkggroups=
|
||||||
|
pkgusers=
|
||||||
|
provides=
|
||||||
|
provider_priority=
|
||||||
|
replaces=
|
||||||
|
sha256sums=
|
||||||
|
sha512sums=
|
||||||
|
sonameprefix=
|
||||||
|
source=
|
||||||
|
srcdir=
|
||||||
|
startdir=
|
||||||
|
subpackages=
|
||||||
|
subpkgdir=
|
||||||
|
subpkgname=
|
||||||
|
triggers=
|
||||||
|
url=
|
||||||
|
|
||||||
|
# abuild.conf
|
||||||
|
|
||||||
|
CFLAGS=
|
||||||
|
CXXFLAGS=
|
||||||
|
CPPFLAGS=
|
||||||
|
LDFLAGS=
|
||||||
|
JOBS=
|
||||||
|
MAKEFLAGS=
|
||||||
|
CMAKE_CROSSOPTS=
|
||||||
|
|
||||||
|
. ./APKBUILD
|
||||||
|
|
||||||
|
: "$arch"
|
||||||
|
: "$builddir"
|
||||||
|
: "$checkdepends"
|
||||||
|
: "$depends"
|
||||||
|
: "$depends_dev"
|
||||||
|
: "$depends_doc"
|
||||||
|
: "$depends_libs"
|
||||||
|
: "$depends_openrc"
|
||||||
|
: "$depends_static"
|
||||||
|
: "$install"
|
||||||
|
: "$install_if"
|
||||||
|
: "$langdir"
|
||||||
|
: "$ldpath"
|
||||||
|
: "$license"
|
||||||
|
: "$makedepends"
|
||||||
|
: "$makedepends_build"
|
||||||
|
: "$makedepends_host"
|
||||||
|
: "$md5sums"
|
||||||
|
: "$options"
|
||||||
|
: "$patch_args"
|
||||||
|
: "$pkgbasedir"
|
||||||
|
: "$pkgdesc"
|
||||||
|
: "$pkgdir"
|
||||||
|
: "$pkgname"
|
||||||
|
: "$pkgrel"
|
||||||
|
: "$pkgver"
|
||||||
|
: "$pkggroups"
|
||||||
|
: "$pkgusers"
|
||||||
|
: "$provides"
|
||||||
|
: "$provider_priority"
|
||||||
|
: "$replaces"
|
||||||
|
: "$sha256sums"
|
||||||
|
: "$sha512sums"
|
||||||
|
: "$sonameprefix"
|
||||||
|
: "$source"
|
||||||
|
: "$srcdir"
|
||||||
|
: "$startdir"
|
||||||
|
: "$subpackages"
|
||||||
|
: "$subpkgdir"
|
||||||
|
: "$subpkgname"
|
||||||
|
: "$triggers"
|
||||||
|
: "$url"
|
||||||
|
|
||||||
|
# abuild.conf
|
||||||
|
|
||||||
|
: "$CFLAGS"
|
||||||
|
: "$CXXFLAGS"
|
||||||
|
: "$CPPFLAGS"
|
||||||
|
: "$LDFLAGS"
|
||||||
|
: "$JOBS"
|
||||||
|
: "$MAKEFLAGS"
|
||||||
|
: "$CMAKE_CROSSOPTS"
|
16
.gitlab/bin/apkbuild-shellcheck
Executable file
16
.gitlab/bin/apkbuild-shellcheck
Executable file
|
@ -0,0 +1,16 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
shellcheck -s ash \
|
||||||
|
-e SC3043 \
|
||||||
|
-e SC3057 \
|
||||||
|
-e SC3060 \
|
||||||
|
-e SC2016 \
|
||||||
|
-e SC2086 \
|
||||||
|
-e SC2169 \
|
||||||
|
-e SC2155 \
|
||||||
|
-e SC2100 \
|
||||||
|
-e SC2209 \
|
||||||
|
-e SC2030 \
|
||||||
|
-e SC2031 \
|
||||||
|
-e SC1090 \
|
||||||
|
-xa $CI_PROJECT_DIR/.gitlab/bin/APKBUILD_SHIM
|
556
.gitlab/bin/build-rootfs.sh
Executable file
556
.gitlab/bin/build-rootfs.sh
Executable file
|
@ -0,0 +1,556 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
# Availabl here: https://lab.ilot.io/dotnet/arcade/-/blob/7f6d9796cc7f594772f798358dbdd8c69b6a97af/eng/common/cross/build-rootfs.sh
|
||||||
|
# Only modification: qemu-$arch-static becomes qemu-$arch
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
usage()
|
||||||
|
{
|
||||||
|
echo "Usage: $0 [BuildArch] [CodeName] [lldbx.y] [llvmx[.y]] [--skipunmount] --rootfsdir <directory>]"
|
||||||
|
echo "BuildArch can be: arm(default), arm64, armel, armv6, ppc64le, riscv64, s390x, x64, x86"
|
||||||
|
echo "CodeName - optional, Code name for Linux, can be: xenial(default), zesty, bionic, alpine"
|
||||||
|
echo " for alpine can be specified with version: alpineX.YY or alpineedge"
|
||||||
|
echo " for FreeBSD can be: freebsd12, freebsd13"
|
||||||
|
echo " for illumos can be: illumos"
|
||||||
|
echo " for Haiku can be: haiku."
|
||||||
|
echo "lldbx.y - optional, LLDB version, can be: lldb3.9(default), lldb4.0, lldb5.0, lldb6.0 no-lldb. Ignored for alpine and FreeBSD"
|
||||||
|
echo "llvmx[.y] - optional, LLVM version for LLVM related packages."
|
||||||
|
echo "--skipunmount - optional, will skip the unmount of rootfs folder."
|
||||||
|
echo "--use-mirror - optional, use mirror URL to fetch resources, when available."
|
||||||
|
echo "--jobs N - optional, restrict to N jobs."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
__CodeName=xenial
|
||||||
|
__CrossDir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
|
||||||
|
__BuildArch=arm
|
||||||
|
__AlpineArch=armv7
|
||||||
|
__FreeBSDArch=arm
|
||||||
|
__FreeBSDMachineArch=armv7
|
||||||
|
__IllumosArch=arm7
|
||||||
|
__QEMUArch=arm
|
||||||
|
__UbuntuArch=armhf
|
||||||
|
__UbuntuRepo="http://ports.ubuntu.com/"
|
||||||
|
__LLDB_Package="liblldb-3.9-dev"
|
||||||
|
__SkipUnmount=0
|
||||||
|
|
||||||
|
# base development support
|
||||||
|
__UbuntuPackages="build-essential"
|
||||||
|
|
||||||
|
__AlpinePackages="alpine-base"
|
||||||
|
__AlpinePackages+=" build-base"
|
||||||
|
|
||||||
|
# symlinks fixer
|
||||||
|
__UbuntuPackages+=" symlinks"
|
||||||
|
|
||||||
|
# runtime dependencies
|
||||||
|
__UbuntuPackages+=" libicu-dev"
|
||||||
|
__UbuntuPackages+=" liblttng-ust-dev"
|
||||||
|
__UbuntuPackages+=" libunwind8-dev"
|
||||||
|
__UbuntuPackages+=" libnuma-dev"
|
||||||
|
|
||||||
|
# runtime libraries' dependencies
|
||||||
|
__UbuntuPackages+=" libcurl4-openssl-dev"
|
||||||
|
__UbuntuPackages+=" libkrb5-dev"
|
||||||
|
__UbuntuPackages+=" libssl-dev"
|
||||||
|
__UbuntuPackages+=" zlib1g-dev"
|
||||||
|
|
||||||
|
__FreeBSDBase="12.3-RELEASE"
|
||||||
|
__FreeBSDPkg="1.17.0"
|
||||||
|
__FreeBSDABI="12"
|
||||||
|
__FreeBSDPackages="libunwind"
|
||||||
|
__FreeBSDPackages+=" icu"
|
||||||
|
__FreeBSDPackages+=" libinotify"
|
||||||
|
__FreeBSDPackages+=" openssl"
|
||||||
|
__FreeBSDPackages+=" krb5"
|
||||||
|
__FreeBSDPackages+=" terminfo-db"
|
||||||
|
|
||||||
|
__IllumosPackages="icu"
|
||||||
|
__IllumosPackages+=" mit-krb5"
|
||||||
|
__IllumosPackages+=" openssl"
|
||||||
|
__IllumosPackages+=" zlib"
|
||||||
|
|
||||||
|
__HaikuPackages="gmp"
|
||||||
|
__HaikuPackages+=" gmp_devel"
|
||||||
|
__HaikuPackages+=" krb5"
|
||||||
|
__HaikuPackages+=" krb5_devel"
|
||||||
|
__HaikuPackages+=" libiconv"
|
||||||
|
__HaikuPackages+=" libiconv_devel"
|
||||||
|
__HaikuPackages+=" llvm12_libunwind"
|
||||||
|
__HaikuPackages+=" llvm12_libunwind_devel"
|
||||||
|
__HaikuPackages+=" mpfr"
|
||||||
|
__HaikuPackages+=" mpfr_devel"
|
||||||
|
|
||||||
|
# ML.NET dependencies
|
||||||
|
__UbuntuPackages+=" libomp5"
|
||||||
|
__UbuntuPackages+=" libomp-dev"
|
||||||
|
|
||||||
|
__Keyring=
|
||||||
|
__UseMirror=0
|
||||||
|
|
||||||
|
__UnprocessedBuildArgs=
|
||||||
|
while :; do
|
||||||
|
if [[ "$#" -le 0 ]]; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
|
||||||
|
lowerI="$(echo "$1" | tr "[:upper:]" "[:lower:]")"
|
||||||
|
case $lowerI in
|
||||||
|
-\?|-h|--help)
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
arm)
|
||||||
|
__BuildArch=arm
|
||||||
|
__UbuntuArch=armhf
|
||||||
|
__AlpineArch=armv7
|
||||||
|
__QEMUArch=arm
|
||||||
|
;;
|
||||||
|
arm64)
|
||||||
|
__BuildArch=arm64
|
||||||
|
__UbuntuArch=arm64
|
||||||
|
__AlpineArch=aarch64
|
||||||
|
__QEMUArch=aarch64
|
||||||
|
__FreeBSDArch=arm64
|
||||||
|
__FreeBSDMachineArch=aarch64
|
||||||
|
;;
|
||||||
|
armel)
|
||||||
|
__BuildArch=armel
|
||||||
|
__UbuntuArch=armel
|
||||||
|
__UbuntuRepo="http://ftp.debian.org/debian/"
|
||||||
|
__CodeName=jessie
|
||||||
|
;;
|
||||||
|
armv6)
|
||||||
|
__BuildArch=armv6
|
||||||
|
__UbuntuArch=armhf
|
||||||
|
__QEMUArch=arm
|
||||||
|
__UbuntuRepo="http://raspbian.raspberrypi.org/raspbian/"
|
||||||
|
__CodeName=buster
|
||||||
|
__LLDB_Package="liblldb-6.0-dev"
|
||||||
|
|
||||||
|
if [[ -e "/usr/share/keyrings/raspbian-archive-keyring.gpg" ]]; then
|
||||||
|
__Keyring="--keyring /usr/share/keyrings/raspbian-archive-keyring.gpg"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
riscv64)
|
||||||
|
__BuildArch=riscv64
|
||||||
|
__AlpineArch=riscv64
|
||||||
|
__QEMUArch=riscv64
|
||||||
|
__UbuntuArch=riscv64
|
||||||
|
__UbuntuRepo="http://deb.debian.org/debian-ports"
|
||||||
|
__UbuntuPackages="${__UbuntuPackages// libunwind8-dev/}"
|
||||||
|
unset __LLDB_Package
|
||||||
|
|
||||||
|
if [[ -e "/usr/share/keyrings/debian-ports-archive-keyring.gpg" ]]; then
|
||||||
|
__Keyring="--keyring /usr/share/keyrings/debian-ports-archive-keyring.gpg --include=debian-ports-archive-keyring"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
ppc64le)
|
||||||
|
__BuildArch=ppc64le
|
||||||
|
__AlpineArch=ppc64le
|
||||||
|
__QEMUArch=ppc64le
|
||||||
|
__UbuntuArch=ppc64el
|
||||||
|
__UbuntuRepo="http://ports.ubuntu.com/ubuntu-ports/"
|
||||||
|
__UbuntuPackages="${__UbuntuPackages// libunwind8-dev/}"
|
||||||
|
__UbuntuPackages="${__UbuntuPackages// libomp-dev/}"
|
||||||
|
__UbuntuPackages="${__UbuntuPackages// libomp5/}"
|
||||||
|
unset __LLDB_Package
|
||||||
|
;;
|
||||||
|
s390x)
|
||||||
|
__BuildArch=s390x
|
||||||
|
__AlpineArch=s390x
|
||||||
|
__QEMUArch=s390x
|
||||||
|
__UbuntuArch=s390x
|
||||||
|
__UbuntuRepo="http://ports.ubuntu.com/ubuntu-ports/"
|
||||||
|
__UbuntuPackages="${__UbuntuPackages// libunwind8-dev/}"
|
||||||
|
__UbuntuPackages="${__UbuntuPackages// libomp-dev/}"
|
||||||
|
__UbuntuPackages="${__UbuntuPackages// libomp5/}"
|
||||||
|
unset __LLDB_Package
|
||||||
|
;;
|
||||||
|
x64)
|
||||||
|
__BuildArch=x64
|
||||||
|
__AlpineArch=x86_64
|
||||||
|
__QEMUArch=x86_64
|
||||||
|
__UbuntuArch=amd64
|
||||||
|
__FreeBSDArch=amd64
|
||||||
|
__FreeBSDMachineArch=amd64
|
||||||
|
__illumosArch=x86_64
|
||||||
|
__UbuntuRepo=
|
||||||
|
;;
|
||||||
|
x86)
|
||||||
|
__BuildArch=x86
|
||||||
|
__AlpineArch=i386
|
||||||
|
__QEMUArch=i386
|
||||||
|
__UbuntuArch=i386
|
||||||
|
__AlpineArch=x86
|
||||||
|
__UbuntuRepo="http://archive.ubuntu.com/ubuntu/"
|
||||||
|
;;
|
||||||
|
lldb*)
|
||||||
|
version="${lowerI/lldb/}"
|
||||||
|
parts=(${version//./ })
|
||||||
|
|
||||||
|
# for versions > 6.0, lldb has dropped the minor version
|
||||||
|
if [[ "${parts[0]}" -gt 6 ]]; then
|
||||||
|
version="${parts[0]}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
__LLDB_Package="liblldb-${version}-dev"
|
||||||
|
;;
|
||||||
|
no-lldb)
|
||||||
|
unset __LLDB_Package
|
||||||
|
;;
|
||||||
|
llvm*)
|
||||||
|
version="${lowerI/llvm/}"
|
||||||
|
parts=(${version//./ })
|
||||||
|
__LLVM_MajorVersion="${parts[0]}"
|
||||||
|
__LLVM_MinorVersion="${parts[1]}"
|
||||||
|
|
||||||
|
# for versions > 6.0, llvm has dropped the minor version
|
||||||
|
if [[ -z "$__LLVM_MinorVersion" && "$__LLVM_MajorVersion" -le 6 ]]; then
|
||||||
|
__LLVM_MinorVersion=0;
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
xenial) # Ubuntu 16.04
|
||||||
|
if [[ "$__CodeName" != "jessie" ]]; then
|
||||||
|
__CodeName=xenial
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
zesty) # Ubuntu 17.04
|
||||||
|
if [[ "$__CodeName" != "jessie" ]]; then
|
||||||
|
__CodeName=zesty
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
bionic) # Ubuntu 18.04
|
||||||
|
if [[ "$__CodeName" != "jessie" ]]; then
|
||||||
|
__CodeName=bionic
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
focal) # Ubuntu 20.04
|
||||||
|
if [[ "$__CodeName" != "jessie" ]]; then
|
||||||
|
__CodeName=focal
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
jammy) # Ubuntu 22.04
|
||||||
|
if [[ "$__CodeName" != "jessie" ]]; then
|
||||||
|
__CodeName=jammy
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
jessie) # Debian 8
|
||||||
|
__CodeName=jessie
|
||||||
|
|
||||||
|
if [[ -z "$__UbuntuRepo" ]]; then
|
||||||
|
__UbuntuRepo="http://ftp.debian.org/debian/"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
stretch) # Debian 9
|
||||||
|
__CodeName=stretch
|
||||||
|
__LLDB_Package="liblldb-6.0-dev"
|
||||||
|
|
||||||
|
if [[ -z "$__UbuntuRepo" ]]; then
|
||||||
|
__UbuntuRepo="http://ftp.debian.org/debian/"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
buster) # Debian 10
|
||||||
|
__CodeName=buster
|
||||||
|
__LLDB_Package="liblldb-6.0-dev"
|
||||||
|
|
||||||
|
if [[ -z "$__UbuntuRepo" ]]; then
|
||||||
|
__UbuntuRepo="http://ftp.debian.org/debian/"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
bullseye) # Debian 11
|
||||||
|
__CodeName=bullseye
|
||||||
|
|
||||||
|
if [[ -z "$__UbuntuRepo" ]]; then
|
||||||
|
__UbuntuRepo="http://ftp.debian.org/debian/"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
sid) # Debian sid
|
||||||
|
__CodeName=sid
|
||||||
|
|
||||||
|
if [[ -z "$__UbuntuRepo" ]]; then
|
||||||
|
__UbuntuRepo="http://ftp.debian.org/debian/"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
tizen)
|
||||||
|
__CodeName=
|
||||||
|
__UbuntuRepo=
|
||||||
|
__Tizen=tizen
|
||||||
|
;;
|
||||||
|
alpine*)
|
||||||
|
__CodeName=alpine
|
||||||
|
__UbuntuRepo=
|
||||||
|
version="${lowerI/alpine/}"
|
||||||
|
|
||||||
|
if [[ "$version" == "edge" ]]; then
|
||||||
|
__AlpineVersion=edge
|
||||||
|
else
|
||||||
|
parts=(${version//./ })
|
||||||
|
__AlpineMajorVersion="${parts[0]}"
|
||||||
|
__AlpineMinoVersion="${parts[1]}"
|
||||||
|
__AlpineVersion="$__AlpineMajorVersion.$__AlpineMinoVersion"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
freebsd12)
|
||||||
|
__CodeName=freebsd
|
||||||
|
__SkipUnmount=1
|
||||||
|
;;
|
||||||
|
freebsd13)
|
||||||
|
__CodeName=freebsd
|
||||||
|
__FreeBSDBase="13.0-RELEASE"
|
||||||
|
__FreeBSDABI="13"
|
||||||
|
__SkipUnmount=1
|
||||||
|
;;
|
||||||
|
illumos)
|
||||||
|
__CodeName=illumos
|
||||||
|
__SkipUnmount=1
|
||||||
|
;;
|
||||||
|
haiku)
|
||||||
|
__CodeName=haiku
|
||||||
|
__BuildArch=x64
|
||||||
|
__SkipUnmount=1
|
||||||
|
;;
|
||||||
|
--skipunmount)
|
||||||
|
__SkipUnmount=1
|
||||||
|
;;
|
||||||
|
--rootfsdir|-rootfsdir)
|
||||||
|
shift
|
||||||
|
__RootfsDir="$1"
|
||||||
|
;;
|
||||||
|
--use-mirror)
|
||||||
|
__UseMirror=1
|
||||||
|
;;
|
||||||
|
--use-jobs)
|
||||||
|
shift
|
||||||
|
MAXJOBS=$1
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
__UnprocessedBuildArgs="$__UnprocessedBuildArgs $1"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ "$__BuildArch" == "armel" ]]; then
|
||||||
|
__LLDB_Package="lldb-3.5-dev"
|
||||||
|
fi
|
||||||
|
|
||||||
|
__UbuntuPackages+=" ${__LLDB_Package:-}"
|
||||||
|
|
||||||
|
if [[ -n "$__LLVM_MajorVersion" ]]; then
|
||||||
|
__UbuntuPackages+=" libclang-common-${__LLVM_MajorVersion}${__LLVM_MinorVersion:+.$__LLVM_MinorVersion}-dev"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z "$__RootfsDir" && -n "$ROOTFS_DIR" ]]; then
|
||||||
|
__RootfsDir="$ROOTFS_DIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z "$__RootfsDir" ]]; then
|
||||||
|
__RootfsDir="$__CrossDir/../../../.tools/rootfs/$__BuildArch"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -d "$__RootfsDir" ]]; then
|
||||||
|
if [[ "$__SkipUnmount" == "0" ]]; then
|
||||||
|
umount "$__RootfsDir"/* || true
|
||||||
|
fi
|
||||||
|
rm -rf "$__RootfsDir"
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p "$__RootfsDir"
|
||||||
|
__RootfsDir="$( cd "$__RootfsDir" && pwd )"
|
||||||
|
|
||||||
|
if [[ "$__CodeName" == "alpine" ]]; then
|
||||||
|
__ApkToolsVersion=2.12.11
|
||||||
|
__ApkToolsDir="$(mktemp -d)"
|
||||||
|
|
||||||
|
wget "https://gitlab.alpinelinux.org/api/v4/projects/5/packages/generic//v$__ApkToolsVersion/x86_64/apk.static" -P "$__ApkToolsDir"
|
||||||
|
chmod +x "$__ApkToolsDir/apk.static"
|
||||||
|
|
||||||
|
mkdir -p "$__RootfsDir"/usr/bin
|
||||||
|
cp -v "/usr/bin/qemu-$__QEMUArch" "$__RootfsDir/usr/bin"
|
||||||
|
|
||||||
|
if [[ "$__AlpineVersion" == "edge" ]]; then
|
||||||
|
version=edge
|
||||||
|
else
|
||||||
|
version="v$__AlpineVersion"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# initialize DB
|
||||||
|
"$__ApkToolsDir/apk.static" \
|
||||||
|
-X "http://dl-cdn.alpinelinux.org/alpine/$version/main" \
|
||||||
|
-X "http://dl-cdn.alpinelinux.org/alpine/$version/community" \
|
||||||
|
-U --allow-untrusted --root "$__RootfsDir" --arch "$__AlpineArch" --initdb add
|
||||||
|
|
||||||
|
if [[ "$__AlpineLlvmLibsLookup" == 1 ]]; then
|
||||||
|
__AlpinePackages+=" $("$__ApkToolsDir/apk.static" \
|
||||||
|
-X "http://dl-cdn.alpinelinux.org/alpine/$version/main" \
|
||||||
|
-X "http://dl-cdn.alpinelinux.org/alpine/$version/community" \
|
||||||
|
-U --allow-untrusted --root "$__RootfsDir" --arch "$__AlpineArch" \
|
||||||
|
search 'llvm*-libs' | sort | tail -1 | sed 's/-[^-]*//2g')"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# install all packages in one go
|
||||||
|
"$__ApkToolsDir/apk.static" \
|
||||||
|
-X "http://dl-cdn.alpinelinux.org/alpine/$version/main" \
|
||||||
|
-X "http://dl-cdn.alpinelinux.org/alpine/$version/community" \
|
||||||
|
-U --allow-untrusted --no-scripts --root "$__RootfsDir" --arch "$__AlpineArch" \
|
||||||
|
add $__AlpinePackages
|
||||||
|
|
||||||
|
rm -r "$__ApkToolsDir"
|
||||||
|
elif [[ "$__CodeName" == "freebsd" ]]; then
|
||||||
|
mkdir -p "$__RootfsDir"/usr/local/etc
|
||||||
|
JOBS=${MAXJOBS:="$(getconf _NPROCESSORS_ONLN)"}
|
||||||
|
wget -O - "https://download.freebsd.org/ftp/releases/${__FreeBSDArch}/${__FreeBSDMachineArch}/${__FreeBSDBase}/base.txz" | tar -C "$__RootfsDir" -Jxf - ./lib ./usr/lib ./usr/libdata ./usr/include ./usr/share/keys ./etc ./bin/freebsd-version
|
||||||
|
echo "ABI = \"FreeBSD:${__FreeBSDABI}:${__FreeBSDMachineArch}\"; FINGERPRINTS = \"${__RootfsDir}/usr/share/keys\"; REPOS_DIR = [\"${__RootfsDir}/etc/pkg\"]; REPO_AUTOUPDATE = NO; RUN_SCRIPTS = NO;" > "${__RootfsDir}"/usr/local/etc/pkg.conf
|
||||||
|
echo "FreeBSD: { url: \"pkg+http://pkg.FreeBSD.org/\${ABI}/quarterly\", mirror_type: \"srv\", signature_type: \"fingerprints\", fingerprints: \"${__RootfsDir}/usr/share/keys/pkg\", enabled: yes }" > "${__RootfsDir}"/etc/pkg/FreeBSD.conf
|
||||||
|
mkdir -p "$__RootfsDir"/tmp
|
||||||
|
# get and build package manager
|
||||||
|
wget -O - "https://github.com/freebsd/pkg/archive/${__FreeBSDPkg}.tar.gz" | tar -C "$__RootfsDir"/tmp -zxf -
|
||||||
|
cd "$__RootfsDir/tmp/pkg-${__FreeBSDPkg}"
|
||||||
|
# needed for install to succeed
|
||||||
|
mkdir -p "$__RootfsDir"/host/etc
|
||||||
|
./autogen.sh && ./configure --prefix="$__RootfsDir"/host && make -j "$JOBS" && make install
|
||||||
|
rm -rf "$__RootfsDir/tmp/pkg-${__FreeBSDPkg}"
|
||||||
|
# install packages we need.
|
||||||
|
INSTALL_AS_USER=$(whoami) "$__RootfsDir"/host/sbin/pkg -r "$__RootfsDir" -C "$__RootfsDir"/usr/local/etc/pkg.conf update
|
||||||
|
INSTALL_AS_USER=$(whoami) "$__RootfsDir"/host/sbin/pkg -r "$__RootfsDir" -C "$__RootfsDir"/usr/local/etc/pkg.conf install --yes $__FreeBSDPackages
|
||||||
|
elif [[ "$__CodeName" == "illumos" ]]; then
|
||||||
|
mkdir "$__RootfsDir/tmp"
|
||||||
|
pushd "$__RootfsDir/tmp"
|
||||||
|
JOBS=${MAXJOBS:="$(getconf _NPROCESSORS_ONLN)"}
|
||||||
|
echo "Downloading sysroot."
|
||||||
|
wget -O - https://github.com/illumos/sysroot/releases/download/20181213-de6af22ae73b-v1/illumos-sysroot-i386-20181213-de6af22ae73b-v1.tar.gz | tar -C "$__RootfsDir" -xzf -
|
||||||
|
echo "Building binutils. Please wait.."
|
||||||
|
wget -O - https://ftp.gnu.org/gnu/binutils/binutils-2.33.1.tar.bz2 | tar -xjf -
|
||||||
|
mkdir build-binutils && cd build-binutils
|
||||||
|
../binutils-2.33.1/configure --prefix="$__RootfsDir" --target="${__illumosArch}-sun-solaris2.10" --program-prefix="${__illumosArch}-illumos-" --with-sysroot="$__RootfsDir"
|
||||||
|
make -j "$JOBS" && make install && cd ..
|
||||||
|
echo "Building gcc. Please wait.."
|
||||||
|
wget -O - https://ftp.gnu.org/gnu/gcc/gcc-8.4.0/gcc-8.4.0.tar.xz | tar -xJf -
|
||||||
|
CFLAGS="-fPIC"
|
||||||
|
CXXFLAGS="-fPIC"
|
||||||
|
CXXFLAGS_FOR_TARGET="-fPIC"
|
||||||
|
CFLAGS_FOR_TARGET="-fPIC"
|
||||||
|
export CFLAGS CXXFLAGS CXXFLAGS_FOR_TARGET CFLAGS_FOR_TARGET
|
||||||
|
mkdir build-gcc && cd build-gcc
|
||||||
|
../gcc-8.4.0/configure --prefix="$__RootfsDir" --target="${__illumosArch}-sun-solaris2.10" --program-prefix="${__illumosArch}-illumos-" --with-sysroot="$__RootfsDir" --with-gnu-as \
|
||||||
|
--with-gnu-ld --disable-nls --disable-libgomp --disable-libquadmath --disable-libssp --disable-libvtv --disable-libcilkrts --disable-libada --disable-libsanitizer \
|
||||||
|
--disable-libquadmath-support --disable-shared --enable-tls
|
||||||
|
make -j "$JOBS" && make install && cd ..
|
||||||
|
BaseUrl=https://pkgsrc.smartos.org
|
||||||
|
if [[ "$__UseMirror" == 1 ]]; then
|
||||||
|
BaseUrl=https://pkgsrc.smartos.skylime.net
|
||||||
|
fi
|
||||||
|
BaseUrl="$BaseUrl/packages/SmartOS/trunk/${__illumosArch}/All"
|
||||||
|
echo "Downloading manifest"
|
||||||
|
wget "$BaseUrl"
|
||||||
|
echo "Downloading dependencies."
|
||||||
|
read -ra array <<<"$__IllumosPackages"
|
||||||
|
for package in "${array[@]}"; do
|
||||||
|
echo "Installing '$package'"
|
||||||
|
# find last occurrence of package in listing and extract its name
|
||||||
|
package="$(sed -En '/.*href="('"$package"'-[0-9].*).tgz".*/h;$!d;g;s//\1/p' All)"
|
||||||
|
echo "Resolved name '$package'"
|
||||||
|
wget "$BaseUrl"/"$package".tgz
|
||||||
|
ar -x "$package".tgz
|
||||||
|
tar --skip-old-files -xzf "$package".tmp.tg* -C "$__RootfsDir" 2>/dev/null
|
||||||
|
done
|
||||||
|
echo "Cleaning up temporary files."
|
||||||
|
popd
|
||||||
|
rm -rf "$__RootfsDir"/{tmp,+*}
|
||||||
|
mkdir -p "$__RootfsDir"/usr/include/net
|
||||||
|
mkdir -p "$__RootfsDir"/usr/include/netpacket
|
||||||
|
wget -P "$__RootfsDir"/usr/include/net https://raw.githubusercontent.com/illumos/illumos-gate/master/usr/src/uts/common/io/bpf/net/bpf.h
|
||||||
|
wget -P "$__RootfsDir"/usr/include/net https://raw.githubusercontent.com/illumos/illumos-gate/master/usr/src/uts/common/io/bpf/net/dlt.h
|
||||||
|
wget -P "$__RootfsDir"/usr/include/netpacket https://raw.githubusercontent.com/illumos/illumos-gate/master/usr/src/uts/common/inet/sockmods/netpacket/packet.h
|
||||||
|
wget -P "$__RootfsDir"/usr/include/sys https://raw.githubusercontent.com/illumos/illumos-gate/master/usr/src/uts/common/sys/sdt.h
|
||||||
|
elif [[ "$__CodeName" == "haiku" ]]; then
|
||||||
|
JOBS=${MAXJOBS:="$(getconf _NPROCESSORS_ONLN)"}
|
||||||
|
|
||||||
|
echo "Building Haiku sysroot for x86_64"
|
||||||
|
mkdir -p "$__RootfsDir/tmp"
|
||||||
|
cd "$__RootfsDir/tmp"
|
||||||
|
git clone -b hrev56235 https://review.haiku-os.org/haiku
|
||||||
|
git clone -b btrev43195 https://review.haiku-os.org/buildtools
|
||||||
|
cd "$__RootfsDir/tmp/buildtools" && git checkout 7487388f5110021d400b9f3b88e1a7f310dc066d
|
||||||
|
|
||||||
|
# Fetch some unmerged patches
|
||||||
|
cd "$__RootfsDir/tmp/haiku"
|
||||||
|
## Add development build profile (slimmer than nightly)
|
||||||
|
git fetch origin refs/changes/64/4164/1 && git -c commit.gpgsign=false cherry-pick FETCH_HEAD
|
||||||
|
|
||||||
|
# Build jam
|
||||||
|
cd "$__RootfsDir/tmp/buildtools/jam"
|
||||||
|
make
|
||||||
|
|
||||||
|
# Configure cross tools
|
||||||
|
echo "Building cross-compiler"
|
||||||
|
mkdir -p "$__RootfsDir/generated"
|
||||||
|
cd "$__RootfsDir/generated"
|
||||||
|
"$__RootfsDir/tmp/haiku/configure" -j"$JOBS" --sysroot "$__RootfsDir" --cross-tools-source "$__RootfsDir/tmp/buildtools" --build-cross-tools x86_64
|
||||||
|
|
||||||
|
# Build Haiku packages
|
||||||
|
echo "Building Haiku"
|
||||||
|
echo 'HAIKU_BUILD_PROFILE = "development-raw" ;' > UserProfileConfig
|
||||||
|
"$__RootfsDir/tmp/buildtools/jam/jam0" -j"$JOBS" -q '<build>package' '<repository>Haiku'
|
||||||
|
|
||||||
|
BaseUrl="https://depot.haiku-os.org/__api/v2/pkg/get-pkg"
|
||||||
|
|
||||||
|
# Download additional packages
|
||||||
|
echo "Downloading additional required packages"
|
||||||
|
read -ra array <<<"$__HaikuPackages"
|
||||||
|
for package in "${array[@]}"; do
|
||||||
|
echo "Downloading $package..."
|
||||||
|
# API documented here: https://github.com/haiku/haikudepotserver/blob/master/haikudepotserver-api2/src/main/resources/api2/pkg.yaml#L60
|
||||||
|
# The schema here: https://github.com/haiku/haikudepotserver/blob/master/haikudepotserver-api2/src/main/resources/api2/pkg.yaml#L598
|
||||||
|
hpkgDownloadUrl="$(wget -qO- --post-data='{"name":"'"$package"'","repositorySourceCode":"haikuports_x86_64","versionType":"LATEST","naturalLanguageCode":"en"}' \
|
||||||
|
--header='Content-Type:application/json' "$BaseUrl" | jq -r '.result.versions[].hpkgDownloadURL')"
|
||||||
|
wget -P "$__RootfsDir/generated/download" "$hpkgDownloadUrl"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Setup the sysroot
|
||||||
|
echo "Setting up sysroot and extracting needed packages"
|
||||||
|
mkdir -p "$__RootfsDir/boot/system"
|
||||||
|
for file in "$__RootfsDir/generated/objects/haiku/x86_64/packaging/packages/"*.hpkg; do
|
||||||
|
"$__RootfsDir/generated/objects/linux/x86_64/release/tools/package/package" extract -C "$__RootfsDir/boot/system" "$file"
|
||||||
|
done
|
||||||
|
for file in "$__RootfsDir/generated/download/"*.hpkg; do
|
||||||
|
"$__RootfsDir/generated/objects/linux/x86_64/release/tools/package/package" extract -C "$__RootfsDir/boot/system" "$file"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Cleaning up temporary files
|
||||||
|
echo "Cleaning up temporary files"
|
||||||
|
rm -rf "$__RootfsDir/tmp"
|
||||||
|
for name in "$__RootfsDir/generated/"*; do
|
||||||
|
if [[ "$name" =~ "cross-tools-" ]]; then
|
||||||
|
: # Keep the cross-compiler
|
||||||
|
else
|
||||||
|
rm -rf "$name"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
elif [[ -n "$__CodeName" ]]; then
|
||||||
|
qemu-debootstrap $__Keyring --arch "$__UbuntuArch" "$__CodeName" "$__RootfsDir" "$__UbuntuRepo"
|
||||||
|
cp "$__CrossDir/$__BuildArch/sources.list.$__CodeName" "$__RootfsDir/etc/apt/sources.list"
|
||||||
|
chroot "$__RootfsDir" apt-get update
|
||||||
|
chroot "$__RootfsDir" apt-get -f -y install
|
||||||
|
chroot "$__RootfsDir" apt-get -y install $__UbuntuPackages
|
||||||
|
chroot "$__RootfsDir" symlinks -cr /usr
|
||||||
|
chroot "$__RootfsDir" apt-get clean
|
||||||
|
|
||||||
|
if [[ "$__SkipUnmount" == "0" ]]; then
|
||||||
|
umount "$__RootfsDir"/* || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$__BuildArch" == "armel" && "$__CodeName" == "jessie" ]]; then
|
||||||
|
pushd "$__RootfsDir"
|
||||||
|
patch -p1 < "$__CrossDir/$__BuildArch/armel.jessie.patch"
|
||||||
|
popd
|
||||||
|
fi
|
||||||
|
elif [[ "$__Tizen" == "tizen" ]]; then
|
||||||
|
ROOTFS_DIR="$__RootfsDir" "$__CrossDir/tizen-build-rootfs.sh" "$__BuildArch"
|
||||||
|
else
|
||||||
|
echo "Unsupported target platform."
|
||||||
|
usage;
|
||||||
|
exit 1
|
||||||
|
fi
|
|
@ -1,28 +1,27 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# shellcheck disable=SC3043
|
# shellcheck disable=SC3043
|
||||||
|
|
||||||
. /usr/local/lib/functions.sh
|
. $CI_PROJECT_DIR/.gitlab/bin/functions.sh
|
||||||
|
|
||||||
# shellcheck disable=SC3040
|
# shellcheck disable=SC3040
|
||||||
set -eu -o pipefail
|
set -eu -o pipefail
|
||||||
|
|
||||||
readonly APORTSDIR=$CI_PROJECT_DIR
|
readonly APORTSDIR=$CI_PROJECT_DIR
|
||||||
readonly REPOS="backports user pmos"
|
readonly REPOS="cross backports user testing community"
|
||||||
readonly ALPINE_REPOS="main community testing"
|
readonly ALPINE_REPOS="main community testing"
|
||||||
readonly ARCH=$(apk --print-arch)
|
readonly ARCH=$(apk --print-arch)
|
||||||
# gitlab variables
|
# gitlab variables
|
||||||
readonly BASEBRANCH=$CI_MERGE_REQUEST_TARGET_BRANCH_NAME
|
readonly BASEBRANCH=$CI_MERGE_REQUEST_TARGET_BRANCH_NAME
|
||||||
|
|
||||||
: "${REPODEST:=$HOME/packages}"
|
: "${REPODEST:=$HOME/packages}"
|
||||||
: "${MIRROR:=https://ayakael.net/api/packages/forge/alpine}"
|
: "${MIRROR:=https://lab.ilot.io/ayakael/repo-apk/-/raw}"
|
||||||
: "${ALPINE_MIRROR:=http://dl-cdn.alpinelinux.org/alpine}"
|
: "${ALPINE_MIRROR:=http://dl-cdn.alpinelinux.org/alpine}"
|
||||||
: "${PMOS_MIRROR:=http://mirror.postmarketos.org/postmarketos}"
|
|
||||||
: "${PMOS_KEY:=https://git.syndicate-lang.org/synit/pmbootstrap/raw/commit/8efee86388408c0d8de45c64fe383580ffd91700/pmb/data/keys/build.postmarketos.org.rsa.pub}"
|
|
||||||
: "${MAX_ARTIFACT_SIZE:=300000000}" #300M
|
: "${MAX_ARTIFACT_SIZE:=300000000}" #300M
|
||||||
: "${CI_DEBUG_BUILD:=}"
|
: "${CI_DEBUG_BUILD:=}"
|
||||||
|
|
||||||
: "${CI_ALPINE_BUILD_OFFSET:=0}"
|
: "${CI_ALPINE_BUILD_OFFSET:=0}"
|
||||||
: "${CI_ALPINE_BUILD_LIMIT:=9999}"
|
: "${CI_ALPINE_BUILD_LIMIT:=9999}"
|
||||||
|
: "${CI_ALPINE_TARGET_ARCH:=$(uname -m)}"
|
||||||
|
|
||||||
msg() {
|
msg() {
|
||||||
local color=${2:-green}
|
local color=${2:-green}
|
||||||
|
@ -72,7 +71,7 @@ report() {
|
||||||
|
|
||||||
get_release() {
|
get_release() {
|
||||||
case $BASEBRANCH in
|
case $BASEBRANCH in
|
||||||
v*) echo "$BASEBRANCH";;
|
v*) echo "${BASEBRANCH%-*}";;
|
||||||
edge) echo edge;;
|
edge) echo edge;;
|
||||||
*) die "Branch \"$BASEBRANCH\" not supported!"
|
*) die "Branch \"$BASEBRANCH\" not supported!"
|
||||||
esac
|
esac
|
||||||
|
@ -81,8 +80,9 @@ get_release() {
|
||||||
build_aport() {
|
build_aport() {
|
||||||
local repo="$1" aport="$2"
|
local repo="$1" aport="$2"
|
||||||
cd "$APORTSDIR/$repo/$aport"
|
cd "$APORTSDIR/$repo/$aport"
|
||||||
|
export CHOST=$CI_ALPINE_TARGET_ARCH
|
||||||
if abuild -r 2>&1 | report "build-$aport"; then
|
if abuild -r 2>&1 | report "build-$aport"; then
|
||||||
checkapk 2>&1 | report "checkapk-$aport" || true
|
checkapk | report "checkapk-$aport" || true
|
||||||
aport_ok="$aport_ok $repo/$aport"
|
aport_ok="$aport_ok $repo/$aport"
|
||||||
else
|
else
|
||||||
aport_ng="$aport_ng $repo/$aport"
|
aport_ng="$aport_ng $repo/$aport"
|
||||||
|
@ -92,6 +92,12 @@ build_aport() {
|
||||||
check_aport() {
|
check_aport() {
|
||||||
local repo="$1" aport="$2"
|
local repo="$1" aport="$2"
|
||||||
cd "$APORTSDIR/$repo/$aport"
|
cd "$APORTSDIR/$repo/$aport"
|
||||||
|
export CHOST=$CI_ALPINE_TARGET_ARCH
|
||||||
|
# TODO: this enables crossbuild only on user, this should be cleaner
|
||||||
|
if [ "$repo" != "user" ] && [ "$repo" != "backports" ] && [ "$CI_ALPINE_TARGET_ARCH" != "$ARCH" ]; then
|
||||||
|
aport_na="$aport_na $repo/$aport"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
if ! abuild check_arch 2>/dev/null; then
|
if ! abuild check_arch 2>/dev/null; then
|
||||||
aport_na="$aport_na $repo/$aport"
|
aport_na="$aport_na $repo/$aport"
|
||||||
return 1
|
return 1
|
||||||
|
@ -104,13 +110,16 @@ set_repositories_for() {
|
||||||
|
|
||||||
release=$(get_release)
|
release=$(get_release)
|
||||||
for repo in $REPOS; do
|
for repo in $REPOS; do
|
||||||
[ "$repo" = "non-free" ] && continue
|
|
||||||
[ "$release" == "edge" ] && [ "$repo" == "backports" ] && continue
|
|
||||||
repos="$repos $MIRROR/$release/$repo $REPODEST/$repo"
|
repos="$repos $MIRROR/$release/$repo $REPODEST/$repo"
|
||||||
[ "$repo" = "$target_repo" ] && break
|
[ "$repo" = "$target_repo" ] && break
|
||||||
done
|
done
|
||||||
doas sh -c "printf '%s\n' $repos >> /etc/apk/repositories"
|
sudo sh -c "printf '%s\n' $repos >> /etc/apk/repositories"
|
||||||
doas apk update || true
|
sudo apk update || true
|
||||||
|
if [ "$CI_ALPINE_TARGET_ARCH" != "$ARCH" ]; then
|
||||||
|
sudo sh -c "printf '%s\n' $repos >> $HOME/sysroot-$CI_ALPINE_TARGET_ARCH/etc/apk/repositories"
|
||||||
|
sudo cp -R /etc/apk/keys/* $HOME/sysroot-$CI_ALPINE_TARGET_ARCH/etc/apk/keys/.
|
||||||
|
sudo apk --root=$HOME/sysroot-$CI_ALPINE_TARGET_ARCH update || true
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
apply_offset_limit() {
|
apply_offset_limit() {
|
||||||
|
@ -130,31 +139,27 @@ setup_system() {
|
||||||
[ "$release" != "edge" ] && [ "$repo" == "testing" ] && continue
|
[ "$release" != "edge" ] && [ "$repo" == "testing" ] && continue
|
||||||
repos="$repos $ALPINE_MIRROR/$release/$repo"
|
repos="$repos $ALPINE_MIRROR/$release/$repo"
|
||||||
done
|
done
|
||||||
doas sh -c "printf '%s\n' $repos > /etc/apk/repositories"
|
repos="$repos $MIRROR/$release/cross"
|
||||||
doas apk -U upgrade -a || apk fix || die "Failed to up/downgrade system"
|
sudo sh -c "printf '%s\n' $repos > /etc/apk/repositories"
|
||||||
abuild-keygen -ain
|
sudo apk -U upgrade -a || sudo apk fix || die "Failed to up/downgrade system"
|
||||||
doas sed -i -E 's/export JOBS=[0-9]+$/export JOBS=$(nproc)/' /etc/abuild.conf
|
if [ "$CI_ALPINE_TARGET_ARCH" != "$ARCH" ]; then
|
||||||
|
sudo apk add gcc-$CI_ALPINE_TARGET_ARCH
|
||||||
|
fi
|
||||||
|
gitlab_key_to_rsa $ABUILD_KEY rsa-private $HOME/.abuild/$ABUILD_KEY_NAME.rsa
|
||||||
|
gitlab_key_to_rsa $ABUILD_KEY_PUB rsa-public $HOME/.abuild/$ABUILD_KEY_NAME.rsa.pub
|
||||||
|
chmod 700 $HOME/.abuild/$ABUILD_KEY_NAME.rsa
|
||||||
|
echo "PACKAGER_PRIVKEY=$HOME/.abuild/$ABUILD_KEY_NAME.rsa" >> $HOME/.abuild/abuild.conf
|
||||||
|
sudo cp $HOME/.abuild/$ABUILD_KEY_NAME.rsa.pub /etc/apk/keys/$ABUILD_KEY_NAME.rsa.pub
|
||||||
|
|
||||||
|
# patch abuild for crosscompiling
|
||||||
|
sudo patch -p1 -d / -i $CI_PROJECT_DIR/.gitlab/patches/abuild-cross.patch
|
||||||
|
|
||||||
|
sudo sed -i -E 's/export JOBS=[0-9]+$/export JOBS=$(nproc)/' /etc/abuild.conf
|
||||||
( . /etc/abuild.conf && echo "Building with $JOBS jobs" )
|
( . /etc/abuild.conf && echo "Building with $JOBS jobs" )
|
||||||
mkdir -p "$REPODEST"
|
mkdir -p "$REPODEST"
|
||||||
git config --global init.defaultBranch master
|
git config --global init.defaultBranch master
|
||||||
}
|
}
|
||||||
|
|
||||||
setup_pmos() {
|
|
||||||
local release
|
|
||||||
|
|
||||||
case $BASEBRANCH in
|
|
||||||
v3.21) release="v24.12";;
|
|
||||||
v3.20) release="v24.6";;
|
|
||||||
v3.19) release="v23.12";;
|
|
||||||
edge) release=master;;
|
|
||||||
*) die "Branch \"$BASEBRANCH\" not supported!"
|
|
||||||
esac
|
|
||||||
|
|
||||||
doas wget "$PMOS_KEY" -P /etc/apk/keys
|
|
||||||
doas sh -c "echo $PMOS_MIRROR/$release >> /etc/apk/repositories"
|
|
||||||
doas apk update || true
|
|
||||||
}
|
|
||||||
|
|
||||||
sysinfo() {
|
sysinfo() {
|
||||||
printf ">>> Host system information (arch: %s, release: %s) <<<\n" "$ARCH" "$(get_release)"
|
printf ">>> Host system information (arch: %s, release: %s) <<<\n" "$ARCH" "$(get_release)"
|
||||||
printf "- Number of Cores: %s\n" "$(nproc)"
|
printf "- Number of Cores: %s\n" "$(nproc)"
|
||||||
|
@ -162,7 +167,6 @@ sysinfo() {
|
||||||
printf "- Free space: %s\n" "$(df -hP / | awk '/\/$/ {print $4}')"
|
printf "- Free space: %s\n" "$(df -hP / | awk '/\/$/ {print $4}')"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
copy_artifacts() {
|
copy_artifacts() {
|
||||||
cd "$APORTSDIR"
|
cd "$APORTSDIR"
|
||||||
|
|
||||||
|
@ -199,9 +203,9 @@ sysinfo || true
|
||||||
setup_system || die "Failed to setup system"
|
setup_system || die "Failed to setup system"
|
||||||
|
|
||||||
# git no longer allows to execute in repositories owned by different users
|
# git no longer allows to execute in repositories owned by different users
|
||||||
doas chown -R buildozer: .
|
sudo chown -R $USER: .
|
||||||
|
|
||||||
fetch_flags="-qnu"
|
fetch_flags="-qn"
|
||||||
debugging && fetch_flags="-v"
|
debugging && fetch_flags="-v"
|
||||||
|
|
||||||
git fetch $fetch_flags "$CI_MERGE_REQUEST_PROJECT_URL" \
|
git fetch $fetch_flags "$CI_MERGE_REQUEST_PROJECT_URL" \
|
||||||
|
@ -222,8 +226,8 @@ build_start=$CI_ALPINE_BUILD_OFFSET
|
||||||
build_limit=$CI_ALPINE_BUILD_LIMIT
|
build_limit=$CI_ALPINE_BUILD_LIMIT
|
||||||
|
|
||||||
for repo in $(changed_repos); do
|
for repo in $(changed_repos); do
|
||||||
|
mkdir -p "$APORTSDIR"/logs "$APORTSDIR"/packages "$APORTSDIR"/keys
|
||||||
set_repositories_for "$repo"
|
set_repositories_for "$repo"
|
||||||
[ "$repo" == "pmos" ] && setup_pmos
|
|
||||||
built_aports=0
|
built_aports=0
|
||||||
changed_aports_in_repo=$(changed_aports "$repo")
|
changed_aports_in_repo=$(changed_aports "$repo")
|
||||||
changed_aports_in_repo_count=$(echo "$changed_aports_in_repo" | wc -l)
|
changed_aports_in_repo_count=$(echo "$changed_aports_in_repo" | wc -l)
|
||||||
|
@ -263,7 +267,7 @@ for ok in $aport_ok; do
|
||||||
done
|
done
|
||||||
|
|
||||||
for na in $aport_na; do
|
for na in $aport_na; do
|
||||||
msg "$na: disabled for $ARCH" yellow
|
msg "$na: disabled for $CI_ALPINE_TARGET_ARCH" yellow
|
||||||
done
|
done
|
||||||
|
|
||||||
for ng in $aport_ng; do
|
for ng in $aport_ng; do
|
||||||
|
@ -277,4 +281,3 @@ if [ "$failed" = true ]; then
|
||||||
elif [ -z "$aport_ok" ]; then
|
elif [ -z "$aport_ok" ]; then
|
||||||
msg "No packages found to be built." yellow
|
msg "No packages found to be built." yellow
|
||||||
fi
|
fi
|
||||||
|
|
20
.gitlab/bin/changed-aports
Executable file
20
.gitlab/bin/changed-aports
Executable file
|
@ -0,0 +1,20 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
if [ $# -lt 1 ]; then
|
||||||
|
echo "Usage: $0 <basebranch>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
||||||
|
echo "Fatal: not inside a git repository"
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
basebranch=$1
|
||||||
|
|
||||||
|
if ! git rev-parse --verify --quiet $basebranch >/dev/null; then
|
||||||
|
# The base branch does not eixst, probably due to a shallow clone
|
||||||
|
git fetch -v $CI_MERGE_REQUEST_PROJECT_URL.git +refs/heads/$basebranch:refs/heads/$basebranch
|
||||||
|
fi
|
||||||
|
|
||||||
|
git --no-pager diff --diff-filter=ACMR --name-only $basebranch...HEAD -- "*/APKBUILD" | xargs -r -n1 dirname
|
74
.gitlab/bin/functions.sh
Executable file
74
.gitlab/bin/functions.sh
Executable file
|
@ -0,0 +1,74 @@
|
||||||
|
# shellcheck disable=SC3043
|
||||||
|
|
||||||
|
:
|
||||||
|
|
||||||
|
# shellcheck disable=SC3040
|
||||||
|
set -eu -o pipefail
|
||||||
|
|
||||||
|
changed_repos() {
|
||||||
|
: "${APORTSDIR?APORTSDIR missing}"
|
||||||
|
: "${BASEBRANCH?BASEBRANCH missing}"
|
||||||
|
|
||||||
|
cd "$APORTSDIR"
|
||||||
|
for repo in $REPOS; do
|
||||||
|
git diff --diff-filter=ACMR --exit-code "$BASEBRANCH"...HEAD -- "$repo" >/dev/null \
|
||||||
|
|| echo "$repo"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
changed_aports() {
|
||||||
|
: "${APORTSDIR?APORTSDIR missing}"
|
||||||
|
: "${BASEBRANCH?BASEBRANCH missing}"
|
||||||
|
|
||||||
|
cd "$APORTSDIR"
|
||||||
|
local repo="$1"
|
||||||
|
local aports
|
||||||
|
|
||||||
|
aports=$(git diff --name-only --diff-filter=ACMR --relative="$repo" \
|
||||||
|
"$BASEBRANCH"...HEAD -- "*/APKBUILD" | xargs -rn1 dirname)
|
||||||
|
|
||||||
|
# shellcheck disable=2086
|
||||||
|
ap builddirs -d "$APORTSDIR/$repo" $aports 2>/dev/null | xargs -rn1 basename
|
||||||
|
}
|
||||||
|
|
||||||
|
section_start() {
|
||||||
|
name=${1?arg 1 name missing}
|
||||||
|
header=${2?arg 2 header missing}
|
||||||
|
collapsed=$2
|
||||||
|
timestamp=$(date +%s)
|
||||||
|
|
||||||
|
options=""
|
||||||
|
case $collapsed in
|
||||||
|
yes|on|collapsed|true) options="[collapsed=true]";;
|
||||||
|
esac
|
||||||
|
|
||||||
|
printf "\e[0Ksection_start:%d:%s%s\r\e[0K%s\n" "$timestamp" "$name" "$options" "$header"
|
||||||
|
}
|
||||||
|
|
||||||
|
section_end() {
|
||||||
|
name=$1
|
||||||
|
timestamp=$(date +%s)
|
||||||
|
|
||||||
|
printf "\e[0Ksection_end:%d:%s\r\e[0K" "$timestamp" "$name"
|
||||||
|
}
|
||||||
|
|
||||||
|
gitlab_key_to_rsa() {
|
||||||
|
KEY=$1
|
||||||
|
TYPE=$2
|
||||||
|
TGT=$3
|
||||||
|
TGT_DIR=${TGT%/*}
|
||||||
|
if [ "$TGT" == "$TGT_DIR" ]; then
|
||||||
|
TGT_DIR="./"
|
||||||
|
fi
|
||||||
|
if [ ! -d "$TGT_DIR" ]; then
|
||||||
|
mkdir -p "$TGT_DIR"
|
||||||
|
fi
|
||||||
|
case $TYPE in
|
||||||
|
rsa-public) local type="PUBLIC";;
|
||||||
|
rsa-private) local type="RSA PRIVATE";;
|
||||||
|
esac
|
||||||
|
echo "-----BEGIN $type KEY-----" > "$TGT"
|
||||||
|
echo $1 | sed 's/.\{64\}/&\
|
||||||
|
/g' >> "$TGT"
|
||||||
|
echo "-----END $type KEY-----" >> "$TGT"
|
||||||
|
}
|
96
.gitlab/bin/lint
Executable file
96
.gitlab/bin/lint
Executable file
|
@ -0,0 +1,96 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
BLUE="\e[34m"
|
||||||
|
MAGENTA="\e[35m"
|
||||||
|
RESET="\e[0m"
|
||||||
|
|
||||||
|
readonly BASEBRANCH=$CI_MERGE_REQUEST_TARGET_BRANCH_NAME
|
||||||
|
|
||||||
|
verbose() {
|
||||||
|
echo "> " "$@"
|
||||||
|
# shellcheck disable=SC2068
|
||||||
|
$@
|
||||||
|
}
|
||||||
|
|
||||||
|
debugging() {
|
||||||
|
[ -n "$CI_DEBUG_BUILD" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
debug() {
|
||||||
|
if debugging; then
|
||||||
|
verbose "$@"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# git no longer allows to execute in repositories owned by different users
|
||||||
|
sudo chown -R gitlab-runner: .
|
||||||
|
|
||||||
|
fetch_flags="-qn"
|
||||||
|
debugging && fetch_flags="-v"
|
||||||
|
|
||||||
|
git fetch $fetch_flags "$CI_MERGE_REQUEST_PROJECT_URL" \
|
||||||
|
"+refs/heads/$BASEBRANCH:refs/heads/$BASEBRANCH"
|
||||||
|
|
||||||
|
if debugging; then
|
||||||
|
merge_base=$(git merge-base "$BASEBRANCH" HEAD)
|
||||||
|
echo "$merge_base"
|
||||||
|
git --version
|
||||||
|
git config -l
|
||||||
|
git tag merge-base "$merge_base" || { echo "Could not determine merge-base"; exit 50; }
|
||||||
|
git log --oneline --graph --decorate --all
|
||||||
|
fi
|
||||||
|
|
||||||
|
has_problems=0
|
||||||
|
|
||||||
|
for PKG in $(changed-aports "$BASEBRANCH"); do
|
||||||
|
printf "$BLUE==>$RESET Linting $PKG\n"
|
||||||
|
|
||||||
|
(
|
||||||
|
cd "$PKG"
|
||||||
|
|
||||||
|
repo=$(basename $(dirname $PKG));
|
||||||
|
|
||||||
|
if [ "$repo" == "backports" ]; then
|
||||||
|
echo "Skipping $PKG as backports (we don't care)"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "\n\n"
|
||||||
|
printf "$BLUE"
|
||||||
|
printf '======================================================\n'
|
||||||
|
printf " parse APKBUILD:\n"
|
||||||
|
printf '======================================================'
|
||||||
|
printf "$RESET\n\n"
|
||||||
|
( . ./APKBUILD ) || has_problems=1
|
||||||
|
|
||||||
|
printf "\n\n"
|
||||||
|
printf "$BLUE"
|
||||||
|
printf '======================================================\n'
|
||||||
|
printf " abuild sanitycheck:\n"
|
||||||
|
printf '======================================================'
|
||||||
|
printf "$RESET\n\n"
|
||||||
|
abuild sanitycheck || has_problems=1
|
||||||
|
|
||||||
|
printf "\n\n"
|
||||||
|
printf "$BLUE"
|
||||||
|
printf '======================================================\n'
|
||||||
|
printf " apkbuild-shellcheck:\n"
|
||||||
|
printf '======================================================'
|
||||||
|
printf "$RESET\n"
|
||||||
|
apkbuild-shellcheck || has_problems=1
|
||||||
|
|
||||||
|
printf "\n\n"
|
||||||
|
printf "$BLUE"
|
||||||
|
printf '======================================================\n'
|
||||||
|
printf " apkbuild-lint:\n"
|
||||||
|
printf '======================================================'
|
||||||
|
printf "$RESET\n\n"
|
||||||
|
apkbuild-lint APKBUILD || has_problems=1
|
||||||
|
|
||||||
|
return $has_problems
|
||||||
|
) || has_problems=1
|
||||||
|
|
||||||
|
echo
|
||||||
|
done
|
||||||
|
|
||||||
|
exit $has_problems
|
56
.gitlab/bin/push.sh
Executable file
56
.gitlab/bin/push.sh
Executable file
|
@ -0,0 +1,56 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# shellcheck disable=SC3043
|
||||||
|
|
||||||
|
. $CI_PROJECT_DIR/.gitlab/bin/functions.sh
|
||||||
|
|
||||||
|
# shellcheck disable=SC3040
|
||||||
|
set -eu -o pipefail
|
||||||
|
|
||||||
|
readonly APORTSDIR=$CI_PROJECT_DIR
|
||||||
|
readonly REPOS="backports user"
|
||||||
|
readonly BASEBRANCH=$CI_MERGE_REQUEST_TARGET_BRANCH_NAME
|
||||||
|
|
||||||
|
export GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
|
||||||
|
|
||||||
|
gitlab_key_to_rsa $ABUILD_KEY rsa-private $HOME/.abuild/$ABUILD_KEY_NAME.rsa
|
||||||
|
gitlab_key_to_rsa $ABUILD_KEY_PUB rsa-public $HOME/.abuild/$ABUILD_KEY_NAME.rsa.pub
|
||||||
|
gitlab_key_to_rsa $SSH_KEY rsa-private $HOME/.ssh/id_rsa
|
||||||
|
chmod 700 "$HOME"/.ssh/id_rsa
|
||||||
|
chmod 700 "$HOME"/.abuild/$ABUILD_KEY_NAME.rsa
|
||||||
|
|
||||||
|
echo "PACKAGER_PRIVKEY=$HOME/.abuild/$ABUILD_KEY_NAME.rsa" > $HOME/.abuild/abuild.conf
|
||||||
|
echo "REPODEST=$HOME/repo-apk" >> $HOME/.abuild/abuild.conf
|
||||||
|
sudo cp $HOME/.abuild/$ABUILD_KEY_NAME.rsa.pub /etc/apk/keys/.
|
||||||
|
|
||||||
|
if [ -d $HOME/repo-apk ]; then
|
||||||
|
git -C $HOME/repo-apk fetch
|
||||||
|
git -C $HOME/repo-apk checkout $BASEBRANCH
|
||||||
|
git -C $HOME/repo-apk pull --rebase
|
||||||
|
else
|
||||||
|
git clone git@lab.ilot.io:ayakael/repo-apk -b $BASEBRANCH $HOME/repo-apk
|
||||||
|
fi
|
||||||
|
|
||||||
|
for i in $(find packages -type f -name "*.apk"); do
|
||||||
|
install -vDm644 $i ${i/packages/$HOME\/repo-apk}
|
||||||
|
done
|
||||||
|
|
||||||
|
fetch_flags="-qn"
|
||||||
|
git fetch $fetch_flags "$CI_MERGE_REQUEST_PROJECT_URL" \
|
||||||
|
"+refs/heads/$BASEBRANCH:refs/heads/$BASEBRANCH"
|
||||||
|
|
||||||
|
for repo in $(changed_repos); do
|
||||||
|
rm $HOME/repo-apk/$repo/*/APKINDEX.tar.gz | true
|
||||||
|
mkdir -p $repo/DUMMY
|
||||||
|
echo "pkgname=DUMMY" > $repo/DUMMY/APKBUILD
|
||||||
|
cd $repo/DUMMY
|
||||||
|
for i in $(find $HOME/repo-apk/$repo -maxdepth 1 -mindepth 1 -printf '%P '); do
|
||||||
|
CHOST=$i abuild index
|
||||||
|
done
|
||||||
|
cd "$CI_PROJECT_DIR"
|
||||||
|
rm -R $repo/DUMMY
|
||||||
|
done
|
||||||
|
|
||||||
|
git -C $HOME/repo-apk add .
|
||||||
|
git -C $HOME/repo-apk commit -m "Update from $CI_MERGE_REQUEST_IID - $CI_MERGE_REQUEST_TITLE"
|
||||||
|
git -C $HOME/repo-apk push
|
17
.gitlab/patches/abuild-cross.patch
Normal file
17
.gitlab/patches/abuild-cross.patch
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
diff --git a/usr/bin/abuild.orig b/usr/bin/abuild
|
||||||
|
index 71e0681..d4ae3dd 100755
|
||||||
|
--- a/usr/bin/abuild.orig
|
||||||
|
+++ b/usr/bin/abuild
|
||||||
|
@@ -2231,7 +2231,11 @@ calcdeps() {
|
||||||
|
list_has $i $builddeps && continue
|
||||||
|
subpackages_has ${i%%[<>=]*} || builddeps="$builddeps $i"
|
||||||
|
done
|
||||||
|
- hostdeps="$EXTRADEPENDS_TARGET"
|
||||||
|
+ for i in $EXTRADEPENDS_HOST $EXTRADEPENDS_TARGET $depends $makedepends; do
|
||||||
|
+ [ "$pkgname" = "${i%%[<>=]*}" ] && continue
|
||||||
|
+ list_has $i $hostdeps && continue
|
||||||
|
+ subpackages_has ${i%%[<>=]*} || hostdeps="$hostdeps $i"
|
||||||
|
+ done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
28
README.md
28
README.md
|
@ -1,32 +1,32 @@
|
||||||
# ayaports
|
# user-aports
|
||||||
Upstream: https://ayakael.net/forge/ayaports
|
Upstream: https://lab.ilot.io/ayakael/user-aports
|
||||||
|
|
||||||
## Description
|
## Description
|
||||||
|
|
||||||
This repository contains aports that are not yet merged in the official Alpine
|
This repository contains aports that are not yet merged in the official Alpine
|
||||||
Linux repository or don’t adhere to Alpine polices. Packages are automatically
|
Linux repository or don’t adhere to Alpine polices. Packages are automatically
|
||||||
built using CI. Once built, they are deployed to a Forgejo repository, making
|
built using GitLab CI on my own GitLab instance. Once built, they are deployed
|
||||||
them available to apk.
|
to a git-lfs repository, making them available to apk.
|
||||||
|
|
||||||
Branches are matched to Alpine releases.
|
Branches are matched to Alpine releases.
|
||||||
|
|
||||||
|
|
||||||
## Repositories
|
## Repositories
|
||||||
|
|
||||||
You can browse all the repositories at https://ayakael.net/forge/ayaports
|
You can browse all the repositories at https://lab.ilot.io/ayakael/repo-apk.
|
||||||
Affixed to each repository description is the appropriate link for use in
|
Affixed to each repository description is the appropriate link for use in
|
||||||
`/etc/apk/repositories`.
|
`/etc/apk/repositories`.
|
||||||
|
|
||||||
#### Backports
|
#### Backports
|
||||||
```
|
```
|
||||||
https://ayakael.net/api/packages/forge/alpine/v3.21/backports
|
https://lab.ilot.io/ayakael/repo-apk/-/raw/v3.19/backports
|
||||||
```
|
```
|
||||||
|
|
||||||
Aports from the official Alpine repositories backported from edge. This is only
|
Aports from the official Alpine repositories backported from edge.
|
||||||
available and kept up-to-date on latest stable release.
|
|
||||||
|
|
||||||
#### User
|
#### User
|
||||||
```
|
```
|
||||||
https://ayakael.net/api/packages/forge/alpine/edge/user
|
https://lab.ilot.io/ayakael/repo-apk/-/raw/v3.19/user
|
||||||
```
|
```
|
||||||
|
|
||||||
Aports that have yet to be (or may never be) upstreamed to the official
|
Aports that have yet to be (or may never be) upstreamed to the official
|
||||||
|
@ -34,11 +34,11 @@ aports.
|
||||||
|
|
||||||
|
|
||||||
## How to use
|
## How to use
|
||||||
Add security key of the apk repository to your /etc/apk/keys:
|
Add security key of the repo-apk repository to your /etc/apk/keys:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
cd /etc/apk/keys
|
cd /etc/apk/keys
|
||||||
curl -JO https://ayakael.net/api/packages/forge/alpine/key
|
wget https://lab.ilot.io/ayakael/repo-apk/-/raw/v3.19/antoine.martin@protonmail.com-5b3109ad.rsa.pub
|
||||||
```
|
```
|
||||||
Add repositories that you want to use (see above) to `/etc/apk/repositories`.
|
Add repositories that you want to use (see above) to `/etc/apk/repositories`.
|
||||||
|
|
||||||
|
@ -52,10 +52,10 @@ they will work for you.
|
||||||
|
|
||||||
## Contribution & bug reports
|
## Contribution & bug reports
|
||||||
If you wish to contribute to this aports collection, or wish to report a bug,
|
If you wish to contribute to this aports collection, or wish to report a bug,
|
||||||
you can do so on Codeberg here:
|
you can do so on Alpine's GitLab instance here:
|
||||||
https://codeberg.org/ayakael/ayaports/issues
|
https://gitlab.alpinelinux.org/ayakael/user-aports
|
||||||
|
|
||||||
For packages that are in backports, bug reports and merge requests
|
For packages that are in testing/community, bug reports and merge requests
|
||||||
should be done on Alpine's aports repo instance:
|
should be done on Alpine's aports repo instance:
|
||||||
https://gitlab.alpinelinux.org/alpine/aports
|
https://gitlab.alpinelinux.org/alpine/aports
|
||||||
|
|
||||||
|
|
48
backports/airsonic-advanced/APKBUILD
Normal file
48
backports/airsonic-advanced/APKBUILD
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
# Contributor: Kay Thomas <kaythomas@pm.me>
|
||||||
|
# Maintainer: Kay Thomas <kaythomas@pm.me>
|
||||||
|
pkgname=airsonic-advanced
|
||||||
|
_sha=1397446f979b1cdea283eec89ce4f0eae7d63450
|
||||||
|
pkgver=11.0.0_git20230217
|
||||||
|
pkgrel=0
|
||||||
|
pkgdesc="Modern implementation of the Airsonic fork with several key performance and feature enhancements"
|
||||||
|
url="https://github.com/airsonic-advanced/airsonic-advanced"
|
||||||
|
# inconsistent test and build failures on other arches
|
||||||
|
arch="x86_64"
|
||||||
|
license="GPL-3.0-or-later"
|
||||||
|
depends="openjdk11"
|
||||||
|
makedepends="maven"
|
||||||
|
subpackages="$pkgname-openrc"
|
||||||
|
pkgusers="airsonic-advanced"
|
||||||
|
pkggroups="airsonic-advanced"
|
||||||
|
install="$pkgname.pre-install"
|
||||||
|
source="$pkgname-$pkgver.tar.gz::https://github.com/airsonic-advanced/airsonic-advanced/archive/$_sha.tar.gz
|
||||||
|
maven.patch
|
||||||
|
airsonic-advanced.initd
|
||||||
|
"
|
||||||
|
builddir="$srcdir/$pkgname-$_sha"
|
||||||
|
|
||||||
|
build() {
|
||||||
|
mvn clean package -DskipTests
|
||||||
|
}
|
||||||
|
|
||||||
|
check() {
|
||||||
|
mvn test
|
||||||
|
}
|
||||||
|
|
||||||
|
package() {
|
||||||
|
install -dm755 -o airsonic-advanced -g airsonic-advanced \
|
||||||
|
"$pkgdir"/var/airsonic
|
||||||
|
|
||||||
|
install -m755 -o airsonic-advanced -g airsonic-advanced \
|
||||||
|
"$builddir"/airsonic-main/target/airsonic.war \
|
||||||
|
"$pkgdir"/var/airsonic/airsonic.war
|
||||||
|
|
||||||
|
install -Dm755 "$srcdir"/$pkgname.initd \
|
||||||
|
"$pkgdir"/etc/init.d/$pkgname
|
||||||
|
}
|
||||||
|
|
||||||
|
sha512sums="
|
||||||
|
f415620bdbed9fb3874afbf30d9362e68b1e9e8e90dbbed4ca3206b643cad97ca0558e64ec5b4440382f0ec908c3325e321ea3631c38ff9a2109163c8f0cfe0b airsonic-advanced-11.0.0_git20230217.tar.gz
|
||||||
|
6cb52fee19815fcdf2596e55d97d3e750321b1df7a4fec36fc9bc2a57d4be979a3905a42d3aa9dbeb2bf0d4f56edbf344f13551219b8e4d2ca583abd4bb5c8f9 maven.patch
|
||||||
|
ca87e6a7199950e6ac52aeb076a03f831d60ee9d4ceed47366bbd78443765d205796d895ebb244051d8033e5b2e9ccd648d20434039c854b8b50e766cc5cd10d airsonic-advanced.initd
|
||||||
|
"
|
14
backports/airsonic-advanced/airsonic-advanced.initd
Normal file
14
backports/airsonic-advanced/airsonic-advanced.initd
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
#!/sbin/openrc-run
|
||||||
|
|
||||||
|
supervisor=supervise-daemon
|
||||||
|
name="airsonic-advanced"
|
||||||
|
command="/usr/lib/jvm/java-11-openjdk/jre/bin/java"
|
||||||
|
command_args="-jar airsonic.war"
|
||||||
|
command_user="airsonic-advanced:airsonic-advanced"
|
||||||
|
directory="/var/airsonic"
|
||||||
|
pidfile="/run/airsonic-advanced.pid"
|
||||||
|
|
||||||
|
depend() {
|
||||||
|
need net localmount
|
||||||
|
after firewall
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
addgroup -S airsonic-advanced 2>/dev/null
|
||||||
|
adduser -S -D -H -s /sbin/nologin -G airsonic-advanced -g airsonic-advanced airsonic-advanced 2>/dev/null
|
||||||
|
|
||||||
|
exit 0
|
8
backports/airsonic-advanced/maven.patch
Normal file
8
backports/airsonic-advanced/maven.patch
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
fixes maven 3.9 breaking change
|
||||||
|
https://maven.apache.org/docs/3.9.0/release-notes.html#potentially-breaking-core-changes
|
||||||
|
--- airsonic-advanced-1397446f979b1cdea283eec89ce4f0eae7d63450/.mvn/maven.config
|
||||||
|
+++ airsonic-advanced-1397446f979b1cdea283eec89ce4f0eae7d63450/.mvn/maven.config
|
||||||
|
@@ -1 +1,2 @@
|
||||||
|
---settings ./.mvn/settings.xml
|
||||||
|
+--settings
|
||||||
|
+./.mvn/settings.xml
|
|
@ -1,25 +0,0 @@
|
||||||
diff --color -Nur calibre-6.17.0.orig/src/calibre/gui2/update.py calibre-6.17.0/src/calibre/gui2/update.py
|
|
||||||
--- calibre-6.17.0.orig/src/calibre/gui2/update.py 2023-05-06 11:36:35.678461036 -0700
|
|
||||||
+++ calibre-6.17.0/src/calibre/gui2/update.py 2023-05-06 11:39:10.365134930 -0700
|
|
||||||
@@ -82,20 +82,6 @@
|
|
||||||
while not self.shutdown_event.is_set():
|
|
||||||
calibre_update_version = NO_CALIBRE_UPDATE
|
|
||||||
plugins_update_found = 0
|
|
||||||
- try:
|
|
||||||
- version = get_newest_version()
|
|
||||||
- if version[:2] > numeric_version[:2]:
|
|
||||||
- calibre_update_version = version
|
|
||||||
- except Exception as e:
|
|
||||||
- prints('Failed to check for calibre update:', as_unicode(e))
|
|
||||||
- try:
|
|
||||||
- update_plugins = get_plugin_updates_available(raise_error=True)
|
|
||||||
- if update_plugins is not None:
|
|
||||||
- plugins_update_found = len(update_plugins)
|
|
||||||
- except Exception as e:
|
|
||||||
- prints('Failed to check for plugin update:', as_unicode(e))
|
|
||||||
- if calibre_update_version != NO_CALIBRE_UPDATE or plugins_update_found > 0:
|
|
||||||
- self.signal.update_found.emit(calibre_update_version, plugins_update_found)
|
|
||||||
self.shutdown_event.wait(self.INTERVAL)
|
|
||||||
|
|
||||||
def shutdown(self):
|
|
||||||
|
|
|
@ -1,119 +0,0 @@
|
||||||
# Maintainer: Cowington Post <cowingtonpost@gmail.com>
|
|
||||||
pkgname=calibre
|
|
||||||
pkgver=8.4.0
|
|
||||||
pkgrel=0
|
|
||||||
pkgdesc="Ebook management application"
|
|
||||||
# qt6-webengine
|
|
||||||
arch="x86_64 aarch64"
|
|
||||||
url="https://calibre-ebook.com"
|
|
||||||
license="GPL-3.0-or-later"
|
|
||||||
depends="
|
|
||||||
font-liberation
|
|
||||||
libwmf
|
|
||||||
mtdev
|
|
||||||
optipng
|
|
||||||
poppler
|
|
||||||
py3-apsw
|
|
||||||
py3-beautifulsoup4
|
|
||||||
py3-css-parser
|
|
||||||
py3-cssselect
|
|
||||||
py3-dateutil
|
|
||||||
py3-dnspython
|
|
||||||
py3-feedparser
|
|
||||||
py3-fonttools
|
|
||||||
py3-html2text
|
|
||||||
py3-html5-parser
|
|
||||||
py3-html5lib
|
|
||||||
py3-jeepney
|
|
||||||
py3-lxml
|
|
||||||
py3-markdown
|
|
||||||
py3-mechanize
|
|
||||||
py3-msgpack
|
|
||||||
py3-netifaces
|
|
||||||
py3-pillow
|
|
||||||
py3-psutil
|
|
||||||
py3-pycryptodome
|
|
||||||
py3-pygments
|
|
||||||
py3-pyqt6-webengine
|
|
||||||
py3-regex
|
|
||||||
py3-xxhash
|
|
||||||
py3-zeroconf
|
|
||||||
qt6-qtimageformats
|
|
||||||
qt6-qtsvg
|
|
||||||
qt6-qtwebengine
|
|
||||||
qt6-qtbase-private-dev
|
|
||||||
udisks2
|
|
||||||
"
|
|
||||||
makedepends="
|
|
||||||
cmake
|
|
||||||
curl
|
|
||||||
hunspell-dev
|
|
||||||
hyphen-dev
|
|
||||||
libmtp-dev
|
|
||||||
libstemmer-dev
|
|
||||||
libusb-dev
|
|
||||||
podofo-dev
|
|
||||||
py3-pyqt-builder
|
|
||||||
py3-pyqt6-sip
|
|
||||||
py3-sip
|
|
||||||
python3-dev
|
|
||||||
qt6-qtbase-dev
|
|
||||||
uchardet-dev
|
|
||||||
xdg-utils
|
|
||||||
ffmpeg-dev
|
|
||||||
"
|
|
||||||
subpackages="
|
|
||||||
$pkgname-pyc
|
|
||||||
$pkgname-doc
|
|
||||||
$pkgname-bash-completion
|
|
||||||
$pkgname-zsh-completion
|
|
||||||
"
|
|
||||||
source="https://download.calibre-ebook.com/$pkgver/calibre-$pkgver.tar.xz
|
|
||||||
0001-$pkgname-no-update.patch
|
|
||||||
musl-pread.patch
|
|
||||||
"
|
|
||||||
# net: downloads iso-codes
|
|
||||||
# !check: no tests ran
|
|
||||||
options="net !check"
|
|
||||||
|
|
||||||
export LANG="en_US.UTF-8"
|
|
||||||
|
|
||||||
prepare() {
|
|
||||||
default_prepare
|
|
||||||
|
|
||||||
rm -f resources/calibre-portable.*
|
|
||||||
}
|
|
||||||
|
|
||||||
build() {
|
|
||||||
python3 setup.py build
|
|
||||||
python3 setup.py iso639
|
|
||||||
python3 setup.py iso3166
|
|
||||||
python3 setup.py liberation_fonts --system-liberation_fonts --path-to-liberation_fonts /usr/share/fonts/liberation
|
|
||||||
python3 setup.py mathjax
|
|
||||||
python3 setup.py gui
|
|
||||||
}
|
|
||||||
|
|
||||||
check() {
|
|
||||||
python3 -m unittest discover
|
|
||||||
}
|
|
||||||
|
|
||||||
package() {
|
|
||||||
# needed for zsh
|
|
||||||
mkdir -p "$pkgdir"/usr/share/zsh/site-functions
|
|
||||||
|
|
||||||
python3 setup.py install \
|
|
||||||
--staging-root="$pkgdir"/usr \
|
|
||||||
--system-plugins-location=/usr/share/calibre/system-plugins
|
|
||||||
|
|
||||||
cp -a man-pages/ "$pkgdir"/usr/share/man
|
|
||||||
|
|
||||||
rm -r "$pkgdir"/usr/share/calibre/rapydscript/
|
|
||||||
|
|
||||||
python3 -m compileall -fq "$pkgdir"/usr
|
|
||||||
}
|
|
||||||
|
|
||||||
sha512sums="
|
|
||||||
df998fa31b9e581739872a649669fccf29f34d3ac1b4d0a96c37e08a0b049b1357b56a2af25f2733936e78901dd61b38a24e536e107e7094ada7e60a5c2c56ab calibre-8.4.0.tar.xz
|
|
||||||
eb8e7ce40ff8b8daf6e7e55a5dff8ec4dff06c45744266bb48b3194e92ab1196bc91468203e3c2ca1e5144166a7d6be90e6cf0253513e761b56a4c85be4c2c76 0001-calibre-no-update.patch
|
|
||||||
d27d29c434a3d2df1b18125225a4d3762bf6fdba77385b377b18a7f325f29ae0b698974a39263f4f7aed8a368c87d0dc4446f488505b8e38664f8e9ee5b9bd12 musl-pread.patch
|
|
||||||
"
|
|
|
@ -1,11 +0,0 @@
|
||||||
--- a/src/calibre/utils/speedup.c
|
|
||||||
+++ b/src/calibre/utils/speedup.c
|
|
||||||
@@ -748,7 +748,7 @@
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
-#ifdef __linux__
|
|
||||||
+#ifdef __GLIBC__
|
|
||||||
ssize_t nr = pread64(fd, buf + pos, n - pos, offset);
|
|
||||||
#else
|
|
||||||
ssize_t nr = pread(fd, buf + pos, n - pos, offset);
|
|
|
@ -1,2 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
/usr/bin/electron "/usr/lib/caprine"
|
|
36
backports/coin/APKBUILD
Normal file
36
backports/coin/APKBUILD
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
# Contributor: Aiden Grossman <agrossman154@yahoo.com>
|
||||||
|
# Maintainer: Aiden Grossman <agrossman154@yahoo.com>
|
||||||
|
pkgname=coin
|
||||||
|
pkgver=4.0.0
|
||||||
|
pkgrel=5
|
||||||
|
pkgdesc="OpenGL OpenInventor compatible graphics library"
|
||||||
|
url="https://github.com/coin3d/coin"
|
||||||
|
license="BSD-3-Clause"
|
||||||
|
arch="all"
|
||||||
|
makedepends="boost-dev cmake glu-dev graphviz samurai"
|
||||||
|
subpackages="$pkgname-dev"
|
||||||
|
source="https://github.com/coin3d/coin/releases/download/Coin-$pkgver/coin-$pkgver-src.tar.gz
|
||||||
|
TestSuitePatch.patch
|
||||||
|
"
|
||||||
|
builddir="$srcdir/coin"
|
||||||
|
|
||||||
|
build() {
|
||||||
|
cmake -B build -G Ninja \
|
||||||
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
|
-DCMAKE_INSTALL_PREFIX=/usr \
|
||||||
|
-DCOIN_BUILD_TESTS=ON
|
||||||
|
cmake --build build
|
||||||
|
}
|
||||||
|
|
||||||
|
check() {
|
||||||
|
cmake --build build --target test
|
||||||
|
}
|
||||||
|
|
||||||
|
package() {
|
||||||
|
DESTDIR="$pkgdir" cmake --install build
|
||||||
|
}
|
||||||
|
|
||||||
|
sha512sums="
|
||||||
|
e036276a243bfe252569cee1b67d38b8633fcf35bdf4e366a92ca67e23799d54d91fe272c23b383c451d330cee284809f28f237857493948149e0da1ebd64fae coin-4.0.0-src.tar.gz
|
||||||
|
aab464244b13371badf0878e5bfbcce859a42756cf8c7657d1480318aa291d296eac2741219c346bae056f761c5f46857f8fd1ec1c4129f86bc10236d3869deb TestSuitePatch.patch
|
||||||
|
"
|
11
backports/coin/TestSuitePatch.patch
Normal file
11
backports/coin/TestSuitePatch.patch
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
--- ./testsuite/TestSuiteUtils.cpp
|
||||||
|
+++ ./testsuite/TestSuiteUtils.cpp
|
||||||
|
@@ -39,7 +39,7 @@
|
||||||
|
#elif defined(_WIN32)
|
||||||
|
#define USE_WIN32
|
||||||
|
#else //_WIN32
|
||||||
|
-#error Unknown system
|
||||||
|
+#define USE_POSIX
|
||||||
|
#endif //POSIX
|
||||||
|
|
||||||
|
#include <Inventor/errors/SoDebugError.h>
|
73
backports/cura/APKBUILD
Normal file
73
backports/cura/APKBUILD
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
# Contributor: Anjandev Momi <anjan@momi.ca>
|
||||||
|
# Maintainer: Anjandev Momi <anjan@momi.ca>
|
||||||
|
pkgname=cura
|
||||||
|
# uranium and curaengine packages must be updated in sync with this verion number
|
||||||
|
# py3-pynest2d and fdm-materials should be checked as well, but their versions are not always in sync
|
||||||
|
pkgver=5.2.2
|
||||||
|
pkgrel=0
|
||||||
|
pkgdesc="3D printer / slicing GUI built on top of the Uranium framework"
|
||||||
|
url="https://ultimaker.com/software/ultimaker-cura"
|
||||||
|
arch="noarch !ppc64le !x86 !armhf !riscv64 !s390x !armv7" # ppc64le: no py3-keyring
|
||||||
|
# x86: no curaengine
|
||||||
|
# armhf: no uranium, qt5-qtquickcontrols, qt5-qtquickcontrols2, qt5-qtgraphicaleffects
|
||||||
|
# riscv64: no uranium
|
||||||
|
# s390x: no py3-trimesh, no py3-numpy-stl
|
||||||
|
# armv7: no py3-trimesh
|
||||||
|
license="LGPL-3.0-or-later"
|
||||||
|
# add cura-binary-data to depends when packaged
|
||||||
|
depends="
|
||||||
|
curaengine
|
||||||
|
fdm-materials
|
||||||
|
uranium
|
||||||
|
py3-arcus
|
||||||
|
py3-keyring
|
||||||
|
py3-numpy-stl
|
||||||
|
py3-pyclipper
|
||||||
|
py3-pynest2d
|
||||||
|
py3-pyserial
|
||||||
|
py3-qt6
|
||||||
|
py3-requests
|
||||||
|
py3-trimesh
|
||||||
|
py3-zeroconf
|
||||||
|
"
|
||||||
|
makedepends="samurai cmake gettext gettext-dev" # needs msginit from gettext
|
||||||
|
checkdepends="py3-pytest"
|
||||||
|
subpackages="$pkgname-lang"
|
||||||
|
source="$pkgname-$pkgver.tar.gz::https://github.com/Ultimaker/Cura/archive/refs/tags/$pkgver.tar.gz
|
||||||
|
AppDesktopData.patch
|
||||||
|
CuraVersion.patch
|
||||||
|
cmake-helpers.patch
|
||||||
|
cmake.patch"
|
||||||
|
builddir="$srcdir/Cura-$pkgver"
|
||||||
|
options="!check" # tests broken after v5.x
|
||||||
|
|
||||||
|
build() {
|
||||||
|
cmake -B build -G Ninja \
|
||||||
|
-DCURA_VERSION=$pkgver \
|
||||||
|
-DURANIUM_DIR=/usr/share/uranium \
|
||||||
|
-DCMAKE_INSTALL_PREFIX=/usr \
|
||||||
|
-DCMAKE_INSTALL_LIBDIR=lib \
|
||||||
|
-DGETTEXT_MSGINIT_EXECUTABLE=msginit \
|
||||||
|
-DCURA_BINARY_DATA_DIRECTORY=/usr/share/cura \
|
||||||
|
-DCMAKE_BUILD_TYPE=minsizerel
|
||||||
|
cmake --build build
|
||||||
|
}
|
||||||
|
|
||||||
|
package() {
|
||||||
|
DESTDIR="$pkgdir" cmake --install build
|
||||||
|
mv $pkgdir/usr/bin/cura_app.py $pkgdir/usr/bin/cura
|
||||||
|
|
||||||
|
# don't ever send any user or print info through the internet to Ultimaker
|
||||||
|
rm -rf "$pkgdir/usr/lib/cura/plugins/SliceInfoPlugin"
|
||||||
|
|
||||||
|
install -d "$pkgdir"/usr/share/locale
|
||||||
|
mv "$pkgdir"/usr/share/cura/resources/i18n/* "$pkgdir"/usr/share/locale/
|
||||||
|
}
|
||||||
|
|
||||||
|
sha512sums="
|
||||||
|
5d4e0fdc740d0c048905e2b87cc8c73eedea59b54766b74760505902007b365582d22b46b1cfdcd6914828840865c10a3beb0ef6a1f04ea181c81d44f42434bc cura-5.2.2.tar.gz
|
||||||
|
214e373f6cab7e3ccac12c96d1b5ca636d8d1e9ecdadaae84fc28fb429969c7c2d6055ce2a01b6db3ad85ab6cbc8d135cf2c26c77d7cfe13a73eb81aa5e85f11 AppDesktopData.patch
|
||||||
|
e3bb302db70ca195b2ce9831e71302c8ee2a51955fecc7264a495d7d4fc9c107cfd48811aa5865f16671e7b1ae126f95d3d7bbb6a70f367f7f91a2b32bce377b CuraVersion.patch
|
||||||
|
0db4ff97e7f82ae1a9dbc9c330d08c3e46249feeb3fb630f7c4e2de73749327337ec041680c39a07e0b5034c1b3f3656d75614ab4dc2f39861c8e27bdb2a58ef cmake-helpers.patch
|
||||||
|
05a73f892700ff6279230385b04180873a62b7413fa7f7d55ae150f1bcee57ef05eda0bd7fe444fe660ab66a044c958f42badd33b743fca81033ae8f19dd3805 cmake.patch
|
||||||
|
"
|
58
backports/cura/AppDesktopData.patch
Normal file
58
backports/cura/AppDesktopData.patch
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
--- /dev/null
|
||||||
|
+++ ./com.ultimaker.cura.appdata.xml
|
||||||
|
@@ -0,0 +1,33 @@
|
||||||
|
+<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
+<!-- Copyright 2016 Richard Hughes <richard@hughsie.com> -->
|
||||||
|
+<component type="desktop">
|
||||||
|
+ <id>com.ultimaker.cura.desktop</id>
|
||||||
|
+ <metadata_license>CC0-1.0</metadata_license>
|
||||||
|
+ <project_license>LGPL-3.0 and CC-BY-SA-4.0</project_license>
|
||||||
|
+ <name>Cura</name>
|
||||||
|
+ <summary>The world's most advanced 3d printer software</summary>
|
||||||
|
+ <description>
|
||||||
|
+ <p>
|
||||||
|
+ Cura creates a seamless integration between hardware, software and
|
||||||
|
+ materials for the best 3D printing experience around.
|
||||||
|
+ Cura supports the 3MF, OBJ and STL file formats and is available on
|
||||||
|
+ Windows, Mac and Linux.
|
||||||
|
+ </p>
|
||||||
|
+ <ul>
|
||||||
|
+ <li>Novices can start printing right away</li>
|
||||||
|
+ <li>Experts are able to customize 300 settings to achieve the best results</li>
|
||||||
|
+ <li>Optimized profiles for Ultimaker materials</li>
|
||||||
|
+ <li>Supported by a global network of Ultimaker certified service partners</li>
|
||||||
|
+ <li>Print multiple objects at once with different settings for each object</li>
|
||||||
|
+ <li>Cura supports STL, 3MF and OBJ file formats</li>
|
||||||
|
+ <li>Open source and completely free</li>
|
||||||
|
+ </ul>
|
||||||
|
+ </description>
|
||||||
|
+ <screenshots>
|
||||||
|
+ <screenshot type="default">
|
||||||
|
+ <image>https://raw.githubusercontent.com/Ultimaker/Cura/master/screenshot.png</image>
|
||||||
|
+ </screenshot>
|
||||||
|
+ </screenshots>
|
||||||
|
+ <url type="homepage">https://ultimaker.com/software/ultimaker-cura?utm_source=cura&utm_medium=software&utm_campaign=cura-update-linux</url>
|
||||||
|
+ <translation type="gettext">Cura</translation>
|
||||||
|
+</component>
|
||||||
|
--- /dev/null
|
||||||
|
+++ ./com.ultimaker.cura.desktop.in
|
||||||
|
@@ -0,0 +1,19 @@
|
||||||
|
+[Desktop Entry]
|
||||||
|
+Name=Ultimaker Cura
|
||||||
|
+Name[de]=Ultimaker Cura
|
||||||
|
+Name[nl]=Ultimaker Cura
|
||||||
|
+GenericName=3D Printing Software
|
||||||
|
+GenericName[de]=3D-Druck-Software
|
||||||
|
+GenericName[nl]=3D-printsoftware
|
||||||
|
+Comment=Cura converts 3D models into paths for a 3D printer. It prepares your print for maximum accuracy, minimum printing time and good reliability with many extra features that make your print come out great.
|
||||||
|
+Comment[de]=Cura wandelt 3D-Modelle in Pfade für einen 3D-Drucker um. Es bereitet Ihren Druck für maximale Genauigkeit, minimale Druckzeit und guter Zuverlässigkeit mit vielen zusätzlichen Funktionen vor, damit Ihr Druck großartig wird.
|
||||||
|
+Comment[nl]=Cura converteert 3D-modellen naar paden voor een 3D printer. Het bereidt je print voor om zeer precies, snel en betrouwbaar te kunnen printen, met veel extra functionaliteit om je print er goed uit te laten komen.
|
||||||
|
+Exec=@CMAKE_INSTALL_FULL_BINDIR@/cura %F
|
||||||
|
+TryExec=@CMAKE_INSTALL_FULL_BINDIR@/cura
|
||||||
|
+Icon=cura-icon
|
||||||
|
+Terminal=false
|
||||||
|
+Type=Application
|
||||||
|
+MimeType=model/stl;application/vnd.ms-3mfdocument;application/prs.wavefront-obj;image/bmp;image/gif;image/jpeg;image/png;text/x-gcode;application/x-amf;application/x-ply;application/x-ctm;model/vnd.collada+xml;model/gltf-binary;model/gltf+json;model/vnd.collada+xml+zip;
|
||||||
|
+Categories=Graphics;
|
||||||
|
+Keywords=3D;Printing;Slicer;
|
||||||
|
+StartupWMClass=cura.real
|
16
backports/cura/CuraVersion.patch
Normal file
16
backports/cura/CuraVersion.patch
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
--- /dev/null
|
||||||
|
+++ ./cura/CuraVersion.py.in
|
||||||
|
@@ -0,0 +1,13 @@
|
||||||
|
+# Copyright (c) 2020 Ultimaker B.V.
|
||||||
|
+# Cura is released under the terms of the LGPLv3 or higher.
|
||||||
|
+
|
||||||
|
+CuraAppName = "@CURA_APP_NAME@"
|
||||||
|
+CuraAppDisplayName = "@CURA_APP_DISPLAY_NAME@"
|
||||||
|
+CuraVersion = "@CURA_VERSION@"
|
||||||
|
+CuraBuildType = "@CURA_BUILDTYPE@"
|
||||||
|
+CuraDebugMode = True if "@_cura_debugmode@" == "ON" else False
|
||||||
|
+CuraCloudAPIRoot = "@CURA_CLOUD_API_ROOT@"
|
||||||
|
+CuraCloudAPIVersion = "@CURA_CLOUD_API_VERSION@"
|
||||||
|
+CuraCloudAccountAPIRoot = "@CURA_CLOUD_ACCOUNT_API_ROOT@"
|
||||||
|
+CuraMarketplaceRoot = "@CURA_MARKETPLACE_ROOT@"
|
||||||
|
+CuraDigitalFactoryURL = "@CURA_DIGITAL_FACTORY_URL@"
|
95
backports/cura/cmake-helpers.patch
Normal file
95
backports/cura/cmake-helpers.patch
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
--- /dev/null
|
||||||
|
+++ ./cmake/CuraPluginInstall.cmake
|
||||||
|
@@ -0,0 +1,92 @@
|
||||||
|
+# Copyright (c) 2022 Ultimaker B.V.
|
||||||
|
+# CuraPluginInstall.cmake is released under the terms of the LGPLv3 or higher.
|
||||||
|
+
|
||||||
|
+#
|
||||||
|
+# This module detects all plugins that need to be installed and adds them using the CMake install() command.
|
||||||
|
+# It detects all plugin folder in the path "plugins/*" where there's a "plugin.json" in it.
|
||||||
|
+#
|
||||||
|
+# Plugins can be configured to NOT BE INSTALLED via the variable "CURA_NO_INSTALL_PLUGINS" as a list of string in the
|
||||||
|
+# form of "a;b;c" or "a,b,c". By default all plugins will be installed.
|
||||||
|
+#
|
||||||
|
+
|
||||||
|
+option(PRINT_PLUGIN_LIST "Should the list of plugins that are installed be printed?" ON)
|
||||||
|
+
|
||||||
|
+# Options or configuration variables
|
||||||
|
+set(CURA_NO_INSTALL_PLUGINS "" CACHE STRING "A list of plugins that should not be installed, separated with ';' or ','.")
|
||||||
|
+
|
||||||
|
+file(GLOB_RECURSE _plugin_json_list ${CMAKE_SOURCE_DIR}/plugins/*/plugin.json)
|
||||||
|
+list(LENGTH _plugin_json_list _plugin_json_list_len)
|
||||||
|
+
|
||||||
|
+# Sort the lists alphabetically so we can handle cases like this:
|
||||||
|
+# - plugins/my_plugin/plugin.json
|
||||||
|
+# - plugins/my_plugin/my_module/plugin.json
|
||||||
|
+# In this case, only "plugins/my_plugin" should be added via install().
|
||||||
|
+set(_no_install_plugin_list ${CURA_NO_INSTALL_PLUGINS})
|
||||||
|
+# Sanitize the string so the comparison will be case-insensitive.
|
||||||
|
+string(STRIP "${_no_install_plugin_list}" _no_install_plugin_list)
|
||||||
|
+string(TOLOWER "${_no_install_plugin_list}" _no_install_plugin_list)
|
||||||
|
+
|
||||||
|
+# WORKAROUND counterpart of what's in cura-build.
|
||||||
|
+string(REPLACE "," ";" _no_install_plugin_list "${_no_install_plugin_list}")
|
||||||
|
+
|
||||||
|
+list(LENGTH _no_install_plugin_list _no_install_plugin_list_len)
|
||||||
|
+
|
||||||
|
+if(_no_install_plugin_list_len GREATER 0)
|
||||||
|
+ list(SORT _no_install_plugin_list)
|
||||||
|
+endif()
|
||||||
|
+if(_plugin_json_list_len GREATER 0)
|
||||||
|
+ list(SORT _plugin_json_list)
|
||||||
|
+endif()
|
||||||
|
+
|
||||||
|
+# Check all plugin directories and add them via install() if needed.
|
||||||
|
+set(_install_plugin_list "")
|
||||||
|
+foreach(_plugin_json_path ${_plugin_json_list})
|
||||||
|
+ get_filename_component(_plugin_dir ${_plugin_json_path} DIRECTORY)
|
||||||
|
+ file(RELATIVE_PATH _rel_plugin_dir ${CMAKE_CURRENT_SOURCE_DIR} ${_plugin_dir})
|
||||||
|
+ get_filename_component(_plugin_dir_name ${_plugin_dir} NAME)
|
||||||
|
+
|
||||||
|
+ # Make plugin name comparison case-insensitive
|
||||||
|
+ string(TOLOWER "${_plugin_dir_name}" _plugin_dir_name_lowercase)
|
||||||
|
+
|
||||||
|
+ # Check if this plugin needs to be skipped for installation
|
||||||
|
+ set(_add_plugin ON) # Indicates if this plugin should be added to the build or not.
|
||||||
|
+ set(_is_no_install_plugin OFF) # If this plugin will not be added, this indicates if it's because the plugin is
|
||||||
|
+ # specified in the NO_INSTALL_PLUGINS list.
|
||||||
|
+ if(_no_install_plugin_list)
|
||||||
|
+ if("${_plugin_dir_name_lowercase}" IN_LIST _no_install_plugin_list)
|
||||||
|
+ set(_add_plugin OFF)
|
||||||
|
+ set(_is_no_install_plugin ON)
|
||||||
|
+ endif()
|
||||||
|
+ endif()
|
||||||
|
+
|
||||||
|
+ # Make sure this is not a subdirectory in a plugin that's already in the install list
|
||||||
|
+ if(_add_plugin)
|
||||||
|
+ foreach(_known_install_plugin_dir ${_install_plugin_list})
|
||||||
|
+ if(_plugin_dir MATCHES "${_known_install_plugin_dir}.+")
|
||||||
|
+ set(_add_plugin OFF)
|
||||||
|
+ break()
|
||||||
|
+ endif()
|
||||||
|
+ endforeach()
|
||||||
|
+ endif()
|
||||||
|
+
|
||||||
|
+ if(_add_plugin)
|
||||||
|
+ if(${PRINT_PLUGIN_LIST})
|
||||||
|
+ message(STATUS "[+] PLUGIN TO INSTALL: ${_rel_plugin_dir}")
|
||||||
|
+ endif()
|
||||||
|
+ get_filename_component(_rel_plugin_parent_dir ${_rel_plugin_dir} DIRECTORY)
|
||||||
|
+ install(DIRECTORY ${_rel_plugin_dir}
|
||||||
|
+ DESTINATION lib${LIB_SUFFIX}/cura/${_rel_plugin_parent_dir}
|
||||||
|
+ PATTERN "__pycache__" EXCLUDE
|
||||||
|
+ PATTERN "*.qmlc" EXCLUDE
|
||||||
|
+ )
|
||||||
|
+ list(APPEND _install_plugin_list ${_plugin_dir})
|
||||||
|
+ elseif(_is_no_install_plugin)
|
||||||
|
+ if(${PRINT_PLUGIN_LIST})
|
||||||
|
+ message(STATUS "[-] PLUGIN TO REMOVE : ${_rel_plugin_dir}")
|
||||||
|
+ endif()
|
||||||
|
+ execute_process(COMMAND ${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/mod_bundled_packages_json.py
|
||||||
|
+ -d ${CMAKE_CURRENT_SOURCE_DIR}/resources/bundled_packages
|
||||||
|
+ ${_plugin_dir_name}
|
||||||
|
+ RESULT_VARIABLE _mod_json_result)
|
||||||
|
+ endif()
|
||||||
|
+endforeach()
|
85
backports/cura/cmake.patch
Normal file
85
backports/cura/cmake.patch
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
--- ./CMakeLists.txt.orig
|
||||||
|
+++ ./CMakeLists.txt
|
||||||
|
@@ -1,10 +1,6 @@
|
||||||
|
# Copyright (c) 2022 Ultimaker B.V.
|
||||||
|
# Cura is released under the terms of the LGPLv3 or higher.
|
||||||
|
|
||||||
|
-# NOTE: This is only being used for translation scripts.
|
||||||
|
-
|
||||||
|
-# For MSVC flags, will be ignored on non-Windows OS's and this project in general. Only needed for cura-build-environment.
|
||||||
|
-cmake_policy(SET CMP0091 NEW)
|
||||||
|
project(cura)
|
||||||
|
cmake_minimum_required(VERSION 3.18)
|
||||||
|
|
||||||
|
@@ -15,8 +11,44 @@
|
||||||
|
set(URANIUM_DIR "${CMAKE_SOURCE_DIR}/../Uranium" CACHE PATH "The location of the Uranium repository")
|
||||||
|
set(URANIUM_SCRIPTS_DIR "${URANIUM_DIR}/scripts" CACHE PATH "The location of the scripts directory of the Uranium repository")
|
||||||
|
|
||||||
|
+option(CURA_DEBUGMODE "Enable debug dialog and other debug features" OFF)
|
||||||
|
+if(CURA_DEBUGMODE)
|
||||||
|
+ set(_cura_debugmode "ON")
|
||||||
|
+endif()
|
||||||
|
+
|
||||||
|
option(GENERATE_TRANSLATIONS "Should the translations be generated?" ON)
|
||||||
|
|
||||||
|
+set(CURA_APP_NAME "cura" CACHE STRING "Short name of Cura, used for configuration folder")
|
||||||
|
+set(CURA_APP_DISPLAY_NAME "Ultimaker Cura" CACHE STRING "Display name of Cura")
|
||||||
|
+set(CURA_VERSION "master" CACHE STRING "Version name of Cura")
|
||||||
|
+set(CURA_BUILDTYPE "" CACHE STRING "Build type of Cura, eg. 'PPA'")
|
||||||
|
+set(CURA_CLOUD_API_ROOT "" CACHE STRING "Alternative Cura cloud API root")
|
||||||
|
+set(CURA_CLOUD_API_VERSION "" CACHE STRING "Alternative Cura cloud API version")
|
||||||
|
+set(CURA_CLOUD_ACCOUNT_API_ROOT "" CACHE STRING "Alternative Cura cloud account API version")
|
||||||
|
+set(CURA_MARKETPLACE_ROOT "" CACHE STRING "Alternative Marketplace location")
|
||||||
|
+set(CURA_DIGITAL_FACTORY_URL "" CACHE STRING "Alternative Digital Factory location")
|
||||||
|
+
|
||||||
|
+configure_file(${CMAKE_SOURCE_DIR}/com.ultimaker.cura.desktop.in ${CMAKE_BINARY_DIR}/com.ultimaker.cura.desktop @ONLY)
|
||||||
|
+
|
||||||
|
+configure_file(cura/CuraVersion.py.in CuraVersion.py @ONLY)
|
||||||
|
+
|
||||||
|
+if(NOT DEFINED Python_VERSION)
|
||||||
|
+ set(Python_VERSION
|
||||||
|
+ 3.11
|
||||||
|
+ CACHE STRING "Python Version" FORCE)
|
||||||
|
+ message(STATUS "Setting Python version to ${Python_VERSION}. Set Python_VERSION if you want to compile against an other version.")
|
||||||
|
+endif()
|
||||||
|
+if(APPLE)
|
||||||
|
+ set(Python_FIND_FRAMEWORK NEVER)
|
||||||
|
+endif()
|
||||||
|
+find_package(Python ${Python_VERSION} EXACT REQUIRED COMPONENTS Interpreter)
|
||||||
|
+message(STATUS "Linking and building ${project_name} against Python ${Python_VERSION}")
|
||||||
|
+if(NOT DEFINED Python_SITELIB_LOCAL)
|
||||||
|
+ set(Python_SITELIB_LOCAL
|
||||||
|
+ "${Python_SITELIB}"
|
||||||
|
+ CACHE PATH "Local alternative site-package location to install Cura" FORCE)
|
||||||
|
+endif()
|
||||||
|
+
|
||||||
|
if(NOT ${URANIUM_DIR} STREQUAL "")
|
||||||
|
set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${URANIUM_DIR}/cmake")
|
||||||
|
endif()
|
||||||
|
@@ -29,4 +61,24 @@
|
||||||
|
if(${GENERATE_TRANSLATIONS})
|
||||||
|
CREATE_TRANSLATION_TARGETS()
|
||||||
|
endif()
|
||||||
|
-endif()
|
||||||
|
\ No newline at end of file
|
||||||
|
+endif()
|
||||||
|
+
|
||||||
|
+install(DIRECTORY resources DESTINATION ${CMAKE_INSTALL_DATADIR}/cura)
|
||||||
|
+
|
||||||
|
+include(CuraPluginInstall)
|
||||||
|
+
|
||||||
|
+install(FILES cura_app.py DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||||
|
+ PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
|
||||||
|
+install(DIRECTORY cura DESTINATION "${Python_SITELIB_LOCAL}")
|
||||||
|
+install(FILES ${CMAKE_BINARY_DIR}/CuraVersion.py DESTINATION "${Python_SITELIB_LOCAL}/cura/")
|
||||||
|
+if(NOT APPLE AND NOT WIN32)
|
||||||
|
+ install(FILES ${CMAKE_BINARY_DIR}/com.ultimaker.cura.desktop
|
||||||
|
+ DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
|
||||||
|
+ install(FILES ${CMAKE_SOURCE_DIR}/resources/images/cura-icon.png
|
||||||
|
+ DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/128x128/apps/)
|
||||||
|
+ install(FILES com.ultimaker.cura.appdata.xml
|
||||||
|
+ DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo)
|
||||||
|
+ install(FILES cura.sharedmimeinfo
|
||||||
|
+ DESTINATION ${CMAKE_INSTALL_DATADIR}/mime/packages/
|
||||||
|
+ RENAME cura.xml )
|
||||||
|
+endif()
|
26
backports/dex/APKBUILD
Normal file
26
backports/dex/APKBUILD
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
# Contributor: Anjandev Momi <anjan@momi.ca>
|
||||||
|
# Maintainer: Anjandev Momi <anjan@momi.ca>
|
||||||
|
pkgname=dex
|
||||||
|
pkgver=0.9.0
|
||||||
|
pkgrel=0
|
||||||
|
pkgdesc="program to generate and execute DesktopEntry files of the Application type"
|
||||||
|
url="https://github.com/jceb/dex"
|
||||||
|
arch="all"
|
||||||
|
license="GPL-3.0-or-later"
|
||||||
|
depends="python3"
|
||||||
|
makedepends="py3-sphinx"
|
||||||
|
subpackages="$pkgname-doc"
|
||||||
|
source="$pkgname-$pkgver.tar.gz::https://github.com/jceb/dex/archive/refs/tags/v$pkgver.tar.gz"
|
||||||
|
options="!check" # no testsuite
|
||||||
|
|
||||||
|
build() {
|
||||||
|
make
|
||||||
|
}
|
||||||
|
|
||||||
|
package() {
|
||||||
|
make install PREFIX=/usr DESTDIR="$pkgdir"
|
||||||
|
}
|
||||||
|
|
||||||
|
sha512sums="
|
||||||
|
d68f5482cb0948f27a724437ddfc6de9a0f502bfd0d5c60c76fb85dda3c30e4c432013e530f6a91138c9ac9ff36b3824cd5e382e9d29bb9fb2ec2b9de4133094 dex-0.9.0.tar.gz
|
||||||
|
"
|
|
@ -1,7 +1,7 @@
|
||||||
# Contributor: lauren n. liberda <lauren@selfisekai.rocks>
|
# Contributor: lauren n. liberda <lauren@selfisekai.rocks>
|
||||||
# Maintainer: lauren n. liberda <lauren@selfisekai.rocks>
|
# Maintainer: lauren n. liberda <lauren@selfisekai.rocks>
|
||||||
pkgname=electron-tasje
|
pkgname=electron-tasje
|
||||||
pkgver=0.7.3
|
pkgver=0.7.0
|
||||||
pkgrel=0
|
pkgrel=0
|
||||||
pkgdesc="Tiny replacement for electron-builder"
|
pkgdesc="Tiny replacement for electron-builder"
|
||||||
url="https://codeberg.org/selfisekai/electron_tasje/"
|
url="https://codeberg.org/selfisekai/electron_tasje/"
|
||||||
|
@ -31,5 +31,5 @@ package() {
|
||||||
}
|
}
|
||||||
|
|
||||||
sha512sums="
|
sha512sums="
|
||||||
251b7eabe74acdb5c7394f9d4d735b736acf555352785a9896ddaeed37632b238e823e1bb639e1f5a44a50455957ec41e1a585a3b2a9919b5818bb40843bd877 electron_tasje-0.7.3.tar.gz
|
1f77dc8a5639c5e61952172b1b30c84cce41b5763d5ce96fa8fb2a02f8f8197a87dd3d9c047a90951d8ddc6f1542d8b0f8c33a3dad233d0868b82f19a765731d electron_tasje-0.7.0.tar.gz
|
||||||
"
|
"
|
||||||
|
|
|
@ -1,730 +0,0 @@
|
||||||
From c854a92a215d0cf39c704bbadd3611e552073d5f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Collin Baker <collinbaker@chromium.org>
|
|
||||||
Date: Fri, 4 Apr 2025 14:08:18 -0700
|
|
||||||
Subject: [PATCH] Reland "Use #[global_allocator] to provide Rust allocator
|
|
||||||
implementation"
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
This is a reland of commit cfa3beef52625e03ba6ce2b2ac98e1b89dde5cdb
|
|
||||||
|
|
||||||
Original was reverted due to a cronet gn2bp failure. The script
|
|
||||||
filtered out GN rules in //build/rust/std, but this caused an exception
|
|
||||||
when //build/rust/std:allocator was referenced later.
|
|
||||||
|
|
||||||
Moving the rules to //build/rust/allocator sidesteps the issue.
|
|
||||||
|
|
||||||
Original change's description:
|
|
||||||
> Use #[global_allocator] to provide Rust allocator implementation
|
|
||||||
>
|
|
||||||
> The allocator shim hack we have been using no longer works with
|
|
||||||
> upstream Rust. Replace it with a less-unsupported method: provide a
|
|
||||||
> https://github.com/rust-lang/rust/issues/123015, which still requires
|
|
||||||
> us to provide a few symbol definitions.
|
|
||||||
>
|
|
||||||
> Bug: 408221149, 407024458
|
|
||||||
> Change-Id: If1808ca24b12dc80ead35a25521313a3d2e148d5
|
|
||||||
>
|
|
||||||
> Cq-Include-Trybots: luci.chromium.try:android-rust-arm32-rel,android-rust-arm64-dbg,android-rust-arm64-rel,linux-rust-x64-dbg,linux-rust-x64-rel,mac-rust-x64-dbg,win-rust-x64-dbg,win-rust-x64-rel
|
|
||||||
> Change-Id: If1808ca24b12dc80ead35a25521313a3d2e148d5
|
|
||||||
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6427855
|
|
||||||
> Reviewed-by: Alan Zhao <ayzhao@google.com>
|
|
||||||
> Reviewed-by: Lei Zhang <thestig@chromium.org>
|
|
||||||
> Reviewed-by: Łukasz Anforowicz <lukasza@chromium.org>
|
|
||||||
> Commit-Queue: Collin Baker <collinbaker@chromium.org>
|
|
||||||
> Auto-Submit: Collin Baker <collinbaker@chromium.org>
|
|
||||||
> Cr-Commit-Position: refs/heads/main@{#1442472}
|
|
||||||
|
|
||||||
Bug: 408221149, 407024458
|
|
||||||
Cq-Include-Trybots: luci.chromium.try:android-rust-arm32-rel,android-rust-arm64-dbg,android-rust-arm64-rel,linux-rust-x64-dbg,linux-rust-x64-rel,mac-rust-x64-dbg,win-rust-x64-dbg,win-rust-x64-rel
|
|
||||||
Change-Id: I36fef217297bfe64ae81519be24b8c653f6fdfa1
|
|
||||||
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6432410
|
|
||||||
Reviewed-by: Mohannad Farrag <aymanm@google.com>
|
|
||||||
Reviewed-by: Łukasz Anforowicz <lukasza@chromium.org>
|
|
||||||
Auto-Submit: Collin Baker <collinbaker@chromium.org>
|
|
||||||
Commit-Queue: Łukasz Anforowicz <lukasza@chromium.org>
|
|
||||||
Cr-Commit-Position: refs/heads/main@{#1442922}
|
|
||||||
---
|
|
||||||
build/rust/allocator/BUILD.gn | 90 ++++++++++++++++
|
|
||||||
build/rust/{std => allocator}/alias.cc | 4 +-
|
|
||||||
build/rust/{std => allocator}/alias.h | 6 +-
|
|
||||||
.../allocator_impls.cc} | 100 ++++++++----------
|
|
||||||
build/rust/allocator/allocator_impls.h | 25 +++++
|
|
||||||
.../allocator/allocator_shim_definitions.cc | 30 ++++++
|
|
||||||
.../{std => allocator}/compiler_specific.h | 6 +-
|
|
||||||
.../rust/{std => allocator}/immediate_crash.h | 6 +-
|
|
||||||
build/rust/allocator/lib.rs | 48 +++++++++
|
|
||||||
build/rust/cargo_crate.gni | 9 ++
|
|
||||||
build/rust/rust_macro.gni | 3 +
|
|
||||||
build/rust/rust_target.gni | 4 +
|
|
||||||
build/rust/std/BUILD.gn | 41 -------
|
|
||||||
components/cronet/android/dependencies.txt | 1 +
|
|
||||||
third_party/breakpad/BUILD.gn | 10 +-
|
|
||||||
15 files changed, 272 insertions(+), 111 deletions(-)
|
|
||||||
create mode 100644 build/rust/allocator/BUILD.gn
|
|
||||||
rename build/rust/{std => allocator}/alias.cc (87%)
|
|
||||||
rename build/rust/{std => allocator}/alias.h (91%)
|
|
||||||
rename build/rust/{std/remap_alloc.cc => allocator/allocator_impls.cc} (67%)
|
|
||||||
create mode 100644 build/rust/allocator/allocator_impls.h
|
|
||||||
create mode 100644 build/rust/allocator/allocator_shim_definitions.cc
|
|
||||||
rename build/rust/{std => allocator}/compiler_specific.h (87%)
|
|
||||||
rename build/rust/{std => allocator}/immediate_crash.h (97%)
|
|
||||||
create mode 100644 build/rust/allocator/lib.rs
|
|
||||||
|
|
||||||
diff --git a/build/rust/allocator/BUILD.gn b/build/rust/allocator/BUILD.gn
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000000000..06aa47f097c9c
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/build/rust/allocator/BUILD.gn
|
|
||||||
@@ -0,0 +1,90 @@
|
|
||||||
+# Copyright 2025 The Chromium Authors
|
|
||||||
+# Use of this source code is governed by a BSD-style license that can be
|
|
||||||
+# found in the LICENSE file.
|
|
||||||
+
|
|
||||||
+import("//build/buildflag_header.gni")
|
|
||||||
+import("//build/config/rust.gni")
|
|
||||||
+import("//build/rust/rust_static_library.gni")
|
|
||||||
+
|
|
||||||
+rust_allocator_uses_partition_alloc = false
|
|
||||||
+if (build_with_chromium) {
|
|
||||||
+ import("//base/allocator/partition_allocator/partition_alloc.gni")
|
|
||||||
+ rust_allocator_uses_partition_alloc = use_partition_alloc_as_malloc
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+buildflag_header("buildflags") {
|
|
||||||
+ header = "buildflags.h"
|
|
||||||
+ flags = [
|
|
||||||
+ "RUST_ALLOCATOR_USES_PARTITION_ALLOC=$rust_allocator_uses_partition_alloc",
|
|
||||||
+ ]
|
|
||||||
+ visibility = [ ":*" ]
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+if (toolchain_has_rust) {
|
|
||||||
+ # All targets which depend on Rust code but are not linked by rustc must
|
|
||||||
+ # depend on this. Usually, this dependency will come from the rust_target() GN
|
|
||||||
+ # template. However, cargo_crate() does *not* include this dependency so any
|
|
||||||
+ # C++ targets which directly depend on a cargo_crate() must depend on this.
|
|
||||||
+ rust_static_library("allocator") {
|
|
||||||
+ sources = [ "lib.rs" ]
|
|
||||||
+ crate_root = "lib.rs"
|
|
||||||
+ cxx_bindings = [ "lib.rs" ]
|
|
||||||
+
|
|
||||||
+ deps = [
|
|
||||||
+ ":allocator_impls",
|
|
||||||
+ ":allocator_shim_definitions",
|
|
||||||
+ ]
|
|
||||||
+
|
|
||||||
+ no_chromium_prelude = true
|
|
||||||
+ no_allocator_crate = true
|
|
||||||
+ allow_unsafe = true
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ static_library("allocator_impls") {
|
|
||||||
+ public_deps = []
|
|
||||||
+ if (rust_allocator_uses_partition_alloc) {
|
|
||||||
+ public_deps += [ "//base/allocator/partition_allocator:partition_alloc" ]
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ sources = [
|
|
||||||
+ "allocator_impls.cc",
|
|
||||||
+ "allocator_impls.h",
|
|
||||||
+ ]
|
|
||||||
+
|
|
||||||
+ deps = [
|
|
||||||
+ ":allocator_cpp_shared",
|
|
||||||
+ ":buildflags",
|
|
||||||
+
|
|
||||||
+ # TODO(crbug.com/408221149): remove the C++ -> Rust dependency for the
|
|
||||||
+ # default allocator.
|
|
||||||
+ "//build/rust/std",
|
|
||||||
+ ]
|
|
||||||
+
|
|
||||||
+ visibility = [ ":*" ]
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ source_set("allocator_shim_definitions") {
|
|
||||||
+ sources = [ "allocator_shim_definitions.cc" ]
|
|
||||||
+
|
|
||||||
+ deps = [ ":allocator_cpp_shared" ]
|
|
||||||
+
|
|
||||||
+ visibility = [ ":*" ]
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ source_set("allocator_cpp_shared") {
|
|
||||||
+ sources = [
|
|
||||||
+ # `alias.*`, `compiler_specific.h`, and `immediate_crash.*` have been
|
|
||||||
+ # copied from `//base`.
|
|
||||||
+ # TODO(crbug.com/40279749): Avoid duplication / reuse code.
|
|
||||||
+ "alias.cc",
|
|
||||||
+ "alias.h",
|
|
||||||
+ "compiler_specific.h",
|
|
||||||
+ "immediate_crash.h",
|
|
||||||
+ ]
|
|
||||||
+
|
|
||||||
+ visibility = [
|
|
||||||
+ ":allocator_impls",
|
|
||||||
+ ":allocator_shim_definitions",
|
|
||||||
+ ]
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
diff --git a/build/rust/std/alias.cc b/build/rust/allocator/alias.cc
|
|
||||||
similarity index 87%
|
|
||||||
rename from build/rust/std/alias.cc
|
|
||||||
rename to build/rust/allocator/alias.cc
|
|
||||||
index 42febac3ed1fc..ca20986f8ed49 100644
|
|
||||||
--- a/build/rust/std/alias.cc
|
|
||||||
+++ b/build/rust/allocator/alias.cc
|
|
||||||
@@ -7,9 +7,9 @@
|
|
||||||
//
|
|
||||||
// TODO(crbug.com/40279749): Avoid code duplication / reuse code.
|
|
||||||
|
|
||||||
-#include "build/rust/std/alias.h"
|
|
||||||
+#include "build/rust/allocator/alias.h"
|
|
||||||
|
|
||||||
-#include "build/rust/std/compiler_specific.h"
|
|
||||||
+#include "build/rust/allocator/compiler_specific.h"
|
|
||||||
|
|
||||||
namespace build_rust_std {
|
|
||||||
namespace debug {
|
|
||||||
diff --git a/build/rust/std/alias.h b/build/rust/allocator/alias.h
|
|
||||||
similarity index 91%
|
|
||||||
rename from build/rust/std/alias.h
|
|
||||||
rename to build/rust/allocator/alias.h
|
|
||||||
index 0eaba6766148f..80995ecfb045e 100644
|
|
||||||
--- a/build/rust/std/alias.h
|
|
||||||
+++ b/build/rust/allocator/alias.h
|
|
||||||
@@ -8,8 +8,8 @@
|
|
||||||
//
|
|
||||||
// TODO(crbug.com/40279749): Avoid code duplication / reuse code.
|
|
||||||
|
|
||||||
-#ifndef BUILD_RUST_STD_ALIAS_H_
|
|
||||||
-#define BUILD_RUST_STD_ALIAS_H_
|
|
||||||
+#ifndef BUILD_RUST_ALLOCATOR_ALIAS_H_
|
|
||||||
+#define BUILD_RUST_ALLOCATOR_ALIAS_H_
|
|
||||||
|
|
||||||
#include <stddef.h>
|
|
||||||
|
|
||||||
@@ -34,4 +34,4 @@ void Alias(const void* var);
|
|
||||||
const int line_number = __LINE__; \
|
|
||||||
build_rust_std::debug::Alias(&line_number)
|
|
||||||
|
|
||||||
-#endif // BUILD_RUST_STD_ALIAS_H_
|
|
||||||
+#endif // BUILD_RUST_ALLOCATOR_ALIAS_H_
|
|
||||||
diff --git a/build/rust/std/remap_alloc.cc b/build/rust/allocator/allocator_impls.cc
|
|
||||||
similarity index 67%
|
|
||||||
rename from build/rust/std/remap_alloc.cc
|
|
||||||
rename to build/rust/allocator/allocator_impls.cc
|
|
||||||
index a443b11ec513d..1fde98f23cd12 100644
|
|
||||||
--- a/build/rust/std/remap_alloc.cc
|
|
||||||
+++ b/build/rust/allocator/allocator_impls.cc
|
|
||||||
@@ -2,6 +2,8 @@
|
|
||||||
// Use of this source code is governed by a BSD-style license that can be
|
|
||||||
// found in the LICENSE file.
|
|
||||||
|
|
||||||
+#include "build/rust/allocator/allocator_impls.h"
|
|
||||||
+
|
|
||||||
#ifdef UNSAFE_BUFFERS_BUILD
|
|
||||||
// TODO(crbug.com/390223051): Remove C-library calls to fix the errors.
|
|
||||||
#pragma allow_unsafe_libc_calls
|
|
||||||
@@ -11,9 +13,9 @@
|
|
||||||
#include <cstring>
|
|
||||||
|
|
||||||
#include "build/build_config.h"
|
|
||||||
-#include "build/rust/std/alias.h"
|
|
||||||
-#include "build/rust/std/buildflags.h"
|
|
||||||
-#include "build/rust/std/immediate_crash.h"
|
|
||||||
+#include "build/rust/allocator/alias.h"
|
|
||||||
+#include "build/rust/allocator/buildflags.h"
|
|
||||||
+#include "build/rust/allocator/immediate_crash.h"
|
|
||||||
|
|
||||||
#if BUILDFLAG(RUST_ALLOCATOR_USES_PARTITION_ALLOC)
|
|
||||||
#include "partition_alloc/partition_alloc_constants.h" // nogncheck
|
|
||||||
@@ -22,6 +24,11 @@
|
|
||||||
#include <cstdlib>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+// NOTE: this documentation is outdated.
|
|
||||||
+//
|
|
||||||
+// TODO(crbug.com/408221149): update this documentation, or replace it with docs
|
|
||||||
+// in the Rust allocator implementation.
|
|
||||||
+//
|
|
||||||
// When linking a final binary, rustc has to pick between either:
|
|
||||||
// * The default Rust allocator
|
|
||||||
// * Any #[global_allocator] defined in *any rlib in its dependency tree*
|
|
||||||
@@ -87,19 +94,6 @@
|
|
||||||
// enabling it breaks Win32 APIs like CreateProcess:
|
|
||||||
// https://issues.chromium.org/u/1/issues/368070343#comment29
|
|
||||||
|
|
||||||
-extern "C" {
|
|
||||||
-
|
|
||||||
-#ifdef COMPONENT_BUILD
|
|
||||||
-#if BUILDFLAG(IS_WIN)
|
|
||||||
-#define REMAP_ALLOC_ATTRIBUTES __declspec(dllexport) __attribute__((weak))
|
|
||||||
-#else
|
|
||||||
-#define REMAP_ALLOC_ATTRIBUTES \
|
|
||||||
- __attribute__((visibility("default"))) __attribute__((weak))
|
|
||||||
-#endif
|
|
||||||
-#else
|
|
||||||
-#define REMAP_ALLOC_ATTRIBUTES __attribute__((weak))
|
|
||||||
-#endif // COMPONENT_BUILD
|
|
||||||
-
|
|
||||||
#if !BUILDFLAG(RUST_ALLOCATOR_USES_PARTITION_ALLOC) && BUILDFLAG(IS_WIN) && \
|
|
||||||
defined(ADDRESS_SANITIZER)
|
|
||||||
#define USE_WIN_ALIGNED_MALLOC 1
|
|
||||||
@@ -107,17 +101,19 @@ extern "C" {
|
|
||||||
#define USE_WIN_ALIGNED_MALLOC 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
-// This must exist as the stdlib depends on it to prove that we know the
|
|
||||||
-// alloc shims below are unstable. In the future we may be required to replace
|
|
||||||
-// them with a #[global_allocator] crate (see file comment above for more).
|
|
||||||
-//
|
|
||||||
-// Marked as weak as when Rust drives linking it includes this symbol itself,
|
|
||||||
-// and we don't want a collision due to C++ being in the same link target, where
|
|
||||||
-// C++ causes us to explicitly link in the stdlib and this symbol here.
|
|
||||||
-[[maybe_unused]]
|
|
||||||
-__attribute__((weak)) unsigned char __rust_no_alloc_shim_is_unstable;
|
|
||||||
+// The default allocator functions provided by the Rust standard library.
|
|
||||||
+extern "C" void* __rdl_alloc(size_t size, size_t align);
|
|
||||||
+extern "C" void __rdl_dealloc(void* p, size_t size, size_t align);
|
|
||||||
+extern "C" void* __rdl_realloc(void* p,
|
|
||||||
+ size_t old_size,
|
|
||||||
+ size_t align,
|
|
||||||
+ size_t new_size);
|
|
||||||
+
|
|
||||||
+extern "C" void* __rdl_alloc_zeroed(size_t size, size_t align);
|
|
||||||
+
|
|
||||||
+namespace rust_allocator_internal {
|
|
||||||
|
|
||||||
-REMAP_ALLOC_ATTRIBUTES void* __rust_alloc(size_t size, size_t align) {
|
|
||||||
+unsigned char* alloc(size_t size, size_t align) {
|
|
||||||
#if BUILDFLAG(RUST_ALLOCATOR_USES_PARTITION_ALLOC)
|
|
||||||
// PartitionAlloc will crash if given an alignment larger than this.
|
|
||||||
if (align > partition_alloc::internal::kMaxSupportedAlignment) {
|
|
||||||
@@ -125,19 +121,19 @@ REMAP_ALLOC_ATTRIBUTES void* __rust_alloc(size_t size, size_t align) {
|
|
||||||
}
|
|
||||||
|
|
||||||
if (align <= alignof(std::max_align_t)) {
|
|
||||||
- return allocator_shim::UncheckedAlloc(size);
|
|
||||||
+ return static_cast<unsigned char*>(allocator_shim::UncheckedAlloc(size));
|
|
||||||
} else {
|
|
||||||
- return allocator_shim::UncheckedAlignedAlloc(size, align);
|
|
||||||
+ return static_cast<unsigned char*>(
|
|
||||||
+ allocator_shim::UncheckedAlignedAlloc(size, align));
|
|
||||||
}
|
|
||||||
#elif USE_WIN_ALIGNED_MALLOC
|
|
||||||
- return _aligned_malloc(size, align);
|
|
||||||
+ return static_cast<unsigned char*>(_aligned_malloc(size, align));
|
|
||||||
#else
|
|
||||||
- extern void* __rdl_alloc(size_t size, size_t align);
|
|
||||||
- return __rdl_alloc(size, align);
|
|
||||||
+ return static_cast<unsigned char*>(__rdl_alloc(size, align));
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
-REMAP_ALLOC_ATTRIBUTES void __rust_dealloc(void* p, size_t size, size_t align) {
|
|
||||||
+void dealloc(unsigned char* p, size_t size, size_t align) {
|
|
||||||
#if BUILDFLAG(RUST_ALLOCATOR_USES_PARTITION_ALLOC)
|
|
||||||
if (align <= alignof(std::max_align_t)) {
|
|
||||||
allocator_shim::UncheckedFree(p);
|
|
||||||
@@ -147,54 +143,44 @@ REMAP_ALLOC_ATTRIBUTES void __rust_dealloc(void* p, size_t size, size_t align) {
|
|
||||||
#elif USE_WIN_ALIGNED_MALLOC
|
|
||||||
return _aligned_free(p);
|
|
||||||
#else
|
|
||||||
- extern void __rdl_dealloc(void* p, size_t size, size_t align);
|
|
||||||
__rdl_dealloc(p, size, align);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
-REMAP_ALLOC_ATTRIBUTES void* __rust_realloc(void* p,
|
|
||||||
- size_t old_size,
|
|
||||||
- size_t align,
|
|
||||||
- size_t new_size) {
|
|
||||||
+unsigned char* realloc(unsigned char* p,
|
|
||||||
+ size_t old_size,
|
|
||||||
+ size_t align,
|
|
||||||
+ size_t new_size) {
|
|
||||||
#if BUILDFLAG(RUST_ALLOCATOR_USES_PARTITION_ALLOC)
|
|
||||||
if (align <= alignof(std::max_align_t)) {
|
|
||||||
- return allocator_shim::UncheckedRealloc(p, new_size);
|
|
||||||
+ return static_cast<unsigned char*>(
|
|
||||||
+ allocator_shim::UncheckedRealloc(p, new_size));
|
|
||||||
} else {
|
|
||||||
- return allocator_shim::UncheckedAlignedRealloc(p, new_size, align);
|
|
||||||
+ return static_cast<unsigned char*>(
|
|
||||||
+ allocator_shim::UncheckedAlignedRealloc(p, new_size, align));
|
|
||||||
}
|
|
||||||
#elif USE_WIN_ALIGNED_MALLOC
|
|
||||||
- return _aligned_realloc(p, new_size, align);
|
|
||||||
+ return static_cast<unsigned char*>(_aligned_realloc(p, new_size, align));
|
|
||||||
#else
|
|
||||||
- extern void* __rdl_realloc(void* p, size_t old_size, size_t align,
|
|
||||||
- size_t new_size);
|
|
||||||
- return __rdl_realloc(p, old_size, align, new_size);
|
|
||||||
+ return static_cast<unsigned char*>(
|
|
||||||
+ __rdl_realloc(p, old_size, align, new_size));
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
-REMAP_ALLOC_ATTRIBUTES void* __rust_alloc_zeroed(size_t size, size_t align) {
|
|
||||||
+unsigned char* alloc_zeroed(size_t size, size_t align) {
|
|
||||||
#if BUILDFLAG(RUST_ALLOCATOR_USES_PARTITION_ALLOC) || USE_WIN_ALIGNED_MALLOC
|
|
||||||
// TODO(danakj): When RUST_ALLOCATOR_USES_PARTITION_ALLOC is true, it's
|
|
||||||
// possible that a partition_alloc::UncheckedAllocZeroed() call would perform
|
|
||||||
// better than partition_alloc::UncheckedAlloc() + memset. But there is no
|
|
||||||
// such API today. See b/342251590.
|
|
||||||
- void* p = __rust_alloc(size, align);
|
|
||||||
+ unsigned char* p = alloc(size, align);
|
|
||||||
if (p) {
|
|
||||||
memset(p, 0, size);
|
|
||||||
}
|
|
||||||
return p;
|
|
||||||
#else
|
|
||||||
- extern void* __rdl_alloc_zeroed(size_t size, size_t align);
|
|
||||||
- return __rdl_alloc_zeroed(size, align);
|
|
||||||
+ return static_cast<unsigned char*>(__rdl_alloc_zeroed(size, align));
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
-REMAP_ALLOC_ATTRIBUTES void __rust_alloc_error_handler(size_t size,
|
|
||||||
- size_t align) {
|
|
||||||
- NO_CODE_FOLDING();
|
|
||||||
- IMMEDIATE_CRASH();
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-REMAP_ALLOC_ATTRIBUTES extern const unsigned char
|
|
||||||
- __rust_alloc_error_handler_should_panic = 0;
|
|
||||||
-
|
|
||||||
-} // extern "C"
|
|
||||||
+} // namespace rust_allocator_internal
|
|
||||||
diff --git a/build/rust/allocator/allocator_impls.h b/build/rust/allocator/allocator_impls.h
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000000000..afb335412faf9
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/build/rust/allocator/allocator_impls.h
|
|
||||||
@@ -0,0 +1,25 @@
|
|
||||||
+// Copyright 2025 The Chromium Authors
|
|
||||||
+// Use of this source code is governed by a BSD-style license that can be
|
|
||||||
+// found in the LICENSE file.
|
|
||||||
+
|
|
||||||
+#ifndef BUILD_RUST_ALLOCATOR_ALLOCATOR_IMPLS_H_
|
|
||||||
+#define BUILD_RUST_ALLOCATOR_ALLOCATOR_IMPLS_H_
|
|
||||||
+
|
|
||||||
+#include <cstddef>
|
|
||||||
+
|
|
||||||
+#include "build/build_config.h"
|
|
||||||
+#include "build/rust/allocator/buildflags.h"
|
|
||||||
+
|
|
||||||
+namespace rust_allocator_internal {
|
|
||||||
+
|
|
||||||
+unsigned char* alloc(size_t size, size_t align);
|
|
||||||
+void dealloc(unsigned char* p, size_t size, size_t align);
|
|
||||||
+unsigned char* realloc(unsigned char* p,
|
|
||||||
+ size_t old_size,
|
|
||||||
+ size_t align,
|
|
||||||
+ size_t new_size);
|
|
||||||
+unsigned char* alloc_zeroed(size_t size, size_t align);
|
|
||||||
+
|
|
||||||
+} // namespace rust_allocator_internal
|
|
||||||
+
|
|
||||||
+#endif // BUILD_RUST_ALLOCATOR_ALLOCATOR_IMPLS_H_
|
|
||||||
diff --git a/build/rust/allocator/allocator_shim_definitions.cc b/build/rust/allocator/allocator_shim_definitions.cc
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000000000..a4d1bd77b7016
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/build/rust/allocator/allocator_shim_definitions.cc
|
|
||||||
@@ -0,0 +1,30 @@
|
|
||||||
+// Copyright 2025 The Chromium Authors
|
|
||||||
+// Use of this source code is governed by a BSD-style license that can be
|
|
||||||
+// found in the LICENSE file.
|
|
||||||
+
|
|
||||||
+#include <cstddef>
|
|
||||||
+
|
|
||||||
+#include "build/rust/allocator/alias.h"
|
|
||||||
+#include "build/rust/allocator/immediate_crash.h"
|
|
||||||
+
|
|
||||||
+extern "C" {
|
|
||||||
+
|
|
||||||
+// As part of rustc's contract for using `#[global_allocator]` without
|
|
||||||
+// rustc-generated shims we must define this symbol, since we are opting in to
|
|
||||||
+// unstable functionality. See https://github.com/rust-lang/rust/issues/123015
|
|
||||||
+//
|
|
||||||
+// Mark it weak since rustc will generate it when it drives linking.
|
|
||||||
+[[maybe_unused]]
|
|
||||||
+__attribute__((weak)) unsigned char __rust_no_alloc_shim_is_unstable;
|
|
||||||
+
|
|
||||||
+__attribute__((weak)) void __rust_alloc_error_handler(size_t size,
|
|
||||||
+ size_t align) {
|
|
||||||
+ NO_CODE_FOLDING();
|
|
||||||
+ IMMEDIATE_CRASH();
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+__attribute__((
|
|
||||||
+ weak)) extern const unsigned char __rust_alloc_error_handler_should_panic =
|
|
||||||
+ 0;
|
|
||||||
+
|
|
||||||
+} // extern "C"
|
|
||||||
diff --git a/build/rust/std/compiler_specific.h b/build/rust/allocator/compiler_specific.h
|
|
||||||
similarity index 87%
|
|
||||||
rename from build/rust/std/compiler_specific.h
|
|
||||||
rename to build/rust/allocator/compiler_specific.h
|
|
||||||
index ea79a7a8dc284..f9079679a3e9a 100644
|
|
||||||
--- a/build/rust/std/compiler_specific.h
|
|
||||||
+++ b/build/rust/allocator/compiler_specific.h
|
|
||||||
@@ -7,8 +7,8 @@
|
|
||||||
//
|
|
||||||
// TODO(crbug.com/40279749): Avoid code duplication / reuse code.
|
|
||||||
|
|
||||||
-#ifndef BUILD_RUST_STD_COMPILER_SPECIFIC_H_
|
|
||||||
-#define BUILD_RUST_STD_COMPILER_SPECIFIC_H_
|
|
||||||
+#ifndef BUILD_RUST_ALLOCATOR_COMPILER_SPECIFIC_H_
|
|
||||||
+#define BUILD_RUST_ALLOCATOR_COMPILER_SPECIFIC_H_
|
|
||||||
|
|
||||||
#include "build/build_config.h"
|
|
||||||
|
|
||||||
@@ -35,4 +35,4 @@
|
|
||||||
#define NOINLINE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
-#endif // BUILD_RUST_STD_COMPILER_SPECIFIC_H_
|
|
||||||
+#endif // BUILD_RUST_ALLOCATOR_COMPILER_SPECIFIC_H_
|
|
||||||
diff --git a/build/rust/std/immediate_crash.h b/build/rust/allocator/immediate_crash.h
|
|
||||||
similarity index 97%
|
|
||||||
rename from build/rust/std/immediate_crash.h
|
|
||||||
rename to build/rust/allocator/immediate_crash.h
|
|
||||||
index e4fd5a09d9379..9cbf9fd65f3e0 100644
|
|
||||||
--- a/build/rust/std/immediate_crash.h
|
|
||||||
+++ b/build/rust/allocator/immediate_crash.h
|
|
||||||
@@ -5,8 +5,8 @@
|
|
||||||
// This file has been copied from //base/immediate_crash.h.
|
|
||||||
// TODO(crbug.com/40279749): Avoid code duplication / reuse code.
|
|
||||||
|
|
||||||
-#ifndef BUILD_RUST_STD_IMMEDIATE_CRASH_H_
|
|
||||||
-#define BUILD_RUST_STD_IMMEDIATE_CRASH_H_
|
|
||||||
+#ifndef BUILD_RUST_ALLOCATOR_IMMEDIATE_CRASH_H_
|
|
||||||
+#define BUILD_RUST_ALLOCATOR_IMMEDIATE_CRASH_H_
|
|
||||||
|
|
||||||
#include "build/build_config.h"
|
|
||||||
|
|
||||||
@@ -168,4 +168,4 @@
|
|
||||||
|
|
||||||
#endif // defined(__clang__) || defined(COMPILER_GCC)
|
|
||||||
|
|
||||||
-#endif // BUILD_RUST_STD_IMMEDIATE_CRASH_H_
|
|
||||||
+#endif // BUILD_RUST_ALLOCATOR_IMMEDIATE_CRASH_H_
|
|
||||||
diff --git a/build/rust/allocator/lib.rs b/build/rust/allocator/lib.rs
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000000000..7f4a0fc245694
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/build/rust/allocator/lib.rs
|
|
||||||
@@ -0,0 +1,48 @@
|
|
||||||
+// Copyright 2025 The Chromium Authors
|
|
||||||
+// Use of this source code is governed by a BSD-style license that can be
|
|
||||||
+// found in the LICENSE file.
|
|
||||||
+
|
|
||||||
+//! Define the allocator that Rust code in Chrome should use.
|
|
||||||
+//!
|
|
||||||
+//! Any final artifact that depends on this crate, even transitively, will use
|
|
||||||
+//! the allocator defined here. Currently this is a thin wrapper around
|
|
||||||
+//! allocator_impls.cc's functions; see the documentation there.
|
|
||||||
+
|
|
||||||
+use std::alloc::{GlobalAlloc, Layout};
|
|
||||||
+
|
|
||||||
+struct Allocator;
|
|
||||||
+
|
|
||||||
+unsafe impl GlobalAlloc for Allocator {
|
|
||||||
+ unsafe fn alloc(&self, layout: Layout) -> *mut u8 {
|
|
||||||
+ unsafe { ffi::alloc(layout.size(), layout.align()) }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) {
|
|
||||||
+ unsafe {
|
|
||||||
+ ffi::dealloc(ptr, layout.size(), layout.align());
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ unsafe fn alloc_zeroed(&self, layout: Layout) -> *mut u8 {
|
|
||||||
+ unsafe { ffi::alloc_zeroed(layout.size(), layout.align()) }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ unsafe fn realloc(&self, ptr: *mut u8, layout: Layout, new_size: usize) -> *mut u8 {
|
|
||||||
+ unsafe { ffi::realloc(ptr, layout.size(), layout.align(), new_size) }
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+#[global_allocator]
|
|
||||||
+static GLOBAL: Allocator = Allocator;
|
|
||||||
+
|
|
||||||
+#[cxx::bridge(namespace = "rust_allocator_internal")]
|
|
||||||
+mod ffi {
|
|
||||||
+ extern "C++" {
|
|
||||||
+ include!("build/rust/allocator/allocator_impls.h");
|
|
||||||
+
|
|
||||||
+ unsafe fn alloc(size: usize, align: usize) -> *mut u8;
|
|
||||||
+ unsafe fn dealloc(p: *mut u8, size: usize, align: usize);
|
|
||||||
+ unsafe fn realloc(p: *mut u8, old_size: usize, align: usize, new_size: usize) -> *mut u8;
|
|
||||||
+ unsafe fn alloc_zeroed(size: usize, align: usize) -> *mut u8;
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
diff --git a/build/rust/cargo_crate.gni b/build/rust/cargo_crate.gni
|
|
||||||
index 6d11c538bf4d5..d9912722b4ecd 100644
|
|
||||||
--- a/build/rust/cargo_crate.gni
|
|
||||||
+++ b/build/rust/cargo_crate.gni
|
|
||||||
@@ -259,6 +259,12 @@ template("cargo_crate") {
|
|
||||||
# Don't import the `chromium` crate into third-party code.
|
|
||||||
no_chromium_prelude = true
|
|
||||||
|
|
||||||
+ # Don't depend on the chrome-specific #[global_allocator] crate from
|
|
||||||
+ # third-party code. This avoids some dependency cycle issues. The allocator
|
|
||||||
+ # crate will still be used if it exists anywhere in the dependency graph for
|
|
||||||
+ # a given linked artifact.
|
|
||||||
+ no_allocator_crate = true
|
|
||||||
+
|
|
||||||
rustc_metadata = _rustc_metadata
|
|
||||||
|
|
||||||
# TODO(crbug.com/40259764): don't default to true. This requires changes to
|
|
||||||
@@ -483,6 +489,9 @@ template("cargo_crate") {
|
|
||||||
# Don't import the `chromium` crate into third-party code.
|
|
||||||
no_chromium_prelude = true
|
|
||||||
|
|
||||||
+ # Build scripts do not need to link to chrome's allocator.
|
|
||||||
+ no_allocator_crate = true
|
|
||||||
+
|
|
||||||
# The ${_build_script_name}_output target looks for the exe in this
|
|
||||||
# location. Due to how the Windows component build works, this has to
|
|
||||||
# be $root_out_dir for all EXEs. In component build, C++ links to the
|
|
||||||
diff --git a/build/rust/rust_macro.gni b/build/rust/rust_macro.gni
|
|
||||||
index bcbb30ed44111..41d857632ccdc 100644
|
|
||||||
--- a/build/rust/rust_macro.gni
|
|
||||||
+++ b/build/rust/rust_macro.gni
|
|
||||||
@@ -16,6 +16,9 @@ template("rust_macro") {
|
|
||||||
forward_variables_from(invoker, TESTONLY_AND_VISIBILITY)
|
|
||||||
proc_macro_configs = invoker.configs
|
|
||||||
target_type = "rust_proc_macro"
|
|
||||||
+
|
|
||||||
+ # Macros are loaded by rustc and shouldn't use chrome's allocation routines.
|
|
||||||
+ no_allocator_crate = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/build/rust/rust_target.gni b/build/rust/rust_target.gni
|
|
||||||
index 1a2f96337d436..1003a7b678352 100644
|
|
||||||
--- a/build/rust/rust_target.gni
|
|
||||||
+++ b/build/rust/rust_target.gni
|
|
||||||
@@ -339,6 +339,10 @@ template("rust_target") {
|
|
||||||
_rust_deps += [ "//build/rust/std" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if (!defined(invoker.no_allocator_crate) || !invoker.no_allocator_crate) {
|
|
||||||
+ _rust_deps += [ "//build/rust/allocator" ]
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
if (_build_unit_tests) {
|
|
||||||
_unit_test_target = "${_target_name}_unittests"
|
|
||||||
if (defined(invoker.unit_test_target)) {
|
|
||||||
diff --git a/build/rust/std/BUILD.gn b/build/rust/std/BUILD.gn
|
|
||||||
index 6b996aa1fe386..25db126076b2f 100644
|
|
||||||
--- a/build/rust/std/BUILD.gn
|
|
||||||
+++ b/build/rust/std/BUILD.gn
|
|
||||||
@@ -15,51 +15,12 @@
|
|
||||||
# allocator functions to PartitionAlloc when `use_partition_alloc_as_malloc` is
|
|
||||||
# true, so that Rust and C++ use the same allocator backend.
|
|
||||||
|
|
||||||
-import("//build/buildflag_header.gni")
|
|
||||||
import("//build/config/compiler/compiler.gni")
|
|
||||||
import("//build/config/coverage/coverage.gni")
|
|
||||||
import("//build/config/rust.gni")
|
|
||||||
import("//build/config/sanitizers/sanitizers.gni")
|
|
||||||
|
|
||||||
-rust_allocator_uses_partition_alloc = false
|
|
||||||
-if (build_with_chromium) {
|
|
||||||
- import("//base/allocator/partition_allocator/partition_alloc.gni")
|
|
||||||
- rust_allocator_uses_partition_alloc = use_partition_alloc_as_malloc
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-buildflag_header("buildflags") {
|
|
||||||
- header = "buildflags.h"
|
|
||||||
- flags = [
|
|
||||||
- "RUST_ALLOCATOR_USES_PARTITION_ALLOC=$rust_allocator_uses_partition_alloc",
|
|
||||||
- ]
|
|
||||||
- visibility = [ ":*" ]
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
if (toolchain_has_rust) {
|
|
||||||
- # If clang performs the link step, we need to provide the allocator symbols
|
|
||||||
- # that are normally injected by rustc during linking.
|
|
||||||
- #
|
|
||||||
- # We also "happen to" use this to redirect allocations to PartitionAlloc,
|
|
||||||
- # though that would be better done through a #[global_allocator] crate (see
|
|
||||||
- # above).
|
|
||||||
- source_set("remap_alloc") {
|
|
||||||
- public_deps = []
|
|
||||||
- if (rust_allocator_uses_partition_alloc) {
|
|
||||||
- public_deps += [ "//base/allocator/partition_allocator:partition_alloc" ]
|
|
||||||
- }
|
|
||||||
- deps = [ ":buildflags" ]
|
|
||||||
- sources = [
|
|
||||||
- # `alias.*`, `compiler_specific.h`, and `immediate_crash.*` have been
|
|
||||||
- # copied from `//base`.
|
|
||||||
- # TODO(crbug.com/40279749): Avoid duplication / reuse code.
|
|
||||||
- "alias.cc",
|
|
||||||
- "alias.h",
|
|
||||||
- "compiler_specific.h",
|
|
||||||
- "immediate_crash.h",
|
|
||||||
- "remap_alloc.cc",
|
|
||||||
- ]
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
# List of Rust stdlib rlibs which are present in the official Rust toolchain
|
|
||||||
# we are using from the Android team. This is usually a version or two behind
|
|
||||||
# nightly. Generally this matches the toolchain we build ourselves, but if
|
|
||||||
@@ -269,8 +230,6 @@ if (toolchain_has_rust) {
|
|
||||||
foreach(libname, stdlib_files + skip_stdlib_files) {
|
|
||||||
deps += [ "rules:$libname" ]
|
|
||||||
}
|
|
||||||
-
|
|
||||||
- public_deps = [ ":remap_alloc" ]
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
action("find_stdlib") {
|
|
||||||
diff --git a/components/cronet/android/dependencies.txt b/components/cronet/android/dependencies.txt
|
|
||||||
index bf56bc45ed41f..c0e41ef7c6766 100644
|
|
||||||
--- a/components/cronet/android/dependencies.txt
|
|
||||||
+++ b/components/cronet/android/dependencies.txt
|
|
||||||
@@ -14,6 +14,7 @@
|
|
||||||
//build/config
|
|
||||||
//build/config/compiler
|
|
||||||
//build/rust
|
|
||||||
+//build/rust/allocator
|
|
||||||
//build/rust/chromium_prelude
|
|
||||||
//build/rust/std
|
|
||||||
//build/rust/std/rules
|
|
||||||
diff --git a/third_party/breakpad/BUILD.gn b/third_party/breakpad/BUILD.gn
|
|
||||||
index 007fdff16e92e..00da4fa484998 100644
|
|
||||||
--- a/third_party/breakpad/BUILD.gn
|
|
||||||
+++ b/third_party/breakpad/BUILD.gn
|
|
||||||
@@ -495,7 +495,10 @@ if (is_mac) {
|
|
||||||
defines = [ "HAVE_MACH_O_NLIST_H" ]
|
|
||||||
|
|
||||||
# Rust demangle support.
|
|
||||||
- deps = [ "//third_party/rust/rustc_demangle_capi/v0_1:lib" ]
|
|
||||||
+ deps = [
|
|
||||||
+ "//build/rust/allocator",
|
|
||||||
+ "//third_party/rust/rustc_demangle_capi/v0_1:lib",
|
|
||||||
+ ]
|
|
||||||
defines += [ "HAVE_RUSTC_DEMANGLE" ]
|
|
||||||
include_dirs += [ "//third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/include" ]
|
|
||||||
sources += [ "//third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/include/rustc_demangle.h" ]
|
|
||||||
@@ -743,7 +746,10 @@ if (is_linux || is_chromeos || is_android) {
|
|
||||||
include_dirs = [ "breakpad/src" ]
|
|
||||||
|
|
||||||
# Rust demangle support.
|
|
||||||
- deps = [ "//third_party/rust/rustc_demangle_capi/v0_1:lib" ]
|
|
||||||
+ deps = [
|
|
||||||
+ "//build/rust/allocator",
|
|
||||||
+ "//third_party/rust/rustc_demangle_capi/v0_1:lib",
|
|
||||||
+ ]
|
|
||||||
defines += [ "HAVE_RUSTC_DEMANGLE" ]
|
|
||||||
include_dirs += [ "//third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/include" ]
|
|
||||||
sources += [ "//third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/include/rustc_demangle.h" ]
|
|
|
@ -1,319 +0,0 @@
|
||||||
From 5032162442c5f2f3093cd7646f3a06f826d7f7a8 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Collin Baker <collinbaker@chromium.org>
|
|
||||||
Date: Mon, 7 Apr 2025 12:48:17 -0700
|
|
||||||
Subject: [PATCH] Call Rust default allocator directly from Rust
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
The Chromium `#[global_allocator] crate forwarded calls to the C++
|
|
||||||
implementation, which in turn called into the Rust standard library
|
|
||||||
implementations in some build configurations.
|
|
||||||
|
|
||||||
This Rust -> C++ -> Rust round trip is unnecessary, and the references
|
|
||||||
to these symbols is blocking a toolchain update: upstream, these
|
|
||||||
symbol names are now mangled.
|
|
||||||
|
|
||||||
Instead, use Rust conditional compilation to choose between the
|
|
||||||
Chromium and the libstd-provided allocators.
|
|
||||||
|
|
||||||
Additionally, the remaining internal symbols defined in C++ are moved
|
|
||||||
to Rust.
|
|
||||||
|
|
||||||
Bug: 408221149, 407024458
|
|
||||||
Change-Id: I78f8c90d51a36a73099aa7d333091d7b8aded3c0
|
|
||||||
|
|
||||||
Cq-Include-Trybots: luci.chromium.try:android-rust-arm32-rel,android-rust-arm64-dbg,android-rust-arm64-rel,linux-rust-x64-dbg,linux-rust-x64-rel,mac-rust-x64-dbg,win-rust-x64-dbg,win-rust-x64-rel
|
|
||||||
Change-Id: I78f8c90d51a36a73099aa7d333091d7b8aded3c0
|
|
||||||
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6434355
|
|
||||||
Reviewed-by: Łukasz Anforowicz <lukasza@chromium.org>
|
|
||||||
Commit-Queue: Collin Baker <collinbaker@chromium.org>
|
|
||||||
Cr-Commit-Position: refs/heads/main@{#1443703}
|
|
||||||
---
|
|
||||||
build/rust/allocator/BUILD.gn | 54 +++++++------------
|
|
||||||
build/rust/allocator/allocator_impls.cc | 28 +++++-----
|
|
||||||
build/rust/allocator/allocator_impls.h | 2 +
|
|
||||||
.../allocator/allocator_shim_definitions.cc | 30 -----------
|
|
||||||
build/rust/allocator/lib.rs | 38 +++++++++++++
|
|
||||||
5 files changed, 73 insertions(+), 79 deletions(-)
|
|
||||||
delete mode 100644 build/rust/allocator/allocator_shim_definitions.cc
|
|
||||||
|
|
||||||
diff --git a/build/rust/allocator/BUILD.gn b/build/rust/allocator/BUILD.gn
|
|
||||||
index 06aa47f097c9c..f09314afc8158 100644
|
|
||||||
--- a/build/rust/allocator/BUILD.gn
|
|
||||||
+++ b/build/rust/allocator/BUILD.gn
|
|
||||||
@@ -12,6 +12,9 @@ if (build_with_chromium) {
|
|
||||||
rust_allocator_uses_partition_alloc = use_partition_alloc_as_malloc
|
|
||||||
}
|
|
||||||
|
|
||||||
+use_cpp_allocator_impls =
|
|
||||||
+ rust_allocator_uses_partition_alloc || (is_win && is_asan)
|
|
||||||
+
|
|
||||||
buildflag_header("buildflags") {
|
|
||||||
header = "buildflags.h"
|
|
||||||
flags = [
|
|
||||||
@@ -30,61 +33,44 @@ if (toolchain_has_rust) {
|
|
||||||
crate_root = "lib.rs"
|
|
||||||
cxx_bindings = [ "lib.rs" ]
|
|
||||||
|
|
||||||
- deps = [
|
|
||||||
- ":allocator_impls",
|
|
||||||
- ":allocator_shim_definitions",
|
|
||||||
- ]
|
|
||||||
+ deps = [ ":allocator_impls" ]
|
|
||||||
|
|
||||||
no_chromium_prelude = true
|
|
||||||
no_allocator_crate = true
|
|
||||||
allow_unsafe = true
|
|
||||||
+
|
|
||||||
+ if (use_cpp_allocator_impls) {
|
|
||||||
+ rustflags = [
|
|
||||||
+ "--cfg",
|
|
||||||
+ "use_cpp_allocator_impls",
|
|
||||||
+ ]
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ configs -= [ "//build/config/compiler:disallow_unstable_features" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
+ # TODO(crbug.com/408221149): don't build this when `use_cpp_allocator_impls`
|
|
||||||
+ # is false.
|
|
||||||
static_library("allocator_impls") {
|
|
||||||
public_deps = []
|
|
||||||
if (rust_allocator_uses_partition_alloc) {
|
|
||||||
public_deps += [ "//base/allocator/partition_allocator:partition_alloc" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
- sources = [
|
|
||||||
- "allocator_impls.cc",
|
|
||||||
- "allocator_impls.h",
|
|
||||||
- ]
|
|
||||||
-
|
|
||||||
- deps = [
|
|
||||||
- ":allocator_cpp_shared",
|
|
||||||
- ":buildflags",
|
|
||||||
-
|
|
||||||
- # TODO(crbug.com/408221149): remove the C++ -> Rust dependency for the
|
|
||||||
- # default allocator.
|
|
||||||
- "//build/rust/std",
|
|
||||||
- ]
|
|
||||||
-
|
|
||||||
- visibility = [ ":*" ]
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- source_set("allocator_shim_definitions") {
|
|
||||||
- sources = [ "allocator_shim_definitions.cc" ]
|
|
||||||
-
|
|
||||||
- deps = [ ":allocator_cpp_shared" ]
|
|
||||||
-
|
|
||||||
- visibility = [ ":*" ]
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- source_set("allocator_cpp_shared") {
|
|
||||||
sources = [
|
|
||||||
# `alias.*`, `compiler_specific.h`, and `immediate_crash.*` have been
|
|
||||||
# copied from `//base`.
|
|
||||||
# TODO(crbug.com/40279749): Avoid duplication / reuse code.
|
|
||||||
"alias.cc",
|
|
||||||
"alias.h",
|
|
||||||
+ "allocator_impls.cc",
|
|
||||||
+ "allocator_impls.h",
|
|
||||||
"compiler_specific.h",
|
|
||||||
"immediate_crash.h",
|
|
||||||
]
|
|
||||||
|
|
||||||
- visibility = [
|
|
||||||
- ":allocator_impls",
|
|
||||||
- ":allocator_shim_definitions",
|
|
||||||
- ]
|
|
||||||
+ deps = [ ":buildflags" ]
|
|
||||||
+
|
|
||||||
+ visibility = [ ":*" ]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
diff --git a/build/rust/allocator/allocator_impls.cc b/build/rust/allocator/allocator_impls.cc
|
|
||||||
index 1fde98f23cd12..bf3c2a301adf5 100644
|
|
||||||
--- a/build/rust/allocator/allocator_impls.cc
|
|
||||||
+++ b/build/rust/allocator/allocator_impls.cc
|
|
||||||
@@ -101,16 +101,6 @@
|
|
||||||
#define USE_WIN_ALIGNED_MALLOC 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
-// The default allocator functions provided by the Rust standard library.
|
|
||||||
-extern "C" void* __rdl_alloc(size_t size, size_t align);
|
|
||||||
-extern "C" void __rdl_dealloc(void* p, size_t size, size_t align);
|
|
||||||
-extern "C" void* __rdl_realloc(void* p,
|
|
||||||
- size_t old_size,
|
|
||||||
- size_t align,
|
|
||||||
- size_t new_size);
|
|
||||||
-
|
|
||||||
-extern "C" void* __rdl_alloc_zeroed(size_t size, size_t align);
|
|
||||||
-
|
|
||||||
namespace rust_allocator_internal {
|
|
||||||
|
|
||||||
unsigned char* alloc(size_t size, size_t align) {
|
|
||||||
@@ -129,7 +119,8 @@ unsigned char* alloc(size_t size, size_t align) {
|
|
||||||
#elif USE_WIN_ALIGNED_MALLOC
|
|
||||||
return static_cast<unsigned char*>(_aligned_malloc(size, align));
|
|
||||||
#else
|
|
||||||
- return static_cast<unsigned char*>(__rdl_alloc(size, align));
|
|
||||||
+ // TODO(crbug.com/408221149): don't build this file in this case.
|
|
||||||
+ IMMEDIATE_CRASH();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -143,7 +134,8 @@ void dealloc(unsigned char* p, size_t size, size_t align) {
|
|
||||||
#elif USE_WIN_ALIGNED_MALLOC
|
|
||||||
return _aligned_free(p);
|
|
||||||
#else
|
|
||||||
- __rdl_dealloc(p, size, align);
|
|
||||||
+ // TODO(crbug.com/408221149): don't build this file in this case.
|
|
||||||
+ IMMEDIATE_CRASH();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -162,8 +154,8 @@ unsigned char* realloc(unsigned char* p,
|
|
||||||
#elif USE_WIN_ALIGNED_MALLOC
|
|
||||||
return static_cast<unsigned char*>(_aligned_realloc(p, new_size, align));
|
|
||||||
#else
|
|
||||||
- return static_cast<unsigned char*>(
|
|
||||||
- __rdl_realloc(p, old_size, align, new_size));
|
|
||||||
+ // TODO(crbug.com/408221149): don't build this file in this case.
|
|
||||||
+ IMMEDIATE_CRASH();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -179,8 +171,14 @@ unsigned char* alloc_zeroed(size_t size, size_t align) {
|
|
||||||
}
|
|
||||||
return p;
|
|
||||||
#else
|
|
||||||
- return static_cast<unsigned char*>(__rdl_alloc_zeroed(size, align));
|
|
||||||
+ // TODO(crbug.com/408221149): don't build this file in this case.
|
|
||||||
+ IMMEDIATE_CRASH();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
+void crash_immediately() {
|
|
||||||
+ NO_CODE_FOLDING();
|
|
||||||
+ IMMEDIATE_CRASH();
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
} // namespace rust_allocator_internal
|
|
||||||
diff --git a/build/rust/allocator/allocator_impls.h b/build/rust/allocator/allocator_impls.h
|
|
||||||
index afb335412faf9..e90ab7cd422c1 100644
|
|
||||||
--- a/build/rust/allocator/allocator_impls.h
|
|
||||||
+++ b/build/rust/allocator/allocator_impls.h
|
|
||||||
@@ -20,6 +20,8 @@ unsigned char* realloc(unsigned char* p,
|
|
||||||
size_t new_size);
|
|
||||||
unsigned char* alloc_zeroed(size_t size, size_t align);
|
|
||||||
|
|
||||||
+void crash_immediately();
|
|
||||||
+
|
|
||||||
} // namespace rust_allocator_internal
|
|
||||||
|
|
||||||
#endif // BUILD_RUST_ALLOCATOR_ALLOCATOR_IMPLS_H_
|
|
||||||
diff --git a/build/rust/allocator/allocator_shim_definitions.cc b/build/rust/allocator/allocator_shim_definitions.cc
|
|
||||||
deleted file mode 100644
|
|
||||||
index a4d1bd77b7016..0000000000000
|
|
||||||
--- a/build/rust/allocator/allocator_shim_definitions.cc
|
|
||||||
+++ /dev/null
|
|
||||||
@@ -1,30 +0,0 @@
|
|
||||||
-// Copyright 2025 The Chromium Authors
|
|
||||||
-// Use of this source code is governed by a BSD-style license that can be
|
|
||||||
-// found in the LICENSE file.
|
|
||||||
-
|
|
||||||
-#include <cstddef>
|
|
||||||
-
|
|
||||||
-#include "build/rust/allocator/alias.h"
|
|
||||||
-#include "build/rust/allocator/immediate_crash.h"
|
|
||||||
-
|
|
||||||
-extern "C" {
|
|
||||||
-
|
|
||||||
-// As part of rustc's contract for using `#[global_allocator]` without
|
|
||||||
-// rustc-generated shims we must define this symbol, since we are opting in to
|
|
||||||
-// unstable functionality. See https://github.com/rust-lang/rust/issues/123015
|
|
||||||
-//
|
|
||||||
-// Mark it weak since rustc will generate it when it drives linking.
|
|
||||||
-[[maybe_unused]]
|
|
||||||
-__attribute__((weak)) unsigned char __rust_no_alloc_shim_is_unstable;
|
|
||||||
-
|
|
||||||
-__attribute__((weak)) void __rust_alloc_error_handler(size_t size,
|
|
||||||
- size_t align) {
|
|
||||||
- NO_CODE_FOLDING();
|
|
||||||
- IMMEDIATE_CRASH();
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-__attribute__((
|
|
||||||
- weak)) extern const unsigned char __rust_alloc_error_handler_should_panic =
|
|
||||||
- 0;
|
|
||||||
-
|
|
||||||
-} // extern "C"
|
|
||||||
diff --git a/build/rust/allocator/lib.rs b/build/rust/allocator/lib.rs
|
|
||||||
index 7f4a0fc245694..b8b67d9c6c649 100644
|
|
||||||
--- a/build/rust/allocator/lib.rs
|
|
||||||
+++ b/build/rust/allocator/lib.rs
|
|
||||||
@@ -8,10 +8,20 @@
|
|
||||||
//! the allocator defined here. Currently this is a thin wrapper around
|
|
||||||
//! allocator_impls.cc's functions; see the documentation there.
|
|
||||||
|
|
||||||
+// Required to apply weak linkage to symbols.
|
|
||||||
+#![feature(linkage)]
|
|
||||||
+// Required to apply `#[rustc_std_internal_symbol]` to our alloc error handler
|
|
||||||
+// so the name is correctly mangled as rustc expects.
|
|
||||||
+#![cfg_attr(mangle_alloc_error_handler, allow(internal_features))]
|
|
||||||
+#![cfg_attr(mangle_alloc_error_handler, feature(rustc_attrs))]
|
|
||||||
+
|
|
||||||
+#[cfg(use_cpp_allocator_impls)]
|
|
||||||
use std::alloc::{GlobalAlloc, Layout};
|
|
||||||
|
|
||||||
+#[cfg(use_cpp_allocator_impls)]
|
|
||||||
struct Allocator;
|
|
||||||
|
|
||||||
+#[cfg(use_cpp_allocator_impls)]
|
|
||||||
unsafe impl GlobalAlloc for Allocator {
|
|
||||||
unsafe fn alloc(&self, layout: Layout) -> *mut u8 {
|
|
||||||
unsafe { ffi::alloc(layout.size(), layout.align()) }
|
|
||||||
@@ -32,9 +42,36 @@ unsafe impl GlobalAlloc for Allocator {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+#[cfg(use_cpp_allocator_impls)]
|
|
||||||
#[global_allocator]
|
|
||||||
static GLOBAL: Allocator = Allocator;
|
|
||||||
|
|
||||||
+#[cfg(not(use_cpp_allocator_impls))]
|
|
||||||
+#[global_allocator]
|
|
||||||
+static GLOBAL: std::alloc::System = std::alloc::System;
|
|
||||||
+
|
|
||||||
+// As part of rustc's contract for using `#[global_allocator]` without
|
|
||||||
+// rustc-generated shims we must define this symbol, since we are opting in to
|
|
||||||
+// unstable functionality. See https://github.com/rust-lang/rust/issues/123015
|
|
||||||
+#[no_mangle]
|
|
||||||
+#[linkage = "weak"]
|
|
||||||
+static __rust_no_alloc_shim_is_unstable: u8 = 0;
|
|
||||||
+
|
|
||||||
+#[no_mangle]
|
|
||||||
+#[linkage = "weak"]
|
|
||||||
+static __rust_alloc_error_handler_should_panic: u8 = 0;
|
|
||||||
+
|
|
||||||
+// Mangle the symbol name as rustc expects.
|
|
||||||
+#[cfg_attr(mangle_alloc_error_handler, rustc_std_internal_symbol)]
|
|
||||||
+#[cfg_attr(not(mangle_alloc_error_handler), no_mangle)]
|
|
||||||
+#[linkage = "weak"]
|
|
||||||
+fn __rust_alloc_error_handler(_size: usize, _align: usize) {
|
|
||||||
+ unsafe { ffi::crash_immediately() }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+// TODO(crbug.com/408221149): conditionally include the FFI glue based on
|
|
||||||
+// `use_cpp_allocator_impls`
|
|
||||||
+#[allow(dead_code)]
|
|
||||||
#[cxx::bridge(namespace = "rust_allocator_internal")]
|
|
||||||
mod ffi {
|
|
||||||
extern "C++" {
|
|
||||||
@@ -44,5 +81,6 @@ mod ffi {
|
|
||||||
unsafe fn dealloc(p: *mut u8, size: usize, align: usize);
|
|
||||||
unsafe fn realloc(p: *mut u8, old_size: usize, align: usize, new_size: usize) -> *mut u8;
|
|
||||||
unsafe fn alloc_zeroed(size: usize, align: usize) -> *mut u8;
|
|
||||||
+ unsafe fn crash_immediately();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,102 +0,0 @@
|
||||||
reduced -lnl
|
|
||||||
|
|
||||||
From e201e2d467b0daad6cdbbfcd5b0e34760e4099c1 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Alan Zhao <ayzhao@google.com>
|
|
||||||
Date: Mon, 7 Apr 2025 18:15:01 -0700
|
|
||||||
Subject: [PATCH] Roll rust *only* f7b43542838f0a4a6cfdb17fbeadf45002042a77-1 :
|
|
||||||
3f690c2257b7080cd3a8cce64e082fc972148990-1
|
|
||||||
|
|
||||||
https://chromium.googlesource.com/external/github.com/rust-lang/rust/+log/f7b43542838f..3f690c2257b7
|
|
||||||
|
|
||||||
Ran: ./tools/clang/scripts/upload_revision.py 5b36835df010c5813808d34e45428c624fb52ff1
|
|
||||||
|
|
||||||
Additionally, add fixes to the rust allocator to address https://crbug.com/407024458.
|
|
||||||
|
|
||||||
Bug: 404285928,407024458
|
|
||||||
Disable-Rts: True
|
|
||||||
Cq-Include-Trybots: chromium/try:chromeos-amd64-generic-cfi-thin-lto-rel
|
|
||||||
Cq-Include-Trybots: chromium/try:dawn-win10-x86-deps-rel
|
|
||||||
Cq-Include-Trybots: chromium/try:linux-chromeos-dbg
|
|
||||||
Cq-Include-Trybots: chromium/try:linux_chromium_cfi_rel_ng
|
|
||||||
Cq-Include-Trybots: chromium/try:linux_chromium_chromeos_msan_rel_ng
|
|
||||||
Cq-Include-Trybots: chromium/try:linux_chromium_msan_rel_ng
|
|
||||||
Cq-Include-Trybots: chromium/try:mac11-arm64-rel,mac_chromium_asan_rel_ng
|
|
||||||
Cq-Include-Trybots: chromium/try:ios-catalyst,win-asan,android-official
|
|
||||||
Cq-Include-Trybots: chromium/try:fuchsia-arm64-cast-receiver-rel
|
|
||||||
Cq-Include-Trybots: chromium/try:mac-official,linux-official
|
|
||||||
Cq-Include-Trybots: chromium/try:win-official,win32-official
|
|
||||||
Cq-Include-Trybots: chromium/try:win-swangle-try-x86
|
|
||||||
Cq-Include-Trybots: chromium/try:android-cronet-riscv64-dbg
|
|
||||||
Cq-Include-Trybots: chromium/try:android-cronet-riscv64-rel
|
|
||||||
Cq-Include-Trybots: chrome/try:iphone-device
|
|
||||||
Cq-Include-Trybots: chrome/try:linux-chromeos-chrome
|
|
||||||
Cq-Include-Trybots: chrome/try:win-chrome,win64-chrome,linux-chrome,mac-chrome
|
|
||||||
Cq-Include-Trybots: chrome/try:linux-pgo,mac-pgo,win32-pgo,win64-pgo
|
|
||||||
Cq-Include-Trybots: luci.chromium.try:linux-cast-x64-rel
|
|
||||||
Cq-Include-Trybots: chromium/try:android-rust-arm32-rel
|
|
||||||
Cq-Include-Trybots: chromium/try:android-rust-arm64-dbg
|
|
||||||
Cq-Include-Trybots: chromium/try:android-rust-arm64-rel
|
|
||||||
Cq-Include-Trybots: chromium/try:linux-rust-x64-dbg
|
|
||||||
Cq-Include-Trybots: chromium/try:linux-rust-x64-rel
|
|
||||||
Cq-Include-Trybots: chromium/try:mac-rust-x64-dbg
|
|
||||||
Cq-Include-Trybots: chromium/try:win-rust-x64-dbg
|
|
||||||
Cq-Include-Trybots: chromium/try:win-rust-x64-rel
|
|
||||||
Change-Id: Iec99681a89deaf3f2c79c76f9c4d1c2b2b7d6fe1
|
|
||||||
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6439711
|
|
||||||
Reviewed-by: Collin Baker <collinbaker@chromium.org>
|
|
||||||
Commit-Queue: Alan Zhao <ayzhao@google.com>
|
|
||||||
Cr-Commit-Position: refs/heads/main@{#1443873}
|
|
||||||
---
|
|
||||||
build/rust/allocator/BUILD.gn | 6 +-
|
|
||||||
build/rust/allocator/lib.rs | 6 +-
|
|
||||||
build/rust/std/rules/BUILD.gn | 476 +++++++++++++++++-----------------
|
|
||||||
tools/rust/update_rust.py | 2 +-
|
|
||||||
4 files changed, 251 insertions(+), 239 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/build/rust/allocator/BUILD.gn b/build/rust/allocator/BUILD.gn
|
|
||||||
index f09314afc8158..ca581630c76c9 100644
|
|
||||||
--- a/build/rust/allocator/BUILD.gn
|
|
||||||
+++ b/build/rust/allocator/BUILD.gn
|
|
||||||
@@ -32,6 +32,10 @@ if (toolchain_has_rust) {
|
|
||||||
sources = [ "lib.rs" ]
|
|
||||||
crate_root = "lib.rs"
|
|
||||||
cxx_bindings = [ "lib.rs" ]
|
|
||||||
+ rustflags = [
|
|
||||||
+ "--cfg",
|
|
||||||
+ "mangle_alloc_error_handler",
|
|
||||||
+ ]
|
|
||||||
|
|
||||||
deps = [ ":allocator_impls" ]
|
|
||||||
|
|
||||||
@@ -40,7 +44,7 @@ if (toolchain_has_rust) {
|
|
||||||
allow_unsafe = true
|
|
||||||
|
|
||||||
if (use_cpp_allocator_impls) {
|
|
||||||
- rustflags = [
|
|
||||||
+ rustflags += [
|
|
||||||
"--cfg",
|
|
||||||
"use_cpp_allocator_impls",
|
|
||||||
]
|
|
||||||
diff --git a/build/rust/allocator/lib.rs b/build/rust/allocator/lib.rs
|
|
||||||
index b8b67d9c6c649..4e2dad3d542a8 100644
|
|
||||||
--- a/build/rust/allocator/lib.rs
|
|
||||||
+++ b/build/rust/allocator/lib.rs
|
|
||||||
@@ -57,13 +57,17 @@ static GLOBAL: std::alloc::System = std::alloc::System;
|
|
||||||
#[linkage = "weak"]
|
|
||||||
static __rust_no_alloc_shim_is_unstable: u8 = 0;
|
|
||||||
|
|
||||||
-#[no_mangle]
|
|
||||||
+// Mangle the symbol name as rustc expects.
|
|
||||||
+#[cfg_attr(mangle_alloc_error_handler, rustc_std_internal_symbol)]
|
|
||||||
+#[cfg_attr(not(mangle_alloc_error_handler), no_mangle)]
|
|
||||||
+#[allow(non_upper_case_globals)]
|
|
||||||
#[linkage = "weak"]
|
|
||||||
static __rust_alloc_error_handler_should_panic: u8 = 0;
|
|
||||||
|
|
||||||
// Mangle the symbol name as rustc expects.
|
|
||||||
#[cfg_attr(mangle_alloc_error_handler, rustc_std_internal_symbol)]
|
|
||||||
#[cfg_attr(not(mangle_alloc_error_handler), no_mangle)]
|
|
||||||
+#[allow(non_upper_case_globals)]
|
|
||||||
#[linkage = "weak"]
|
|
||||||
fn __rust_alloc_error_handler(_size: usize, _align: usize) {
|
|
||||||
unsafe { ffi::crash_immediately() }
|
|
|
@ -1,44 +0,0 @@
|
||||||
From 4a0377f0b847af505915b0e0a6c4178d4e7c3244 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Matt Jolly <kangie@gentoo.org>
|
|
||||||
Date: Mon, 14 Apr 2025 20:16:46 -0700
|
|
||||||
Subject: [PATCH] Drop `remap_alloc` dep
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
commit e3a1797dbab3eaa1c808d53215b32c8759d27ac7 dropped the source set
|
|
||||||
that this refers to, in favour of a more modern, crate-based solution.
|
|
||||||
|
|
||||||
This seems to have been overlooked, possibly as it only appears to
|
|
||||||
be called if using the unbundle toolchain.
|
|
||||||
|
|
||||||
Bug: 408221149
|
|
||||||
Signed-off-by: Matt Jolly <kangie@gentoo.org>
|
|
||||||
Change-Id: I1703d8e1e456161aa2b736169eec407235847099
|
|
||||||
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6456604
|
|
||||||
Reviewed-by: Andrew Grieve <agrieve@chromium.org>
|
|
||||||
Reviewed-by: Lei Zhang <thestig@chromium.org>
|
|
||||||
Commit-Queue: Łukasz Anforowicz <lukasza@chromium.org>
|
|
||||||
Reviewed-by: Łukasz Anforowicz <lukasza@chromium.org>
|
|
||||||
Cr-Commit-Position: refs/heads/main@{#1446912}
|
|
||||||
---
|
|
||||||
build/rust/std/BUILD.gn | 6 ------
|
|
||||||
1 file changed, 6 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/build/rust/std/BUILD.gn b/build/rust/std/BUILD.gn
|
|
||||||
index 25db126076b2f..bb2c9884520b3 100644
|
|
||||||
--- a/build/rust/std/BUILD.gn
|
|
||||||
+++ b/build/rust/std/BUILD.gn
|
|
||||||
@@ -355,12 +355,6 @@ if (toolchain_has_rust) {
|
|
||||||
":stdlib_public_dependent_libs",
|
|
||||||
]
|
|
||||||
deps = [ ":prebuilt_rustc_copy_to_sysroot" ]
|
|
||||||
-
|
|
||||||
- # The host builds tools toolchain supports Rust only and does not use
|
|
||||||
- # the allocator remapping to point it to PartitionAlloc.
|
|
||||||
- if (!toolchain_for_rust_host_build_tools) {
|
|
||||||
- deps += [ ":remap_alloc" ]
|
|
||||||
- }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,354 +0,0 @@
|
||||||
From e65cb388e5da56d1236607e0db9cadf89e50eded Mon Sep 17 00:00:00 2001
|
|
||||||
From: Lukasz Anforowicz <lukasza@chromium.org>
|
|
||||||
Date: Tue, 15 Apr 2025 11:10:19 -0700
|
|
||||||
Subject: [PATCH] [rust] Clean up `//build/rust/allocator` after a Rust
|
|
||||||
toolchain roll.
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
This CL makes minor tweaks and changes under `//build/rust/allocator`:
|
|
||||||
|
|
||||||
* Thanks to the Rust toolchain roll, we no longer need to keep two
|
|
||||||
implementations, picking between them using the
|
|
||||||
`mangle_alloc_error_handler` configuration knob.
|
|
||||||
* The `#[cfg(use_cpp_allocator_impls)]` vs
|
|
||||||
`#[cfg(not(use_cpp_allocator_impls))]` choices have been deduplicated
|
|
||||||
by putting the related/conditional stuff under `mod cpp_allocator` and
|
|
||||||
`rust_allocator`.
|
|
||||||
* Closes a minor gap missed in https://crrev.com/c/6432410:
|
|
||||||
- Moving `DEPS` file to the new source location
|
|
||||||
|
|
||||||
Bug: 408221149
|
|
||||||
Change-Id: Id541797e03da113a5271b02a5f60eb2be08254a9
|
|
||||||
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6454872
|
|
||||||
Reviewed-by: Alan Zhao <ayzhao@google.com>
|
|
||||||
Commit-Queue: Łukasz Anforowicz <lukasza@chromium.org>
|
|
||||||
Cr-Commit-Position: refs/heads/main@{#1447241}
|
|
||||||
---
|
|
||||||
build/rust/allocator/BUILD.gn | 11 +-
|
|
||||||
build/rust/{std => allocator}/DEPS | 2 +-
|
|
||||||
build/rust/allocator/allocator_impls.cc | 65 ++----------
|
|
||||||
build/rust/allocator/allocator_impls.h | 2 +
|
|
||||||
build/rust/allocator/lib.rs | 132 +++++++++++++++---------
|
|
||||||
5 files changed, 97 insertions(+), 115 deletions(-)
|
|
||||||
rename build/rust/{std => allocator}/DEPS (76%)
|
|
||||||
|
|
||||||
diff --git a/build/rust/allocator/BUILD.gn b/build/rust/allocator/BUILD.gn
|
|
||||||
index ca581630c76c9..434a61e11bdbb 100644
|
|
||||||
--- a/build/rust/allocator/BUILD.gn
|
|
||||||
+++ b/build/rust/allocator/BUILD.gn
|
|
||||||
@@ -32,10 +32,6 @@ if (toolchain_has_rust) {
|
|
||||||
sources = [ "lib.rs" ]
|
|
||||||
crate_root = "lib.rs"
|
|
||||||
cxx_bindings = [ "lib.rs" ]
|
|
||||||
- rustflags = [
|
|
||||||
- "--cfg",
|
|
||||||
- "mangle_alloc_error_handler",
|
|
||||||
- ]
|
|
||||||
|
|
||||||
deps = [ ":allocator_impls" ]
|
|
||||||
|
|
||||||
@@ -43,13 +39,12 @@ if (toolchain_has_rust) {
|
|
||||||
no_allocator_crate = true
|
|
||||||
allow_unsafe = true
|
|
||||||
|
|
||||||
+ rustflags = []
|
|
||||||
if (use_cpp_allocator_impls) {
|
|
||||||
- rustflags += [
|
|
||||||
- "--cfg",
|
|
||||||
- "use_cpp_allocator_impls",
|
|
||||||
- ]
|
|
||||||
+ rustflags += [ "--cfg=use_cpp_allocator_impls" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
+ # TODO(https://crbug.com/410596442): Stop using unstable features here.
|
|
||||||
configs -= [ "//build/config/compiler:disallow_unstable_features" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/build/rust/std/DEPS b/build/rust/allocator/DEPS
|
|
||||||
similarity index 76%
|
|
||||||
rename from build/rust/std/DEPS
|
|
||||||
rename to build/rust/allocator/DEPS
|
|
||||||
index eb524c0a06acd..923a2e07c80f4 100644
|
|
||||||
--- a/build/rust/std/DEPS
|
|
||||||
+++ b/build/rust/allocator/DEPS
|
|
||||||
@@ -3,7 +3,7 @@ include_rules = [
|
|
||||||
]
|
|
||||||
|
|
||||||
specific_include_rules = {
|
|
||||||
- "remap_alloc.cc" : [
|
|
||||||
+ "allocator_impls.cc" : [
|
|
||||||
"+partition_alloc"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
diff --git a/build/rust/allocator/allocator_impls.cc b/build/rust/allocator/allocator_impls.cc
|
|
||||||
index bf3c2a301adf5..8887752f3dfad 100644
|
|
||||||
--- a/build/rust/allocator/allocator_impls.cc
|
|
||||||
+++ b/build/rust/allocator/allocator_impls.cc
|
|
||||||
@@ -24,62 +24,6 @@
|
|
||||||
#include <cstdlib>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
-// NOTE: this documentation is outdated.
|
|
||||||
-//
|
|
||||||
-// TODO(crbug.com/408221149): update this documentation, or replace it with docs
|
|
||||||
-// in the Rust allocator implementation.
|
|
||||||
-//
|
|
||||||
-// When linking a final binary, rustc has to pick between either:
|
|
||||||
-// * The default Rust allocator
|
|
||||||
-// * Any #[global_allocator] defined in *any rlib in its dependency tree*
|
|
||||||
-// (https://doc.rust-lang.org/edition-guide/rust-2018/platform-and-target-support/global-allocators.html)
|
|
||||||
-//
|
|
||||||
-// In this latter case, this fact will be recorded in some of the metadata
|
|
||||||
-// within the .rlib file. (An .rlib file is just a .a file, but does have
|
|
||||||
-// additional metadata for use by rustc. This is, as far as I know, the only
|
|
||||||
-// such metadata we would ideally care about.)
|
|
||||||
-//
|
|
||||||
-// In all the linked rlibs,
|
|
||||||
-// * If 0 crates define a #[global_allocator], rustc uses its default allocator
|
|
||||||
-// * If 1 crate defines a #[global_allocator], rustc uses that
|
|
||||||
-// * If >1 crates define a #[global_allocator], rustc bombs out.
|
|
||||||
-//
|
|
||||||
-// Because rustc does these checks, it doesn't just have the __rust_alloc
|
|
||||||
-// symbols defined anywhere (neither in the stdlib nor in any of these
|
|
||||||
-// crates which have a #[global_allocator] defined.)
|
|
||||||
-//
|
|
||||||
-// Instead:
|
|
||||||
-// Rust's final linking stage invokes dynamic LLVM codegen to create symbols
|
|
||||||
-// for the basic heap allocation operations. It literally creates a
|
|
||||||
-// __rust_alloc symbol at link time. Unless any crate has specified a
|
|
||||||
-// #[global_allocator], it simply calls from __rust_alloc into
|
|
||||||
-// __rdl_alloc, which is the default Rust allocator. The same applies to a
|
|
||||||
-// few other symbols.
|
|
||||||
-//
|
|
||||||
-// We're not (always) using rustc for final linking. For cases where we're not
|
|
||||||
-// Rustc as the final linker, we'll define those symbols here instead. This
|
|
||||||
-// allows us to redirect allocation to PartitionAlloc if clang is doing the
|
|
||||||
-// link.
|
|
||||||
-//
|
|
||||||
-// We use unchecked allocation paths in PartitionAlloc rather than going through
|
|
||||||
-// its shims in `malloc()` etc so that we can support fallible allocation paths
|
|
||||||
-// such as Vec::try_reserve without crashing on allocation failure.
|
|
||||||
-//
|
|
||||||
-// In future, we should build a crate with a #[global_allocator] and
|
|
||||||
-// redirect these symbols back to Rust in order to use to that crate instead.
|
|
||||||
-// This would allow Rust-linked executables to:
|
|
||||||
-// 1. Use PartitionAlloc on Windows. The stdlib uses Windows heap functions
|
|
||||||
-// directly that PartitionAlloc can not intercept.
|
|
||||||
-// 2. Have `Vec::try_reserve` to fail at runtime on Linux instead of crashing in
|
|
||||||
-// malloc() where PartitionAlloc replaces that function.
|
|
||||||
-//
|
|
||||||
-// They're weak symbols, because this file will sometimes end up in targets
|
|
||||||
-// which are linked by rustc, and thus we would otherwise get duplicate
|
|
||||||
-// definitions. The following definitions will therefore only end up being
|
|
||||||
-// used in targets which are linked by our C++ toolchain.
|
|
||||||
-//
|
|
||||||
-// # On Windows ASAN
|
|
||||||
-//
|
|
||||||
// In ASAN builds, PartitionAlloc-Everywhere is disabled, meaning malloc() and
|
|
||||||
// friends in C++ do not go to PartitionAlloc. So we also don't point the Rust
|
|
||||||
// allocation functions at PartitionAlloc. Generally, this means we just direct
|
|
||||||
@@ -93,7 +37,6 @@
|
|
||||||
// Note that there is a runtime option to make ASAN hook HeapAlloc() but
|
|
||||||
// enabling it breaks Win32 APIs like CreateProcess:
|
|
||||||
// https://issues.chromium.org/u/1/issues/368070343#comment29
|
|
||||||
-
|
|
||||||
#if !BUILDFLAG(RUST_ALLOCATOR_USES_PARTITION_ALLOC) && BUILDFLAG(IS_WIN) && \
|
|
||||||
defined(ADDRESS_SANITIZER)
|
|
||||||
#define USE_WIN_ALIGNED_MALLOC 1
|
|
||||||
@@ -110,6 +53,10 @@ unsigned char* alloc(size_t size, size_t align) {
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ // We use unchecked allocation paths in PartitionAlloc rather than going
|
|
||||||
+ // through its shims in `malloc()` etc so that we can support fallible
|
|
||||||
+ // allocation paths such as Vec::try_reserve without crashing on allocation
|
|
||||||
+ // failure.
|
|
||||||
if (align <= alignof(std::max_align_t)) {
|
|
||||||
return static_cast<unsigned char*>(allocator_shim::UncheckedAlloc(size));
|
|
||||||
} else {
|
|
||||||
@@ -144,6 +91,10 @@ unsigned char* realloc(unsigned char* p,
|
|
||||||
size_t align,
|
|
||||||
size_t new_size) {
|
|
||||||
#if BUILDFLAG(RUST_ALLOCATOR_USES_PARTITION_ALLOC)
|
|
||||||
+ // We use unchecked allocation paths in PartitionAlloc rather than going
|
|
||||||
+ // through its shims in `malloc()` etc so that we can support fallible
|
|
||||||
+ // allocation paths such as Vec::try_reserve without crashing on allocation
|
|
||||||
+ // failure.
|
|
||||||
if (align <= alignof(std::max_align_t)) {
|
|
||||||
return static_cast<unsigned char*>(
|
|
||||||
allocator_shim::UncheckedRealloc(p, new_size));
|
|
||||||
diff --git a/build/rust/allocator/allocator_impls.h b/build/rust/allocator/allocator_impls.h
|
|
||||||
index e90ab7cd422c1..e562a877d886e 100644
|
|
||||||
--- a/build/rust/allocator/allocator_impls.h
|
|
||||||
+++ b/build/rust/allocator/allocator_impls.h
|
|
||||||
@@ -10,6 +10,8 @@
|
|
||||||
#include "build/build_config.h"
|
|
||||||
#include "build/rust/allocator/buildflags.h"
|
|
||||||
|
|
||||||
+// This header exposes PartitionAlloc to Rust
|
|
||||||
+// (most APIs below are called from `impl GlobalAlloc` in `lib.rs`).
|
|
||||||
namespace rust_allocator_internal {
|
|
||||||
|
|
||||||
unsigned char* alloc(size_t size, size_t align);
|
|
||||||
diff --git a/build/rust/allocator/lib.rs b/build/rust/allocator/lib.rs
|
|
||||||
index 4e2dad3d542a8..a4f898f9b107f 100644
|
|
||||||
--- a/build/rust/allocator/lib.rs
|
|
||||||
+++ b/build/rust/allocator/lib.rs
|
|
||||||
@@ -5,72 +5,106 @@
|
|
||||||
//! Define the allocator that Rust code in Chrome should use.
|
|
||||||
//!
|
|
||||||
//! Any final artifact that depends on this crate, even transitively, will use
|
|
||||||
-//! the allocator defined here. Currently this is a thin wrapper around
|
|
||||||
-//! allocator_impls.cc's functions; see the documentation there.
|
|
||||||
+//! the allocator defined here.
|
|
||||||
+//!
|
|
||||||
+//! List of known issues:
|
|
||||||
+//!
|
|
||||||
+//! 1. We'd like to use PartitionAlloc on Windows, but the stdlib uses Windows
|
|
||||||
+//! heap functions directly that PartitionAlloc can not intercept.
|
|
||||||
+//! 2. We'd like `Vec::try_reserve` to fail at runtime on Linux instead of
|
|
||||||
+//! crashing in malloc() where PartitionAlloc replaces that function.
|
|
||||||
|
|
||||||
// Required to apply weak linkage to symbols.
|
|
||||||
+//
|
|
||||||
+// TODO(https://crbug.com/410596442): Stop using unstable features here.
|
|
||||||
+// https://github.com/rust-lang/rust/issues/29603 tracks stabilization of the `linkage` feature.
|
|
||||||
#![feature(linkage)]
|
|
||||||
// Required to apply `#[rustc_std_internal_symbol]` to our alloc error handler
|
|
||||||
// so the name is correctly mangled as rustc expects.
|
|
||||||
-#![cfg_attr(mangle_alloc_error_handler, allow(internal_features))]
|
|
||||||
-#![cfg_attr(mangle_alloc_error_handler, feature(rustc_attrs))]
|
|
||||||
+//
|
|
||||||
+// TODO(https://crbug.com/410596442): Stop using internal features here.
|
|
||||||
+#![allow(internal_features)]
|
|
||||||
+#![feature(rustc_attrs)]
|
|
||||||
|
|
||||||
+/// Module that provides `#[global_allocator]` / `GlobalAlloc` interface for
|
|
||||||
+/// using an allocator from C++.
|
|
||||||
#[cfg(use_cpp_allocator_impls)]
|
|
||||||
-use std::alloc::{GlobalAlloc, Layout};
|
|
||||||
+mod cpp_allocator {
|
|
||||||
+ use super::ffi;
|
|
||||||
+ use std::alloc::{GlobalAlloc, Layout};
|
|
||||||
|
|
||||||
-#[cfg(use_cpp_allocator_impls)]
|
|
||||||
-struct Allocator;
|
|
||||||
+ struct Allocator;
|
|
||||||
|
|
||||||
-#[cfg(use_cpp_allocator_impls)]
|
|
||||||
-unsafe impl GlobalAlloc for Allocator {
|
|
||||||
- unsafe fn alloc(&self, layout: Layout) -> *mut u8 {
|
|
||||||
- unsafe { ffi::alloc(layout.size(), layout.align()) }
|
|
||||||
- }
|
|
||||||
+ unsafe impl GlobalAlloc for Allocator {
|
|
||||||
+ unsafe fn alloc(&self, layout: Layout) -> *mut u8 {
|
|
||||||
+ unsafe { ffi::alloc(layout.size(), layout.align()) }
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) {
|
|
||||||
- unsafe {
|
|
||||||
- ffi::dealloc(ptr, layout.size(), layout.align());
|
|
||||||
+ unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) {
|
|
||||||
+ unsafe {
|
|
||||||
+ ffi::dealloc(ptr, layout.size(), layout.align());
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
- }
|
|
||||||
|
|
||||||
- unsafe fn alloc_zeroed(&self, layout: Layout) -> *mut u8 {
|
|
||||||
- unsafe { ffi::alloc_zeroed(layout.size(), layout.align()) }
|
|
||||||
- }
|
|
||||||
+ unsafe fn alloc_zeroed(&self, layout: Layout) -> *mut u8 {
|
|
||||||
+ unsafe { ffi::alloc_zeroed(layout.size(), layout.align()) }
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- unsafe fn realloc(&self, ptr: *mut u8, layout: Layout, new_size: usize) -> *mut u8 {
|
|
||||||
- unsafe { ffi::realloc(ptr, layout.size(), layout.align(), new_size) }
|
|
||||||
+ unsafe fn realloc(&self, ptr: *mut u8, layout: Layout, new_size: usize) -> *mut u8 {
|
|
||||||
+ unsafe { ffi::realloc(ptr, layout.size(), layout.align(), new_size) }
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
-}
|
|
||||||
|
|
||||||
-#[cfg(use_cpp_allocator_impls)]
|
|
||||||
-#[global_allocator]
|
|
||||||
-static GLOBAL: Allocator = Allocator;
|
|
||||||
+ #[global_allocator]
|
|
||||||
+ static GLOBAL: Allocator = Allocator;
|
|
||||||
+}
|
|
||||||
|
|
||||||
+/// Module that provides `#[global_allocator]` / `GlobalAlloc` interface for
|
|
||||||
+/// using the default Rust allocator.
|
|
||||||
#[cfg(not(use_cpp_allocator_impls))]
|
|
||||||
-#[global_allocator]
|
|
||||||
-static GLOBAL: std::alloc::System = std::alloc::System;
|
|
||||||
-
|
|
||||||
-// As part of rustc's contract for using `#[global_allocator]` without
|
|
||||||
-// rustc-generated shims we must define this symbol, since we are opting in to
|
|
||||||
-// unstable functionality. See https://github.com/rust-lang/rust/issues/123015
|
|
||||||
-#[no_mangle]
|
|
||||||
-#[linkage = "weak"]
|
|
||||||
-static __rust_no_alloc_shim_is_unstable: u8 = 0;
|
|
||||||
-
|
|
||||||
-// Mangle the symbol name as rustc expects.
|
|
||||||
-#[cfg_attr(mangle_alloc_error_handler, rustc_std_internal_symbol)]
|
|
||||||
-#[cfg_attr(not(mangle_alloc_error_handler), no_mangle)]
|
|
||||||
-#[allow(non_upper_case_globals)]
|
|
||||||
-#[linkage = "weak"]
|
|
||||||
-static __rust_alloc_error_handler_should_panic: u8 = 0;
|
|
||||||
-
|
|
||||||
-// Mangle the symbol name as rustc expects.
|
|
||||||
-#[cfg_attr(mangle_alloc_error_handler, rustc_std_internal_symbol)]
|
|
||||||
-#[cfg_attr(not(mangle_alloc_error_handler), no_mangle)]
|
|
||||||
-#[allow(non_upper_case_globals)]
|
|
||||||
-#[linkage = "weak"]
|
|
||||||
-fn __rust_alloc_error_handler(_size: usize, _align: usize) {
|
|
||||||
- unsafe { ffi::crash_immediately() }
|
|
||||||
+mod rust_allocator {
|
|
||||||
+ #[global_allocator]
|
|
||||||
+ static GLOBAL: std::alloc::System = std::alloc::System;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/// Module that provides global symbols that are needed both by `cpp_allocator`
|
|
||||||
+/// and `rust_allocator`.
|
|
||||||
+///
|
|
||||||
+/// When `rustc` drives linking, then it will define the symbols below. But
|
|
||||||
+/// Chromium only uses `rustc` to link Rust-only executables (e.g. `build.rs`
|
|
||||||
+/// scripts) and otherwise uses a non-Rust linker. This is why we have to
|
|
||||||
+/// manually define a few symbols below. We define those symbols
|
|
||||||
+/// as "weak" symbols, so that Rust-provided symbols "win" in case where Rust
|
|
||||||
+/// actually does drive the linking. This hack works (not only for Chromium,
|
|
||||||
+/// but also for google3 and other projects), but isn't officially supported by
|
|
||||||
+/// `rustc`.
|
|
||||||
+///
|
|
||||||
+/// TODO(https://crbug.com/410596442): Stop using internal features here.
|
|
||||||
+mod both_allocators {
|
|
||||||
+ use super::ffi;
|
|
||||||
+
|
|
||||||
+ /// As part of rustc's contract for using `#[global_allocator]` without
|
|
||||||
+ /// rustc-generated shims we must define this symbol, since we are opting in
|
|
||||||
+ /// to unstable functionality. See https://github.com/rust-lang/rust/issues/123015
|
|
||||||
+ #[no_mangle]
|
|
||||||
+ #[linkage = "weak"]
|
|
||||||
+ static __rust_no_alloc_shim_is_unstable: u8 = 0;
|
|
||||||
+
|
|
||||||
+ // Mangle the symbol name as rustc expects.
|
|
||||||
+ #[rustc_std_internal_symbol]
|
|
||||||
+ #[allow(non_upper_case_globals)]
|
|
||||||
+ #[linkage = "weak"]
|
|
||||||
+ static __rust_alloc_error_handler_should_panic: u8 = 0;
|
|
||||||
+
|
|
||||||
+ // Mangle the symbol name as rustc expects.
|
|
||||||
+ #[rustc_std_internal_symbol]
|
|
||||||
+ #[allow(non_upper_case_globals)]
|
|
||||||
+ #[linkage = "weak"]
|
|
||||||
+ fn __rust_alloc_error_handler(_size: usize, _align: usize) {
|
|
||||||
+ // TODO(lukasza): Investigate if we can just call `std::process::abort()` here.
|
|
||||||
+ // (Not really _needed_, but it could simplify code a little bit.)
|
|
||||||
+ unsafe { ffi::crash_immediately() }
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO(crbug.com/408221149): conditionally include the FFI glue based on
|
|
|
@ -1,20 +1,17 @@
|
||||||
# Contributor: lauren n. liberda <lauren@selfisekai.rocks>
|
# Maintainer: lauren n. liberda <lauren@selfisekai.rocks>
|
||||||
# Maintainer: Antoine Martin (ayakael) <dev@ayakael.net>
|
|
||||||
pkgname=electron
|
pkgname=electron
|
||||||
pkgver=35.5.0
|
pkgver=27.1.2
|
||||||
_gittag=v"${pkgver/_beta/-beta.}"
|
_semver="${pkgver/_beta/-beta.}"
|
||||||
pkgrel=0
|
pkgrel=0
|
||||||
_chromium=134.0.6998.205
|
_chromium=118.0.5993.162
|
||||||
_copium_tag=134.0
|
_depot_tools=b5509953468edd0906f2dc297886939abbd2bed5
|
||||||
_depot_tools=495b23b39aaba2ca3b55dd27cadc523f1cb17ee6
|
_extra_patches=118.0.5993.11
|
||||||
pkgdesc="Electron cross-platform desktop toolkit"
|
pkgdesc="Electron cross-platform desktop toolkit"
|
||||||
url="https://github.com/electron/electron"
|
url="https://github.com/electron/electron"
|
||||||
arch="aarch64 x86_64" # same as chromium
|
arch="aarch64 x86_64" # same as chromium
|
||||||
license="MIT"
|
license="MIT"
|
||||||
depends="gtk+3.0 so:libudev.so.1 xdg-utils"
|
depends="gtk+3.0 so:libudev.so.1 xdg-utils"
|
||||||
_llvmver=20
|
|
||||||
makedepends="
|
makedepends="
|
||||||
ada-dev
|
|
||||||
alsa-lib-dev
|
alsa-lib-dev
|
||||||
aom-dev
|
aom-dev
|
||||||
bash
|
bash
|
||||||
|
@ -23,20 +20,17 @@ makedepends="
|
||||||
bzip2-dev
|
bzip2-dev
|
||||||
c-ares-dev
|
c-ares-dev
|
||||||
cairo-dev
|
cairo-dev
|
||||||
clang$_llvmver-dev
|
clang16-dev
|
||||||
clang-extra-tools
|
clang-extra-tools
|
||||||
compiler-rt
|
compiler-rt
|
||||||
crc32c-dev
|
|
||||||
cups-dev
|
cups-dev
|
||||||
curl-dev
|
curl-dev
|
||||||
dav1d-dev
|
dav1d-dev
|
||||||
dbus-glib-dev
|
dbus-glib-dev
|
||||||
double-conversion-dev
|
|
||||||
eudev-dev
|
eudev-dev
|
||||||
ffmpeg-dev
|
ffmpeg-dev
|
||||||
findutils
|
findutils
|
||||||
flac-dev
|
flac-dev
|
||||||
flatbuffers-dev
|
|
||||||
flex
|
flex
|
||||||
freetype-dev
|
freetype-dev
|
||||||
gperf
|
gperf
|
||||||
|
@ -44,7 +38,6 @@ makedepends="
|
||||||
gn
|
gn
|
||||||
gzip
|
gzip
|
||||||
harfbuzz-dev
|
harfbuzz-dev
|
||||||
hdrhistogram-c-dev
|
|
||||||
hunspell-dev
|
hunspell-dev
|
||||||
http-parser-dev
|
http-parser-dev
|
||||||
hwdata-dev
|
hwdata-dev
|
||||||
|
@ -57,12 +50,11 @@ makedepends="
|
||||||
libavif-dev
|
libavif-dev
|
||||||
libbsd-dev
|
libbsd-dev
|
||||||
libcap-dev
|
libcap-dev
|
||||||
libdrm-dev
|
libevent-dev
|
||||||
libexif-dev
|
libexif-dev
|
||||||
libgcrypt-dev
|
libgcrypt-dev
|
||||||
libjpeg-turbo-dev
|
libjpeg-turbo-dev
|
||||||
libnotify-dev
|
libnotify-dev
|
||||||
libsecret-dev
|
|
||||||
libusb-dev
|
libusb-dev
|
||||||
libva-dev
|
libva-dev
|
||||||
libwebp-dev
|
libwebp-dev
|
||||||
|
@ -75,35 +67,29 @@ makedepends="
|
||||||
libxslt-dev
|
libxslt-dev
|
||||||
linux-headers
|
linux-headers
|
||||||
lld
|
lld
|
||||||
llhttp-dev
|
llvm16
|
||||||
llvm$_llvmver
|
|
||||||
mesa-dev
|
mesa-dev
|
||||||
minizip-dev
|
minizip-dev
|
||||||
nghttp2-dev
|
nghttp2-dev
|
||||||
nodejs
|
nodejs
|
||||||
npm
|
npm
|
||||||
nss-dev
|
nss-dev
|
||||||
openh264-dev
|
|
||||||
opus-dev
|
opus-dev
|
||||||
pciutils-dev
|
pciutils-dev
|
||||||
perl
|
perl
|
||||||
pipewire-dev
|
pipewire-dev
|
||||||
pulseaudio-dev
|
pulseaudio-dev
|
||||||
py3-httplib2
|
py3-httplib2
|
||||||
py3-jinja2
|
|
||||||
py3-parsing
|
py3-parsing
|
||||||
py3-setuptools
|
|
||||||
py3-six
|
py3-six
|
||||||
python3
|
python3
|
||||||
|
qt5-qtbase-dev
|
||||||
re2-dev
|
re2-dev
|
||||||
rsync
|
rsync
|
||||||
rust
|
rust
|
||||||
rust-bindgen
|
|
||||||
samurai
|
samurai
|
||||||
simdutf-dev
|
|
||||||
snappy-dev
|
snappy-dev
|
||||||
speex-dev
|
speex-dev
|
||||||
spirv-tools-dev
|
|
||||||
sqlite-dev
|
sqlite-dev
|
||||||
woff2-dev
|
woff2-dev
|
||||||
xcb-proto
|
xcb-proto
|
||||||
|
@ -113,96 +99,74 @@ makedepends="
|
||||||
"
|
"
|
||||||
subpackages="$pkgname-lang $pkgname-dev"
|
subpackages="$pkgname-lang $pkgname-dev"
|
||||||
# the lower patches are specific to electron, the top ones are from the equivalent chromium version
|
# the lower patches are specific to electron, the top ones are from the equivalent chromium version
|
||||||
source="
|
source="https://s3.sakamoto.pl/lnl-aports-snapshots/electron-$_semver-$_chromium.tar.zst
|
||||||
https://ayakael.net/api/packages/mirrors/generic/electron/$_gittag/electron-$_gittag-$_chromium.tar.zst
|
https://gitlab.com/Matt.Jolly/chromium-patches/-/archive/$_extra_patches/chromium-patches-$_extra_patches.tar.gz
|
||||||
copium-$_copium_tag.tar.gz::https://codeberg.org/selfisekai/copium/archive/$_copium_tag.tar.gz
|
|
||||||
chromium-revert-drop-of-system-java.patch
|
chromium-revert-drop-of-system-java.patch
|
||||||
compiler.patch
|
chromium-use-alpine-target.patch
|
||||||
disable-dns_config_service.patch
|
fix-missing-cstdint-include-musl.patch
|
||||||
disable-failing-tests.patch
|
|
||||||
fc-cache-version.patch
|
|
||||||
fix-opus.patch
|
|
||||||
fstatat-32bit.patch
|
|
||||||
gdbinit.patch
|
gdbinit.patch
|
||||||
generic-sensor-include.patch
|
import-version.patch
|
||||||
musl-auxv.patch
|
libstdc++13.patch
|
||||||
|
mman.patch
|
||||||
musl-sandbox.patch
|
musl-sandbox.patch
|
||||||
musl-tid-caching.patch
|
musl-tid-caching.patch
|
||||||
|
musl-v8-monotonic-pthread-cont_timedwait.patch
|
||||||
no-execinfo.patch
|
no-execinfo.patch
|
||||||
no-mallinfo.patch
|
no-mallinfo.patch
|
||||||
|
no-mte.patch
|
||||||
no-res-ninit-nclose.patch
|
no-res-ninit-nclose.patch
|
||||||
no-sandbox-settls.patch
|
no-sandbox-settls.patch
|
||||||
partalloc-no-tagging-arm64.patch
|
|
||||||
pvalloc.patch
|
|
||||||
temp-failure-retry.patch
|
temp-failure-retry.patch
|
||||||
pipewire-1.4.patch
|
|
||||||
gperf-3.2-fix.patch
|
|
||||||
0001-Reland-Use-global_allocator-to-provide-Rust-allocato.patch
|
|
||||||
0002-Call-Rust-default-allocator-directly-from-Rust.patch
|
|
||||||
0003-Roll-rust-only-f7b43542838f0a4a6cfdb17fbeadf45002042.patch
|
|
||||||
0004-Drop-remap_alloc-dep.patch
|
|
||||||
0005-rust-Clean-up-build-rust-allocator-after-a-Rust-tool.patch
|
|
||||||
|
|
||||||
electron_icon.patch
|
icon.patch
|
||||||
electron_python-jinja-3.10.patch
|
python-jinja-3.10.patch
|
||||||
electron_webpack-hash.patch
|
vector-const.patch
|
||||||
electron_unbundle-node.patch
|
webpack-hash.patch
|
||||||
electron_system-zlib-headers.patch
|
chromium-icu-74.patch
|
||||||
|
|
||||||
default.conf
|
default.conf
|
||||||
electron.desktop
|
electron.desktop
|
||||||
electron-launcher.sh
|
electron-launcher.sh
|
||||||
"
|
"
|
||||||
_copium_patches="
|
|
||||||
cr131-v8-non4k-pages.patch
|
|
||||||
cr133-ffmpeg-no-noh264parse.patch
|
|
||||||
cr133-is-musl-libcxx.patch
|
|
||||||
cr133-mv2-still-not-dead.patch
|
|
||||||
cr134-unbundle-simdutf.patch
|
|
||||||
"
|
|
||||||
# Avoid conflicting providers
|
|
||||||
sonameprefix="$pkgname:"
|
|
||||||
# tests are todo for some base checks
|
# tests are todo for some base checks
|
||||||
options="!check net suid"
|
options="!check net suid"
|
||||||
builddir="$srcdir/electron-$_gittag-$_chromium"
|
builddir="$srcdir/electron-$_semver-$_chromium"
|
||||||
|
|
||||||
export CC=clang-$_llvmver
|
export PATH="$PATH:/usr/lib/qt5/bin"
|
||||||
export CXX=clang++-$_llvmver
|
|
||||||
|
# clang uses much less memory (and this doesn't support gcc)
|
||||||
|
export CC=clang-16
|
||||||
|
export CXX=clang++-16
|
||||||
|
|
||||||
# required to find the tools
|
# required to find the tools
|
||||||
export AR=llvm-ar
|
export AR=llvm16-ar
|
||||||
export NM=llvm-nm
|
export NM=llvm16-nm
|
||||||
export LD=clang++-$_llvmver
|
export LD=clang++-16
|
||||||
|
|
||||||
# less log spam, reproducible
|
# less log spam, reproducible
|
||||||
export CFLAGS="${CFLAGS/-g/} -O2 -Wno-builtin-macro-redefined -Wno-deprecated-declarations -Wno-shift-count-overflow -Wno-ignored-attributes"
|
export CFLAGS="${CFLAGS/-g/} -O2 -Wno-unknown-warning-option -Wno-builtin-macro-redefined -Wno-deprecated-declarations"
|
||||||
export CXXFLAGS="${CXXFLAGS/-g/} -O2 -Wno-builtin-macro-redefined -Wno-deprecated-declarations -Wno-invalid-constexpr"
|
export CXXFLAGS="${CXXFLAGS/-g/} -O2 -Wno-unknown-warning-option -Wno-builtin-macro-redefined -Wno-deprecated-declarations"
|
||||||
export CPPFLAGS="${CPPFLAGS/-g/} -D__DATE__= -D__TIME__= -D__TIMESTAMP__="
|
export CPPFLAGS="${CPPFLAGS/-g/} -D__DATE__= -D__TIME__= -D__TIMESTAMP__="
|
||||||
case "$CARCH" in
|
|
||||||
aarch64|arm*|riscv64)
|
|
||||||
# not supported by clang here
|
|
||||||
export CFLAGS="${CFLAGS/-fstack-clash-protection}"
|
|
||||||
export CXXFLAGS="${CXXFLAGS/-fstack-clash-protection}"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# breaks chromium-based stuff
|
# breaks chromium-based stuff
|
||||||
export CXXFLAGS="${CXXFLAGS/-D_GLIBCXX_ASSERTIONS=1}"
|
export CXXFLAGS="${CXXFLAGS/-D_GLIBCXX_ASSERTIONS=1}"
|
||||||
|
|
||||||
# workaround to error: undefined symbol: __rustc::__rust_dealloc
|
|
||||||
# with 000*.patch patches
|
|
||||||
export RUSTC_BOOTSTRAP=1
|
|
||||||
|
|
||||||
# creates a dist tarball that does not need to git clone everything at build time.
|
# creates a dist tarball that does not need to git clone everything at build time.
|
||||||
_distbucket="sakamoto/lnl-aports-snapshots/"
|
|
||||||
snapshot() {
|
snapshot() {
|
||||||
deps
|
deps
|
||||||
# vpython3 execs system python3 with this set
|
# vpython3 execs system python3 with this set
|
||||||
export VPYTHON_BYPASS="manually managed python not supported by chrome operations"
|
export VPYTHON_BYPASS="manually managed python not supported by chrome operations"
|
||||||
export CHROMIUM_BUILDTOOLS_PATH="$srcdir/src/buildtools"
|
export CHROMIUM_BUILDTOOLS_PATH="$srcdir/src/buildtools"
|
||||||
export DEPOT_TOOLS_UPDATE=0
|
|
||||||
mkdir -p "$srcdir"
|
mkdir -p "$srcdir"
|
||||||
cd "$srcdir"
|
cd "$srcdir"
|
||||||
|
if ! [ -d src ]; then
|
||||||
|
git clone --branch=$_chromium --depth=1 \
|
||||||
|
https://chromium.googlesource.com/chromium/src.git
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! [ -d electron ]; then
|
||||||
|
git clone https://github.com/electron/electron.git
|
||||||
|
fi
|
||||||
|
|
||||||
if ! [ -d depot_tools ]; then
|
if ! [ -d depot_tools ]; then
|
||||||
(
|
(
|
||||||
|
@ -218,75 +182,83 @@ snapshot() {
|
||||||
echo "solutions = [
|
echo "solutions = [
|
||||||
{
|
{
|
||||||
\"name\": \"src/electron\",
|
\"name\": \"src/electron\",
|
||||||
\"url\": \"https://github.com/electron/electron.git@$_gittag\",
|
\"url\": \"file://$srcdir/electron@v$_semver\",
|
||||||
\"deps_file\": \"DEPS\",
|
\"deps_file\": \"DEPS\",
|
||||||
\"managed\": False,
|
\"managed\": False,
|
||||||
\"custom_deps\": {
|
\"custom_deps\": {
|
||||||
\"src\": \"https://chromium.googlesource.com/chromium/src.git@$_chromium\",
|
\"src\": None,
|
||||||
},
|
},
|
||||||
\"custom_vars\": {},
|
\"custom_vars\": {},
|
||||||
},
|
},
|
||||||
]" > .gclient
|
]" > .gclient
|
||||||
|
|
||||||
python3 depot_tools/gclient.py sync \
|
python3 depot_tools/gclient.py sync \
|
||||||
--no-history \
|
--with_branch_heads \
|
||||||
|
--with_tags \
|
||||||
--nohooks
|
--nohooks
|
||||||
|
|
||||||
python3 src/build/landmines.py
|
python3 src/build/landmines.py
|
||||||
python3 src/build/util/lastchange.py -o src/build/util/LASTCHANGE \
|
python3 src/build/util/lastchange.py -o src/build/util/LASTCHANGE
|
||||||
|
python3 src/build/util/lastchange.py -s src/third_party/dawn \
|
||||||
--revision src/gpu/webgpu/DAWN_VERSION
|
--revision src/gpu/webgpu/DAWN_VERSION
|
||||||
python3 src/build/util/lastchange.py -m GPU_LISTS_VERSION \
|
python3 src/build/util/lastchange.py -m GPU_LISTS_VERSION \
|
||||||
--revision-id-only --header src/gpu/config/gpu_lists_version.h
|
--revision-id-only --header src/gpu/config/gpu_lists_version.h
|
||||||
python3 src/build/util/lastchange.py -m SKIA_COMMIT_HASH \
|
python3 src/build/util/lastchange.py -m SKIA_COMMIT_HASH \
|
||||||
-s src/third_party/skia --header src/skia/ext/skia_commit_hash.h
|
-s src/third_party/skia --header src/skia/ext/skia_commit_hash.h
|
||||||
|
|
||||||
# rolled newer chromium with it included
|
# why?
|
||||||
sed -i '/reland_mojom_ts_generator_handle_empty_module_path_identically_to.patch/d' src/electron/patches/chromium/.patches
|
cp -r electron/patches/ffmpeg src/electron/patches/
|
||||||
|
|
||||||
python3 src/electron/script/apply_all_patches.py \
|
python3 electron/script/apply_all_patches.py \
|
||||||
src/electron/patches/config.json
|
electron/patches/config.json
|
||||||
|
|
||||||
mv src $pkgname-$_gittag-$_chromium
|
python3 src/tools/update_pgo_profiles.py \
|
||||||
|
--target=linux \
|
||||||
|
update \
|
||||||
|
--gs-url-base=chromium-optimization-profiles/pgo_profiles
|
||||||
|
|
||||||
|
python3 src/tools/download_optimization_profile.py \
|
||||||
|
--newest_state=src/chrome/android/profiles/newest.txt \
|
||||||
|
--local_state=src/chrome/android/profiles/local.txt \
|
||||||
|
--output_name=src/chrome/android/profiles/afdo.prof \
|
||||||
|
--gs_url_base=chromeos-prebuilt/afdo-job/llvm
|
||||||
|
|
||||||
|
mv src $pkgname-$_semver-$_chromium
|
||||||
|
|
||||||
# extra binaries are most likely things we don't want, so nuke them all
|
# extra binaries are most likely things we don't want, so nuke them all
|
||||||
for elf in $(scanelf -RA -F "%F" $pkgname-$_gittag-$_chromium); do
|
for elf in $(scanelf -RA -F "%F" $pkgname-$_semver-$_chromium); do
|
||||||
rm -f "$elf"
|
rm -f "$elf"
|
||||||
done
|
done
|
||||||
|
|
||||||
msg "generating tarball.. (this takes a while)"
|
msg "generating tarball.. (this takes a while)"
|
||||||
tar -cf $pkgname-$_gittag-$_chromium.tar \
|
tar -cf $pkgname-$_semver-$_chromium.tar \
|
||||||
--exclude="ChangeLog*" \
|
--exclude="ChangeLog*" \
|
||||||
--exclude="testdata/*" \
|
--exclude="testdata/*" \
|
||||||
--exclude="test_data/*" \
|
--exclude="test_data/*" \
|
||||||
--exclude="android_rust_toolchain/*" \
|
--exclude="android_rust_toolchain/*" \
|
||||||
--exclude="third_party/instrumented_libs/binaries" \
|
|
||||||
--exclude-backups \
|
--exclude-backups \
|
||||||
--exclude-caches-all \
|
--exclude-caches-all \
|
||||||
--exclude-vcs \
|
--exclude-vcs \
|
||||||
$pkgname-$_gittag-$_chromium
|
$pkgname-$_semver-$_chromium
|
||||||
|
|
||||||
zstd --auto-threads=logical --ultra --long -22 -T"${ZSTD_LIMIT:-0}" -vv $pkgname-$_gittag-$_chromium.tar -o "$SRCDEST"/$pkgname-$_gittag-$_chromium.tar.zst
|
zstd --auto-threads=logical --ultra --long -22 -T"${ZSTD_LIMIT:-0}" -vv $pkgname-$_semver-$_chromium.tar
|
||||||
mcli cp "$SRCDEST"/$pkgname-$_gittag-$_chromium.tar.zst "$_distbucket"
|
}
|
||||||
|
|
||||||
|
_extra_patch() {
|
||||||
|
msg chromium-"$1".patch
|
||||||
|
patch -Np1 < "$srcdir"/chromium-patches-"$_extra_patches"/chromium-"$1".patch
|
||||||
}
|
}
|
||||||
|
|
||||||
prepare() {
|
prepare() {
|
||||||
|
dos2unix third_party/vulkan_memory_allocator/include/vk_mem_alloc.h
|
||||||
|
|
||||||
default_prepare
|
default_prepare
|
||||||
|
|
||||||
for i in $_copium_patches; do
|
_extra_patch 118-SensorReadingField-include
|
||||||
case "$i" in
|
_extra_patch 117-material-color-include
|
||||||
*.patch)
|
_extra_patch 118-system-freetype
|
||||||
msg "${i%::*}"
|
_extra_patch 117-system-zstd
|
||||||
patch -p1 -i "$srcdir/copium/$i" || failed="$failed $i"
|
_extra_patch 118-compiler
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
if [ -n "$failed" ]; then
|
|
||||||
error "The following patches failed to apply:"
|
|
||||||
for i in $failed; do
|
|
||||||
printf " %s\n" "$i" >&2
|
|
||||||
done
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
git init -q .
|
git init -q .
|
||||||
|
|
||||||
|
@ -304,9 +276,9 @@ prepare() {
|
||||||
git config commit.gpgsign false
|
git config commit.gpgsign false
|
||||||
git add LICENSE
|
git add LICENSE
|
||||||
git commit -m "init"
|
git commit -m "init"
|
||||||
git tag "$_gittag"
|
git tag "v$_semver"
|
||||||
git pack-refs
|
git pack-refs
|
||||||
yarn install --frozen-lockfile --ignore-scripts
|
yarn install --frozen-lockfile --no-scripts
|
||||||
)
|
)
|
||||||
|
|
||||||
(
|
(
|
||||||
|
@ -314,41 +286,33 @@ prepare() {
|
||||||
./update_npm_deps
|
./update_npm_deps
|
||||||
)
|
)
|
||||||
|
|
||||||
# reusable system library settings
|
|
||||||
# flatbuffers - tensorflow has a few static_asserts for a specific patch version
|
|
||||||
# highway - requires highway>=1.1.0 (arm failures)
|
|
||||||
# libavif - https://github.com/AOMediaCodec/libavif/commit/50a541469c98009016af8dcc9f83a1be79f3a7d9
|
|
||||||
# libaom - https://aomedia.googlesource.com/aom/+/706ee36dcc82%5E%21/
|
# libaom - https://aomedia.googlesource.com/aom/+/706ee36dcc82%5E%21/
|
||||||
# but watch this space: https://aomedia-review.googlesource.com/c/aom/+/188606
|
local use_system="
|
||||||
# jsoncpp, re2, snappy, swiftshader-*, woff2 - requires use_custom_libcxx=false
|
|
||||||
# icu 76 does not build - https://bugs.gentoo.org/943216
|
|
||||||
local chromium_use_system="
|
|
||||||
brotli
|
|
||||||
crc32c
|
|
||||||
dav1d
|
dav1d
|
||||||
double-conversion
|
|
||||||
ffmpeg
|
ffmpeg
|
||||||
flac
|
flac
|
||||||
fontconfig
|
fontconfig
|
||||||
freetype
|
freetype
|
||||||
harfbuzz-ng
|
harfbuzz-ng
|
||||||
|
icu
|
||||||
|
jsoncpp
|
||||||
|
libavif
|
||||||
libdrm
|
libdrm
|
||||||
|
libevent
|
||||||
libjpeg
|
libjpeg
|
||||||
libsecret
|
|
||||||
libusb
|
|
||||||
libwebp
|
libwebp
|
||||||
libxml
|
libxml
|
||||||
libxslt
|
libxslt
|
||||||
openh264
|
|
||||||
opus
|
opus
|
||||||
simdutf
|
re2
|
||||||
|
snappy
|
||||||
|
woff2
|
||||||
zlib
|
zlib
|
||||||
zstd
|
zstd
|
||||||
"
|
"
|
||||||
|
|
||||||
for _lib in $chromium_use_system jinja2 libjpeg_turbo unrar; do
|
for _lib in $use_system libjpeg_turbo; do
|
||||||
msg "Removing buildscripts for system provided $_lib"
|
msg "Removing buildscripts for system provided $_lib"
|
||||||
_lib="${_lib/swiftshader-/swiftshader/third_party/}"
|
|
||||||
find . -type f -path "*third_party/$_lib/*" \
|
find . -type f -path "*third_party/$_lib/*" \
|
||||||
\! -path "*third_party/$_lib/chromium/*" \
|
\! -path "*third_party/$_lib/chromium/*" \
|
||||||
\! -path "*third_party/$_lib/google/*" \
|
\! -path "*third_party/$_lib/google/*" \
|
||||||
|
@ -357,38 +321,10 @@ prepare() {
|
||||||
\! -path './third_party/pdfium/third_party/freetype/include/pstables.h' \
|
\! -path './third_party/pdfium/third_party/freetype/include/pstables.h' \
|
||||||
\! -path './third_party/harfbuzz-ng/utils/hb_scoped.h' \
|
\! -path './third_party/harfbuzz-ng/utils/hb_scoped.h' \
|
||||||
\! -path './third_party/crashpad/crashpad/third_party/zlib/zlib_crashpad.h' \
|
\! -path './third_party/crashpad/crashpad/third_party/zlib/zlib_crashpad.h' \
|
||||||
\! -regex '.*\.\(gn\|gni\|gyp\|gypi\|isolate\|py\)' \
|
\! -regex '.*\.\(gn\|gni\|isolate\|py\)' \
|
||||||
-delete
|
-delete
|
||||||
done
|
done
|
||||||
|
|
||||||
# ada - needs use_custom_libcxx=false
|
|
||||||
local node_use_system="
|
|
||||||
llhttp
|
|
||||||
brotli
|
|
||||||
cares
|
|
||||||
corepack
|
|
||||||
histogram
|
|
||||||
nghttp2
|
|
||||||
nghttp3
|
|
||||||
ngtcp2
|
|
||||||
zlib
|
|
||||||
"
|
|
||||||
# some of these are provided by system, e.g. brotli. some are from chromium,
|
|
||||||
# e.g. boringssl (as openssl). some are not in use at all (corepack)
|
|
||||||
for _lib in $node_use_system openssl; do
|
|
||||||
msg "Removing buildscripts for $_lib"
|
|
||||||
find . -type f -path "*third_party/electron_node/deps/$_lib/*" \
|
|
||||||
\! -path "*third_party/electron_node/deps/$_lib/chromium/*" \
|
|
||||||
\! -path "*third_party/electron_node/deps/$_lib/google/*" \
|
|
||||||
\! -regex '.*\.\(gn\|gni\|gyp\|gypi\|isolate\|py\)' \
|
|
||||||
-delete
|
|
||||||
done
|
|
||||||
# XXX: hack. unbundle-node.patch uses this list to switch things
|
|
||||||
# in config.gypi. https://github.com/electron/electron/issues/40836
|
|
||||||
echo $node_use_system > third_party/electron_node/use_system.txt
|
|
||||||
|
|
||||||
rm -rf third_party/electron_node/tools/inspector_protocol/jinja2
|
|
||||||
|
|
||||||
# https://groups.google.com/a/chromium.org/d/topic/chromium-packagers/9JX1N2nf4PU/discussion
|
# https://groups.google.com/a/chromium.org/d/topic/chromium-packagers/9JX1N2nf4PU/discussion
|
||||||
touch chrome/test/data/webui/i18n_process_css_test.html
|
touch chrome/test/data/webui/i18n_process_css_test.html
|
||||||
# Use the file at run time instead of effectively compiling it in
|
# Use the file at run time instead of effectively compiling it in
|
||||||
|
@ -397,15 +333,9 @@ prepare() {
|
||||||
|
|
||||||
msg "Running debundle script"
|
msg "Running debundle script"
|
||||||
python3 build/linux/unbundle/replace_gn_files.py --system-libraries \
|
python3 build/linux/unbundle/replace_gn_files.py --system-libraries \
|
||||||
$chromium_use_system
|
$use_system
|
||||||
python3 third_party/libaddressinput/chromium/tools/update-strings.py
|
python3 third_party/libaddressinput/chromium/tools/update-strings.py
|
||||||
|
|
||||||
# flatc is used in build workflows since https://crrev.com/c/5595037,
|
|
||||||
# but the pre-generated files are still checked-in. remove to make sure
|
|
||||||
# they're not used. (if used, they will break builds on version mismatch.)
|
|
||||||
# https://github.com/tensorflow/tensorflow/issues/62298
|
|
||||||
# find third_party/tflite/ -name '*_generated.h' -delete
|
|
||||||
|
|
||||||
# prevent annoying errors when regenerating gni
|
# prevent annoying errors when regenerating gni
|
||||||
sed -i 's,^update_readme$,#update_readme,' \
|
sed -i 's,^update_readme$,#update_readme,' \
|
||||||
third_party/libvpx/generate_gni.sh
|
third_party/libvpx/generate_gni.sh
|
||||||
|
@ -418,7 +348,8 @@ prepare() {
|
||||||
sed -i -e 's/\<xmlMalloc\>/malloc/' -e 's/\<xmlFree\>/free/' \
|
sed -i -e 's/\<xmlMalloc\>/malloc/' -e 's/\<xmlFree\>/free/' \
|
||||||
third_party/blink/renderer/core/xml/*.cc \
|
third_party/blink/renderer/core/xml/*.cc \
|
||||||
third_party/blink/renderer/core/xml/parser/xml_document_parser.cc \
|
third_party/blink/renderer/core/xml/parser/xml_document_parser.cc \
|
||||||
third_party/libxml/chromium/*.cc
|
third_party/libxml/chromium/*.cc \
|
||||||
|
third_party/maldoca/src/maldoca/ole/oss_utils.h
|
||||||
|
|
||||||
_configure
|
_configure
|
||||||
}
|
}
|
||||||
|
@ -427,76 +358,63 @@ _configure() {
|
||||||
cd "$builddir"
|
cd "$builddir"
|
||||||
msg "Configuring build"
|
msg "Configuring build"
|
||||||
|
|
||||||
case "$USE_CCACHE" in
|
|
||||||
1)
|
|
||||||
local cc_wrapper="ccache"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
local cc_wrapper=""
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
local maglev=true
|
|
||||||
local symbol_level=0
|
|
||||||
local vaapi=true
|
|
||||||
|
|
||||||
# shellcheck disable=2089
|
# shellcheck disable=2089
|
||||||
local gn_config="
|
local gn_config="
|
||||||
|
clang_base_path=\"/usr\"
|
||||||
|
custom_toolchain=\"//build/toolchain/linux/unbundle:default\"
|
||||||
|
host_toolchain=\"//build/toolchain/linux/unbundle:default\"
|
||||||
import(\"//electron/build/args/release.gn\")
|
import(\"//electron/build/args/release.gn\")
|
||||||
|
|
||||||
blink_enable_generated_code_formatting=false
|
blink_enable_generated_code_formatting=false
|
||||||
cc_wrapper=\"$cc_wrapper\"
|
|
||||||
chrome_pgo_phase=0
|
chrome_pgo_phase=0
|
||||||
clang_base_path=\"/usr\"
|
|
||||||
clang_use_chrome_plugins=false
|
clang_use_chrome_plugins=false
|
||||||
clang_version=\"$_llvmver\"
|
|
||||||
custom_toolchain=\"//build/toolchain/linux/unbundle:default\"
|
|
||||||
disable_fieldtrial_testing_config=true
|
|
||||||
enable_hangout_services_extension=true
|
|
||||||
enable_nacl=false
|
|
||||||
enable_nocompile_tests=false
|
|
||||||
enable_stripping=false
|
|
||||||
enable_rust=true
|
|
||||||
enable_vr=false
|
|
||||||
fatal_linker_warnings=false
|
fatal_linker_warnings=false
|
||||||
ffmpeg_branding=\"Chrome\"
|
ffmpeg_branding=\"Chrome\"
|
||||||
host_toolchain=\"//build/toolchain/linux/unbundle:default\"
|
icu_use_data_file=true
|
||||||
icu_use_data_file=false
|
|
||||||
is_cfi=false
|
is_cfi=false
|
||||||
is_clang=true
|
is_clang=true
|
||||||
is_component_ffmpeg=true
|
is_component_ffmpeg=true
|
||||||
is_debug=false
|
is_debug=false
|
||||||
is_musl=true
|
|
||||||
is_official_build=true
|
is_official_build=true
|
||||||
|
symbol_level=0
|
||||||
|
treat_warnings_as_errors=false
|
||||||
|
|
||||||
|
angle_enable_gl_null=false
|
||||||
|
build_tflite_with_xnnpack=false
|
||||||
|
build_with_tflite_lib=true
|
||||||
|
disable_fieldtrial_testing_config=true
|
||||||
|
enable_hangout_services_extension=true
|
||||||
|
enable_library_cdms=false
|
||||||
|
enable_media_remoting=false
|
||||||
|
enable_nacl=false
|
||||||
|
enable_paint_preview=false
|
||||||
|
enable_reading_list=false
|
||||||
|
enable_remoting=false
|
||||||
|
enable_reporting=false
|
||||||
|
enable_rust=false
|
||||||
|
enable_screen_ai_service=false
|
||||||
|
enable_service_discovery=false
|
||||||
|
enable_stripping=false
|
||||||
|
enable_vr=false
|
||||||
|
ozone_platform_headless=false
|
||||||
|
|
||||||
link_pulseaudio=true
|
link_pulseaudio=true
|
||||||
proprietary_codecs=true
|
proprietary_codecs=true
|
||||||
rtc_link_pipewire=true
|
rtc_link_pipewire=true
|
||||||
rtc_use_pipewire=true
|
rtc_use_pipewire=true
|
||||||
rustc_version=\"yes\"
|
use_custom_libcxx=false
|
||||||
rust_bindgen_root=\"/usr\"
|
|
||||||
rust_sysroot_absolute=\"/usr\"
|
|
||||||
safe_browsing_use_unrar=false
|
|
||||||
symbol_level=$symbol_level
|
|
||||||
treat_warnings_as_errors=false
|
|
||||||
use_custom_libcxx=true
|
|
||||||
use_lld=true
|
|
||||||
use_pulseaudio=true
|
|
||||||
use_safe_libstdcxx=false
|
|
||||||
use_system_libffi=true
|
|
||||||
use_sysroot=false
|
|
||||||
use_thin_lto=false
|
|
||||||
use_vaapi=$vaapi
|
|
||||||
v8_enable_maglev=$maglev
|
|
||||||
|
|
||||||
skia_use_dawn=false
|
|
||||||
use_dawn=false
|
use_dawn=false
|
||||||
use_system_ada=false
|
use_pulseaudio=true
|
||||||
|
use_sysroot=false
|
||||||
use_system_cares=true
|
use_system_cares=true
|
||||||
use_system_histogram=true
|
use_system_freetype=true
|
||||||
|
use_system_harfbuzz=true
|
||||||
use_system_lcms2=true
|
use_system_lcms2=true
|
||||||
|
use_system_libdrm=true
|
||||||
use_system_libffi=true
|
use_system_libffi=true
|
||||||
use_system_llhttp=true
|
use_system_libjpeg=true
|
||||||
use_system_nghttp2=true
|
use_system_nghttp2=true
|
||||||
|
use_vaapi=true
|
||||||
"
|
"
|
||||||
|
|
||||||
# shellcheck disable=2086,2090,2116
|
# shellcheck disable=2086,2090,2116
|
||||||
|
@ -505,13 +423,13 @@ _configure() {
|
||||||
}
|
}
|
||||||
|
|
||||||
build() {
|
build() {
|
||||||
export ELECTRON_OUT_DIR="$builddir"/out/Release/
|
export PATH="$PATH:/usr/lib/qt5/bin"
|
||||||
|
|
||||||
ninja -C out/Release \
|
ninja -C out/Release \
|
||||||
copy_node_headers \
|
|
||||||
electron_dist_zip \
|
electron_dist_zip \
|
||||||
node_gypi_headers \
|
node_gypi_headers \
|
||||||
node_version_header
|
node_version_header \
|
||||||
|
tar_headers
|
||||||
}
|
}
|
||||||
|
|
||||||
package() {
|
package() {
|
||||||
|
@ -525,7 +443,8 @@ package() {
|
||||||
install -Dm755 "$srcdir"/default.conf "$pkgdir"/etc/electron/default.conf
|
install -Dm755 "$srcdir"/default.conf "$pkgdir"/etc/electron/default.conf
|
||||||
|
|
||||||
mkdir -p "$pkgdir"/usr/include/electron
|
mkdir -p "$pkgdir"/usr/include/electron
|
||||||
cp -rv "$builddir"/out/Release/gen/node_headers "$pkgdir"/usr/include/electron
|
|
||||||
|
mv -v "$builddir"/out/Release/gen/node_headers "$pkgdir"/usr/include/electron
|
||||||
ln -sv /usr/include/electron/node_headers/include/node "$pkgdir"/usr/include/electron/node
|
ln -sv /usr/include/electron/node_headers/include/node "$pkgdir"/usr/include/electron/node
|
||||||
|
|
||||||
mkdir -p "$pkgdir"/usr/include/electron/node_headers/include/nan
|
mkdir -p "$pkgdir"/usr/include/electron/node_headers/include/nan
|
||||||
|
@ -551,40 +470,30 @@ lang() {
|
||||||
}
|
}
|
||||||
|
|
||||||
sha512sums="
|
sha512sums="
|
||||||
a30c115f17f9811347f8713fa604b56244e39facbbab7b6b82cbc3049ed12b429b06f2faafa8a48dd727b655753848d099ba6720fae15c9bb00e6a427dc2758e electron-v35.5.0-134.0.6998.205.tar.zst
|
07f653f24e7fe1ef96a0ff676fa3c987fd0826980b5e9611705cb7fc44f00182fa62e67e67c6df5a3b1b4c063d99a3266054a83aa67fb44b11ffffcd8e23c3eb electron-27.1.2-118.0.5993.162.tar.zst
|
||||||
c1857b5d6975650f915f3db552666f521822b857e39958ccfb54129f3878f272deaafc3dd446bc8441a5e84f075791feeeb62841b74bb555d8c546bfe231d164 copium-134.0.tar.gz
|
194c3a7a0fa03a85df6fe52ece3d53d4d15b9d0cb440b56a2ccb1b5c0d3f6481b6f7287aa705c596ceea92d475677ddaf58926f3b31c03a3c20e80ad7e481ce7 chromium-patches-118.0.5993.11.tar.gz
|
||||||
29bb685e03356a77df5fd347cdf55194cc8b3265c421cc76e54d64edefc329dbcb052deb26b22e8f587ce68456876c071de1b7d258dd0fcc6ee66c875ec4a020 chromium-revert-drop-of-system-java.patch
|
29bb685e03356a77df5fd347cdf55194cc8b3265c421cc76e54d64edefc329dbcb052deb26b22e8f587ce68456876c071de1b7d258dd0fcc6ee66c875ec4a020 chromium-revert-drop-of-system-java.patch
|
||||||
d9cc4a37a0311d23ae315a8d8124f8dbf60db8cc4a3943818638174b20387f1d770d00871f6608957b246ad956abca43c22ea0b072724287f2947e1909e47323 compiler.patch
|
fa291e941076146d0edd5b96c088240a44a6e0aca3dfc744929655607182d2dc47e6c35ecb419f7c623fcf7f26dc3c4dd924dbf5ed10c3b986283f5ef2f72573 chromium-use-alpine-target.patch
|
||||||
4057cc78f10bfd64092bc35a373869abb1d68b880cdbca70422f39ffd78a929c19c7728d4d4c40709aaba25581148a93ae5343e724849fd35323062ed68753fa disable-dns_config_service.patch
|
9200f78bad70e95c648a5e8392d50642190600f655c6baa366ff6467ebad52d3b3f305dad58f3610da67136f4b723557653b174ec5c25be8d8737ee04d9ee09f fix-missing-cstdint-include-musl.patch
|
||||||
2470904846e3adde2c9506f9e78220daca0932320b628dd3d427bf2b7c17a8f7880cb97e787b046c28de7aca642e1a8d30824d6049905976da77e7473baa64da disable-failing-tests.patch
|
|
||||||
5fc5c012c1db6cf1ba82f38c6f3f4f5ca3a209e47ac708a74de379b018e0649b7694877c9571ef79002dde875ffc07b458a3355425f1c01867f362c66c2bc1bf fc-cache-version.patch
|
|
||||||
f7fe8a8e5eee17310fb4c3e5de621b4b89ea0567f75033c65be970950cca62b50c5fbd004735e4ad39bdb2e1638b3b73ea614203d323f8181ae18c71edf302a0 fix-opus.patch
|
|
||||||
c63dee5044353eb306a39ca1526158c0f003ab310ecb03d1c368dc2a979454590c84b8d3c15484517d5e66bb8add9b231da9abbadf2e50850abd72ac1345c4ab fstatat-32bit.patch
|
|
||||||
33ee60863cc438ef57ffef92ba4cf67a856a5ffc16138bce241bcf87e47b15154aa86918e793c26f7ec4dc62a445257ad5673ed7001daf22c4043cf6cc57da7f gdbinit.patch
|
33ee60863cc438ef57ffef92ba4cf67a856a5ffc16138bce241bcf87e47b15154aa86918e793c26f7ec4dc62a445257ad5673ed7001daf22c4043cf6cc57da7f gdbinit.patch
|
||||||
36a764fa73443b47d38050b52dbe6ad2fa8d67201ff4ccdbad13b52308ef165ca046aac6f9609fe35890a6485f0f3e672e78cc41e3e44f3cdc7f145e540524e8 generic-sensor-include.patch
|
8de65109ece27ea63bd469f2220c56b8c752ba0a50fdf390082a2d5ae74b8e010199126175569f6d5084270dd4e0571e68aec32c0bca8211a6699925b3a09124 import-version.patch
|
||||||
99bcc7dd485b404a90c606a96addab1d900852128d44fb8cea8acc7303189ef87c89a7b0e749fd0e10c5ef5f6bf1fadeb5c16a34503cab6a59938ce2653d887e musl-auxv.patch
|
49851d42ce8ccd533d01d1bb2477930802b0bcebab8dd52f2da292088378c6ed9b74146e7dad55edfe096281fc84b2c55abaf832744fd4553a97c38ed891df3a libstdc++13.patch
|
||||||
51f1959bd622af26a1c3a1f4b0ad9a5bfa461057aa4cf9960c568dddf8ac47d55989c277f5d5ab5db040a04c54925a531af7a1cc767559218b408eaa6bdd7577 musl-sandbox.patch
|
0e991842e23a4b9133898125eeb39e45e3f86f886eef5d2f0d9a72ee143a3e124b3b4f60be94edd57ce4185bcd69704edb51f76d08fdb6207f5559a08dd41ab0 mman.patch
|
||||||
|
50c274a420bb8a7f14fcb56e40920dac8f708792a4520789b4987facea459bef88113d5a2b60fa8c57bee6e92bff3617d6b73fa305c8c44614c638971cffd440 musl-sandbox.patch
|
||||||
e7163ac5810ac85366cef2447412287c856e3d67c6b77f219a6e5a418b1965b98e449c409424ad0704a5bded9355dd0aec3dc4585918ce5a2ab36c079707afe2 musl-tid-caching.patch
|
e7163ac5810ac85366cef2447412287c856e3d67c6b77f219a6e5a418b1965b98e449c409424ad0704a5bded9355dd0aec3dc4585918ce5a2ab36c079707afe2 musl-tid-caching.patch
|
||||||
a250cff50d282b02ce0f28880d0a2b4fb8e7df51bc072bfeeddc561c29a7c76453dbcbc7b17b82966a7b30a31409d2555720d1dcf963e1b3fb8a2a06a6abcf46 no-execinfo.patch
|
92eb002718026611f5542362ad69b67f0a398ff71b3fca5c05d55cb5c6f9f29334e5e127bb4860cfaa3fba0f0d4c901e2b98808217e7dc02e254a64a5c9521aa musl-v8-monotonic-pthread-cont_timedwait.patch
|
||||||
0b41aeb6b212f9c3f61aa0a8d3085c9e865a2e68f3270ceec2376aab67f337ac46eaea7da36d3fd7219e2a1cb731b7aa2d3fb619a374d2b7653976b9f4f384bb no-mallinfo.patch
|
8cc774e8d84e434960222c0497ad8193ae35c0732f98d3282d5fd4b4930f914809eec97832c199517ca89ca6b9d1d011db5ce533c40c68ce5fa464609d131a23 no-execinfo.patch
|
||||||
|
b5479874d125ee95a311295f227f8881a83023ec34fded7a6160b3ae32ea3ba0f2b833a9fb264c57f3d22746b6d8b00bdc8eb2ff86c43c412d6d3b55ae15b16b no-mallinfo.patch
|
||||||
|
8a52ff52201a5e20344f5497ee2ffef0520f7b2d934be92227e49c3f2c12a94c33650eefc88a0e451a6b81d44ce197db421aaec7388e6bb1cb525a43628779d3 no-mte.patch
|
||||||
e4c4e5bc6f828f9c883dd418c0ba01887949c29c311f76206a1ec29f620b0c0ba0452949dc2778a9c46ea066405857536964a36436a68eecf7da7952736333cf no-res-ninit-nclose.patch
|
e4c4e5bc6f828f9c883dd418c0ba01887949c29c311f76206a1ec29f620b0c0ba0452949dc2778a9c46ea066405857536964a36436a68eecf7da7952736333cf no-res-ninit-nclose.patch
|
||||||
6dc4d8dc92e685dace62265a1ddb3aebc558aed54d20ff6d36b030be0c48d7e84662326c31363612492574d9a03c62653cdc21a60995b97dee1d75cae86a9f9b no-sandbox-settls.patch
|
6dc4d8dc92e685dace62265a1ddb3aebc558aed54d20ff6d36b030be0c48d7e84662326c31363612492574d9a03c62653cdc21a60995b97dee1d75cae86a9f9b no-sandbox-settls.patch
|
||||||
f2b08538ff57c50b3772a07ca91845f9d45f4a5112f608b6192d4fb5d7be48f478c0c36194d95ab7bbf933e0278e5c6d578619d8643895cdc40386eebc5b975f partalloc-no-tagging-arm64.patch
|
|
||||||
03f829a2da633533ef3fd0f287f5ec602d936a97a98b53cd2415553c2537ae9d571f35397ca7c9fb3f4b0806c300e3b189569f8d979ca132e1a2a4dae7206396 pvalloc.patch
|
|
||||||
e48693e6b7aeebf69a5acbf80d9a35defe4c23835121dfeb58b051ac7c527e758a41004f4d193274fe1b01c0bfb1dbc77b09cb6a404a3fdee507a2918afb0edb temp-failure-retry.patch
|
e48693e6b7aeebf69a5acbf80d9a35defe4c23835121dfeb58b051ac7c527e758a41004f4d193274fe1b01c0bfb1dbc77b09cb6a404a3fdee507a2918afb0edb temp-failure-retry.patch
|
||||||
1814096bc611e7f56cc5c570214dae715a4cda1fba96a6b585a73a1abc8b9161efaa799dc83887dac531dbafe9479bbe235cabe1a61cb3081e268c53a6144908 pipewire-1.4.patch
|
905565c10f5e5600e7d4db965c892cc45009a258e9995da958974d838ace469e1db1019195307e8807860d5b55ba6bfeea478b1f39a9b99e82c619b2816a1a22 icon.patch
|
||||||
4bc087a1e5acbb0f8f884756b40c127df88699ecd6eb42c4aff6691b87239bb6915dd102e9ef2544502a12bff011859ad497206940473e6b0a0fd75afb562a4c gperf-3.2-fix.patch
|
e05180199ee1d559e4e577cedd3e589844ecf40d98a86321bf1bea5607b02eeb5feb486deddae40e1005b644550331f6b8500177aa7e79bcb3750d3c1ceb76c3 python-jinja-3.10.patch
|
||||||
858f8e3c544abf3ffe0f54ba303713e9b4058e15996c8dc10bab7c999d82e1960756325a41d6bebb3a00404efb8e51c299f61f60de4feaac6b621757ab85d329 0001-Reland-Use-global_allocator-to-provide-Rust-allocato.patch
|
71571b15cf8bd6259b7fd22bea0e46b64890f3db776365de33fe539f26ce9ef99459e05c3dde9434c3657225bc67160abc915acd93033cb487c770c6a2a5975f vector-const.patch
|
||||||
077497c1598c7db9f4c23e000e9b86e1833de4866479fd921313543ad599e141427bf38ae687f84c3da59af68f09a776265c2a569e1a7abfa80440231baef10a 0002-Call-Rust-default-allocator-directly-from-Rust.patch
|
2aa340854316f1284217c0ca17cbf44953684ad6c7da90815117df30928612eb9fb9ffb734b948dfc309cd25d1a67cd57f77aac2d052a3dd9aca07a3a58cbb30 webpack-hash.patch
|
||||||
5002aa73eb19b87c702eef5b087ecb3a2679142c28cd95a5a9571aeffe24e6944497e862058ed1d609317a723cdec1678f84543235fb93f12653a92b92309efe 0003-Roll-rust-only-f7b43542838f0a4a6cfdb17fbeadf45002042.patch
|
4c540972fa12acd9f0aafb8dc7e9987c3d6e4f28ff679dde522ebcec2dc5ae1a62d9d255bed0a30b9c79ae3b90ab0f5b9ae1ef5b7bf338612e28d9ef70250ca3 chromium-icu-74.patch
|
||||||
d2e414135d2b046dd9efe277f88062bcb0a94749a17a014309260b1469305d55059931b9531572713c8e516897e30fd2f5317948ece1581ffe9b7b6c01078a6d 0004-Drop-remap_alloc-dep.patch
|
07e9203b05402f81c0ded5871a845e37bdc4c09b7bb2839312396f298a9ce8196e2c24508675e3d6f695f1e2b0ff1c2c64f4e9dfff3ff5359a87cb7b9b972393 default.conf
|
||||||
fe66228c0eefe3d08e2a7955b11e6a46f58f477befceba1628765fb016f30eb0bb02723aeedcabdb1ea3b84c42b5ea65073998e0a64f5ce082120fc7e65dee9a 0005-rust-Clean-up-build-rust-allocator-after-a-Rust-tool.patch
|
|
||||||
465107da7818b237e3c144a318ab80c3c9343b51ed38b8971ef204692d13346929becbe94cefad4c153788d3a200642143584d5ca070f6304e768ba2139c19ec electron_icon.patch
|
|
||||||
e05180199ee1d559e4e577cedd3e589844ecf40d98a86321bf1bea5607b02eeb5feb486deddae40e1005b644550331f6b8500177aa7e79bcb3750d3c1ceb76c3 electron_python-jinja-3.10.patch
|
|
||||||
2aa340854316f1284217c0ca17cbf44953684ad6c7da90815117df30928612eb9fb9ffb734b948dfc309cd25d1a67cd57f77aac2d052a3dd9aca07a3a58cbb30 electron_webpack-hash.patch
|
|
||||||
c7f57929943a86f9e5f333da9d5691da88038770eeb46dd0a0719962c934deb2879f0e7a1ed714e9383e38ee4d68eb754501f362c4d7cdee76cfc2e980b21272 electron_unbundle-node.patch
|
|
||||||
4d9287d4cdfe27fbfb7be3d4b26c0c40edbd6a0c3ff926d60f2093ca09c15bcb58e20c2ccc8c0606aafd66c6d25a54225bc329cb056d8c5b297db4c6d0e768e6 electron_system-zlib-headers.patch
|
|
||||||
e8ea87c547546011c4c8fc2de30e4f443b85cd4cfcff92808e2521d2f9ada03feefb8e1b0cf0f6b460919c146e56ef8d5ad4bb5e2461cc5247c30d92eb4d068e default.conf
|
|
||||||
191559fc7aa1ea0353c6fb0cc321ee1d5803a0e44848c8be941cfab96277b0de6a59962d373e2a2a1686c8f9be2bcf2d2f33706759a339a959e297d3f7fda463 electron.desktop
|
191559fc7aa1ea0353c6fb0cc321ee1d5803a0e44848c8be941cfab96277b0de6a59962d373e2a2a1686c8f9be2bcf2d2f33706759a339a959e297d3f7fda463 electron.desktop
|
||||||
5f7ba5ad005f196facec1c0f26108356b64cafb1e5cfa462ff714a33b8a4c757ac00bfcb080da09eb5b65032f8eb245d9676a61ec554515d125ed63912708648 electron-launcher.sh
|
ff1844036c8ae0a0a57a16211a816bc0ad550ccf6ea1cf718e228b8c95b9c4f5c9772d1a1a23638c0e140703a7b52874371e27a0d9d54a7b9468e5c384759be5 electron-launcher.sh
|
||||||
"
|
"
|
||||||
|
|
|
@ -1,59 +0,0 @@
|
||||||
# electron
|
|
||||||
|
|
||||||
This is the `electron` package for Alpine Linux.
|
|
||||||
|
|
||||||
Please report any issues [using Gitlab](https://gitlab.alpinelinux.org/alpine/aports/-/issues/new) and tag @ayakael
|
|
||||||
|
|
||||||
## Building electron
|
|
||||||
|
|
||||||
Electron is an application framework based on `chromium`. Just like `chromium`,
|
|
||||||
and any Google application, the build process is a form of [hostile
|
|
||||||
architecture] (https://en.wikipedia.org/wiki/Hostile_architecture) It's quite
|
|
||||||
literally chromium with patches applied on top for the most part. The build
|
|
||||||
process applies a series of git patches against `chromium` from directories
|
|
||||||
with a script.
|
|
||||||
|
|
||||||
Its source code isn't available as a downloadable tarball. It is only fetchable
|
|
||||||
using Google's `gclient` available in `depot_tools` with a reimplemented
|
|
||||||
version in the `teapot` package. By executing, `abuild snapshot`, the tarball
|
|
||||||
can be fetched and packaged, as long as `gclient` is in your path. For ease of
|
|
||||||
maintenance, a workflow on [Ayakael's Forge](https://ayakael.net/mirrors/electron)
|
|
||||||
automatically fetches and packages the source code on new releases and makes it
|
|
||||||
available in a [generic Forgejo repository](https://ayakael.net/mirrors/-/packages/generic/electron).
|
|
||||||
|
|
||||||
## Electron maintenance cycle
|
|
||||||
|
|
||||||
Security / bug fixes land from upstream land randomly, but chromium security fixes land
|
|
||||||
basically weekly around Tuesday in `America/Los_Angeles`. Minor relases only require
|
|
||||||
an upgrade to the `electron` packages. It is advisable to follow chromium weekly
|
|
||||||
security fixes, although following `electron` minor releases is fine.
|
|
||||||
|
|
||||||
Major version upgrades require a more thorough approach. For one, most changes
|
|
||||||
can be backported from `chromium` APKBUILD by diffing the previous version
|
|
||||||
packaged with `electron` with the current (set with `_chromium` var). You also
|
|
||||||
need to rebuild all `electron` apps, with patches sometimes necessary when
|
|
||||||
upstream bumps to a new `nodejs` major verion. Major electron releases are
|
|
||||||
every two `chromium` major releases, with [dates known well ahead]
|
|
||||||
(https://chromiumdash.appspot.com/schedule) with a few major releases of
|
|
||||||
`electron` [officially supported at a time](https://www.electronjs.org/docs/latest/tutorial/electron-timelines).
|
|
||||||
|
|
||||||
Steps, in a nutshell:
|
|
||||||
|
|
||||||
1. Set `pkgver` to up-to-date version
|
|
||||||
|
|
||||||
2. Optional: fetch source-code using `abuild snapshot`, making sure `gclient`
|
|
||||||
is in your path
|
|
||||||
|
|
||||||
3. Update source checksum using `abuild checksum`
|
|
||||||
|
|
||||||
4. If major update, backport changes from `chromium` aport and bump `pkgrel`
|
|
||||||
for all electron-based applications.
|
|
||||||
|
|
||||||
## Why is this package still in testing
|
|
||||||
|
|
||||||
[Work is under way](https://gitlab.alpinelinux.org/alpine/aports/-/issues/15760)
|
|
||||||
to make this aport ready for `community`
|
|
||||||
|
|
||||||
Until that happens, this package is also kept-to-date against the latest
|
|
||||||
release of Alpine Linux in [Ayakael's Forge](https://ayakael.net/forge/-/packages/alpine/signal-desktop)
|
|
||||||
This is true of all Ayakael's packages still in `testing`.
|
|
20
backports/electron/chromium-icu-74.patch
Normal file
20
backports/electron/chromium-icu-74.patch
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
See ICU change https://github.com/unicode-org/icu/commit/2e45e6ec0e84a1c01812015a254ea31b286316fb
|
||||||
|
|
||||||
|
Similar has happened in the past. See:
|
||||||
|
https://chromium.googlesource.com/chromium/src/+/e60b571faa3f14dd9119a6792dccf12f8bf80192
|
||||||
|
|
||||||
|
diff --git a/third_party/blink/renderer/platform/text/text_break_iterator.cc b/third_party/blink/renderer/platform/text/text_break_iterator.cc
|
||||||
|
index ddfbd51..247da06 100644
|
||||||
|
--- a/third_party/blink/renderer/platform/text/text_break_iterator.cc
|
||||||
|
+++ b/third_party/blink/renderer/platform/text/text_break_iterator.cc
|
||||||
|
@@ -161,7 +161,9 @@ static const unsigned char kAsciiLineBreakTable[][(kAsciiLineBreakTableLastChar
|
||||||
|
};
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
|
-#if U_ICU_VERSION_MAJOR_NUM >= 58
|
||||||
|
+#if U_ICU_VERSION_MAJOR_NUM >= 74
|
||||||
|
+#define BA_LB_COUNT (U_LB_COUNT - 8)
|
||||||
|
+#elif U_ICU_VERSION_MAJOR_NUM >= 58
|
||||||
|
#define BA_LB_COUNT (U_LB_COUNT - 3)
|
||||||
|
#else
|
||||||
|
#define BA_LB_COUNT U_LB_COUNT
|
30
backports/electron/chromium-use-alpine-target.patch
Normal file
30
backports/electron/chromium-use-alpine-target.patch
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
building for arm targets by default passes --target to clang, because it
|
||||||
|
assumes it's cross compiling (so passes --target as if the host is different,
|
||||||
|
instead of assuming default)
|
||||||
|
|
||||||
|
probably also works: removing this entirely. but to be safe, pass the alpine clang host triple
|
||||||
|
--
|
||||||
|
--- a/build/config/compiler/BUILD.gn
|
||||||
|
+++ b/build/config/compiler/BUILD.gn
|
||||||
|
@@ -915,8 +915,8 @@ config("compiler_cpu_abi") {
|
||||||
|
} else if (current_cpu == "arm") {
|
||||||
|
if (is_clang && !is_android && !is_nacl &&
|
||||||
|
!(is_chromeos_lacros && is_chromeos_device)) {
|
||||||
|
- cflags += [ "--target=arm-linux-gnueabihf" ]
|
||||||
|
- ldflags += [ "--target=arm-linux-gnueabihf" ]
|
||||||
|
+ cflags += [ "--target=armv7-alpine-linux-musleabihf" ]
|
||||||
|
+ ldflags += [ "--target=armv7-alpine-linux-musleabihf" ]
|
||||||
|
}
|
||||||
|
if (!is_nacl) {
|
||||||
|
cflags += [
|
||||||
|
@@ -930,8 +930,8 @@ config("compiler_cpu_abi") {
|
||||||
|
} else if (current_cpu == "arm64") {
|
||||||
|
if (is_clang && !is_android && !is_nacl && !is_fuchsia &&
|
||||||
|
!(is_chromeos_lacros && is_chromeos_device)) {
|
||||||
|
- cflags += [ "--target=aarch64-linux-gnu" ]
|
||||||
|
- ldflags += [ "--target=aarch64-linux-gnu" ]
|
||||||
|
+ cflags += [ "--target=aarch64-alpine-linux-musl" ]
|
||||||
|
+ ldflags += [ "--target=aarch64-alpine-linux-musl" ]
|
||||||
|
}
|
||||||
|
if (is_android) {
|
||||||
|
# Outline atomics crash on Exynos 9810. http://crbug.com/1272795
|
|
@ -1,161 +0,0 @@
|
||||||
--- ./build/config/compiler/BUILD.gn.orig
|
|
||||||
+++ ./build/config/compiler/BUILD.gn
|
|
||||||
@@ -591,24 +591,6 @@
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- # TODO(crbug.com/40283598): This causes binary size growth and potentially
|
|
||||||
- # other problems.
|
|
||||||
- # TODO(crbug.com/40284925): This isn't supported by Cronet's mainline llvm version.
|
|
||||||
- if (default_toolchain != "//build/toolchain/cros:target" &&
|
|
||||||
- !llvm_android_mainline) {
|
|
||||||
- cflags += [
|
|
||||||
- "-mllvm",
|
|
||||||
- "-split-threshold-for-reg-with-hint=0",
|
|
||||||
- ]
|
|
||||||
- if (use_thin_lto && is_a_target_toolchain) {
|
|
||||||
- if (is_win) {
|
|
||||||
- ldflags += [ "-mllvm:-split-threshold-for-reg-with-hint=0" ]
|
|
||||||
- } else {
|
|
||||||
- ldflags += [ "-Wl,-mllvm,-split-threshold-for-reg-with-hint=0" ]
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
# TODO(crbug.com/40192287): Investigate why/if this should be needed.
|
|
||||||
if (is_win) {
|
|
||||||
cflags += [ "/clang:-ffp-contract=off" ]
|
|
||||||
@@ -1045,20 +1027,6 @@
|
|
||||||
# `-nodefaultlibs` from the linker invocation from Rust, which would be used
|
|
||||||
# to compile dylibs on Android, such as for constructing unit test APKs.
|
|
||||||
"-Cdefault-linker-libraries",
|
|
||||||
-
|
|
||||||
- # To make Rust .d files compatible with ninja
|
|
||||||
- "-Zdep-info-omit-d-target",
|
|
||||||
-
|
|
||||||
- # If a macro panics during compilation, show which macro and where it is
|
|
||||||
- # defined.
|
|
||||||
- "-Zmacro-backtrace",
|
|
||||||
-
|
|
||||||
- # For deterministic builds, keep the local machine's current working
|
|
||||||
- # directory from appearing in build outputs.
|
|
||||||
- "-Zremap-cwd-prefix=.",
|
|
||||||
-
|
|
||||||
- # We use clang-rt sanitizer runtimes.
|
|
||||||
- "-Zexternal-clangrt",
|
|
||||||
]
|
|
||||||
|
|
||||||
if (!is_win || force_rustc_color_output) {
|
|
||||||
@@ -1107,7 +1075,6 @@
|
|
||||||
# Don't allow unstable features to be enabled by `#![feature()]` without
|
|
||||||
# additional command line flags.
|
|
||||||
config("disallow_unstable_features") {
|
|
||||||
- rustflags = [ "-Zallow-features=" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
config("libcxx_hardening") {
|
|
||||||
@@ -1242,8 +1209,8 @@
|
|
||||||
}
|
|
||||||
} else if (current_cpu == "arm") {
|
|
||||||
if (is_clang && !is_android && !is_nacl && !is_chromeos_device) {
|
|
||||||
- cflags += [ "--target=arm-linux-gnueabihf" ]
|
|
||||||
- ldflags += [ "--target=arm-linux-gnueabihf" ]
|
|
||||||
+ cflags += [ "--target=armv7-alpine-linux-musleabihf" ]
|
|
||||||
+ ldflags += [ "--target=armv7-alpine-linux-musleabihf" ]
|
|
||||||
}
|
|
||||||
if (!is_nacl) {
|
|
||||||
cflags += [
|
|
||||||
@@ -1257,8 +1224,8 @@
|
|
||||||
} else if (current_cpu == "arm64") {
|
|
||||||
if (is_clang && !is_android && !is_nacl && !is_fuchsia &&
|
|
||||||
!is_chromeos_device) {
|
|
||||||
- cflags += [ "--target=aarch64-linux-gnu" ]
|
|
||||||
- ldflags += [ "--target=aarch64-linux-gnu" ]
|
|
||||||
+ cflags += [ "--target=aarch64-alpine-linux-musl" ]
|
|
||||||
+ ldflags += [ "--target=aarch64-alpine-linux-musl" ]
|
|
||||||
}
|
|
||||||
} else if (current_cpu == "mipsel" && !is_nacl) {
|
|
||||||
ldflags += [ "-Wl,--hash-style=sysv" ]
|
|
||||||
@@ -2086,7 +2053,7 @@
|
|
||||||
defines = [ "_HAS_NODISCARD" ]
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
- cflags = [ "-Wall" ]
|
|
||||||
+ cflags = []
|
|
||||||
if (is_clang) {
|
|
||||||
# Enable extra warnings for chromium_code when we control the compiler.
|
|
||||||
cflags += [ "-Wextra" ]
|
|
||||||
--- ./build/config/rust.gni.orig
|
|
||||||
+++ ./build/config/rust.gni
|
|
||||||
@@ -198,13 +198,13 @@
|
|
||||||
rust_abi_target = ""
|
|
||||||
if (is_linux || is_chromeos) {
|
|
||||||
if (current_cpu == "arm64") {
|
|
||||||
- rust_abi_target = "aarch64-unknown-linux-gnu"
|
|
||||||
+ rust_abi_target = "aarch64-alpine-linux-musl"
|
|
||||||
cargo_target_abi = ""
|
|
||||||
} else if (current_cpu == "x86") {
|
|
||||||
- rust_abi_target = "i686-unknown-linux-gnu"
|
|
||||||
+ rust_abi_target = "i586-alpine-linux-musl"
|
|
||||||
cargo_target_abi = ""
|
|
||||||
} else if (current_cpu == "x64") {
|
|
||||||
- rust_abi_target = "x86_64-unknown-linux-gnu"
|
|
||||||
+ rust_abi_target = "x86_64-alpine-linux-musl"
|
|
||||||
cargo_target_abi = ""
|
|
||||||
} else if (current_cpu == "arm") {
|
|
||||||
if (arm_float_abi == "hard") {
|
|
||||||
@@ -214,18 +214,18 @@
|
|
||||||
}
|
|
||||||
if (arm_arch == "armv7-a" || arm_arch == "armv7") {
|
|
||||||
# No way to inform Rust about the -a suffix.
|
|
||||||
- rust_abi_target = "armv7-unknown-linux-gnueabi" + float_suffix
|
|
||||||
+ rust_abi_target = "armv7-alpine-linux-musleabi" + float_suffix
|
|
||||||
cargo_target_abi = "eabi" + float_suffix
|
|
||||||
} else {
|
|
||||||
- rust_abi_target = "arm-unknown-linux-gnueabi" + float_suffix
|
|
||||||
+ rust_abi_target = "armv6-alpine-linux-musleabi" + float_suffix
|
|
||||||
cargo_target_abi = "eabi" + float_suffix
|
|
||||||
}
|
|
||||||
} else if (current_cpu == "riscv64") {
|
|
||||||
- rust_abi_target = "riscv64gc-unknown-linux-gnu"
|
|
||||||
+ rust_abi_target = "riscv64-alpine-linux-musl"
|
|
||||||
cargo_target_abi = ""
|
|
||||||
} else {
|
|
||||||
# Best guess for other future platforms.
|
|
||||||
- rust_abi_target = current_cpu + "-unknown-linux-gnu"
|
|
||||||
+ rust_abi_target = current_cpu + "-alpine-linux-musl"
|
|
||||||
cargo_target_abi = ""
|
|
||||||
}
|
|
||||||
} else if (is_android) {
|
|
||||||
--- ./build/config/clang/BUILD.gn.orig
|
|
||||||
+++ ./build/config/clang/BUILD.gn
|
|
||||||
@@ -128,14 +128,15 @@
|
|
||||||
} else if (is_apple) {
|
|
||||||
_dir = "darwin"
|
|
||||||
} else if (is_linux || is_chromeos) {
|
|
||||||
+ _dir = "linux"
|
|
||||||
if (current_cpu == "x64") {
|
|
||||||
- _dir = "x86_64-unknown-linux-gnu"
|
|
||||||
+ _suffix = "-x86_64"
|
|
||||||
} else if (current_cpu == "x86") {
|
|
||||||
- _dir = "i386-unknown-linux-gnu"
|
|
||||||
+ _suffix = "-i386"
|
|
||||||
} else if (current_cpu == "arm") {
|
|
||||||
- _dir = "armv7-unknown-linux-gnueabihf"
|
|
||||||
+ _suffix = "-armhf"
|
|
||||||
} else if (current_cpu == "arm64") {
|
|
||||||
- _dir = "aarch64-unknown-linux-gnu"
|
|
||||||
+ _suffix = "-aarch64"
|
|
||||||
} else {
|
|
||||||
assert(false) # Unhandled cpu type
|
|
||||||
}
|
|
||||||
--- ./build/config/gcc/BUILD.gn.orig
|
|
||||||
+++ ./build/config/gcc/BUILD.gn
|
|
||||||
@@ -32,7 +32,6 @@
|
|
||||||
# See http://gcc.gnu.org/wiki/Visibility
|
|
||||||
config("symbol_visibility_hidden") {
|
|
||||||
cflags = [ "-fvisibility=hidden" ]
|
|
||||||
- rustflags = [ "-Zdefault-visibility=hidden" ]
|
|
||||||
|
|
||||||
# Visibility attribute is not supported on AIX.
|
|
||||||
if (current_os != "aix") {
|
|
372
backports/electron/crbug-1407202-mediarouter-crash.patch
Normal file
372
backports/electron/crbug-1407202-mediarouter-crash.patch
Normal file
|
@ -0,0 +1,372 @@
|
||||||
|
From d0c1f5ee1f56c165bdf550c9e3be0d7313587b80 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Elly Fong-Jones <ellyjones@chromium.org>
|
||||||
|
Date: Wed, 18 Jan 2023 22:33:11 +0000
|
||||||
|
Subject: [PATCH] media: untangle MediaRouterUI lifetimes
|
||||||
|
|
||||||
|
Currently, MediaRouterUI is owned by MediaItemUIDeviceSelectorView.
|
||||||
|
There is an observer method named "OnControllerInvalidated" which
|
||||||
|
MediaItemUIDeviceSelectorView reacts to by deleting the MediaRouterUI it
|
||||||
|
owns. However, OnControllerInvalidated can actually be called in two
|
||||||
|
different situations:
|
||||||
|
|
||||||
|
* From MediaRouterUI::TakeMediaRouteStarter(), in which case the
|
||||||
|
MediaRouterUI object is *not* being destroyed, but should be, because
|
||||||
|
it can't be safely used after TakeMediaRouteStarter() ends;
|
||||||
|
* From MediaRouterUI::~MediaRouterUI(), in which case the MediaRouterUI
|
||||||
|
object *is* being destroyed already and should not be.
|
||||||
|
|
||||||
|
In the second case, only the fact that libc++ nulls out unique_ptr
|
||||||
|
before destroying the pointed-to object saves us from a use-after-free;
|
||||||
|
under libstdc++, we UaF immediately by re-entering the destructor. Even
|
||||||
|
under libc++ though this is still very dangerous, because any observers
|
||||||
|
that happened to be registered after MediaItemUIDeviceSelectorView will
|
||||||
|
be invoked after the destruction of the object they're observing. Right
|
||||||
|
now there are no such other observers, but the fact remains that this
|
||||||
|
interface is basically a UaF timebomb.
|
||||||
|
|
||||||
|
This change separates "this object is about to be destroyed" (an
|
||||||
|
observable state) from "please destroy this object, it is no longer
|
||||||
|
useful" (a callback that is made to the object's owner) by:
|
||||||
|
|
||||||
|
1. Renaming OnControllerInvalidated to OnControllerDestroying, to make
|
||||||
|
it very clear what is happening to the object, and
|
||||||
|
2. Adding a RegisterDestructor method to CastDialogController, which
|
||||||
|
allows MediaItemUIDeviceSelectorView to pass a callback into
|
||||||
|
MediaRouterUI which MediaRouterUI can use to arrange for its own
|
||||||
|
destruction.
|
||||||
|
|
||||||
|
This is still a bit tangled and ungainly, but it's safe. A fuller
|
||||||
|
writeup is on the linked bug.
|
||||||
|
|
||||||
|
Fixed: 1407202
|
||||||
|
Change-Id: Id9410de1fbf2cb42f13957dde316b7c9259f192f
|
||||||
|
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4165967
|
||||||
|
Reviewed-by: Peter Kasting <pkasting@chromium.org>
|
||||||
|
Reviewed-by: Takumi Fujimoto <takumif@chromium.org>
|
||||||
|
Commit-Queue: Elly Fong-Jones <ellyjones@chromium.org>
|
||||||
|
Cr-Commit-Position: refs/heads/main@{#1094110}
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/chrome/browser/ui/media_router/cast_dialog_controller.h b/chrome/browser/ui/media_router/cast_dialog_controller.h
|
||||||
|
index 2a8de976..c3c0553 100644
|
||||||
|
--- a/chrome/browser/ui/media_router/cast_dialog_controller.h
|
||||||
|
+++ b/chrome/browser/ui/media_router/cast_dialog_controller.h
|
||||||
|
@@ -24,10 +24,12 @@
|
||||||
|
public:
|
||||||
|
virtual ~Observer() = default;
|
||||||
|
|
||||||
|
- virtual void OnModelUpdated(const CastDialogModel& model) = 0;
|
||||||
|
+ virtual void OnModelUpdated(const CastDialogModel& model) {}
|
||||||
|
|
||||||
|
- // Observer should drop its reference to the controller when this is called.
|
||||||
|
- virtual void OnControllerInvalidated() = 0;
|
||||||
|
+ // Notifies observers that the observed object is being destroyed. Observers
|
||||||
|
+ // MUST NOT try to destroy the observed object in response - to manage the
|
||||||
|
+ // lifetime of a CastDialogController, use RegisterDestructor() below.
|
||||||
|
+ virtual void OnControllerDestroying() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
virtual ~CastDialogController() = default;
|
||||||
|
@@ -55,6 +57,16 @@
|
||||||
|
// intended that this API should only be used to transfer ownership to some
|
||||||
|
// new component that will want to start casting on this dialog box's behalf.
|
||||||
|
virtual std::unique_ptr<MediaRouteStarter> TakeMediaRouteStarter() = 0;
|
||||||
|
+
|
||||||
|
+ // Registers a callback for when the CastDialogController has given up
|
||||||
|
+ // ownership of its MediaRouteStarter and is no longer safe to use. The
|
||||||
|
+ // provided closure must destroy |this| or otherwise ensure it is never used
|
||||||
|
+ // again. This method can only be called once.
|
||||||
|
+ //
|
||||||
|
+ // TODO(https://crbug.com/1408494): It's awkward that CastDialogController has
|
||||||
|
+ // a state where it exists but is unsafe to use, and doubly awkward that we
|
||||||
|
+ // have to paper over that with this callback. Can that be fixed?
|
||||||
|
+ virtual void RegisterDestructor(base::OnceClosure destructor) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace media_router
|
||||||
|
diff --git a/chrome/browser/ui/media_router/media_router_ui.cc b/chrome/browser/ui/media_router/media_router_ui.cc
|
||||||
|
index 1865115f..644d131 100644
|
||||||
|
--- a/chrome/browser/ui/media_router/media_router_ui.cc
|
||||||
|
+++ b/chrome/browser/ui/media_router/media_router_ui.cc
|
||||||
|
@@ -83,6 +83,9 @@
|
||||||
|
MediaRouterUI::~MediaRouterUI() {
|
||||||
|
if (media_route_starter_)
|
||||||
|
DetachFromMediaRouteStarter();
|
||||||
|
+ for (CastDialogController::Observer& observer : observers_) {
|
||||||
|
+ observer.OnControllerDestroying();
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
// static
|
||||||
|
@@ -145,9 +148,6 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
void MediaRouterUI::DetachFromMediaRouteStarter() {
|
||||||
|
- for (CastDialogController::Observer& observer : observers_)
|
||||||
|
- observer.OnControllerInvalidated();
|
||||||
|
-
|
||||||
|
media_route_starter()->RemovePresentationRequestSourceObserver(this);
|
||||||
|
media_route_starter()->RemoveMediaSinkWithCastModesObserver(this);
|
||||||
|
}
|
||||||
|
@@ -181,8 +181,16 @@
|
||||||
|
|
||||||
|
std::unique_ptr<MediaRouteStarter> MediaRouterUI::TakeMediaRouteStarter() {
|
||||||
|
DCHECK(media_route_starter_) << "MediaRouteStarter already taken!";
|
||||||
|
- DetachFromMediaRouteStarter();
|
||||||
|
- return std::move(media_route_starter_);
|
||||||
|
+ auto starter = std::move(media_route_starter_);
|
||||||
|
+ if (destructor_) {
|
||||||
|
+ std::move(destructor_).Run(); // May destroy `this`.
|
||||||
|
+ }
|
||||||
|
+ return starter;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void MediaRouterUI::RegisterDestructor(base::OnceClosure destructor) {
|
||||||
|
+ DCHECK(!destructor_);
|
||||||
|
+ destructor_ = std::move(destructor);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MediaRouterUI::CreateRoute(const MediaSink::Id& sink_id,
|
||||||
|
diff --git a/chrome/browser/ui/media_router/media_router_ui.h b/chrome/browser/ui/media_router/media_router_ui.h
|
||||||
|
index 5c2f14e..7afe775 100644
|
||||||
|
--- a/chrome/browser/ui/media_router/media_router_ui.h
|
||||||
|
+++ b/chrome/browser/ui/media_router/media_router_ui.h
|
||||||
|
@@ -100,8 +100,10 @@
|
||||||
|
void StopCasting(const std::string& route_id) override;
|
||||||
|
void ClearIssue(const Issue::Id& issue_id) override;
|
||||||
|
// Note that |MediaRouterUI| should not be used after |TakeMediaRouteStarter|
|
||||||
|
- // is called.
|
||||||
|
+ // is called. To enforce that, |TakeMediaRouteStarter| calls the destructor
|
||||||
|
+ // callback given to |RegisterDestructor| to destroy itself.
|
||||||
|
std::unique_ptr<MediaRouteStarter> TakeMediaRouteStarter() override;
|
||||||
|
+ void RegisterDestructor(base::OnceClosure destructor) override;
|
||||||
|
|
||||||
|
// Requests a route be created from the source mapped to
|
||||||
|
// |cast_mode|, to the sink given by |sink_id|.
|
||||||
|
@@ -337,6 +339,8 @@
|
||||||
|
raw_ptr<MediaRouter> router_;
|
||||||
|
raw_ptr<LoggerImpl> logger_;
|
||||||
|
|
||||||
|
+ base::OnceClosure destructor_;
|
||||||
|
+
|
||||||
|
// NOTE: Weak pointers must be invalidated before all other member variables.
|
||||||
|
// Therefore |weak_factory_| must be placed at the end.
|
||||||
|
base::WeakPtrFactory<MediaRouterUI> weak_factory_{this};
|
||||||
|
diff --git a/chrome/browser/ui/media_router/media_router_ui_unittest.cc b/chrome/browser/ui/media_router/media_router_ui_unittest.cc
|
||||||
|
index 2cc243d1..c33437b 100644
|
||||||
|
--- a/chrome/browser/ui/media_router/media_router_ui_unittest.cc
|
||||||
|
+++ b/chrome/browser/ui/media_router/media_router_ui_unittest.cc
|
||||||
|
@@ -80,11 +80,11 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
MOCK_METHOD1(OnModelUpdated, void(const CastDialogModel& model));
|
||||||
|
- void OnControllerInvalidated() override {
|
||||||
|
+ void OnControllerDestroying() override {
|
||||||
|
controller_ = nullptr;
|
||||||
|
- OnControllerInvalidatedInternal();
|
||||||
|
+ OnControllerDestroyingInternal();
|
||||||
|
}
|
||||||
|
- MOCK_METHOD0(OnControllerInvalidatedInternal, void());
|
||||||
|
+ MOCK_METHOD0(OnControllerDestroyingInternal, void());
|
||||||
|
|
||||||
|
private:
|
||||||
|
raw_ptr<CastDialogController> controller_ = nullptr;
|
||||||
|
@@ -295,7 +295,7 @@
|
||||||
|
})));
|
||||||
|
NotifyUiOnRoutesUpdated({route});
|
||||||
|
|
||||||
|
- EXPECT_CALL(observer, OnControllerInvalidatedInternal());
|
||||||
|
+ EXPECT_CALL(observer, OnControllerDestroyingInternal());
|
||||||
|
ui_.reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/chrome/browser/ui/views/global_media_controls/media_item_ui_device_selector_view.cc b/chrome/browser/ui/views/global_media_controls/media_item_ui_device_selector_view.cc
|
||||||
|
index 34dad46..d843bba 100644
|
||||||
|
--- a/chrome/browser/ui/views/global_media_controls/media_item_ui_device_selector_view.cc
|
||||||
|
+++ b/chrome/browser/ui/views/global_media_controls/media_item_ui_device_selector_view.cc
|
||||||
|
@@ -222,6 +222,11 @@
|
||||||
|
if (cast_controller) {
|
||||||
|
cast_controller_ = std::move(cast_controller);
|
||||||
|
cast_controller_->AddObserver(this);
|
||||||
|
+ cast_controller_->RegisterDestructor(
|
||||||
|
+ base::BindOnce(&MediaItemUIDeviceSelectorView::DestroyCastController,
|
||||||
|
+ // Unretained is safe: this callback is held by
|
||||||
|
+ // cast_controller_, which is owned by this object.
|
||||||
|
+ base::Unretained(this)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -499,10 +504,6 @@
|
||||||
|
observer.OnMediaItemUIDeviceSelectorUpdated(device_entry_ui_map_);
|
||||||
|
}
|
||||||
|
|
||||||
|
-void MediaItemUIDeviceSelectorView::OnControllerInvalidated() {
|
||||||
|
- cast_controller_.reset();
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
void MediaItemUIDeviceSelectorView::OnDeviceSelected(int tag) {
|
||||||
|
auto it = device_entry_ui_map_.find(tag);
|
||||||
|
DCHECK(it != device_entry_ui_map_.end());
|
||||||
|
@@ -658,5 +659,9 @@
|
||||||
|
weak_ptr_factory_.GetWeakPtr()));
|
||||||
|
}
|
||||||
|
|
||||||
|
+void MediaItemUIDeviceSelectorView::DestroyCastController() {
|
||||||
|
+ cast_controller_.reset();
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
BEGIN_METADATA(MediaItemUIDeviceSelectorView, views::View)
|
||||||
|
END_METADATA
|
||||||
|
diff --git a/chrome/browser/ui/views/global_media_controls/media_item_ui_device_selector_view.h b/chrome/browser/ui/views/global_media_controls/media_item_ui_device_selector_view.h
|
||||||
|
index e950565..222fc20 100644
|
||||||
|
--- a/chrome/browser/ui/views/global_media_controls/media_item_ui_device_selector_view.h
|
||||||
|
+++ b/chrome/browser/ui/views/global_media_controls/media_item_ui_device_selector_view.h
|
||||||
|
@@ -81,7 +81,6 @@
|
||||||
|
|
||||||
|
// media_router::CastDialogController::Observer
|
||||||
|
void OnModelUpdated(const media_router::CastDialogModel& model) override;
|
||||||
|
- void OnControllerInvalidated() override;
|
||||||
|
|
||||||
|
// MediaItemUIFooterView::Delegate
|
||||||
|
void OnDeviceSelected(int tag) override;
|
||||||
|
@@ -121,6 +120,7 @@
|
||||||
|
void RecordCastDeviceCount();
|
||||||
|
DeviceEntryUI* GetDeviceEntryUI(views::View* view) const;
|
||||||
|
void RegisterAudioDeviceCallbacks();
|
||||||
|
+ void DestroyCastController();
|
||||||
|
|
||||||
|
bool has_expand_button_been_shown_ = false;
|
||||||
|
bool have_devices_been_shown_ = false;
|
||||||
|
diff --git a/chrome/browser/ui/views/global_media_controls/media_item_ui_device_selector_view_unittest.cc b/chrome/browser/ui/views/global_media_controls/media_item_ui_device_selector_view_unittest.cc
|
||||||
|
index c3bcc6cc..6ae3dde8 100644
|
||||||
|
--- a/chrome/browser/ui/views/global_media_controls/media_item_ui_device_selector_view_unittest.cc
|
||||||
|
+++ b/chrome/browser/ui/views/global_media_controls/media_item_ui_device_selector_view_unittest.cc
|
||||||
|
@@ -156,6 +156,7 @@
|
||||||
|
MOCK_METHOD1(ClearIssue, void(const media_router::Issue::Id& issue_id));
|
||||||
|
MOCK_METHOD0(TakeMediaRouteStarter,
|
||||||
|
std::unique_ptr<media_router::MediaRouteStarter>());
|
||||||
|
+ MOCK_METHOD1(RegisterDestructor, void(base::OnceClosure));
|
||||||
|
};
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
diff --git a/chrome/browser/ui/views/media_router/cast_dialog_coordinator_unittest.cc b/chrome/browser/ui/views/media_router/cast_dialog_coordinator_unittest.cc
|
||||||
|
index f6c80d6a..2dedc7e 100644
|
||||||
|
--- a/chrome/browser/ui/views/media_router/cast_dialog_coordinator_unittest.cc
|
||||||
|
+++ b/chrome/browser/ui/views/media_router/cast_dialog_coordinator_unittest.cc
|
||||||
|
@@ -40,6 +40,7 @@
|
||||||
|
MOCK_METHOD(void, StopCasting, (const std::string& route_id));
|
||||||
|
MOCK_METHOD(void, ClearIssue, (const Issue::Id& issue_id));
|
||||||
|
MOCK_METHOD(std::unique_ptr<MediaRouteStarter>, TakeMediaRouteStarter, ());
|
||||||
|
+ MOCK_METHOD(void, RegisterDestructor, (base::OnceClosure));
|
||||||
|
};
|
||||||
|
|
||||||
|
class CastDialogCoordinatorTest : public TestWithBrowserView {
|
||||||
|
diff --git a/chrome/browser/ui/views/media_router/cast_dialog_view.cc b/chrome/browser/ui/views/media_router/cast_dialog_view.cc
|
||||||
|
index e3c7dadb..711d081 100644
|
||||||
|
--- a/chrome/browser/ui/views/media_router/cast_dialog_view.cc
|
||||||
|
+++ b/chrome/browser/ui/views/media_router/cast_dialog_view.cc
|
||||||
|
@@ -125,9 +125,9 @@
|
||||||
|
observer.OnDialogModelUpdated(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
-void CastDialogView::OnControllerInvalidated() {
|
||||||
|
+void CastDialogView::OnControllerDestroying() {
|
||||||
|
controller_ = nullptr;
|
||||||
|
- // We don't destroy the dialog here because if the invalidation was caused by
|
||||||
|
+ // We don't destroy the dialog here because if the destruction was caused by
|
||||||
|
// activating the toolbar icon in order to close the dialog, then it would
|
||||||
|
// cause the dialog to immediately open again.
|
||||||
|
}
|
||||||
|
diff --git a/chrome/browser/ui/views/media_router/cast_dialog_view.h b/chrome/browser/ui/views/media_router/cast_dialog_view.h
|
||||||
|
index d87fdda..d44d4e0 100644
|
||||||
|
--- a/chrome/browser/ui/views/media_router/cast_dialog_view.h
|
||||||
|
+++ b/chrome/browser/ui/views/media_router/cast_dialog_view.h
|
||||||
|
@@ -66,7 +66,7 @@
|
||||||
|
|
||||||
|
// CastDialogController::Observer:
|
||||||
|
void OnModelUpdated(const CastDialogModel& model) override;
|
||||||
|
- void OnControllerInvalidated() override;
|
||||||
|
+ void OnControllerDestroying() override;
|
||||||
|
|
||||||
|
// views::BubbleDialogDelegateView:
|
||||||
|
void OnPaint(gfx::Canvas* canvas) override;
|
||||||
|
diff --git a/chrome/browser/ui/views/media_router/cast_dialog_view_browsertest.cc b/chrome/browser/ui/views/media_router/cast_dialog_view_browsertest.cc
|
||||||
|
index 1c584120..a7af3c8 100644
|
||||||
|
--- a/chrome/browser/ui/views/media_router/cast_dialog_view_browsertest.cc
|
||||||
|
+++ b/chrome/browser/ui/views/media_router/cast_dialog_view_browsertest.cc
|
||||||
|
@@ -70,6 +70,7 @@
|
||||||
|
override {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
+ void RegisterDestructor(base::OnceClosure destructor) override {}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
diff --git a/chrome/browser/ui/views/media_router/cast_dialog_view_unittest.cc b/chrome/browser/ui/views/media_router/cast_dialog_view_unittest.cc
|
||||||
|
index 5326467..988cb07a 100644
|
||||||
|
--- a/chrome/browser/ui/views/media_router/cast_dialog_view_unittest.cc
|
||||||
|
+++ b/chrome/browser/ui/views/media_router/cast_dialog_view_unittest.cc
|
||||||
|
@@ -91,6 +91,7 @@
|
||||||
|
MOCK_METHOD1(StopCasting, void(const std::string& route_id));
|
||||||
|
MOCK_METHOD1(ClearIssue, void(const Issue::Id& issue_id));
|
||||||
|
MOCK_METHOD0(TakeMediaRouteStarter, std::unique_ptr<MediaRouteStarter>());
|
||||||
|
+ MOCK_METHOD1(RegisterDestructor, void(base::OnceClosure));
|
||||||
|
};
|
||||||
|
|
||||||
|
class CastDialogViewTest : public ChromeViewsTestBase {
|
||||||
|
diff --git a/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.cc b/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.cc
|
||||||
|
index ad379b2..244d523 100644
|
||||||
|
--- a/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.cc
|
||||||
|
+++ b/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.cc
|
||||||
|
@@ -51,7 +51,7 @@
|
||||||
|
std::move(context));
|
||||||
|
}
|
||||||
|
|
||||||
|
- ShowGlobalMeidaControlsDialog(std::move(context));
|
||||||
|
+ ShowGlobalMediaControlsDialog(std::move(context));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -155,9 +155,20 @@
|
||||||
|
initiator(), std::move(start_presentation_context_))
|
||||||
|
: MediaRouterUI::CreateWithDefaultMediaSourceAndMirroring(
|
||||||
|
initiator());
|
||||||
|
+ ui_->RegisterDestructor(
|
||||||
|
+ base::BindOnce(&MediaRouterDialogControllerViews::DestroyMediaRouterUI,
|
||||||
|
+ // Safe to use base::Unretained here: the callback being
|
||||||
|
+ // bound is held by the MediaRouterUI we are creating and
|
||||||
|
+ // owning, and ownership of |ui_| is never transferred
|
||||||
|
+ // away from this object.
|
||||||
|
+ base::Unretained(this)));
|
||||||
|
}
|
||||||
|
|
||||||
|
-void MediaRouterDialogControllerViews::ShowGlobalMeidaControlsDialog(
|
||||||
|
+void MediaRouterDialogControllerViews::DestroyMediaRouterUI() {
|
||||||
|
+ ui_.reset();
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void MediaRouterDialogControllerViews::ShowGlobalMediaControlsDialog(
|
||||||
|
std::unique_ptr<StartPresentationContext> context) {
|
||||||
|
// Show the WebContents requesting a dialog.
|
||||||
|
initiator()->GetDelegate()->ActivateContents(initiator());
|
||||||
|
diff --git a/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.h b/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.h
|
||||||
|
index 0a5fdb1..7c97211 100644
|
||||||
|
--- a/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.h
|
||||||
|
+++ b/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.h
|
||||||
|
@@ -69,13 +69,14 @@
|
||||||
|
// MediaRouterUIService::Observer:
|
||||||
|
void OnServiceDisabled() override;
|
||||||
|
|
||||||
|
- // Initializes |ui_|.
|
||||||
|
+ // Initializes and destroys |ui_| respectively.
|
||||||
|
void InitializeMediaRouterUI();
|
||||||
|
+ void DestroyMediaRouterUI();
|
||||||
|
|
||||||
|
// If there exists a media button, show the GMC dialog anchored to the media
|
||||||
|
// button. Otherwise, show the dialog anchored to the top center of the web
|
||||||
|
// contents.
|
||||||
|
- void ShowGlobalMeidaControlsDialog(
|
||||||
|
+ void ShowGlobalMediaControlsDialog(
|
||||||
|
std::unique_ptr<StartPresentationContext> context);
|
||||||
|
|
||||||
|
// Returns the media button from the browser that initiates the request to
|
|
@ -2,8 +2,4 @@
|
||||||
# the electron launcher.
|
# the electron launcher.
|
||||||
|
|
||||||
# Options to pass to electron.
|
# Options to pass to electron.
|
||||||
ELECTRON_FLAGS="--enable-features=WebRTCPipeWireCapturer"
|
ELECTRON_FLAGS="--ozone-platform-hint=auto --enable-features=WebRTCPipeWireCapturer"
|
||||||
|
|
||||||
# This can be 'x11', 'wayland', or 'auto'. Overriding default to 'auto',
|
|
||||||
# but respecting the variable content if any
|
|
||||||
ELECTRON_OZONE_PLATFORM_HINT="${ELECTRON_OZONE_PLATFORM_HINT:-auto}"
|
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
diff --git a/net/dns/BUILD.gn b/net/dns/BUILD.gn
|
|
||||||
index f36bf68..805d9a6 100644
|
|
||||||
--- a/net/dns/BUILD.gn
|
|
||||||
+++ b/net/dns/BUILD.gn
|
|
||||||
@@ -130,8 +130,8 @@ source_set("dns") {
|
|
||||||
]
|
|
||||||
} else if (is_linux) {
|
|
||||||
sources += [
|
|
||||||
- "dns_config_service_linux.cc",
|
|
||||||
- "dns_config_service_linux.h",
|
|
||||||
+ "dns_config_service_fuchsia.cc",
|
|
||||||
+ "dns_config_service_fuchsia.h",
|
|
||||||
]
|
|
||||||
} else if (is_posix) {
|
|
||||||
sources += [
|
|
|
@ -1,343 +0,0 @@
|
||||||
safesprintf emitnull:
|
|
||||||
error: conversion from 'std::nullptr_t' to 'const internal::Arg' is ambiguous
|
|
||||||
const internal::Arg arg_array[] = { args... };
|
|
||||||
|
|
||||||
flatmap incompletetype:
|
|
||||||
error: static assertion failed due to requirement 'std::__is_complete_or_unbounded(std::__type_identity<std::pair<A, A>>{})': template argument must be a complete class or an unbounded array
|
|
||||||
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
|
|
||||||
|
|
||||||
i18n, time:
|
|
||||||
various icu failures (new icu time formatting? internal api difference?)
|
|
||||||
a ton of these fail:
|
|
||||||
|
|
||||||
Expected equality of these values:
|
|
||||||
u"Monday 16 May – Saturday 28 May"
|
|
||||||
Which is: u"Monday 16 May \x2013 Saturday 28 May"
|
|
||||||
DateIntervalFormat(begin_time, end_time, DATE_FORMAT_MONTH_WEEKDAY_DAY)
|
|
||||||
Which is: u"Monday 16\x2009\x2013\x2009Saturday 28 May"
|
|
||||||
|
|
||||||
../../base/i18n/time_formatting_unittest.cc:84: Failure
|
|
||||||
Expected equality of these values:
|
|
||||||
clock12h_pm
|
|
||||||
Which is: u"3:42 PM"
|
|
||||||
TimeFormatTimeOfDay(time)
|
|
||||||
Which is: u"3:42\x202FPM"
|
|
||||||
|
|
||||||
.. and so on
|
|
||||||
|
|
||||||
fileutiltest filetofile:
|
|
||||||
../../base/files/file_util_unittest.cc:2692: Failure
|
|
||||||
Value of: stream
|
|
||||||
Actual: true
|
|
||||||
Expected: false
|
|
||||||
|
|
||||||
stacktracetest: crashes (this doesn't seem to use execinfo so probably relies on glibc internal layout for tracing here)
|
|
||||||
|
|
||||||
platformthreadtest canchangethreadtype:
|
|
||||||
../../base/threading/platform_thread_unittest.cc:445: Failure
|
|
||||||
Expected equality of these values:
|
|
||||||
PlatformThread::CanChangeThreadType(ThreadType::kBackground, ThreadType::kResourceEfficient)
|
|
||||||
Which is: true
|
|
||||||
kCanIncreasePriority
|
|
||||||
Which is: false
|
|
||||||
|
|
||||||
scopedfdownershiptrackingtest crashonunownedclose: fails due to scoped-file-no-close.patch
|
|
||||||
|
|
||||||
stackcontainer customallocator:
|
|
||||||
../../base/containers/stack_container_unittest.cc:211: Failure
|
|
||||||
Expected equality of these values:
|
|
||||||
1
|
|
||||||
Allocator::deallocated
|
|
||||||
Which is: 0
|
|
||||||
|
|
||||||
nativelibrarytest loadlibrarypreferownsymbols: crashes (probably musl dlopen does not play nice here)
|
|
||||||
|
|
||||||
spantest empty: crashes (this looks fishy)
|
|
||||||
|
|
||||||
readelfbuildid: crashes (this looks like glibc dynamic linker semantics)
|
|
||||||
|
|
||||||
nss db unittest: various nss failures: e.g.:
|
|
||||||
../../net/cert/nss_cert_database_unittest.cc:209: Failure
|
|
||||||
Expected equality of these values:
|
|
||||||
OK
|
|
||||||
Which is: 0
|
|
||||||
cert_db_->ImportFromPKCS12(GetPublicSlot(), pkcs12_data, u"12345", true, nullptr)
|
|
||||||
Which is: -702
|
|
||||||
|
|
||||||
processutiltest cloneflags: fails in CI (ulimit? too many threads?)
|
|
||||||
../../base/process/process_util_unittest.cc:1434: Failure
|
|
||||||
Value of: process.IsValid()
|
|
||||||
Actual: false
|
|
||||||
Expected: true
|
|
||||||
|
|
||||||
addresstrackerlinuxnetlinktest:
|
|
||||||
../../net/base/address_tracker_linux_unittest.cc:886: Failure
|
|
||||||
Value of: child.process.IsValid()
|
|
||||||
Actual: false
|
|
||||||
Expected: true
|
|
||||||
|
|
||||||
ToAddressDoesNotDereference: ; Expected `get_for_extraction_cnt` to be 1 but got 0;
|
|
||||||
|
|
||||||
DataCapturedManyThreads: flaky
|
|
||||||
|
|
||||||
ProcessAlternativeServicesTest.Process*: crashed ?
|
|
||||||
|
|
||||||
--- a/base/strings/safe_sprintf_unittest.cc
|
|
||||||
+++ b/base/strings/safe_sprintf_unittest.cc
|
|
||||||
@@ -740,6 +740,7 @@
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
+#if 0
|
|
||||||
TEST(SafeSPrintfTest, EmitNULL) {
|
|
||||||
char buf[40];
|
|
||||||
#if defined(__GNUC__)
|
|
||||||
@@ -756,6 +757,7 @@
|
|
||||||
#pragma GCC diagnostic pop
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
TEST(SafeSPrintfTest, PointerSize) {
|
|
||||||
// The internal data representation is a 64bit value, independent of the
|
|
||||||
--- a/base/containers/flat_map_unittest.cc
|
|
||||||
+++ b/base/containers/flat_map_unittest.cc
|
|
||||||
@@ -52,6 +52,7 @@
|
|
||||||
|
|
||||||
} // namespace
|
|
||||||
|
|
||||||
+#if 0
|
|
||||||
TEST(FlatMap, IncompleteType) {
|
|
||||||
struct A {
|
|
||||||
using Map = flat_map<A, A>;
|
|
||||||
@@ -65,6 +66,7 @@
|
|
||||||
|
|
||||||
A a;
|
|
||||||
}
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
TEST(FlatMap, RangeConstructor) {
|
|
||||||
flat_map<int, int>::value_type input_vals[] = {
|
|
||||||
--- a/base/BUILD.gn
|
|
||||||
+++ b/base/BUILD.gn
|
|
||||||
@@ -3194,21 +3194,6 @@
|
|
||||||
"hash/md5_constexpr_unittest.cc",
|
|
||||||
"hash/md5_unittest.cc",
|
|
||||||
"hash/sha1_unittest.cc",
|
|
||||||
- "i18n/break_iterator_unittest.cc",
|
|
||||||
- "i18n/case_conversion_unittest.cc",
|
|
||||||
- "i18n/char_iterator_unittest.cc",
|
|
||||||
- "i18n/character_encoding_unittest.cc",
|
|
||||||
- "i18n/file_util_icu_unittest.cc",
|
|
||||||
- "i18n/icu_string_conversions_unittest.cc",
|
|
||||||
- "i18n/icu_util_unittest.cc",
|
|
||||||
- "i18n/message_formatter_unittest.cc",
|
|
||||||
- "i18n/number_formatting_unittest.cc",
|
|
||||||
- "i18n/rtl_unittest.cc",
|
|
||||||
- "i18n/streaming_utf8_validator_unittest.cc",
|
|
||||||
- "i18n/string_search_unittest.cc",
|
|
||||||
- "i18n/time_formatting_unittest.cc",
|
|
||||||
- "i18n/timezone_unittest.cc",
|
|
||||||
- "i18n/transliterator_unittest.cc",
|
|
||||||
"immediate_crash_unittest.cc",
|
|
||||||
"json/json_parser_unittest.cc",
|
|
||||||
"json/json_reader_unittest.cc",
|
|
||||||
--- a/base/files/file_util_unittest.cc
|
|
||||||
+++ b/base/files/file_util_unittest.cc
|
|
||||||
@@ -2686,6 +2686,7 @@
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+#if 0
|
|
||||||
TEST_F(FileUtilTest, FileToFILE) {
|
|
||||||
File file;
|
|
||||||
FILE* stream = FileToFILE(std::move(file), "w");
|
|
||||||
@@ -2700,6 +2701,7 @@
|
|
||||||
EXPECT_FALSE(file.IsValid());
|
|
||||||
EXPECT_TRUE(CloseFile(stream));
|
|
||||||
}
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
TEST_F(FileUtilTest, FILEToFile) {
|
|
||||||
ScopedFILE stream;
|
|
||||||
--- a/base/threading/platform_thread_unittest.cc
|
|
||||||
+++ b/base/threading/platform_thread_unittest.cc
|
|
||||||
@@ -416,6 +416,7 @@
|
|
||||||
// platforms for all priorities. This not being the case. This test documents
|
|
||||||
// and hardcodes what we know. Please inform scheduler-dev@chromium.org if this
|
|
||||||
// proprerty changes for a given platform.
|
|
||||||
+#if 0
|
|
||||||
TEST(PlatformThreadTest, CanChangeThreadType) {
|
|
||||||
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
|
|
||||||
// On Ubuntu, RLIMIT_NICE and RLIMIT_RTPRIO are 0 by default, so we won't be
|
|
||||||
@@ -472,6 +473,7 @@
|
|
||||||
ThreadType::kBackground));
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
TEST(PlatformThreadTest, SetCurrentThreadTypeTest) {
|
|
||||||
TestPriorityResultingFromThreadType(ThreadType::kBackground,
|
|
||||||
--- a/base/files/scoped_file_linux_unittest.cc
|
|
||||||
+++ b/base/files/scoped_file_linux_unittest.cc
|
|
||||||
@@ -42,11 +42,13 @@
|
|
||||||
EXPECT_DEATH(ScopedFD(fd.get()), "");
|
|
||||||
}
|
|
||||||
|
|
||||||
+#if 0
|
|
||||||
TEST_F(ScopedFDOwnershipTrackingTest, CrashOnUnownedClose) {
|
|
||||||
ScopedFD fd = OpenFD();
|
|
||||||
subtle::EnableFDOwnershipEnforcement(true);
|
|
||||||
EXPECT_DEATH(close(fd.get()), "");
|
|
||||||
}
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
#endif // defined(GTEST_HAS_DEATH_TEST)
|
|
||||||
|
|
||||||
--- a/base/native_library_unittest.cc
|
|
||||||
+++ b/base/native_library_unittest.cc
|
|
||||||
@@ -139,6 +139,7 @@
|
|
||||||
// Verifies that the |prefer_own_symbols| option satisfies its guarantee that
|
|
||||||
// a loaded library will always prefer local symbol resolution before
|
|
||||||
// considering global symbols.
|
|
||||||
+#if 0
|
|
||||||
TEST(NativeLibraryTest, LoadLibraryPreferOwnSymbols) {
|
|
||||||
NativeLibraryOptions options;
|
|
||||||
options.prefer_own_symbols = true;
|
|
||||||
@@ -171,6 +172,7 @@
|
|
||||||
EXPECT_EQ(2, NativeLibraryTestIncrement());
|
|
||||||
EXPECT_EQ(3, NativeLibraryTestIncrement());
|
|
||||||
}
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
#endif // !BUILDFLAG(IS_ANDROID) && !defined(THREAD_SANITIZER) && \
|
|
||||||
// !defined(MEMORY_SANITIZER)
|
|
||||||
--- a/base/containers/span_unittest.cc
|
|
||||||
+++ b/base/containers/span_unittest.cc
|
|
||||||
@@ -995,6 +995,7 @@
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+#if 0
|
|
||||||
TEST(SpanTest, Empty) {
|
|
||||||
{
|
|
||||||
span<int> span;
|
|
||||||
@@ -1014,6 +1015,7 @@
|
|
||||||
EXPECT_TRUE(span_of_checked_iterators.empty());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
TEST(SpanTest, OperatorAt) {
|
|
||||||
static constexpr int kArray[] = {1, 6, 1, 8, 0};
|
|
||||||
--- a/base/debug/elf_reader_unittest.cc
|
|
||||||
+++ b/base/debug/elf_reader_unittest.cc
|
|
||||||
@@ -194,6 +194,7 @@
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+#if 0
|
|
||||||
TEST(ElfReaderTestWithCurrentImage, ReadElfBuildId) {
|
|
||||||
#if BUILDFLAG(IS_ANDROID)
|
|
||||||
// On Android the library loader memory maps the full so file.
|
|
||||||
@@ -229,6 +230,7 @@
|
|
||||||
UnloadNativeLibrary(library);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
} // namespace debug
|
|
||||||
} // namespace base
|
|
||||||
--- a/net/BUILD.gn
|
|
||||||
+++ b/net/BUILD.gn
|
|
||||||
@@ -4826,7 +4826,6 @@
|
|
||||||
sources += [
|
|
||||||
"cert/internal/system_trust_store_nss_unittest.cc",
|
|
||||||
"cert/internal/trust_store_nss_unittest.cc",
|
|
||||||
- "cert/nss_cert_database_unittest.cc",
|
|
||||||
"cert/x509_util_nss_unittest.cc",
|
|
||||||
]
|
|
||||||
if (!is_castos) {
|
|
||||||
--- a/base/process/process_util_unittest.cc
|
|
||||||
+++ b/base/process/process_util_unittest.cc
|
|
||||||
@@ -1419,7 +1419,7 @@
|
|
||||||
return kSuccess;
|
|
||||||
}
|
|
||||||
|
|
||||||
-#if defined(CLONE_NEWUSER) && defined(CLONE_NEWPID)
|
|
||||||
+#if 0 && defined(CLONE_NEWUSER) && defined(CLONE_NEWPID)
|
|
||||||
TEST_F(ProcessUtilTest, CloneFlags) {
|
|
||||||
if (!PathExists(FilePath("/proc/self/ns/user")) ||
|
|
||||||
!PathExists(FilePath("/proc/self/ns/pid"))) {
|
|
||||||
--- a/net/base/address_tracker_linux_unittest.cc
|
|
||||||
+++ b/net/base/address_tracker_linux_unittest.cc
|
|
||||||
@@ -831,6 +831,7 @@
|
|
||||||
//
|
|
||||||
// This test creates multiple concurrent `AddressTrackerLinux` instances in
|
|
||||||
// separate processes, each in their own PID namespaces.
|
|
||||||
+#if 0
|
|
||||||
TEST(AddressTrackerLinuxNetlinkTest, TestInitializeTwoTrackersInPidNamespaces) {
|
|
||||||
// This test initializes `kNumChildren` instances of `AddressTrackerLinux` in
|
|
||||||
// tracking mode, each in their own child process running in a PID namespace.
|
|
||||||
@@ -901,6 +902,7 @@
|
|
||||||
ASSERT_EQ(exit_code, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
MULTIPROCESS_TEST_MAIN(ChildProcessInitializeTrackerForTesting) {
|
|
||||||
base::test::TaskEnvironment task_env(
|
|
||||||
--- a/base/trace_event/trace_event_unittest.cc
|
|
||||||
+++ b/base/trace_event/trace_event_unittest.cc
|
|
||||||
@@ -1368,6 +1368,7 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
// Test that data sent from multiple threads is gathered
|
|
||||||
+#if 0
|
|
||||||
TEST_F(TraceEventTestFixture, DataCapturedManyThreads) {
|
|
||||||
BeginTrace();
|
|
||||||
|
|
||||||
@@ -1408,6 +1409,7 @@
|
|
||||||
delete task_complete_events[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
// Test that thread and process names show up in the trace.
|
|
||||||
// In SDK build, thread names are not tracked inside //base. Instead, there's
|
|
||||||
--- a/base/allocator/partition_allocator/src/partition_alloc/pointers/raw_ptr_unittest.cc
|
|
||||||
+++ b/base/allocator/partition_allocator/src/partition_alloc/pointers/raw_ptr_unittest.cc
|
|
||||||
@@ -1481,6 +1481,7 @@
|
|
||||||
// `base::to_address()` will use the dereference operator. This is not
|
|
||||||
// what we want; this test enforces extraction semantics for
|
|
||||||
// `to_address()`.
|
|
||||||
+#if 0
|
|
||||||
TEST_F(RawPtrTest, ToAddressDoesNotDereference) {
|
|
||||||
CountingRawPtr<int> ptr = nullptr;
|
|
||||||
int* raw = base::to_address(ptr);
|
|
||||||
@@ -1492,6 +1493,7 @@
|
|
||||||
.get_for_duplication_cnt = 0}),
|
|
||||||
CountersMatch());
|
|
||||||
}
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
TEST_F(RawPtrTest, ToAddressGivesBackRawAddress) {
|
|
||||||
int* raw = nullptr;
|
|
||||||
--- a/net/http/http_stream_factory_unittest.cc
|
|
||||||
+++ b/net/http/http_stream_factory_unittest.cc
|
|
||||||
@@ -3477,6 +3477,7 @@
|
|
||||||
DefaultCTPolicyEnforcer ct_policy_enforcer_;
|
|
||||||
};
|
|
||||||
|
|
||||||
+#if 0
|
|
||||||
TEST_F(ProcessAlternativeServicesTest, ProcessEmptyAltSvc) {
|
|
||||||
session_ =
|
|
||||||
std::make_unique<HttpNetworkSession>(session_params_, session_context_);
|
|
||||||
@@ -3585,6 +3586,7 @@
|
|
||||||
alternatives[0].host_port_pair());
|
|
||||||
EXPECT_EQ(0u, alternatives[0].advertised_versions().size());
|
|
||||||
}
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
} // namespace
|
|
||||||
|
|
|
@ -10,8 +10,6 @@ done
|
||||||
# Prefer user defined ELECTRON_USER_FLAGS (from env) over system
|
# Prefer user defined ELECTRON_USER_FLAGS (from env) over system
|
||||||
# default ELECTRON_FLAGS (from /etc/electron/default.conf).
|
# default ELECTRON_FLAGS (from /etc/electron/default.conf).
|
||||||
export ELECTRON_FLAGS="$ELECTRON_FLAGS ${ELECTRON_USER_FLAGS:-"$ELECTRON_USER_FLAGS"}"
|
export ELECTRON_FLAGS="$ELECTRON_FLAGS ${ELECTRON_USER_FLAGS:-"$ELECTRON_USER_FLAGS"}"
|
||||||
# Re-export, for it to be accessible by the process
|
|
||||||
export ELECTRON_OZONE_PLATFORM_HINT="${ELECTRON_OZONE_PLATFORM_HINT}"
|
|
||||||
|
|
||||||
if [ "$ELECTRON_RUN_AS_NODE" == "1" ] && [ "$ELECTRON_STILL_PASS_THE_DEFAULT_FLAGS" != "1" ]; then
|
if [ "$ELECTRON_RUN_AS_NODE" == "1" ] && [ "$ELECTRON_STILL_PASS_THE_DEFAULT_FLAGS" != "1" ]; then
|
||||||
exec "/usr/lib/electron/electron" "$@"
|
exec "/usr/lib/electron/electron" "$@"
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
diff --git a/electron/BUILD.gn.orig b/electron/BUILD.gn
|
|
||||||
index 235c7abd3e8..088c24ac45e 100644
|
|
||||||
--- a/electron/BUILD.gn.orig
|
|
||||||
+++ b/electron/BUILD.gn
|
|
||||||
@@ -1569,7 +1569,6 @@ group("copy_node_headers") {
|
|
||||||
":generate_node_headers",
|
|
||||||
":node_gypi_headers",
|
|
||||||
":node_version_header",
|
|
||||||
- ":zlib_headers",
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,143 +0,0 @@
|
||||||
diff --git a/electron/script/generate-config-gypi.py.orig b/electron/script/generate-config-gypi.py
|
|
||||||
index 58c973b..c215d90 100755
|
|
||||||
--- a/electron/script/generate-config-gypi.py.orig
|
|
||||||
+++ b/electron/script/generate-config-gypi.py
|
|
||||||
@@ -64,6 +64,11 @@ def main(target_file, target_cpu):
|
|
||||||
# in common.gypi
|
|
||||||
if 'clang' in v:
|
|
||||||
del v['clang']
|
|
||||||
+
|
|
||||||
+ with open(os.path.join(NODE_DIR, 'use_system.txt')) as f:
|
|
||||||
+ for dep in f.read().strip().split(' '):
|
|
||||||
+ if v.get(f'node_shared_{dep}') is not None:
|
|
||||||
+ v[f'node_shared_{dep}'] = 'true'
|
|
||||||
|
|
||||||
with open(target_file, 'w+', encoding='utf-8') as file_out:
|
|
||||||
file_out.write(pprint.pformat(config, indent=2))
|
|
||||||
|
|
||||||
diff --git a/third_party/electron_node/node.gni.orig b/third_party/electron_node/node.gni
|
|
||||||
index 73bf383..1c80d5a 100644
|
|
||||||
--- a/third_party/electron_node/node.gni.orig
|
|
||||||
+++ b/third_party/electron_node/node.gni
|
|
||||||
@@ -73,6 +73,7 @@ declare_args() {
|
|
||||||
node_use_amaro = true
|
|
||||||
|
|
||||||
# Allows downstream packagers (eg. Linux distributions) to build against system shared libraries.
|
|
||||||
+ use_system_ada = false
|
|
||||||
use_system_cares = false
|
|
||||||
use_system_nghttp2 = false
|
|
||||||
use_system_llhttp = false
|
|
||||||
diff --git a/third_party/electron_node/unofficial.gni.orig b/third_party/electron_node/unofficial.gni
|
|
||||||
index d61a9bd..8bf990e 100644
|
|
||||||
--- a/third_party/electron_node/unofficial.gni.orig
|
|
||||||
+++ b/third_party/electron_node/unofficial.gni
|
|
||||||
@@ -143,7 +143,6 @@ template("node_gn_build") {
|
|
||||||
"deps/googletest:googletest_config",
|
|
||||||
]
|
|
||||||
public_deps = [
|
|
||||||
- "deps/ada",
|
|
||||||
"deps/uv",
|
|
||||||
"//electron:electron_js2c",
|
|
||||||
"deps/simdjson",
|
|
||||||
@@ -151,10 +150,7 @@ template("node_gn_build") {
|
|
||||||
]
|
|
||||||
deps = [
|
|
||||||
":run_node_js2c",
|
|
||||||
- "deps/cares",
|
|
||||||
- "deps/histogram",
|
|
||||||
"deps/nbytes",
|
|
||||||
- "deps/nghttp2",
|
|
||||||
"deps/postject",
|
|
||||||
"deps/sqlite",
|
|
||||||
"deps/uvwasi",
|
|
||||||
@@ -182,12 +178,30 @@ template("node_gn_build") {
|
|
||||||
if (is_posix) {
|
|
||||||
configs -= [ "//build/config/gcc:symbol_visibility_hidden" ]
|
|
||||||
configs += [ "//build/config/gcc:symbol_visibility_default" ]
|
|
||||||
+ libs = []
|
|
||||||
+ include_dirs = []
|
|
||||||
}
|
|
||||||
if (use_system_llhttp) {
|
|
||||||
libs += [ "llhttp" ]
|
|
||||||
} else {
|
|
||||||
deps += [ "deps/llhttp" ]
|
|
||||||
}
|
|
||||||
+ if (use_system_cares) {
|
|
||||||
+ libs += [ "cares" ]
|
|
||||||
+ } else {
|
|
||||||
+ deps += [ "deps/cares" ]
|
|
||||||
+ }
|
|
||||||
+ if (use_system_nghttp2) {
|
|
||||||
+ libs += [ "nghttp2" ]
|
|
||||||
+ } else {
|
|
||||||
+ deps += [ "deps/nghttp2" ]
|
|
||||||
+ }
|
|
||||||
+ if (use_system_ada) {
|
|
||||||
+ libs += [ "ada" ]
|
|
||||||
+ include_dirs += [ "/usr/include/ada" ]
|
|
||||||
+ } else {
|
|
||||||
+ public_deps += [ "deps/ada" ]
|
|
||||||
+ }
|
|
||||||
if (use_system_histogram) {
|
|
||||||
libs += [ "hdr_histogram" ]
|
|
||||||
include_dirs += [ "/usr/include/hdr" ]
|
|
||||||
@@ -208,7 +222,7 @@ template("node_gn_build") {
|
|
||||||
"src/inspector:node_protocol_generated_sources",
|
|
||||||
"src/inspector:v8_inspector_compress_protocol_json",
|
|
||||||
]
|
|
||||||
- include_dirs = [
|
|
||||||
+ include_dirs += [
|
|
||||||
"$target_gen_dir/src",
|
|
||||||
"$target_gen_dir/src/inspector",
|
|
||||||
"$node_inspector_protocol_path",
|
|
||||||
@@ -222,17 +236,18 @@ template("node_gn_build") {
|
|
||||||
sources += node_inspector.node_inspector_sources +
|
|
||||||
node_inspector.node_inspector_generated_sources
|
|
||||||
}
|
|
||||||
- if (is_linux) {
|
|
||||||
- import("//build/config/linux/pkg_config.gni")
|
|
||||||
- if (use_system_cares) {
|
|
||||||
- pkg_config("cares") {
|
|
||||||
- packages = [ "libcares" ]
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
- if (use_system_nghttp2) {
|
|
||||||
- pkg_config("nghttp2") {
|
|
||||||
- packages = [ "libnghttp2" ]
|
|
||||||
- }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (is_linux) {
|
|
||||||
+ import("//build/config/linux/pkg_config.gni")
|
|
||||||
+ if (use_system_cares) {
|
|
||||||
+ pkg_config("cares") {
|
|
||||||
+ packages = [ "libcares" ]
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ if (use_system_nghttp2) {
|
|
||||||
+ pkg_config("nghttp2") {
|
|
||||||
+ packages = [ "libnghttp2" ]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
diff --git a/third_party/electron_node/unofficial.gni.orig b/third_party/electron_node/unofficial.gni
|
|
||||||
index 6bcc40b..7e383b2 100644
|
|
||||||
--- a/third_party/electron_node/unofficial.gni.orig
|
|
||||||
+++ b/third_party/electron_node/unofficial.gni
|
|
||||||
@@ -142,7 +142,6 @@ template("node_gn_build") {
|
|
||||||
public_configs = [
|
|
||||||
":node_external_config",
|
|
||||||
"deps/googletest:googletest_config",
|
|
||||||
- ":zstd_include_config"
|
|
||||||
]
|
|
||||||
public_deps = [
|
|
||||||
"deps/ada",
|
|
||||||
@@ -163,8 +162,6 @@ template("node_gn_build") {
|
|
||||||
"//third_party/zlib",
|
|
||||||
"//third_party/brotli:dec",
|
|
||||||
"//third_party/brotli:enc",
|
|
||||||
- "//third_party/zstd:decompress",
|
|
||||||
- "//third_party/zstd:headers",
|
|
||||||
"$node_simdutf_path",
|
|
||||||
"$node_v8_path:v8_libplatform",
|
|
||||||
]
|
|
|
@ -1,13 +0,0 @@
|
||||||
instead of hardcoding the version, use the defined macro.
|
|
||||||
--
|
|
||||||
--- a/third_party/test_fonts/fontconfig/generate_fontconfig_caches.cc
|
|
||||||
+++ b/third_party/test_fonts/fontconfig/generate_fontconfig_caches.cc
|
|
||||||
@@ -56,7 +56,7 @@
|
|
||||||
FcFini();
|
|
||||||
|
|
||||||
// Check existence of intended fontconfig cache file.
|
|
||||||
- auto cache = fontconfig_caches + "/" + kCacheKey + "-le64.cache-9";
|
|
||||||
+ auto cache = fontconfig_caches + "/" + kCacheKey + "-le64.cache-" + FC_CACHE_VERSION;
|
|
||||||
bool cache_exists = access(cache.c_str(), F_OK) == 0;
|
|
||||||
return !cache_exists;
|
|
||||||
}
|
|
13
backports/electron/fix-missing-cstdint-include-musl.patch
Normal file
13
backports/electron/fix-missing-cstdint-include-musl.patch
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
Patch-Source: https://github.com/void-linux/void-packages/blob/378db3cf5087877588aebaaa8ca3c9d94dfb54e0/srcpkgs/chromium/patches/fix-missing-cstdint-include-musl.patch
|
||||||
|
fixed in https://github.com/google/quiche/commit/4d4820f0a959be7fa22285d114a5b5b8676f10fe
|
||||||
|
--
|
||||||
|
--- a/net/third_party/quiche/src/quiche/http2/adapter/window_manager.h
|
||||||
|
+++ b/net/third_party/quiche/src/quiche/http2/adapter/window_manager.h
|
||||||
|
@@ -3,6 +3,7 @@
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
+#include <cstdint>
|
||||||
|
#include <functional>
|
||||||
|
|
||||||
|
#include "common/platform/api/quiche_export.h"
|
|
@ -1,11 +0,0 @@
|
||||||
--- a/media/ffmpeg/ffmpeg_common.cc
|
|
||||||
+++ b/media/ffmpeg/ffmpeg_common.cc
|
|
||||||
@@ -1025,7 +1025,7 @@
|
|
||||||
static const base::NoDestructor<std::string> kAllowedAudioCodecs([]() {
|
|
||||||
// This should match the configured lists in //third_party/ffmpeg.
|
|
||||||
std::string allowed_decoders(
|
|
||||||
- "vorbis,libopus,flac,pcm_u8,pcm_s16le,pcm_s24le,pcm_s32le,pcm_f32le,"
|
|
||||||
+ "vorbis,opus,libopus,flac,pcm_u8,pcm_s16le,pcm_s24le,pcm_s32le,pcm_f32le,"
|
|
||||||
"mp3,pcm_s16be,pcm_s24be,pcm_mulaw,pcm_alaw");
|
|
||||||
#if BUILDFLAG(USE_PROPRIETARY_CODECS)
|
|
||||||
allowed_decoders += ",aac";
|
|
|
@ -1,17 +0,0 @@
|
||||||
fstatat64 is macrod to fstatat in sys/stat.h in musl- but then that fstatat is
|
|
||||||
used in the _syscall4 macro mapping to __NR_$name, and __NR_fstatat is not
|
|
||||||
defined anywhere here, as it wants the 64 name.
|
|
||||||
|
|
||||||
so, just let it keep the name with an undef of the stat.h macro, then the macro
|
|
||||||
expansion below evaluates correctly.
|
|
||||||
--- a/third_party/lss/linux_syscall_support.h
|
|
||||||
+++ b/third_party/lss/linux_syscall_support.h
|
|
||||||
@@ -4947,7 +4947,8 @@
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
#if defined(__NR_fstatat64)
|
|
||||||
+ #undef fstatat64
|
|
||||||
LSS_INLINE _syscall4(int, fstatat64, int, d,
|
|
||||||
const char *, p,
|
|
||||||
struct kernel_stat64 *, b, int, f)
|
|
||||||
#endif
|
|
|
@ -1,11 +0,0 @@
|
||||||
--- a/services/device/public/cpp/generic_sensor/sensor_reading.h
|
|
||||||
+++ b/services/device/public/cpp/generic_sensor/sensor_reading.h
|
|
||||||
@@ -5,6 +5,8 @@
|
|
||||||
#ifndef SERVICES_DEVICE_PUBLIC_CPP_GENERIC_SENSOR_SENSOR_READING_H_
|
|
||||||
#define SERVICES_DEVICE_PUBLIC_CPP_GENERIC_SENSOR_SENSOR_READING_H_
|
|
||||||
|
|
||||||
+#include <cstddef>
|
|
||||||
+#include <cstdint>
|
|
||||||
#include <type_traits>
|
|
||||||
|
|
||||||
namespace device {
|
|
|
@ -1,29 +0,0 @@
|
||||||
diff --git a/third_party/blink/renderer/build/scripts/gperf.py.orig b/third_party/blink/renderer/build/scripts/gperf.py
|
|
||||||
index 42630d3..d909aee 100644
|
|
||||||
--- a/third_party/blink/renderer/build/scripts/gperf.py.orig
|
|
||||||
+++ b/third_party/blink/renderer/build/scripts/gperf.py
|
|
||||||
@@ -28,24 +28,6 @@ def generate_gperf(gperf_path, gperf_input, gperf_args):
|
|
||||||
stdout=subprocess.PIPE,
|
|
||||||
universal_newlines=True)
|
|
||||||
gperf_output = gperf.communicate(gperf_input)[0]
|
|
||||||
- # Massage gperf output to be more palatable for modern compilers.
|
|
||||||
- # TODO(thakis): Upstream these to gperf so we don't need massaging.
|
|
||||||
- # `register` is deprecated in C++11 and removed in C++17, so remove
|
|
||||||
- # it from gperf's output.
|
|
||||||
- # https://savannah.gnu.org/bugs/index.php?53028
|
|
||||||
- gperf_output = re.sub(r'\bregister ', '', gperf_output)
|
|
||||||
- # -Wimplicit-fallthrough needs an explicit fallthrough statement,
|
|
||||||
- # so replace gperf's /*FALLTHROUGH*/ comment with the statement.
|
|
||||||
- # https://savannah.gnu.org/bugs/index.php?53029
|
|
||||||
- gperf_output = gperf_output.replace('/*FALLTHROUGH*/',
|
|
||||||
- ' [[fallthrough]];')
|
|
||||||
- # -Wpointer-to-int-cast warns about casting pointers to smaller ints
|
|
||||||
- # Replace {(int)(long)&(foo), bar} with
|
|
||||||
- # {static_cast<int>(reinterpret_cast<uintptr_t>(&(foo)), bar}
|
|
||||||
- gperf_output = re.sub(
|
|
||||||
- r'\(int\)\(long\)(.*?),',
|
|
||||||
- r'static_cast<int>(reinterpret_cast<uintptr_t>(\1)),',
|
|
||||||
- gperf_output)
|
|
||||||
script = 'third_party/blink/renderer/build/scripts/gperf.py'
|
|
||||||
return '// Generated by %s\n' % script + gperf_output
|
|
||||||
except OSError:
|
|
|
@ -1,11 +1,11 @@
|
||||||
--- a/electron/default_app/default_app.ts
|
--- a/electron/default_app/default_app.ts
|
||||||
+++ b/electron/default_app/default_app.ts
|
+++ b/electron/default_app/default_app.ts
|
||||||
@@ -61,7 +61,7 @@
|
@@ -60,7 +60,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
if (process.platform === 'linux') {
|
if (process.platform === 'linux') {
|
||||||
- options.icon = url.fileURLToPath(new URL('icon.png', import.meta.url));
|
- options.icon = path.join(__dirname, 'icon.png');
|
||||||
+ options.icon = 'file:///usr/share/icons/hicolor/1024x1024/apps/electron.png';
|
+ options.icon = '/usr/share/icons/hicolor/1024x1024/apps/electron.png';
|
||||||
}
|
}
|
||||||
|
|
||||||
mainWindow = new BrowserWindow(options);
|
mainWindow = new BrowserWindow(options);
|
15
backports/electron/import-version.patch
Normal file
15
backports/electron/import-version.patch
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
they fixed the import to be glibc conditional, but now nothing is imported so
|
||||||
|
all the string functions are missing.
|
||||||
|
--
|
||||||
|
--- a/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc
|
||||||
|
+++ b/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc
|
||||||
|
@@ -61,8 +61,7 @@
|
||||||
|
|
||||||
|
// TODO(crbug.com/1052397): Revisit the macro expression once build flag switch
|
||||||
|
// of lacros-chrome is complete.
|
||||||
|
-#if defined(__GLIBC__) && (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS))
|
||||||
|
-#include <gnu/libc-version.h>
|
||||||
|
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS)
|
||||||
|
|
||||||
|
#include "base/linux_util.h"
|
||||||
|
#include "base/strings/string_split.h"
|
39
backports/electron/jsoncpp.patch
Normal file
39
backports/electron/jsoncpp.patch
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
Patch-Source: https://github.com/archlinux/svntogit-packages/blob/bf2401407df5bcc938382eb03748fbef41e41c89/trunk/unbundle-jsoncpp-avoid-CFI-faults-with-is_cfi-true.patch
|
||||||
|
From ed8d931e35f81d8566835a579caf7d61368f85b7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Evangelos Foutras <evangelos@foutrelis.com>
|
||||||
|
Date: Tue, 27 Sep 2022 22:20:41 +0000
|
||||||
|
Subject: [PATCH] unbundle/jsoncpp: avoid CFI faults with is_cfi=true
|
||||||
|
|
||||||
|
Ensure jsoncpp symbols have public visibility and are thus excluded from
|
||||||
|
CFI checks and whole-program optimization. This is achieved by defining
|
||||||
|
JSON_DLL_BUILD which in turn causes json/config.h to define JSON_API as
|
||||||
|
__attribute__((visibility("default"))). The latter macro is used to tag
|
||||||
|
jsoncpp classes and namespace functions throughout jsoncpp's headers.
|
||||||
|
|
||||||
|
BUG=1365218
|
||||||
|
|
||||||
|
Change-Id: I56277737b7d9ecaeb5e17c8d21a2e55f3d5d5bc9
|
||||||
|
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3919652
|
||||||
|
Reviewed-by: Thomas Anderson <thomasanderson@chromium.org>
|
||||||
|
Commit-Queue: Thomas Anderson <thomasanderson@chromium.org>
|
||||||
|
Cr-Commit-Position: refs/heads/main@{#1052077}
|
||||||
|
---
|
||||||
|
build/linux/unbundle/jsoncpp.gn | 5 +++++
|
||||||
|
1 file changed, 5 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/build/linux/unbundle/jsoncpp.gn b/build/linux/unbundle/jsoncpp.gn
|
||||||
|
index 544f9d13c9..e84a0ef27a 100644
|
||||||
|
--- a/build/linux/unbundle/jsoncpp.gn
|
||||||
|
+++ b/build/linux/unbundle/jsoncpp.gn
|
||||||
|
@@ -3,6 +3,11 @@ import("//build/shim_headers.gni")
|
||||||
|
|
||||||
|
pkg_config("jsoncpp_config") {
|
||||||
|
packages = [ "jsoncpp" ]
|
||||||
|
+
|
||||||
|
+ # Defining JSON_DLL_BUILD applies public visibility to jsoncpp classes
|
||||||
|
+ # thus deactivating CFI checks for them. This avoids CFI violations in
|
||||||
|
+ # virtual calls to system jsoncpp library (https://crbug.com/1365218).
|
||||||
|
+ defines = [ "JSON_DLL_BUILD" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
shim_headers("jsoncpp_shim") {
|
319
backports/electron/libstdc++13.patch
Normal file
319
backports/electron/libstdc++13.patch
Normal file
|
@ -0,0 +1,319 @@
|
||||||
|
missing libstdc++13 includes
|
||||||
|
--
|
||||||
|
--- a/third_party/ruy/src/ruy/profiler/instrumentation.h
|
||||||
|
+++ b/third_party/ruy/src/ruy/profiler/instrumentation.h
|
||||||
|
@@ -19,6 +19,7 @@
|
||||||
|
#ifdef RUY_PROFILER
|
||||||
|
#include <cstdio>
|
||||||
|
#include <mutex>
|
||||||
|
+#include <string>
|
||||||
|
#include <vector>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
--- a/third_party/openscreen/src/platform/base/error.h
|
||||||
|
+++ b/third_party/openscreen/src/platform/base/error.h
|
||||||
|
@@ -6,6 +6,7 @@
|
||||||
|
#define PLATFORM_BASE_ERROR_H_
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
|
+#include <cstdint>
|
||||||
|
#include <ostream>
|
||||||
|
#include <string>
|
||||||
|
#include <utility>
|
||||||
|
--- a/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h
|
||||||
|
+++ b/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h
|
||||||
|
@@ -2389,6 +2389,7 @@
|
||||||
|
#undef VMA_IMPLEMENTATION
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
+#include <cstdio>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <cstring>
|
||||||
|
#include <utility>
|
||||||
|
--- a/third_party/vulkan-deps/vulkan-validation-layers/src/layers/external/vma/vk_mem_alloc.h
|
||||||
|
+++ b/third_party/vulkan-deps/vulkan-validation-layers/src/layers/external/vma/vk_mem_alloc.h
|
||||||
|
@@ -2389,6 +2389,7 @@
|
||||||
|
#undef VMA_IMPLEMENTATION
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
+#include <cstdio>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <cstring>
|
||||||
|
#include <utility>
|
||||||
|
--- a/ui/base/prediction/kalman_filter.h
|
||||||
|
+++ b/ui/base/prediction/kalman_filter.h
|
||||||
|
@@ -8,6 +8,8 @@
|
||||||
|
#include "base/component_export.h"
|
||||||
|
#include "ui/gfx/geometry/matrix3_f.h"
|
||||||
|
|
||||||
|
+#include <cstdint>
|
||||||
|
+
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
// This Kalman filter is used to predict state in one axles.
|
||||||
|
--- a/ui/events/types/scroll_types.h
|
||||||
|
+++ b/ui/events/types/scroll_types.h
|
||||||
|
@@ -5,6 +5,8 @@
|
||||||
|
#ifndef UI_EVENTS_TYPES_SCROLL_TYPES_H_
|
||||||
|
#define UI_EVENTS_TYPES_SCROLL_TYPES_H_
|
||||||
|
|
||||||
|
+#include <cstdint>
|
||||||
|
+
|
||||||
|
namespace ui {
|
||||||
|
|
||||||
|
enum class ScrollGranularity : uint8_t {
|
||||||
|
--- a/third_party/webrtc/rtc_base/system/file_wrapper.h
|
||||||
|
+++ b/third_party/webrtc/rtc_base/system/file_wrapper.h
|
||||||
|
@@ -14,6 +14,7 @@
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
+#include <cstdint>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include "absl/strings/string_view.h"
|
||||||
|
--- a/third_party/pdfium/constants/annotation_flags.h
|
||||||
|
+++ b/third_party/pdfium/constants/annotation_flags.h
|
||||||
|
@@ -5,6 +5,8 @@
|
||||||
|
#ifndef CONSTANTS_ANNOTATION_FLAGS_H_
|
||||||
|
#define CONSTANTS_ANNOTATION_FLAGS_H_
|
||||||
|
|
||||||
|
+#include <cstdint>
|
||||||
|
+
|
||||||
|
namespace pdfium {
|
||||||
|
namespace annotation_flags {
|
||||||
|
|
||||||
|
--- a/third_party/s2cellid/src/s2/util/math/mathutil.h
|
||||||
|
+++ b/third_party/s2cellid/src/s2/util/math/mathutil.h
|
||||||
|
@@ -21,6 +21,7 @@
|
||||||
|
#ifndef S2_UTIL_MATH_MATHUTIL_H_
|
||||||
|
#define S2_UTIL_MATH_MATHUTIL_H_
|
||||||
|
|
||||||
|
+#include <cstdint>
|
||||||
|
#include <type_traits>
|
||||||
|
|
||||||
|
class MathUtil {
|
||||||
|
--- a/third_party/s2cellid/src/s2/s1angle.h
|
||||||
|
+++ b/third_party/s2cellid/src/s2/s1angle.h
|
||||||
|
@@ -24,6 +24,7 @@
|
||||||
|
#define S2_S1ANGLE_H_
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
|
+#include <cstdint>
|
||||||
|
#include <limits>
|
||||||
|
#include <ostream>
|
||||||
|
#include <type_traits>
|
||||||
|
--- a/third_party/maldoca/src/maldoca/ole/header.h
|
||||||
|
+++ b/third_party/maldoca/src/maldoca/ole/header.h
|
||||||
|
@@ -45,6 +45,8 @@
|
||||||
|
|
||||||
|
#include "absl/strings/string_view.h"
|
||||||
|
|
||||||
|
+#include <cstdint>
|
||||||
|
+
|
||||||
|
namespace maldoca {
|
||||||
|
|
||||||
|
class OLEHeader {
|
||||||
|
--- a/components/password_manager/core/browser/generation/password_generator.h
|
||||||
|
+++ b/components/password_manager/core/browser/generation/password_generator.h
|
||||||
|
@@ -5,6 +5,7 @@
|
||||||
|
#ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_GENERATION_PASSWORD_GENERATOR_H_
|
||||||
|
#define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_GENERATION_PASSWORD_GENERATOR_H_
|
||||||
|
|
||||||
|
+#include <cstdint>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
|
||||||
|
--- a/base/debug/profiler.h
|
||||||
|
+++ b/base/debug/profiler.h
|
||||||
|
@@ -7,6 +7,7 @@
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
+#include <cstdint>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include "base/base_export.h"
|
||||||
|
--- a/components/dom_distiller/core/url_utils.h
|
||||||
|
+++ b/components/dom_distiller/core/url_utils.h
|
||||||
|
@@ -5,6 +5,7 @@
|
||||||
|
#ifndef COMPONENTS_DOM_DISTILLER_CORE_URL_UTILS_H_
|
||||||
|
#define COMPONENTS_DOM_DISTILLER_CORE_URL_UTILS_H_
|
||||||
|
|
||||||
|
+#include <cstdint>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include "base/strings/string_piece_forward.h"
|
||||||
|
--- a/components/feature_engagement/internal/event_storage_validator.h
|
||||||
|
+++ b/components/feature_engagement/internal/event_storage_validator.h
|
||||||
|
@@ -5,6 +5,7 @@
|
||||||
|
#ifndef COMPONENTS_FEATURE_ENGAGEMENT_INTERNAL_EVENT_STORAGE_VALIDATOR_H_
|
||||||
|
#define COMPONENTS_FEATURE_ENGAGEMENT_INTERNAL_EVENT_STORAGE_VALIDATOR_H_
|
||||||
|
|
||||||
|
+#include <cstdint>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace feature_engagement {
|
||||||
|
--- a/chrome/test/chromedriver/chrome/web_view_impl.cc
|
||||||
|
+++ b/chrome/test/chromedriver/chrome/web_view_impl.cc
|
||||||
|
@@ -8,6 +8,7 @@
|
||||||
|
#include <algorithm>
|
||||||
|
#include <memory>
|
||||||
|
#include <queue>
|
||||||
|
+#include <string>
|
||||||
|
#include <utility>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
--- a/cc/trees/target_property.cc
|
||||||
|
+++ b/cc/trees/target_property.cc
|
||||||
|
@@ -2,6 +2,8 @@
|
||||||
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
+#include <cstdint>
|
||||||
|
+
|
||||||
|
#include "cc/trees/target_property.h"
|
||||||
|
|
||||||
|
#include "ui/gfx/animation/keyframe/target_property.h"
|
||||||
|
--- a/gpu/config/gpu_feature_info.h
|
||||||
|
+++ b/gpu/config/gpu_feature_info.h
|
||||||
|
@@ -5,6 +5,7 @@
|
||||||
|
#ifndef GPU_CONFIG_GPU_FEATURE_INFO_H_
|
||||||
|
#define GPU_CONFIG_GPU_FEATURE_INFO_H_
|
||||||
|
|
||||||
|
+#include <cstdint>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
--- a/gpu/config/gpu_driver_bug_workarounds.h
|
||||||
|
+++ b/gpu/config/gpu_driver_bug_workarounds.h
|
||||||
|
@@ -5,6 +5,7 @@
|
||||||
|
#ifndef GPU_CONFIG_GPU_DRIVER_BUG_WORKAROUNDS_H_
|
||||||
|
#define GPU_CONFIG_GPU_DRIVER_BUG_WORKAROUNDS_H_
|
||||||
|
|
||||||
|
+#include <cstdint>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include "build/build_config.h"
|
||||||
|
--- a/third_party/blink/public/common/page_state/page_state.h
|
||||||
|
+++ b/third_party/blink/public/common/page_state/page_state.h
|
||||||
|
@@ -5,6 +5,7 @@
|
||||||
|
#ifndef THIRD_PARTY_BLINK_PUBLIC_COMMON_PAGE_STATE_PAGE_STATE_H_
|
||||||
|
#define THIRD_PARTY_BLINK_PUBLIC_COMMON_PAGE_STATE_PAGE_STATE_H_
|
||||||
|
|
||||||
|
+#include <cstdint>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
--- a/pdf/document_attachment_info.h
|
||||||
|
+++ b/pdf/document_attachment_info.h
|
||||||
|
@@ -5,6 +5,7 @@
|
||||||
|
#ifndef PDF_DOCUMENT_ATTACHMENT_INFO_H_
|
||||||
|
#define PDF_DOCUMENT_ATTACHMENT_INFO_H_
|
||||||
|
|
||||||
|
+#include <cstdint>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
|
||||||
|
--- a/components/payments/content/utility/fingerprint_parser.h
|
||||||
|
+++ b/components/payments/content/utility/fingerprint_parser.h
|
||||||
|
@@ -7,6 +7,7 @@
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
+#include <cstdint>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
--- a/media/base/video_transformation.h
|
||||||
|
+++ b/media/base/video_transformation.h
|
||||||
|
@@ -5,6 +5,7 @@
|
||||||
|
#ifndef MEDIA_BASE_VIDEO_TRANSFORMATION_H_
|
||||||
|
#define MEDIA_BASE_VIDEO_TRANSFORMATION_H_
|
||||||
|
|
||||||
|
+#include <cstdint>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include "base/numerics/math_constants.h"
|
||||||
|
--- a/components/omnibox/browser/on_device_head_model.h
|
||||||
|
+++ b/components/omnibox/browser/on_device_head_model.h
|
||||||
|
@@ -5,6 +5,7 @@
|
||||||
|
#ifndef COMPONENTS_OMNIBOX_BROWSER_ON_DEVICE_HEAD_MODEL_H_
|
||||||
|
#define COMPONENTS_OMNIBOX_BROWSER_ON_DEVICE_HEAD_MODEL_H_
|
||||||
|
|
||||||
|
+#include <cstdint>
|
||||||
|
#include <string>
|
||||||
|
#include <utility>
|
||||||
|
#include <vector>
|
||||||
|
--- a/components/autofill/core/browser/autofill_ablation_study.h
|
||||||
|
+++ b/components/autofill/core/browser/autofill_ablation_study.h
|
||||||
|
@@ -5,6 +5,7 @@
|
||||||
|
#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_ABLATION_STUDY_H_
|
||||||
|
#define COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_ABLATION_STUDY_H_
|
||||||
|
|
||||||
|
+#include <cstdint>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
class GURL;
|
||||||
|
--- a/components/autofill/core/browser/strike_databases/strike_database_base.h
|
||||||
|
+++ b/components/autofill/core/browser/strike_databases/strike_database_base.h
|
||||||
|
@@ -5,6 +5,7 @@
|
||||||
|
#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_STRIKE_DATABASES_STRIKE_DATABASE_BASE_H_
|
||||||
|
#define COMPONENTS_AUTOFILL_CORE_BROWSER_STRIKE_DATABASES_STRIKE_DATABASE_BASE_H_
|
||||||
|
|
||||||
|
+#include <cstdint>
|
||||||
|
#include <map>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
--- a/chrome/browser/privacy_budget/encountered_surface_tracker.h
|
||||||
|
+++ b/chrome/browser/privacy_budget/encountered_surface_tracker.h
|
||||||
|
@@ -5,6 +5,7 @@
|
||||||
|
#ifndef CHROME_BROWSER_PRIVACY_BUDGET_ENCOUNTERED_SURFACE_TRACKER_H_
|
||||||
|
#define CHROME_BROWSER_PRIVACY_BUDGET_ENCOUNTERED_SURFACE_TRACKER_H_
|
||||||
|
|
||||||
|
+#include <cstdint>
|
||||||
|
#include <map>
|
||||||
|
|
||||||
|
#include "base/containers/flat_set.h"
|
||||||
|
--- a/chrome/browser/resource_coordinator/decision_details.h
|
||||||
|
+++ b/chrome/browser/resource_coordinator/decision_details.h
|
||||||
|
@@ -5,6 +5,7 @@
|
||||||
|
#ifndef CHROME_BROWSER_RESOURCE_COORDINATOR_DECISION_DETAILS_H_
|
||||||
|
#define CHROME_BROWSER_RESOURCE_COORDINATOR_DECISION_DETAILS_H_
|
||||||
|
|
||||||
|
+#include <cstdint>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
--- a/net/third_party/quiche/src/quiche/quic/core/qpack/qpack_stream_sender_delegate.h
|
||||||
|
+++ b/net/third_party/quiche/src/quiche/quic/core/qpack/qpack_stream_sender_delegate.h
|
||||||
|
@@ -8,6 +8,8 @@
|
||||||
|
#include "absl/strings/string_view.h"
|
||||||
|
#include "quiche/quic/platform/api/quic_export.h"
|
||||||
|
|
||||||
|
+#include <cstdint>
|
||||||
|
+
|
||||||
|
namespace quic {
|
||||||
|
|
||||||
|
// This interface writes encoder/decoder data to peer.
|
||||||
|
--- a/third_party/perfetto/src/trace_processor/sqlite/query_constraints.h
|
||||||
|
+++ b/third_party/perfetto/src/trace_processor/sqlite/query_constraints.h
|
||||||
|
@@ -17,6 +17,7 @@
|
||||||
|
#ifndef SRC_TRACE_PROCESSOR_SQLITE_QUERY_CONSTRAINTS_H_
|
||||||
|
#define SRC_TRACE_PROCESSOR_SQLITE_QUERY_CONSTRAINTS_H_
|
||||||
|
|
||||||
|
+#include <cstdint>
|
||||||
|
#include <limits>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
--- a/third_party/perfetto/include/perfetto/base/export.h
|
||||||
|
+++ b/third_party/perfetto/include/perfetto/base/export.h
|
||||||
|
@@ -17,6 +17,8 @@
|
||||||
|
#ifndef INCLUDE_PERFETTO_BASE_EXPORT_H_
|
||||||
|
#define INCLUDE_PERFETTO_BASE_EXPORT_H_
|
||||||
|
|
||||||
|
+#include <cstdint>
|
||||||
|
+
|
||||||
|
#include "perfetto/base/build_config.h"
|
||||||
|
#include "perfetto/public/abi/export.h"
|
||||||
|
|
13
backports/electron/mman.patch
Normal file
13
backports/electron/mman.patch
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
needed for PKEY_DISABLE_WRITE. these are documented as also being from sys/
|
||||||
|
mman.h with GNU_SOURCE, but musl doesn't do that, so these are strictly from
|
||||||
|
kernel headers
|
||||||
|
--- a/base/allocator/partition_allocator/partition_alloc_unittest.cc
|
||||||
|
+++ b/base/allocator/partition_allocator/partition_alloc_unittest.cc
|
||||||
|
@@ -60,6 +60,7 @@
|
||||||
|
#include <sys/mman.h>
|
||||||
|
#include <sys/resource.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
+#include <linux/mman.h>
|
||||||
|
#endif // BUILDFLAG(IS_POSIX)
|
||||||
|
|
||||||
|
#if BUILDFLAG(ENABLE_PARTITION_ALLOC_AS_MALLOC_SUPPORT) && BUILDFLAG(IS_MAC)
|
|
@ -1,11 +0,0 @@
|
||||||
--- ./v8/src/base/cpu.cc.orig
|
|
||||||
+++ ./v8/src/base/cpu.cc
|
|
||||||
@@ -14,7 +14,7 @@
|
|
||||||
#if V8_OS_LINUX
|
|
||||||
#include <linux/auxvec.h> // AT_HWCAP
|
|
||||||
#endif
|
|
||||||
-#if V8_GLIBC_PREREQ(2, 16) || V8_OS_ANDROID
|
|
||||||
+#if 1
|
|
||||||
#include <sys/auxv.h> // getauxval()
|
|
||||||
#endif
|
|
||||||
#if V8_OS_QNX
|
|
|
@ -45,7 +45,7 @@ diff --git a/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc ./sandbox/linux/s
|
||||||
index d9d1882..0567557 100644
|
index d9d1882..0567557 100644
|
||||||
--- a/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc
|
--- a/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc
|
||||||
+++ ./sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc
|
+++ ./sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc
|
||||||
@@ -438,6 +438,7 @@
|
@@ -392,6 +392,7 @@ bool SyscallSets::IsAllowedProcessStartOrDeath(int sysno) {
|
||||||
#if defined(__i386__)
|
#if defined(__i386__)
|
||||||
case __NR_waitpid:
|
case __NR_waitpid:
|
||||||
#endif
|
#endif
|
||||||
|
@ -53,7 +53,7 @@ index d9d1882..0567557 100644
|
||||||
return true;
|
return true;
|
||||||
case __NR_clone: // Should be parameter-restricted.
|
case __NR_clone: // Should be parameter-restricted.
|
||||||
case __NR_setns: // Privileged.
|
case __NR_setns: // Privileged.
|
||||||
@@ -450,7 +451,6 @@
|
@@ -404,7 +405,6 @@ bool SyscallSets::IsAllowedProcessStartOrDeath(int sysno) {
|
||||||
#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
|
#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
|
||||||
case __NR_set_thread_area:
|
case __NR_set_thread_area:
|
||||||
#endif
|
#endif
|
||||||
|
@ -61,16 +61,16 @@ index d9d1882..0567557 100644
|
||||||
case __NR_unshare:
|
case __NR_unshare:
|
||||||
#if !defined(__mips__) && !defined(__aarch64__)
|
#if !defined(__mips__) && !defined(__aarch64__)
|
||||||
case __NR_vfork:
|
case __NR_vfork:
|
||||||
@@ -549,6 +549,8 @@
|
@@ -514,6 +514,8 @@ bool SyscallSets::IsAllowedAddressSpaceAccess(int sysno) {
|
||||||
|
case __NR_mlock:
|
||||||
case __NR_munlock:
|
case __NR_munlock:
|
||||||
case __NR_munmap:
|
case __NR_munmap:
|
||||||
case __NR_mseal:
|
|
||||||
+ case __NR_mremap:
|
+ case __NR_mremap:
|
||||||
+ case __NR_membarrier:
|
+ case __NR_membarrier:
|
||||||
return true;
|
return true;
|
||||||
case __NR_madvise:
|
case __NR_madvise:
|
||||||
case __NR_mincore:
|
case __NR_mincore:
|
||||||
@@ -566,7 +568,6 @@
|
@@ -531,7 +533,6 @@ bool SyscallSets::IsAllowedAddressSpaceAccess(int sysno) {
|
||||||
case __NR_modify_ldt:
|
case __NR_modify_ldt:
|
||||||
#endif
|
#endif
|
||||||
case __NR_mprotect:
|
case __NR_mprotect:
|
||||||
|
|
|
@ -37,24 +37,25 @@ for discussion about this, see https://www.openwall.com/lists/musl/2021/07/16/1
|
||||||
#define HAVE_FCNTL_H 1
|
#define HAVE_FCNTL_H 1
|
||||||
--- a/base/debug/stack_trace.cc
|
--- a/base/debug/stack_trace.cc
|
||||||
+++ b/base/debug/stack_trace.cc
|
+++ b/base/debug/stack_trace.cc
|
||||||
@@ -311,7 +311,7 @@
|
@@ -251,7 +253,9 @@
|
||||||
|
}
|
||||||
|
|
||||||
std::string StackTrace::ToStringWithPrefix(cstring_view prefix_string) const {
|
void StackTrace::OutputToStream(std::ostream* os) const {
|
||||||
|
+#if defined(__GLIBC__) && !defined(_AIX)
|
||||||
|
OutputToStreamWithPrefix(os, nullptr);
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string StackTrace::ToString() const {
|
||||||
|
@@ -281,7 +281,7 @@
|
||||||
|
}
|
||||||
|
std::string StackTrace::ToStringWithPrefix(const char* prefix_string) const {
|
||||||
std::stringstream stream;
|
std::stringstream stream;
|
||||||
-#if !defined(__UCLIBC__) && !defined(_AIX)
|
-#if !defined(__UCLIBC__) && !defined(_AIX)
|
||||||
+#if defined(__GLIBC__) && !defined(_AIX)
|
+#if defined(__GLIBC__) && !defined(_AIX)
|
||||||
OutputToStreamWithPrefix(&stream, prefix_string);
|
OutputToStreamWithPrefix(&stream, prefix_string);
|
||||||
#endif
|
#endif
|
||||||
return stream.str();
|
return stream.str();
|
||||||
@@ -335,7 +335,7 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
std::ostream& operator<<(std::ostream& os, const StackTrace& s) {
|
|
||||||
-#if !defined(__UCLIBC__) && !defined(_AIX)
|
|
||||||
+#if defined(__GLIBC__) && !defined(_AIX)
|
|
||||||
s.OutputToStream(&os);
|
|
||||||
#else
|
|
||||||
os << "StackTrace::OutputToStream not implemented.";
|
|
||||||
--- a/base/debug/stack_trace_unittest.cc
|
--- a/base/debug/stack_trace_unittest.cc
|
||||||
+++ b/base/debug/stack_trace_unittest.cc
|
+++ b/base/debug/stack_trace_unittest.cc
|
||||||
@@ -33,7 +33,7 @@
|
@@ -33,7 +33,7 @@
|
||||||
|
@ -66,3 +67,12 @@ for discussion about this, see https://www.openwall.com/lists/musl/2021/07/16/1
|
||||||
// StackTrace::OutputToStream() is not implemented under uclibc, nor AIX.
|
// StackTrace::OutputToStream() is not implemented under uclibc, nor AIX.
|
||||||
// See https://crbug.com/706728
|
// See https://crbug.com/706728
|
||||||
|
|
||||||
|
@@ -156,7 +156,7 @@
|
||||||
|
|
||||||
|
#endif // !defined(__UCLIBC__) && !defined(_AIX)
|
||||||
|
|
||||||
|
-#if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_ANDROID)
|
||||||
|
+#if (BUILDFLAG(IS_POSIX) && defined(__GLIBC__)) && !BUILDFLAG(IS_ANDROID)
|
||||||
|
#if !BUILDFLAG(IS_IOS)
|
||||||
|
static char* newArray() {
|
||||||
|
// Clang warns about the mismatched new[]/delete if they occur in the same
|
||||||
|
|
|
@ -100,25 +100,25 @@ musl does not implement mallinfo()/mallinfo2()
|
||||||
|
|
||||||
/* Define to 1 if you have the <malloc.h> header file. */
|
/* Define to 1 if you have the <malloc.h> header file. */
|
||||||
#define HAVE_MALLOC_H 1
|
#define HAVE_MALLOC_H 1
|
||||||
--- a/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc.cc
|
--- a/base/allocator/partition_allocator/shim/allocator_shim_default_dispatch_to_partition_alloc.cc
|
||||||
+++ b/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc.cc
|
+++ b/base/allocator/partition_allocator/shim/allocator_shim_default_dispatch_to_partition_alloc.cc
|
||||||
@@ -660,7 +660,7 @@
|
@@ -717,7 +717,7 @@
|
||||||
|
|
||||||
#endif // !PA_BUILDFLAG(IS_APPLE) && !PA_BUILDFLAG(IS_ANDROID)
|
#endif // !BUILDFLAG(IS_APPLE) && !BUILDFLAG(IS_ANDROID)
|
||||||
|
|
||||||
-#if PA_BUILDFLAG(IS_LINUX) || PA_BUILDFLAG(IS_CHROMEOS)
|
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
|
||||||
+#if 0
|
+#if 0
|
||||||
SHIM_ALWAYS_EXPORT struct mallinfo mallinfo(void) __THROW {
|
SHIM_ALWAYS_EXPORT struct mallinfo mallinfo(void) __THROW {
|
||||||
partition_alloc::SimplePartitionStatsDumper allocator_dumper;
|
base::SimplePartitionStatsDumper allocator_dumper;
|
||||||
Allocator()->DumpStats("malloc", true, &allocator_dumper);
|
Allocator()->DumpStats("malloc", true, &allocator_dumper);
|
||||||
--- a/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc
|
--- a/base/allocator/partition_allocator/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc
|
||||||
+++ b/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc
|
+++ b/base/allocator/partition_allocator/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc
|
||||||
@@ -29,7 +29,7 @@
|
@@ -24,7 +24,7 @@
|
||||||
#if PA_BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC)
|
#if BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC)
|
||||||
|
|
||||||
// Platforms on which we override weak libc symbols.
|
// Platforms on which we override weak libc symbols.
|
||||||
-#if PA_BUILDFLAG(IS_LINUX) || PA_BUILDFLAG(IS_CHROMEOS)
|
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
|
||||||
+#if (PA_BUILDFLAG(IS_LINUX) && defined(__GLIBC__)) || PA_BUILDFLAG(IS_CHROMEOS)
|
+#if (BUILDFLAG(IS_LINUX) && defined(__GLIBC__)) || BUILDFLAG(IS_CHROMEOS)
|
||||||
|
|
||||||
PA_NOINLINE void FreeForTest(void* data) {
|
NOINLINE void FreeForTest(void* data) {
|
||||||
free(data);
|
free(data);
|
||||||
|
|
13
backports/electron/no-mte.patch
Normal file
13
backports/electron/no-mte.patch
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
M115 needs ifuncs for this
|
||||||
|
--
|
||||||
|
--- a/base/allocator/partition_allocator/partition_alloc_config.h
|
||||||
|
+++ b/base/allocator/partition_allocator/partition_alloc_config.h
|
||||||
|
@@ -155,7 +155,7 @@
|
||||||
|
#define PA_CONFIG_HAS_MEMORY_TAGGING() \
|
||||||
|
(defined(ARCH_CPU_ARM64) && defined(__clang__) && \
|
||||||
|
!defined(ADDRESS_SANITIZER) && \
|
||||||
|
- (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_ANDROID)))
|
||||||
|
+ ((BUILDFLAG(IS_LINUX) && defined(__GLIBC__)) || BUILDFLAG(IS_ANDROID)))
|
||||||
|
|
||||||
|
#if PA_CONFIG(HAS_MEMORY_TAGGING)
|
||||||
|
static_assert(sizeof(void*) == 8);
|
|
@ -1,25 +0,0 @@
|
||||||
Hard-disable memory tagging on ARM64 - it does exist there but musl is
|
|
||||||
missing some required interface headers for it, and it's not clear how
|
|
||||||
to make the partalloc support code for it work.
|
|
||||||
--- ./base/allocator/partition_allocator/partition_alloc.gni.orig
|
|
||||||
+++ ./base/allocator/partition_allocator/partition_alloc.gni
|
|
||||||
@@ -30,7 +30,7 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
has_memory_tagging =
|
|
||||||
- current_cpu == "arm64" && is_clang && !is_asan && (is_linux || is_android)
|
|
||||||
+ false
|
|
||||||
|
|
||||||
declare_args() {
|
|
||||||
# Causes all the allocations to be routed via allocator_shim.cc. Usually,
|
|
||||||
--- ./base/allocator/partition_allocator/src/partition_alloc/aarch64_support.h.orig
|
|
||||||
+++ ./base/allocator/partition_allocator/src/partition_alloc/aarch64_support.h
|
|
||||||
@@ -10,7 +10,7 @@
|
|
||||||
#include "partition_alloc/build_config.h"
|
|
||||||
#include "partition_alloc/partition_alloc_buildflags.h"
|
|
||||||
|
|
||||||
-#if PA_BUILDFLAG(IS_ANDROID) || PA_BUILDFLAG(IS_LINUX)
|
|
||||||
+#if PA_BUILDFLAG(IS_ANDROID) || (PA_BUILDFLAG(IS_LINUX) && defined(__GLIBC__))
|
|
||||||
#define HAS_HW_CAPS
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
Patch-Source: https://webrtc-review.googlesource.com/c/src/+/380500
|
|
||||||
---
|
|
||||||
--- a/third_party/webrtc/modules/video_capture/linux/pipewire_session.cc
|
|
||||||
+++ b/third_party/webrtc/modules/video_capture/linux/pipewire_session.cc
|
|
||||||
@@ -87,7 +87,7 @@
|
|
||||||
.param = OnNodeParam,
|
|
||||||
};
|
|
||||||
|
|
||||||
- pw_node_add_listener(proxy_, &node_listener_, &node_events, this);
|
|
||||||
+ pw_node_add_listener(reinterpret_cast<pw_node*>(proxy_), &node_listener_, &node_events, this);
|
|
||||||
}
|
|
||||||
|
|
||||||
// static
|
|
||||||
@@ -119,7 +119,7 @@
|
|
||||||
uint32_t id = info->params[i].id;
|
|
||||||
if (id == SPA_PARAM_EnumFormat &&
|
|
||||||
info->params[i].flags & SPA_PARAM_INFO_READ) {
|
|
||||||
- pw_node_enum_params(that->proxy_, 0, id, 0, UINT32_MAX, nullptr);
|
|
||||||
+ pw_node_enum_params(reinterpret_cast<pw_node*>(that->proxy_), 0, id, 0, UINT32_MAX, nullptr);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,33 +0,0 @@
|
||||||
the pvalloc/valloc symbols are obsolete and not implemented in musl
|
|
||||||
--
|
|
||||||
--- a/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_unittest.cc
|
|
||||||
+++ b/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_unittest.cc
|
|
||||||
@@ -410,7 +410,7 @@
|
|
||||||
ASSERT_GE(aligned_allocs_intercepted_by_alignment[128], 1u);
|
|
||||||
ASSERT_GE(aligned_allocs_intercepted_by_size[53], 1u);
|
|
||||||
|
|
||||||
-#if PA_BUILDFLAG(IS_POSIX) && !PA_BUILDFLAG(IS_ANDROID)
|
|
||||||
+#if (PA_BUILDFLAG(IS_POSIX) && defined(__GLIBC__)) && !PA_BUILDFLAG(IS_ANDROID)
|
|
||||||
void* pvalloc_ptr = pvalloc(67);
|
|
||||||
ASSERT_NE(nullptr, pvalloc_ptr);
|
|
||||||
ASSERT_EQ(0u, reinterpret_cast<uintptr_t>(pvalloc_ptr) % kPageSize);
|
|
||||||
@@ -449,7 +449,7 @@
|
|
||||||
free(memalign_ptr);
|
|
||||||
ASSERT_GE(frees_intercepted_by_addr[Hash(memalign_ptr)], 1u);
|
|
||||||
|
|
||||||
-#if PA_BUILDFLAG(IS_POSIX) && !PA_BUILDFLAG(IS_ANDROID)
|
|
||||||
+#if (PA_BUILDFLAG(IS_POSIX) && defined(__GLIBC__)) && !PA_BUILDFLAG(IS_ANDROID)
|
|
||||||
free(pvalloc_ptr);
|
|
||||||
ASSERT_GE(frees_intercepted_by_addr[Hash(pvalloc_ptr)], 1u);
|
|
||||||
#endif // PA_BUILDFLAG(IS_POSIX) && !PA_BUILDFLAG(IS_ANDROID)
|
|
||||||
--- a/base/process/memory_unittest.cc
|
|
||||||
+++ b/base/process/memory_unittest.cc
|
|
||||||
@@ -359,7 +359,7 @@
|
|
||||||
#endif // BUILDFLAG(IS_WIN)
|
|
||||||
#endif // !BUILDFLAG(IS_MAC)
|
|
||||||
|
|
||||||
-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
|
|
||||||
+#if (BUILDFLAG(IS_LINUX) && defined(__GLIBC__)) || BUILDFLAG(IS_CHROMEOS)
|
|
||||||
|
|
||||||
TEST_F(OutOfMemoryDeathTest, Valloc) {
|
|
||||||
ASSERT_OOM_DEATH({
|
|
10
backports/electron/remove-broken-patch.patch
Normal file
10
backports/electron/remove-broken-patch.patch
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
--- a/third_party/node/update_npm_deps
|
||||||
|
+++ b/third_party/node/update_npm_deps
|
||||||
|
@@ -20,7 +20,6 @@
|
||||||
|
|
||||||
|
patch -d node_modules/@types/d3/ -p1 < chromium_d3_types_index.patch
|
||||||
|
patch -d node_modules/html-minifier/ -p1 < html_minifier.patch
|
||||||
|
-patch -p1 < typescript.patch
|
||||||
|
|
||||||
|
rsync -c --delete -r -q --include-from="npm_include.txt" --exclude-from="npm_exclude.txt" \
|
||||||
|
--prune-empty-dirs "node_modules/" "node_modules_filtered/"
|
113
backports/electron/vector-const.patch
Normal file
113
backports/electron/vector-const.patch
Normal file
|
@ -0,0 +1,113 @@
|
||||||
|
--- a/chrome/browser/process_singleton_posix.cc
|
||||||
|
+++ b/chrome/browser/process_singleton_posix.cc
|
||||||
|
@@ -607,7 +607,7 @@
|
||||||
|
// |reader| is for sending back ACK message.
|
||||||
|
void HandleMessage(const std::string& current_dir,
|
||||||
|
const std::vector<std::string>& argv,
|
||||||
|
- const std::vector<const uint8_t> additional_data,
|
||||||
|
+ const std::vector<uint8_t> additional_data,
|
||||||
|
SocketReader* reader);
|
||||||
|
|
||||||
|
private:
|
||||||
|
@@ -664,7 +664,7 @@
|
||||||
|
void ProcessSingleton::LinuxWatcher::HandleMessage(
|
||||||
|
const std::string& current_dir,
|
||||||
|
const std::vector<std::string>& argv,
|
||||||
|
- const std::vector<const uint8_t> additional_data,
|
||||||
|
+ const std::vector<uint8_t> additional_data,
|
||||||
|
SocketReader* reader) {
|
||||||
|
DCHECK(ui_task_runner_->BelongsToCurrentThread());
|
||||||
|
DCHECK(reader);
|
||||||
|
@@ -754,7 +754,7 @@
|
||||||
|
base::StringToSizeT(tokens[0], &num_args);
|
||||||
|
std::vector<std::string> command_line(tokens.begin() + 1, tokens.begin() + 1 + num_args);
|
||||||
|
|
||||||
|
- std::vector<const uint8_t> additional_data;
|
||||||
|
+ std::vector<uint8_t> additional_data;
|
||||||
|
if (tokens.size() >= 3 + num_args) {
|
||||||
|
size_t additional_data_size;
|
||||||
|
base::StringToSizeT(tokens[1 + num_args], &additional_data_size);
|
||||||
|
@@ -763,7 +763,7 @@
|
||||||
|
std::string(1, kTokenDelimiter));
|
||||||
|
const uint8_t* additional_data_bits =
|
||||||
|
reinterpret_cast<const uint8_t*>(remaining_args.c_str());
|
||||||
|
- additional_data = std::vector<const uint8_t>(
|
||||||
|
+ additional_data = std::vector<uint8_t>(
|
||||||
|
additional_data_bits, additional_data_bits + additional_data_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
--- a/chrome/browser/process_singleton.h
|
||||||
|
+++ b/chrome/browser/process_singleton.h
|
||||||
|
@@ -102,7 +102,7 @@
|
||||||
|
using NotificationCallback =
|
||||||
|
base::RepeatingCallback<bool(const base::CommandLine& command_line,
|
||||||
|
const base::FilePath& current_directory,
|
||||||
|
- const std::vector<const uint8_t> additional_data)>;
|
||||||
|
+ const std::vector<uint8_t> additional_data)>;
|
||||||
|
|
||||||
|
#if BUILDFLAG(IS_WIN)
|
||||||
|
ProcessSingleton(const std::string& program_name,
|
||||||
|
--- a/chrome/browser/process_singleton_win.cc
|
||||||
|
+++ b/chrome/browser/process_singleton_win.cc
|
||||||
|
@@ -81,7 +81,7 @@
|
||||||
|
bool ParseCommandLine(const COPYDATASTRUCT* cds,
|
||||||
|
base::CommandLine* parsed_command_line,
|
||||||
|
base::FilePath* current_directory,
|
||||||
|
- std::vector<const uint8_t>* parsed_additional_data) {
|
||||||
|
+ std::vector<uint8_t>* parsed_additional_data) {
|
||||||
|
// We should have enough room for the shortest command (min_message_size)
|
||||||
|
// and also be a multiple of wchar_t bytes. The shortest command
|
||||||
|
// possible is L"START\0\0" (empty command line, current directory,
|
||||||
|
@@ -163,7 +163,7 @@
|
||||||
|
msg.substr(fourth_null + 1, fifth_null - fourth_null);
|
||||||
|
const uint8_t* additional_data_bytes =
|
||||||
|
reinterpret_cast<const uint8_t*>(additional_data.c_str());
|
||||||
|
- *parsed_additional_data = std::vector<const uint8_t>(additional_data_bytes,
|
||||||
|
+ *parsed_additional_data = std::vector<uint8_t>(additional_data_bytes,
|
||||||
|
additional_data_bytes + additional_data_length);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
@@ -187,7 +187,7 @@
|
||||||
|
|
||||||
|
base::CommandLine parsed_command_line(base::CommandLine::NO_PROGRAM);
|
||||||
|
base::FilePath current_directory;
|
||||||
|
- std::vector<const uint8_t> additional_data;
|
||||||
|
+ std::vector<uint8_t> additional_data;
|
||||||
|
if (!ParseCommandLine(cds, &parsed_command_line, ¤t_directory, &additional_data)) {
|
||||||
|
*result = TRUE;
|
||||||
|
return true;
|
||||||
|
--- a/electron/shell/browser/api/electron_api_app.cc
|
||||||
|
+++ b/electron/shell/browser/api/electron_api_app.cc
|
||||||
|
@@ -519,10 +519,10 @@
|
||||||
|
const base::RepeatingCallback<
|
||||||
|
void(const base::CommandLine& command_line,
|
||||||
|
const base::FilePath& current_directory,
|
||||||
|
- const std::vector<const uint8_t> additional_data)>& callback,
|
||||||
|
+ const std::vector<uint8_t> additional_data)>& callback,
|
||||||
|
const base::CommandLine& cmd,
|
||||||
|
const base::FilePath& cwd,
|
||||||
|
- const std::vector<const uint8_t> additional_data) {
|
||||||
|
+ const std::vector<uint8_t> additional_data) {
|
||||||
|
// Make sure the callback is called after app gets ready.
|
||||||
|
if (Browser::Get()->is_ready()) {
|
||||||
|
callback.Run(cmd, cwd, std::move(additional_data));
|
||||||
|
@@ -1082,7 +1082,7 @@
|
||||||
|
|
||||||
|
void App::OnSecondInstance(const base::CommandLine& cmd,
|
||||||
|
const base::FilePath& cwd,
|
||||||
|
- const std::vector<const uint8_t> additional_data) {
|
||||||
|
+ const std::vector<uint8_t> additional_data) {
|
||||||
|
v8::Isolate* isolate = JavascriptEnvironment::GetIsolate();
|
||||||
|
v8::Locker locker(isolate);
|
||||||
|
v8::HandleScope handle_scope(isolate);
|
||||||
|
--- a/electron/shell/browser/api/electron_api_app.h
|
||||||
|
+++ b/electron/shell/browser/api/electron_api_app.h
|
||||||
|
@@ -195,7 +195,7 @@
|
||||||
|
std::string GetLocaleCountryCode();
|
||||||
|
void OnSecondInstance(const base::CommandLine& cmd,
|
||||||
|
const base::FilePath& cwd,
|
||||||
|
- const std::vector<const uint8_t> additional_data);
|
||||||
|
+ const std::vector<uint8_t> additional_data);
|
||||||
|
bool HasSingleInstanceLock() const;
|
||||||
|
bool RequestSingleInstanceLock(gin::Arguments* args);
|
||||||
|
void ReleaseSingleInstanceLock();
|
|
@ -1,11 +0,0 @@
|
||||||
--- ./buildtools/third_party/libc++/__config_site.orig
|
|
||||||
+++ ./buildtools/third_party/libc++/__config_site
|
|
||||||
@@ -18,7 +18,7 @@
|
|
||||||
/* #undef _LIBCPP_ABI_FORCE_MICROSOFT */
|
|
||||||
/* #undef _LIBCPP_HAS_NO_THREADS */
|
|
||||||
/* #undef _LIBCPP_HAS_NO_MONOTONIC_CLOCK */
|
|
||||||
-/* #undef _LIBCPP_HAS_MUSL_LIBC */
|
|
||||||
+#define _LIBCPP_HAS_MUSL_LIBC 1
|
|
||||||
/* #undef _LIBCPP_HAS_THREAD_API_PTHREAD */
|
|
||||||
/* #undef _LIBCPP_HAS_THREAD_API_EXTERNAL */
|
|
||||||
/* #undef _LIBCPP_HAS_THREAD_API_WIN32 */
|
|
|
@ -1,171 +0,0 @@
|
||||||
# Contributor: lauren n. liberda <lauren@selfisekai.rocks>
|
|
||||||
maintainer="lauren n. liberda <lauren@selfisekai.rocks>"
|
|
||||||
pkgname=element-desktop
|
|
||||||
pkgver=1.11.100
|
|
||||||
pkgrel=1
|
|
||||||
pkgdesc="Secure and independent communication, connected via Matrix"
|
|
||||||
url="https://element.io/"
|
|
||||||
arch="aarch64 x86_64" # same as electron
|
|
||||||
license="GPL-3.0-only"
|
|
||||||
_electronver=35
|
|
||||||
depends="
|
|
||||||
electron~$_electronver
|
|
||||||
font-inconsolata
|
|
||||||
font-inter
|
|
||||||
font-nunito
|
|
||||||
font-opensans
|
|
||||||
font-twemoji
|
|
||||||
"
|
|
||||||
makedepends="
|
|
||||||
cargo
|
|
||||||
electron-dev~$_electronver
|
|
||||||
electron-tasje
|
|
||||||
jq
|
|
||||||
libsecret-dev
|
|
||||||
nodejs
|
|
||||||
npm
|
|
||||||
python3
|
|
||||||
py3-setuptools
|
|
||||||
sqlcipher-dev
|
|
||||||
swc
|
|
||||||
yarn
|
|
||||||
"
|
|
||||||
source="
|
|
||||||
https://github.com/vector-im/element-desktop/archive/refs/tags/v$pkgver/element-desktop-$pkgver.tar.gz
|
|
||||||
https://github.com/vector-im/element-web/archive/refs/tags/v$pkgver/element-web-$pkgver.tar.gz
|
|
||||||
|
|
||||||
add-alpine-targets.patch
|
|
||||||
use-system-headers.patch
|
|
||||||
tasje-one-hak.patch
|
|
||||||
tasje-no-fuses.patch
|
|
||||||
no-source-maps.patch.web
|
|
||||||
use-system-fonts.patch.web
|
|
||||||
|
|
||||||
element-desktop
|
|
||||||
"
|
|
||||||
options="net !check" # broken
|
|
||||||
|
|
||||||
# secfixes:
|
|
||||||
# 1.11.30-r0:
|
|
||||||
# - CVE-2023-30609
|
|
||||||
# 1.11.26-r0:
|
|
||||||
# - CVE-2023-28103
|
|
||||||
# - CVE-2023-28427
|
|
||||||
# 1.11.7-r0:
|
|
||||||
# - CVE-2022-39249
|
|
||||||
# - CVE-2022-39250
|
|
||||||
# - CVE-2022-39251
|
|
||||||
# - CVE-2022-39236
|
|
||||||
# 1.11.4-r0:
|
|
||||||
# - CVE-2022-36059
|
|
||||||
# - CVE-2022-36060
|
|
||||||
|
|
||||||
# used by buildscripts (at least web's webpack)
|
|
||||||
export VERSION=$pkgver
|
|
||||||
|
|
||||||
export CARGO_PROFILE_RELEASE_OPT_LEVEL=2
|
|
||||||
export CARGO_PROFILE_RELEASE_STRIP="symbols"
|
|
||||||
export NODE_OPTIONS="--openssl-legacy-provider"
|
|
||||||
|
|
||||||
prepare() {
|
|
||||||
default_prepare
|
|
||||||
|
|
||||||
msg "Applying more patches"
|
|
||||||
for x in $source; do
|
|
||||||
case "$x" in
|
|
||||||
*.patch.web)
|
|
||||||
msg "$x"
|
|
||||||
patch -p1 -i "$srcdir"/$x -d "$srcdir"/element-web-$pkgver
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
rm -rf res/fonts
|
|
||||||
|
|
||||||
(
|
|
||||||
cd "$srcdir"/element-web-$pkgver
|
|
||||||
|
|
||||||
msg "Fetch element-web dependencies"
|
|
||||||
yarn install --frozen-lockfile --ignore-scripts --ignore-engines
|
|
||||||
jq '.show_labs_settings = true' < config.sample.json > config.json
|
|
||||||
)
|
|
||||||
|
|
||||||
ln -s "$srcdir"/element-web-$pkgver/webapp webapp
|
|
||||||
|
|
||||||
msg "Fetch element-desktop dependencies"
|
|
||||||
yarn install --frozen-lockfile --ignore-scripts
|
|
||||||
}
|
|
||||||
|
|
||||||
build() {
|
|
||||||
(
|
|
||||||
cd "$srcdir"/element-web-$pkgver
|
|
||||||
|
|
||||||
msg "Build element-web"
|
|
||||||
NODE_ENV=production yarn build
|
|
||||||
)
|
|
||||||
|
|
||||||
msg "Build element-desktop"
|
|
||||||
|
|
||||||
yarn asar-webapp
|
|
||||||
|
|
||||||
# add "optional" native dependencies
|
|
||||||
# hak stands for hack
|
|
||||||
yarn run hak --target "$(uname -m)-alpine-linux-musl"
|
|
||||||
|
|
||||||
yarn build:ts
|
|
||||||
|
|
||||||
yarn build:res
|
|
||||||
|
|
||||||
# we need it as js to be of any use for tasje.
|
|
||||||
# fails with `yarn tsc`. https://github.com/electron-userland/electron-builder/issues/7961
|
|
||||||
swc compile electron-builder.ts --out-file electron-builder.mjs
|
|
||||||
|
|
||||||
yarn install --frozen-lockfile --ignore-scripts --production
|
|
||||||
|
|
||||||
npm rebuild keytar-forked --nodedir=/usr/include/electron/node_headers --build-from-source
|
|
||||||
find node_modules/keytar-forked/build/ -type f \
|
|
||||||
\! -path node_modules/keytar-forked/build/Release/keytar.node \
|
|
||||||
-delete
|
|
||||||
# stripping in build because it gets into asar
|
|
||||||
strip node_modules/keytar-forked/build/Release/keytar.node
|
|
||||||
|
|
||||||
tasje -c electron-builder.mjs pack
|
|
||||||
}
|
|
||||||
|
|
||||||
check() {
|
|
||||||
(
|
|
||||||
cd "$srcdir"/element-web-$pkgver
|
|
||||||
|
|
||||||
yarn test
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
package() {
|
|
||||||
local resources="dist/resources"
|
|
||||||
|
|
||||||
install -Dm644 $resources/app.asar "$pkgdir"/usr/lib/element-desktop/app.asar
|
|
||||||
install -Dm644 webapp.asar "$pkgdir"/usr/lib/element-desktop/webapp.asar
|
|
||||||
|
|
||||||
cp -r $resources/app.asar.unpacked "$pkgdir"/usr/lib/element-desktop/app.asar.unpacked
|
|
||||||
|
|
||||||
install -Dm644 $resources/img/element.png "$pkgdir"/usr/lib/element-desktop/img/element.png
|
|
||||||
|
|
||||||
install -Dm755 "$srcdir"/$pkgname "$pkgdir"/usr/bin/$pkgname
|
|
||||||
|
|
||||||
install -Dm644 dist/$pkgname.desktop "$pkgdir"/usr/share/applications/$pkgname.desktop
|
|
||||||
while read -r size; do
|
|
||||||
install -Dm644 dist/icons/$size.png "$pkgdir"/usr/share/icons/hicolor/$size/apps/$pkgname.png
|
|
||||||
done < dist/icons/size-list
|
|
||||||
}
|
|
||||||
|
|
||||||
sha512sums="
|
|
||||||
a8ac5180df3b204fb1947ecaa4786c9c5fdd53ffe705f4dfe97a0b051fa371fd9102c41a898e8783cf25f732674da2d987ef315f2facc7b18b20ef214ea0f81d element-desktop-1.11.100.tar.gz
|
|
||||||
e3e50fd867f9b7388eb22778ccb97d6504a480ab4e2aa9eba10fd0f4d0324a1525c2afe6c80181567d8e554f03086a9e0994a6221cfcb0ca29700754c8f31cac element-web-1.11.100.tar.gz
|
|
||||||
4747893ed3e43d3074e9afe1cdd668a6be0de073d439205fe8c38c5e0f4091cc76e3cd15d98818bea5139add29501d8d07e83c58e9da230a4ce5bb538d388f80 add-alpine-targets.patch
|
|
||||||
755b17f7b828eb6920c06a6950ad4e14c32c99d22e9c05fcef7a081b5d2034adb03db3958aa5209c99fb7201f4d888c2383fc9864c5e743dd33f8b5c4925acd7 use-system-headers.patch
|
|
||||||
92e69817fdc71f60c5c7dcbd3c7b13428cc18141cf5f27720326390f6817bec85fb1c60f8016b3a8fa275f601b16f646cda12b5e379a349368eef2f801b4de7a tasje-one-hak.patch
|
|
||||||
a1399662bdbe5e7256d31f7bdc05070e7009d70113699856b025a1d5ab1d9b8bf1020072a08255d4eddab0874044131dec296f98a91ba5c12ca61948b1d18dbe tasje-no-fuses.patch
|
|
||||||
ec635fde026f7fce8e8cc57960b5b9dcec4418416d4867ed47711422d48f068bb58a3c9ceb7715efc9c177beca3788da6b0babc9b689ea8c0724a0395f2b85f8 no-source-maps.patch.web
|
|
||||||
aaf46476bac403aa5204aa265fcf0654fad4c149fd74d0ec4273c051a5549943384cae3cdd62c5b78fdedfed55c11ecceb898b886e44165cbe7e30953a095cf9 use-system-fonts.patch.web
|
|
||||||
afc588311dc3b566a754e3e7fe6b37b99a06d47b8bbce0ed9acca8ef308fdab0bd1d41b406199e5cbdd86bdce695ff847cd8668857a235cbdc292ad8b899c063 element-desktop
|
|
||||||
"
|
|
|
@ -1,52 +0,0 @@
|
||||||
--- a/scripts/hak/target.ts
|
|
||||||
+++ b/scripts/hak/target.ts
|
|
||||||
@@ -29,8 +29,10 @@
|
|
||||||
| "i686-unknown-linux-gnu"
|
|
||||||
| "x86_64-unknown-linux-musl"
|
|
||||||
| "x86_64-unknown-linux-gnu"
|
|
||||||
+ | "x86_64-alpine-linux-musl"
|
|
||||||
| "aarch64-unknown-linux-musl"
|
|
||||||
| "aarch64-unknown-linux-gnu"
|
|
||||||
+ | "aarch64-alpine-linux-musl"
|
|
||||||
| "powerpc64le-unknown-linux-musl"
|
|
||||||
| "powerpc64le-unknown-linux-gnu";
|
|
||||||
|
|
||||||
@@ -112,6 +114,13 @@
|
|
||||||
libC: MUSL,
|
|
||||||
};
|
|
||||||
|
|
||||||
+const x8664AlpineLinuxMusl: LinuxTarget = {
|
|
||||||
+ id: "x86_64-alpine-linux-musl",
|
|
||||||
+ platform: "linux",
|
|
||||||
+ arch: "x64",
|
|
||||||
+ libC: MUSL,
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
const i686UnknownLinuxGnu: LinuxTarget = {
|
|
||||||
id: "i686-unknown-linux-gnu",
|
|
||||||
platform: "linux",
|
|
||||||
@@ -140,6 +149,13 @@
|
|
||||||
libC: MUSL,
|
|
||||||
};
|
|
||||||
|
|
||||||
+const aarch64AlpineLinuxMusl: LinuxTarget = {
|
|
||||||
+ id: "aarch64-alpine-linux-musl",
|
|
||||||
+ platform: "linux",
|
|
||||||
+ arch: "arm64",
|
|
||||||
+ libC: MUSL,
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
const powerpc64leUnknownLinuxGnu: LinuxTarget = {
|
|
||||||
id: "powerpc64le-unknown-linux-gnu",
|
|
||||||
platform: "linux",
|
|
||||||
@@ -167,8 +183,10 @@
|
|
||||||
"i686-unknown-linux-gnu": i686UnknownLinuxGnu,
|
|
||||||
"x86_64-unknown-linux-musl": x8664UnknownLinuxMusl,
|
|
||||||
"x86_64-unknown-linux-gnu": x8664UnknownLinuxGnu,
|
|
||||||
+ "x86_64-alpine-linux-musl": x8664AlpineLinuxMusl,
|
|
||||||
"aarch64-unknown-linux-musl": aarch64UnknownLinuxMusl,
|
|
||||||
"aarch64-unknown-linux-gnu": aarch64UnknownLinuxGnu,
|
|
||||||
+ "aarch64-alpine-linux-musl": aarch64AlpineLinuxMusl,
|
|
||||||
"powerpc64le-unknown-linux-musl": powerpc64leUnknownLinuxMusl,
|
|
||||||
"powerpc64le-unknown-linux-gnu": powerpc64leUnknownLinuxGnu,
|
|
||||||
};
|
|
|
@ -1,3 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
exec electron /usr/lib/element-desktop/app.asar "$@"
|
|
|
@ -1,18 +0,0 @@
|
||||||
--- ./webpack.config.js.orig
|
|
||||||
+++ ./webpack.config.js
|
|
||||||
@@ -102,15 +102,6 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
const development = {};
|
|
||||||
- if (devMode) {
|
|
||||||
- // Embedded source maps for dev builds, can't use eval-source-map due to CSP
|
|
||||||
- development["devtool"] = "inline-source-map";
|
|
||||||
- } else {
|
|
||||||
- // High quality source maps in separate .map files which include the source. This doesn't bulk up the .js
|
|
||||||
- // payload file size, which is nice for performance but also necessary to get the bundle to a small enough
|
|
||||||
- // size that sentry will accept the upload.
|
|
||||||
- development["devtool"] = "source-map";
|
|
||||||
- }
|
|
||||||
|
|
||||||
// Resolve the directories for the js-sdk for later use. We resolve these early, so we
|
|
||||||
// don't have to call them over and over. We also resolve to the package.json instead of the src
|
|
|
@ -1,52 +0,0 @@
|
||||||
we can't do fuses because we ship one binary in the electron package.
|
|
||||||
and we can't import them here, since they are in devDependencies, which are uninstalled at this stage.
|
|
||||||
|
|
||||||
--- ./electron-builder.ts.orig
|
|
||||||
+++ ./electron-builder.ts
|
|
||||||
@@ -2,8 +2,7 @@
|
|
||||||
import * as fs from "node:fs";
|
|
||||||
import * as path from "node:path";
|
|
||||||
import * as plist from "plist";
|
|
||||||
-import { AfterPackContext, Arch, Configuration as BaseConfiguration, Platform } from "electron-builder";
|
|
||||||
-import { computeData } from "app-builder-lib/out/asar/integrity";
|
|
||||||
+import { Configuration as BaseConfiguration } from "electron-builder";
|
|
||||||
import { readFile, writeFile } from "node:fs/promises";
|
|
||||||
|
|
||||||
/**
|
|
||||||
@@ -46,26 +45,6 @@
|
|
||||||
} & BaseConfiguration["deb"];
|
|
||||||
}
|
|
||||||
|
|
||||||
-async function injectAsarIntegrity(context: AfterPackContext) {
|
|
||||||
- const packager = context.packager;
|
|
||||||
-
|
|
||||||
- // We only need to re-generate asar on universal Mac builds, due to https://github.com/electron/universal/issues/116
|
|
||||||
- if (packager.platform !== Platform.MAC || context.arch !== Arch.universal) return;
|
|
||||||
-
|
|
||||||
- const resourcesPath = packager.getResourcesDir(context.appOutDir);
|
|
||||||
- const asarIntegrity = await computeData({
|
|
||||||
- resourcesPath,
|
|
||||||
- resourcesRelativePath: "Resources",
|
|
||||||
- resourcesDestinationPath: resourcesPath,
|
|
||||||
- extraResourceMatchers: [],
|
|
||||||
- });
|
|
||||||
-
|
|
||||||
- const plistPath = path.join(resourcesPath, "..", "Info.plist");
|
|
||||||
- const data = plist.parse(await readFile(plistPath, "utf8")) as unknown as Writable<plist.PlistObject>;
|
|
||||||
- data["ElectronAsarIntegrity"] = asarIntegrity as unknown as Writable<plist.PlistValue>;
|
|
||||||
- await writeFile(plistPath, plist.build(data));
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
/**
|
|
||||||
* @type {import('electron-builder').Configuration}
|
|
||||||
* @see https://www.electron.build/configuration/configuration
|
|
||||||
@@ -89,9 +68,6 @@
|
|
||||||
|
|
||||||
loadBrowserProcessSpecificV8Snapshot: false,
|
|
||||||
enableEmbeddedAsarIntegrityValidation: true,
|
|
||||||
- },
|
|
||||||
- afterPack: async (context: AfterPackContext) => {
|
|
||||||
- await injectAsarIntegrity(context);
|
|
||||||
},
|
|
||||||
files: [
|
|
||||||
"package.json",
|
|
|
@ -1,20 +0,0 @@
|
||||||
directories in .hak/hakModules are already symlinked inside node_modules,
|
|
||||||
and as such are already being copied by default. this makes tasje fail with:
|
|
||||||
```
|
|
||||||
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value:
|
|
||||||
FileAlreadyWritten("/node_modules/keytar/package.json")', src/main.rs:200:18
|
|
||||||
```
|
|
||||||
|
|
||||||
--- ./electron-builder.ts.orig
|
|
||||||
+++ ./electron-builder.ts
|
|
||||||
@@ -74,10 +74,6 @@
|
|
||||||
},
|
|
||||||
files: [
|
|
||||||
"package.json",
|
|
||||||
- {
|
|
||||||
- from: ".hak/hakModules",
|
|
||||||
- to: "node_modules",
|
|
||||||
- },
|
|
||||||
"lib/**",
|
|
||||||
],
|
|
||||||
extraResources: [
|
|
|
@ -1,79 +0,0 @@
|
||||||
--- a/src/vector/jitsi/index.pcss
|
|
||||||
+++ b/src/vector/jitsi/index.pcss
|
|
||||||
@@ -14,7 +14,7 @@
|
|
||||||
font-family: "Nunito";
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: 400;
|
|
||||||
- src: url("$(res)/fonts/Nunito/Nunito-Regular.ttf") format("truetype");
|
|
||||||
+ src: local("Nunito Regular");
|
|
||||||
}
|
|
||||||
|
|
||||||
$dark-fg: #edf3ff;
|
|
||||||
--- a/res/themes/light/css/_fonts.pcss
|
|
||||||
+++ b/res/themes/light/css/_fonts.pcss
|
|
||||||
@@ -5,16 +5,16 @@
|
|
||||||
@font-face {
|
|
||||||
font-family: "Twemoji";
|
|
||||||
font-weight: 400;
|
|
||||||
- src: url("$(res)/fonts/Twemoji_Mozilla/TwemojiMozilla-colr.woff2") format("woff2");
|
|
||||||
+ src: local("Twemoji");
|
|
||||||
}
|
|
||||||
/* For at least Chrome on Windows 10, we have to explictly add extra weights for the emoji to appear in bold messages, etc. */
|
|
||||||
@font-face {
|
|
||||||
font-family: "Twemoji";
|
|
||||||
font-weight: 600;
|
|
||||||
- src: url("$(res)/fonts/Twemoji_Mozilla/TwemojiMozilla-colr.woff2") format("woff2");
|
|
||||||
+ src: local("Twemoji");
|
|
||||||
}
|
|
||||||
@font-face {
|
|
||||||
font-family: "Twemoji";
|
|
||||||
font-weight: 700;
|
|
||||||
- src: url("$(res)/fonts/Twemoji_Mozilla/TwemojiMozilla-colr.woff2") format("woff2");
|
|
||||||
+ src: local("Twemoji");
|
|
||||||
}
|
|
||||||
--- a/res/themes/legacy-light/css/_fonts.pcss
|
|
||||||
+++ b/res/themes/legacy-light/css/_fonts.pcss
|
|
||||||
@@ -23,17 +23,17 @@
|
|
||||||
font-family: "Nunito";
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: 400;
|
|
||||||
- src: url("$(res)/fonts/Nunito/Nunito-Regular.ttf") format("truetype");
|
|
||||||
+ src: local("Nunito Regular");
|
|
||||||
}
|
|
||||||
@font-face {
|
|
||||||
font-family: "Nunito";
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: 600;
|
|
||||||
- src: url("$(res)/fonts/Nunito/Nunito-SemiBold.ttf") format("truetype");
|
|
||||||
+ src: local("Nunito SemiBold");
|
|
||||||
}
|
|
||||||
@font-face {
|
|
||||||
font-family: "Nunito";
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: 700;
|
|
||||||
- src: url("$(res)/fonts/Nunito/Nunito-Bold.ttf") format("truetype");
|
|
||||||
+ src: local("Nunito Bold");
|
|
||||||
}
|
|
||||||
--- ./src/theme.ts.orig
|
|
||||||
+++ ./src/theme.ts
|
|
||||||
@@ -7,20 +7,6 @@
|
|
||||||
Please see LICENSE files in the repository root for full details.
|
|
||||||
*/
|
|
||||||
|
|
||||||
-import "@fontsource/inter/400.css";
|
|
||||||
-import "@fontsource/inter/400-italic.css";
|
|
||||||
-import "@fontsource/inter/500.css";
|
|
||||||
-import "@fontsource/inter/500-italic.css";
|
|
||||||
-import "@fontsource/inter/600.css";
|
|
||||||
-import "@fontsource/inter/600-italic.css";
|
|
||||||
-import "@fontsource/inter/700.css";
|
|
||||||
-import "@fontsource/inter/700-italic.css";
|
|
||||||
-
|
|
||||||
-import "@fontsource/inconsolata/latin-ext-400.css";
|
|
||||||
-import "@fontsource/inconsolata/latin-400.css";
|
|
||||||
-import "@fontsource/inconsolata/latin-ext-700.css";
|
|
||||||
-import "@fontsource/inconsolata/latin-700.css";
|
|
||||||
-
|
|
||||||
import { logger } from "matrix-js-sdk/src/logger";
|
|
||||||
|
|
||||||
import { _t } from "./languageHandler";
|
|
|
@ -1,15 +0,0 @@
|
||||||
--- a/scripts/hak/hakEnv.ts
|
|
||||||
+++ b/scripts/hak/hakEnv.ts
|
|
||||||
@@ -101,11 +101,10 @@
|
|
||||||
...process.env,
|
|
||||||
npm_config_arch: this.target.arch,
|
|
||||||
npm_config_target_arch: this.target.arch,
|
|
||||||
- npm_config_disturl: "https://electronjs.org/headers",
|
|
||||||
+ npm_config_nodedir: "/usr/include/electron/node_headers",
|
|
||||||
npm_config_runtime: this.runtime,
|
|
||||||
npm_config_target: this.runtimeVersion,
|
|
||||||
npm_config_build_from_source: "true",
|
|
||||||
- npm_config_devdir: path.join(os.homedir(), ".electron-gyp"),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
27
backports/fdm-materials/APKBUILD
Normal file
27
backports/fdm-materials/APKBUILD
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
# Contributor: Aiden Grossman <agrossman154@yahoo.com>
|
||||||
|
# Maintainer: Aiden Grossman <agrossman154@yahoo.com>
|
||||||
|
pkgname=fdm-materials
|
||||||
|
pkgver=5.2.2
|
||||||
|
pkgrel=0
|
||||||
|
pkgdesc="FDM Material Database"
|
||||||
|
url="https://github.com/Ultimaker/fdm_materials"
|
||||||
|
arch="noarch"
|
||||||
|
license="CC0-1.0"
|
||||||
|
makedepends="cmake samurai"
|
||||||
|
options="!check" # no checks provided
|
||||||
|
source="$pkgname-$pkgver.tar.gz::https://github.com/Ultimaker/fdm_materials/archive/refs/tags/$pkgver.tar.gz"
|
||||||
|
builddir="$srcdir/fdm_materials-$pkgver"
|
||||||
|
|
||||||
|
build() {
|
||||||
|
cmake -B build -G Ninja \
|
||||||
|
-DCMAKE_INSTALL_PREFIX=/usr
|
||||||
|
cmake --build build
|
||||||
|
}
|
||||||
|
|
||||||
|
package() {
|
||||||
|
DESTDIR="$pkgdir" cmake --install build
|
||||||
|
}
|
||||||
|
|
||||||
|
sha512sums="
|
||||||
|
73eefec8b7b88af73afc578ffba583480bda30309945b1720d7a1a075bd7ab3279599d53fe83f4c96695f294a5a3e11297abc334ca6cc9db163d4eb0fbdaf0f9 fdm-materials-5.2.2.tar.gz
|
||||||
|
"
|
96
backports/freecad/APKBUILD
Normal file
96
backports/freecad/APKBUILD
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
# Contributor: Aiden Grossman <agrossman154@yahoo.com>
|
||||||
|
# Maintainer: Aiden Grossman <agrossman154@yahoo.com>
|
||||||
|
pkgname=freecad
|
||||||
|
pkgver=0.21.0
|
||||||
|
pkgrel=0
|
||||||
|
pkgdesc="Free and open source 3D parametric modeler"
|
||||||
|
url="https://freecadweb.org/"
|
||||||
|
license="LGPL-2.0-or-later"
|
||||||
|
arch="x86_64" # dependency OpenCascade is only x86_64
|
||||||
|
depends="
|
||||||
|
graphviz
|
||||||
|
hdf5
|
||||||
|
opencascade
|
||||||
|
py3-matplotlib
|
||||||
|
py3-numpy
|
||||||
|
py3-pivy
|
||||||
|
py3-ply
|
||||||
|
py3-pyside2
|
||||||
|
py3-six
|
||||||
|
py3-yaml
|
||||||
|
python3
|
||||||
|
"
|
||||||
|
makedepends="
|
||||||
|
boost-dev
|
||||||
|
cmake
|
||||||
|
coin-dev
|
||||||
|
doxygen
|
||||||
|
eigen-dev
|
||||||
|
freeimage-dev
|
||||||
|
glu-dev
|
||||||
|
hdf5-dev
|
||||||
|
libmedc-dev
|
||||||
|
libshiboken2-dev
|
||||||
|
onetbb-dev
|
||||||
|
opencascade-dev
|
||||||
|
py3-pyside2-dev
|
||||||
|
python3-dev
|
||||||
|
shiboken2
|
||||||
|
qt5-qtsvg-dev
|
||||||
|
qt5-qtwebengine-dev
|
||||||
|
qt5-qtxmlpatterns-dev
|
||||||
|
samurai
|
||||||
|
swig
|
||||||
|
vtk-dev
|
||||||
|
xerces-c-dev
|
||||||
|
"
|
||||||
|
options="!check" # Failing test units upstream as well
|
||||||
|
checkdepends="xvfb-run mesa mesa-dri-gallium font-opensans"
|
||||||
|
source="https://github.com/FreeCAD/FreeCAD/archive/$pkgver/freecad-$pkgver.tar.gz
|
||||||
|
$pkgname-cstdint.patch::https://github.com/FreeCAD/FreeCAD/commit/f8f02f089537497a1bf46bc1057f01659b6636c1.patch
|
||||||
|
no-execinfo.patch
|
||||||
|
"
|
||||||
|
builddir="$srcdir/FreeCAD-$pkgver"
|
||||||
|
|
||||||
|
build() {
|
||||||
|
cmake -B build -G Ninja \
|
||||||
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
|
-DCMAKE_C_FLAGS="$CFLAGS -fPIC -w" \
|
||||||
|
-DCMAKE_CXX_FLAGS="$CXXFLAGS -fPIC -w" \
|
||||||
|
-DCMAKE_INSTALL_PREFIX=/usr/lib/freecad \
|
||||||
|
-DCMAKE_INSTALL_DATADIR=/usr/share/freecad \
|
||||||
|
-DCMAKE_INSTALL_DATAROOTDIR=/usr/share \
|
||||||
|
-DCMAKE_INSTALL_DOCDIR=/usr/share/freecad/doc \
|
||||||
|
-DBUILD_ENABLE_CXX_STD=C++17 \
|
||||||
|
-DBUILD_QT5=ON \
|
||||||
|
-DFREECAD_USE_EXTERNAL_PIVY=ON \
|
||||||
|
-DFREECAD_USE_OCC_VARIANT="Official Version" \
|
||||||
|
-DFREECAD_USE_QT_FILEDIALOG=ON \
|
||||||
|
-DPYTHON_EXECUTABLE=/usr/bin/python3
|
||||||
|
cmake --build build
|
||||||
|
}
|
||||||
|
|
||||||
|
check() {
|
||||||
|
DESTDIR=test_install cmake --install build
|
||||||
|
mkdir -p test_install/usr/bin
|
||||||
|
ln -s ../lib/freecad/bin/FreeCAD test_install/usr/bin/FreeCAD
|
||||||
|
ln -s ../lib/freecad/bin/FreeCADCmd test_install/usr/bin/FreeCADCmd
|
||||||
|
LD_LIBRARY_PATH="$PWD"/test_install/usr/lib/freecad/lib \
|
||||||
|
xvfb-run "$PWD"/test_install/usr/bin/FreeCAD -t 0
|
||||||
|
}
|
||||||
|
|
||||||
|
package() {
|
||||||
|
DESTDIR="$pkgdir" cmake --install build
|
||||||
|
|
||||||
|
# FreeCAD does not initialize correctly when binaries
|
||||||
|
# are located under /usr/bin; thus, symlinks are necessary.
|
||||||
|
install -d "$pkgdir"/usr/bin
|
||||||
|
ln -s /usr/lib/freecad/bin/FreeCAD "$pkgdir"/usr/bin/FreeCAD
|
||||||
|
ln -s /usr/lib/freecad/bin/FreeCADCmd "$pkgdir"/usr/bin/FreeCADCmd
|
||||||
|
}
|
||||||
|
|
||||||
|
sha512sums="
|
||||||
|
f5b4428217d9abd18aed1dcd8a5c77132b90173d07627ff9164919a87f04d242f9d616e9655751ec06ff57fc3e242090cc4d7e1d7045fdae9bc2e281e7855281 freecad-0.21.0.tar.gz
|
||||||
|
27dffdbb124096e7fcbec3589cdcfc587ea09bf039c1c1108edb68a9a4fd1278f66a39642636f98b8759a44da92485fd748f8b3d615b0625bc37fc717130e237 freecad-cstdint.patch
|
||||||
|
73aaba7015dce7048eb7d2456131b5b5ba4673cc980503331987be54d99daed5f61db015ca33d7d2ef0f02bd3192da8ce122c103c3b93f9959927deb4f0b933e no-execinfo.patch
|
||||||
|
"
|
46
backports/freecad/no-execinfo.patch
Normal file
46
backports/freecad/no-execinfo.patch
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
diff --git a/src/3rdParty/salomesmesh/src/DriverSTL/Basics_Utils.cpp b/src/3rdParty/salomesmesh/src/DriverSTL/Basics_Utils.cpp
|
||||||
|
index 23c5083..54c7ecf 100644
|
||||||
|
--- a/src/3rdParty/salomesmesh/src/DriverSTL/Basics_Utils.cpp
|
||||||
|
+++ b/src/3rdParty/salomesmesh/src/DriverSTL/Basics_Utils.cpp
|
||||||
|
@@ -29,7 +29,6 @@
|
||||||
|
#ifndef WIN32
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
-#include <execinfo.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@@ -109,20 +108,7 @@ namespace Kernel_Utils
|
||||||
|
#ifndef WIN32
|
||||||
|
void print_traceback()
|
||||||
|
{
|
||||||
|
- void *array[50];
|
||||||
|
- size_t size;
|
||||||
|
- char **strings;
|
||||||
|
- size_t i;
|
||||||
|
-
|
||||||
|
- size = backtrace (array, 40);
|
||||||
|
- strings = backtrace_symbols (array, size);
|
||||||
|
-
|
||||||
|
- for (i = 0; i < size; i++)
|
||||||
|
- {
|
||||||
|
- std::cerr << strings[i] << std::endl;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- free (strings);
|
||||||
|
+ std::cerr << "there is no backtrace." << std::endl;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#if (_MSC_VER >= 1400) // Visual Studio 2005
|
||||||
|
diff --git a/src/App/Application.cpp b/src/App/Application.cpp
|
||||||
|
index 3081623..ba3525f 100644
|
||||||
|
--- a/src/App/Application.cpp
|
||||||
|
+++ b/src/App/Application.cpp
|
||||||
|
@@ -1732,7 +1732,6 @@ static void freecadNewHandler ()
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(FC_OS_LINUX)
|
||||||
|
-#include <execinfo.h>
|
||||||
|
#include <dlfcn.h>
|
||||||
|
#include <cxxabi.h>
|
||||||
|
|
33
backports/freecad/tests.patch
Normal file
33
backports/freecad/tests.patch
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
--- ./src/Mod/Mesh/App/MeshTestsApp.py.orig
|
||||||
|
+++ ./src/Mod/Mesh/App/MeshTestsApp.py
|
||||||
|
@@ -423,30 +423,6 @@
|
||||||
|
self.planarMesh = []
|
||||||
|
FreeCAD.newDocument("MeshTest")
|
||||||
|
|
||||||
|
- def testRayPick(self):
|
||||||
|
- if not FreeCAD.GuiUp:
|
||||||
|
- return
|
||||||
|
- self.planarMesh.append( [-16.097176,-29.891157,15.987688] )
|
||||||
|
- self.planarMesh.append( [-16.176304,-29.859991,15.947966] )
|
||||||
|
- self.planarMesh.append( [-16.071451,-29.900553,15.912505] )
|
||||||
|
- self.planarMesh.append( [-16.092241,-29.893408,16.020439] )
|
||||||
|
- self.planarMesh.append( [-16.007210,-29.926180,15.967641] )
|
||||||
|
- self.planarMesh.append( [-16.064457,-29.904951,16.090832] )
|
||||||
|
- planarMeshObject = Mesh.Mesh(self.planarMesh)
|
||||||
|
-
|
||||||
|
- from pivy import coin; import FreeCADGui
|
||||||
|
- Mesh.show(planarMeshObject)
|
||||||
|
- view=FreeCADGui.ActiveDocument.ActiveView.getViewer()
|
||||||
|
- rp=coin.SoRayPickAction(view.getSoRenderManager().getViewportRegion())
|
||||||
|
- rp.setRay(coin.SbVec3f(-16.05,16.0,16.0),coin.SbVec3f(0,-1,0))
|
||||||
|
- rp.apply(view.getSoRenderManager().getSceneGraph())
|
||||||
|
- pp=rp.getPickedPoint()
|
||||||
|
- self.assertTrue(pp != None)
|
||||||
|
- det=pp.getDetail()
|
||||||
|
- self.assertTrue(det.getTypeId() == coin.SoFaceDetail.getClassTypeId())
|
||||||
|
- det=coin.cast(det, det.getTypeId().getName().getString())
|
||||||
|
- self.assertTrue(det.getFaceIndex() == 1)
|
||||||
|
-
|
||||||
|
def testPrimitiveCount(self):
|
||||||
|
if not FreeCAD.GuiUp:
|
||||||
|
return
|
|
@ -1,8 +1,8 @@
|
||||||
# Maintainer: Antoine Martin (ayakael) <dev@ayakael.net>
|
# Maintainer: Antoine Martin (ayakael) <dev@ayakael.net>
|
||||||
# Contributor: Antoine Martin (ayakael) <dev@ayakael.net>
|
# Contributor: Antoine Martin (ayakael) <dev@ayakael.net>
|
||||||
pkgname=freetube
|
pkgname=freetube
|
||||||
pkgver=0.23.5
|
pkgver=0.19.1
|
||||||
pkgrel=1
|
pkgrel=0
|
||||||
pkgdesc="An open source desktop YouTube player built with privacy in mind."
|
pkgdesc="An open source desktop YouTube player built with privacy in mind."
|
||||||
arch="x86_64 aarch64" # blocked by electron
|
arch="x86_64 aarch64" # blocked by electron
|
||||||
license="AGPL-3.0-only"
|
license="AGPL-3.0-only"
|
||||||
|
@ -11,46 +11,42 @@ depends="
|
||||||
font-roboto
|
font-roboto
|
||||||
"
|
"
|
||||||
makedepends="
|
makedepends="
|
||||||
electron-tasje
|
npm
|
||||||
nodejs
|
|
||||||
yarn
|
yarn
|
||||||
"
|
"
|
||||||
url="https://freetubeapp.io"
|
url="https://freetubeapp.io"
|
||||||
source="
|
source="
|
||||||
$pkgname-$pkgver.tar.gz::https://github.com/FreeTubeApp/FreeTube/archive/v$pkgver-beta.tar.gz
|
$pkgname-$pkgver.tar.gz::https://github.com/FreeTubeApp/FreeTube/archive/v$pkgver-beta.tar.gz
|
||||||
freetube.sh
|
freetube.sh
|
||||||
tasje-dotdash.patch
|
freetube.desktop
|
||||||
|
electron27.patch
|
||||||
|
package-only-necessary.patch
|
||||||
|
disable-asar.patch
|
||||||
"
|
"
|
||||||
options="net !check" # No testsuite
|
options="net !check" # No testsuite
|
||||||
builddir="$srcdir"/FreeTube-$pkgver-beta
|
builddir="$srcdir"/FreeTube-$pkgver-beta
|
||||||
|
|
||||||
export npm_config_nodedir=/usr/include/electron/node_headers
|
|
||||||
export npm_config_build_from_source=true
|
|
||||||
|
|
||||||
prepare() {
|
|
||||||
default_prepare
|
|
||||||
|
|
||||||
yarn --cache-folder "$srcdir"/yarn-cache install --frozen-lockfile --ignore-scripts
|
|
||||||
}
|
|
||||||
|
|
||||||
build() {
|
build() {
|
||||||
yarn --cache-folder "$srcdir"/yarn-cache run pack
|
yarn --cache-folder "$srcdir"/yarn-cache install
|
||||||
|
yarn --cache-folder "$srcdir"/yarn-cache --frozen-lockfile build
|
||||||
tasje --config _scripts/ebuilder.config.js pack
|
|
||||||
}
|
}
|
||||||
|
|
||||||
package() {
|
package() {
|
||||||
# directory creation + program copy
|
# directory creation + program copy
|
||||||
install -Dm755 build/resources/app.asar -t "$pkgdir"/usr/lib/$pkgname/
|
install -dm755 "$pkgdir"/usr/lib
|
||||||
|
cp -r "$builddir"/build/linux-unpacked/resources/app "$pkgdir"/usr/lib/$pkgname
|
||||||
|
|
||||||
# link binaries + other items
|
# link binaries + other items
|
||||||
install -Dm755 "$srcdir"/freetube.sh "$pkgdir"/usr/bin/$pkgname
|
install -Dm755 "$srcdir"/freetube.sh "$pkgdir"/usr/bin/$pkgname
|
||||||
install -Dm644 "$builddir"/_icons/icon.svg "$pkgdir"/usr/share/icons/hicolor/scalable/$pkgname.svg
|
install -Dm644 "$builddir"/_icons/icon.svg "$pkgdir"/usr/share/icons/hicolor/scalable/$pkgname.svg
|
||||||
install -Dm644 build/freetube.desktop "$pkgdir"/usr/share/applications/$pkgname.desktop
|
install -Dm644 "$srcdir"/freetube.desktop "$pkgdir"/usr/share/applications/$pkgname.desktop
|
||||||
}
|
}
|
||||||
|
|
||||||
sha512sums="
|
sha512sums="
|
||||||
5811ac53788a12f94cbd4cec6f7075350c223865cb4cf4436f131b9d1197b89aa5da128d6c531d1e56a0302aa3d2523c7ba8d48edbf5f328be6fed3fbba02752 freetube-0.23.5.tar.gz
|
2b607754092af7239e7afcc441d86009dba1295bf6f836ab0f2fe9ceffb3045c7da1e4d175a25aa72179241ea62d4905185c6990641213e8e66573d4daa74bfe freetube-0.19.1.tar.gz
|
||||||
2ce2effc794bb663789cefe968b5899122127983dbfa1b240aa33a2be383720b18204e6d01b4a550df72956f02b6636b79c93a58f470a970b09b770f5b8f2fc4 freetube.sh
|
8508af3d983b305b9e3c8ffb478c723feb4f8301a69cd1ad588854ce13e9b51bab1b68599c2f7f8a6005e9aa8949d36d057a3660d70e4acf2f4d125e5f8ef136 freetube.sh
|
||||||
d27cb896b65a7e8d52ffe86e5f74eed72b6cf976b28e1a13012d34c7eceba5ff6f20298017738dfa93c0336ffa52b8ee4da7e06b02747062898db7e678819526 tasje-dotdash.patch
|
0b74e115852e71f665730a09e4d06a07fd3ae68fbc9bf8aaf280a32b70298910c692c99535cd2294df95394ad9b3b9f4a127bb6c9d50824946895dbb54649872 freetube.desktop
|
||||||
|
f12c19969981fe22c05d14007d6d9900e854757119ab16b5af8185d94850f3d96b0e22ef03bddc776e47088bc3de88d86bcd631e5e15fb74616f26b021b2a93f electron27.patch
|
||||||
|
0869c3de3b93b92b8964d3baffa3dc3cf584cd1185af29104cad7bd928c39d9bc30209ed6113053afe96ca624f72fd3cc44de241f96f1cb757f16908b037ad0f package-only-necessary.patch
|
||||||
|
67107797825cbb98cc3a46e288fe92e06e0cc91b1a44a10edcf68045d06c9679c587bd2706051ce0b109091295247b5e8ec572297cd0c72532afd529cf56449d disable-asar.patch
|
||||||
"
|
"
|
||||||
|
|
26
backports/freetube/disable-asar.patch
Normal file
26
backports/freetube/disable-asar.patch
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
From 913f1a251bee06fc8e8380b9c5e5ac3ceadcb876 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Antoine Martin <dev@ayakael.net>
|
||||||
|
Date: Fri, 12 Aug 2022 22:34:57 -0400
|
||||||
|
Subject: [PATCH 1/1] disable-asar
|
||||||
|
|
||||||
|
---
|
||||||
|
package.json | 3 +++
|
||||||
|
1 file changed, 3 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/package.json b/package.json
|
||||||
|
index 842bdda8..a82a1ec3 100644
|
||||||
|
--- a/package.json
|
||||||
|
+++ b/package.json
|
||||||
|
@@ -18,6 +18,9 @@
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/FreeTubeApp/FreeTube/issues"
|
||||||
|
},
|
||||||
|
+ "build": {
|
||||||
|
+ "asar" : false
|
||||||
|
+ },
|
||||||
|
"scripts": {
|
||||||
|
"build": "run-s rebuild:electron pack build-release",
|
||||||
|
"build:arm64": "run-s rebuild:electron pack build-release:arm64",
|
||||||
|
--
|
||||||
|
2.36.2
|
||||||
|
|
6303
backports/freetube/electron27.patch
Normal file
6303
backports/freetube/electron27.patch
Normal file
File diff suppressed because it is too large
Load diff
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue