diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh deleted file mode 100755 index ee9ed3c..0000000 --- a/.forgejo/bin/check_ver.sh +++ /dev/null @@ -1,197 +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 -# -# If a - is placed in front of package name, it'll be excluded from the update rule -# -# optional env variables -# ALL_PACKAGES: when true, ignore is package is owned by me -# skip_package: array of packages to skip, place a - in front of package name to not exclude it -# 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\) /' 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" == *all* || "$skip_package" == *$pkg* ]] && [[ "$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)" - - # some reason the commit now not in APKINDEX, using master instead - #commit=$(sed -n "/^P:$pkg$/,/^$/p" APKINDEX | awk -F ':' '{if($1=="c"){print $2}}') - #commit=${commit/-dirty/} - commit=master - - # 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 (even releases) rather than latest - arm-trusted-firmware) - if [[ "$fix_only" == *all* || "$fix_only" == *$pkg* ]] || [[ "$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) - 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.[] | select(test("^[0-9]+\\.[0-9]+\\.[0-9]+$")) | select(split(".") | .[1] | tonumber | . % 2 == 0)' | head -n1) - fi - ;; - # 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/-*} - ;; - dotnet*-sdk|dotnet*-stage0) - upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/141853" | jq -r ".stable_versions.[] | match(\"${downstream_version::-2}.*\").string" | head -n 1) - ;; - dotnet*-runtime) - upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/220385" | jq -r ".stable_versions.[] | match(\"${downstream_version%.*}.*\").string" | head -n 1) - ;; - # 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|-.*||';; - *) - - if [[ "$minor_only" == *all* || "$minor_only" == *$pkg* ]] && [[ "$minor_only" != *-$pkg* ]]; then - # continues when package version scheme is not semantic, but minor_only or fix_only is set - if ! is_semantic $downstream_version; then - echo "$pkg is not semantic, and minor_only is set" - continue - 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.[] | match(\"${downstream_version%.*.*}.*\").string" | head -n1) - elif [[ "$fix_only" == *all* || "$fix_only" == *$pkg* ]] && [[ "$fix_only" != *-$pkg* ]]; then - # continues when package version scheme is not semantic, but minor_only or fix_only is set - if ! is_semantic $downstream_version; then - echo "$pkg is not semantic, and fix_only is set" - continue - 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.[] | 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 diff --git a/.forgejo/bin/clear-repo.sh b/.forgejo/bin/clear-repo.sh deleted file mode 100755 index 486321b..0000000 --- a/.forgejo/bin/clear-repo.sh +++ /dev/null @@ -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 diff --git a/.forgejo/bin/create_issue.sh b/.forgejo/bin/create_issue.sh deleted file mode 100755 index 3164b14..0000000 --- a/.forgejo/bin/create_issue.sh +++ /dev/null @@ -1,190 +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 -L --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 -L --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 - - title="$repo/$name: upgrade to $upstream_version" - if [ "$release" != "edge" ]; then title="[$release] $title"; fi - - result=$(curl -L --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\": \"$title\"}" - ) - - 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 -L --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 -L --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 -L --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 -L --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 diff --git a/.forgejo/bin/deploy.sh b/.forgejo/bin/deploy.sh deleted file mode 100755 index 57afd32..0000000 --- a/.forgejo/bin/deploy.sh +++ /dev/null @@ -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 - diff --git a/.forgejo/bin/generate-cross.sh b/.forgejo/bin/generate-cross.sh deleted file mode 100755 index 878b25f..0000000 --- a/.forgejo/bin/generate-cross.sh +++ /dev/null @@ -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" -) diff --git a/.forgejo/workflows/build-aarch64.yaml b/.forgejo/workflows/build-aarch64.yaml deleted file mode 100644 index 78db319..0000000 --- a/.forgejo/workflows/build-aarch64.yaml +++ /dev/null @@ -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: actions/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: actions/download-artifact@v3 - - name: Package deployment - run: ${{ github.workspace }}/.forgejo/bin/deploy.sh diff --git a/.forgejo/workflows/build-armv7.yaml b/.forgejo/workflows/build-armv7.yaml deleted file mode 100644 index aaf4029..0000000 --- a/.forgejo/workflows/build-armv7.yaml +++ /dev/null @@ -1,54 +0,0 @@ -on: - pull_request: - types: [ assigned, opened, synchronize, reopened ] - -jobs: - build-armv7: - runs-on: armv7 - 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: actions/upload-artifact@v3 - with: - name: package - path: packages - - deploy-armv7: - needs: [build-armv7] - runs-on: armv7 - 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: actions/download-artifact@v3 - - name: Package deployment - run: ${{ github.workspace }}/.forgejo/bin/deploy.sh diff --git a/.forgejo/workflows/build-cross.yaml b/.forgejo/workflows/build-cross.yaml deleted file mode 100644 index f4737b6..0000000 --- a/.forgejo/workflows/build-cross.yaml +++ /dev/null @@ -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: actions/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: actions/download-artifact@v3 - - name: Package deployment - run: ${{ github.workspace }}/.forgejo/bin/deploy.sh diff --git a/.forgejo/workflows/build-x86_64.yaml b/.forgejo/workflows/build-x86_64.yaml deleted file mode 100644 index 84d6908..0000000 --- a/.forgejo/workflows/build-x86_64.yaml +++ /dev/null @@ -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: actions/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: actions/download-artifact@v3 - - name: Package deployment - run: ${{ github.workspace }}/.forgejo/bin/deploy.sh diff --git a/.forgejo/workflows/check-backports.yml b/.forgejo/workflows/check-backports.yml deleted file mode 100644 index 99bb71d..0000000 --- a/.forgejo/workflows/check-backports.yml +++ /dev/null @@ -1,28 +0,0 @@ -on: - workflow_dispatch: - - schedule: - - cron: '0 5 * * *' - -jobs: - check-backports: - name: Check backports repo - runs-on: aarch64 - container: - image: alpine:latest - env: - downstream: https://ayakael.net/api/packages/forge/alpine/v3.23/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 diff --git a/.forgejo/workflows/check-community.yml b/.forgejo/workflows/check-community.yml deleted file mode 100644 index ee6d624..0000000 --- a/.forgejo/workflows/check-community.yml +++ /dev/null @@ -1,116 +0,0 @@ -on: - workflow_dispatch: - - schedule: - - cron: '0 5 * * *' - -jobs: - check-community-edge: - name: Check community(edge) repo - runs-on: aarch64 - 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.23: - name: Check community(3.23) repo - runs-on: aarch64 - container: - image: alpine:latest - env: - downstream: https://dl-cdn.alpinelinux.org/alpine/v3.23/community - ISSUE_TOKEN: ${{ secrets.issue_token }} - LABEL_NUMBER: 13 - fix_only: all -git-annex - skip_package: dotnet9-stage0 dotnet8-stage0 py3-boto3 py3-botocore dotnet10-stage0 - 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: aarch64 - container: - image: alpine:latest - env: - downstream: https://dl-cdn.alpinelinux.org/alpine/v3.22/community - ISSUE_TOKEN: ${{ secrets.issue_token }} - LABEL_NUMBER: 13 - skip_package: 'all -dotnet8-runtime -dotnet9-runtime' - 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-community-3.21: - name: Check community(3.21) repo - runs-on: aarch64 - container: - image: alpine:latest - env: - downstream: https://dl-cdn.alpinelinux.org/alpine/v3.21/community - ISSUE_TOKEN: ${{ secrets.issue_token }} - LABEL_NUMBER: 13 - skip_package: 'all -dotnet8-runtime -dotnet9-runtime' - 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-community-3.20: - name: Check community(3.20) repo - runs-on: aarch64 - container: - image: alpine:latest - env: - downstream: https://dl-cdn.alpinelinux.org/alpine/v3.20/community - ISSUE_TOKEN: ${{ secrets.issue_token }} - LABEL_NUMBER: 13 - skip_package: 'all -dotnet8-runtime' - 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 - diff --git a/.forgejo/workflows/check-main.yml b/.forgejo/workflows/check-main.yml deleted file mode 100644 index 276feb5..0000000 --- a/.forgejo/workflows/check-main.yml +++ /dev/null @@ -1,112 +0,0 @@ -on: - workflow_dispatch: - - schedule: - - cron: '0 5 * * *' - -jobs: - check-main-edge: - name: Check main(edge) repo - runs-on: aarch64 - 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.23: - name: Check main(3.23) repo - runs-on: aarch64 - container: - image: alpine:latest - env: - downstream: https://dl-cdn.alpinelinux.org/alpine/v3.23/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.22: - name: Check main(3.22) repo - runs-on: aarch64 - 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: aarch64 - 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: aarch64 - 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 - diff --git a/.forgejo/workflows/check-pmos.yml b/.forgejo/workflows/check-pmos.yml deleted file mode 100644 index 750f608..0000000 --- a/.forgejo/workflows/check-pmos.yml +++ /dev/null @@ -1,50 +0,0 @@ -on: - workflow_dispatch: - - schedule: - - cron: '0 5 * * *' - -jobs: - check-pmos-edge: - name: Check pmos(edge) repo - runs-on: aarch64 - 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 - check-pmos-latest: - name: Check pmos(v25.12) repo - runs-on: aarch64 - container: - image: alpine:latest - env: - downstream: http://mirror.postmarketos.org/postmarketos/v25.12 - ISSUE_TOKEN: ${{ secrets.issue_token }} - LABEL_NUMBER: 14 - fix_only: all - 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 diff --git a/.forgejo/workflows/check-testing.yml b/.forgejo/workflows/check-testing.yml deleted file mode 100644 index 71ad18e..0000000 --- a/.forgejo/workflows/check-testing.yml +++ /dev/null @@ -1,28 +0,0 @@ -on: - workflow_dispatch: - - schedule: - - cron: '0 5 * * *' - -jobs: - check-testing: - name: Check testing repo - runs-on: aarch64 - 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 diff --git a/.forgejo/workflows/check-user.yml b/.forgejo/workflows/check-user.yml deleted file mode 100644 index db1f574..0000000 --- a/.forgejo/workflows/check-user.yml +++ /dev/null @@ -1,27 +0,0 @@ -on: - workflow_dispatch: - - schedule: - - cron: '0 5 * * *' - -jobs: - check-user: - name: Check user repo - runs-on: aarch64 - 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 diff --git a/.forgejo/workflows/clear-repo.yml b/.forgejo/workflows/clear-repo.yml deleted file mode 100644 index f60f5e7..0000000 --- a/.forgejo/workflows/clear-repo.yml +++ /dev/null @@ -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 diff --git a/.forgejo/workflows/lint.yaml b/.forgejo/workflows/lint.yaml deleted file mode 100644 index 743cefc..0000000 --- a/.forgejo/workflows/lint.yaml +++ /dev/null @@ -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 diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..dd8afae --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,109 @@ +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 + when: always + 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 + when: always + 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 diff --git a/.gitlab/bin/APKBUILD_SHIM b/.gitlab/bin/APKBUILD_SHIM new file mode 100755 index 0000000..76577ff --- /dev/null +++ b/.gitlab/bin/APKBUILD_SHIM @@ -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" diff --git a/.gitlab/bin/apkbuild-shellcheck b/.gitlab/bin/apkbuild-shellcheck new file mode 100755 index 0000000..3126684 --- /dev/null +++ b/.gitlab/bin/apkbuild-shellcheck @@ -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 diff --git a/.gitlab/bin/build-rootfs.sh b/.gitlab/bin/build-rootfs.sh new file mode 100755 index 0000000..44c4372 --- /dev/null +++ b/.gitlab/bin/build-rootfs.sh @@ -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 ]" + 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 'package' '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 diff --git a/.forgejo/bin/build.sh b/.gitlab/bin/build.sh similarity index 72% rename from .forgejo/bin/build.sh rename to .gitlab/bin/build.sh index 445929f..286f965 100755 --- a/.forgejo/bin/build.sh +++ b/.gitlab/bin/build.sh @@ -1,28 +1,27 @@ #!/bin/sh # shellcheck disable=SC3043 -. /usr/local/lib/functions.sh +. $CI_PROJECT_DIR/.gitlab/bin/functions.sh # shellcheck disable=SC3040 set -eu -o pipefail readonly APORTSDIR=$CI_PROJECT_DIR -readonly REPOS="backports user pmos" -readonly ALPINE_REPOS="main community testing" +readonly REPOS="cross backports user testing community" +readonly ALPINE_REPOS="main community" readonly ARCH=$(apk --print-arch) # gitlab variables readonly BASEBRANCH=$CI_MERGE_REQUEST_TARGET_BRANCH_NAME : "${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}" -: "${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 : "${CI_DEBUG_BUILD:=}" : "${CI_ALPINE_BUILD_OFFSET:=0}" : "${CI_ALPINE_BUILD_LIMIT:=9999}" +: "${CI_ALPINE_TARGET_ARCH:=$(uname -m)}" msg() { local color=${2:-green} @@ -72,7 +71,7 @@ report() { get_release() { case $BASEBRANCH in - v*) echo "$BASEBRANCH";; + v*) echo "${BASEBRANCH%-*}";; edge) echo edge;; *) die "Branch \"$BASEBRANCH\" not supported!" esac @@ -81,8 +80,9 @@ get_release() { build_aport() { local repo="$1" aport="$2" cd "$APORTSDIR/$repo/$aport" + export CHOST=$CI_ALPINE_TARGET_ARCH 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" else aport_ng="$aport_ng $repo/$aport" @@ -92,6 +92,12 @@ build_aport() { check_aport() { local repo="$1" aport="$2" 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 aport_na="$aport_na $repo/$aport" return 1 @@ -104,13 +110,16 @@ set_repositories_for() { release=$(get_release) for repo in $REPOS; do - [ "$repo" = "non-free" ] && continue - [ "$release" == "edge" ] && [ "$repo" == "backports" ] && continue repos="$repos $MIRROR/$release/$repo $REPODEST/$repo" [ "$repo" = "$target_repo" ] && break done - doas sh -c "printf '%s\n' $repos >> /etc/apk/repositories" - doas apk update || true + sudo sh -c "printf '%s\n' $repos >> /etc/apk/repositories" + 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() { @@ -130,31 +139,27 @@ setup_system() { [ "$release" != "edge" ] && [ "$repo" == "testing" ] && continue repos="$repos $ALPINE_MIRROR/$release/$repo" done - doas sh -c "printf '%s\n' $repos > /etc/apk/repositories" - doas apk -U upgrade -a || apk fix || die "Failed to up/downgrade system" - abuild-keygen -ain - doas sed -i -E 's/export JOBS=[0-9]+$/export JOBS=$(nproc)/' /etc/abuild.conf + repos="$repos $MIRROR/$release/cross" + sudo sh -c "printf '%s\n' $repos > /etc/apk/repositories" + sudo apk -U upgrade -a || sudo apk fix || die "Failed to up/downgrade system" + 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" ) mkdir -p "$REPODEST" 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() { printf ">>> Host system information (arch: %s, release: %s) <<<\n" "$ARCH" "$(get_release)" printf "- Number of Cores: %s\n" "$(nproc)" @@ -162,7 +167,6 @@ sysinfo() { printf "- Free space: %s\n" "$(df -hP / | awk '/\/$/ {print $4}')" } - copy_artifacts() { cd "$APORTSDIR" @@ -199,9 +203,9 @@ sysinfo || true setup_system || die "Failed to setup system" # 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" 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 for repo in $(changed_repos); do + mkdir -p "$APORTSDIR"/logs "$APORTSDIR"/packages "$APORTSDIR"/keys set_repositories_for "$repo" - [ "$repo" == "pmos" ] && setup_pmos built_aports=0 changed_aports_in_repo=$(changed_aports "$repo") changed_aports_in_repo_count=$(echo "$changed_aports_in_repo" | wc -l) @@ -263,7 +267,7 @@ for ok in $aport_ok; do done for na in $aport_na; do - msg "$na: disabled for $ARCH" yellow + msg "$na: disabled for $CI_ALPINE_TARGET_ARCH" yellow done for ng in $aport_ng; do @@ -277,4 +281,3 @@ if [ "$failed" = true ]; then elif [ -z "$aport_ok" ]; then msg "No packages found to be built." yellow fi - diff --git a/.gitlab/bin/changed-aports b/.gitlab/bin/changed-aports new file mode 100755 index 0000000..4541230 --- /dev/null +++ b/.gitlab/bin/changed-aports @@ -0,0 +1,20 @@ +#!/bin/sh + +if [ $# -lt 1 ]; then + echo "Usage: $0 " + 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 diff --git a/.gitlab/bin/functions.sh b/.gitlab/bin/functions.sh new file mode 100755 index 0000000..44de1fe --- /dev/null +++ b/.gitlab/bin/functions.sh @@ -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" +} diff --git a/.gitlab/bin/lint b/.gitlab/bin/lint new file mode 100755 index 0000000..c1edcfb --- /dev/null +++ b/.gitlab/bin/lint @@ -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 diff --git a/.gitlab/bin/push.sh b/.gitlab/bin/push.sh new file mode 100755 index 0000000..e93101a --- /dev/null +++ b/.gitlab/bin/push.sh @@ -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 diff --git a/.gitlab/patches/abuild-cross.patch b/.gitlab/patches/abuild-cross.patch new file mode 100644 index 0000000..50afd23 --- /dev/null +++ b/.gitlab/patches/abuild-cross.patch @@ -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 + } + diff --git a/README.md b/README.md index 255b3ee..ae24788 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,32 @@ -# ayaports -Upstream: https://ayakael.net/forge/ayaports +# user-aports +Upstream: https://lab.ilot.io/ayakael/user-aports ## Description 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 -built using CI. Once built, they are deployed to a Forgejo repository, making -them available to apk. +built using GitLab CI on my own GitLab instance. Once built, they are deployed +to a git-lfs repository, making them available to apk. Branches are matched to Alpine releases. + ## 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 `/etc/apk/repositories`. #### Backports ``` -https://ayakael.net/api/packages/forge/alpine/v3.21/backports +https://lab.ilot.io/ayakael/repo-apk/-/raw/edge/backports ``` -Aports from the official Alpine repositories backported from edge. This is only -available and kept up-to-date on latest stable release. +Aports from the official Alpine repositories backported from edge. #### User ``` -https://ayakael.net/api/packages/forge/alpine/edge/user +https://lab.ilot.io/ayakael/repo-apk/-/raw/edge/user ``` Aports that have yet to be (or may never be) upstreamed to the official @@ -34,11 +34,11 @@ aports. ## 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 cd /etc/apk/keys -curl -JO https://ayakael.net/api/packages/forge/alpine/key +wget https://lab.ilot.io/ayakael/repo-apk/-/raw/edge/antoine.martin@protonmail.com-5b3109ad.rsa.pub ``` 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 If you wish to contribute to this aports collection, or wish to report a bug, -you can do so on Codeberg here: -https://codeberg.org/ayakael/ayaports/issues +you can do so on Alpine's GitLab instance here: +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: https://gitlab.alpinelinux.org/alpine/aports diff --git a/backports/airsonic-advanced/APKBUILD b/backports/airsonic-advanced/APKBUILD new file mode 100644 index 0000000..ec5e7c1 --- /dev/null +++ b/backports/airsonic-advanced/APKBUILD @@ -0,0 +1,48 @@ +# Contributor: Kay Thomas +# Maintainer: Kay Thomas +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 +" diff --git a/backports/airsonic-advanced/airsonic-advanced.initd b/backports/airsonic-advanced/airsonic-advanced.initd new file mode 100644 index 0000000..c1ce9bd --- /dev/null +++ b/backports/airsonic-advanced/airsonic-advanced.initd @@ -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 +} diff --git a/backports/airsonic-advanced/airsonic-advanced.pre-install b/backports/airsonic-advanced/airsonic-advanced.pre-install new file mode 100644 index 0000000..373b896 --- /dev/null +++ b/backports/airsonic-advanced/airsonic-advanced.pre-install @@ -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 diff --git a/backports/airsonic-advanced/maven.patch b/backports/airsonic-advanced/maven.patch new file mode 100644 index 0000000..56594b6 --- /dev/null +++ b/backports/airsonic-advanced/maven.patch @@ -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 diff --git a/backports/calibre/0001-calibre-no-update.patch b/backports/calibre/0001-calibre-no-update.patch deleted file mode 100644 index 85b3e59..0000000 --- a/backports/calibre/0001-calibre-no-update.patch +++ /dev/null @@ -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): - diff --git a/backports/calibre/0002-calibre-use-make.patch b/backports/calibre/0002-calibre-use-make.patch deleted file mode 100644 index 1b49726..0000000 --- a/backports/calibre/0002-calibre-use-make.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/setup/build.py b/setup/build.py -index 956ad7504f..aa9d7ea028 100644 ---- a/setup/build.py -+++ b/setup/build.py -@@ -662,7 +662,7 @@ def build_headless(self): - f.seek(0), f.truncate() - f.write(raw) - bdir = os.path.join(bdir, 'build') -- cmd = [CMAKE] -+ cmd = [CMAKE, '-GUnix Makefiles'] - if is_macos_universal_build: - cmd += ['-DCMAKE_OSX_ARCHITECTURES=x86_64;arm64'] - if sw and os.path.exists(os.path.join(sw, 'qt')): diff --git a/backports/calibre/0003-calibre-disable-piper.patch b/backports/calibre/0003-calibre-disable-piper.patch deleted file mode 100644 index 855b62f..0000000 --- a/backports/calibre/0003-calibre-disable-piper.patch +++ /dev/null @@ -1,46 +0,0 @@ -piper uses a function in espeak-ng that is upstreamed but not in a -release. - -diff --git a/setup/extensions.json b/setup/extensions.json -index b39ce6d..c105031 100644 ---- a/setup/extensions.json -+++ b/setup/extensions.json -@@ -134,14 +134,6 @@ - "error": "!podofo_error", - "needs_c++": "17" - }, -- { -- "name": "piper", -- "sources": "calibre/utils/tts/piper.cpp", -- "needs_c++": "17", -- "libraries": "!piper_libs", -- "lib_dirs": "!piper_lib_dirs", -- "inc_dirs": "!piper_inc_dirs" -- }, - { - "name": "html_as_json", - "sources": "calibre/srv/html_as_json.cpp", -diff --git a/src/calibre/constants.py b/src/calibre/constants.py -index fa4b211459..7b27768953 100644 ---- a/src/calibre/constants.py -+++ b/src/calibre/constants.py -@@ -258,7 +258,6 @@ def __init__(self): - 'rcc_backend', - 'icu', - 'speedup', -- 'piper', - 'html_as_json', - 'fast_css_transform', - 'fast_html_entities', -diff --git a/src/calibre/utils/run_tests.py b/src/calibre/utils/run_tests.py -index ffd0f95c04..c80a35f83d 100644 ---- a/src/calibre/utils/run_tests.py -+++ b/src/calibre/utils/run_tests.py -@@ -192,6 +192,7 @@ def test_import_of_all_python_modules(self): - } - if 'SKIP_SPEECH_TESTS' in os.environ: - exclude_packages.add('calibre.gui2.tts') -+ exclude_modules.add('calibre.utils.tts.piper') - if not isbsd: - exclude_modules.add('calibre.devices.usbms.hal') - d = os.path.dirname diff --git a/backports/calibre/APKBUILD b/backports/calibre/APKBUILD deleted file mode 100644 index 47dc7d8..0000000 --- a/backports/calibre/APKBUILD +++ /dev/null @@ -1,123 +0,0 @@ -# Maintainer: Cowington Post -pkgname=calibre -pkgver=8.14.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 - ffmpeg-dev - hunspell-dev - hyphen-dev - libmtp-dev - libstemmer-dev - libusb-dev - podofo-dev - py3-pyqt-builder - py3-pyqt6-sip - py3-qt6 - py3-sip - python3-dev - qt6-qtbase-dev - uchardet-dev - xdg-utils - " -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 - 0002-$pkgname-use-make.patch - 0003-$pkgname-disable-piper.patch - " -# net: downloads iso-codes -# !check: no tests ran -options="net !check" - -export LANG="en_US.UTF-8" -export PATH="$PATH:/usr/lib/qt6/bin" - -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=" -edb32e47b083e10fbf53088e485737f3b61bb642ce6c4dd444e58a6618979c3b05b77ceffc4b8cb42e35eee7dcc2b94145abc22030ffd8b5de63e45b321fbf72 calibre-8.14.0.tar.xz -eb8e7ce40ff8b8daf6e7e55a5dff8ec4dff06c45744266bb48b3194e92ab1196bc91468203e3c2ca1e5144166a7d6be90e6cf0253513e761b56a4c85be4c2c76 0001-calibre-no-update.patch -bbb7253257073ae14840b3b4697943fe129d862b49cabd9388ea24cbd0259e68a1d359870334772164897f0c781db121de55fcdf5bccc841e36c021abe56f1ec 0002-calibre-use-make.patch -0efcf35944cd0f42d6f3572839647fc5c8336562db3f71655211d3de682e155b6d6fee4d281f9576201156e0bc828b6a579a8708a27791e4e4d604d456416954 0003-calibre-disable-piper.patch -" diff --git a/backports/caprine/caprine.sh b/backports/caprine/caprine.sh deleted file mode 100644 index bf0f8de..0000000 --- a/backports/caprine/caprine.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -/usr/bin/electron "/usr/lib/caprine" diff --git a/backports/coin/APKBUILD b/backports/coin/APKBUILD new file mode 100644 index 0000000..782df0b --- /dev/null +++ b/backports/coin/APKBUILD @@ -0,0 +1,36 @@ +# Contributor: Aiden Grossman +# Maintainer: Aiden Grossman +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 +" diff --git a/backports/coin/TestSuitePatch.patch b/backports/coin/TestSuitePatch.patch new file mode 100644 index 0000000..ce484e5 --- /dev/null +++ b/backports/coin/TestSuitePatch.patch @@ -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 diff --git a/backports/cura/APKBUILD b/backports/cura/APKBUILD new file mode 100644 index 0000000..0a49e8e --- /dev/null +++ b/backports/cura/APKBUILD @@ -0,0 +1,73 @@ +# Contributor: Anjandev Momi +# Maintainer: Anjandev Momi +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 +" diff --git a/backports/cura/AppDesktopData.patch b/backports/cura/AppDesktopData.patch new file mode 100644 index 0000000..9e2134f --- /dev/null +++ b/backports/cura/AppDesktopData.patch @@ -0,0 +1,58 @@ +--- /dev/null ++++ ./com.ultimaker.cura.appdata.xml +@@ -0,0 +1,33 @@ ++ ++ ++ ++ com.ultimaker.cura.desktop ++ CC0-1.0 ++ LGPL-3.0 and CC-BY-SA-4.0 ++ Cura ++ The world's most advanced 3d printer software ++ ++

++ 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. ++

++
    ++
  • Novices can start printing right away
  • ++
  • Experts are able to customize 300 settings to achieve the best results
  • ++
  • Optimized profiles for Ultimaker materials
  • ++
  • Supported by a global network of Ultimaker certified service partners
  • ++
  • Print multiple objects at once with different settings for each object
  • ++
  • Cura supports STL, 3MF and OBJ file formats
  • ++
  • Open source and completely free
  • ++
++
++ ++ ++ https://raw.githubusercontent.com/Ultimaker/Cura/master/screenshot.png ++ ++ ++ https://ultimaker.com/software/ultimaker-cura?utm_source=cura&utm_medium=software&utm_campaign=cura-update-linux ++ Cura ++
+--- /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 diff --git a/backports/cura/CuraVersion.patch b/backports/cura/CuraVersion.patch new file mode 100644 index 0000000..916225d --- /dev/null +++ b/backports/cura/CuraVersion.patch @@ -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@" diff --git a/backports/cura/cmake-helpers.patch b/backports/cura/cmake-helpers.patch new file mode 100644 index 0000000..6204aaa --- /dev/null +++ b/backports/cura/cmake-helpers.patch @@ -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() diff --git a/backports/cura/cmake.patch b/backports/cura/cmake.patch new file mode 100644 index 0000000..a74477f --- /dev/null +++ b/backports/cura/cmake.patch @@ -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() diff --git a/backports/dex/APKBUILD b/backports/dex/APKBUILD new file mode 100644 index 0000000..e777d8d --- /dev/null +++ b/backports/dex/APKBUILD @@ -0,0 +1,26 @@ +# Contributor: Anjandev Momi +# Maintainer: Anjandev Momi +pkgname=dex +pkgver=0.9.0 +pkgrel=1 +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 MANPREFIX=/usr/share/man DESTDIR="$pkgdir" +} + +sha512sums=" +d68f5482cb0948f27a724437ddfc6de9a0f502bfd0d5c60c76fb85dda3c30e4c432013e530f6a91138c9ac9ff36b3824cd5e382e9d29bb9fb2ec2b9de4133094 dex-0.9.0.tar.gz +" diff --git a/backports/electron-tasje/APKBUILD b/backports/electron-tasje/APKBUILD index ac8776a..71648c7 100644 --- a/backports/electron-tasje/APKBUILD +++ b/backports/electron-tasje/APKBUILD @@ -1,7 +1,7 @@ # Contributor: lauren n. liberda # Maintainer: lauren n. liberda pkgname=electron-tasje -pkgver=0.7.3 +pkgver=0.7.1 pkgrel=0 pkgdesc="Tiny replacement for electron-builder" url="https://codeberg.org/selfisekai/electron_tasje/" @@ -31,5 +31,5 @@ package() { } sha512sums=" -251b7eabe74acdb5c7394f9d4d735b736acf555352785a9896ddaeed37632b238e823e1bb639e1f5a44a50455957ec41e1a585a3b2a9919b5818bb40843bd877 electron_tasje-0.7.3.tar.gz +665ccbd6cb357c25d55daed4ad3b3ce008da258054951d9d069a5b12e72dd5812d534f906868e6b18e78949f058069a961c394c6f21ab3b3fab5393c330445e5 electron_tasje-0.7.1.tar.gz " diff --git a/backports/electron/0001-hotfix-ignore-a-new-warning-in-rust-1.89.patch b/backports/electron/0001-hotfix-ignore-a-new-warning-in-rust-1.89.patch deleted file mode 100644 index 2c38c7c..0000000 --- a/backports/electron/0001-hotfix-ignore-a-new-warning-in-rust-1.89.patch +++ /dev/null @@ -1,21 +0,0 @@ -From adbc495726382c023b755c35aea36c6e9cad1950 Mon Sep 17 00:00:00 2001 -From: LN Liberda -Date: Sat, 23 Aug 2025 03:11:09 +0200 -Subject: [PATCH] hotfix: ignore a new warning in rust 1.89 - ---- - third_party/rust/chromium_crates_io/vendor/qr_code-v2/src/lib.rs | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/third_party/rust/chromium_crates_io/vendor/qr_code-v2/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/qr_code-v2/src/lib.rs -index 1b729621c2f47..55d392c6da72f 100644 ---- a/third_party/rust/chromium_crates_io/vendor/qr_code-v2/src/lib.rs -+++ b/third_party/rust/chromium_crates_io/vendor/qr_code-v2/src/lib.rs -@@ -5,7 +5,6 @@ - //! - - #![deny(missing_docs)] --#![deny(warnings)] - #![allow( - clippy::must_use_candidate, // This is just annoying. - clippy::use_self, // Rust 1.33 doesn't support Self::EnumVariant, let's try again in 1.37. diff --git a/backports/electron/APKBUILD b/backports/electron/APKBUILD index c57c98e..afd4439 100644 --- a/backports/electron/APKBUILD +++ b/backports/electron/APKBUILD @@ -1,21 +1,17 @@ -# Contributor: lauren n. liberda -# Maintainer: Antoine Martin (ayakael) +# Maintainer: lauren n. liberda pkgname=electron -pkgver=39.2.7 -_gittag=v"${pkgver/_beta/-beta.}" +pkgver=27.1.2 +_semver="${pkgver/_beta/-beta.}" pkgrel=0 -_chromium=142.0.7444.235 -_copium_tag=142.0 -_depot_tools=495b23b39aaba2ca3b55dd27cadc523f1cb17ee6 +_chromium=118.0.5993.162 +_depot_tools=b5509953468edd0906f2dc297886939abbd2bed5 +_extra_patches=118.0.5993.11 pkgdesc="Electron cross-platform desktop toolkit" url="https://github.com/electron/electron" -# armv7: Segmentation fault on builder despite building in CI arch="aarch64 x86_64" # same as chromium license="MIT" depends="gtk+3.0 so:libudev.so.1 xdg-utils" -_llvmver=21 makedepends=" - ada-dev alsa-lib-dev aom-dev bash @@ -24,20 +20,17 @@ makedepends=" bzip2-dev c-ares-dev cairo-dev - clang$_llvmver-dev - clang$_llvmver-rtlib + clang16-dev clang-extra-tools - crc32c-dev + compiler-rt cups-dev curl-dev dav1d-dev dbus-glib-dev - double-conversion-dev eudev-dev ffmpeg-dev findutils flac-dev - flatbuffers-dev flex freetype-dev gperf @@ -45,8 +38,6 @@ makedepends=" gn gzip harfbuzz-dev - highway-dev - hdrhistogram-c-dev hunspell-dev http-parser-dev hwdata-dev @@ -59,12 +50,11 @@ makedepends=" libavif-dev libbsd-dev libcap-dev - libdrm-dev + libevent-dev libexif-dev libgcrypt-dev libjpeg-turbo-dev libnotify-dev - libsecret-dev libusb-dev libva-dev libwebp-dev @@ -76,136 +66,107 @@ makedepends=" libxscrnsaver-dev libxslt-dev linux-headers - lld$_llvmver - llhttp-dev - llvm$_llvmver + lld + llvm16 mesa-dev minizip-dev nghttp2-dev nodejs npm nss-dev - openh264-dev opus-dev pciutils-dev perl pipewire-dev pulseaudio-dev py3-httplib2 - py3-jinja2 py3-parsing - py3-setuptools py3-six python3 + qt5-qtbase-dev re2-dev rsync rust - rust-bindgen samurai - simdutf-dev snappy-dev speex-dev - spirv-tools-dev sqlite-dev woff2-dev xcb-proto - yarn-berry + yarn zlib-dev zstd-dev " subpackages="$pkgname-lang $pkgname-dev" # the lower patches are specific to electron, the top ones are from the equivalent chromium version -source=" - https://ayakael.net/api/packages/mirrors/generic/electron/$_gittag/electron-$_gittag-$_chromium.tar.zst - copium-$_copium_tag.tar.gz::https://codeberg.org/selfisekai/copium/archive/$_copium_tag.tar.gz - 0001-hotfix-ignore-a-new-warning-in-rust-1.89.patch - compiler.patch - disable-dns_config_service.patch - disable-failing-tests.patch - fc-cache-version.patch - fix-ffmpeg-codec-list.patch - fstatat-32bit.patch +source="https://s3.sakamoto.pl/lnl-aports-snapshots/electron-$_semver-$_chromium.tar.zst + https://gitlab.com/Matt.Jolly/chromium-patches/-/archive/$_extra_patches/chromium-patches-$_extra_patches.tar.gz + chromium-revert-drop-of-system-java.patch + chromium-use-alpine-target.patch + fix-missing-cstdint-include-musl.patch gdbinit.patch - generic-sensor-include.patch - headless-shell-no-license.patch + import-version.patch + libstdc++13.patch + mman.patch musl-sandbox.patch musl-tid-caching.patch - net-test-no-vpython.patch - net-test-pyws3-py3.12.patch + musl-v8-monotonic-pthread-cont_timedwait.patch no-execinfo.patch no-mallinfo.patch + no-mte.patch no-res-ninit-nclose.patch no-sandbox-settls.patch - partalloc-no-tagging-arm64.patch - pvalloc.patch temp-failure-retry.patch - electron_icon.patch - electron_python-jinja-3.10.patch - electron_webpack-hash.patch - electron_unbundle-node.patch - electron_system-zlib-headers.patch - electron_do-not-strip-binaries.patch - electron_shell-file-dialog-drop-glibc.patch - electron_use-system-yarn.patch + icon.patch + python-jinja-3.10.patch + vector-const.patch + webpack-hash.patch + chromium-icu-74.patch default.conf electron.desktop electron-launcher.sh " -_copium_patches=" - cr131-v8-non4k-pages.patch - cr133-ffmpeg-no-noh264parse.patch - cr133-is-musl-libcxx.patch - cr138-node-version-check.patch - cr140-musl-prctl.patch - cr142-autofill-incomplete-formfielddata.patch - " -# Avoid conflicting providers -sonameprefix="$pkgname:" # tests are todo for some base checks options="!check net suid" -builddir="$srcdir/electron-$_gittag-$_chromium" +builddir="$srcdir/electron-$_semver-$_chromium" -export CC="/usr/lib/llvm$_llvmver/bin/clang" -export CXX="/usr/lib/llvm$_llvmver/bin/clang++" +export PATH="$PATH:/usr/lib/qt5/bin" + +# clang uses much less memory (and this doesn't support gcc) +export CC=clang-16 +export CXX=clang++-16 # required to find the tools -export NM="/usr/lib/llvm$_llvmver/bin/llvm-nm" -export AR="/usr/lib/llvm$_llvmver/bin/llvm-ar" -export LD="/usr/lib/llvm$_llvmver/bin/clang++" +export AR=llvm16-ar +export NM=llvm16-nm +export LD=clang++-16 # less log spam, reproducible -export CFLAGS="${CFLAGS/-g/} -O2 -Wno-builtin-macro-redefined -Wno-deprecated-declarations -Wno-shift-count-overflow -Wno-ignored-attributes" -export CXXFLAGS="${CXXFLAGS/-g/} -O2 -Wno-builtin-macro-redefined -Wno-deprecated-declarations -Wno-invalid-constexpr" -# _LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_EXTENSIVE is set by project -export CXXFLAGS="${CXXFLAGS/-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_FAST/}" +export CFLAGS="${CFLAGS/-g/} -O2 -Wno-unknown-warning-option -Wno-builtin-macro-redefined -Wno-deprecated-declarations" +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__=" -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 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. -_distbucket="sakamoto/lnl-aports-snapshots/" snapshot() { deps # vpython3 execs system python3 with this set export VPYTHON_BYPASS="manually managed python not supported by chrome operations" export CHROMIUM_BUILDTOOLS_PATH="$srcdir/src/buildtools" - export DEPOT_TOOLS_UPDATE=0 mkdir -p "$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 ( @@ -221,77 +182,83 @@ snapshot() { echo "solutions = [ { \"name\": \"src/electron\", - \"url\": \"https://github.com/electron/electron.git@$_gittag\", + \"url\": \"file://$srcdir/electron@v$_semver\", \"deps_file\": \"DEPS\", \"managed\": False, \"custom_deps\": { - \"src\": \"https://chromium.googlesource.com/chromium/src.git@$_chromium\", + \"src\": None, }, \"custom_vars\": {}, }, ]" > .gclient python3 depot_tools/gclient.py sync \ - --no-history \ + --with_branch_heads \ + --with_tags \ --nohooks python3 src/build/landmines.py - python3 src/build/util/lastchange.py -m DAWN_COMMIT_HASH -s src/third_party/dawn \ - --revision src/gpu/webgpu/DAWN_VERSION --header src/gpu/webgpu/dawn_commit_hash.h + 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 python3 src/build/util/lastchange.py -m GPU_LISTS_VERSION \ --revision-id-only --header src/gpu/config/gpu_lists_version.h python3 src/build/util/lastchange.py -m SKIA_COMMIT_HASH \ -s src/third_party/skia --header src/skia/ext/skia_commit_hash.h - # rolled newer chromium with it included - sed -i '/reland_mojom_ts_generator_handle_empty_module_path_identically_to.patch/d' src/electron/patches/chromium/.patches + # why? + cp -r electron/patches/ffmpeg src/electron/patches/ - python3 src/electron/script/apply_all_patches.py \ - src/electron/patches/config.json + python3 electron/script/apply_all_patches.py \ + 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 - 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" done msg "generating tarball.. (this takes a while)" - tar -cf $pkgname-$_gittag-$_chromium.tar \ + tar -cf $pkgname-$_semver-$_chromium.tar \ --exclude="ChangeLog*" \ --exclude="testdata/*" \ --exclude="test_data/*" \ --exclude="android_rust_toolchain/*" \ - --exclude="third_party/instrumented_libs/binaries" \ --exclude-backups \ --exclude-caches-all \ --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 - mcli cp "$SRCDEST"/$pkgname-$_gittag-$_chromium.tar.zst "$_distbucket" + zstd --auto-threads=logical --ultra --long -22 -T"${ZSTD_LIMIT:-0}" -vv $pkgname-$_semver-$_chromium.tar } -export RUSTC_BOOTSTRAP=1 +_extra_patch() { + msg chromium-"$1".patch + patch -Np1 < "$srcdir"/chromium-patches-"$_extra_patches"/chromium-"$1".patch +} prepare() { + dos2unix third_party/vulkan_memory_allocator/include/vk_mem_alloc.h + default_prepare - for i in $_copium_patches; do - case "$i" in - *.patch) - msg "${i%::*}" - patch -p1 -i "$srcdir/copium/$i" || failed="$failed $i" - ;; - 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 + _extra_patch 118-SensorReadingField-include + _extra_patch 117-material-color-include + _extra_patch 118-system-freetype + _extra_patch 117-system-zstd + _extra_patch 118-compiler git init -q . @@ -309,9 +276,9 @@ prepare() { git config commit.gpgsign false git add LICENSE git commit -m "init" - git tag "$_gittag" + git tag "v$_semver" git pack-refs - yarn install --immutable --mode=skip-build + yarn install --frozen-lockfile --no-scripts ) ( @@ -319,47 +286,33 @@ prepare() { ./update_npm_deps ) - # generate dawn_commit_hash - # TODO: remove on next update as it'll be generated after - # https://ayakael.net/mirrors/electron/commit/7623f4a14ab44fa4f4343e47d9d681c9b4aa984c - python3 build/util/lastchange.py -m DAWN_COMMIT_HASH -s third_party/dawn \ - --revision gpu/webgpu/DAWN_VERSION --header gpu/webgpu/dawn_commit_hash.h - - # reusable system library settings - # flatbuffers - tensorflow has a few static_asserts for a specific patch version - # libavif - https://github.com/AOMediaCodec/libavif/commit/50a541469c98009016af8dcc9f83a1be79f3a7d9 # libaom - https://aomedia.googlesource.com/aom/+/706ee36dcc82%5E%21/ - # but watch this space: https://aomedia-review.googlesource.com/c/aom/+/188606 - # 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 + local use_system=" dav1d - double-conversion ffmpeg flac fontconfig freetype harfbuzz-ng - highway + icu + jsoncpp + libavif libdrm + libevent libjpeg - libsecret - libusb libwebp libxml libxslt - openh264 opus - simdutf + re2 + snappy + woff2 zlib 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" - _lib="${_lib/swiftshader-/swiftshader/third_party/}" find . -type f -path "*third_party/$_lib/*" \ \! -path "*third_party/$_lib/chromium/*" \ \! -path "*third_party/$_lib/google/*" \ @@ -368,38 +321,10 @@ prepare() { \! -path './third_party/pdfium/third_party/freetype/include/pstables.h' \ \! -path './third_party/harfbuzz-ng/utils/hb_scoped.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 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 touch chrome/test/data/webui/i18n_process_css_test.html # Use the file at run time instead of effectively compiling it in @@ -408,15 +333,9 @@ prepare() { msg "Running debundle script" python3 build/linux/unbundle/replace_gn_files.py --system-libraries \ - $chromium_use_system + $use_system 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 sed -i 's,^update_readme$,#update_readme,' \ third_party/libvpx/generate_gni.sh @@ -429,9 +348,8 @@ prepare() { sed -i -e 's/\/malloc/' -e 's/\/free/' \ third_party/blink/renderer/core/xml/*.cc \ third_party/blink/renderer/core/xml/parser/xml_document_parser.cc \ - third_party/libxml/chromium/*.cc - - echo "$CTARGET" >> build/rust/known-target-triples.txt + third_party/libxml/chromium/*.cc \ + third_party/maldoca/src/maldoca/ole/oss_utils.h _configure } @@ -440,77 +358,63 @@ _configure() { cd "$builddir" 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 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\") blink_enable_generated_code_formatting=false - cc_wrapper=\"$cc_wrapper\" chrome_pgo_phase=0 - clang_base_path=\"/usr\" 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_nocompile_tests=false - enable_rust=true - enable_stripping=false - enable_vr=false fatal_linker_warnings=false ffmpeg_branding=\"Chrome\" - host_toolchain=\"//build/toolchain/linux/unbundle:default\" - icu_use_data_file=false + icu_use_data_file=true is_cfi=false is_clang=true is_component_ffmpeg=true is_debug=false - is_musl=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 - node_version_check=false proprietary_codecs=true rtc_link_pipewire=true rtc_use_pipewire=true - rustc_version=\"yes\" - rust_bindgen_root=\"/usr\" - rust_sysroot_absolute=\"/usr\" - safe_browsing_use_unrar=false - symbol_level=$symbol_level - treat_warnings_as_errors=false - use_clang_modules=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_custom_libcxx=false use_dawn=false - use_system_ada=false + use_pulseaudio=true + use_sysroot=false use_system_cares=true - use_system_histogram=true + use_system_freetype=true + use_system_harfbuzz=true use_system_lcms2=true + use_system_libdrm=true use_system_libffi=true - use_system_llhttp=true + use_system_libjpeg=true use_system_nghttp2=true + use_vaapi=true " # shellcheck disable=2086,2090,2116 @@ -519,13 +423,13 @@ _configure() { } build() { - export ELECTRON_OUT_DIR="$builddir"/out/Release/ + export PATH="$PATH:/usr/lib/qt5/bin" ninja -C out/Release \ - copy_node_headers \ electron_dist_zip \ node_gypi_headers \ - node_version_header + node_version_header \ + tar_headers } package() { @@ -539,7 +443,8 @@ package() { install -Dm755 "$srcdir"/default.conf "$pkgdir"/etc/electron/default.conf 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 mkdir -p "$pkgdir"/usr/include/electron/node_headers/include/nan @@ -565,38 +470,30 @@ lang() { } sha512sums=" -6dc7161f6df396e2b7569b0a607e264b43a2d7215de65164dc2ca04c019df93ea0a67dec2490071c09c8a03f90605faaf3880f2d843f838bb5d841bba204c298 electron-v39.2.7-142.0.7444.235.tar.zst -30b298549804e7753b0b639b72417ba081e964676862b6c7d73ad73cdf806883f20e4a4b36e67a6c375eaf2dd97686cf21b90b062400d3b61fba86da4d239bfa copium-142.0.tar.gz -69b45005451ccd69c354b4c2910e92371cb801665f5e300dbecd36f8bc4ce68e77a431b5dac07c0937787debb4e93b7aadefa0a1e76c4ae334d2547ca3ca14ff 0001-hotfix-ignore-a-new-warning-in-rust-1.89.patch -dc254dd79e135aeac3e9c03eb055e3bc17980fc213f8c4d8d7921a575be7f9c26b91f110a6dcb01c0a824a7d9375c09f8a61c8858c20c11d79c03f873e2cb3f9 compiler.patch -1bee1448e409fedff635388ee6f1efa6d23c29ae3e6b6fd31452c56974adb40fcd0088c82d1e643d549154663e402942cbab9807dff5aff2d8997a09de6f5655 disable-dns_config_service.patch -0ef9168b8b1a4779bc4c8df718735e06d29e459dcfd00f8cbf9a4edaf9fade8089225219e46dead7de81de716bddc8d745dc2069db0ee7f7e5d2f64c5236e2ab disable-failing-tests.patch -0050857a9a9553c10fd502fe70606bce48269c9b48fa82ce9e111575637a0c03578e923c82fc639fcb574fc3337aeef50d8a0aea5e512ae4eab83b8c3d732cf6 fc-cache-version.patch -87f63d83139562e058f3f649eb1f62bf100dd92c2bb6ee393fdce0c8f7d7c188a7062394647aafe4e82c0a8fbbffeb613edc5c8dd9415dd9dda777827ea371c5 fix-ffmpeg-codec-list.patch -c63dee5044353eb306a39ca1526158c0f003ab310ecb03d1c368dc2a979454590c84b8d3c15484517d5e66bb8add9b231da9abbadf2e50850abd72ac1345c4ab fstatat-32bit.patch +07f653f24e7fe1ef96a0ff676fa3c987fd0826980b5e9611705cb7fc44f00182fa62e67e67c6df5a3b1b4c063d99a3266054a83aa67fb44b11ffffcd8e23c3eb electron-27.1.2-118.0.5993.162.tar.zst +194c3a7a0fa03a85df6fe52ece3d53d4d15b9d0cb440b56a2ccb1b5c0d3f6481b6f7287aa705c596ceea92d475677ddaf58926f3b31c03a3c20e80ad7e481ce7 chromium-patches-118.0.5993.11.tar.gz +29bb685e03356a77df5fd347cdf55194cc8b3265c421cc76e54d64edefc329dbcb052deb26b22e8f587ce68456876c071de1b7d258dd0fcc6ee66c875ec4a020 chromium-revert-drop-of-system-java.patch +fa291e941076146d0edd5b96c088240a44a6e0aca3dfc744929655607182d2dc47e6c35ecb419f7c623fcf7f26dc3c4dd924dbf5ed10c3b986283f5ef2f72573 chromium-use-alpine-target.patch +9200f78bad70e95c648a5e8392d50642190600f655c6baa366ff6467ebad52d3b3f305dad58f3610da67136f4b723557653b174ec5c25be8d8737ee04d9ee09f fix-missing-cstdint-include-musl.patch 33ee60863cc438ef57ffef92ba4cf67a856a5ffc16138bce241bcf87e47b15154aa86918e793c26f7ec4dc62a445257ad5673ed7001daf22c4043cf6cc57da7f gdbinit.patch -36a764fa73443b47d38050b52dbe6ad2fa8d67201ff4ccdbad13b52308ef165ca046aac6f9609fe35890a6485f0f3e672e78cc41e3e44f3cdc7f145e540524e8 generic-sensor-include.patch -a94cf7a0670abf5178abba33c619cc6d41d73f2e16c7a1fd5b152152f5077df103e049d166e3b8627797c38113821d2f2e6b64cd48d132c1e90ad32d63a349f5 headless-shell-no-license.patch -51f1959bd622af26a1c3a1f4b0ad9a5bfa461057aa4cf9960c568dddf8ac47d55989c277f5d5ab5db040a04c54925a531af7a1cc767559218b408eaa6bdd7577 musl-sandbox.patch +8de65109ece27ea63bd469f2220c56b8c752ba0a50fdf390082a2d5ae74b8e010199126175569f6d5084270dd4e0571e68aec32c0bca8211a6699925b3a09124 import-version.patch +49851d42ce8ccd533d01d1bb2477930802b0bcebab8dd52f2da292088378c6ed9b74146e7dad55edfe096281fc84b2c55abaf832744fd4553a97c38ed891df3a libstdc++13.patch +0e991842e23a4b9133898125eeb39e45e3f86f886eef5d2f0d9a72ee143a3e124b3b4f60be94edd57ce4185bcd69704edb51f76d08fdb6207f5559a08dd41ab0 mman.patch +50c274a420bb8a7f14fcb56e40920dac8f708792a4520789b4987facea459bef88113d5a2b60fa8c57bee6e92bff3617d6b73fa305c8c44614c638971cffd440 musl-sandbox.patch e7163ac5810ac85366cef2447412287c856e3d67c6b77f219a6e5a418b1965b98e449c409424ad0704a5bded9355dd0aec3dc4585918ce5a2ab36c079707afe2 musl-tid-caching.patch -3b7420d58d13dfc4baab5065e3017f666f51fed6de087af42a660a839d7b4444b50d1a93204322d213df36c6722eaf6b08d46d50dc374198a342da2675fafff5 net-test-no-vpython.patch -e487662b6606ea526ddd716c31e6b9ad3d61f1bee5356cd94b78a903efb3928338cbb48e3d5840b34c3b70a71e8361a228430bd50e707ad301228a7049d59e37 net-test-pyws3-py3.12.patch -a250cff50d282b02ce0f28880d0a2b4fb8e7df51bc072bfeeddc561c29a7c76453dbcbc7b17b82966a7b30a31409d2555720d1dcf963e1b3fb8a2a06a6abcf46 no-execinfo.patch -0b41aeb6b212f9c3f61aa0a8d3085c9e865a2e68f3270ceec2376aab67f337ac46eaea7da36d3fd7219e2a1cb731b7aa2d3fb619a374d2b7653976b9f4f384bb no-mallinfo.patch +92eb002718026611f5542362ad69b67f0a398ff71b3fca5c05d55cb5c6f9f29334e5e127bb4860cfaa3fba0f0d4c901e2b98808217e7dc02e254a64a5c9521aa musl-v8-monotonic-pthread-cont_timedwait.patch +8cc774e8d84e434960222c0497ad8193ae35c0732f98d3282d5fd4b4930f914809eec97832c199517ca89ca6b9d1d011db5ce533c40c68ce5fa464609d131a23 no-execinfo.patch +b5479874d125ee95a311295f227f8881a83023ec34fded7a6160b3ae32ea3ba0f2b833a9fb264c57f3d22746b6d8b00bdc8eb2ff86c43c412d6d3b55ae15b16b no-mallinfo.patch +8a52ff52201a5e20344f5497ee2ffef0520f7b2d934be92227e49c3f2c12a94c33650eefc88a0e451a6b81d44ce197db421aaec7388e6bb1cb525a43628779d3 no-mte.patch e4c4e5bc6f828f9c883dd418c0ba01887949c29c311f76206a1ec29f620b0c0ba0452949dc2778a9c46ea066405857536964a36436a68eecf7da7952736333cf no-res-ninit-nclose.patch 6dc4d8dc92e685dace62265a1ddb3aebc558aed54d20ff6d36b030be0c48d7e84662326c31363612492574d9a03c62653cdc21a60995b97dee1d75cae86a9f9b no-sandbox-settls.patch -b75908a45ee2f4f806eec8d86fca2f51fda3531b88de48ef4539c364a40d7e2897cdaf38b715682d712648e3f43aac983055e688385f85fa7b7204ffb6d617e1 partalloc-no-tagging-arm64.patch -03f829a2da633533ef3fd0f287f5ec602d936a97a98b53cd2415553c2537ae9d571f35397ca7c9fb3f4b0806c300e3b189569f8d979ca132e1a2a4dae7206396 pvalloc.patch e48693e6b7aeebf69a5acbf80d9a35defe4c23835121dfeb58b051ac7c527e758a41004f4d193274fe1b01c0bfb1dbc77b09cb6a404a3fdee507a2918afb0edb temp-failure-retry.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 -7031ddb61a858e95d83366185a53b5a2e4be9abe0aa4957543e0621cad57175ffef31bd87b8be25255184bb4cb30ec4fbced055407c6c8c7940c9e240b25d498 electron_do-not-strip-binaries.patch -0f8f36c21cc50c80e378691265845ff10fa53953d6cd5352fe71efcba489f956e50d374d8f634dadc3569c4901a81a1f308a3e69140c0f9136e0777022b9520f electron_shell-file-dialog-drop-glibc.patch -3fd20144ed171cf9706899a1481141c7fa3e98b17d600cdc5a3a68ba39059cebd9e5ccb5534af3e262f689df381bc3cb630ac24e46dd6f6c72eac4f4b6b14b35 electron_use-system-yarn.patch -e8ea87c547546011c4c8fc2de30e4f443b85cd4cfcff92808e2521d2f9ada03feefb8e1b0cf0f6b460919c146e56ef8d5ad4bb5e2461cc5247c30d92eb4d068e default.conf +905565c10f5e5600e7d4db965c892cc45009a258e9995da958974d838ace469e1db1019195307e8807860d5b55ba6bfeea478b1f39a9b99e82c619b2816a1a22 icon.patch +e05180199ee1d559e4e577cedd3e589844ecf40d98a86321bf1bea5607b02eeb5feb486deddae40e1005b644550331f6b8500177aa7e79bcb3750d3c1ceb76c3 python-jinja-3.10.patch +71571b15cf8bd6259b7fd22bea0e46b64890f3db776365de33fe539f26ce9ef99459e05c3dde9434c3657225bc67160abc915acd93033cb487c770c6a2a5975f vector-const.patch +2aa340854316f1284217c0ca17cbf44953684ad6c7da90815117df30928612eb9fb9ffb734b948dfc309cd25d1a67cd57f77aac2d052a3dd9aca07a3a58cbb30 webpack-hash.patch +4c540972fa12acd9f0aafb8dc7e9987c3d6e4f28ff679dde522ebcec2dc5ae1a62d9d255bed0a30b9c79ae3b90ab0f5b9ae1ef5b7bf338612e28d9ef70250ca3 chromium-icu-74.patch +07e9203b05402f81c0ded5871a845e37bdc4c09b7bb2839312396f298a9ce8196e2c24508675e3d6f695f1e2b0ff1c2c64f4e9dfff3ff5359a87cb7b9b972393 default.conf 191559fc7aa1ea0353c6fb0cc321ee1d5803a0e44848c8be941cfab96277b0de6a59962d373e2a2a1686c8f9be2bcf2d2f33706759a339a959e297d3f7fda463 electron.desktop -5f7ba5ad005f196facec1c0f26108356b64cafb1e5cfa462ff714a33b8a4c757ac00bfcb080da09eb5b65032f8eb245d9676a61ec554515d125ed63912708648 electron-launcher.sh +ff1844036c8ae0a0a57a16211a816bc0ad550ccf6ea1cf718e228b8c95b9c4f5c9772d1a1a23638c0e140703a7b52874371e27a0d9d54a7b9468e5c384759be5 electron-launcher.sh " diff --git a/backports/electron/README.md b/backports/electron/README.md deleted file mode 100644 index 2a12409..0000000 --- a/backports/electron/README.md +++ /dev/null @@ -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`. diff --git a/backports/electron/chromium-icu-74.patch b/backports/electron/chromium-icu-74.patch new file mode 100644 index 0000000..02a44b7 --- /dev/null +++ b/backports/electron/chromium-icu-74.patch @@ -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 diff --git a/backports/electron/chromium-revert-drop-of-system-java.patch b/backports/electron/chromium-revert-drop-of-system-java.patch new file mode 100644 index 0000000..24355bf --- /dev/null +++ b/backports/electron/chromium-revert-drop-of-system-java.patch @@ -0,0 +1,17 @@ +This was dropped for some reason in 6951c37cecd05979b232a39e5c10e6346a0f74ef +allows using /usr/bin/java instead of a downloaded one (that doesn't work on musl) +-- +--- a/third_party/closure_compiler/compiler.py 2021-05-20 04:17:53.000000000 +0200 ++++ b/third_party/closure_compiler/compiler.py 2021-05-20 04:17:53.000000000 +0200 +@@ -13,8 +13,9 @@ + + + _CURRENT_DIR = os.path.join(os.path.dirname(__file__)) +-_JAVA_PATH = os.path.join(_CURRENT_DIR, "..", "jdk", "current", "bin", "java") +-assert os.path.isfile(_JAVA_PATH), "java only allowed in android builds" ++_JAVA_BIN = "java" ++_JDK_PATH = os.path.join(_CURRENT_DIR, "..", "jdk", "current", "bin", "java") ++_JAVA_PATH = _JDK_PATH if os.path.isfile(_JDK_PATH) else _JAVA_BIN + + class Compiler(object): + """Runs the Closure compiler on given source files to typecheck them diff --git a/backports/electron/chromium-use-alpine-target.patch b/backports/electron/chromium-use-alpine-target.patch new file mode 100644 index 0000000..ae57735 --- /dev/null +++ b/backports/electron/chromium-use-alpine-target.patch @@ -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 diff --git a/backports/electron/compiler.patch b/backports/electron/compiler.patch deleted file mode 100644 index 41b9b08..0000000 --- a/backports/electron/compiler.patch +++ /dev/null @@ -1,202 +0,0 @@ ---- ./build/config/compiler/BUILD.gn.orig -+++ ./build/config/compiler/BUILD.gn -@@ -658,22 +658,6 @@ - } - } - -- # TODO(crbug.com/40283598): This causes binary size growth and potentially -- # other problems. -- if (default_toolchain != "//build/toolchain/cros:target") { -- 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" ] -@@ -1273,8 +1257,8 @@ - # simplicity we always explicitly set the architecture. - if (current_cpu == "x64") { - if (is_clang && !is_android && !is_fuchsia && !is_chromeos_device) { -- cflags += [ "--target=x86_64-unknown-linux-gnu" ] -- ldflags += [ "--target=x86_64-unknown-linux-gnu" ] -+ cflags += [ "--target=x86_64-alpine-linux-musl" ] -+ ldflags += [ "--target=x86_64-alpine-linux-musl" ] - } else { - cflags += [ "-m64" ] - ldflags += [ "-m64" ] -@@ -1282,8 +1266,8 @@ - cflags += [ "-msse3" ] - } else if (current_cpu == "x86") { - if (is_clang && !is_android && !is_chromeos_device) { -- cflags += [ "--target=i386-unknown-linux-gnu" ] -- ldflags += [ "--target=i386-unknown-linux-gnu" ] -+ cflags += [ "--target=i586-alpine-linux-musl" ] -+ ldflags += [ "--target=i586-alpine-linux-musl" ] - } else { - cflags += [ "-m32" ] - ldflags += [ "-m32" ] -@@ -1294,8 +1278,8 @@ - ] - } else if (current_cpu == "arm") { - if (is_clang && !is_android && !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" ] - } - cflags += [ - "-march=$arm_arch", -@@ -1306,8 +1290,8 @@ - } - } else if (current_cpu == "arm64") { - if (is_clang && !is_android && !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") { - ldflags += [ "-Wl,--hash-style=sysv" ] -@@ -1551,22 +1535,22 @@ - ldflags += [ "-maix64" ] - } - } else if (is_clang) { -- cflags += [ "--target=powerpc64le-unknown-linux-gnu" ] -- ldflags += [ "--target=powerpc64le-unknown-linux-gnu" ] -+ cflags += [ "--target=powerpc64le-alpine-linux-musl" ] -+ ldflags += [ "--target=powerpc64le-alpine-linux-musl" ] - } else { - cflags += [ "-m64" ] - ldflags += [ "-m64" ] - } - } else if (current_cpu == "riscv64") { - if (is_clang && !is_android) { -- cflags += [ "--target=riscv64-linux-gnu" ] -- ldflags += [ "--target=riscv64-linux-gnu" ] -+ cflags += [ "--target=riscv64-alpine-linux-musl" ] -+ ldflags += [ "--target=riscv64-alpine-linux-musl" ] - } - cflags += [ "-mabi=lp64d" ] - } else if (current_cpu == "loong64") { - if (is_clang) { -- cflags += [ "--target=loongarch64-linux-gnu" ] -- ldflags += [ "--target=loongarch64-linux-gnu" ] -+ cflags += [ "--target=loongarch64-alpine-linux-musl" ] -+ ldflags += [ "--target=loongarch64-alpine-linux-musl" ] - } - cflags += [ - "-mabi=lp64d", -@@ -1574,8 +1558,8 @@ - ] - } else if (current_cpu == "s390x") { - if (is_clang) { -- cflags += [ "--target=s390x-unknown-linux-gnu" ] -- ldflags += [ "--target=s390x-unknown-linux-gnu" ] -+ cflags += [ "--target=s390x-alpine-linux-musl" ] -+ ldflags += [ "--target=s390x-alpine-linux-musl" ] - } - cflags += [ "-m64" ] - ldflags += [ "-m64" ] -@@ -2274,7 +2258,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 -@@ -178,11 +178,11 @@ - 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" - } else if (current_cpu == "x86") { -- rust_abi_target = "i686-unknown-linux-gnu" -+ rust_abi_target = "i586-alpine-linux-musl" - } else if (current_cpu == "x64") { -- rust_abi_target = "x86_64-unknown-linux-gnu" -+ rust_abi_target = "x86_64-alpine-linux-musl" - } else if (current_cpu == "arm") { - if (arm_float_abi == "hard") { - float_suffix = "hf" -@@ -200,25 +200,21 @@ - # The thumbv7 vs. armv7 distinction is for legacy reasons and both - # targets in fact target Thumb, see: - # https://github.com/rust-lang/rust/issues/44722 -- if (arm_use_neon) { -- rust_abi_target = "thumbv7neon-unknown-linux-gnueabi" + float_suffix -- } else { -- rust_abi_target = "armv7-unknown-linux-gnueabi" + float_suffix -- } -+ rust_abi_target = "armv7-alpine-linux-musleabi" + float_suffix - } else { -- rust_abi_target = "arm-unknown-linux-gnueabi" + float_suffix -+ rust_abi_target = "armv6-alpine-linux-musleabi" + float_suffix - } - } else if (current_cpu == "riscv64") { -- rust_abi_target = "riscv64gc-unknown-linux-gnu" -+ rust_abi_target = "riscv64-alpine-linux-musl" - } else if (current_cpu == "ppc64") { -- rust_abi_target = "powerpc64le-unknown-linux-gnu" -+ rust_abi_target = "powerpc64le-alpine-linux-musl" - } else if (current_cpu == "s390x") { -- rust_abi_target = "s390x-unknown-linux-gnu" -+ rust_abi_target = "s390x-alpine-linux-musl" - } else if (current_cpu == "loong64") { -- rust_abi_target = "loongarch64-unknown-linux-gnu" -+ rust_abi_target = "loongarch64-alpine-linux-musl" - } else { - # Best guess for other future platforms. -- rust_abi_target = current_cpu + "-unknown-linux-gnu" -+ rust_abi_target = current_cpu + "-alpine-linux-musl" - } - } else if (is_android) { - import("//build/config/android/abi.gni") ---- ./build/config/clang/BUILD.gn.orig -+++ ./build/config/clang/BUILD.gn -@@ -207,22 +207,23 @@ - assert(false) # Unhandled cpu type - } - } 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 if (current_cpu == "loong64") { -- _dir = "loongarch64-unknown-linux-gnu" -+ _suffix = "-loongarch64" - } else if (current_cpu == "riscv64") { -- _dir = "riscv64-unknown-linux-gnu" -+ _suffix = "-riscv64" - } else if (current_cpu == "ppc64") { -- _dir = "ppc64le-unknown-linux-gnu" -+ _suffix = "-powerpc64le" - } else if (current_cpu == "s390x") { -- _dir = "s390x-unknown-linux-gnu" -+ _suffix = "-s390x" - } else { - assert(false) # Unhandled cpu type - } diff --git a/backports/electron/crbug-1407202-mediarouter-crash.patch b/backports/electron/crbug-1407202-mediarouter-crash.patch new file mode 100644 index 0000000..6bd5c3a --- /dev/null +++ b/backports/electron/crbug-1407202-mediarouter-crash.patch @@ -0,0 +1,372 @@ +From d0c1f5ee1f56c165bdf550c9e3be0d7313587b80 Mon Sep 17 00:00:00 2001 +From: Elly Fong-Jones +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 +Reviewed-by: Takumi Fujimoto +Commit-Queue: Elly Fong-Jones +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 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 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 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 router_; + raw_ptr 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 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 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()); ++ 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, 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()); ++ 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 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 context); + + // Returns the media button from the browser that initiates the request to diff --git a/backports/electron/default.conf b/backports/electron/default.conf index 41f3f03..2fb04de 100644 --- a/backports/electron/default.conf +++ b/backports/electron/default.conf @@ -2,8 +2,4 @@ # the electron launcher. # Options to pass to electron. -ELECTRON_FLAGS="--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}" +ELECTRON_FLAGS="--ozone-platform-hint=auto --enable-features=WebRTCPipeWireCapturer" diff --git a/backports/electron/disable-dns_config_service.patch b/backports/electron/disable-dns_config_service.patch deleted file mode 100644 index 731a751..0000000 --- a/backports/electron/disable-dns_config_service.patch +++ /dev/null @@ -1,23 +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 -@@ -142,8 +142,8 @@ - ] - } 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 += [ -@@ -455,7 +455,6 @@ - if (is_android) { - sources += [ "dns_config_service_android_unittest.cc" ] - } else if (is_linux) { -- sources += [ "dns_config_service_linux_unittest.cc" ] - } else if (is_posix) { - sources += [ "dns_config_service_posix_unittest.cc" ] - } diff --git a/backports/electron/disable-failing-tests.patch b/backports/electron/disable-failing-tests.patch deleted file mode 100644 index 9351ea0..0000000 --- a/backports/electron/disable-failing-tests.patch +++ /dev/null @@ -1,22 +0,0 @@ -safesprintf emitnull: - error: conversion from 'std::nullptr_t' to 'const internal::Arg' is ambiguous - const internal::Arg arg_array[] = { args... }; - ---- 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 diff --git a/backports/electron/electron-launcher.sh b/backports/electron/electron-launcher.sh index 546d4cc..e49141f 100644 --- a/backports/electron/electron-launcher.sh +++ b/backports/electron/electron-launcher.sh @@ -10,8 +10,6 @@ done # Prefer user defined ELECTRON_USER_FLAGS (from env) over system # default ELECTRON_FLAGS (from /etc/electron/default.conf). 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 exec "/usr/lib/electron/electron" "$@" diff --git a/backports/electron/electron_do-not-strip-binaries.patch b/backports/electron/electron_do-not-strip-binaries.patch deleted file mode 100644 index f90ce54..0000000 --- a/backports/electron/electron_do-not-strip-binaries.patch +++ /dev/null @@ -1,127 +0,0 @@ -diff --git a/electron/BUILD.gn.orig b/electron/BUILD.gn -index b08f434..4062428 100644 ---- a/electron/BUILD.gn.orig -+++ b/electron/BUILD.gn -@@ -44,7 +44,6 @@ if (is_mac) { - - if (is_linux) { - import("//build/config/linux/pkg_config.gni") -- import("//electron/build/linux/strip_binary.gni") - import("//tools/generate_stubs/rules.gni") - - pkg_config("gio_unix") { -@@ -1424,18 +1423,6 @@ dist_zip("electron_dist_zip") { - ":licenses", - ] - if (is_linux) { -- if (is_official_build) { -- data_deps += [ -- ":strip_chrome_crashpad_handler", -- ":strip_chrome_sandbox", -- ":strip_electron_binary", -- ":strip_libEGL_shlib", -- ":strip_libGLESv2_shlib", -- ":strip_libffmpeg_shlib", -- ":strip_libvk_swiftshader_shlib", -- ] -- } -- - data_deps += [ "//sandbox/linux:chrome_sandbox" ] - } - deps = data_deps -@@ -1481,16 +1468,6 @@ group("electron_mksnapshot") { - - dist_zip("electron_mksnapshot_zip") { - data_deps = mksnapshot_deps -- if (is_linux && is_official_build) { -- data_deps += [ -- ":strip_libEGL_shlib", -- ":strip_libGLESv2_shlib", -- ":strip_libffmpeg_shlib", -- ":strip_libvk_swiftshader_shlib", -- ":strip_mksnapshot_binary", -- ":strip_v8_context_snapshot_generator_binary", -- ] -- } - deps = data_deps - outputs = [ "$root_build_dir/mksnapshot.zip" ] - } -@@ -1637,78 +1614,3 @@ group("release_build") { - ] - } - } -- --if (is_linux && is_official_build) { -- strip_binary("strip_electron_binary") { -- binary_input = "$root_out_dir/$electron_project_name" -- symbol_output = "$root_out_dir/debug/$electron_project_name.debug" -- compress_debug_sections = true -- deps = [ ":electron_app" ] -- } -- -- strip_binary("strip_chrome_crashpad_handler") { -- binary_input = "$root_out_dir/chrome_crashpad_handler" -- symbol_output = "$root_out_dir/debug/chrome_crashpad_handler.debug" -- compress_debug_sections = true -- deps = [ "//components/crash/core/app:chrome_crashpad_handler" ] -- } -- -- strip_binary("strip_chrome_sandbox") { -- binary_input = "$root_out_dir/chrome_sandbox" -- symbol_output = "$root_out_dir/debug/chrome-sandbox.debug" -- compress_debug_sections = true -- deps = [ "//sandbox/linux:chrome_sandbox" ] -- } -- -- strip_binary("strip_libEGL_shlib") { -- binary_input = "$root_out_dir/libEGL.so" -- symbol_output = "$root_out_dir/debug/libEGL.so.debug" -- compress_debug_sections = true -- deps = [ "//third_party/angle:libEGL" ] -- } -- -- strip_binary("strip_libGLESv2_shlib") { -- binary_input = "$root_out_dir/libGLESv2.so" -- symbol_output = "$root_out_dir/debug/libGLESv2.so.debug" -- compress_debug_sections = true -- deps = [ "//third_party/angle:libGLESv2" ] -- } -- -- strip_binary("strip_libffmpeg_shlib") { -- binary_input = "$root_out_dir/libffmpeg.so" -- symbol_output = "$root_out_dir/debug/libffmpeg.so.debug" -- compress_debug_sections = true -- deps = [ "//third_party/ffmpeg" ] -- } -- -- strip_binary("strip_libvk_swiftshader_shlib") { -- binary_input = "$root_out_dir/libvk_swiftshader.so" -- symbol_output = "$root_out_dir/debug/libvk_swiftshader.so.debug" -- compress_debug_sections = true -- deps = [ "//third_party/swiftshader/src/Vulkan:swiftshader_libvulkan" ] -- } -- -- strip_binary("strip_mksnapshot_binary") { -- _binary_path = rebase_path( -- get_label_info( -- ":v8_context_snapshot_generator($v8_snapshot_toolchain)", -- "root_out_dir") + "/mksnapshot", -- root_build_dir) -- binary_input = "$root_out_dir/$_binary_path" -- symbol_output = "$root_out_dir/debug/${_binary_path}.debug" -- compress_debug_sections = true -- deps = mksnapshot_deps -- } -- -- strip_binary("strip_v8_context_snapshot_generator_binary") { -- _binary_path = rebase_path( -- get_label_info( -- ":v8_context_snapshot_generator($v8_snapshot_toolchain)", -- "root_out_dir") + "/v8_context_snapshot_generator", -- root_build_dir) -- binary_input = "$root_out_dir/$_binary_path" -- symbol_output = "$root_out_dir/debug/${_binary_path}.debug" -- compress_debug_sections = true -- deps = mksnapshot_deps -- } --} diff --git a/backports/electron/electron_shell-file-dialog-drop-glibc.patch b/backports/electron/electron_shell-file-dialog-drop-glibc.patch deleted file mode 100644 index b2a6927..0000000 --- a/backports/electron/electron_shell-file-dialog-drop-glibc.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/./electron/shell/browser/ui/file_dialog.h.orig b/./electron/shell/browser/ui/file_dialog.h -index 6cdfc7b..f7757da 100644 ---- a/./electron/shell/browser/ui/file_dialog.h.orig -+++ b/./electron/shell/browser/ui/file_dialog.h -@@ -13,10 +13,6 @@ - #include "base/files/file_path.h" - #include "base/memory/raw_ptr_exclusion.h" - --#if BUILDFLAG(IS_LINUX) --#include --#endif -- - namespace electron { - class NativeWindow; - } - diff --git a/backports/electron/electron_system-zlib-headers.patch b/backports/electron/electron_system-zlib-headers.patch deleted file mode 100644 index 644f5e7..0000000 --- a/backports/electron/electron_system-zlib-headers.patch +++ /dev/null @@ -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", - ] - } - diff --git a/backports/electron/electron_unbundle-node.patch b/backports/electron/electron_unbundle-node.patch deleted file mode 100644 index d518d7e..0000000 --- a/backports/electron/electron_unbundle-node.patch +++ /dev/null @@ -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", - ] diff --git a/backports/electron/electron_use-system-yarn.patch b/backports/electron/electron_use-system-yarn.patch deleted file mode 100644 index eaa8a8c..0000000 --- a/backports/electron/electron_use-system-yarn.patch +++ /dev/null @@ -1,17 +0,0 @@ -diff --git a/electron/.yarnrc.yml.orig b/electron/.yarnrc.yml -index ca0a580..a388ff9 100644 ---- a/electron/.yarnrc.yml.orig -+++ b/electron/.yarnrc.yml -@@ -1,12 +1,3 @@ - enableScripts: false - --nmHoistingLimits: workspaces -- - nodeLinker: node-modules -- --npmMinimalAgeGate: 10080 -- --npmPreapprovedPackages: -- - "@electron/*" -- --yarnPath: .yarn/releases/yarn-4.12.0.cjs diff --git a/backports/electron/fc-cache-version.patch b/backports/electron/fc-cache-version.patch deleted file mode 100644 index 7cbd2a8..0000000 --- a/backports/electron/fc-cache-version.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ./third_party/test_fonts/fontconfig/generate_fontconfig_caches.cc.orig -+++ ./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-11"; -+ auto cache = fontconfig_caches + "/" + kCacheKey + "-le64.cache-" + FC_CACHE_VERSION; - bool cache_exists = access(cache.c_str(), F_OK) == 0; - return !cache_exists; - } diff --git a/backports/electron/fix-ffmpeg-codec-list.patch b/backports/electron/fix-ffmpeg-codec-list.patch deleted file mode 100644 index de24f66..0000000 --- a/backports/electron/fix-ffmpeg-codec-list.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- a/media/ffmpeg/ffmpeg_common.cc -+++ b/media/ffmpeg/ffmpeg_common.cc -@@ -1046,8 +1046,8 @@ - - // This should match the configured lists in //third_party/ffmpeg. - static constexpr std::string_view kAllowedAudioCodecs = -- "vorbis,libopus,flac,pcm_u8,pcm_s16le,pcm_s24le,pcm_s32le,pcm_f32le," -- "mp3,pcm_s16be,pcm_s24be,pcm_mulaw,pcm_alaw" EXTRA_CODECS; -+ "vorbis,opus,libopus,flac,pcm_u8,pcm_s16le,pcm_s24le,pcm_s32le,pcm_f32le," -+ "mp3float,mp3,pcm_s16be,pcm_s24be,pcm_mulaw,pcm_alaw" EXTRA_CODECS; - #undef EXTRA_CODECS - - return kAllowedAudioCodecs.data(); diff --git a/backports/electron/fix-missing-cstdint-include-musl.patch b/backports/electron/fix-missing-cstdint-include-musl.patch new file mode 100644 index 0000000..00f16af --- /dev/null +++ b/backports/electron/fix-missing-cstdint-include-musl.patch @@ -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 + ++#include + #include + + #include "common/platform/api/quiche_export.h" diff --git a/backports/electron/fstatat-32bit.patch b/backports/electron/fstatat-32bit.patch deleted file mode 100644 index 1627ffa..0000000 --- a/backports/electron/fstatat-32bit.patch +++ /dev/null @@ -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 diff --git a/backports/electron/generic-sensor-include.patch b/backports/electron/generic-sensor-include.patch deleted file mode 100644 index e8e2563..0000000 --- a/backports/electron/generic-sensor-include.patch +++ /dev/null @@ -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 -+#include - #include - - namespace device { diff --git a/backports/electron/headless-shell-no-license.patch b/backports/electron/headless-shell-no-license.patch deleted file mode 100644 index 6a6027d..0000000 --- a/backports/electron/headless-shell-no-license.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 6f4685cff1ab8c68de98c0731bb8afaf8a05a723 Mon Sep 17 00:00:00 2001 -From: knuxify -Date: Sat, 5 Apr 2025 14:10:37 +0200 -Subject: [PATCH] Do not generate license file for headless-shell build - ---- - headless/BUILD.gn | 4 ---- - 1 file changed, 4 deletions(-) - -diff --git a/headless/BUILD.gn b/headless/BUILD.gn -index 798bb22..9d83f49 100644 ---- a/headless/BUILD.gn -+++ b/headless/BUILD.gn -@@ -934,10 +934,6 @@ executable("headless_shell") { - - deps = [ ":headless_shell_lib" ] - -- if (proprietary_codecs) { -- deps += [ ":generate_headless_shell_license_file" ] -- } -- - if (!headless_use_embedded_resources) { - data = [ - "$root_out_dir/headless_lib_data.pak", --- -2.49.0 - diff --git a/backports/electron/electron_icon.patch b/backports/electron/icon.patch similarity index 70% rename from backports/electron/electron_icon.patch rename to backports/electron/icon.patch index 101b60a..6a999f1 100644 --- a/backports/electron/electron_icon.patch +++ b/backports/electron/icon.patch @@ -1,11 +1,11 @@ --- a/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') { -- options.icon = url.fileURLToPath(new URL('icon.png', import.meta.url)); -+ options.icon = 'file:///usr/share/icons/hicolor/1024x1024/apps/electron.png'; +- options.icon = path.join(__dirname, 'icon.png'); ++ options.icon = '/usr/share/icons/hicolor/1024x1024/apps/electron.png'; } mainWindow = new BrowserWindow(options); diff --git a/backports/electron/import-version.patch b/backports/electron/import-version.patch new file mode 100644 index 0000000..d275038 --- /dev/null +++ b/backports/electron/import-version.patch @@ -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 ++#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS) + + #include "base/linux_util.h" + #include "base/strings/string_split.h" diff --git a/backports/electron/jsoncpp.patch b/backports/electron/jsoncpp.patch new file mode 100644 index 0000000..c9ea765 --- /dev/null +++ b/backports/electron/jsoncpp.patch @@ -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 +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 +Commit-Queue: Thomas Anderson +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") { diff --git a/backports/electron/libstdc++13.patch b/backports/electron/libstdc++13.patch new file mode 100644 index 0000000..b85df2c --- /dev/null +++ b/backports/electron/libstdc++13.patch @@ -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 + #include ++#include + #include + #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 ++#include + #include + #include + #include +--- 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 ++#include + #include + #include + #include +--- 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 ++#include + #include + #include + #include +--- 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 ++ + 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 ++ + 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 + #include + ++#include + #include + + #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 ++ + 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 + #include + + 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 ++#include + #include + #include + #include +--- 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 ++ + 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 + #include + + +--- a/base/debug/profiler.h ++++ b/base/debug/profiler.h +@@ -7,6 +7,7 @@ + + #include + ++#include + #include + + #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 + #include + + #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 + #include + + 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 + #include + #include ++#include + #include + #include + +--- 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 ++ + #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 + #include + #include + +--- 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 + #include + + #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 + #include + #include + +--- 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 + #include + + +--- a/components/payments/content/utility/fingerprint_parser.h ++++ b/components/payments/content/utility/fingerprint_parser.h +@@ -7,6 +7,7 @@ + + #include + ++#include + #include + #include + +--- 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 + #include + + #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 + #include + #include + #include +--- 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 + #include + + 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 + #include + #include + #include +--- 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 + #include + + #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 + #include + #include + +--- 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 ++ + 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 + #include + #include + +--- 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 ++ + #include "perfetto/base/build_config.h" + #include "perfetto/public/abi/export.h" + diff --git a/backports/electron/mman.patch b/backports/electron/mman.patch new file mode 100644 index 0000000..748696c --- /dev/null +++ b/backports/electron/mman.patch @@ -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 + #include + #include ++#include + #endif // BUILDFLAG(IS_POSIX) + + #if BUILDFLAG(ENABLE_PARTITION_ALLOC_AS_MALLOC_SUPPORT) && BUILDFLAG(IS_MAC) diff --git a/backports/electron/musl-sandbox.patch b/backports/electron/musl-sandbox.patch index ccd9423..52c3b21 100644 --- a/backports/electron/musl-sandbox.patch +++ b/backports/electron/musl-sandbox.patch @@ -45,7 +45,7 @@ diff --git a/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc ./sandbox/linux/s index d9d1882..0567557 100644 --- a/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__) case __NR_waitpid: #endif @@ -53,7 +53,7 @@ index d9d1882..0567557 100644 return true; case __NR_clone: // Should be parameter-restricted. 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__) case __NR_set_thread_area: #endif @@ -61,16 +61,16 @@ index d9d1882..0567557 100644 case __NR_unshare: #if !defined(__mips__) && !defined(__aarch64__) case __NR_vfork: -@@ -549,6 +549,8 @@ +@@ -514,6 +514,8 @@ bool SyscallSets::IsAllowedAddressSpaceAccess(int sysno) { + case __NR_mlock: case __NR_munlock: case __NR_munmap: - case __NR_mseal: + case __NR_mremap: + case __NR_membarrier: return true; case __NR_madvise: case __NR_mincore: -@@ -566,7 +568,6 @@ +@@ -531,7 +533,6 @@ bool SyscallSets::IsAllowedAddressSpaceAccess(int sysno) { case __NR_modify_ldt: #endif case __NR_mprotect: diff --git a/backports/electron/musl-v8-monotonic-pthread-cont_timedwait.patch b/backports/electron/musl-v8-monotonic-pthread-cont_timedwait.patch new file mode 100644 index 0000000..3a99ee5 --- /dev/null +++ b/backports/electron/musl-v8-monotonic-pthread-cont_timedwait.patch @@ -0,0 +1,23 @@ +use monotonic clock for pthread_cond_timedwait with musl too, since it supports +it +-- +--- a/v8/src/base/platform/condition-variable.cc ++++ b/v8/src/base/platform/condition-variable.cc +@@ -16,7 +16,7 @@ + + ConditionVariable::ConditionVariable() { + #if (V8_OS_FREEBSD || V8_OS_NETBSD || V8_OS_OPENBSD || \ +- (V8_OS_LINUX && V8_LIBC_GLIBC)) ++ V8_OS_LINUX) + // On Free/Net/OpenBSD and Linux with glibc we can change the time + // source for pthread_cond_timedwait() to use the monotonic clock. + pthread_condattr_t attr; +@@ -92,7 +92,7 @@ + &native_handle_, &mutex->native_handle(), &ts); + #else + #if (V8_OS_FREEBSD || V8_OS_NETBSD || V8_OS_OPENBSD || \ +- (V8_OS_LINUX && V8_LIBC_GLIBC)) ++ V8_OS_LINUX) + // On Free/Net/OpenBSD and Linux with glibc we can change the time + // source for pthread_cond_timedwait() to use the monotonic clock. + result = clock_gettime(CLOCK_MONOTONIC, &ts); diff --git a/backports/electron/net-test-no-vpython.patch b/backports/electron/net-test-no-vpython.patch deleted file mode 100644 index efb2920..0000000 --- a/backports/electron/net-test-no-vpython.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 4b41417068045f11db9e7edead1447e93adb9073 Mon Sep 17 00:00:00 2001 -From: LN Liberda -Date: Sat, 28 Jun 2025 18:13:59 +0200 -Subject: [PATCH] Test net without vendored python - ---- - net/test/python_utils.cc | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/net/test/python_utils.cc b/net/test/python_utils.cc -index 2cdc07dad9948..0b2d42a5bf126 100644 ---- a/net/test/python_utils.cc -+++ b/net/test/python_utils.cc -@@ -47,7 +47,7 @@ bool GetPython3Command(base::CommandLine* python_cmd) { - #if BUILDFLAG(IS_WIN) - python_cmd->SetProgram(base::FilePath(FILE_PATH_LITERAL("vpython3.bat"))); - #else -- python_cmd->SetProgram(base::FilePath(FILE_PATH_LITERAL("vpython3"))); -+ python_cmd->SetProgram(base::FilePath(FILE_PATH_LITERAL("python3"))); - #endif - - #if BUILDFLAG(IS_MAC) diff --git a/backports/electron/net-test-pyws3-py3.12.patch b/backports/electron/net-test-pyws3-py3.12.patch deleted file mode 100644 index cee3e61..0000000 --- a/backports/electron/net-test-pyws3-py3.12.patch +++ /dev/null @@ -1,39 +0,0 @@ -ssl.wrap_socket() was removed in Python 3.12, needed for net_unittests. -Patch-Source: https://github.com/GoogleChromeLabs/pywebsocket3/pull/39 -Modified (changed path) -lnl - -From bc50ae9d451ca705edd6101d987b839e1a09d45e Mon Sep 17 00:00:00 2001 -From: Sven Diederichs <22592421+zaurask@users.noreply.github.com> -Date: Thu, 28 Mar 2024 18:55:28 +0100 -Subject: [PATCH] use ssl.SSLContext.wrap_socket rather than the deprecated - ssl.wrap_socket - ---- - pywebsocket3/websocket_server.py | 14 ++++++++------ - 1 file changed, 8 insertions(+), 6 deletions(-) - -diff --git a/third_party/pywebsocket3/src/mod_pywebsocket/websocket_server.py b/third_party/pywebsocket3/src/mod_pywebsocket/websocket_server.py -index e7485ec..93ad6f1 100644 ---- a/third_party/pywebsocket3/src/mod_pywebsocket/websocket_server.py -+++ b/third_party/pywebsocket3/src/mod_pywebsocket/websocket_server.py -@@ -157,12 +157,14 @@ class WebSocketServer(socketserver.ThreadingMixIn, BaseHTTPServer.HTTPServer): - client_cert_ = ssl.CERT_REQUIRED - else: - client_cert_ = ssl.CERT_NONE -- socket_ = ssl.wrap_socket( -- socket_, -- keyfile=server_options.private_key, -- certfile=server_options.certificate, -- ca_certs=server_options.tls_client_ca, -- cert_reqs=client_cert_) -+ -+ ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS) -+ if server_options.certificate: -+ ssl_context.load_cert_chain(certfile=server_options.certificate, keyfile=server_options.private_key) -+ if server_options.tls_client_ca: -+ ssl_context.load_verify_locations(server_options.tls_client_ca) -+ ssl_context.verify_mode =client_cert_ -+ socket_ = ssl_context.wrap_socket(socket_) - self._sockets.append((socket_, addrinfo)) - - def server_bind(self): diff --git a/backports/electron/no-execinfo.patch b/backports/electron/no-execinfo.patch index 12064ba..79e3327 100644 --- a/backports/electron/no-execinfo.patch +++ b/backports/electron/no-execinfo.patch @@ -37,24 +37,25 @@ for discussion about this, see https://www.openwall.com/lists/musl/2021/07/16/1 #define HAVE_FCNTL_H 1 --- a/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; -#if !defined(__UCLIBC__) && !defined(_AIX) +#if defined(__GLIBC__) && !defined(_AIX) OutputToStreamWithPrefix(&stream, prefix_string); #endif 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 +++ b/base/debug/stack_trace_unittest.cc @@ -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. // 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 diff --git a/backports/electron/no-mallinfo.patch b/backports/electron/no-mallinfo.patch index 1f2d541..90824e8 100644 --- a/backports/electron/no-mallinfo.patch +++ b/backports/electron/no-mallinfo.patch @@ -100,25 +100,25 @@ musl does not implement mallinfo()/mallinfo2() /* Define to 1 if you have the header file. */ #define HAVE_MALLOC_H 1 ---- a/base/allocator/partition_allocator/src/partition_alloc/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 -@@ -660,7 +660,7 @@ +--- a/base/allocator/partition_allocator/shim/allocator_shim_default_dispatch_to_partition_alloc.cc ++++ b/base/allocator/partition_allocator/shim/allocator_shim_default_dispatch_to_partition_alloc.cc +@@ -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 SHIM_ALWAYS_EXPORT struct mallinfo mallinfo(void) __THROW { - partition_alloc::SimplePartitionStatsDumper allocator_dumper; + base::SimplePartitionStatsDumper 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 -+++ b/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc -@@ -29,7 +29,7 @@ - #if PA_BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) +--- a/base/allocator/partition_allocator/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 +@@ -24,7 +24,7 @@ + #if BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) // Platforms on which we override weak libc symbols. --#if PA_BUILDFLAG(IS_LINUX) || PA_BUILDFLAG(IS_CHROMEOS) -+#if (PA_BUILDFLAG(IS_LINUX) && defined(__GLIBC__)) || PA_BUILDFLAG(IS_CHROMEOS) +-#if BUILDFLAG(IS_LINUX) || 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); diff --git a/backports/electron/no-mte.patch b/backports/electron/no-mte.patch new file mode 100644 index 0000000..2f5cead --- /dev/null +++ b/backports/electron/no-mte.patch @@ -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); diff --git a/backports/electron/partalloc-no-tagging-arm64.patch b/backports/electron/partalloc-no-tagging-arm64.patch deleted file mode 100644 index 422fcf5..0000000 --- a/backports/electron/partalloc-no-tagging-arm64.patch +++ /dev/null @@ -1,26 +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 -@@ -89,8 +89,7 @@ - # TODO(crbug.com/329199197): Clean this up when experiments are complete. - use_large_empty_slot_span_ring = true - --has_memory_tagging = current_cpu == "arm64" && is_clang && !is_asan && -- !is_hwasan && (is_linux || is_android) -+has_memory_tagging = false - - declare_args() { - # Debug configuration. ---- ./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 - diff --git a/backports/electron/pvalloc.patch b/backports/electron/pvalloc.patch deleted file mode 100644 index 145e05b..0000000 --- a/backports/electron/pvalloc.patch +++ /dev/null @@ -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(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({ diff --git a/backports/electron/electron_python-jinja-3.10.patch b/backports/electron/python-jinja-3.10.patch similarity index 100% rename from backports/electron/electron_python-jinja-3.10.patch rename to backports/electron/python-jinja-3.10.patch diff --git a/backports/electron/remove-broken-patch.patch b/backports/electron/remove-broken-patch.patch new file mode 100644 index 0000000..cf57c12 --- /dev/null +++ b/backports/electron/remove-broken-patch.patch @@ -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/" diff --git a/backports/electron/vector-const.patch b/backports/electron/vector-const.patch new file mode 100644 index 0000000..cb65e12 --- /dev/null +++ b/backports/electron/vector-const.patch @@ -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& argv, +- const std::vector additional_data, ++ const std::vector additional_data, + SocketReader* reader); + + private: +@@ -664,7 +664,7 @@ + void ProcessSingleton::LinuxWatcher::HandleMessage( + const std::string& current_dir, + const std::vector& argv, +- const std::vector additional_data, ++ const std::vector additional_data, + SocketReader* reader) { + DCHECK(ui_task_runner_->BelongsToCurrentThread()); + DCHECK(reader); +@@ -754,7 +754,7 @@ + base::StringToSizeT(tokens[0], &num_args); + std::vector command_line(tokens.begin() + 1, tokens.begin() + 1 + num_args); + +- std::vector additional_data; ++ std::vector 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(remaining_args.c_str()); +- additional_data = std::vector( ++ additional_data = std::vector( + 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 additional_data)>; ++ const std::vector 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* parsed_additional_data) { ++ std::vector* 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(additional_data.c_str()); +- *parsed_additional_data = std::vector(additional_data_bytes, ++ *parsed_additional_data = std::vector(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 additional_data; ++ std::vector 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 additional_data)>& callback, ++ const std::vector additional_data)>& callback, + const base::CommandLine& cmd, + const base::FilePath& cwd, +- const std::vector additional_data) { ++ const std::vector 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 additional_data) { ++ const std::vector 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 additional_data); ++ const std::vector additional_data); + bool HasSingleInstanceLock() const; + bool RequestSingleInstanceLock(gin::Arguments* args); + void ReleaseSingleInstanceLock(); diff --git a/backports/electron/electron_webpack-hash.patch b/backports/electron/webpack-hash.patch similarity index 100% rename from backports/electron/electron_webpack-hash.patch rename to backports/electron/webpack-hash.patch diff --git a/backports/element-desktop/APKBUILD b/backports/element-desktop/APKBUILD deleted file mode 100644 index c5d8fd7..0000000 --- a/backports/element-desktop/APKBUILD +++ /dev/null @@ -1,172 +0,0 @@ -# Contributor: lauren n. liberda -maintainer="lauren n. liberda " -pkgname=element-desktop -pkgver=1.12.3 -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=39 -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-fixes.patch - no-source-maps.patch.web - use-system-fonts.patch.web - - element-desktop - " -options="net !check" # broken -# Avoid conflicting providers -sonameprefix="$pkgname:" - -# 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 - patch -p1 -i patches/@types+auto-launch+5.0.5.patch -} - -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/build/icon.png "$pkgdir"/usr/lib/element-desktop/build/icon.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=" -f302907165a35f4a4f069f5aec6bc28edeba3d09c75f483c818e3930ceb4e838e5bb91ad9d42019a11a661d6e656da3c1ff25507cbb281c69183aac7d499e882 element-desktop-1.12.3.tar.gz -b845ff71ca39d7ae4dca9bb55e821bfdf911b12de5d012ba55d598f3287046fb2b525bce608925a9fa8fa7d39a4ceed9b4213d5d1c1d0c9e6b9b72154c9a35a5 element-web-1.12.3.tar.gz -4747893ed3e43d3074e9afe1cdd668a6be0de073d439205fe8c38c5e0f4091cc76e3cd15d98818bea5139add29501d8d07e83c58e9da230a4ce5bb538d388f80 add-alpine-targets.patch -755b17f7b828eb6920c06a6950ad4e14c32c99d22e9c05fcef7a081b5d2034adb03db3958aa5209c99fb7201f4d888c2383fc9864c5e743dd33f8b5c4925acd7 use-system-headers.patch -a5d90dd1ec7aec0dc18b73eb3a6fd51ac1223e381c492d24e7dc0fd2ade955ac727cebbaff6ffa27c7e18d9acf712c709de3f886ee2ddf87ab3b028d3eb461c6 tasje-fixes.patch -ec635fde026f7fce8e8cc57960b5b9dcec4418416d4867ed47711422d48f068bb58a3c9ceb7715efc9c177beca3788da6b0babc9b689ea8c0724a0395f2b85f8 no-source-maps.patch.web -aaf46476bac403aa5204aa265fcf0654fad4c149fd74d0ec4273c051a5549943384cae3cdd62c5b78fdedfed55c11ecceb898b886e44165cbe7e30953a095cf9 use-system-fonts.patch.web -afc588311dc3b566a754e3e7fe6b37b99a06d47b8bbce0ed9acca8ef308fdab0bd1d41b406199e5cbdd86bdce695ff847cd8668857a235cbdc292ad8b899c063 element-desktop -" diff --git a/backports/element-desktop/add-alpine-targets.patch b/backports/element-desktop/add-alpine-targets.patch deleted file mode 100644 index 87e1148..0000000 --- a/backports/element-desktop/add-alpine-targets.patch +++ /dev/null @@ -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, - }; diff --git a/backports/element-desktop/element-desktop b/backports/element-desktop/element-desktop deleted file mode 100755 index de3c5b2..0000000 --- a/backports/element-desktop/element-desktop +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -exec electron /usr/lib/element-desktop/app.asar "$@" diff --git a/backports/element-desktop/no-source-maps.patch.web b/backports/element-desktop/no-source-maps.patch.web deleted file mode 100644 index 86b3bac..0000000 --- a/backports/element-desktop/no-source-maps.patch.web +++ /dev/null @@ -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 diff --git a/backports/element-desktop/tasje-fixes.patch b/backports/element-desktop/tasje-fixes.patch deleted file mode 100644 index 0e026c5..0000000 --- a/backports/element-desktop/tasje-fixes.patch +++ /dev/null @@ -1,33 +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 -``` - -console.log interferes with tasje, which reads config from node stdout - ---- ./electron-builder.ts.orig -+++ ./electron-builder.ts -@@ -72,10 +72,6 @@ - console.warn(`No VARIANT_PATH specified, using default variant configuration '${DEFAULT_VARIANT}':`); - } - --for (const key in variant) { -- console.log(`${key}: ${variant[key]}`); --} -- - interface Configuration extends BaseConfiguration { - extraMetadata: Partial> & ExtraMetadata; - linux: BaseConfiguration["linux"]; -@@ -112,10 +108,6 @@ - }, - files: [ - "package.json", -- { -- from: ".hak/hakModules", -- to: "node_modules", -- }, - "lib/**", - ], - extraResources: ["build/icon.*", "webapp.asar"], diff --git a/backports/element-desktop/use-system-fonts.patch.web b/backports/element-desktop/use-system-fonts.patch.web deleted file mode 100644 index 855fdea..0000000 --- a/backports/element-desktop/use-system-fonts.patch.web +++ /dev/null @@ -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"; diff --git a/backports/element-desktop/use-system-headers.patch b/backports/element-desktop/use-system-headers.patch deleted file mode 100644 index 6ea957b..0000000 --- a/backports/element-desktop/use-system-headers.patch +++ /dev/null @@ -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"), - }; - } - diff --git a/backports/fdm-materials/APKBUILD b/backports/fdm-materials/APKBUILD new file mode 100644 index 0000000..5bde97d --- /dev/null +++ b/backports/fdm-materials/APKBUILD @@ -0,0 +1,27 @@ +# Contributor: Aiden Grossman +# Maintainer: Aiden Grossman +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 +" diff --git a/backports/freecad/APKBUILD b/backports/freecad/APKBUILD new file mode 100644 index 0000000..279a09b --- /dev/null +++ b/backports/freecad/APKBUILD @@ -0,0 +1,96 @@ +# Contributor: Aiden Grossman +# Maintainer: Aiden Grossman +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 +" diff --git a/backports/freecad/no-execinfo.patch b/backports/freecad/no-execinfo.patch new file mode 100644 index 0000000..3e1c39c --- /dev/null +++ b/backports/freecad/no-execinfo.patch @@ -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 + #include +-#include + #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 + #include + #include + diff --git a/backports/freecad/tests.patch b/backports/freecad/tests.patch new file mode 100644 index 0000000..4b63a20 --- /dev/null +++ b/backports/freecad/tests.patch @@ -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 diff --git a/backports/freetube/APKBUILD b/backports/freetube/APKBUILD index 3ab6bf8..73d76af 100644 --- a/backports/freetube/APKBUILD +++ b/backports/freetube/APKBUILD @@ -1,8 +1,8 @@ -# Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) pkgname=freetube -pkgver=0.23.12 -pkgrel=1 +pkgver=0.20.0 +pkgrel=0 pkgdesc="An open source desktop YouTube player built with privacy in mind." arch="x86_64 aarch64" # blocked by electron license="AGPL-3.0-only" @@ -50,7 +50,7 @@ package() { } sha512sums=" -e19c7e8de0c6c5bbddcd3da73cd1907cae7157e8f44f550c4a34965b3b4f3c1a180c111a8c497d74a556d6d8e74e9fdd1ed6e064d4fc899f80712a1f187395ae freetube-0.23.12.tar.gz +b82cdaff82d7bd325f3127794160382c97be3b72c5ef4bb3f327a8ada6b609043bc30a1f6af59c38e23237aac7d8b6ea2685c22aa82469c8d08b96cb839a3099 freetube-0.20.0.tar.gz 2ce2effc794bb663789cefe968b5899122127983dbfa1b240aa33a2be383720b18204e6d01b4a550df72956f02b6636b79c93a58f470a970b09b770f5b8f2fc4 freetube.sh d27cb896b65a7e8d52ffe86e5f74eed72b6cf976b28e1a13012d34c7eceba5ff6f20298017738dfa93c0336ffa52b8ee4da7e06b02747062898db7e678819526 tasje-dotdash.patch " diff --git a/backports/libmedc/APKBUILD b/backports/libmedc/APKBUILD new file mode 100644 index 0000000..c10dfd3 --- /dev/null +++ b/backports/libmedc/APKBUILD @@ -0,0 +1,43 @@ +# Contributor: Aiden Grossman +# Maintainer: Aiden Grossman +pkgname=libmedc +pkgver=4.1.1 +pkgrel=1 +pkgdesc="Open source library for numerical simulation" +url="https://www.salome-platform.org/" +arch="all" +license="GPL-3.0-or-later" +makedepends="cmake hdf5-dev swig python3-dev samurai" +options="!check" #test suite is nonfunctional with python bindings +subpackages="$pkgname-dev $pkgname-doc $pkgname-python-pyc $pkgname-python:_py" +source=" + https://files.salome-platform.org/Salome/medfile/med-$pkgver.tar.gz + hdf5.patch + cmake-config-dir.patch + " +builddir="$srcdir/med-$pkgver" + +build() { + cmake -B build -G Ninja \ + -DCMAKE_BUILD_TYPE=None \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DMEDFILE_BUILD_TESTS=OFF \ + -DMEDFILE_BUILD_PYTHON=ON + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} + +_py() { + pkgdesc="Python bindings for libmedc" + depends="python3" + amove usr/lib/python3* +} + +sha512sums=" +f211fa82750a7cc935baa3a50a55d16e40117a0f2254b482492ba8396d82781ca84960995da7a16b2b5be0b93ce76368bf4b311bb8af0e5f0243e7051c9c554c med-4.1.1.tar.gz +68d9291e73a68d674081314028c0fce7bbd4a7b78b93b7e5078117ce62f2d07318bc33ec95091ce677148ec3926c1ce653d0760c34e74b29257a7be59210f040 hdf5.patch +8d0f58cd67d205fbacaff0e6da76e2ee5473457b478ede13a551ebe5853c0716c7406b74c3792e1ace33a34d352fccca8dd2940f063a7c060a12529d060a991a cmake-config-dir.patch +" diff --git a/backports/libmedc/cmake-config-dir.patch b/backports/libmedc/cmake-config-dir.patch new file mode 100644 index 0000000..e1f43a4 --- /dev/null +++ b/backports/libmedc/cmake-config-dir.patch @@ -0,0 +1,11 @@ +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -101,7 +101,7 @@ + IF(WIN32 AND NOT CYGWIN) + SET(INSTALL_CMAKE_CONFIG_DIR cmake) + ELSE() +- SET(INSTALL_CMAKE_CONFIG_DIR share/cmake/medfile-${MED_STR_VERSION}) ++ SET(INSTALL_CMAKE_CONFIG_DIR lib${LIB_SUFFIX}/cmake/medfile-${MED_STR_VERSION}) + ENDIF() + SET(INSTALL_INCLUDE_DIR include) + diff --git a/backports/libmedc/hdf5.patch b/backports/libmedc/hdf5.patch new file mode 100644 index 0000000..bc4764b --- /dev/null +++ b/backports/libmedc/hdf5.patch @@ -0,0 +1,94 @@ +Originally from https://gist.github.com/jedbrown/527ef81ff59a0dccf833da40fdd15a47 +diff -rupN med-4.1.0/config/cmake_files/medMacros.cmake med-4.1.0-new/config/cmake_files/medMacros.cmake +--- med-4.1.0/config/cmake_files/medMacros.cmake 2021-12-03 09:35:30.675827163 +0100 ++++ med-4.1.0-new/config/cmake_files/medMacros.cmake 2021-12-03 09:32:31.894994147 +0100 +@@ -447,7 +447,7 @@ MACRO(MED_FIND_HDF5) + ## + ## Requires 1.10.x version + ## +- IF (NOT HDF_VERSION_MAJOR_REF EQUAL 1 OR NOT HDF_VERSION_MINOR_REF EQUAL 10 OR NOT HDF_VERSION_RELEASE_REF GREATER 1) ++ IF (HDF5_VERSION VERSION_LESS 1.10.2) + MESSAGE(FATAL_ERROR "HDF5 version is ${HDF_VERSION_REF}. Only versions >= 1.10.2 are supported.") + ENDIF() + ## +diff -rupN med-4.1.0/src/ci/MEDfileCompatibility.c med-4.1.0-new/src/ci/MEDfileCompatibility.c +--- med-4.1.0/src/ci/MEDfileCompatibility.c 2021-12-03 09:35:30.676827162 +0100 ++++ med-4.1.0-new/src/ci/MEDfileCompatibility.c 2021-12-03 09:33:26.292942149 +0100 +@@ -71,7 +71,7 @@ MEDfileCompatibility(const char* const f + _hversionMMR=10000*_hmajeur+100*_hmineur+_hrelease; + /* ISCRUTE(_hversionMMR); */ + /* ISCRUTE(HDF_VERSION_NUM_REF); */ +- if ( (_hversionMMR >= HDF_VERSION_NUM_REF) && (_hmineur == HDF_VERSION_MINOR_REF) ) *hdfok = MED_TRUE; ++ if (_hversionMMR >= HDF_VERSION_NUM_REF) *hdfok = MED_TRUE; + + /* TODO : Vérifier si la version mineure HDF du fichier est supérieure + à la version mineure de la bibliothèque HDF utilisée : +@@ -113,7 +113,7 @@ MEDfileCompatibility(const char* const f + #if MED_NUM_MAJEUR != 4 + #error "Don't forget to update the test version here when you change the major version of the library !" + #endif +-#if H5_VERS_MINOR > 10 ++#if H5_VERS_MINOR > 14 + #error "Don't forget to check the compatibility version of the library, depending on the internal hdf model choice !" + #error "Cf. _MEDfileCreate ..." + #endif +diff -rupN med-4.1.0/src/hdfi/_MEDfileCreate.c med-4.1.0-new/src/hdfi/_MEDfileCreate.c +--- med-4.1.0/src/hdfi/_MEDfileCreate.c 2021-12-03 09:35:30.677827161 +0100 ++++ med-4.1.0-new/src/hdfi/_MEDfileCreate.c 2021-12-03 09:32:31.894994147 +0100 +@@ -159,7 +159,7 @@ med_idt _MEDfileCreate(const char * cons + * En HDF5-1.10.0p1 cela n'a aucun effet ! + * Un test autoconf permet de fixer un intervalle de version HDF à MED. + */ +-#if H5_VERS_MINOR > 10 ++#if H5_VERS_MINOR > 14 + #error "Don't forget to change the compatibility version of the library !" + #endif + +diff -rupN med-4.1.0/src/hdfi/_MEDfileOpen.c med-4.1.0-new/src/hdfi/_MEDfileOpen.c +--- med-4.1.0/src/hdfi/_MEDfileOpen.c 2021-12-03 09:35:30.677827161 +0100 ++++ med-4.1.0-new/src/hdfi/_MEDfileOpen.c 2021-12-03 09:32:31.894994147 +0100 +@@ -72,7 +72,7 @@ med_idt _MEDfileOpen(const char * const + + • The creation order tracking property, H5P_CRT_ORDER_TRACKED, has been set in the group creation property list (see H5Pset_link_creation_order). + */ +-#if H5_VERS_MINOR > 10 ++#if H5_VERS_MINOR > 14 + #error "Don't forget to change the compatibility version of the library !" + #endif + /* L'avantage de bloquer le modèle interne HDF5 +diff -rupN med-4.1.0/src/hdfi/_MEDmemFileOpen.c med-4.1.0-new/src/hdfi/_MEDmemFileOpen.c +--- med-4.1.0/src/hdfi/_MEDmemFileOpen.c 2021-12-03 09:35:30.678827160 +0100 ++++ med-4.1.0-new/src/hdfi/_MEDmemFileOpen.c 2021-12-03 09:32:31.894994147 +0100 +@@ -434,7 +434,7 @@ med_idt _MEDmemFileOpen(const char * con + goto ERROR; + } + +-#if H5_VERS_MINOR > 10 ++#if H5_VERS_MINOR > 14 + #error "Don't forget to change the compatibility version of the library !" + #endif + if ( H5Pset_libver_bounds( _fapl, H5F_LIBVER_18, H5F_LIBVER_18) ) { +diff -rupN med-4.1.0/src/hdfi/_MEDparFileCreate.c med-4.1.0-new/src/hdfi/_MEDparFileCreate.c +--- med-4.1.0/src/hdfi/_MEDparFileCreate.c 2021-12-03 09:35:30.678827160 +0100 ++++ med-4.1.0-new/src/hdfi/_MEDparFileCreate.c 2021-12-03 09:32:31.894994147 +0100 +@@ -64,7 +64,7 @@ med_idt _MEDparFileCreate(const char * c + * En HDF5-1.10.0p1 cela n'a aucun effet ! + * Un test autoconf permet de fixer un intervalle de version HDF à MED. + */ +-#if H5_VERS_MINOR > 10 ++#if H5_VERS_MINOR > 14 + #error "Don't forget to change the compatibility version of the library !" + #endif + +diff -rupN med-4.1.0/src/hdfi/_MEDparFileOpen.c med-4.1.0-new/src/hdfi/_MEDparFileOpen.c +--- med-4.1.0/src/hdfi/_MEDparFileOpen.c 2021-12-03 09:35:30.679827159 +0100 ++++ med-4.1.0-new/src/hdfi/_MEDparFileOpen.c 2021-12-03 09:32:31.894994147 +0100 +@@ -55,7 +55,7 @@ med_idt _MEDparFileOpen(const char * con + MED_ERR_(_fid,MED_ERR_INIT,MED_ERR_PROPERTY,MED_ERR_PARALLEL_MSG); + goto ERROR; + } +-#if H5_VERS_MINOR > 10 ++#if H5_VERS_MINOR > 14 + #error "Don't forget to change the compatibility version of the library !" + #endif + if ( H5Pset_libver_bounds( _fapl, H5F_LIBVER_18, H5F_LIBVER_18 ) ) { diff --git a/backports/libnest2d/APKBUILD b/backports/libnest2d/APKBUILD new file mode 100644 index 0000000..3cb42f7 --- /dev/null +++ b/backports/libnest2d/APKBUILD @@ -0,0 +1,40 @@ +# Contributor: Anjandev Momi +# Maintainer: Anjandev Momi +pkgname=libnest2d +pkgver=0.4 +pkgrel=5 +pkgdesc="2D irregular bin packaging and nesting library written in modern C++" +url="https://github.com/tamasmeszaros/libnest2d" +arch="noarch" +license="LGPL-3.0-only" +makedepends="samurai cmake clipper-dev boost-dev nlopt-dev" +subpackages="$pkgname-dev" +source="$pkgname-$pkgver.tar.gz::https://github.com/tamasmeszaros/libnest2d/archive/refs/tags/$pkgver.tar.gz + allow-disallowed-area.patch" + +build() { + if [ "$CBUILD" != "$CHOST" ]; then + CMAKE_CROSSOPTS="-DCMAKE_SYSTEM_NAME=Linux -DCMAKE_HOST_SYSTEM_NAME=Linux" + fi + cmake -B build -G Ninja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DBUILD_SHARED_LIBS=True \ + -DCMAKE_BUILD_TYPE=minsizerel \ + $CMAKE_CROSSOPTS . + cmake --build build +} + +check() { + cd build + CTEST_OUTPUT_ON_FAILURE=TRUE ctest +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} + +sha512sums=" +fadce18986b844eed13a581f84055df909a17407a0980deb6c7c24248a969a537a8840650bcfc673e61973810ce9a008acb599e3b8e00c9bff6b566ca41cd62c libnest2d-0.4.tar.gz +2e8cd3343c72c576ecb54960d7ad9f4f2322f822b19ac41850b3b28da95e97c2cefe7c67de6c97627df08cd5cdc1660ce4dfa95fe51f88e0ff5c066c8d785458 allow-disallowed-area.patch +" diff --git a/backports/libnest2d/allow-disallowed-area.patch b/backports/libnest2d/allow-disallowed-area.patch new file mode 100644 index 0000000..479b9c4 --- /dev/null +++ b/backports/libnest2d/allow-disallowed-area.patch @@ -0,0 +1,124 @@ +From 2e91be2679b5efa0773292d9d0a2ae72255bb271 Mon Sep 17 00:00:00 2001 +From: Ghostkeeper +Date: Tue, 6 Oct 2020 16:13:15 +0200 +Subject: [PATCH 1/3] Allow for an item to be a disallowed area + +url: https://github.com/tamasmeszaros/libnest2d/pull/18 + +Disallowed areas have slightly different behaviour from fixed items: Other items won't get packed closely around them. Implementation of that pending. + +Contributes to issue CURA-7754. +--- + include/libnest2d/nester.hpp | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +diff --git a/include/libnest2d/nester.hpp b/include/libnest2d/nester.hpp +index 2f207d5..932a060 100644 +--- a/include/libnest2d/nester.hpp ++++ b/include/libnest2d/nester.hpp +@@ -71,6 +71,15 @@ class _Item { + int binid_{BIN_ID_UNSET}, priority_{0}; + bool fixed_{false}; + ++ /** ++ * \brief If this is a fixed area, indicates whether it is a disallowed area ++ * or a previously placed item. ++ * ++ * If this is a disallowed area, other objects will not get packed close ++ * together with this item. It only blocks other items in its area. ++ */ ++ bool disallowed_{false}; ++ + public: + + /// The type of the shape which was handed over as the template argument. +@@ -129,11 +138,18 @@ class _Item { + sh_(sl::create(std::move(contour), std::move(holes))) {} + + inline bool isFixed() const noexcept { return fixed_; } ++ inline bool isDisallowedArea() const noexcept { return disallowed_; } + inline void markAsFixedInBin(int binid) + { + fixed_ = binid >= 0; + binid_ = binid; + } ++ inline void markAsDisallowedAreaInBin(int binid) ++ { ++ fixed_ = binid >= 0; ++ binid_ = binid; ++ disallowed_ = true; ++ } + + inline void binId(int idx) { binid_ = idx; } + inline int binId() const noexcept { return binid_; } + +From ff61049e59d3151462bca7ff2e2268c2b32731e7 Mon Sep 17 00:00:00 2001 +From: Ghostkeeper +Date: Tue, 6 Oct 2020 16:14:36 +0200 +Subject: [PATCH 2/3] Allow unsetting of being a disallowed area + +If you set the bin to -1 or set the item to be a simple fixed item afterwards, it'll no longer be a disallowed area. + +Contributes to issue CURA-7754. +--- + include/libnest2d/nester.hpp | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/include/libnest2d/nester.hpp b/include/libnest2d/nester.hpp +index 932a060..54761a6 100644 +--- a/include/libnest2d/nester.hpp ++++ b/include/libnest2d/nester.hpp +@@ -143,12 +143,13 @@ class _Item { + { + fixed_ = binid >= 0; + binid_ = binid; ++ disallowed_ = false; + } + inline void markAsDisallowedAreaInBin(int binid) + { + fixed_ = binid >= 0; + binid_ = binid; +- disallowed_ = true; ++ disallowed_ = fixed_; + } + + inline void binId(int idx) { binid_ = idx; } + +From 31391fd173249ad9b906390058e13b09238fadc8 Mon Sep 17 00:00:00 2001 +From: Ghostkeeper +Date: Thu, 8 Oct 2020 11:06:58 +0200 +Subject: [PATCH 3/3] Align items to their starting position if all placed + items are disallowed + +We shouldn't align items to disallowed areas. So place them in the starting position according to the alignment property. + +Lot of work to investigate. But very little code changes! + +Contributes to issue CURA-7754. +--- + include/libnest2d/placers/nfpplacer.hpp | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/include/libnest2d/placers/nfpplacer.hpp b/include/libnest2d/placers/nfpplacer.hpp +index 96a8cff..b0ebb15 100644 +--- a/include/libnest2d/placers/nfpplacer.hpp ++++ b/include/libnest2d/placers/nfpplacer.hpp +@@ -101,7 +101,7 @@ struct NfpPConfig { + * alignment with the candidate item or do anything else. + * + * \param remaining A container with the remaining items waiting to be +- * placed. You can use some features about the remaining items to alter to ++ * placed. You can use some features about the remaining items to alter the + * score of the current placement. If you know that you have to leave place + * for other items as well, that might influence your decision about where + * the current candidate should be placed. E.g. imagine three big circles +@@ -735,7 +735,8 @@ class _NofitPolyPlacer: public PlacerBoilerplate<_NofitPolyPlacer +# Maintainer: Alex Yam +pkgname=libspatialindex +pkgver=0_git20210205 +_commit=8ee223632f95c81f49f5eb2d547ad973475c4601 +pkgrel=1 +pkgdesc="extensible framework for robust spatial indexing methods" +url="https://libspatialindex.org/" +arch="all" +license="MIT" +makedepends="cmake" +subpackages="$pkgname-dev" +source="$pkgname-$_commit.tar.gz::https://github.com/libspatialindex/libspatialindex/archive/$_commit.tar.gz" +builddir="$srcdir/$pkgname-$_commit" + +build() { + cmake -B build \ + -DCMAKE_BUILD_TYPE=MinSizeRel \ + -DCMAKE_PREFIX_PATH=/usr \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_TESTING=ON + cmake --build build +} + +check() { + cd build && ctest +} + +package() { + DESTDIR="$pkgdir" cmake --build build --target install +} + +sha512sums="caf91aac77b75445e4fc4d0baedcd10c619b2097dfd841b00339d9ddd4b73db05b99de1d84be88f1083f4713a936cf110d5851523491f5a74c6f96e1d5795dbb libspatialindex-8ee223632f95c81f49f5eb2d547ad973475c4601.tar.gz" diff --git a/backports/nb/APKBUILD b/backports/nb/APKBUILD index 9540e5c..d8b8b08 100644 --- a/backports/nb/APKBUILD +++ b/backports/nb/APKBUILD @@ -1,7 +1,7 @@ # Contributor: Quillith # Maintainer: Quillith pkgname=nb -pkgver=7.19.1 +pkgver=7.12.1 pkgrel=0 pkgdesc="Command line note-taking, bookmarking, archiving, and knowledge base application" url="https://github.com/xwmx/nb" @@ -41,5 +41,5 @@ full() { } sha512sums=" -fdfcedc5a32c1a5fe62b00141e25193bc33eee9249fef559938f2b4baf0bff5eb7cc792db3c664c68afb2ba2db84303432790ae5254a9cdd319ce4d9a9face9f nb-7.19.1.tar.gz +ed3d41a809e39a19711c6c97c38216f17f144b8b474eb94aec4134f9756da03440073f3f6557acf8f7959d3d9fba6392d1d5f59e8b94d5269b7336b11353457e nb-7.12.1.tar.gz " diff --git a/backports/nlopt/APKBUILD b/backports/nlopt/APKBUILD new file mode 100644 index 0000000..0be29fe --- /dev/null +++ b/backports/nlopt/APKBUILD @@ -0,0 +1,38 @@ +# Contributor: Anjandev Momi +# Maintainer: Anjandev Momi +pkgname=nlopt +pkgver=2.7.1 +pkgrel=0 +pkgdesc="library for nonlinear optimization, wrapping many algorithms for global and local, constrained or unconstrained, optimization" +url="https://github.com/stevengj/nlopt/" +arch="all" +license="LGPL-2.1-or-later" +makedepends="samurai cmake" +subpackages="$pkgname-dev $pkgname-doc" +source="$pkgname-$pkgver.tar.gz::https://github.com/stevengj/nlopt/archive/refs/tags/v$pkgver.tar.gz" + +build() { + if [ "$CBUILD" != "$CHOST" ]; then + CMAKE_CROSSOPTS="-DCMAKE_SYSTEM_NAME=Linux -DCMAKE_HOST_SYSTEM_NAME=Linux" + fi + cmake -B build -G Ninja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DBUILD_SHARED_LIBS=True \ + -DCMAKE_BUILD_TYPE=minsizerel \ + $CMAKE_CROSSOPTS . + cmake --build build +} + +check() { + cd build + CTEST_OUTPUT_ON_FAILURE=TRUE ctest +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} + +sha512sums=" +e23cb522fc696010574c14b72be85acc0f8ccf0bf208bf2b8789c57d6c5a6e6d419ee10330581518b1c1567018ae909b626ce7761d4fbd5bf112916871e420e2 nlopt-2.7.1.tar.gz +" diff --git a/backports/openssl1.1-compat/APKBUILD b/backports/openssl1.1-compat/APKBUILD new file mode 100644 index 0000000..29eb65b --- /dev/null +++ b/backports/openssl1.1-compat/APKBUILD @@ -0,0 +1,177 @@ +# Contributor: Ariadne Conill +# Maintainer: Timo Teras +pkgname=openssl1.1-compat +pkgver=1.1.1w +_abiver=${pkgver%.*} +pkgrel=0 +pkgdesc="toolkit for transport layer security (TLS) - version 1.1" +url="https://www.openssl.org/" +arch="all" +license="OpenSSL" +replaces="libressl" +depends_dev="!openssl-dev" +makedepends_build="perl" +makedepends_host="linux-headers" +makedepends="$makedepends_host $makedepends_build" +subpackages="$pkgname-dbg $pkgname-libs-static:_static $pkgname-dev + libcrypto$_abiver:_libcrypto libssl$_abiver:_libssl" +source="https://www.openssl.org/source/openssl-$pkgver.tar.gz + man-section.patch + ppc64.patch + " +builddir="$srcdir/openssl-$pkgver" +pcprefix="openssl$_abiver:pc:" + +# secfixes: +# 1.1.1u-r1: +# - CVE-2023-3446 +# 1.1.1t-r2: +# - CVE-2023-0465 +# 1.1.1t-r1: +# - CVE-2023-0464 +# 1.1.1t-r0: +# - CVE-2022-4304 +# - CVE-2022-4450 +# - CVE-2023-0215 +# - CVE-2023-0286 +# 1.1.1q-r0: +# - CVE-2022-2097 +# 1.1.1n-r0: +# - CVE-2022-0778 +# 1.1.1l-r0: +# - CVE-2021-3711 +# - CVE-2021-3712 +# 1.1.1k-r0: +# - CVE-2021-3449 +# - CVE-2021-3450 +# 1.1.1j-r0: +# - CVE-2021-23841 +# - CVE-2021-23840 +# - CVE-2021-23839 +# 1.1.1i-r0: +# - CVE-2020-1971 +# 1.1.1g-r0: +# - CVE-2020-1967 +# 1.1.1d-r3: +# - CVE-2019-1551 +# 1.1.1d-r1: +# - CVE-2019-1547 +# - CVE-2019-1549 +# - CVE-2019-1563 +# 1.1.1b-r1: +# - CVE-2019-1543 +# 1.1.1a-r0: +# - CVE-2018-0734 +# - CVE-2018-0735 +# 0: +# - CVE-2022-1292 +# - CVE-2022-2068 + +build() { + local _target _optflags + + # openssl will prepend crosscompile always core CC et al + CC=${CC#${CROSS_COMPILE}} + CXX=${CXX#${CROSS_COMPILE}} + CPP=${CPP#${CROSS_COMPILE}} + + # determine target OS for openssl + case "$CARCH" in + aarch64*) _target="linux-aarch64" ;; + arm*) _target="linux-armv4" ;; + mips64*) _target="linux64-mips64" ;; + # explicit _optflags is needed to prevent automatic -mips3 addition + mips*) _target="linux-mips32"; _optflags="-mips32" ;; + ppc) _target="linux-ppc" ;; + ppc64) _target="linux-ppc64" ;; + ppc64le) _target="linux-ppc64le" ;; + x86) _target="linux-elf" ;; + x86_64) _target="linux-x86_64"; _optflags="enable-ec_nistp_64_gcc_128" ;; + s390x) _target="linux64-s390x";; + riscv64) _target="linux-generic64";; + *) msg "Unable to determine architecture from (CARCH=$CARCH)" ; return 1 ;; + esac + + # Configure assumes --options are for it, so can't use + # gcc's --sysroot fake this by overriding CC + [ -n "$CBUILDROOT" ] && CC="$CC --sysroot=$CBUILDROOT" + + # when cross building do not enable threads as libatomic is not avaiable + if [ "$CBUILD" != "$CHOST" ]; then + case $CARCH in + riscv64) _optflags="$_optflags no-threads";; + esac + fi + + perl ./Configure \ + $_target \ + --prefix=/usr \ + --libdir=lib \ + --openssldir=/etc/ssl1.1 \ + shared \ + no-zlib \ + no-async \ + no-comp \ + no-idea \ + no-mdc2 \ + no-rc5 \ + no-ec2m \ + no-sm2 \ + no-sm4 \ + no-ssl2 \ + no-ssl3 \ + no-seed \ + no-weak-ssl-ciphers \ + $_optflags \ + $CPPFLAGS \ + $CFLAGS \ + $LDFLAGS -Wa,--noexecstack + make +} + +check() { + # AFALG tests have a sporadic test failure, just delete the broken + # test for now. + rm -f test/recipes/30-test_afalg.t + + make test +} + +package() { + make DESTDIR="$pkgdir" install_sw install_ssldirs + # remove the script c_rehash + rm "$pkgdir"/usr/bin/c_rehash + mv -f "$pkgdir"/usr/bin/openssl "$pkgdir"/usr/bin/openssl$_abiver +} + +_libcrypto() { + pkgdesc="Crypto library from openssl" + replaces="libressl2.7-libcrypto" + mkdir -p "$subpkgdir"/lib "$subpkgdir"/usr/lib + mv "$pkgdir"/etc "$subpkgdir"/ + for i in "$pkgdir"/usr/lib/libcrypto*; do + mv $i "$subpkgdir"/lib/ + ln -s ../../lib/${i##*/} "$subpkgdir"/usr/lib/${i##*/} + done + mv "$pkgdir"/usr/lib/engines-$_abiver "$subpkgdir"/usr/lib/ +} + +_libssl() { + pkgdesc="SSL shared libraries" + + mkdir -p "$subpkgdir"/lib "$subpkgdir"/usr/lib + for i in "$pkgdir"/usr/lib/libssl*; do + mv $i "$subpkgdir"/lib/ + ln -s ../../lib/${i##*/} "$subpkgdir"/usr/lib/${i##*/} + done +} + +_static() { + default_static +} + +sha512sums=" +b4c625fe56a4e690b57b6a011a225ad0cb3af54bd8fb67af77b5eceac55cc7191291d96a660c5b568a08a2fbf62b4612818e7cca1bb95b2b6b4fc649b0552b6d openssl-1.1.1w.tar.gz +43c3255118db6f5f340dc865c0f25ccbcafe5bf7507585244ca59b4d27daf533d6c3171aa32a8685cbb6200104bec535894b633de13feaadff87ab86739a445a man-section.patch +e040f23770d52b988578f7ff84d77563340f37c026db7643db8e4ef18e795e27d10cb42cb8656da4d9c57a28283a2828729d70f940edc950c3422a54fea55509 ppc64.patch +" diff --git a/backports/openssl1.1-compat/man-section.patch b/backports/openssl1.1-compat/man-section.patch new file mode 100644 index 0000000..0606897 --- /dev/null +++ b/backports/openssl1.1-compat/man-section.patch @@ -0,0 +1,54 @@ +From: Debian OpenSSL Team +Date: Sun, 5 Nov 2017 15:09:09 +0100 +Subject: man-section + +--- + Configurations/unix-Makefile.tmpl | 6 ++++-- + util/process_docs.pl | 3 ++- + 2 files changed, 6 insertions(+), 3 deletions(-) + +diff --git a/Configurations/unix-Makefile.tmpl b/Configurations/unix-Makefile.tmpl +index 1292053546f5..c034d21884d8 100644 +--- a/Configurations/unix-Makefile.tmpl ++++ b/Configurations/unix-Makefile.tmpl +@@ -183,7 +183,8 @@ HTMLDIR=$(DOCDIR)/html + # MANSUFFIX is for the benefit of anyone who may want to have a suffix + # appended after the manpage file section number. "ssl" is popular, + # resulting in files such as config.5ssl rather than config.5. +-MANSUFFIX= ++MANSUFFIX=ssl ++MANSECTION=SSL + HTMLSUFFIX=html + + # For "optional" echo messages, to get "real" silence +@@ -726,7 +727,8 @@ uninstall_runtime: uninstall_programs uninstall_runtime_libs + @[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1) + @$(ECHO) "*** Installing manpages" + $(PERL) $(SRCDIR)/util/process_docs.pl \ +- "--destdir=$(DESTDIR)$(MANDIR)" --type=man --suffix=$(MANSUFFIX) ++ "--destdir=$(DESTDIR)$(MANDIR)" --type=man --suffix=$(MANSUFFIX) \ ++ --mansection=$(MANSECTION) + + uninstall_man_docs: + @$(ECHO) "*** Uninstalling manpages" +diff --git a/util/process_docs.pl b/util/process_docs.pl +index 30b149eb8fcc..424155ea808e 100755 +--- a/util/process_docs.pl ++++ b/util/process_docs.pl +@@ -37,6 +37,7 @@ GetOptions(\%options, + 'type=s', # The result type, 'man' or 'html' + 'suffix:s', # Suffix to add to the extension. + # Only used with type=man ++ 'mansection:s', # Section to put to manpage in + 'remove', # To remove files rather than writing them + 'dry-run|n', # Only output file names on STDOUT + 'debug|D+', +@@ -97,7 +98,7 @@ foreach my $section (sort @{$options{section}}) { + my $name = uc $podname; + my $suffix = { man => ".$podinfo{section}".($options{suffix} // ""), + html => ".html" } -> {$options{type}}; +- my $generate = { man => "pod2man --name=$name --section=$podinfo{section} --center=OpenSSL --release=$config{version} \"$podpath\"", ++ my $generate = { man => "pod2man --name=$name --section=$podinfo{section}$options{mansection} --center=OpenSSL --release=$config{version} \"$podpath\"", + html => "pod2html \"--podroot=$options{sourcedir}\" --htmldir=$updir --podpath=man1:man3:man5:man7 \"--infile=$podpath\" \"--title=$podname\" --quiet" + } -> {$options{type}}; + my $output_dir = catdir($options{destdir}, "man$podinfo{section}"); diff --git a/backports/openssl1.1-compat/ppc64.patch b/backports/openssl1.1-compat/ppc64.patch new file mode 100644 index 0000000..c75ceed --- /dev/null +++ b/backports/openssl1.1-compat/ppc64.patch @@ -0,0 +1,96 @@ +From 34ab13b7d8e3e723adb60be8142e38b7c9cd382a Mon Sep 17 00:00:00 2001 +From: Andy Polyakov +Date: Sun, 5 May 2019 18:25:50 +0200 +Subject: [PATCH] crypto/perlasm/ppc-xlate.pl: add linux64v2 flavour +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This is a big endian ELFv2 configuration. ELFv2 was already being +used for little endian, and big endian was traditionally ELFv1 +but there are practical configurations that use ELFv2 with big +endian nowadays (Adélie Linux, Void Linux, possibly Gentoo, etc.) + +Reviewed-by: Paul Dale +Reviewed-by: Richard Levitte +(Merged from https://github.com/openssl/openssl/pull/8883) +--- + crypto/perlasm/ppc-xlate.pl | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/crypto/perlasm/ppc-xlate.pl b/crypto/perlasm/ppc-xlate.pl +index e52f2f6ea62..5fcd0526dff 100755 +--- a/crypto/perlasm/ppc-xlate.pl ++++ b/crypto/perlasm/ppc-xlate.pl +@@ -49,7 +49,7 @@ + /osx/ && do { $name = "_$name"; + last; + }; +- /linux.*(32|64le)/ ++ /linux.*(32|64(le|v2))/ + && do { $ret .= ".globl $name"; + if (!$$type) { + $ret .= "\n.type $name,\@function"; +@@ -80,7 +80,7 @@ + }; + my $text = sub { + my $ret = ($flavour =~ /aix/) ? ".csect\t.text[PR],7" : ".text"; +- $ret = ".abiversion 2\n".$ret if ($flavour =~ /linux.*64le/); ++ $ret = ".abiversion 2\n".$ret if ($flavour =~ /linux.*64(le|v2)/); + $ret; + }; + my $machine = sub { +@@ -186,7 +186,7 @@ + + # Some ABIs specify vrsave, special-purpose register #256, as reserved + # for system use. +-my $no_vrsave = ($flavour =~ /aix|linux64le/); ++my $no_vrsave = ($flavour =~ /aix|linux64(le|v2)/); + my $mtspr = sub { + my ($f,$idx,$ra) = @_; + if ($idx == 256 && $no_vrsave) { +@@ -318,7 +318,7 @@ sub vfour { + if ($label) { + my $xlated = ($GLOBALS{$label} or $label); + print "$xlated:"; +- if ($flavour =~ /linux.*64le/) { ++ if ($flavour =~ /linux.*64(le|v2)/) { + if ($TYPES{$label} =~ /function/) { + printf "\n.localentry %s,0\n",$xlated; + } + +From 098404128383ded87ba390dd74ecd9e2ffa6f530 Mon Sep 17 00:00:00 2001 +From: Andy Polyakov +Date: Sun, 5 May 2019 18:30:55 +0200 +Subject: [PATCH] Configure: use ELFv2 ABI on some ppc64 big endian systems + +If _CALL_ELF is defined to be 2, it's an ELFv2 system. +Conditionally switch to the v2 perlasm scheme. + +Reviewed-by: Paul Dale +Reviewed-by: Richard Levitte +(Merged from https://github.com/openssl/openssl/pull/8883) +--- + Configure | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) + +diff --git a/Configure b/Configure +index 22082deb4c7..e303d98deb3 100755 +--- a/Configure ++++ b/Configure +@@ -1402,8 +1402,15 @@ + my %predefined_C = compiler_predefined($config{CROSS_COMPILE}.$config{CC}); + my %predefined_CXX = $config{CXX} + ? compiler_predefined($config{CROSS_COMPILE}.$config{CXX}) + : (); + ++unless ($disabled{asm}) { ++ # big endian systems can use ELFv2 ABI ++ if ($target eq "linux-ppc64") { ++ $target{perlasm_scheme} = "linux64v2" if ($predefined_C{_CALL_ELF} == 2); ++ } ++} ++ + # Check for makedepend capabilities. + if (!$disabled{makedepend}) { + if ($config{target} =~ /^(VC|vms)-/) { diff --git a/backports/openterface-qt/348_address-use-of-deleted-function.patch b/backports/openterface-qt/348_address-use-of-deleted-function.patch deleted file mode 100644 index 2783740..0000000 --- a/backports/openterface-qt/348_address-use-of-deleted-function.patch +++ /dev/null @@ -1,23 +0,0 @@ -diff --git a/serial/SerialPortManager.cpp.orig b/serial/SerialPortManager.cpp -index 22565b5..d444eee 100644 ---- a/serial/SerialPortManager.cpp.orig -+++ b/serial/SerialPortManager.cpp -@@ -1945,8 +1945,9 @@ void SerialPortManager::attemptRecovery() - } - } else { - qCWarning(log_core_serial) << "Serial port recovery attempt failed"; -- if (eventCallback) { -- eventCallback->onStatusUpdate(QString("Recovery attempt %1 failed").arg(m_connectionRetryCount)); -+ if (eventCallback) { -+ int crc = m_connectionRetryCount; -+ eventCallback->onStatusUpdate(QString("Recovery attempt %1 failed").arg(crc)); - } - - // Try again if we haven't exceeded max attempts -@@ -2034,4 +2035,4 @@ void SerialPortManager::applyCommandBasedBaudrateChange(int baudRate, const QStr - } else { - qCWarning(log_core_serial) << logPrefix << "Failed to apply user selected baudrate:" << baudRate; - } --} -\ No newline at end of file -+} diff --git a/backports/openterface-qt/423_deduplicate-logging-categories-and-remove-backslashes.patch b/backports/openterface-qt/423_deduplicate-logging-categories-and-remove-backslashes.patch deleted file mode 100644 index 5e762ff..0000000 --- a/backports/openterface-qt/423_deduplicate-logging-categories-and-remove-backslashes.patch +++ /dev/null @@ -1,586 +0,0 @@ -From 4478cfb004d3db7797e99fd3bdb23bf880a9c85b Mon Sep 17 00:00:00 2001 -From: John Lane <1786613+johnlane@users.noreply.github.com> -Date: Wed, 3 Dec 2025 21:19:33 +0000 -Subject: [PATCH 1/2] Remove additional backslashes and add missing cpp and h - files - ---- - openterfaceQT.pro | 28 +++++++++++++++++++--------- - 1 file changed, 19 insertions(+), 9 deletions(-) - -diff --git a/openterfaceQT.pro b/openterfaceQT.pro -index 3460dbac..f0d878e8 100644 ---- a/openterfaceQT.pro -+++ b/openterfaceQT.pro -@@ -84,16 +84,26 @@ SOURCES += main.cpp \ - !win32 { - SOURCES += host/backend/ffmpegbackendhandler.cpp \ - host/backend/gstreamerbackendhandler.cpp \ -- host/backend/gstreamer/sinkselector.cpp \\ -- host/backend/gstreamer/queueconfigurator.cpp \\ -- host/backend/gstreamer/videooverlaymanager.cpp \\ -- host/backend/gstreamer/pipelinebuilder.cpp -+ host/backend/gstreamer/pipelinefactory.cpp \ -+ host/backend/gstreamer/externalgstrunner.cpp \ -+ host/backend/gstreamer/inprocessgstrunner.cpp \ -+ host/backend/gstreamer/sinkselector.cpp \ -+ host/backend/gstreamer/queueconfigurator.cpp \ -+ host/backend/gstreamer/videooverlaymanager.cpp \ -+ host/backend/gstreamer/pipelinebuilder.cpp \ -+ host/backend/gstreamer/recordingmanager.cpp \ -+ host/backend/gstreamer/gstreamerhelpers.cpp - HEADERS += host/backend/ffmpegbackendhandler.h \ - host/backend/gstreamerbackendhandler.h \ -- host/backend/gstreamer/sinkselector.h \\ -- host/backend/gstreamer/queueconfigurator.h \\ -- host/backend/gstreamer/videooverlaymanager.h \\ -- host/backend/gstreamer/pipelinebuilder.h -+ host/backend/gstreamer/pipelinefactory.h \ -+ host/backend/gstreamer/externalgstrunner.h \ -+ host/backend/gstreamer/inprocessgstrunner.h \ -+ host/backend/gstreamer/sinkselector.h \ -+ host/backend/gstreamer/queueconfigurator.h \ -+ host/backend/gstreamer/videooverlaymanager.h \ -+ host/backend/gstreamer/pipelinebuilder.h \ -+ host/backend/gstreamer/recordingmanager.h \ -+ host/backend/gstreamer/gstreamerhelpers.h - } - - -@@ -263,4 +273,4 @@ TRANSLATIONS += config/languages/openterface_en.ts \ - config/languages/openterface_se.ts \ - config/languages/openterface_de.ts \ - config/languages/openterface_zh.ts -- # Add more languages here -\ No newline at end of file -+ # Add more languages here - -From ccd8f51fe510684439edf0d5f8083e4dd1423836 Mon Sep 17 00:00:00 2001 -From: John Lane <1786613+johnlane@users.noreply.github.com> -Date: Wed, 3 Dec 2025 21:26:20 +0000 -Subject: [PATCH 2/2] De-duplicate logging categories - ---- - host/backend/gstreamer/gstreamerhelpers.cpp | 22 ++-- - host/backend/gstreamer/queueconfigurator.cpp | 8 +- - .../backend/gstreamer/videooverlaymanager.cpp | 118 +++++++++--------- - 3 files changed, 74 insertions(+), 74 deletions(-) - -diff --git a/host/backend/gstreamer/gstreamerhelpers.cpp b/host/backend/gstreamer/gstreamerhelpers.cpp -index 6fc1dd6e..4739da17 100644 ---- a/host/backend/gstreamer/gstreamerhelpers.cpp -+++ b/host/backend/gstreamer/gstreamerhelpers.cpp -@@ -4,7 +4,7 @@ - #include - #include - --Q_LOGGING_CATEGORY(log_gstreamer_backend, "opf.backend.gstreamer") -+Q_LOGGING_CATEGORY(log_gstreamer_gstreamerhelpers, "opf.backend.gstreamerhelpers") - - using namespace Openterface::GStreamer::GstHelpers; - -@@ -16,7 +16,7 @@ bool Openterface::GStreamer::GstHelpers::setPipelineStateWithTimeout(void* eleme - { - if (!elementPtr) { - if (outError) *outError = QStringLiteral("Element pointer is null"); -- qCWarning(log_gstreamer_backend) << "setPipelineStateWithTimeout: element pointer is null"; -+ qCWarning(log_gstreamer_gstreamerhelpers) << "setPipelineStateWithTimeout: element pointer is null"; - return false; - } - -@@ -24,7 +24,7 @@ bool Openterface::GStreamer::GstHelpers::setPipelineStateWithTimeout(void* eleme - - GstStateChangeReturn ret = gst_element_set_state(element, static_cast(targetState)); - if (ret == GST_STATE_CHANGE_FAILURE) { -- qCCritical(log_gstreamer_backend) << "Failed to set element state to" << targetState; -+ qCCritical(log_gstreamer_gstreamerhelpers) << "Failed to set element state to" << targetState; - // Try to pull any error from the bus for diagnostics - // Caller may pass a bus to parseAndLogGstErrorMessage, but we don't have it here. - if (outError) *outError = QStringLiteral("Failed to set state (GST_STATE_CHANGE_FAILURE)"); -@@ -35,13 +35,13 @@ bool Openterface::GStreamer::GstHelpers::setPipelineStateWithTimeout(void* eleme - ret = gst_element_get_state(element, &state, &pending, static_cast(timeoutMs) * GST_MSECOND); - if (ret == GST_STATE_CHANGE_FAILURE) { - if (outError) *outError = QStringLiteral("State change failure"); -- qCCritical(log_gstreamer_backend) << "State change failure waiting for target state"; -+ qCCritical(log_gstreamer_gstreamerhelpers) << "State change failure waiting for target state"; - return false; - } - - if (state != static_cast(targetState)) { - if (outError) *outError = QStringLiteral("Element did not reach target state in timeout"); -- qCCritical(log_gstreamer_backend) << "Element failed to reach state" << targetState << "(current:" << state << ", pending:" << pending << ")"; -+ qCCritical(log_gstreamer_gstreamerhelpers) << "Element failed to reach state" << targetState << "(current:" << state << ", pending:" << pending << ")"; - return false; - } - -@@ -51,14 +51,14 @@ bool Openterface::GStreamer::GstHelpers::setPipelineStateWithTimeout(void* eleme - void Openterface::GStreamer::GstHelpers::parseAndLogGstErrorMessage(void* busPtr, const char* context) - { - if (!busPtr) { -- qCWarning(log_gstreamer_backend) << "Bus not available for error details" << (context ? context : ""); -+ qCWarning(log_gstreamer_gstreamerhelpers) << "Bus not available for error details" << (context ? context : ""); - return; - } - - GstBus* bus = static_cast(busPtr); - GstMessage* msg = gst_bus_pop_filtered(bus, GST_MESSAGE_ERROR); - if (!msg) { -- qCDebug(log_gstreamer_backend) << "No error message available on bus" << (context ? context : ""); -+ qCDebug(log_gstreamer_gstreamerhelpers) << "No error message available on bus" << (context ? context : ""); - return; - } - -@@ -66,8 +66,8 @@ void Openterface::GStreamer::GstHelpers::parseAndLogGstErrorMessage(void* busPtr - gchar* debug_info = nullptr; - gst_message_parse_error(msg, &error, &debug_info); - -- qCCritical(log_gstreamer_backend) << "GStreamer Error:" << (error ? error->message : "Unknown") << (context ? context : ""); -- qCCritical(log_gstreamer_backend) << "Debug info:" << (debug_info ? debug_info : "None"); -+ qCCritical(log_gstreamer_gstreamerhelpers) << "GStreamer Error:" << (error ? error->message : "Unknown") << (context ? context : ""); -+ qCCritical(log_gstreamer_gstreamerhelpers) << "Debug info:" << (debug_info ? debug_info : "None"); - - if (error) g_error_free(error); - if (debug_info) g_free(debug_info); -@@ -79,13 +79,13 @@ void Openterface::GStreamer::GstHelpers::parseAndLogGstErrorMessage(void* busPtr - bool Openterface::GStreamer::GstHelpers::setPipelineStateWithTimeout(void* /*elementPtr*/, int /*targetState*/, int /*timeoutMs*/, QString* outError) - { - if (outError) *outError = QStringLiteral("GStreamer not available in this build"); -- qCWarning(log_gstreamer_backend) << "setPipelineStateWithTimeout called but GStreamer is not compiled in"; -+ qCWarning(log_gstreamer_gstreamerhelpers) << "setPipelineStateWithTimeout called but GStreamer is not compiled in"; - return false; - } - - void Openterface::GStreamer::GstHelpers::parseAndLogGstErrorMessage(void* /*busPtr*/, const char* context) - { -- qCDebug(log_gstreamer_backend) << "GStreamer not compiled in - no bus to parse" << (context ? context : ""); -+ qCDebug(log_gstreamer_gstreamerhelpers) << "GStreamer not compiled in - no bus to parse" << (context ? context : ""); - } - - #endif // HAVE_GSTREAMER -diff --git a/host/backend/gstreamer/queueconfigurator.cpp b/host/backend/gstreamer/queueconfigurator.cpp -index b7bea42e..12290193 100644 ---- a/host/backend/gstreamer/queueconfigurator.cpp -+++ b/host/backend/gstreamer/queueconfigurator.cpp -@@ -8,7 +8,7 @@ - #include - #endif - --Q_LOGGING_CATEGORY(log_gstreamer_backend, "opf.backend.gstreamer") -+Q_LOGGING_CATEGORY(log_gstreamer_queueconfigurator, "opf.backend.queueconfigurator") - - using namespace Openterface::GStreamer; - -@@ -26,10 +26,10 @@ void QueueConfigurator::configureDisplayQueue(void* pipeline) - "max-size-time", G_GUINT64_CONSTANT(100000000), // 100ms - "leaky", 2, // GST_QUEUE_LEAK_DOWNSTREAM - NULL); -- qCDebug(log_gstreamer_backend) << "✓ Configured display queue with higher priority for qtsink"; -+ qCDebug(log_gstreamer_queueconfigurator) << "✓ Configured display queue with higher priority for qtsink"; - gst_object_unref(displayQueue); - } else { -- qCDebug(log_gstreamer_backend) << "Display queue element not found (no named display-queue)"; -+ qCDebug(log_gstreamer_queueconfigurator) << "Display queue element not found (no named display-queue)"; - } - #else - Q_UNUSED(pipeline); -@@ -50,7 +50,7 @@ void QueueConfigurator::configureRecordingQueue(void* pipeline) - "max-size-time", G_GUINT64_CONSTANT(500000000), // 500ms - "leaky", 1, // GST_QUEUE_LEAK_UPSTREAM - NULL); -- qCDebug(log_gstreamer_backend) << "✓ Configured recording queue with lower priority relative to display"; -+ qCDebug(log_gstreamer_queueconfigurator) << "✓ Configured recording queue with lower priority relative to display"; - gst_object_unref(recordingQueue); - } - #else -diff --git a/host/backend/gstreamer/videooverlaymanager.cpp b/host/backend/gstreamer/videooverlaymanager.cpp -index d8bf42f3..2dbe3bbf 100644 ---- a/host/backend/gstreamer/videooverlaymanager.cpp -+++ b/host/backend/gstreamer/videooverlaymanager.cpp -@@ -22,7 +22,7 @@ static int x11_overlay_error_handler_local(Display* display, XErrorEvent* error) - } - #endif - --Q_LOGGING_CATEGORY(log_gstreamer_backend, "opf.backend.gstreamer") -+Q_LOGGING_CATEGORY(log_gstreamer_videooverlaymanager, "opf.backend.videooverlaymanager") - - using namespace Openterface::GStreamer; - -@@ -30,36 +30,36 @@ bool VideoOverlayManager::embedVideoInWidget(void* pipeline, QWidget* widget) - { - #ifdef HAVE_GSTREAMER - if (!widget || !pipeline) { -- qCWarning(log_gstreamer_backend) << "Cannot embed video: widget or pipeline is null"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "Cannot embed video: widget or pipeline is null"; - return false; - } - - GstElement* videoSink = gst_bin_get_by_name(GST_BIN(pipeline), "videosink"); - if (!videoSink) { -- qCWarning(log_gstreamer_backend) << "No video sink element named 'videosink' found in pipeline"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "No video sink element named 'videosink' found in pipeline"; - videoSink = gst_bin_get_by_interface(GST_BIN(pipeline), GST_TYPE_VIDEO_OVERLAY); - if (!videoSink) { -- qCWarning(log_gstreamer_backend) << "No video overlay interface found in pipeline either"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "No video overlay interface found in pipeline either"; - return false; - } - } - - WId winId = widget->winId(); - if (winId) { -- qCDebug(log_gstreamer_backend) << "Embedding video in widget with window ID:" << winId; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Embedding video in widget with window ID:" << winId; - gst_video_overlay_set_window_handle(GST_VIDEO_OVERLAY(videoSink), winId); - gst_object_unref(videoSink); -- qCDebug(log_gstreamer_backend) << "Video embedded in widget successfully"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Video embedded in widget successfully"; - return true; - } else { -- qCWarning(log_gstreamer_backend) << "Widget window ID is null, cannot embed video"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "Widget window ID is null, cannot embed video"; - gst_object_unref(videoSink); - return false; - } - #else - Q_UNUSED(pipeline) - Q_UNUSED(widget) -- qCDebug(log_gstreamer_backend) << "Using autovideosink for video output (no in-process GStreamer)"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Using autovideosink for video output (no in-process GStreamer)"; - return true; - #endif - } -@@ -68,36 +68,36 @@ bool VideoOverlayManager::embedVideoInGraphicsView(void* pipeline, QGraphicsView - { - #ifdef HAVE_GSTREAMER - if (!view || !pipeline) { -- qCWarning(log_gstreamer_backend) << "Cannot embed video: graphics view or pipeline is null"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "Cannot embed video: graphics view or pipeline is null"; - return false; - } - - GstElement* videoSink = gst_bin_get_by_name(GST_BIN(pipeline), "videosink"); - if (!videoSink) { -- qCWarning(log_gstreamer_backend) << "No video sink element named 'videosink' found in pipeline"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "No video sink element named 'videosink' found in pipeline"; - videoSink = gst_bin_get_by_interface(GST_BIN(pipeline), GST_TYPE_VIDEO_OVERLAY); - if (!videoSink) { -- qCWarning(log_gstreamer_backend) << "No video overlay interface found in pipeline either"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "No video overlay interface found in pipeline either"; - return false; - } - } - - WId winId = view->winId(); - if (winId) { -- qCDebug(log_gstreamer_backend) << "Embedding video in graphics view with window ID:" << winId; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Embedding video in graphics view with window ID:" << winId; - gst_video_overlay_set_window_handle(GST_VIDEO_OVERLAY(videoSink), winId); - gst_object_unref(videoSink); -- qCDebug(log_gstreamer_backend) << "Video embedded in graphics view successfully"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Video embedded in graphics view successfully"; - return true; - } else { -- qCWarning(log_gstreamer_backend) << "Graphics view window ID is null, cannot embed video"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "Graphics view window ID is null, cannot embed video"; - gst_object_unref(videoSink); - return false; - } - #else - Q_UNUSED(pipeline) - Q_UNUSED(view) -- qCDebug(log_gstreamer_backend) << "Using autovideosink for video output (no in-process GStreamer)"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Using autovideosink for video output (no in-process GStreamer)"; - return true; - #endif - } -@@ -106,36 +106,36 @@ bool VideoOverlayManager::embedVideoInVideoPane(void* pipeline, ::VideoPane* vid - { - #ifdef HAVE_GSTREAMER - if (!videoPane || !pipeline) { -- qCWarning(log_gstreamer_backend) << "Cannot embed video: VideoPane or pipeline is null"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "Cannot embed video: VideoPane or pipeline is null"; - return false; - } - - GstElement* videoSink = gst_bin_get_by_name(GST_BIN(pipeline), "videosink"); - if (!videoSink) { -- qCWarning(log_gstreamer_backend) << "No video sink element named 'videosink' found in pipeline"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "No video sink element named 'videosink' found in pipeline"; - videoSink = gst_bin_get_by_interface(GST_BIN(pipeline), GST_TYPE_VIDEO_OVERLAY); - if (!videoSink) { -- qCWarning(log_gstreamer_backend) << "No video overlay interface found in pipeline either"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "No video overlay interface found in pipeline either"; - return false; - } - } - - WId winId = videoPane->getVideoOverlayWindowId(); - if (winId) { -- qCDebug(log_gstreamer_backend) << "Embedding video in VideoPane overlay with window ID:" << winId; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Embedding video in VideoPane overlay with window ID:" << winId; - gst_video_overlay_set_window_handle(GST_VIDEO_OVERLAY(videoSink), winId); - gst_object_unref(videoSink); -- qCDebug(log_gstreamer_backend) << "Video embedded in VideoPane overlay successfully"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Video embedded in VideoPane overlay successfully"; - return true; - } else { -- qCWarning(log_gstreamer_backend) << "VideoPane overlay window ID is null, cannot embed video"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "VideoPane overlay window ID is null, cannot embed video"; - gst_object_unref(videoSink); - return false; - } - #else - Q_UNUSED(pipeline) - Q_UNUSED(videoPane) -- qCDebug(log_gstreamer_backend) << "Using autovideosink for video output (no in-process GStreamer)"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Using autovideosink for video output (no in-process GStreamer)"; - return true; - #endif - } -@@ -144,7 +144,7 @@ bool VideoOverlayManager::setupVideoOverlay(void* videoSinkPtr, WId windowId, QW - { - #ifdef HAVE_GSTREAMER - if (!videoSinkPtr || windowId == 0) { -- qCWarning(log_gstreamer_backend) << "Invalid parameters for overlay setup: sink=" << videoSinkPtr << "windowId=" << windowId; -+ qCWarning(log_gstreamer_videooverlaymanager) << "Invalid parameters for overlay setup: sink=" << videoSinkPtr << "windowId=" << windowId; - return false; - } - -@@ -152,7 +152,7 @@ bool VideoOverlayManager::setupVideoOverlay(void* videoSinkPtr, WId windowId, QW - - // Check if the sink supports video overlay interface - if (GST_IS_VIDEO_OVERLAY(videoSink)) { -- qCDebug(log_gstreamer_backend) << "Sink supports video overlay - setting up overlay with window ID:" << windowId; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Sink supports video overlay - setting up overlay with window ID:" << windowId; - - #ifdef Q_OS_LINUX - // Add X11 error handling to prevent segmentation fault -@@ -175,12 +175,12 @@ bool VideoOverlayManager::setupVideoOverlay(void* videoSinkPtr, WId windowId, QW - if (g_object_class_find_property(G_OBJECT_GET_CLASS(videoSink), "force-aspect-ratio")) { - // Allow the sink to stretch to the configured render rectangle so overlay scales to widget size - g_object_set(videoSink, "force-aspect-ratio", FALSE, NULL); -- qCDebug(log_gstreamer_backend) << "Disabled force-aspect-ratio on video sink to allow fill scaling"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Disabled force-aspect-ratio on video sink to allow fill scaling"; - } - - if (g_object_class_find_property(G_OBJECT_GET_CLASS(videoSink), "pixel-aspect-ratio")) { - g_object_set(videoSink, "pixel-aspect-ratio", "1/1", NULL); -- qCDebug(log_gstreamer_backend) << "Set pixel-aspect-ratio to 1:1 on video sink"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Set pixel-aspect-ratio to 1:1 on video sink"; - } - - // Configure render rectangle based on provided targets -@@ -188,13 +188,13 @@ bool VideoOverlayManager::setupVideoOverlay(void* videoSinkPtr, WId windowId, QW - QSize widgetSize = videoWidget->size(); - if (widgetSize.width() > 0 && widgetSize.height() > 0) { - gst_video_overlay_set_render_rectangle(GST_VIDEO_OVERLAY(videoSink), 0, 0, widgetSize.width(), widgetSize.height()); -- qCDebug(log_gstreamer_backend) << "Set render rectangle to widget size:" << widgetSize; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Set render rectangle to widget size:" << widgetSize; - } - } else if (graphicsVideoItem) { - QRectF itemRect = graphicsVideoItem->boundingRect(); - if (itemRect.width() > 0 && itemRect.height() > 0) { - gst_video_overlay_set_render_rectangle(GST_VIDEO_OVERLAY(videoSink), 0, 0, (gint)itemRect.width(), (gint)itemRect.height()); -- qCDebug(log_gstreamer_backend) << "Set render rectangle to video item size:" << itemRect.size(); -+ qCDebug(log_gstreamer_videooverlaymanager) << "Set render rectangle to video item size:" << itemRect.size(); - } - } - -@@ -205,18 +205,18 @@ bool VideoOverlayManager::setupVideoOverlay(void* videoSinkPtr, WId windowId, QW - XCloseDisplay(display); - - if (x11_overlay_error_occurred_local) { -- qCWarning(log_gstreamer_backend) << "X11 error occurred during overlay setup - continuing without embedding"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "X11 error occurred during overlay setup - continuing without embedding"; - } else { -- qCDebug(log_gstreamer_backend) << "Video overlay setup completed successfully"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Video overlay setup completed successfully"; - } - } else if (!old_handler) { -- qCDebug(log_gstreamer_backend) << "Video overlay setup completed (no X11 error handling)"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Video overlay setup completed (no X11 error handling)"; - } - #endif - -- qCDebug(log_gstreamer_backend) << "Overlay setup completed"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Overlay setup completed"; - } catch (...) { -- qCCritical(log_gstreamer_backend) << "Exception during video overlay setup - continuing without embedding"; -+ qCCritical(log_gstreamer_videooverlaymanager) << "Exception during video overlay setup - continuing without embedding"; - #ifdef Q_OS_LINUX - if (display && old_handler) { - XSetErrorHandler(old_handler); -@@ -242,17 +242,17 @@ bool VideoOverlayManager::setupVideoOverlay(void* videoSinkPtr, WId windowId, QW - if (gst_iterator_next(iter, &item) == GST_ITERATOR_OK) { - actualSink = GST_ELEMENT(g_value_get_object(&item)); - if (actualSink && GST_IS_VIDEO_OVERLAY(actualSink)) { -- qCDebug(log_gstreamer_backend) << "Found overlay-capable sink inside autovideosink"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Found overlay-capable sink inside autovideosink"; - gst_video_overlay_set_window_handle(GST_VIDEO_OVERLAY(actualSink), windowId); - // Use target widget size if available to set explicit render rectangle so scaling works - if (videoWidget) { - QSize widgetSize = videoWidget->size(); - if (widgetSize.width() > 0 && widgetSize.height() > 0) { - gst_video_overlay_set_render_rectangle(GST_VIDEO_OVERLAY(actualSink), 0, 0, widgetSize.width(), widgetSize.height()); -- qCDebug(log_gstreamer_backend) << "Set render rectangle to widget size for autovideosink child sink:" << widgetSize; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Set render rectangle to widget size for autovideosink child sink:" << widgetSize; - if (g_object_class_find_property(G_OBJECT_GET_CLASS(actualSink), "force-aspect-ratio")) { - g_object_set(actualSink, "force-aspect-ratio", FALSE, NULL); -- qCDebug(log_gstreamer_backend) << "Disabled force-aspect-ratio on autovideosink child sink"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Disabled force-aspect-ratio on autovideosink child sink"; - } - } else { - gst_video_overlay_set_render_rectangle(GST_VIDEO_OVERLAY(actualSink), 0, 0, -1, -1); -@@ -269,18 +269,18 @@ bool VideoOverlayManager::setupVideoOverlay(void* videoSinkPtr, WId windowId, QW - } - gst_iterator_free(iter); - } -- qCDebug(log_gstreamer_backend) << "autovideosink selected sink doesn't support overlay - video will display in separate window"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "autovideosink selected sink doesn't support overlay - video will display in separate window"; - return false; - } - -- qCWarning(log_gstreamer_backend) << "Sink does not support video overlay:" << sinkName; -+ qCWarning(log_gstreamer_videooverlaymanager) << "Sink does not support video overlay:" << sinkName; - return false; - #else - Q_UNUSED(videoSinkPtr) - Q_UNUSED(windowId) - Q_UNUSED(videoWidget) - Q_UNUSED(graphicsVideoItem) -- qCDebug(log_gstreamer_backend) << "No in-process GStreamer - overlay unavailable"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "No in-process GStreamer - overlay unavailable"; - return false; - #endif - } -@@ -300,7 +300,7 @@ bool VideoOverlayManager::setupVideoOverlayForPipeline(void* pipeline, WId windo - gst_object_unref(videoSink); - return ok; - } -- qCWarning(log_gstreamer_backend) << "No video sink found in pipeline"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "No video sink found in pipeline"; - return false; - #else - Q_UNUSED(pipeline) -@@ -315,10 +315,10 @@ bool VideoOverlayManager::completePendingOverlaySetup(void* pipeline, - ::VideoPane* videoPane, - bool &pendingFlag) - { -- qCDebug(log_gstreamer_backend) << "VideoOverlayManager: Completing pending overlay setup..."; -+ qCDebug(log_gstreamer_videooverlaymanager) << "VideoOverlayManager: Completing pending overlay setup..."; - - if (!pendingFlag || !pipeline) { -- qCDebug(log_gstreamer_backend) << "No pending setup or no pipeline"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "No pending setup or no pipeline"; - return false; - } - -@@ -326,7 +326,7 @@ bool VideoOverlayManager::completePendingOverlaySetup(void* pipeline, - const bool isXcb = platform.contains("xcb", Qt::CaseInsensitive); - const bool hasXDisplay = !qgetenv("DISPLAY").isEmpty(); - if (!isXcb || !hasXDisplay) { -- qCWarning(log_gstreamer_backend) << "Skipping deferred overlay setup: platform is" << platform << "(DISPLAY set:" << hasXDisplay << ")"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "Skipping deferred overlay setup: platform is" << platform << "(DISPLAY set:" << hasXDisplay << ")"; - pendingFlag = false; - return false; - } -@@ -335,7 +335,7 @@ bool VideoOverlayManager::completePendingOverlaySetup(void* pipeline, - - if (videoPane) { - windowId = videoPane->getVideoOverlayWindowId(); -- qCDebug(log_gstreamer_backend) << "Completing overlay setup with VideoPane window ID:" << windowId; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Completing overlay setup with VideoPane window ID:" << windowId; - } else if (graphicsVideoItem) { - if (graphicsVideoItem->scene()) { - QList views = graphicsVideoItem->scene()->views(); -@@ -344,21 +344,21 @@ bool VideoOverlayManager::completePendingOverlaySetup(void* pipeline, - if (auto pane = qobject_cast(view)) { - if (pane->isDirectGStreamerModeEnabled() && pane->getOverlayWidget()) { - windowId = pane->getVideoOverlayWindowId(); -- qCDebug(log_gstreamer_backend) << "Completing overlay setup with VideoPane overlay widget window ID:" << windowId; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Completing overlay setup with VideoPane overlay widget window ID:" << windowId; - } else { -- qCDebug(log_gstreamer_backend) << "VideoPane overlay widget still not ready"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "VideoPane overlay widget still not ready"; - return false; - } - } else { - windowId = view->winId(); -- qCDebug(log_gstreamer_backend) << "Completing overlay setup with graphics view window ID:" << windowId; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Completing overlay setup with graphics view window ID:" << windowId; - } - } else { -- qCWarning(log_gstreamer_backend) << "Graphics video item has no associated view"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "Graphics video item has no associated view"; - return false; - } - } else { -- qCWarning(log_gstreamer_backend) << "Graphics video item has no scene"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "Graphics video item has no scene"; - return false; - } - } -@@ -367,7 +367,7 @@ bool VideoOverlayManager::completePendingOverlaySetup(void* pipeline, - GstElement* videoSink = gst_bin_get_by_name(GST_BIN(pipeline), "videosink"); - if (!videoSink) { - videoSink = gst_bin_get_by_interface(GST_BIN(pipeline), GST_TYPE_VIDEO_OVERLAY); -- if (videoSink) qCDebug(log_gstreamer_backend) << "Deferred path: found sink by overlay interface"; -+ if (videoSink) qCDebug(log_gstreamer_videooverlaymanager) << "Deferred path: found sink by overlay interface"; - } - - if (videoSink) { -@@ -384,14 +384,14 @@ bool VideoOverlayManager::completePendingOverlaySetup(void* pipeline, - targetWidget = videoWidget; - } - if (targetWidget) { -- qCDebug(log_gstreamer_backend) << "Deferred: binding qt6videosink to QWidget" << targetWidget; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Deferred: binding qt6videosink to QWidget" << targetWidget; - g_object_set(G_OBJECT(videoSink), "widget", (gpointer)targetWidget, nullptr); - gst_object_unref(videoSink); - pendingFlag = false; -- qCDebug(log_gstreamer_backend) << "Deferred qt6videosink binding completed"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Deferred qt6videosink binding completed"; - return true; - } else { -- qCWarning(log_gstreamer_backend) << "Deferred: no target QWidget available to bind qt6videosink"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "Deferred: no target QWidget available to bind qt6videosink"; - } - } - -@@ -399,30 +399,30 @@ bool VideoOverlayManager::completePendingOverlaySetup(void* pipeline, - const bool looksLikeXSink = sinkNameBA.contains("xvimage") || sinkNameBA.contains("ximage"); - - if (!supportsOverlay) { -- qCWarning(log_gstreamer_backend) << "Deferred overlay skipped: sink does not support overlay interface (" << sinkName << ")"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "Deferred overlay skipped: sink does not support overlay interface (" << sinkName << ")"; - gst_object_unref(videoSink); - pendingFlag = false; - return false; - } - - if (!looksLikeXSink) { -- qCWarning(log_gstreamer_backend) << "Deferred overlay skipped: sink is not an X sink (" << sinkName << ") on platform" << QGuiApplication::platformName(); -+ qCWarning(log_gstreamer_videooverlaymanager) << "Deferred overlay skipped: sink is not an X sink (" << sinkName << ") on platform" << QGuiApplication::platformName(); - gst_object_unref(videoSink); - pendingFlag = false; - return false; - } - -- qCDebug(log_gstreamer_backend) << "Setting up deferred video overlay with window ID:" << windowId << "using sink" << sinkName; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Setting up deferred video overlay with window ID:" << windowId << "using sink" << sinkName; - gst_video_overlay_set_window_handle(GST_VIDEO_OVERLAY(videoSink), windowId); - gst_object_unref(videoSink); - pendingFlag = false; -- qCDebug(log_gstreamer_backend) << "Deferred overlay setup completed successfully"; -+ qCDebug(log_gstreamer_videooverlaymanager) << "Deferred overlay setup completed successfully"; - return true; - } else { -- qCWarning(log_gstreamer_backend) << "Could not find video sink for deferred overlay setup"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "Could not find video sink for deferred overlay setup"; - } - } else { -- qCWarning(log_gstreamer_backend) << "Still no valid window ID available for deferred overlay setup"; -+ qCWarning(log_gstreamer_videooverlaymanager) << "Still no valid window ID available for deferred overlay setup"; - } - - return false; diff --git a/backports/openterface-qt/51-openterface-permissions.rules b/backports/openterface-qt/51-openterface-permissions.rules deleted file mode 100644 index a74cfbd..0000000 --- a/backports/openterface-qt/51-openterface-permissions.rules +++ /dev/null @@ -1,2 +0,0 @@ -SUBSYSTEM=="usb", ATTRS{idVendor}=="534d", ATTRS{idProduct}=="2109", MODE="0660", GROUP="plugdev" -SUBSYSTEM=="usb", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE="0660", GROUP="plugdev" diff --git a/backports/openterface-qt/APKBUILD b/backports/openterface-qt/APKBUILD deleted file mode 100644 index a96e328..0000000 --- a/backports/openterface-qt/APKBUILD +++ /dev/null @@ -1,73 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -pkgname=openterface-qt -pkgver=0.5.7 -pkgrel=0 -pkgdesc="Openterface Mini-KVM Host Application" -# armhf: missing qt6-qtmultimedia -# riscv64: missing libgtk-3 -arch="all !armhf !riscv64" -url="https://openterface.com/" -license="AGPL-3.0-only" -depends=" - gst-plugins-good-qt - hicolor-icon-theme - qt6-qtmultimedia-ffmpeg - " -makedepends=" - cmake - ffmpeg-dev - libgudev-dev - libjpeg-turbo-dev - libusb-dev - libx11-dev - libxv-dev - patchelf - qt6-qtbase-dev - qt6-qtmultimedia-dev - qt6-qtserialport-dev - samurai - v4l-utils-dev -" -install="$pkgname.post-install" -builddir="$srcdir"/Openterface_QT-$pkgver -options="!check" # No testsuite -source=" - $pkgname-$pkgver.tar.gz::https://github.com/TechxArtisanStudio/Openterface_QT/archive/$pkgver.tar.gz - openterfaceQT.desktop - 51-openterface-permissions.rules - 348_address-use-of-deleted-function.patch - 423_deduplicate-logging-categories-and-remove-backslashes.patch - use-system-libs.patch - " - -prepare() { - default_prepare - mkdir build && cd build - # OPENTERFACE_BUILD_STATIC: do not build vendored dependencies - cmake -DOPENTERFACE_BUILD_STATIC=OFF .. -} - -build() { - ninja -C build -} - -package() { - install -Dm755 "$builddir"/build/openterfaceQT "$pkgdir"/usr/bin/openterfaceQT - install -Dm644 "$srcdir"/51-openterface-permissions.rules "$pkgdir"/etc/udev/rules.d/51-openterface-permissions.rules - install -Dm644 "$srcdir"/openterfaceQT.desktop "$pkgdir"/usr/share/applications/openterfaceQT.desktop - install -Dm644 "$builddir"/images/icon_32.png "$pkgdir"/usr/share/icons/hicolor/32x32/apps/openterfaceQT.png - install -Dm644 "$builddir"/images/icon_64.png "$pkgdir"/usr/share/icons/hicolor/64x64/apps/openterfaceQT.png - install -Dm644 "$builddir"/images/icon_128.png "$pkgdir"/usr/share/icons/hicolor/128x128/apps/openterfaceQT.png - - # vanilla build does not set rpath, since it usually wants to use vendored libs - patchelf --set-rpath '/usr/lib' "$pkgdir"/usr/bin/openterfaceQT -} - -sha512sums=" -996415d6f7d3ed950901c380a0520ddab8c31e8d3c2e2bb3a5f631a5600cace6bcf6bf89871e4e4ef818009eeb08c448fd793e1e4758ecccf1e1a21ff04fd560 openterface-qt-0.5.7.tar.gz -e39cfa04cbcb59e8ba54110a28eff41854f73fa7c4baeeed5433907c79781946f12bd3a731763caa1d591e664eab0650bdbd2a844954baa12bb96a76a17c6e4f openterfaceQT.desktop -f50d721a6a2d1e0183c81e99230e91e127ee6c6f3243af1cff3e3cb78e2913ebab3346ec8b461a4710220d1ce2e12a7cc960ded6e0dc2def539375c6e737b647 51-openterface-permissions.rules -69b5556ec9e56792e848ea1ff9374e12e6901da821ecd9d6f2f521ea30f48e564c2cd0631fc1360acd6c8c6249cfa718d5baf7ed6929e1e92f63eeaea578bcb3 348_address-use-of-deleted-function.patch -47580d07a2d971ad2010e78373d1abbcbc05b3fbd3a7e466faed50dc9a0d632db30c0a7622e7324aeb0eb38d49e3241cb6cebc835f7adeed977b1dd7b48ea5f6 423_deduplicate-logging-categories-and-remove-backslashes.patch -22ecac74fe0923f39f538a5d587f8c100d9709631a1584bd20646e09dcf777cd3042670d08195626220f0494e5efa9549a299c5e1fd8c42f991ec5746b42cc86 use-system-libs.patch -" diff --git a/backports/openterface-qt/openterface-qt.post-install b/backports/openterface-qt/openterface-qt.post-install deleted file mode 100755 index b853907..0000000 --- a/backports/openterface-qt/openterface-qt.post-install +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -echo "Setup the dialout permission for Serial port." -echo "Run: sudo usermod -a -G video,plugdev \$USER" diff --git a/backports/openterface-qt/openterfaceQT.desktop b/backports/openterface-qt/openterfaceQT.desktop deleted file mode 100644 index 907976c..0000000 --- a/backports/openterface-qt/openterfaceQT.desktop +++ /dev/null @@ -1,8 +0,0 @@ -[Desktop Entry] -Version=1.0 -Type=Application -Name=OpenterfaceQT -Exec=/usr/bin/openterfaceQT -Icon=openterfaceQT -Comment=OpenterfaceQT Application -Categories=Utility; diff --git a/backports/openterface-qt/use-system-libs.patch b/backports/openterface-qt/use-system-libs.patch deleted file mode 100644 index a220d5f..0000000 --- a/backports/openterface-qt/use-system-libs.patch +++ /dev/null @@ -1,72 +0,0 @@ -diff --git a/CMakeLists.txt b/CMakeLists.txt -index e0e8ea1..c861725 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -244,7 +244,7 @@ endif() - # Add XCB cursor library for static linking (Linux only) - Legacy support - if(UNIX AND NOT APPLE AND XCB_CURSOR_FOUND) - # This is redundant now but keeping for compatibility -- message(STATUS "XCB cursor already linked via static approach above") -+ target_link_libraries(openterfaceQT PRIVATE X11) - endif() - - # Add TurboJPEG if available -@@ -307,4 +307,4 @@ if(CMAKE_BUILD_TYPE STREQUAL "Release") - endif() - endif() - --# Qt components already found above -\ No newline at end of file -+# Qt components already found above -diff --git a/cmake/FFmpeg.cmake b/cmake/FFmpeg.cmake -index ef0699e..660e765 100644 ---- a/cmake/FFmpeg.cmake -+++ b/cmake/FFmpeg.cmake -@@ -19,7 +19,7 @@ if(NOT DEFINED FFMPEG_PREFIX) - if(WIN32) - set(FFMPEG_PREFIX "C:/ffmpeg-static" CACHE PATH "FFmpeg installation directory") - else() -- set(FFMPEG_PREFIX "/opt/ffmpeg" CACHE PATH "FFmpeg installation directory") -+ set(FFMPEG_PREFIX "/usr" CACHE PATH "FFmpeg installation directory") - endif() - message(STATUS "Using default FFMPEG_PREFIX: ${FFMPEG_PREFIX}") - endif() -@@ -116,7 +116,7 @@ if(NOT FFMPEG_FOUND) - message(STATUS "FFmpeg search paths: ${FFMPEG_SEARCH_PATHS}") - foreach(SEARCH_PATH ${FFMPEG_SEARCH_PATHS}) - # For static builds, prefer .a files; check common lib directories -- set(LIB_EXTENSIONS ".a") -+ set(LIB_EXTENSIONS ".so") - - # Platform-specific library paths - if(WIN32) -diff --git a/cmake/GStreamer.cmake b/cmake/GStreamer.cmake -index 220e9f5..576535f 100644 ---- a/cmake/GStreamer.cmake -+++ b/cmake/GStreamer.cmake -@@ -316,10 +316,11 @@ else() - # Check for Qt6 plugin availability in system - message(STATUS "Checking for Qt6 GStreamer plugin in system...") - find_file(GSTREAMER_QT6_PLUGIN -- NAMES libgstqt6.so -+ NAMES libgstqml6.so - PATHS - /usr/lib/x86_64-linux-gnu/gstreamer-1.0 - /usr/lib/aarch64-linux-gnu/gstreamer-1.0 -+ /usr/lib/gstreamer-1.0 - /usr/local/lib/gstreamer-1.0 - NO_DEFAULT_PATH - ) -diff --git a/cmake/Resources.cmake b/cmake/Resources.cmake -index 2d28b89..e2009e3 100644 ---- a/cmake/Resources.cmake -+++ b/cmake/Resources.cmake -@@ -336,7 +336,7 @@ install(FILES ${CMAKE_SOURCE_DIR}/com.openterface.openterfaceQT.metainfo.xml - if(COMMAND qt_generate_deploy_app_script) - qt_generate_deploy_app_script( - TARGET openterfaceQT -- FILENAME_VARIABLE deploy_script -+ OUTPUT_SCRIPT deploy_script - NO_UNSUPPORTED_PLATFORM_ERROR - ) - install(SCRIPT ${deploy_script}) diff --git a/backports/perl-math-random-isaac-xs/APKBUILD b/backports/perl-math-random-isaac-xs/APKBUILD new file mode 100644 index 0000000..4d27426 --- /dev/null +++ b/backports/perl-math-random-isaac-xs/APKBUILD @@ -0,0 +1,47 @@ +# Automatically generated by apkbuild-cpan, template 2 +# Contributor: Timo Teräs +# Maintainer: Timo Teräs +pkgname=perl-math-random-isaac-xs +_pkgreal=Math-Random-ISAAC-XS +pkgver=1.004 +pkgrel=7 +pkgdesc="C implementation of the ISAAC PRNG algorithm" +url="https://metacpan.org/release/Math-Random-ISAAC-XS/" +arch="all" +license="unrestricted" +cpandepends="" +cpanmakedepends="perl-test-nowarnings" +cpancheckdepends="" +depends="$cpandepends" +makedepends="perl-dev perl-module-build $cpanmakedepends" +checkdepends="$cpancheckdepends" +subpackages="$pkgname-doc" +source="https://cpan.metacpan.org/authors/id/J/JA/JAWNSY/$_pkgreal-$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" + +prepare() { + default_prepare || return 1 + + cd "$builddir" + export CFLAGS=$(perl -MConfig -E 'say $Config{ccflags}') + perl Build.PL installdirs=vendor || return 1 +} + +build() { + cd "$builddir" + export CFLAGS=$(perl -MConfig -E 'say $Config{ccflags}') + ./Build +} + +package() { + cd "$builddir" + ./Build install destdir="$pkgdir" || return 1 + find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete +} + +check() { + cd "$builddir" + ./Build test +} + +sha512sums="40c46b5f247f585a407ef9f36b5874d9cf03ec05963a9d92d988ebd63daf1e37b1b51308845d4596f47b5ad7203953bcb7fbb421c905b526dbe99b246ccb4d87 Math-Random-ISAAC-XS-1.004.tar.gz" diff --git a/backports/php81-pecl-xmlrpc/APKBUILD b/backports/php81-pecl-xmlrpc/APKBUILD new file mode 100644 index 0000000..2d6c6b0 --- /dev/null +++ b/backports/php81-pecl-xmlrpc/APKBUILD @@ -0,0 +1,39 @@ +# Maintainer: Andy Postnikov +pkgname=php81-pecl-xmlrpc +_extname=xmlrpc +pkgver=1.0.0_rc3 +_pkgver=${pkgver/_rc/RC} +pkgrel=1 +pkgdesc="PHP 8.1 extension to write XML-RPC servers and clients - PECL" +url="https://pecl.php.net/package/xmlrpc" +arch="all" +license="PHP-3.01" +depends="php81-xml" +makedepends="php81-dev libxml2-dev" +source="php-pecl-$_extname-$pkgver.tar.gz::https://pecl.php.net/get/$_extname-$_pkgver.tgz" +builddir="$srcdir"/$_extname-$_pkgver + +build() { + phpize81 + ./configure --prefix=/usr --with-php-config=/usr/bin/php-config81 + make +} + +check() { + make NO_INTERACTION=1 REPORT_EXIT_STATUS=1 test TESTS=--show-diff \ + PHP_TEST_SHARED_EXTENSIONS=" \ + -d extension=/usr/lib/php81/modules/xml.so \ + -d extension=modules/$_extname.so" + php81 -d extension=modules/$_extname.so --ri $_extname +} + +package() { + make INSTALL_ROOT="$pkgdir" install + local _confdir="$pkgdir"/etc/php81/conf.d + install -d $_confdir + echo "extension=$_extname" > $_confdir/$_extname.ini +} + +sha512sums=" +aa8e24d5a732b175adb9870357991d48ead046faed89e579eb63afe06c7ef20af9de29e2d70e71e54e5a15ee37265f69a7d52b39ef2465ced93ba818c1f7e9c1 php-pecl-xmlrpc-1.0.0_rc3.tar.gz +" diff --git a/backports/php82-pecl-xmlrpc/APKBUILD b/backports/php82-pecl-xmlrpc/APKBUILD new file mode 100644 index 0000000..cd50550 --- /dev/null +++ b/backports/php82-pecl-xmlrpc/APKBUILD @@ -0,0 +1,40 @@ +# Maintainer: Andy Postnikov +pkgname=php82-pecl-xmlrpc +_extname=xmlrpc +pkgver=1.0.0_rc3 +_pkgver=${pkgver/_rc/RC} +pkgrel=1 +pkgdesc="PHP 8.2 extension to write XML-RPC servers and clients - PECL" +url="https://pecl.php.net/package/xmlrpc" +arch="all" +license="PHP-3.01" +depends="php82-xml" +options="!check" # Failure +makedepends="php82-dev libxml2-dev" +source="php-pecl-$_extname-$pkgver.tar.gz::https://pecl.php.net/get/$_extname-$_pkgver.tgz" +builddir="$srcdir"/$_extname-$_pkgver + +build() { + phpize82 + ./configure --prefix=/usr --with-php-config=/usr/bin/php-config82 + make +} + +check() { + make NO_INTERACTION=1 REPORT_EXIT_STATUS=1 test TESTS=--show-diff \ + PHP_TEST_SHARED_EXTENSIONS=" \ + -d extension=/usr/lib/php82/modules/xml.so \ + -d extension=modules/$_extname.so" + php82 -d extension=modules/$_extname.so --ri $_extname +} + +package() { + make INSTALL_ROOT="$pkgdir" install + local _confdir="$pkgdir"/etc/php82/conf.d + install -d $_confdir + echo "extension=$_extname" > $_confdir/$_extname.ini +} + +sha512sums=" +aa8e24d5a732b175adb9870357991d48ead046faed89e579eb63afe06c7ef20af9de29e2d70e71e54e5a15ee37265f69a7d52b39ef2465ced93ba818c1f7e9c1 php-pecl-xmlrpc-1.0.0_rc3.tar.gz +" diff --git a/backports/py3-apsw/APKBUILD b/backports/py3-apsw/APKBUILD deleted file mode 100644 index 62e95a7..0000000 --- a/backports/py3-apsw/APKBUILD +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor: Francesco Colista -# Maintainer: Francesco Colista -pkgname=py3-apsw -_pkgname=apsw -pkgver=3.50.4.0 -pkgrel=0 -pkgdesc="Another Python SQLite Wrapper" -url="https://github.com/rogerbinns/apsw" -arch="all" -license="Zlib" -depends="python3" -makedepends=" - python3-dev - py3-gpep517 - py3-setuptools - py3-wheel - sqlite-dev - " -subpackages="$pkgname-pyc" -source="$pkgname-$pkgver.zip::https://github.com/rogerbinns/apsw/releases/download/$pkgver/apsw-$pkgver.zip - detect-sqlite-config.patch - " - -builddir="$srcdir/$_pkgname-$pkgver" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - .testenv/bin/python3 -m installer .dist/*.whl - .testenv/bin/python3 setup.py build_test_extension test -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -71db63b0a7f550c9a5d3f112d47c24953472cc6555f0b57198428997d5cf5acf73629f2da8d5d53a2473067ba19d4b655cce467a5e2267e5bd6e8cf0d9883579 py3-apsw-3.50.4.0.zip -8f3957bd6fecb5660a7cab367043e4ccdacd87d8963bbe41cc3d525265de28f08aa207099658d785be29c5c90b818c1418f766995cd780d02b8e36252a389758 detect-sqlite-config.patch -" diff --git a/backports/py3-apsw/detect-sqlite-config.patch b/backports/py3-apsw/detect-sqlite-config.patch deleted file mode 100644 index 4750250..0000000 --- a/backports/py3-apsw/detect-sqlite-config.patch +++ /dev/null @@ -1,8 +0,0 @@ -diff --git a/setup.apsw b/setup.apsw -index 68dedb9..3ceb10b 100644 ---- a/setup.apsw -+++ b/setup.apsw -@@ -1 +1,3 @@ - # You can put ini format directives here in addition to command line flags -+[build_ext] -+use_system_sqlite_config = True diff --git a/backports/py3-arcus/APKBUILD b/backports/py3-arcus/APKBUILD new file mode 100644 index 0000000..604c5b1 --- /dev/null +++ b/backports/py3-arcus/APKBUILD @@ -0,0 +1,42 @@ +# Contributor: Aiden Grossman +# Maintainer: Aiden Grossman +pkgname=py3-arcus +# Needs to be upgraded in sync with libarcus +pkgver=5.2.2 +pkgrel=3 +pkgdesc="Python bindings for libarcus" +url="https://github.com/Ultimaker/pyArcus" +arch="all" +license="LGPL-3.0-only" +makedepends=" + cmake + libarcus-dev + protobuf-dev + py3-sip + python3-dev + samurai + " +options="!check" # package doesn't provide any tests +source="$pkgname-$pkgver.tar.gz::https://github.com/Ultimaker/pyArcus/archive/refs/tags/$pkgver.tar.gz + cmake.patch + cmake-helpers.patch + pyproject.patch" +builddir="$srcdir/pyArcus-$pkgver" + +build() { + cmake -G Ninja -B build \ + -DBUILD_SHARED_LIBS=ON \ + -DCMAKE_BUILD_TYPE=Release + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} + +sha512sums=" +b24cbb9a5d7aa917b1b21e46f935b1293645e731d4e475a5abe364237f35708e8e96a1c6f06fe78e2e0e381737f4a27a6db87e42a5f4de9d48091d9de096f9b0 py3-arcus-5.2.2.tar.gz +f14e55cd31c13051981f26364e34da8c94e8eb5227b1cfd6fe44b9f97b5a4dcf6142a1751fa62eb0514a47583e6ec2d51dc253f23cf72c3fe6a1cb5dca136f21 cmake.patch +de75b985607feae0a9c511742915814e9c3d4bc467183f010ccc334ce4d0d952b6ff86020360b78558c4738cc03cf62c386b44ed76bcec12075c4a93dd03eeb7 cmake-helpers.patch +ef593230d5c78da8ba0fc6ea83225c4543857de1837d3151c45e59ffd7c98063b8f97f25d01c15b6a8f90c26c919206f9f7fa26c9650117f4ce7be49ebca876f pyproject.patch +" diff --git a/backports/py3-arcus/cmake-helpers.patch b/backports/py3-arcus/cmake-helpers.patch new file mode 100644 index 0000000..c556985 --- /dev/null +++ b/backports/py3-arcus/cmake-helpers.patch @@ -0,0 +1,254 @@ +--- /dev/null ++++ ./cmake/CMakeBuilder.py +@@ -0,0 +1,13 @@ ++from sipbuild import SetuptoolsBuilder ++ ++ ++class CMakeBuilder(SetuptoolsBuilder): ++ def __init__(self, project, **kwargs): ++ print("Using the CMake builder") ++ super().__init__(project, **kwargs) ++ ++ def build(self): ++ """ Only Generate the source files """ ++ print("Generating the source files") ++ self._generate_bindings() ++ self._generate_scripts() +--- /dev/null ++++ ./cmake/FindSIP.cmake +@@ -0,0 +1,65 @@ ++# Find SIP ++# ~~~~~~~~ ++# ++# SIP website: http://www.riverbankcomputing.co.uk/sip/index.php ++# ++# Find the installed version of SIP. FindSIP should be called after Python ++# has been found. ++# ++# This file defines the following variables: ++# ++# SIP_VERSION - The version of SIP found expressed as a 6 digit hex number ++# suitable for comparison as a string. ++# ++# SIP_VERSION_STR - The version of SIP found as a human readable string. ++# ++# SIP_BINARY_PATH - Path and filename of the SIP command line executable. ++# ++# SIP_INCLUDE_DIR - Directory holding the SIP C++ header file. ++# ++# SIP_DEFAULT_SIP_DIR - Default directory where .sip files should be installed ++# into. ++ ++# Copyright (c) 2007, Simon Edwards ++# Redistribution and use is allowed according to the terms of the BSD license. ++# For details see the accompanying COPYING-CMAKE-SCRIPTS file. ++ ++ ++ ++IF(SIP_VERSION OR SIP_BUILD_EXECUTABLE) ++ # Already in cache, be silent ++ SET(SIP_FOUND TRUE) ++ELSE() ++ ++ FIND_FILE(_find_sip_py FindSIP.py PATHS ${CMAKE_MODULE_PATH} NO_CMAKE_FIND_ROOT_PATH) ++ ++ EXECUTE_PROCESS(COMMAND ${Python_EXECUTABLE} ${_find_sip_py} OUTPUT_VARIABLE sip_config) ++ IF(sip_config) ++ STRING(REGEX REPLACE "^sip_version:([^\n]+).*$" "\\1" SIP_VERSION ${sip_config}) ++ STRING(REGEX REPLACE ".*\nsip_version_num:([^\n]+).*$" "\\1" SIP_VERSION_NUM ${sip_config}) ++ STRING(REGEX REPLACE ".*\nsip_version_str:([^\n]+).*$" "\\1" SIP_VERSION_STR ${sip_config}) ++ STRING(REGEX REPLACE ".*\ndefault_sip_dir:([^\n]+).*$" "\\1" SIP_DEFAULT_SIP_DIR ${sip_config}) ++ IF(${SIP_VERSION_STR} VERSION_LESS 5) ++ STRING(REGEX REPLACE ".*\nsip_bin:([^\n]+).*$" "\\1" SIP_BINARY_PATH ${sip_config}) ++ STRING(REGEX REPLACE ".*\nsip_inc_dir:([^\n]+).*$" "\\1" SIP_INCLUDE_DIR ${sip_config}) ++ STRING(REGEX REPLACE ".*\nsip_module_dir:([^\n]+).*$" "\\1" SIP_MODULE_DIR ${sip_config}) ++ ELSE(${SIP_VERSION_STR} VERSION_LESS 5) ++ FIND_PROGRAM(SIP_BUILD_EXECUTABLE sip-build) ++ ENDIF(${SIP_VERSION_STR} VERSION_LESS 5) ++ SET(SIP_FOUND TRUE) ++ ENDIF(sip_config) ++ ++ IF(SIP_FOUND) ++ IF(NOT SIP_FIND_QUIETLY) ++ MESSAGE(STATUS "Found SIP version: ${SIP_VERSION_STR}") ++ ENDIF(NOT SIP_FIND_QUIETLY) ++ ELSE(SIP_FOUND) ++ IF(SIP_FIND_REQUIRED) ++ MESSAGE(FATAL_ERROR "Could not find SIP") ++ ENDIF(SIP_FIND_REQUIRED) ++ ENDIF(SIP_FOUND) ++ ++ENDIF() ++ ++include(${CMAKE_SOURCE_DIR}/cmake/SIPMacros.cmake) ++ADD_DEFINITIONS(-DSIP_VERSION=0x${SIP_VERSION}) +--- /dev/null ++++ ./cmake/FindSIP.py +@@ -0,0 +1,57 @@ ++# -*- coding: utf-8 -*- ++# ++# Copyright (c) 2007, Simon Edwards ++# All rights reserved. ++# ++# Redistribution and use in source and binary forms, with or without ++# modification, are permitted provided that the following conditions are met: ++# * Redistributions of source code must retain the above copyright ++# notice, this list of conditions and the following disclaimer. ++# * Redistributions in binary form must reproduce the above copyright ++# notice, this list of conditions and the following disclaimer in the ++# documentation and/or other materials provided with the distribution. ++# * Neither the name of the Simon Edwards nor the ++# names of its contributors may be used to endorse or promote products ++# derived from this software without specific prior written permission. ++# ++# THIS SOFTWARE IS PROVIDED BY Simon Edwards ''AS IS'' AND ANY ++# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++# DISCLAIMED. IN NO EVENT SHALL Simon Edwards BE LIABLE FOR ANY ++# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ++# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ++# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ++# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++# ++# FindSIP.py ++# Copyright (c) 2007, Simon Edwards ++# Redistribution and use is allowed according to the terms of the BSD license. ++# For details see the accompanying COPYING-CMAKE-SCRIPTS file. ++ ++try: ++ import sipbuild ++ ++ print("sip_version:%06.0x" % sipbuild.version.SIP_VERSION) ++ print("sip_version_num:%d" % sipbuild.version.SIP_VERSION) ++ print("sip_version_str:%s" % sipbuild.version.SIP_VERSION_STR) ++ ++ from distutils.sysconfig import get_python_lib ++ python_modules_dir = get_python_lib(plat_specific=1) ++ print("default_sip_dir:%s" % python_modules_dir) ++except ImportError: # Code for SIP v4 ++ import sipconfig ++ ++ sipcfg = sipconfig.Configuration() ++ print("sip_version:%06.0x" % sipcfg.sip_version) ++ print("sip_version_num:%d" % sipcfg.sip_version) ++ print("sip_version_str:%s" % sipcfg.sip_version_str) ++ print("sip_bin:%s" % sipcfg.sip_bin) ++ print("default_sip_dir:%s" % sipcfg.default_sip_dir) ++ print("sip_inc_dir:%s" % sipcfg.sip_inc_dir) ++ # SIP 4.19.10+ has new sipcfg.sip_module_dir ++ if hasattr(sipcfg, "sip_module_dir"): ++ print("sip_module_dir:%s" % sipcfg.sip_module_dir) ++ else: ++ print("sip_module_dir:%s" % sipcfg.sip_mod_dir) +--- /dev/null ++++ ./cmake/SIPMacros.cmake +@@ -0,0 +1,107 @@ ++ ++ ++# Macros for SIP ++# ~~~~~~~~~~~~~~ ++ ++set(SIP_ARGS --pep484-pyi --no-protected-is-public) ++ ++function(add_sip_module MODULE_TARGET) ++ if(NOT SIP_BUILD_EXECUTABLE) ++ set(SIP_BUILD_EXECUTABLE ${CMAKE_PREFIX_PATH}/Scripts/sip-build) ++ endif() ++ ++ message(STATUS "SIP: Generating pyproject.toml") ++ configure_file(${CMAKE_SOURCE_DIR}/pyproject.toml.in ${CMAKE_CURRENT_BINARY_DIR}/pyproject.toml) ++ configure_file(${CMAKE_SOURCE_DIR}/cmake/CMakeBuilder.py ${CMAKE_CURRENT_BINARY_DIR}/CMakeBuilder.py) ++ if(WIN32) ++ set(ext .pyd) ++ set(env_path_sep ";") ++ else() ++ set(ext .so) ++ set(env_path_sep ":") ++ endif() ++ ++ message(STATUS "SIP: Generating source files") ++ execute_process( ++ COMMAND ${CMAKE_COMMAND} -E env "PYTHONPATH=${PYTHONPATH}${env_path_sep}$ENV{PYTHONPATH}${env_path_sep}${CMAKE_CURRENT_BINARY_DIR}" ${SIP_BUILD_EXECUTABLE} ${SIP_ARGS} ++ COMMAND_ECHO STDOUT ++ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/ ++ ) ++ # This will generate the source-files during the configuration step in CMake. Needed to obtain the sources ++ ++ # Touch the generated files (8 in total) to make them dirty and force them to rebuild ++ message(STATUS "SIP: Touching the source files") ++ set(_sip_output_files) ++ list(LENGTH SIP_FILES _no_outputfiles) ++ foreach(_concat_file_nr RANGE 0 ${_no_outputfiles}) ++ if(${_concat_file_nr} LESS 8) ++ list(APPEND _sip_output_files "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/sip${MODULE_TARGET}part${_concat_file_nr}.cpp") ++ endif() ++ endforeach() ++ ++ # Find the generated source files ++ message(STATUS "SIP: Collecting the generated source files") ++ file(GLOB sip_c "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/*.c") ++ file(GLOB sip_cpp "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/*.cpp") ++ file(GLOB sip_hdr "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/*.h") ++ ++ # Add the user specified source files ++ message(STATUS "SIP: Collecting the user specified source files") ++ get_target_property(usr_src ${MODULE_TARGET} SOURCES) ++ ++ # create the target library and link all the files (generated and user specified ++ message(STATUS "SIP: Linking the interface target against the shared library") ++ set(sip_sources "${sip_c}" "${sip_cpp}" "${usr_src}") ++ ++ if (BUILD_SHARED_LIBS) ++ add_library("sip_${MODULE_TARGET}" SHARED ${sip_sources}) ++ else() ++ add_library("sip_${MODULE_TARGET}" STATIC ${sip_sources}) ++ endif() ++ ++ # Make sure that the library name of the target is the same as the MODULE_TARGET with the appropriate extension ++ target_link_libraries("sip_${MODULE_TARGET}" PRIVATE "${MODULE_TARGET}") ++ set_target_properties("sip_${MODULE_TARGET}" PROPERTIES PREFIX "") ++ set_target_properties("sip_${MODULE_TARGET}" PROPERTIES SUFFIX ${ext}) ++ set_target_properties("sip_${MODULE_TARGET}" PROPERTIES OUTPUT_NAME "${MODULE_TARGET}") ++ ++ # Add the custom command to (re-)generate the files and mark them as dirty. This allows the user to actually work ++ # on the sip definition files without having to reconfigure the complete project. ++ if (NOT DEFINED PYTHONPATH) ++ set(PYTHONPATH "") ++ endif () ++ add_custom_command( ++ TARGET "sip_${MODULE_TARGET}" ++ COMMAND ${CMAKE_COMMAND} -E env "PYTHONPATH=${PYTHONPATH}${env_path_sep}$ENV{PYTHONPATH}${env_path_sep}${CMAKE_CURRENT_BINARY_DIR}" ${SIP_BUILD_EXECUTABLE} ${SIP_ARGS} ++ COMMAND ${CMAKE_COMMAND} -E touch ${_sip_output_files} ++ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/ ++ MAIN_DEPENDENCY ${MODULE_SIP} ++ DEPENDS ${sip_sources} ++ VERBATIM ++ ) ++ ++ set_target_properties("sip_${MODULE_TARGET}" ++ PROPERTIES ++ RESOURCE "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/${MODULE_TARGET}.pyi") ++endfunction() ++ ++function(install_sip_module MODULE_TARGET) ++ if(DEFINED ARGV1) ++ set(_install_path ${ARGV1}) ++ else() ++ if(DEFINED Python_SITEARCH) ++ set(_install_path ${Python_SITEARCH}) ++ elseif(DEFINED Python_SITELIB) ++ set(_install_path ${Python_SITELIB}) ++ else() ++ message(FATAL_ERROR "SIP: Specify the site-packages location") ++ endif() ++ endif() ++ message(STATUS "SIP: Installing Python module and PEP 484 file in ${_install_path}") ++ install(TARGETS "sip_${MODULE_TARGET}" ++ ARCHIVE DESTINATION ${_install_path} ++ LIBRARY DESTINATION ${_install_path} ++ RUNTIME DESTINATION ${_install_path} ++ RESOURCE DESTINATION ${_install_path} ++ ) ++endfunction() diff --git a/backports/py3-arcus/cmake.patch b/backports/py3-arcus/cmake.patch new file mode 100644 index 0000000..e7390e0 --- /dev/null +++ b/backports/py3-arcus/cmake.patch @@ -0,0 +1,32 @@ +--- ./CMakeLists.txt.orig ++++ ./CMakeLists.txt +@@ -2,22 +2,22 @@ + project(pyarcus) + cmake_minimum_required(VERSION 3.20) + +-find_package(protobuf REQUIRED) +-find_package(cpython REQUIRED) +-find_package(arcus REQUIRED) ++list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) + +-find_package(standardprojectsettings REQUIRED) +-find_package(sipbuildtool REQUIRED) ++find_package(Protobuf REQUIRED) ++find_package(Python REQUIRED COMPONENTS Interpreter Development) ++find_package(Arcus REQUIRED) + ++find_package(SIP 6.5.0 REQUIRED) ++ + add_library(pyArcus INTERFACE src/PythonMessage.cpp) +-use_threads(pyArcus) + + target_include_directories(pyArcus + INTERFACE + $ + $ + ) +-target_link_libraries(pyArcus INTERFACE arcus::arcus protobuf::libprotobuf cpython::cpython) ++target_link_libraries(pyArcus INTERFACE Arcus protobuf::libprotobuf Python::Python) + add_sip_module(pyArcus) + install_sip_module(pyArcus) + diff --git a/backports/py3-arcus/pyproject.patch b/backports/py3-arcus/pyproject.patch new file mode 100644 index 0000000..3dd7f3a --- /dev/null +++ b/backports/py3-arcus/pyproject.patch @@ -0,0 +1,20 @@ +--- /dev/null ++++ ./pyproject.toml.in +@@ -0,0 +1,17 @@ ++[build-system] ++requires = ["sip >=6, <7"] ++build-backend = "sipbuild.api" ++ ++[tool.sip.metadata] ++name = "pyArcus" ++ ++[tool.sip.project] ++builder-factory = "CMakeBuilder" ++sip-files-dir = "${CMAKE_CURRENT_SOURCE_DIR}/python/" ++sip-include-dirs = ["CMAKE_CURRENT_SOURCE_DIR/python/"] ++build-dir = "${CMAKE_CURRENT_BINARY_DIR}/pyArcus/" ++ ++[tool.sip.bindings.pyArcus] ++exceptions = true ++release-gil = true ++concatenate = 8 diff --git a/backports/py3-cbor2/APKBUILD b/backports/py3-cbor2/APKBUILD new file mode 100644 index 0000000..015e6a1 --- /dev/null +++ b/backports/py3-cbor2/APKBUILD @@ -0,0 +1,49 @@ +# Contributor: Marian Buschsieweke +# Maintainer: Marian Buschsieweke +pkgname=py3-cbor2 +pkgver=5.6.1 +pkgrel=0 +pkgdesc="encoding and decoding for CBOR (RFC 8949)" +url="https://github.com/agronholm/cbor2" +arch="all" +license="MIT" +makedepends=" + py3-gpep517 + py3-setuptools + py3-setuptools_scm + py3-wheel + python3-dev + " +checkdepends=" + py3-hypothesis + py3-pytest + py3-pytest-cov + py3-tomli + " +subpackages="$pkgname-pyc" +source="$pkgname-$pkgver.tar.gz::https://files.pythonhosted.org/packages/source/c/cbor2/cbor2-$pkgver.tar.gz + fix-32bit-tests.patch + " +builddir="$srcdir/cbor2-$pkgver" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer .dist/*.whl + .testenv/bin/python3 -m pytest +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +9ddf2c3690780816ff50ff4ed371435ca45b597b706254c37c9f01d1f1a699892e2c945a72e69b5506a803c41692f399b58b4e32d9409a0197c677e537e656b2 py3-cbor2-5.6.1.tar.gz +ba8a19a73fe2dc747846b77fde6cd621ccb500a514ba61192dfa28c875720003666165ad12c767260b31148b0dd25454e36e4f43dd8bb1d11928944c6a5b61dd fix-32bit-tests.patch +" diff --git a/backports/py3-cbor2/fix-32bit-tests.patch b/backports/py3-cbor2/fix-32bit-tests.patch new file mode 100644 index 0000000..de8fdbb --- /dev/null +++ b/backports/py3-cbor2/fix-32bit-tests.patch @@ -0,0 +1,29 @@ +Patch-Source: https://github.com/agronholm/cbor2/commit/75279162a019d20db3bff8d64d41c7e97b555b53 +From 75279162a019d20db3bff8d64d41c7e97b555b53 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Alex=20Gr=C3=B6nholm?= +Date: Tue, 6 Feb 2024 15:43:23 +0200 +Subject: [PATCH] Fixed test_oversized_read failing on 32-bit platforms + +Fixes #215. +--- + tests/test_decoder.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/tests/test_decoder.py b/tests/test_decoder.py +index cd0b45a..d11be6e 100644 +--- a/tests/test_decoder.py ++++ b/tests/test_decoder.py +@@ -939,11 +939,11 @@ def test_decimal_payload_unpacking(impl, data, expected): + "payload", + [ + pytest.param( +- unhexlify("5b7fffffffffffff00"), ++ unhexlify("41"), + id="bytestring", + ), + pytest.param( +- unhexlify("7b7fffffffffffff00"), ++ unhexlify("61"), + id="unicode", + ), + ], diff --git a/backports/py3-codespell/APKBUILD b/backports/py3-codespell/APKBUILD new file mode 100644 index 0000000..c33abbb --- /dev/null +++ b/backports/py3-codespell/APKBUILD @@ -0,0 +1,45 @@ +# Contributor: Marian Buschsieweke +# Maintainer: Marian Buschsieweke +pkgname=py3-codespell +_pkgname=${pkgname#py3-} +pkgver=2.2.6 +pkgrel=2 +pkgdesc="Fix common misspellings in text files, primarily source code" +url="https://github.com/codespell-project/codespell/" +arch="noarch" +license="GPL-2.0-only" +makedepends=" + py3-gpep517 + py3-setuptools + py3-setuptools_scm + py3-wheel + " +checkdepends="py3-pytest-cov" +depends="py3-chardet" +subpackages="$pkgname-pyc" +source="$pkgname-$pkgver.tar.gz::https://github.com/codespell-project/codespell/archive/refs/tags/v$pkgver.tar.gz" +builddir="$srcdir"/$_pkgname-$pkgver + +build() { + SETUPTOOLS_SCM_PRETEND_VERSION=$pkgver \ + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer .dist/*.whl + + # tests want to run bin/codespell + PATH="$builddir/.testenv/bin:$PATH" .testenv/bin/python3 -m pytest +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +37a6fbcf196447e8204a973499c6b3f7efda67e3caaaa707897da438c602834f91ca49b95020d2c03dcb95528c03451a2d9cfe145b2a24e88615c4a5418a4d2b py3-codespell-2.2.6.tar.gz +" diff --git a/backports/py3-colored/APKBUILD b/backports/py3-colored/APKBUILD new file mode 100644 index 0000000..d11a554 --- /dev/null +++ b/backports/py3-colored/APKBUILD @@ -0,0 +1,28 @@ +# Maintainer: Hoang Nguyen +pkgname=py3-colored +_pyname=${pkgname/py3-/} +pkgver=1.4.4 +pkgrel=2 +pkgdesc="Simple Python library for color and formatting in terminal" +url="https://gitlab.com/dslackw/colored" +arch="noarch" +license="MIT" +depends="python3" +makedepends="py3-setuptools" +checkdepends="py3-pytest" +subpackages="$pkgname-pyc" +source="https://gitlab.com/dslackw/colored/-/archive/$pkgver/colored-$pkgver.tar.gz" +builddir="$srcdir/$_pyname-$pkgver" +options="!check" # No testsuite + +build() { + python3 setup.py build +} + +package() { + python3 setup.py install --prefix=/usr --root="$pkgdir" +} + +sha512sums=" +d49075f97bcc220802a8a64780b4c3910acd420e7e0e82ee71659132e7a294a638b098e4e46ae54f531739f8a43cd35979e521c02bb359205a13d96e37cfe8ed colored-1.4.4.tar.gz +" diff --git a/backports/py3-daemon/APKBUILD b/backports/py3-daemon/APKBUILD new file mode 100644 index 0000000..6414d62 --- /dev/null +++ b/backports/py3-daemon/APKBUILD @@ -0,0 +1,36 @@ +# Contributor: Noel Kuntze +# Maintainer: Noel Kuntze +pkgname=py3-daemon +pkgver=2.3.2 +pkgrel=2 +pkgdesc="Library to implement a well-behaved Unix daemon process" +url="https://pagure.io/python-daemon" +options="!check" # Has lots of dependencies +arch="noarch" +license="Apache-2.0 AND GPL-3.0-or-later" +depends="py3-setuptools py3-lockfile" +makedepends="py3-docutils" +subpackages="$pkgname-pyc" +source="https://pypi.io/packages/source/p/python-daemon/python-daemon-$pkgver.tar.gz" +builddir="$srcdir/python-daemon-$pkgver" + +prepare() { + default_prepare + + # Remove unnecessary dependency for building, twine is + # required for uploading the package to pypi which we don't + # do + sed -e '/twine/d' -i setup.py +} + +build() { + python3 setup.py build +} + +package() { + python3 setup.py install --root="$pkgdir" +} + +sha512sums=" +d9f6e6c376a496fae96bd9efed0a56d00a137617a3d1d5ef74802ef176bc813bb1d49bbb9164cdbec03213529f944b32b257bcc64283abfa4a3522ff00826bfd python-daemon-2.3.2.tar.gz +" diff --git a/backports/py3-dateparser/APKBUILD b/backports/py3-dateparser/APKBUILD new file mode 100644 index 0000000..b3dd959 --- /dev/null +++ b/backports/py3-dateparser/APKBUILD @@ -0,0 +1,68 @@ +# Maintainer: Hoang Nguyen +pkgname=py3-dateparser +_pyname=${pkgname#py3-} +pkgver=1.2.0 +pkgrel=0 +pkgdesc="Python parser for human readable dates" +url="https://github.com/scrapinghub/dateparser" +arch="noarch" +license="BSD-3-Clause" +depends=" + python3 + py3-dateutil + py3-regex + py3-tz + py3-tzlocal + " +makedepends=" + py3-gpep517 + py3-setuptools + py3-wheel + " +checkdepends=" + py3-fasttext + py3-gitpython + py3-langdetect + py3-parameterized + py3-parsel + py3-pytest + py3-requests + py3-ruamel.yaml + " +subpackages="$pkgname-pyc" +source="$pkgname-$pkgver.tar.gz::https://github.com/scrapinghub/dateparser/archive/refs/tags/v$pkgver.tar.gz" +builddir="$srcdir/$_pyname-$pkgver" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + _test_filter='not test_parsing_date_should_fail_using_datetime_strptime_if_locale_is_non_english' + # test_custom_language_detect_fast_text fails due to wrong file format + case "$CARCH" in + s390x) + _test_filter="$_test_filter and not test_custom_language_detect_fast_text" + ;; + esac + + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer .dist/*.whl + + # test_hijri.py: needs hijri_converter, test_jalali.py: convertdate + .testenv/bin/python3 -m pytest tests \ + -k "$_test_filter" \ + --ignore tests/test_hijri.py \ + --ignore tests/test_jalali.py +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +2d37115f25c2076c4521b77b89ef1cff3cd0a5233c45beb00d78a5c9b1a384dcd993ff7cdd1f77db95a53ce566cf7d709d46ffa2e63eb468ac954fda178a5b6e py3-dateparser-1.2.0.tar.gz +" diff --git a/backports/py3-django-auth-ldap/APKBUILD b/backports/py3-django-auth-ldap/APKBUILD new file mode 100644 index 0000000..91b8055 --- /dev/null +++ b/backports/py3-django-auth-ldap/APKBUILD @@ -0,0 +1,51 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-django-auth-ldap +#_pkgreal is used by apkbuild-pypi to find modules at PyPI +_pkgreal=django-auth-ldap +pkgver=4.8.0 +pkgrel=1 +pkgdesc="Django LDAP authentication backend" +url="https://pypi.python.org/project/django-auth-ldap" +# s390x | riscv64: test failure +arch="noarch !s390x !riscv64" +license="BSD" +# RuntimeError: slapd exited before opening port +options="!check" +depends="py3-django py3-ldap" +checkdepends=" + py3-pytest + py3-pytest-django + py3-pytest-black + py3-isort + py3-flake8 + openldap + openldap-back-mdb + openldap-clients + openldap-overlay-syncprov + " +makedepends="py3-setuptools py3-gpep517 py3-wheel" +source="$pkgname-$pkgver.tar.gz::https://github.com/django-auth-ldap/django-auth-ldap/archive/refs/tags/$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" +subpackages="$pkgname-pyc" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer .dist/*.whl + .testenv/bin/python3 -Wa -b -m django test --settings tests.settings +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +559d6c0a556ccab2a0440866db9e1260b236e0bd4de92d07082660118b99886e7d362824cf0453de1f1d87ce1d5b5ab23d5181b8c970086d3a100ae32a29c482 py3-django-auth-ldap-4.8.0.tar.gz +" diff --git a/backports/py3-django-debug-toolbar/APKBUILD b/backports/py3-django-debug-toolbar/APKBUILD new file mode 100644 index 0000000..4becc02 --- /dev/null +++ b/backports/py3-django-debug-toolbar/APKBUILD @@ -0,0 +1,38 @@ +# Contributor: Leonardo Arena +# Maintainer: Will Sinatra +pkgname=py3-django-debug-toolbar +_pkgname=django-debug-toolbar +pkgver=4.3 +pkgrel=0 +pkgdesc="Configurable set of panels that display various debug information about the current request/response" +options="!check" # Requires unpackaged Selenium python3 module +url="https://github.com/jazzband/django-debug-toolbar" +arch="noarch" +license="BSD-3-Clause" +depends="py3-django py3-sqlparse" +makedepends=" + py3-gpep517 + py3-hatchling + " +# options="!check" #no testsuite +subpackages="$pkgname-pyc" +source="$pkgname-$pkgver.tar.gz::https://github.com/jazzband/$_pkgname/archive/$pkgver.tar.gz" +builddir="$srcdir"/$_pkgname-$pkgver + +replaces="py-django-debug-toolbar" # Backwards compatibility +provides="py-django-debug-toolbar=$pkgver-r$pkgrel" # Backwards compatibility + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +caa8563d38e8c96305828b7a07006ce2ee0afae099d70d75d332f2196fc3ffcf7f3848440ea22c00f2b918029477672a172e30714f6f73a630404175aef3b925 py3-django-debug-toolbar-4.3.tar.gz +" diff --git a/backports/py3-flask-httpauth/APKBUILD b/backports/py3-flask-httpauth/APKBUILD deleted file mode 100644 index 7cbc2de..0000000 --- a/backports/py3-flask-httpauth/APKBUILD +++ /dev/null @@ -1,39 +0,0 @@ -# Contributor: Fabian Affolter -# Maintainer: Fabian Affolter -pkgname=py3-flask-httpauth -pkgver=4.8.0 -pkgrel=3 -pkgdesc="Basic and Digest HTTP authentication for Flask routes" -url="https://pypi.org/project/Flask-HTTPAuth" -arch="noarch" -license="MIT" -depends="py3-flask python3" -makedepends="py3-gpep517 py3-setuptools py3-wheel" -checkdepends="py3-pytest py3-pytest-asyncio py3-asgiref" -subpackages="$pkgname-pyc" -source="https://files.pythonhosted.org/packages/source/F/Flask-HTTPAuth/Flask-HTTPAuth-$pkgver.tar.gz" -builddir="$srcdir"/Flask-HTTPAuth-$pkgver - -replaces="py-flask-httpauth" # Backwards compatibility -provides="py-flask-httpauth=$pkgver-r$pkgrel" # Backwards compatibility - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - .testenv/bin/python3 -m installer .dist/*.whl - .testenv/bin/python3 -m pytest -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/flask_httpauth*.whl -} - -sha512sums=" -15878f45faf6bdde43d7b588539b044d621ba1ba590880e3d0a3bccf4e9bd04b898b3372775e99577b7e7955c4b6d2d7cc80df19ba30415c6b7c1d3183b7e5f4 Flask-HTTPAuth-4.8.0.tar.gz -" diff --git a/backports/py3-flask-limiter/APKBUILD b/backports/py3-flask-limiter/APKBUILD index cd15f22..491f4cf 100644 --- a/backports/py3-flask-limiter/APKBUILD +++ b/backports/py3-flask-limiter/APKBUILD @@ -1,8 +1,8 @@ # Contributor: lauren n. liberda -maintainer="lauren n. liberda " +# Maintainer: lauren n. liberda pkgname=py3-flask-limiter -pkgver=3.10.1 -pkgrel=0 +pkgver=3.5.0 +pkgrel=1 pkgdesc="Rate Limiting extension for Flask" url="https://github.com/alisaifee/flask-limiter" arch="noarch" @@ -14,7 +14,7 @@ depends=" py3-rich python3 " -makedepends="py3-setuptools py3-gpep517" +makedepends="py3-setuptools" checkdepends=" py3-flask-restful py3-flask-restx @@ -23,6 +23,7 @@ checkdepends=" py3-pytest py3-pytest-cov " +options="!check" # tests depend on unpackaged modules subpackages="$pkgname-pyc" source=" https://github.com/alisaifee/flask-limiter/archive/refs/tags/$pkgver/flask-limiter-$pkgver.tar.gz @@ -30,26 +31,20 @@ source=" our-std-is-good-enough.patch " builddir="$srcdir/flask-limiter-$pkgver" -options="!check" # tests depend on unpackaged modules build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 + python3 setup.py build } check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - gpep517 install-wheel --destdir .testenv --prefix '' .dist/*.whl - .testenv/bin/python3 -m pytest + pytest } package() { - gpep517 install-wheel --destdir "$pkgdir" \ - .dist/*.whl + python3 setup.py install --prefix=/usr --root="$pkgdir" } sha512sums=" -a0d3af6f93d4283309d6df46ddb7fed4c358bbc712c2bd9e6897362c6d086c395cb9587c3d9da283ad757b574fd8c09d909f3c4b76d02ae8aade3e61dbea6aa0 flask-limiter-3.10.1.tar.gz +f97fd830fd0bbb2186c82451643413420be93872ed17d71d20c830a76ec3aee999bcda3a07b9d27d4602ef5fcd33f78888dc5d75c220eae5cb83ef02853151e6 flask-limiter-3.5.0.tar.gz 1b90e9134076cda249695d5ea741db9d205a2ae452c7d6edfe01eb37a221ce6f64b0e8ddcdbbee9b0e0fb16a28e5eabf14f1c1e41e965c7e3b93ea4f42caf553 our-std-is-good-enough.patch " diff --git a/backports/py3-flask-principal/APKBUILD b/backports/py3-flask-principal/APKBUILD new file mode 100644 index 0000000..001d4a0 --- /dev/null +++ b/backports/py3-flask-principal/APKBUILD @@ -0,0 +1,38 @@ +# Contributor: Fabian Affolter +# Maintainer: Fabian Affolter +pkgname=py3-flask-principal +_pkgname=flask-principal +pkgver=0.4.0 +pkgrel=7 +pkgdesc="Flask Identity management" +url="https://pythonhosted.org/Flask-Principal/" +arch="noarch" +license="MIT" +depends="python3 py3-blinker py3-flask" +makedepends="py3-setuptools py3-gpep517 py3-wheel" +checkdepends="py3-nose" +subpackages="$pkgname-pyc" +source="$pkgname-$pkgver.tar.gz::https://github.com/mattupstate/flask-principal/archive/$pkgver.tar.gz" +builddir="$srcdir"/$_pkgname-$pkgver + +replaces="py-flask-principal" # Backwards compatibility +provides="py-flask-principal=$pkgver-r$pkgrel" # Backwards compatibility + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + gpep517 install-wheel --destdir .testenv --prefix '' .dist/*.whl + .testenv/bin/python3 -m nose +} + +package() { + gpep517 install-wheel --destdir "$pkgdir" \ + .dist/*.whl +} + +sha512sums="ed8cb28c4e8d936de96db0bf9f7cb45b253dc204c4b8f8dd8022ef1552592ff6324b4a33d3ee862794a6e20eb8c32a0365e7b9397d427da5022c5ded3dfa308a py3-flask-principal-0.4.0.tar.gz" diff --git a/backports/py3-fuzzywuzzy/APKBUILD b/backports/py3-fuzzywuzzy/APKBUILD new file mode 100644 index 0000000..ad0fce2 --- /dev/null +++ b/backports/py3-fuzzywuzzy/APKBUILD @@ -0,0 +1,32 @@ +# Contributor: Galen Abell +# Maintainer: Galen Abell +pkgname=py3-fuzzywuzzy +_pyname=fuzzywuzzy +pkgver=0.18.0 +pkgrel=6 +pkgdesc="Fuzzy string matching in python" +url="https://github.com/seatgeek/fuzzywuzzy" +arch="noarch" +license="GPL-2.0-only" +depends="python3 py3-levenshtein" +makedepends="py3-setuptools" +checkdepends="py3-pytest py3-pycodestyle py3-hypothesis" +subpackages="$pkgname-pyc" +source="https://files.pythonhosted.org/packages/source/${_pyname%${_pyname#?}}/$_pyname/$_pyname-$pkgver.tar.gz" +builddir="$srcdir/$_pyname-$pkgver" + +build() { + python3 setup.py build +} + +check() { + PYTHONPATH="$PWD/build/lib" pytest -v +} + +package() { + python3 setup.py install --skip-build --root="$pkgdir" +} + +sha512sums=" +4a21ea67278fa525842d48fed8db666d00eae6d13254e8844d11f63b47c3a305b3cac760f28c24c6347aebcf73e96180e0a7cfba29c75f01ece2f7751e0398c5 fuzzywuzzy-0.18.0.tar.gz +" diff --git a/backports/py3-gitlab/APKBUILD b/backports/py3-gitlab/APKBUILD new file mode 100644 index 0000000..a8e281c --- /dev/null +++ b/backports/py3-gitlab/APKBUILD @@ -0,0 +1,48 @@ +# Maintainer: Hoang Nguyen +pkgname=py3-gitlab +_pyname=${pkgname/py3/python} +pkgver=4.4.0 +pkgrel=0 +pkgdesc="Python wrapper for Gitlab's API" +url="https://github.com/python-gitlab/python-gitlab" +arch="noarch" +license="LGPL-3.0-or-later" +depends="python3 py3-requests py3-requests-toolbelt" +makedepends=" + py3-setuptools + py3-gpep517 + py3-installer + py3-wheel + py3-sphinx + py3-sphinxcontrib-autoprogram + py3-myst-parser + " +checkdepends="py3-pytest py3-responses py3-build" +subpackages="$pkgname-doc $pkgname-pyc" +source="$pkgname-$pkgver.tar.gz::https://github.com/python-gitlab/python-gitlab/archive/refs/tags/v$pkgver.tar.gz" +options="!check" # Failing tests +builddir="$srcdir/$_pyname-$pkgver" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 + sphinx-build -W -b man docs/ man/ +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer .dist/*.whl + .testenv/bin/python3 -m pytest --ignore=tests/functional/ +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl + install -Dm644 man/$_pyname.1 \ + "$pkgdir"/usr/share/man/man1/$_pyname.1 +} + +sha512sums=" +cb572d169d948dcd74b1d85fb4e8fc2b2593ad167dd708f38bcaf5cccacc8a8b32231b2231d9cb69909e63ba0ce2c6f1cf522f21df56659343314ea2c0d39645 py3-gitlab-4.4.0.tar.gz +" diff --git a/backports/py3-html5-parser/APKBUILD b/backports/py3-html5-parser/APKBUILD deleted file mode 100644 index 45e1415..0000000 --- a/backports/py3-html5-parser/APKBUILD +++ /dev/null @@ -1,41 +0,0 @@ -# Maintainer: Cowington Post -pkgname=py3-html5-parser -pkgver=0.4.12 -pkgrel=1 -pkgdesc="Fast C based HTML 5 parsing for python" -url="https://github.com/kovidgoyal/html5-parser" -arch="all" -license="Apache-2.0" -depends="py3-lxml py3-chardet" -makedepends=" - libxml2-dev - py3-gpep517 - py3-setuptools - py3-wheel - python3-dev - " -checkdepends="py3-beautifulsoup4" -subpackages="$pkgname-pyc" -source="https://github.com/kovidgoyal/html5-parser/archive/v$pkgver/py3-html5-parser-$pkgver.tar.gz" -builddir="$srcdir/html5-parser-$pkgver" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - .testenv/bin/python3 -m installer .dist/*.whl - .testenv/bin/python3 setup.py test -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -d2c031225b74d01a1ae3455837ac09e9afad8a4ec6ab1b8f66cbea8a86188db271a72570ef06e05ac56d369b41d97fc6f382455e25ca346a1897f62a3696a252 py3-html5-parser-0.4.12.tar.gz -" diff --git a/backports/py3-levenshtein/APKBUILD b/backports/py3-levenshtein/APKBUILD new file mode 100644 index 0000000..c146867 --- /dev/null +++ b/backports/py3-levenshtein/APKBUILD @@ -0,0 +1,45 @@ +# Contributor: Galen Abell +# Maintainer: Galen Abell +pkgname=py3-levenshtein +pkgver=0.25.1 +pkgrel=2 +pkgdesc="Python extension for computing string edit distances and similarities" +url="https://github.com/maxbachmann/Levenshtein" +arch="all" +license="GPL-2.0-only" +depends="py3-rapidfuzz" +makedepends=" + cmake + cython + py3-gpep517 + py3-scikit-build + python3-dev + rapidfuzz + samurai + " +checkdepends="py3-pytest" +subpackages="$pkgname-pyc" +source="$pkgname-$pkgver.tar.gz::https://github.com/maxbachmann/Levenshtein/archive/refs/tags/v$pkgver.tar.gz" +builddir="$srcdir/Levenshtein-$pkgver" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer \ + .dist/Levenshtein*.whl + .testenv/bin/python3 -m pytest +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/Levenshtein*.whl +} + +sha512sums=" +936dab36b15df6f2ee5425efb1fdb1490fb8f618ba453f464a6dd615bcc427e55ceee7474f06b34392871d9f38470b853602a11d8f9776eee66ec34156511ca4 py3-levenshtein-0.25.1.tar.gz +" diff --git a/backports/py3-limits/APKBUILD b/backports/py3-limits/APKBUILD index af4516d..67f4a82 100644 --- a/backports/py3-limits/APKBUILD +++ b/backports/py3-limits/APKBUILD @@ -1,7 +1,7 @@ # Contributor: lauren n. liberda # Maintainer: lauren n. liberda pkgname=py3-limits -pkgver=3.14.1 +pkgver=3.10.1 pkgrel=0 pkgdesc="Rate limiting using various strategies and storage backends such as redis & memcached" url="https://github.com/alisaifee/limits" @@ -11,7 +11,7 @@ depends=" py3-deprecated python3 " -makedepends="py3-setuptools py3-gpep517" +makedepends="py3-setuptools" checkdepends=" py3-flaky py3-mongo @@ -19,40 +19,32 @@ checkdepends=" py3-pytest-asyncio py3-pytest-benchmark py3-pytest-cov - py3-pytest-lazy-fixtures - py3-pymemcache py3-redis " subpackages="$pkgname-pyc" +options="!check" # most tests are integration with db connections, assume all connectors installed source=" https://github.com/alisaifee/limits/archive/refs/tags/$pkgver/limits-$pkgver.tar.gz our-std-is-good-enough.patch - tests-drop-etcd3-and-k-argument.patch " builddir="$srcdir/limits-$pkgver" build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 + python3 setup.py build } check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - gpep517 install-wheel --destdir .testenv --prefix '' .dist/*.whl - .testenv/bin/python3 -m pytest -W ignore::DeprecationWarning \ + pytest \ -m 'not benchmark and not etcd and not integration and not memcached' \ -k 'not aio and not Storage and not strategy' -v } package() { - gpep517 install-wheel --destdir "$pkgdir" \ - .dist/*.whl + python3 setup.py install --prefix=/usr --root="$pkgdir" } sha512sums=" -f30c7ec19c2d1edad9ed77dc590ae35717efa3956a4d97e465793e1923a4af08dc9921d90ee95d3c54ce3364b867ca67a9de62c61d627e07a3f50da20bdabd0f limits-3.14.1.tar.gz -271e3b0501f9f144eda8d2e96c93b285714e339b9217385e38cdbce1f4dec88f9c949e9419f8be94885092e7977f7dca29b86b5499e9fead678b42a686c337db our-std-is-good-enough.patch -e84f4db49349a6feba0f701b9d4357c5f66d64c4a23f8ce512528b0f44b5bbef55041c02d92aae3a4cc8d5340846f9e909217beb869a5aeb49df166dd29ae9e3 tests-drop-etcd3-and-k-argument.patch +5daa23a2a53dc56ba8e24fe72000bd69bfade9956a159c02731ef3a240682f467c4ae1f58878139fd9d0f67806bf115f6f97999160a2f66f34c64fdad1503d70 limits-3.10.1.tar.gz +8db0d96f860a07bbc554504a6e94b61546a6be22c0b9736c6b5aca628db9b618efc30609fce3702ee8e3812e1e34329c04d2f34bd69fdaecaa7c7fa0a2bde8a7 our-std-is-good-enough.patch " diff --git a/backports/py3-limits/our-std-is-good-enough.patch b/backports/py3-limits/our-std-is-good-enough.patch index 32d7d73..f2247e7 100644 --- a/backports/py3-limits/our-std-is-good-enough.patch +++ b/backports/py3-limits/our-std-is-good-enough.patch @@ -1,11 +1,22 @@ +--- ./limits/util.py.orig ++++ ./limits/util.py +@@ -8,7 +8,7 @@ + from types import ModuleType + from typing import TYPE_CHECKING, cast + +-import importlib_resources ++from importlib import resources as importlib_resources + from packaging.version import Version + + from limits.typing import Dict, List, NamedTuple, Optional, Tuple, Type, Union --- ./limits/typing.py.orig +++ ./limits/typing.py -@@ -13,7 +13,7 @@ +@@ -11,7 +11,7 @@ Union, ) --from typing_extensions import ClassVar, Counter, ParamSpec, Protocol, TypeAlias -+from typing import ClassVar, Counter, ParamSpec, Protocol, TypeAlias +-from typing_extensions import ClassVar, Counter, ParamSpec, Protocol ++from typing import ClassVar, Counter, ParamSpec, Protocol Serializable = Union[int, str, float] - + diff --git a/backports/py3-limits/tests-drop-etcd3-and-k-argument.patch b/backports/py3-limits/tests-drop-etcd3-and-k-argument.patch deleted file mode 100644 index cab3a06..0000000 --- a/backports/py3-limits/tests-drop-etcd3-and-k-argument.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff --git a/tests/conftest.py.orig b/tests/conftest.py -index 2aeb758dda6..a9b2b8b2bd1 100644 ---- a/tests/conftest.py.orig -+++ b/tests/conftest.py -@@ -3,7 +3,6 @@ import platform - import socket - import time - --import etcd3 - import pymemcache - import pymemcache.client - import pymongo -diff --git a/pytest.ini.orig b/pytest.ini -index 38c40a713d0..8c6659e21c2 100644 ---- a/pytest.ini.orig -+++ b/pytest.ini -@@ -17,7 +17,6 @@ addopts = - -rfEsxX - --cov=limits - -m "not benchmark" -- -K - filterwarnings = - error - module::ResourceWarning diff --git a/backports/py3-mapbox-earcut/APKBUILD b/backports/py3-mapbox-earcut/APKBUILD new file mode 100644 index 0000000..222a870 --- /dev/null +++ b/backports/py3-mapbox-earcut/APKBUILD @@ -0,0 +1,32 @@ +# Contributor: Aiden Grossman +# Maintainer: Aiden Grossman +pkgname=py3-mapbox-earcut +pkgver=1.0.1 +pkgrel=1 +pkgdesc="Python bindings for the mapbox earcut c++ library" +url="https://github.com/skogler/mapbox_earcut_python" +arch="all" +license="ISC" +depends="py3-numpy" +makedepends="py3-setuptools py3-pybind11-dev python3-dev" +checkdepends="pytest" +source="$pkgname-$pkgver.tar.gz::https://github.com/skogler/mapbox_earcut_python/archive/refs/tags/v$pkgver.tar.gz" +builddir="$srcdir/mapbox_earcut_python-$pkgver" + +build() { + python3 setup.py build +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages test-env + test-env/bin/python3 setup.py install + test-env/bin/python3 -m pytest +} + +package() { + python3 setup.py install --skip-build --root="$pkgdir" +} + +sha512sums=" +cdb32585cbaf74c15e59af0ae70d983dd2f9bc9cfe1b59b3eadc4d442f7d962241854b589a035deae67cacd9334833b911d0981f0d417fe587348fc7d24f0c0a py3-mapbox-earcut-1.0.1.tar.gz +" diff --git a/backports/py3-numpy-stl/APKBUILD b/backports/py3-numpy-stl/APKBUILD new file mode 100644 index 0000000..6ef430b --- /dev/null +++ b/backports/py3-numpy-stl/APKBUILD @@ -0,0 +1,34 @@ +# Contributor: Aiden Grossman +# Maintainer: Aiden Grossman +pkgname=py3-numpy-stl +pkgver=3.0.1 +pkgrel=2 +pkgdesc="Library for working with STLs" +url="https://github.com/WoLpH/numpy-stl" +# s390x: no py3-utils +arch="noarch !s390x" +license="BSD-3-Clause" +depends="python3 py3-utils py3-numpy" +makedepends="py3-setuptools" +checkdepends="py3-pytest" +subpackages="$pkgname-pyc" +source="$pkgname-$pkgver.tar.gz::https://github.com/wolph/numpy-stl/releases/download/v$pkgver/numpy-stl-$pkgver.tar.gz" +builddir="$srcdir/numpy-stl-$pkgver" + +build() { + python3 setup.py build +} + +check() { + # deselected test needs xvfb-run and fails + pytest \ + --deselect tests/test_ascii.py::test_use_with_qt_with_custom_locale_decimal_delimeter +} + +package() { + python3 setup.py install --skip-build --root="$pkgdir" +} + +sha512sums=" +d01abb8f54738600ce36c8c44e1392957061030e7accbbfa0352aea4a904323a96712099146b311ce9518f243317c25c47cfb30930469602c0ad439de9f43c5f py3-numpy-stl-3.0.1.tar.gz +" diff --git a/backports/py3-pathvalidate/APKBUILD b/backports/py3-pathvalidate/APKBUILD new file mode 100644 index 0000000..6ea6d42 --- /dev/null +++ b/backports/py3-pathvalidate/APKBUILD @@ -0,0 +1,35 @@ +# Contributor: lauren n. liberda +# Maintainer: lauren n. liberda +pkgname=py3-pathvalidate +pkgver=3.2.0 +pkgrel=1 +pkgdesc="Python library to sanitize/validate a string such as filenames/file-paths/etc" +url="https://github.com/thombashi/pathvalidate" +arch="noarch" +license="MIT" +depends="python3" +makedepends=" + py3-gpep517 + py3-setuptools + py3-wheel + " +checkdepends="py3-pytest py3-click py3-faker" +options="!check" # tests require unpackaged unmaintained dependencies +subpackages="$pkgname-pyc" +source="https://github.com/thombashi/pathvalidate/archive/refs/tags/v$pkgver/pathvalidate-$pkgver.tar.gz" +builddir="$srcdir/pathvalidate-$pkgver" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +d1b0e49028bc5497558d9a0c15b4e3c301cacb439bebccffc467fc23001854877dbc81a214cc6eb34c5a905a88c4f9394f5865a4de42f354b2450a3bfe10bb9e pathvalidate-3.2.0.tar.gz +" diff --git a/backports/py3-pivy/APKBUILD b/backports/py3-pivy/APKBUILD new file mode 100644 index 0000000..e681d20 --- /dev/null +++ b/backports/py3-pivy/APKBUILD @@ -0,0 +1,42 @@ +# Contributor: Aiden Grossman +# Maintainer: Aiden Grossman +pkgname=py3-pivy +_pkgname=pivy +pkgver=0.6.8 +pkgrel=3 +pkgdesc="Python3 bindings for coin" +url="https://github.com/coin3d/pivy" +# riscv64 blocked by qt5-qtwebengine via py3-pyside2 +# py3-pyside2 is not available on armhf +# py3-pyside2 broken +#arch="all !armhf !riscv64" +license="ISC" +depends="py3-pyside2" +makedepends="swig soqt-dev qt5-qtbase-dev python3-dev glu-dev cmake samurai" +checkdepends="py3-pytest" +options="!check" # test suite is interactive and requires full installation +source="$pkgname-$pkgver.tar.gz::https://github.com/coin3d/pivy/archive/refs/tags/$pkgver.tar.gz + qt5.patch + " +builddir="$srcdir/$_pkgname-$pkgver" + +build() { + if [ "$CBUILD" != "$CHOST" ]; then + CMAKE_CROSSOPTS="-DCMAKE_SYSTEM_NAME=Linux -DCMAKE_HOST_SYSTEM_NAME=Linux" + fi + cmake -B build -G Ninja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_SHARED_LIBS=True \ + -DCMAKE_BUILD_TYPE=None \ + $CMAKE_CROSSOPTS + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} + +sha512sums=" +723b09028f2e3075056b9588cebad0ddccbc98d0c15552b9565c177b0de764b9645f88ea2bc534ccf606f2e0b59f91e1d03551b55ece66c0654ce9cdf09a1a7c py3-pivy-0.6.8.tar.gz +7750ded3eb09da510ba5f84e7957c2ae1f92be0df280901fd9c9eba4164758a8f2d436e2d6ae7634a91aed12609f4eefd181922e6caed0b4906c6bc9dbd7b562 qt5.patch +" diff --git a/backports/py3-pivy/qt5.patch b/backports/py3-pivy/qt5.patch new file mode 100644 index 0000000..7dfdc97 --- /dev/null +++ b/backports/py3-pivy/qt5.patch @@ -0,0 +1,11 @@ +--- ./qtinfo.py ++++ ./qtinfo.py +@@ -7,7 +7,7 @@ + if qmake_command: + self._qmake_command = qmake_command + else: +- self._qmake_command = [find_executable("qmake"),] ++ self._qmake_command = [find_executable("qmake-qt5"),] + self._dict = {} + # bind all variables early at __init__ time. + for thing in self.__class__.__dict__: diff --git a/backports/py3-pyinstrument/APKBUILD b/backports/py3-pyinstrument/APKBUILD new file mode 100644 index 0000000..5c3fa36 --- /dev/null +++ b/backports/py3-pyinstrument/APKBUILD @@ -0,0 +1,35 @@ +# Contributor: Aiden Grossman +# Maintainer: Aiden Grossman +pkgname=py3-pyinstrument +pkgver=4.6.2 +pkgrel=0 +pkgdesc="Call stack profiler for Python" +url="https://github.com/joerick/pyinstrument" +arch="all" +license="BSD-3-Clause" +makedepends="py3-gpep517 py3-setuptools py3-wheel python3-dev" +checkdepends="py3-pytest py3-flaky py3-trio py3-greenlet" +subpackages="$pkgname-pyc" +source="$pkgname-$pkgver.tar.gz::https://github.com/joerick/pyinstrument/archive/refs/tags/v$pkgver.tar.gz" +builddir="$srcdir/pyinstrument-$pkgver" +options="!check" # currently not working + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer .dist/*.whl + .testenv/bin/python3 -m pytest +} + +package() { + python3 -m installer -d "$pkgdir" .dist/*.whl +} + +sha512sums=" +da23988e6c68876cb8920ce284326f349425303ae36718c5c479b72b5f5ca5d48ced1674bcab71851f60e81a0985bb668bfa89a8b96cc20a1faa0dd7e623ec50 py3-pyinstrument-4.6.2.tar.gz +" diff --git a/backports/py3-pynest2d/APKBUILD b/backports/py3-pynest2d/APKBUILD new file mode 100644 index 0000000..5be721e --- /dev/null +++ b/backports/py3-pynest2d/APKBUILD @@ -0,0 +1,49 @@ +# Contributor: Anjandev Momi +# Maintainer: Anjandev Momi +pkgname=py3-pynest2d +pkgver=5.2.2 +pkgrel=2 +pkgdesc="Python bindings for libnest2d" +url="https://github.com/Ultimaker/pynest2d" +arch="all" +license="LGPL-3.0-or-later" +makedepends="samurai cmake libnest2d-dev clipper-dev py3-sip nlopt-dev boost-dev python3-dev" +source="$pkgname-$pkgver.tar.gz::https://github.com/Ultimaker/pynest2d/archive/refs/tags/$pkgver.tar.gz + cmake.patch + cmake-helpers.patch + pyproject.patch" +builddir="$srcdir/pynest2d-$pkgver" +options="!check" # doesn't seem like tests are packaged anymore + +prepare() { + mv ./python ./src + default_prepare +} + +build() { + if [ "$CBUILD" != "$CHOST" ]; then + CMAKE_CROSSOPTS="-DCMAKE_SYSTEM_NAME=Linux -DCMAKE_HOST_SYSTEM_NAME=Linux" + fi + cmake -B build -G Ninja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_SHARED_LIBS=True \ + -DCMAKE_BUILD_TYPE=Release \ + $CMAKE_CROSSOPTS + cmake --build build +} + +check() { + cd build + CTEST_OUTPUT_ON_FAILURE=TRUE ctest +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} + +sha512sums=" +f5d701e431c81f8d2da7b14ca5677d3303064cf7910e80d289d7ff8fe99117fb9c470242f25f21fa8e1f064c63accf5349f4956981e316b09b14342223f79b61 py3-pynest2d-5.2.2.tar.gz +c8133d221a2fd8ed5fb32933a69f992dab2e83cdb9db30dcb715ebdfe6d403be3e94df393a921f506b63ef9d8b30a107f26b57cd39810faa9bee461afe5e1afd cmake.patch +dbf6609a21e39ae87fa89f2faf9c98a011f287cb383c5b74f92f41e3a350b487e69643c94110f7fcc25e9e25921a698cc20d9ee021d36ff908d03c0d5ca88a46 cmake-helpers.patch +f1b710509d97b5a2a4d021747e73884d27ae00fd93a04c90be01f123cdcc59be4757b4a73dff9c9921b7794551e531cf6729e4211144c60294d107b92a928b51 pyproject.patch +" diff --git a/backports/py3-pynest2d/cmake-helpers.patch b/backports/py3-pynest2d/cmake-helpers.patch new file mode 100644 index 0000000..288df07 --- /dev/null +++ b/backports/py3-pynest2d/cmake-helpers.patch @@ -0,0 +1,253 @@ +--- /dev/null ++++ ./cmake/CMakeBuilder.py +@@ -0,0 +1,13 @@ ++from sipbuild import SetuptoolsBuilder ++ ++ ++class CMakeBuilder(SetuptoolsBuilder): ++ def __init__(self, project, **kwargs): ++ print("Using the CMake builder") ++ super().__init__(project, **kwargs) ++ ++ def build(self): ++ """ Only Generate the source files """ ++ print("Generating the source files") ++ self._generate_bindings() ++ self._generate_scripts() +\ No newline at end of file +--- /dev/null ++++ ./cmake/FindSIP.py +@@ -0,0 +1,57 @@ ++# -*- coding: utf-8 -*- ++# ++# Copyright (c) 2007, Simon Edwards ++# All rights reserved. ++# ++# Redistribution and use in source and binary forms, with or without ++# modification, are permitted provided that the following conditions are met: ++# * Redistributions of source code must retain the above copyright ++# notice, this list of conditions and the following disclaimer. ++# * Redistributions in binary form must reproduce the above copyright ++# notice, this list of conditions and the following disclaimer in the ++# documentation and/or other materials provided with the distribution. ++# * Neither the name of the Simon Edwards nor the ++# names of its contributors may be used to endorse or promote products ++# derived from this software without specific prior written permission. ++# ++# THIS SOFTWARE IS PROVIDED BY Simon Edwards ''AS IS'' AND ANY ++# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++# DISCLAIMED. IN NO EVENT SHALL Simon Edwards BE LIABLE FOR ANY ++# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ++# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ++# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ++# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++# ++# FindSIP.py ++# Copyright (c) 2007, Simon Edwards ++# Redistribution and use is allowed according to the terms of the BSD license. ++# For details see the accompanying COPYING-CMAKE-SCRIPTS file. ++ ++try: ++ import sipbuild ++ ++ print("sip_version:%06.0x" % sipbuild.version.SIP_VERSION) ++ print("sip_version_num:%d" % sipbuild.version.SIP_VERSION) ++ print("sip_version_str:%s" % sipbuild.version.SIP_VERSION_STR) ++ ++ from distutils.sysconfig import get_python_lib ++ python_modules_dir = get_python_lib(plat_specific=1) ++ print("default_sip_dir:%s" % python_modules_dir) ++except ImportError: # Code for SIP v4 ++ import sipconfig ++ ++ sipcfg = sipconfig.Configuration() ++ print("sip_version:%06.0x" % sipcfg.sip_version) ++ print("sip_version_num:%d" % sipcfg.sip_version) ++ print("sip_version_str:%s" % sipcfg.sip_version_str) ++ print("sip_bin:%s" % sipcfg.sip_bin) ++ print("default_sip_dir:%s" % sipcfg.default_sip_dir) ++ print("sip_inc_dir:%s" % sipcfg.sip_inc_dir) ++ # SIP 4.19.10+ has new sipcfg.sip_module_dir ++ if hasattr(sipcfg, "sip_module_dir"): ++ print("sip_module_dir:%s" % sipcfg.sip_module_dir) ++ else: ++ print("sip_module_dir:%s" % sipcfg.sip_mod_dir) +--- /dev/null ++++ ./cmake/FindSIP.cmake +@@ -0,0 +1,65 @@ ++# Find SIP ++# ~~~~~~~~ ++# ++# SIP website: http://www.riverbankcomputing.co.uk/sip/index.php ++# ++# Find the installed version of SIP. FindSIP should be called after Python ++# has been found. ++# ++# This file defines the following variables: ++# ++# SIP_VERSION - The version of SIP found expressed as a 6 digit hex number ++# suitable for comparison as a string. ++# ++# SIP_VERSION_STR - The version of SIP found as a human readable string. ++# ++# SIP_BINARY_PATH - Path and filename of the SIP command line executable. ++# ++# SIP_INCLUDE_DIR - Directory holding the SIP C++ header file. ++# ++# SIP_DEFAULT_SIP_DIR - Default directory where .sip files should be installed ++# into. ++ ++# Copyright (c) 2007, Simon Edwards ++# Redistribution and use is allowed according to the terms of the BSD license. ++# For details see the accompanying COPYING-CMAKE-SCRIPTS file. ++ ++ ++ ++IF(SIP_VERSION OR SIP_BUILD_EXECUTABLE) ++ # Already in cache, be silent ++ SET(SIP_FOUND TRUE) ++ELSE() ++ ++ FIND_FILE(_find_sip_py FindSIP.py PATHS ${CMAKE_MODULE_PATH} NO_CMAKE_FIND_ROOT_PATH) ++ ++ EXECUTE_PROCESS(COMMAND ${Python_EXECUTABLE} ${_find_sip_py} OUTPUT_VARIABLE sip_config) ++ IF(sip_config) ++ STRING(REGEX REPLACE "^sip_version:([^\n]+).*$" "\\1" SIP_VERSION ${sip_config}) ++ STRING(REGEX REPLACE ".*\nsip_version_num:([^\n]+).*$" "\\1" SIP_VERSION_NUM ${sip_config}) ++ STRING(REGEX REPLACE ".*\nsip_version_str:([^\n]+).*$" "\\1" SIP_VERSION_STR ${sip_config}) ++ STRING(REGEX REPLACE ".*\ndefault_sip_dir:([^\n]+).*$" "\\1" SIP_DEFAULT_SIP_DIR ${sip_config}) ++ IF(${SIP_VERSION_STR} VERSION_LESS 5) ++ STRING(REGEX REPLACE ".*\nsip_bin:([^\n]+).*$" "\\1" SIP_BINARY_PATH ${sip_config}) ++ STRING(REGEX REPLACE ".*\nsip_inc_dir:([^\n]+).*$" "\\1" SIP_INCLUDE_DIR ${sip_config}) ++ STRING(REGEX REPLACE ".*\nsip_module_dir:([^\n]+).*$" "\\1" SIP_MODULE_DIR ${sip_config}) ++ ELSE(${SIP_VERSION_STR} VERSION_LESS 5) ++ FIND_PROGRAM(SIP_BUILD_EXECUTABLE sip-build) ++ ENDIF(${SIP_VERSION_STR} VERSION_LESS 5) ++ SET(SIP_FOUND TRUE) ++ ENDIF(sip_config) ++ ++ IF(SIP_FOUND) ++ IF(NOT SIP_FIND_QUIETLY) ++ MESSAGE(STATUS "Found SIP version: ${SIP_VERSION_STR}") ++ ENDIF(NOT SIP_FIND_QUIETLY) ++ ELSE(SIP_FOUND) ++ IF(SIP_FIND_REQUIRED) ++ MESSAGE(FATAL_ERROR "Could not find SIP") ++ ENDIF(SIP_FIND_REQUIRED) ++ ENDIF(SIP_FOUND) ++ ++ENDIF() ++ ++include(${CMAKE_SOURCE_DIR}/cmake/SIPMacros.cmake) ++ADD_DEFINITIONS(-DSIP_VERSION=0x${SIP_VERSION}) +--- /dev/null ++++ ./cmake/SIPMacros.cmake +@@ -0,0 +1,105 @@ ++# Macros for SIP ++# ~~~~~~~~~~~~~~ ++ ++set(SIP_ARGS --pep484-pyi --no-protected-is-public) ++ ++function(add_sip_module MODULE_TARGET) ++ if(NOT SIP_BUILD_EXECUTABLE) ++ set(SIP_BUILD_EXECUTABLE ${CMAKE_PREFIX_PATH}/Scripts/sip-build) ++ endif() ++ ++ message(STATUS "SIP: Generating pyproject.toml") ++ configure_file(${CMAKE_SOURCE_DIR}/pyproject.toml.in ${CMAKE_CURRENT_BINARY_DIR}/pyproject.toml) ++ configure_file(${CMAKE_SOURCE_DIR}/cmake/CMakeBuilder.py ${CMAKE_CURRENT_BINARY_DIR}/CMakeBuilder.py) ++ if(WIN32) ++ set(ext .pyd) ++ set(env_path_sep ";") ++ else() ++ set(ext .so) ++ set(env_path_sep ":") ++ endif() ++ ++ message(STATUS "SIP: Generating source files") ++ execute_process( ++ COMMAND ${CMAKE_COMMAND} -E env "PYTHONPATH=${PYTHONPATH}${env_path_sep}$ENV{PYTHONPATH}${env_path_sep}${CMAKE_CURRENT_BINARY_DIR}" ${SIP_BUILD_EXECUTABLE} ${SIP_ARGS} ++ COMMAND_ECHO STDOUT ++ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/ ++ ) ++ # This will generate the source-files during the configuration step in CMake. Needed to obtain the sources ++ ++ # Touch the generated files (8 in total) to make them dirty and force them to rebuild ++ message(STATUS "SIP: Touching the source files") ++ set(_sip_output_files) ++ list(LENGTH SIP_FILES _no_outputfiles) ++ foreach(_concat_file_nr RANGE 0 ${_no_outputfiles}) ++ if(${_concat_file_nr} LESS 8) ++ list(APPEND _sip_output_files "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/sip${MODULE_TARGET}part${_concat_file_nr}.cpp") ++ endif() ++ endforeach() ++ ++ # Find the generated source files ++ message(STATUS "SIP: Collecting the generated source files") ++ file(GLOB sip_c "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/*.c") ++ file(GLOB sip_cpp "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/*.cpp") ++ file(GLOB sip_hdr "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/*.h") ++ ++ # Add the user specified source files ++ message(STATUS "SIP: Collecting the user specified source files") ++ get_target_property(usr_src ${MODULE_TARGET} SOURCES) ++ ++ # create the target library and link all the files (generated and user specified ++ message(STATUS "SIP: Linking the interface target against the shared library") ++ set(sip_sources "${sip_c}" "${sip_cpp}") ++ if(${usr_src}) ++ list(APPEND sip_sources "${usr_src}") ++ endif() ++ ++ if (BUILD_SHARED_LIBS) ++ add_library("sip_${MODULE_TARGET}" SHARED ${sip_sources}) ++ else() ++ add_library("sip_${MODULE_TARGET}" STATIC ${sip_sources}) ++ endif() ++ ++ # Make sure that the library name of the target is the same as the MODULE_TARGET with the appropriate extension ++ target_link_libraries("sip_${MODULE_TARGET}" PRIVATE "${MODULE_TARGET}") ++ set_target_properties("sip_${MODULE_TARGET}" PROPERTIES PREFIX "") ++ set_target_properties("sip_${MODULE_TARGET}" PROPERTIES SUFFIX ${ext}) ++ set_target_properties("sip_${MODULE_TARGET}" PROPERTIES OUTPUT_NAME "${MODULE_TARGET}") ++ ++ # Add the custom command to (re-)generate the files and mark them as dirty. This allows the user to actually work ++ # on the sip definition files without having to reconfigure the complete project. ++ add_custom_command( ++ TARGET "sip_${MODULE_TARGET}" ++ COMMAND ${CMAKE_COMMAND} -E env "PYTHONPATH=${PYTHONPATH}${env_path_sep}$ENV{PYTHONPATH}${env_path_sep}${CMAKE_CURRENT_BINARY_DIR}" ${SIP_BUILD_EXECUTABLE} ${SIP_ARGS} ++ COMMAND ${CMAKE_COMMAND} -E touch ${_sip_output_files} ++ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/ ++ MAIN_DEPENDENCY ${MODULE_SIP} ++ DEPENDS ${sip_sources} ++ VERBATIM ++ ) ++ ++ set_target_properties("sip_${MODULE_TARGET}" ++ PROPERTIES ++ RESOURCE "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/${MODULE_TARGET}.pyi") ++endfunction() ++ ++function(install_sip_module MODULE_TARGET) ++ if(DEFINED ARGV1) ++ set(_install_path ${ARGV1}) ++ else() ++ if(DEFINED Python_SITEARCH) ++ set(_install_path ${Python_SITEARCH}) ++ elseif(DEFINED Python_SITELIB) ++ set(_install_path ${Python_SITELIB}) ++ else() ++ message(FATAL_ERROR "SIP: Specify the site-packages location") ++ endif() ++ endif() ++ message(STATUS "SIP: Installing Python module and PEP 484 file in ${_install_path}") ++ install(TARGETS "sip_${MODULE_TARGET}" ++ ARCHIVE DESTINATION ${_install_path} ++ LIBRARY DESTINATION ${_install_path} ++ RUNTIME DESTINATION ${_install_path} ++ RESOURCE DESTINATION ${_install_path} ++ ) ++endfunction() diff --git a/backports/py3-pynest2d/cmake.patch b/backports/py3-pynest2d/cmake.patch new file mode 100644 index 0000000..c2ac24e --- /dev/null +++ b/backports/py3-pynest2d/cmake.patch @@ -0,0 +1,34 @@ +--- ./CMakeLists.txt.orig ++++ ./CMakeLists.txt +@@ -2,16 +2,25 @@ + project(pynest2d) + cmake_minimum_required(VERSION 3.20) + +-find_package(nest2d REQUIRED) +-find_package(cpython REQUIRED) ++list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) + +-find_package(standardprojectsettings REQUIRED) +-find_package(sipbuildtool REQUIRED) ++find_package(Libnest2D REQUIRED) + ++find_package(Python REQUIRED COMPONENTS Interpreter Development) ++find_package(SIP REQUIRED 6.5.0) ++ + add_library(pynest2d INTERFACE) +-use_threads(pynest2d) + +-target_link_libraries(pynest2d INTERFACE nest2d::nest2d cpython::cpython) ++target_include_directories(pynest2d ++ INTERFACE ++ $ ++ $ ++ ) ++ ++find_package(Threads REQUIRED) ++find_package(Boost REQUIRED) ++target_link_libraries(pynest2d INTERFACE Libnest2D::libnest2d Python::Python Threads::Threads Boost::boost) ++ + add_sip_module(pynest2d) + install_sip_module(pynest2d) + diff --git a/backports/py3-pynest2d/pyproject.patch b/backports/py3-pynest2d/pyproject.patch new file mode 100644 index 0000000..3c74389 --- /dev/null +++ b/backports/py3-pynest2d/pyproject.patch @@ -0,0 +1,21 @@ +--- /dev/null ++++ ./pyproject.toml.in +@@ -0,0 +1,17 @@ ++[build-system] ++requires = ["sip >=6, <7"] ++build-backend = "sipbuild.api" ++ ++[tool.sip.metadata] ++name = "pynest2d" ++ ++[tool.sip.project] ++builder-factory = "CMakeBuilder" ++sip-files-dir = "${CMAKE_CURRENT_SOURCE_DIR}/src/" ++sip-include-dirs = ["CMAKE_CURRENT_SOURCE_DIR/src/"] ++build-dir = "${CMAKE_CURRENT_BINARY_DIR}/pynest2d/" ++ ++[tool.sip.bindings.pynest2d] ++exceptions = true ++release-gil = true ++concatenate = 8 +\ No newline at end of file diff --git a/backports/py3-pyside2/APKBUILD b/backports/py3-pyside2/APKBUILD new file mode 100644 index 0000000..aabc0a6 --- /dev/null +++ b/backports/py3-pyside2/APKBUILD @@ -0,0 +1,75 @@ +# Maintainer: Luca Weiss +pkgname=py3-pyside2 +pkgver=5.15.11 +pkgrel=0 +pkgdesc="Enables the use of Qt5 APIs in Python applications" +url="https://doc.qt.io/qtforpython-5/" +# armhf blocked by shiboken2 +#arch="all !armhf" +license="LGPL-3.0-only AND GPL-2.0-only" +_llvmver=15 +depends="py3-shiboken2" +makedepends=" + clang$_llvmver-dev + cmake + libshiboken2-dev + qt5-qt3d-dev + qt5-qtbase-dev + qt5-qtcharts-dev + qt5-qtdatavis3d-dev + qt5-qtdeclarative-dev + qt5-qtlocation-dev + qt5-qtmultimedia-dev + qt5-qtquickcontrols2-dev + qt5-qtremoteobjects-dev + qt5-qtscript-dev + qt5-qtscxml-dev + qt5-qtsensors-dev + qt5-qtserialport-dev + qt5-qtspeech-dev + qt5-qtsvg-dev + qt5-qttools-dev + qt5-qtwebchannel-dev + qt5-qtwebsockets-dev + qt5-qtx11extras-dev + qt5-qtxmlpatterns-dev + samurai + shiboken2 + py3-setuptools + py3-zope-event + " +case "$CARCH" in +armv7|aarch64|x86|x86_64) + makedepends="$makedepends qt5-qtwebengine-dev" + ;; +esac +subpackages="$pkgname-dev" +source="https://download.qt.io/official_releases/QtForPython/pyside2/PySide2-$pkgver-src/pyside-setup-opensource-src-$pkgver.tar.xz" +builddir="$srcdir/pyside-setup-opensource-src-$pkgver" +options="!check" # Tests fail + +build() { + export LLVM_INSTALL_DIR=/usr/lib/llvm$_llvmver + cmake -B build -G Ninja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_SHARED_LIBS=True \ + -DCMAKE_BUILD_TYPE=None \ + -DPYTHON_EXECUTABLE=/usr/bin/python3 \ + -DBUILD_TESTS=OFF \ + sources/pyside2 + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + # Install egg info + export PATH="/usr/lib/qt5/bin:$PATH" + python3 setup.py egg_info --build-type=pyside2 + pythonpath="$(python3 -c "from sysconfig import get_path; print(get_path('platlib'))")" + cp -r PySide2.egg-info "$pkgdir/$pythonpath" +} + +sha512sums=" +377b3f6a793313cf7f5bea0dcef6630bac32d79b247e213d0b1b719805b35692aa8dd9a8896c75c6266f05af38809f574051d64b1a2f958a48c90167feccfb91 pyside-setup-opensource-src-5.15.11.tar.xz +" diff --git a/backports/py3-pytube/APKBUILD b/backports/py3-pytube/APKBUILD new file mode 100644 index 0000000..6d27b69 --- /dev/null +++ b/backports/py3-pytube/APKBUILD @@ -0,0 +1,42 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-pytube +#_pkgreal is used by apkbuild-pypi to find modules at PyPI +_pkgreal=pytube +pkgver=15.0.0 +pkgrel=1 +pkgdesc="Python 3 library for downloading YouTube Videos." +url="https://pypi.python.org/project/pytube" +arch="noarch" +license="Unlicense" +checkdepends="py3-pytest" +makedepends="py3-setuptools py3-gpep517 py3-wheel" +source="$pkgname-$pkgver.tar.gz::https://github.com/pytube/pytube/archive/refs/tags/v$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" +subpackages="$pkgname-pyc" +# 7/131 units failing due to: +# AttributeError: 'NoneType' object has no attribute 'register_on_progress_callback' +# AttributeError: 'YouTube' object has no attribute 'stream_monostate' +# StopIteration +options="!check" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer "$builddir"/.dist/*.whl + .testenv/bin/python3 -m pytest -v +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +fc28d87c56bae9da3def68224a03687cc521c26e6f38dd41abe81e84f91bb2cab73dc8c7dbbc388787cf066f7d7304c78162cc60c544b99e75187b760c64b4a3 py3-pytube-15.0.0.tar.gz +" diff --git a/backports/py3-rapidjson/APKBUILD b/backports/py3-rapidjson/APKBUILD new file mode 100644 index 0000000..6208593 --- /dev/null +++ b/backports/py3-rapidjson/APKBUILD @@ -0,0 +1,56 @@ +# Contributor: Marian Buschsieweke +# Maintainer: Marian Buschsieweke +pkgname=py3-rapidjson +pkgver=1.12 +pkgrel=0 +pkgdesc="Python3 wrapper around RapidJSON" +url="https://github.com/python-rapidjson/python-rapidjson" +arch="all" +license="MIT" +depends=" + python3 + " +makedepends=" + py3-gpep517 + py3-setuptools + py3-wheel + python3-dev + rapidjson-dev + " +checkdepends=" + py3-pytest + py3-tz + " +source="$pkgname-$pkgver.tar.gz::https://github.com/python-rapidjson/python-rapidjson/archive/refs/tags/v$pkgver.tar.gz" +builddir="$srcdir/"python-rapidjson-$pkgver + +prepare() { + default_prepare + + # workaround setup.py complaining about "sources not found" + mkdir -v rapidjson/include +} + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + PYTHONPATH="$(echo "$PWD"/build/lib.linux*)" pytest \ + --ignore benchmarks \ + --deselect tests/test_base_types.py::test_base_values \ + --deselect tests/test_unicode.py::test_unicode_decode_error \ + --deselect tests/test_validator.py::test_additional_and_pattern_properties_valid \ + # +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +15d021491c64db53352830d8f3f62c8b48476fcb001f97c174bcbb9053d973eb135ceb92f14290a58f6ad6c5dfb24d02f6385c8cad70f4a74f5a5726aa0728e7 py3-rapidjson-1.12.tar.gz +" diff --git a/backports/py3-rtree/APKBUILD b/backports/py3-rtree/APKBUILD new file mode 100644 index 0000000..52acba3 --- /dev/null +++ b/backports/py3-rtree/APKBUILD @@ -0,0 +1,34 @@ +# Contributor: Alex Yam +# Maintainer: Alex Yam +pkgname=py3-rtree +_pkgname=rtree +pkgver=1.1.0 +pkgrel=1 +pkgdesc="Python3 library for r-tree spatial index (wrapper for libspatialindex)" +url="https://pypi.org/project/Rtree/" +# s390x: Test failed: IndexSerialization::test_interleaving - AssertionError +# s390x: Test failed: IndexStream::test_stream_input - AssertionError +arch="noarch !s390x" +license="MIT" +depends="python3 libspatialindex-dev" +makedepends="py3-setuptools py3-wheel" +checkdepends="py3-pytest py3-numpy" +subpackages="$pkgname-pyc" +source="$pkgname-$pkgver.tar.gz::https://github.com/Toblerity/rtree/archive/$pkgver.tar.gz" +builddir="$srcdir"/$_pkgname-$pkgver + +build() { + python3 setup.py build +} + +check() { + python3 -m pytest -v --doctest-modules rtree tests +} + +package() { + python3 setup.py install --skip-build --root="$pkgdir" +} + +sha512sums=" +97a87027e49520f12cb86444ee8a9795fabeec6d8f0e3e869f2714df8f7c649ced1374385852af0ce7d7eb91e5a2cb464a4330807be15d538dc0a4d8de7b7ca2 py3-rtree-1.1.0.tar.gz +" diff --git a/backports/py3-sphinxcontrib-autoprogram/APKBUILD b/backports/py3-sphinxcontrib-autoprogram/APKBUILD new file mode 100644 index 0000000..9a1f6f8 --- /dev/null +++ b/backports/py3-sphinxcontrib-autoprogram/APKBUILD @@ -0,0 +1,41 @@ +# Maintainer: Hoang Nguyen +pkgname=py3-sphinxcontrib-autoprogram +pkgver=0.1.8 +pkgrel=2 +pkgdesc="Sphinx extension to document CLI programs" +url="https://github.com/sphinx-contrib/autoprogram" +arch="noarch" +license="BSD-2-Clause" +depends="python3 py3-six py3-sphinx" +makedepends=" + py3-gpep517 + py3-setuptools + py3-wheel + " +subpackages="$pkgname-pyc" +source=" + $pkgname-$pkgver.tar.gz::https://github.com/sphinx-contrib/autoprogram/archive/refs/tags/$pkgver.tar.gz + " +builddir="$srcdir/autoprogram-$pkgver" +options="!check" # no tests + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer .dist/*.whl + .testenv/bin/python3 -m unittest discover +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +bc07f25c34884f8e3130bbe5d2d6fb645f45aca5794c6b11a772f0351d680380d3e63cfe4b60aabf05ad8c6f44bae72e592500454598d31cc3c98dcbc8dbf899 py3-sphinxcontrib-autoprogram-0.1.8.tar.gz +" diff --git a/backports/py3-svgpath/105_use-better-than-nothing-font.patch b/backports/py3-svgpath/105_use-better-than-nothing-font.patch new file mode 100644 index 0000000..7e3d18d --- /dev/null +++ b/backports/py3-svgpath/105_use-better-than-nothing-font.patch @@ -0,0 +1,300 @@ +From a17ed35e490a99a7dfab9833f6f3be86f004f699 Mon Sep 17 00:00:00 2001 +From: Benjamin Drung +Date: Fri, 15 Dec 2023 15:32:16 +0100 +Subject: [PATCH] tests: Use better than nothing font +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Pillow 10.1.0 uses a version of Aileron Regular instead of the previous +“better than nothing” default font (in case FreeType support is +available). This font change changes the resulting bitmap. + +Use the "better than nothing" font to keep the expected result +identical. The proper solution is either to use one specific font in +svg.path or make pillow support loading the “better than nothing” +default font. + +Bug-Debian: https://bugs.debian.org/1055159 +--- + tests/font.py | 145 ++++++++++++++++++++++++++++++++ + tests/test_boundingbox_image.py | 18 ++-- + tests/test_image.py | 18 +++- + 3 files changed, 170 insertions(+), 11 deletions(-) + create mode 100644 tests/font.py + +diff --git a/tests/font.py b/tests/font.py +new file mode 100644 +index 0000000..d375f49 +--- /dev/null ++++ b/tests/font.py +@@ -0,0 +1,145 @@ ++# Code taken from https://github.com/python-pillow/Pillow/blob/main/src/PIL/ImageFont.py ++# ++# License: the open source HPND License ++# Copyright (c) 1997-2003 by Secret Labs AB ++# Copyright (c) 1996-2003 by Fredrik Lundh ++ ++from PIL import Image, ImageFont ++from io import BytesIO ++import base64 ++ ++ ++def get_better_than_nothing_font(): ++ font = ImageFont.ImageFont() ++ font._load_pilfont_data( ++ # courB08 ++ BytesIO( ++ base64.b64decode( ++ b""" ++UElMZm9udAo7Ozs7OzsxMDsKREFUQQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAA//8AAQAAAAAAAAABAAEA ++BgAAAAH/+gADAAAAAQAAAAMABgAGAAAAAf/6AAT//QADAAAABgADAAYAAAAA//kABQABAAYAAAAL ++AAgABgAAAAD/+AAFAAEACwAAABAACQAGAAAAAP/5AAUAAAAQAAAAFQAHAAYAAP////oABQAAABUA ++AAAbAAYABgAAAAH/+QAE//wAGwAAAB4AAwAGAAAAAf/5AAQAAQAeAAAAIQAIAAYAAAAB//kABAAB ++ACEAAAAkAAgABgAAAAD/+QAE//0AJAAAACgABAAGAAAAAP/6AAX//wAoAAAALQAFAAYAAAAB//8A ++BAACAC0AAAAwAAMABgAAAAD//AAF//0AMAAAADUAAQAGAAAAAf//AAMAAAA1AAAANwABAAYAAAAB ++//kABQABADcAAAA7AAgABgAAAAD/+QAFAAAAOwAAAEAABwAGAAAAAP/5AAYAAABAAAAARgAHAAYA ++AAAA//kABQAAAEYAAABLAAcABgAAAAD/+QAFAAAASwAAAFAABwAGAAAAAP/5AAYAAABQAAAAVgAH ++AAYAAAAA//kABQAAAFYAAABbAAcABgAAAAD/+QAFAAAAWwAAAGAABwAGAAAAAP/5AAUAAABgAAAA ++ZQAHAAYAAAAA//kABQAAAGUAAABqAAcABgAAAAD/+QAFAAAAagAAAG8ABwAGAAAAAf/8AAMAAABv ++AAAAcQAEAAYAAAAA//wAAwACAHEAAAB0AAYABgAAAAD/+gAE//8AdAAAAHgABQAGAAAAAP/7AAT/ ++/gB4AAAAfAADAAYAAAAB//oABf//AHwAAACAAAUABgAAAAD/+gAFAAAAgAAAAIUABgAGAAAAAP/5 ++AAYAAQCFAAAAiwAIAAYAAP////oABgAAAIsAAACSAAYABgAA////+gAFAAAAkgAAAJgABgAGAAAA ++AP/6AAUAAACYAAAAnQAGAAYAAP////oABQAAAJ0AAACjAAYABgAA////+gAFAAAAowAAAKkABgAG ++AAD////6AAUAAACpAAAArwAGAAYAAAAA//oABQAAAK8AAAC0AAYABgAA////+gAGAAAAtAAAALsA ++BgAGAAAAAP/6AAQAAAC7AAAAvwAGAAYAAP////oABQAAAL8AAADFAAYABgAA////+gAGAAAAxQAA ++AMwABgAGAAD////6AAUAAADMAAAA0gAGAAYAAP////oABQAAANIAAADYAAYABgAA////+gAGAAAA ++2AAAAN8ABgAGAAAAAP/6AAUAAADfAAAA5AAGAAYAAP////oABQAAAOQAAADqAAYABgAAAAD/+gAF ++AAEA6gAAAO8ABwAGAAD////6AAYAAADvAAAA9gAGAAYAAAAA//oABQAAAPYAAAD7AAYABgAA//// +++gAFAAAA+wAAAQEABgAGAAD////6AAYAAAEBAAABCAAGAAYAAP////oABgAAAQgAAAEPAAYABgAA ++////+gAGAAABDwAAARYABgAGAAAAAP/6AAYAAAEWAAABHAAGAAYAAP////oABgAAARwAAAEjAAYA ++BgAAAAD/+gAFAAABIwAAASgABgAGAAAAAf/5AAQAAQEoAAABKwAIAAYAAAAA//kABAABASsAAAEv ++AAgABgAAAAH/+QAEAAEBLwAAATIACAAGAAAAAP/5AAX//AEyAAABNwADAAYAAAAAAAEABgACATcA ++AAE9AAEABgAAAAH/+QAE//wBPQAAAUAAAwAGAAAAAP/7AAYAAAFAAAABRgAFAAYAAP////kABQAA ++AUYAAAFMAAcABgAAAAD/+wAFAAABTAAAAVEABQAGAAAAAP/5AAYAAAFRAAABVwAHAAYAAAAA//sA ++BQAAAVcAAAFcAAUABgAAAAD/+QAFAAABXAAAAWEABwAGAAAAAP/7AAYAAgFhAAABZwAHAAYAAP// ++//kABQAAAWcAAAFtAAcABgAAAAD/+QAGAAABbQAAAXMABwAGAAAAAP/5AAQAAgFzAAABdwAJAAYA ++AP////kABgAAAXcAAAF+AAcABgAAAAD/+QAGAAABfgAAAYQABwAGAAD////7AAUAAAGEAAABigAF ++AAYAAP////sABQAAAYoAAAGQAAUABgAAAAD/+wAFAAABkAAAAZUABQAGAAD////7AAUAAgGVAAAB ++mwAHAAYAAAAA//sABgACAZsAAAGhAAcABgAAAAD/+wAGAAABoQAAAacABQAGAAAAAP/7AAYAAAGn ++AAABrQAFAAYAAAAA//kABgAAAa0AAAGzAAcABgAA////+wAGAAABswAAAboABQAGAAD////7AAUA ++AAG6AAABwAAFAAYAAP////sABgAAAcAAAAHHAAUABgAAAAD/+wAGAAABxwAAAc0ABQAGAAD////7 ++AAYAAgHNAAAB1AAHAAYAAAAA//sABQAAAdQAAAHZAAUABgAAAAH/+QAFAAEB2QAAAd0ACAAGAAAA ++Av/6AAMAAQHdAAAB3gAHAAYAAAAA//kABAABAd4AAAHiAAgABgAAAAD/+wAF//0B4gAAAecAAgAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAB ++//sAAwACAecAAAHpAAcABgAAAAD/+QAFAAEB6QAAAe4ACAAGAAAAAP/5AAYAAAHuAAAB9AAHAAYA ++AAAA//oABf//AfQAAAH5AAUABgAAAAD/+QAGAAAB+QAAAf8ABwAGAAAAAv/5AAMAAgH/AAACAAAJ ++AAYAAAAA//kABQABAgAAAAIFAAgABgAAAAH/+gAE//sCBQAAAggAAQAGAAAAAP/5AAYAAAIIAAAC ++DgAHAAYAAAAB//kABf/+Ag4AAAISAAUABgAA////+wAGAAACEgAAAhkABQAGAAAAAP/7AAX//gIZ ++AAACHgADAAYAAAAA//wABf/9Ah4AAAIjAAEABgAAAAD/+QAHAAACIwAAAioABwAGAAAAAP/6AAT/ +++wIqAAACLgABAAYAAAAA//kABP/8Ai4AAAIyAAMABgAAAAD/+gAFAAACMgAAAjcABgAGAAAAAf/5 ++AAT//QI3AAACOgAEAAYAAAAB//kABP/9AjoAAAI9AAQABgAAAAL/+QAE//sCPQAAAj8AAgAGAAD/ ++///7AAYAAgI/AAACRgAHAAYAAAAA//kABgABAkYAAAJMAAgABgAAAAH//AAD//0CTAAAAk4AAQAG ++AAAAAf//AAQAAgJOAAACUQADAAYAAAAB//kABP/9AlEAAAJUAAQABgAAAAH/+QAF//4CVAAAAlgA ++BQAGAAD////7AAYAAAJYAAACXwAFAAYAAP////kABgAAAl8AAAJmAAcABgAA////+QAGAAACZgAA ++Am0ABwAGAAD////5AAYAAAJtAAACdAAHAAYAAAAA//sABQACAnQAAAJ5AAcABgAA////9wAGAAAC ++eQAAAoAACQAGAAD////3AAYAAAKAAAAChwAJAAYAAP////cABgAAAocAAAKOAAkABgAA////9wAG ++AAACjgAAApUACQAGAAD////4AAYAAAKVAAACnAAIAAYAAP////cABgAAApwAAAKjAAkABgAA//// +++gAGAAACowAAAqoABgAGAAAAAP/6AAUAAgKqAAACrwAIAAYAAP////cABQAAAq8AAAK1AAkABgAA ++////9wAFAAACtQAAArsACQAGAAD////3AAUAAAK7AAACwQAJAAYAAP////gABQAAAsEAAALHAAgA ++BgAAAAD/9wAEAAACxwAAAssACQAGAAAAAP/3AAQAAALLAAACzwAJAAYAAAAA//cABAAAAs8AAALT ++AAkABgAAAAD/+AAEAAAC0wAAAtcACAAGAAD////6AAUAAALXAAAC3QAGAAYAAP////cABgAAAt0A ++AALkAAkABgAAAAD/9wAFAAAC5AAAAukACQAGAAAAAP/3AAUAAALpAAAC7gAJAAYAAAAA//cABQAA ++Au4AAALzAAkABgAAAAD/9wAFAAAC8wAAAvgACQAGAAAAAP/4AAUAAAL4AAAC/QAIAAYAAAAA//oA ++Bf//Av0AAAMCAAUABgAA////+gAGAAADAgAAAwkABgAGAAD////3AAYAAAMJAAADEAAJAAYAAP// ++//cABgAAAxAAAAMXAAkABgAA////9wAGAAADFwAAAx4ACQAGAAD////4AAYAAAAAAAoABwASAAYA ++AP////cABgAAAAcACgAOABMABgAA////+gAFAAAADgAKABQAEAAGAAD////6AAYAAAAUAAoAGwAQ ++AAYAAAAA//gABgAAABsACgAhABIABgAAAAD/+AAGAAAAIQAKACcAEgAGAAAAAP/4AAYAAAAnAAoA ++LQASAAYAAAAA//gABgAAAC0ACgAzABIABgAAAAD/+QAGAAAAMwAKADkAEQAGAAAAAP/3AAYAAAA5 ++AAoAPwATAAYAAP////sABQAAAD8ACgBFAA8ABgAAAAD/+wAFAAIARQAKAEoAEQAGAAAAAP/4AAUA ++AABKAAoATwASAAYAAAAA//gABQAAAE8ACgBUABIABgAAAAD/+AAFAAAAVAAKAFkAEgAGAAAAAP/5 ++AAUAAABZAAoAXgARAAYAAAAA//gABgAAAF4ACgBkABIABgAAAAD/+AAGAAAAZAAKAGoAEgAGAAAA ++AP/4AAYAAABqAAoAcAASAAYAAAAA//kABgAAAHAACgB2ABEABgAAAAD/+AAFAAAAdgAKAHsAEgAG ++AAD////4AAYAAAB7AAoAggASAAYAAAAA//gABQAAAIIACgCHABIABgAAAAD/+AAFAAAAhwAKAIwA ++EgAGAAAAAP/4AAUAAACMAAoAkQASAAYAAAAA//gABQAAAJEACgCWABIABgAAAAD/+QAFAAAAlgAK ++AJsAEQAGAAAAAP/6AAX//wCbAAoAoAAPAAYAAAAA//oABQABAKAACgClABEABgAA////+AAGAAAA ++pQAKAKwAEgAGAAD////4AAYAAACsAAoAswASAAYAAP////gABgAAALMACgC6ABIABgAA////+QAG ++AAAAugAKAMEAEQAGAAD////4AAYAAgDBAAoAyAAUAAYAAP////kABQACAMgACgDOABMABgAA//// +++QAGAAIAzgAKANUAEw== ++""" ++ ) ++ ), ++ Image.open( ++ BytesIO( ++ base64.b64decode( ++ b""" ++iVBORw0KGgoAAAANSUhEUgAAAx4AAAAUAQAAAAArMtZoAAAEwElEQVR4nABlAJr/AHVE4czCI/4u ++Mc4b7vuds/xzjz5/3/7u/n9vMe7vnfH/9++vPn/xyf5zhxzjt8GHw8+2d83u8x27199/nxuQ6Od9 ++M43/5z2I+9n9ZtmDBwMQECDRQw/eQIQohJXxpBCNVE6QCCAAAAD//wBlAJr/AgALyj1t/wINwq0g ++LeNZUworuN1cjTPIzrTX6ofHWeo3v336qPzfEwRmBnHTtf95/fglZK5N0PDgfRTslpGBvz7LFc4F ++IUXBWQGjQ5MGCx34EDFPwXiY4YbYxavpnhHFrk14CDAAAAD//wBlAJr/AgKqRooH2gAgPeggvUAA ++Bu2WfgPoAwzRAABAAAAAAACQgLz/3Uv4Gv+gX7BJgDeeGP6AAAD1NMDzKHD7ANWr3loYbxsAD791 ++NAADfcoIDyP44K/jv4Y63/Z+t98Ovt+ub4T48LAAAAD//wBlAJr/AuplMlADJAAAAGuAphWpqhMx ++in0A/fRvAYBABPgBwBUgABBQ/sYAyv9g0bCHgOLoGAAAAAAAREAAwI7nr0ArYpow7aX8//9LaP/9 ++SjdavWA8ePHeBIKB//81/83ndznOaXx379wAAAD//wBlAJr/AqDxW+D3AABAAbUh/QMnbQag/gAY ++AYDAAACgtgD/gOqAAAB5IA/8AAAk+n9w0AAA8AAAmFRJuPo27ciC0cD5oeW4E7KA/wD3ECMAn2tt ++y8PgwH8AfAxFzC0JzeAMtratAsC/ffwAAAD//wBlAJr/BGKAyCAA4AAAAvgeYTAwHd1kmQF5chkG ++ABoMIHcL5xVpTfQbUqzlAAAErwAQBgAAEOClA5D9il08AEh/tUzdCBsXkbgACED+woQg8Si9VeqY ++lODCn7lmF6NhnAEYgAAA/NMIAAAAAAD//2JgjLZgVGBg5Pv/Tvpc8hwGBjYGJADjHDrAwPzAjv/H ++/Wf3PzCwtzcwHmBgYGcwbZz8wHaCAQMDOwMDQ8MCBgYOC3W7mp+f0w+wHOYxO3OG+e376hsMZjk3 ++AAAAAP//YmCMY2A4wMAIN5e5gQETPD6AZisDAwMDgzSDAAPjByiHcQMDAwMDg1nOze1lByRu5/47 ++c4859311AYNZzg0AAAAA//9iYGDBYihOIIMuwIjGL39/fwffA8b//xv/P2BPtzzHwCBjUQAAAAD/ ++/yLFBrIBAAAA//9i1HhcwdhizX7u8NZNzyLbvT97bfrMf/QHI8evOwcSqGUJAAAA//9iYBB81iSw ++pEE170Qrg5MIYydHqwdDQRMrAwcVrQAAAAD//2J4x7j9AAMDn8Q/BgYLBoaiAwwMjPdvMDBYM1Tv ++oJodAAAAAP//Yqo/83+dxePWlxl3npsel9lvLfPcqlE9725C+acfVLMEAAAA//9i+s9gwCoaaGMR ++evta/58PTEWzr21hufPjA8N+qlnBwAAAAAD//2JiWLci5v1+HmFXDqcnULE/MxgYGBj+f6CaJQAA ++AAD//2Ji2FrkY3iYpYC5qDeGgeEMAwPDvwQBBoYvcTwOVLMEAAAA//9isDBgkP///0EOg9z35v// ++Gc/eeW7BwPj5+QGZhANUswMAAAD//2JgqGBgYGBgqEMXlvhMPUsAAAAA//8iYDd1AAAAAP//AwDR ++w7IkEbzhVQAAAABJRU5ErkJggg== ++""" ++ ) ++ ) ++ ), ++ ) ++ return font +diff --git a/tests/test_boundingbox_image.py b/tests/test_boundingbox_image.py +index 21f19a7..414f0b1 100644 +--- a/tests/test_boundingbox_image.py ++++ b/tests/test_boundingbox_image.py +@@ -5,6 +5,7 @@ + + from PIL import Image, ImageDraw, ImageColor, ImageChops + from svg.path.path import CubicBezier, QuadraticBezier, Line, Arc ++from .font import get_better_than_nothing_font + + + RED = ImageColor.getcolor("red", mode="RGB") +@@ -57,17 +58,15 @@ def draw_boundingbox(self, path): + sys.platform != "linux", reason="Different platforms have different fonts" + ) + def test_image(self): +- self.draw.text((10, 10), "This is an SVG line:") +- self.draw.text( +- (10, 100), +- "The red line is a bounding box.", +- ) ++ font = get_better_than_nothing_font() ++ self.draw.text((10, 10), "This is an SVG line:", font=font) ++ self.draw.text((10, 100), "The red line is a bounding box.", font=font) + + line1 = Line(40 + 60j, 200 + 80j) + self.draw_path(line1) + self.draw_boundingbox(line1) + +- self.draw.text((10, 140), "These are Arc segments:") ++ self.draw.text((10, 140), "These are Arc segments:", font=font) + arc1 = Arc(260 + 320j, 100 + 100j, 0, 1, 1, 260 + 319j) + self.draw_path(arc1) + self.draw_boundingbox(arc1) +@@ -83,6 +82,7 @@ def test_image(self): + self.draw.text( + (10, 500), + "Next we have a quadratic bezier curve, with one tangent:", ++ font=font, + ) + start = 30 + 600j + control = 400 + 540j +@@ -95,12 +95,16 @@ def test_image(self): + self.draw.text( + (10, 670), + "The white dot is the control point, and the cyan lines are ", ++ font=font, ++ ) ++ self.draw.text( ++ (10, 690), "illustrating the how the control point works.", font=font + ) +- self.draw.text((10, 690), "illustrating the how the control point works.") + + self.draw.text( + (10, 730), + "Lastly is a cubic bezier, with 2 tangents, and 2 control points:", ++ font=font, + ) + + start = 200 + 800j +diff --git a/tests/test_image.py b/tests/test_image.py +index 49967ea..ae3a357 100644 +--- a/tests/test_image.py ++++ b/tests/test_image.py +@@ -4,6 +4,7 @@ + from math import sqrt + + from svg.path.path import CubicBezier, QuadraticBezier, Line, Arc ++from .font import get_better_than_nothing_font + + + RED = ImageColor.getcolor("red", mode="RGB") +@@ -57,25 +58,30 @@ def draw_tangents(self, path, count): + self.draw.line([c2t(p), c2t(tt + p)], fill=YELLOW, width=1) + + def test_image(self): +- self.draw.text((10, 10), "This is an SVG line:") ++ font = get_better_than_nothing_font() ++ self.draw.text((10, 10), "This is an SVG line:", font=font) + self.draw.text( + (10, 100), + "The red line is a tangent, and the yellow is 90 degrees from that.", ++ font=font, + ) + + line1 = Line(40 + 60j, 200 + 80j) + self.draw_path(line1) + self.draw_tangents(line1, 1) + +- self.draw.text((10, 140), "This is an Arc segment, almost a whole circle:") ++ self.draw.text( ++ (10, 140), "This is an Arc segment, almost a whole circle:", font=font ++ ) + arc1 = Arc(260 + 320j, 100 + 100j, 0, 1, 1, 260 + 319j) + self.draw_path(arc1) + self.draw_tangents(arc1, 5) +- self.draw.text((10, 460), "With five tangents.") ++ self.draw.text((10, 460), "With five tangents.", font=font) + + self.draw.text( + (10, 500), + "Next we have a quadratic bezier curve, with one tangent:", ++ font=font, + ) + start = 30 + 600j + control = 400 + 540j +@@ -88,12 +94,16 @@ def test_image(self): + self.draw.text( + (10, 670), + "The white dot is the control point, and the cyan lines are ", ++ font=font, ++ ) ++ self.draw.text( ++ (10, 690), "illustrating the how the control point works.", font=font + ) +- self.draw.text((10, 690), "illustrating the how the control point works.") + + self.draw.text( + (10, 730), + "Lastly is a cubic bezier, with 2 tangents, and 2 control points:", ++ font=font, + ) + + start = 30 + 800j diff --git a/backports/py3-svgpath/APKBUILD b/backports/py3-svgpath/APKBUILD new file mode 100644 index 0000000..9cab4db --- /dev/null +++ b/backports/py3-svgpath/APKBUILD @@ -0,0 +1,35 @@ +# Contributor: Aiden Grossman +# Maintainer: Aiden Grossman +pkgname=py3-svgpath +pkgver=6.3 +pkgrel=1 +pkgdesc="SVG path and object parser" +url="https://github.com/regebro/svg.path" +arch="noarch" +license="MIT" +depends="python3" +makedepends="py3-setuptools" +checkdepends="py3-pytest py3-pillow" +subpackages="$pkgname-pyc" +source="$pkgname-$pkgver.tar.gz::https://github.com/regebro/svg.path/archive/refs/tags/$pkgver.tar.gz + 105_use-better-than-nothing-font.patch + no-install-tests.patch" +builddir="$srcdir/svg.path-$pkgver" + +build() { + python3 setup.py build +} + +check() { + PYTHONPATH=build/lib pytest +} + +package() { + python3 setup.py install --skip-build --root="$pkgdir" +} + +sha512sums=" +fd9dd9e1e603be5e212e3eb247c9f3778203f5285397a4cdde4c038c3f31f7bc2b8904491c208256996e2fbd39b4e5f7ea58d964bd5d22bc09c57e4bc2c70317 py3-svgpath-6.3.tar.gz +d12d32b0f6b075ee8602a7eee5dd1ddaa8f097fe3d471f2941fac0bba335641111eb2c0e2819dffea822f895833ffafa35baac80085cf759ca1ed8f7a6b92773 105_use-better-than-nothing-font.patch +62ab1e0980c7fb797f74b81c937a68b6af1112fff293e6ddec6389a8e490a08e181c37217408b58ce3a2ae2afda7813bb3bbe57d5414cfc18e4e53e6d2f2ea5a no-install-tests.patch +" diff --git a/backports/py3-svgpath/no-install-tests.patch b/backports/py3-svgpath/no-install-tests.patch new file mode 100644 index 0000000..994ce3c --- /dev/null +++ b/backports/py3-svgpath/no-install-tests.patch @@ -0,0 +1,15 @@ +--- ./setup.py.orig ++++ ./setup.py +@@ -1,3 +1,3 @@ +-from setuptools import setup ++from setuptools import setup, find_packages + +-setup() ++setup(packages=find_packages("src", exclude=["*tests"])) +--- ./MANIFEST.in.orig ++++ ./MANIFEST.in +@@ -3,3 +3,4 @@ + + recursive-include src *.png + ++global-exclude tests/* diff --git a/backports/py3-trimesh/APKBUILD b/backports/py3-trimesh/APKBUILD new file mode 100644 index 0000000..b804328 --- /dev/null +++ b/backports/py3-trimesh/APKBUILD @@ -0,0 +1,64 @@ +# Contributor: Aiden Grossman +# Maintainer: Aiden Grossman +pkgname=py3-trimesh +pkgver=3.22.1 +pkgrel=1 +pkgdesc="Python library for working with triangular meshes" +url="https://github.com/mikedh/trimesh" +# x86, armhf, armv7 Tests fail on int64 to int32 casts on these arches +# s390x, no py3-rtree +# riscv64, no py3-shapely +arch="noarch !x86 !armhf !armv7 !s390x !riscv64" +license="MIT" +depends=" + py3-colorlog + py3-jsonschema + py3-lxml + py3-mapbox-earcut + py3-msgpack + py3-networkx + py3-numpy + py3-pillow + py3-requests + py3-rtree + py3-scipy + py3-shapely + py3-svgpath + python3 + " +makedepends=" + py3-gpep517 + py3-setuptools + py3-wheel + " +checkdepends="py3-pytest py3-pytest-xdist py3-pyinstrument" +subpackages="$pkgname-pyc" +options="!check" # stuck test +source="$pkgname-$pkgver.tar.gz::https://github.com/mikedh/trimesh/archive/refs/tags/$pkgver.tar.gz" +builddir="$srcdir/trimesh-$pkgver" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + # test_obj.py: no format zae, probably needs more investigation + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer .dist/*.whl + .testenv/bin/python3 -m pytest -n auto \ + --deselect tests/test_dae.py::DAETest::test_material_round \ + --deselect tests/test_dae.py::DAETest::test_obj_roundtrip \ + --deselect tests/test_light.py::LightTests::test_scene \ + --deselect tests/test_obj.py::OBJTest::test_multi_nodupe +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +27952e0d29ccd110d4087b4144e0923706bed3cd0734e7a17d7f55738c6322849c5dad04ab4ecfe0638bc16d65d1e647d08905a396dd6ebd1f78c833a8b95636 py3-trimesh-3.22.1.tar.gz +" diff --git a/backports/py3-utils/APKBUILD b/backports/py3-utils/APKBUILD new file mode 100644 index 0000000..b89b2bf --- /dev/null +++ b/backports/py3-utils/APKBUILD @@ -0,0 +1,46 @@ +# Contributor: Marian Buschsieweke +# Maintainer: Marian Buschsieweke +pkgname=py3-utils +_pkgname=python-utils +pkgver=3.8.1 +pkgrel=1 +pkgdesc="Convenient utilities not included with the standard Python install" +url="https://github.com/WoLpH/python-utils" +arch="noarch" +license="BSD-3-Clause" +makedepends="py3-gpep517 py3-setuptools py3-wheel" +checkdepends="py3-pytest py3-pytest-asyncio py3-loguru" +subpackages="$pkgname-pyc" +source=" + https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz + + fix-setuptools-deprecation.patch + pytest.patch + typing-ext.patch + " + +builddir="$srcdir/$_pkgname-$pkgver" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer .dist/*.whl + .testenv/bin/python3 -m pytest +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +ccba9651cc99a8f4e3f13e7ff66a43a40d2e85bc735b6246524269495ff321225a0dcad9abd03ca9cb61b4b1b35a27009fac3fe87e3f748ffc5c87a956acd335 python-utils-3.8.1.tar.gz +c001453b958b8231806ef6a04fcd21e1d252eeec36d4e6cbfce35f0662bae76c3f7484e0e8ff06d68a3e9cc7d19c9cdbf792c13e0101c580bb5e8de9d837fde7 fix-setuptools-deprecation.patch +99cc91ad155f8140aedc9420659c0e560a4d816ac1f85468ddb3a9fdc87526d591da916441d63b601146a86fb2c26f61c9dfbe37e31b86ee605f732e24e7b465 pytest.patch +d68943e3301eaafe2a9ea27f382a2eba1ce98149d8cbbe91aa9222cf76a8f7bebba3d9dbfced54bd88c90688a6e18373f011fbb83cd36cbf2ecd3e36b034aa22 typing-ext.patch +" diff --git a/backports/py3-utils/fix-setuptools-deprecation.patch b/backports/py3-utils/fix-setuptools-deprecation.patch new file mode 100644 index 0000000..16b5e5a --- /dev/null +++ b/backports/py3-utils/fix-setuptools-deprecation.patch @@ -0,0 +1,11 @@ +--- a/setup.cfg ++++ b/setup.cfg +@@ -2,7 +2,7 @@ + test = pytest + + [metadata] +-description-file = README.rst ++description_file = README.rst + + [nosetests] + verbosity = 3 diff --git a/backports/py3-utils/pytest.patch b/backports/py3-utils/pytest.patch new file mode 100644 index 0000000..a7f016d --- /dev/null +++ b/backports/py3-utils/pytest.patch @@ -0,0 +1,14 @@ +diff --git a/pytest.ini b/pytest.ini +index a8e632a..e28ed7d 100644 +--- a/pytest.ini ++++ b/pytest.ini +@@ -5,9 +5,6 @@ python_files = + + addopts = + --doctest-modules +- --cov python_utils +- --cov-report term-missing +-; --mypy + + doctest_optionflags = + ALLOW_UNICODE diff --git a/backports/py3-utils/typing-ext.patch b/backports/py3-utils/typing-ext.patch new file mode 100644 index 0000000..ee6acb2 --- /dev/null +++ b/backports/py3-utils/typing-ext.patch @@ -0,0 +1,22 @@ +diff --git a/python_utils/types.py b/python_utils/types.py +index 01c319a..79ef950 100644 +--- a/python_utils/types.py ++++ b/python_utils/types.py +@@ -1,7 +1,6 @@ + # pyright: reportWildcardImportFromLibrary=false + import datetime + import decimal +-from typing_extensions import * # type: ignore # noqa: F403 + from typing import * # type: ignore # pragma: no cover # noqa: F403 + from types import * # type: ignore # pragma: no cover # noqa: F403 + +--- a/setup.py ++++ b/setup.py +@@ -29,7 +29,6 @@ + ), + package_data={'python_utils': ['py.typed']}, + long_description=long_description, +- install_requires=['typing_extensions>3.10.0.2'], + tests_require=['pytest'], + extras_require={ + 'loguru': [ diff --git a/user/py3-validators/APKBUILD b/backports/py3-validators/APKBUILD similarity index 99% rename from user/py3-validators/APKBUILD rename to backports/py3-validators/APKBUILD index 973c198..f14a156 100644 --- a/user/py3-validators/APKBUILD +++ b/backports/py3-validators/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: pkgname=py3-validators pkgver=0.20.0 -pkgrel=2 +pkgrel=1 pkgdesc="Python3 Data Validation for Humans" url="https://github.com/python-validators/validators" arch="noarch" diff --git a/backports/py3-webdavclient3/APKBUILD b/backports/py3-webdavclient3/APKBUILD new file mode 100644 index 0000000..0e47759 --- /dev/null +++ b/backports/py3-webdavclient3/APKBUILD @@ -0,0 +1,39 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-webdavclient3 +#_pkgreal is used by apkbuild-pypi to find modules at PyPI +_pkgreal=webdav-client-python-3 +pkgver=3.14.6 +pkgrel=1 +pkgdesc="WebDAV client" +url="https://pypi.python.org/project/webdavclient3" +arch="noarch" +license="MIT" +depends="py3-requests py3-lxml py3-dateutil" +checkdepends="py3-pytest" +makedepends="py3-setuptools py3-gpep517 py3-wheel" +source="$pkgname-$pkgver.tar.gz::https://github.com/ezhov-evgeny/webdav-client-python-3/archive/refs/tags/v$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" +subpackages="$pkgname-pyc" +options="!check" # Test suite needs more work to be setup to work in aports env + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer "$builddir"/.dist/*.whl + .testenv/bin/python3 -m pytest -v +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +4621dfe3fdde4a60a7580b37aaf2bf778ebae1615946e9ff5aedcf3d2d17b3e60511a4522f8023bd4756139c66027149a2afafbd07bf02d029d811bec172057d py3-webdavclient3-3.14.6.tar.gz +" diff --git a/backports/rapidfuzz/APKBUILD b/backports/rapidfuzz/APKBUILD new file mode 100644 index 0000000..4194b3a --- /dev/null +++ b/backports/rapidfuzz/APKBUILD @@ -0,0 +1,45 @@ +# Maintainer: +pkgname=rapidfuzz +pkgver=3.0.0 +pkgrel=0 +pkgdesc="Rapid fuzzy string matching in C++ using the Levenshtein Distance" +url="https://github.com/maxbachmann/rapidfuzz-cpp" +arch="all" +license="MIT" +makedepends=" + cmake + samurai + " +checkdepends="catch2-3" +source="$pkgname-cpp-$pkgver.tar.gz::https://github.com/maxbachmann/rapidfuzz-cpp/archive/refs/tags/v$pkgver.tar.gz + cstdint.patch + " +builddir="$srcdir/rapidfuzz-cpp-$pkgver" + +case "$CARCH" in +x86) + # float rounding + options="!check" + ;; +esac + +build() { + cmake -B build -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DRAPIDFUZZ_BUILD_TESTING="$(want_check && echo ON || echo OFF)" + cmake --build build +} + +check() { + ctest --test-dir build --output-on-failure +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} + +sha512sums=" +c5f20399bd1cfaa057c40cc17be5d730d50c1014553241f80f461a2fa89de670357d17a4f090394170263b09a53aa29238e5eff2caf9064a2a118c42aa14f320 rapidfuzz-cpp-3.0.0.tar.gz +216c5082498830d42d2eb14d3eba35dd08446008916c920db7b55eaf3dd2358f86a61c238315b85fefecf08b9e902dc4db172f91a8479cfd735e53c7b3e03bf5 cstdint.patch +" diff --git a/backports/rapidfuzz/cstdint.patch b/backports/rapidfuzz/cstdint.patch new file mode 100644 index 0000000..cce9033 --- /dev/null +++ b/backports/rapidfuzz/cstdint.patch @@ -0,0 +1,12 @@ +diff --git a/rapidfuzz_reference/JaroWinkler.hpp b/rapidfuzz_reference/JaroWinkler.hpp +index 3b717d8..9d415e4 100644 +--- a/rapidfuzz_reference/JaroWinkler.hpp ++++ b/rapidfuzz_reference/JaroWinkler.hpp +@@ -2,6 +2,7 @@ + /* Copyright © 2022-present Max Bachmann */ + + #pragma once ++#include + #include "Jaro.hpp" + + namespace rapidfuzz_reference { diff --git a/backports/shiboken2/APKBUILD b/backports/shiboken2/APKBUILD new file mode 100644 index 0000000..21abb74 --- /dev/null +++ b/backports/shiboken2/APKBUILD @@ -0,0 +1,94 @@ +# Contributor: Leo +# Maintainer: +pkgname=shiboken2 +pkgver=5.15.10 +pkgrel=0 +pkgdesc="CPython bindings generator for C++ libraries" +url="https://wiki.qt.io/Qt_for_Python/Shiboken" +arch="all !armhf" # qt5-qtxmlpatterns -> qt5-qtdeclarative +license="GPL-2.0-or-later" +_llvmver=15 +depends_dev="python3-dev" +makedepends=" + $depends_dev + clang$_llvmver-dev + cmake + libxml2-dev + libxslt-dev + llvm$_llvmver-dev + py3-numpy-dev + py3-setuptools + qt5-qtbase-dev + qt5-qtxmlpatterns-dev + samurai + " +subpackages="lib$pkgname:libs lib$pkgname-dev py3-$pkgname:py3" +source="https://download.qt.io/official_releases/QtForPython/pyside2/PySide2-$pkgver-src/pyside-setup-opensource-src-$pkgver.tar.xz + numpy-1.23.patch + py3.11.patch + " +builddir="$srcdir/pyside-setup-opensource-src-$pkgver" + +provides="shiboken=$pkgver-r$pkgrel" # For backward compatibility +replaces="shiboken" # For backward compatibility + +prepare() { + default_prepare + sed -e 's|0x030AFFFF|0x030BFFFF|' -i sources/shiboken2/libshiboken/pep384impl.h +} + +build() { + export LLVM_INSTALL_DIR=/usr/lib/llvm$_llvmver + cmake -B build -S sources/shiboken2 \ + -G Ninja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=None \ + -DBUILD_TESTS=OFF \ + -DUSE_PYTHON_VERSION=3 + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} + +libs() { + license="LGPL-2.1-or-later" + default_libs +} + +dev() { + license="LGPL-2.1-or-later" + default_dev + provides="shiboken-dev=$pkgver-r$pkgrel" + replaces="shiboken-dev" + depends=" + $depends_dev + lib$pkgname=$pkgver-r$pkgrel + $pkgname=$pkgver-r$pkgrel + py3-$pkgname=$pkgver-r$pkgrel + " +} + +py3() { + license="LGPL-2.1-or-later" + depends="" + pkgdesc="Python3 shiboken bindings" + mkdir -p "$subpkgdir"/usr/lib + mv "$pkgdir"/usr/lib/python3* "$subpkgdir"/usr/lib + provides="py3-shiboken=$pkgver-r$pkgrel" # For backward compatibility + replaces="py3-shiboken" # For backward compatibility + + # Install egg info + cd "$builddir" + export PATH="/usr/lib/qt5/bin:$PATH" + python3 setup.py egg_info --build-type=shiboken2 + pythonpath="$(python3 -c "from sysconfig import get_path; print(get_path('platlib'))")" + cp -r shiboken2.egg-info "$subpkgdir/$pythonpath" +} + +sha512sums=" +dc548ab870fcc5cc637de1bcb2f428527c650287fdb3720a3ade4638cc0bb12bc4a1ed87e7f6a4ec730a26742e08ceec806bcac6af91c7a01ddc0ce7980a79d2 pyside-setup-opensource-src-5.15.10.tar.xz +449b4f4b1717b131c05e798549d49186f73215b893843ccae4c434dd95ad3f4dce0f886fe5cbd3443100d4852cb6b3d6a6d2f0a102f69f2a095bb6c500d69244 numpy-1.23.patch +985ff9a10da017db2fcf1526aa1d3502a22c29c7a640e9f8a46bc67ed2acea74f6eec4daa1baf04b90fbdbffe80ecce07aaa0f267783ff66f279120f1ff64ec5 py3.11.patch +" diff --git a/backports/shiboken2/numpy-1.23.patch b/backports/shiboken2/numpy-1.23.patch new file mode 100644 index 0000000..eb18637 --- /dev/null +++ b/backports/shiboken2/numpy-1.23.patch @@ -0,0 +1,15 @@ +diff --git a/sources/shiboken2/libshiboken/sbknumpyarrayconverter.cpp b/sources/shiboken2/libshiboken/sbknumpyarrayconverter.cpp +index 996968f..a072dfd 100644 +--- a/sources/shiboken2/libshiboken/sbknumpyarrayconverter.cpp ++++ b/sources/shiboken2/libshiboken/sbknumpyarrayconverter.cpp +@@ -116,8 +116,8 @@ std::ostream &operator<<(std::ostream &str, PyArrayObject *o) + str << " NPY_ARRAY_NOTSWAPPED"; + if ((flags & NPY_ARRAY_WRITEABLE) != 0) + str << " NPY_ARRAY_WRITEABLE"; +- if ((flags & NPY_ARRAY_UPDATEIFCOPY) != 0) +- str << " NPY_ARRAY_UPDATEIFCOPY"; ++ if ((flags & NPY_ARRAY_WRITEBACKIFCOPY) != 0) ++ str << " NPY_ARRAY_WRITEBACKIFCOPY"; + } else { + str << '0'; + } diff --git a/backports/shiboken2/py3.11.patch b/backports/shiboken2/py3.11.patch new file mode 100644 index 0000000..8b7ac02 --- /dev/null +++ b/backports/shiboken2/py3.11.patch @@ -0,0 +1,162 @@ +From b64ad27d8dfeeecaaa8a98051252a32c9d998df4 Mon Sep 17 00:00:00 2001 +From: Friedemann Kleint +Date: Thu, 9 Jun 2022 16:50:41 +0200 +Subject: [PATCH] libshiboken: Fix a crash in Shiboken::Object::isValid() for + Python 3.11 + +The function is passed type objects for class methods, which caused +it to crash. + +The first clause did not catch this, and so it was cast to SbkObject +below. + +Add a type check to prevent this. + +Pick-to: 6.3 6.2 5.15 +Task-number: PYSIDE-1960 +Change-Id: Icfdd6fefb7156ac5961444bd5395109849a1d66e +Reviewed-by: Christian Tismer +Reviewed-by: Qt CI Bot +--- + sources/shiboken2/libshiboken/basewrapper.cpp | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/build_scripts/config.py b/build_scripts/config.py +index 00cbd3f..63e52a2 100644 +--- a/build_scripts/config.py ++++ b/build_scripts/config.py +@@ -94,6 +94,8 @@ class Config(object): + 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3.9', + 'Programming Language :: Python :: 3.10', ++ 'Programming Language :: Python :: 3.11', ++ 'Programming Language :: Python :: 3.12', + ] + + self.setup_script_dir = None +diff --git a/sources/pyside2/libpyside/pysideqflags.cpp b/sources/pyside2/libpyside/pysideqflags.cpp +index 8b224f2..784082a 100644 +--- a/sources/pyside2/libpyside/pysideqflags.cpp ++++ b/sources/pyside2/libpyside/pysideqflags.cpp +@@ -192,7 +192,7 @@ namespace QFlags + } + newspec.slots = SbkNewQFlagsType_spec.slots; + PyTypeObject *type = (PyTypeObject *)SbkType_FromSpec(&newspec); +- Py_TYPE(type) = &PyType_Type; ++ Py_SET_TYPE(type, &PyType_Type); + + PySideQFlagsType *flagsType = reinterpret_cast(type); + PepType_PFTP(flagsType)->converterPtr = &PepType_PFTP(flagsType)->converter; +diff --git a/sources/pyside2/libpyside/pysidesignal.cpp b/sources/pyside2/libpyside/pysidesignal.cpp +index b5069a0..ce89a9d 100644 +--- a/sources/pyside2/libpyside/pysidesignal.cpp ++++ b/sources/pyside2/libpyside/pysidesignal.cpp +@@ -162,7 +162,7 @@ PyTypeObject *PySideSignalTypeF(void) + if (!type) { + type = reinterpret_cast(SbkType_FromSpec(&PySideSignalType_spec)); + PyTypeObject *hold = Py_TYPE(type); +- Py_TYPE(type) = PySideMetaSignalTypeF(); ++ Py_SET_TYPE(type, PySideMetaSignalTypeF()); + Py_INCREF(Py_TYPE(type)); + Py_DECREF(hold); + } +diff --git a/sources/pyside2/libpyside/pysideweakref.cpp b/sources/pyside2/libpyside/pysideweakref.cpp +index cd90634..730990f 100644 +--- a/sources/pyside2/libpyside/pysideweakref.cpp ++++ b/sources/pyside2/libpyside/pysideweakref.cpp +@@ -90,7 +90,7 @@ PyObject *create(PyObject *obj, PySideWeakRefFunction func, void *userData) + + if (Py_TYPE(PySideCallableObjectTypeF()) == 0) + { +- Py_TYPE(PySideCallableObjectTypeF()) = &PyType_Type; ++ Py_SET_TYPE(PySideCallableObjectTypeF(), &PyType_Type); + PyType_Ready(PySideCallableObjectTypeF()); + } + +diff --git a/sources/shiboken2/libshiboken/basewrapper.cpp b/sources/shiboken2/libshiboken/basewrapper.cpp +index 7ac7fad..e2eccd0 100644 +--- a/sources/shiboken2/libshiboken/basewrapper.cpp ++++ b/sources/shiboken2/libshiboken/basewrapper.cpp +@@ -377,7 +377,7 @@ SbkObjectType *SbkObject_TypeF(void) + static PyTypeObject *type = nullptr; + if (!type) { + type = reinterpret_cast(SbkType_FromSpec(&SbkObject_Type_spec)); +- Py_TYPE(type) = SbkObjectType_TypeF(); ++ Py_SET_TYPE(type, SbkObjectType_TypeF()); + Py_INCREF(Py_TYPE(type)); + type->tp_weaklistoffset = offsetof(SbkObject, weakreflist); + type->tp_dictoffset = offsetof(SbkObject, ob_dict); +@@ -1160,7 +1160,7 @@ introduceWrapperType(PyObject *enclosingObject, + typeSpec->slots[0].pfunc = reinterpret_cast(baseType ? baseType : SbkObject_TypeF()); + + PyObject *heaptype = SbkType_FromSpecWithBases(typeSpec, baseTypes); +- Py_TYPE(heaptype) = SbkObjectType_TypeF(); ++ Py_SET_TYPE(heaptype, SbkObjectType_TypeF()); + Py_INCREF(Py_TYPE(heaptype)); + auto *type = reinterpret_cast(heaptype); + #if PY_VERSION_HEX < 0x03000000 +@@ -1525,6 +1525,7 @@ bool setCppPointer(SbkObject *sbkObj, PyTypeObject *desiredType, void *cptr) + bool isValid(PyObject *pyObj) + { + if (!pyObj || pyObj == Py_None ++ || PyType_Check(pyObj) != 0 + || Py_TYPE(Py_TYPE(pyObj)) != SbkObjectType_TypeF()) { + return true; + } +diff --git a/sources/shiboken2/libshiboken/sbkenum.cpp b/sources/shiboken2/libshiboken/sbkenum.cpp +index 7dc73df..9459e42 100644 +--- a/sources/shiboken2/libshiboken/sbkenum.cpp ++++ b/sources/shiboken2/libshiboken/sbkenum.cpp +@@ -754,7 +754,7 @@ newTypeWithName(const char *name, + PyTuple_SetItem(bases, 0, reinterpret_cast(basetype)); + auto *type = reinterpret_cast(SbkType_FromSpecWithBases(&newspec, bases)); + PyErr_Print(); +- Py_TYPE(type) = SbkEnumType_TypeF(); ++ Py_SET_TYPE(type, SbkEnumType_TypeF()); + + auto *enumType = reinterpret_cast(type); + PepType_SETP(enumType)->cppName = cppName; +diff --git a/sources/shiboken2/libshiboken/sbkstring.cpp b/sources/shiboken2/libshiboken/sbkstring.cpp +index 077fb53..a9d451c 100644 +--- a/sources/shiboken2/libshiboken/sbkstring.cpp ++++ b/sources/shiboken2/libshiboken/sbkstring.cpp +@@ -41,8 +41,14 @@ + #include "sbkstaticstrings_p.h" + #include "autodecref.h" + +-#include +-#include ++#if PY_VERSION_HEX >= 0x030B0000 || defined(Py_LIMITED_API) ++# define USE_INTERN_STRINGS ++#endif ++ ++#ifndef USE_INTERN_STRINGS ++# include ++# include ++#endif + + namespace Shiboken + { +@@ -233,6 +239,13 @@ Py_ssize_t len(PyObject *str) + // PyObject *attr = PyObject_GetAttr(obj, name()); + // + ++#ifdef USE_INTERN_STRINGS ++PyObject *createStaticString(const char *str) ++{ ++ return PyUnicode_InternFromString(str); ++} ++#else ++ + using StaticStrings = std::unordered_set; + + static void finalizeStaticStrings(); // forward +@@ -283,6 +296,8 @@ PyObject *createStaticString(const char *str) + return result; + } + ++#endif // !USE_INTERN_STRINGS ++ + /////////////////////////////////////////////////////////////////////// + // + // PYSIDE-1019: Helper function for snake_case vs. camelCase names diff --git a/backports/shntool/APKBUILD b/backports/shntool/APKBUILD index 05cb959..60dd2b5 100644 --- a/backports/shntool/APKBUILD +++ b/backports/shntool/APKBUILD @@ -1,8 +1,8 @@ # Contributor: Carlo Landmeter -# Maintainer: Jean-Louis Fuchs +# Maintainer: Jean-Louis Fuchs pkgname=shntool pkgver=3.0.10 -pkgrel=6 +pkgrel=4 pkgdesc="A multi-purpose WAVE data processing and reporting utility" url="http://shnutils.freeshell.org/shntool/" arch="all" @@ -13,7 +13,6 @@ source="http://shnutils.freeshell.org/shntool/dist/src/shntool-$pkgver.tar.gz shntool-3.0.10-large-size.patch shntool-3.0.10-large-times.patch 24bit.patch - no-cdquality-check.patch " build() { @@ -25,8 +24,7 @@ build() { --sysconfdir=/etc \ --mandir=/usr/share/man \ --infodir=/usr/share/info \ - --localstatedir=/var \ - CFLAGS="--std=gnu17" + --localstatedir=/var make } @@ -65,5 +63,4 @@ sha512sums=" fc44bca63d79b279db6d275caaacdb73cbebd6b902276a9052f005146fa125f4674e3cf559d46405637a337192f4a38f9bec4836af46e7ae52e4f220352c1ba7 shntool-3.0.10-large-size.patch 9780f22d93e20dd01d18067978bdf6cbb0b460bb80f41c4f4752b3322c3d70182b3acf35b789e30fc36ca52af6127e24c00599fb49b916f01448613721a94ebe shntool-3.0.10-large-times.patch 3c9cdd7936a6572a3c9dfc7575f5ff9a0981dd557add8e1113454487091c7b161040d25d3266937449295a1bb5317ee3515a84c3d7168360bf84643ed828e202 24bit.patch -e5b5fe4894eea92e026eec666900bde2b10ea33d4b0ffbf74a231e443c476e11b50eebc21bc2ff2b844ca48af0a41a7b6af77fdc524d0b1bd33d03f133d99992 no-cdquality-check.patch " diff --git a/backports/shntool/no-cdquality-check.patch b/backports/shntool/no-cdquality-check.patch deleted file mode 100644 index 4ca3717..0000000 --- a/backports/shntool/no-cdquality-check.patch +++ /dev/null @@ -1,21 +0,0 @@ -Last-Update: 2014-11-15 -Forwarded: yes -Author: Dmitry Smirnov -Bug-Debian: http://bugs.debian.org/769585 -Description: disable CD-quality check, needed to process 24bit 96kHz files. - ---- a/src/core_mode.c -+++ b/src/core_mode.c -@@ -344,10 +344,10 @@ - - *colon = 0; - *dot = 0; - -- if (PROB_NOT_CD(info)) -- st_error("m:ss.ff format can only be used with CD-quality files"); -+// if (PROB_NOT_CD(info)) -+// st_error("m:ss.ff format can only be used with CD-quality files"); - - min = atoi((const char *)buf); - sec = atoi((const char *)(colon+1)); - frames = atoi((const char *)(dot+1)); diff --git a/backports/signal-desktop/APKBUILD b/backports/signal-desktop/APKBUILD index ede5795..aebfd3b 100644 --- a/backports/signal-desktop/APKBUILD +++ b/backports/signal-desktop/APKBUILD @@ -1,15 +1,14 @@ # Contributor: lauren n. liberda -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) +# Maintainer: lauren n. liberda pkgname=signal-desktop -pkgver=7.76.0 -pkgrel=1 +pkgver=7.4.0 +pkgrel=0 pkgdesc="A messaging app for simple private communication with friends" url="https://github.com/signalapp/Signal-Desktop/" # same as electron -arch="aarch64 x86_64" +# aarch64: polyval-0.5.3 crate subdep uses unstable stdsimd feature +arch="x86_64" license="AGPL-3.0-only" -_llvmver=21 depends=" electron font-barlow @@ -25,10 +24,11 @@ makedepends=" cargo cargo-auditable cbindgen - clang$_llvmver-dev + clang-dev cmake crc32c-dev dav1d-dev + double-conversion-dev electron-dev electron-tasje ffmpeg-dev @@ -36,18 +36,18 @@ makedepends=" glib-dev gn jsoncpp-dev + libavif-dev libjpeg-turbo-dev libepoxy-dev + libevent-dev libsecret-dev libvpx-dev libwebp-dev - libxml2-dev lld - llvm$_llvmver-dev + llvm-dev mesa-dev nodejs npm - pnpm openh264-dev openssl-dev opus-dev @@ -56,7 +56,6 @@ makedepends=" pulseaudio-dev py3-setuptools python3 - re2-dev samurai sqlcipher-dev vips-dev @@ -64,38 +63,40 @@ makedepends=" " options="net !check" -# use _check_depends to validate this -_libsignalver=0.83.0 -_ringrtcver=2.59.0 -_webrtcver=7339c -_sqlcipherver=2.4.4 +# follow signal-desktop package.json -> @signalapp/libsignal-client +_libsignalver=0.41.2 + +# follow signal-desktop package.json -> @signalapp/ringrtc +_ringrtcver=2.39.2 + +# follow ringrtc (on version above) -> config/version.properties -> webrtc.version +# downloading tarball generated with abuild snapshot (with gclient dependencies fetched) +_webrtcver=6261c + +# follow @signalapp/better-sqlite3 (on version in package.json) -> deps/download.js -> TOKENIZER_VERSION +# last bsqlite version: 8.7.1 +_stokenizerver=0.2.1 source=" https://github.com/signalapp/Signal-Desktop/archive/refs/tags/v$pkgver/Signal-Desktop-$pkgver.tar.gz https://github.com/signalapp/libsignal/archive/refs/tags/v$_libsignalver/libsignal-$_libsignalver.tar.gz https://github.com/signalapp/ringrtc/archive/refs/tags/v$_ringrtcver/ringrtc-$_ringrtcver.tar.gz - https://github.com/signalapp/node-sqlcipher/archive/refs/tags/v$_sqlcipherver/node-sqlcipher-$_sqlcipherver.tar.gz - https://ayakael.net/api/packages/mirrors/generic/webrtc/$_webrtcver/webrtc-$_webrtcver.tar.zst + https://ab-sn.lnl.gay/webrtc-$_webrtcver.tar.zst + https://github.com/signalapp/Signal-FTS5-Extension/archive/refs/tags/v$_stokenizerver/stokenizer-$_stokenizerver.tar.gz + bettersqlite-use-system-sqlcipher.patch libsignal-auditable.patch - signal-use-system-sqlcipher.patch signal-disable-updates.patch signal-update-links.patch signal-show-window-please.patch - signal-rollback-locale-changes.patch - signal-do-not-package-sqlcipher-deps.patch - signal-do-not-package-desktop-entry.patch ringrtc-webrtc-renamed.patch - ringrtc-use-sh.patch - webrtc-shared-libs.patch + webrtc-shared-like-my-wife.patch webrtc-compiler.patch - webrtc-use-only-payloadtypesuggester-for-pt-assignement.patch - webrtc-fix-declaration-that-change-meaning-inside-class.patch - webrtc-rtcbase-platform-thread-type-do-not-include-linux-prctl-header.patch + webrtc-gcc13.patch - signal-desktop.sh + signal-desktop " -builddir="$srcdir" +builddir="$srcdir/Signal-Desktop-$pkgver" # webrtc broken on clang https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101227 export CC=gcc @@ -111,37 +112,12 @@ export CFLAGS="${CFLAGS/-g/} -O2 -Wno-error -Wno-deprecated-builtins -Wno-unknow export CXXFLAGS="${CXXFLAGS/-g/} -O2 -Wno-error -Wno-deprecated-builtins -Wno-unknown-warning-option -Wno-builtin-macro-redefined -Wno-deprecated-declarations" export CPPFLAGS="$CPPFLAGS -D__DATE__= -D__TIME__= -D__TIMESTAMP__=" -# stdatomic from compiler-rt uses implicit function declaration -export CFLAGS="$CFLAGS -Wno-implicit-function-declaration" -export CXXFLAGS="$CXXFLAGS -Wno-implicit-function-declaration" - export CARGO_PROFILE_RELEASE_OPT_LEVEL=2 export CARGO_PROFILE_RELEASE_STRIP="symbols" #export RUSTFLAGS="$RUSTFLAGS -C linker=clang" export YARN_CACHE_FOLDER="$srcdir/.yarn" -_update_depends() { - msg "Updating extra dependencies version information in $APKBUILD..." - # _libsignalver: follow signal-desktop package.json -> @signalapp/libsignal-client - # _ringrtcver: follow signal-desktop package.json -> @signalapp/ringrtc - # _webrtcver: follow ringrtc (on version above) -> config/version.properties -> webrtc.version - # downloading tarball generated with abuild snapshot (with gclient dependencies fetched) - # _sqlcipherver: follow signal-desktop package.json -> @signalapp/sqlcipher - - local _libsignalver=$(curl --silent https://raw.githubusercontent.com/signalapp/Signal-Desktop/v$pkgver/package.json | grep "@signalapp/libsignal-client\": \"" | awk '{print $2}' | tr -d ',' | tr -d '"' | head -n 1) - local _ringrtcver=$(curl --silent https://raw.githubusercontent.com/signalapp/Signal-Desktop/v$pkgver/package.json | grep "@signalapp/ringrtc\": \"" | awk '{print $2}' | tr -d ',' | tr -d '"' | head -n 1) - local _webrtcver=$(curl --silent https://raw.githubusercontent.com/signalapp/ringrtc/v$_ringrtcver/config/version.properties | awk -F '=' '{if($1 == "webrtc.version"){print $2}}' | head -n 1) - local _sqlcipherver=$(curl --silent https://raw.githubusercontent.com/signalapp/Signal-Desktop/v$pkgver/package.json | grep "@signalapp/sqlcipher\": \"" | awk '{print $2}' | tr -d ',' | tr -d '"' | head -n 1) - - sed -i \ - -e "s|^_libsignalver=.*|_libsignalver=$_libsignalver|" \ - -e "s|^_ringrtcver=.*|_ringrtcver=$_ringrtcver|" \ - -e "s|^_webrtcver=.*|_webrtcver=$_webrtcver|" \ - -e "s|^_sqlcipherver=.*|_sqlcipherver=$_sqlcipherver|" \ - $APKBUILD -} - # webrtc only, the other dependencies are fine with tarballs _distbucket="sakamoto/lnl-aports-snapshots/" snapshot() { @@ -191,31 +167,45 @@ target_cpu_only = True mcli cp "$SRCDEST"/webrtc-$_webrtcver.tar.zst "$_distbucket" } +# manual patches +default_prepare() { :; } + prepare() { - # Moves to builddir to use abuild patch logics - for i in Signal-Desktop-$pkgver libsignal-$_libsignalver ringrtc-$_ringrtcver webrtc-$_webrtcver node-sqlcipher-$_sqlcipherver; do - mv "$srcdir"/$i "$builddir"/${i%-*} - done default_prepare - - cd "$builddir"/Signal-Desktop - - # puts node modules in the root node_modules instead of under .pnpm - echo "node-linker=hoisted" >> .npmrc + msg "Applying patches" + for x in $source; do + case "$x" in + signal-*.patch) + msg "$x" + patch -p1 -i "$srcdir"/$x -d "$srcdir"/Signal-Desktop-$pkgver + ;; + libsignal-*.patch) + msg "$x" + patch -p1 -i "$srcdir"/$x -d "$srcdir"/libsignal-$_libsignalver + ;; + ringrtc-*.patch) + msg "$x" + patch -p1 -i "$srcdir"/$x -d "$srcdir"/ringrtc-$_ringrtcver + ;; + webrtc-*.patch) + msg "$x" + patch -p1 -i "$srcdir"/$x -d "$srcdir"/webrtc-$_webrtcver + ;; + esac + done msg "Installing signal-desktop JS dependencies" - pnpm install --ignore-scripts - - # remove shipped fonts for system-provided (part 1) - rm -rf fonts/ + echo 'ignore-engines true' > .yarnrc + yarn --ignore-scripts --frozen-lockfile ( - cd "$builddir"/webrtc + cd "$srcdir"/webrtc-$_webrtcver local use_system=" brotli crc32c dav1d + double-conversion ffmpeg flatbuffers fontconfig @@ -225,7 +215,9 @@ prepare() { icu jsoncpp libaom + libavif libdrm + libevent libjpeg libpng libsecret @@ -247,7 +239,6 @@ prepare() { \! -path "*third_party/$_lib/google/*" \ \! -path './base/third_party/icu/*' \ \! -path './third_party/libxml/*' \ - \! -path './third_party/re2/*' \ \! -path './third_party/pdfium/third_party/freetype/include/pstables.h' \ \! -path './third_party/harfbuzz-ng/utils/hb_scoped.h' \ \! -path './third_party/crashpad/crashpad/third_party/zlib/zlib_crashpad.h' \ @@ -259,9 +250,6 @@ prepare() { python3 build/linux/unbundle/replace_gn_files.py --system-libraries \ $use_system - # zlib depends on base for no reason - sed -i '/\/\/base/d' ./third_party/zlib/BUILD.gn - # allow system dependencies in "official builds" sed -i 's/OFFICIAL_BUILD/GOOGLE_CHROME_BUILD/' \ tools/generate_shim_headers/generate_shim_headers.py @@ -271,45 +259,45 @@ prepare() { ) ( - cd "$builddir"/ringrtc/src/rust + cd "$srcdir"/ringrtc-$_ringrtcver/src/rust msg "Installing ringrtc rust dependencies" cargo fetch --target="$CTARGET" --locked ) ( - cd "$builddir"/libsignal + cd "$srcdir"/libsignal-$_libsignalver msg "Installing libsignal rust dependencies" cargo fetch --target="$CTARGET" --locked ) ( - cd "$builddir"/node-sqlcipher + cd "$srcdir"/Signal-FTS5-Extension-$_stokenizerver - # fix target - sed -i 's/unknown-linux-gnu/alpine-linux-musl/g' deps/extension/extension.gyp - - msg "Installing sqlcipher js dependencies" - pnpm install --ignore-scripts + msg "Installing signal tokenizer rust dependencies" + cargo fetch --target="$CTARGET" --locked ) ( - cd "$builddir"/ringrtc/src/node + cd "$srcdir"/ringrtc-$_ringrtcver/src/node msg "Installing ringrtc js dependencies" - npm ci --ignore-scripts + yarn --frozen-lockfile --ignore-scripts ) ( - cd "$builddir"/libsignal/node + cd "$srcdir"/libsignal-$_libsignalver/node # fix target - sed -i 's/unknown-linux-gnu/alpine-linux-musl/g' build_node_bridge.py + sed -i 's/unknown-linux-gnu/alpine-linux-musl/g' binding.gyp msg "Installing libsignal js dependencies" yarn --ignore-scripts --frozen-lockfile ) + + # remove shipped fonts for system-provided (part 1) + rm -rf fonts/ } build() { @@ -317,7 +305,7 @@ build() { # required dependency of ringrtc ( - cd "$builddir"/webrtc + cd "$srcdir"/webrtc-$_webrtcver export PATH="$PWD/path:$PATH" # shellcheck disable=2089 @@ -330,9 +318,6 @@ build() { rtc_include_ilbc=false rtc_libvpx_build_vp9=true rtc_use_x11=false - rustc_version=\"yes\" - rust_bindgen_root=\"/usr\" - rust_sysroot_absolute=\"/usr\" build_with_mozilla=false chrome_pgo_phase=0 @@ -352,18 +337,18 @@ build() { use_lld=true use_sysroot=false " - mkdir -p "$builddir"/ringrtc/out/release + mkdir -p "$srcdir"/ringrtc-$_ringrtcver/out/release msg "Building signal's webrtc" # shellcheck disable=2090,2116 - gn gen "$builddir"/ringrtc/out/release --args="$(echo $webrtc_args)" - ninja -C "$builddir"/ringrtc/out/release signaldeswebrtc + gn gen "$srcdir"/ringrtc-$_ringrtcver/out/release --args="$(echo $webrtc_args)" + ninja -C "$srcdir"/ringrtc-$_ringrtcver/out/release signaldeswebrtc ) ( - cd "$builddir"/ringrtc + cd "$srcdir"/ringrtc-$_ringrtcver msg "Building libringrtc" - OUTPUT_DIR="$builddir"/ringrtc/out \ + OUTPUT_DIR="$srcdir"/ringrtc-$_ringrtcver/out \ cargo auditable build --features electron --release -p ringrtc mkdir -p src/node/build/linux @@ -372,108 +357,114 @@ build() { ) ( - cd "$builddir"/ringrtc/src/node + cd "$srcdir"/ringrtc-$_ringrtcver/src/node msg "Building ringrtc JS glue code" - npm run build + yarn build msg "Cleaning dev dependencies for ringrtc" - npm prune --ignore-scripts --omit=dev + yarn --ignore-scripts --frozen-lockfile --production ) # module on npm intentionally unbuildable: https://github.com/signalapp/libsignal/issues/464#issuecomment-1160665052 ( - cd "$builddir"/libsignal/node + cd "$srcdir"/libsignal-$_libsignalver/node msg "Building libsignal" - npm_config_nodedir=/usr/include/electron/node_headers python3 build_node_bridge.py + yarn node-gyp configure --nodedir=/usr/include/electron/node_headers --build-from-source + yarn node-gyp build --nodedir=/usr/include/electron/node_headers --build-from-source mkdir -p prebuilds/linux-$chromium_arch mv build/Release/libsignal_client_linux_$chromium_arch.node prebuilds/linux-$chromium_arch/node.napi.node msg "Building libsignal glue code" - npm run tsc + yarn tsc msg "Cleaning dev dependencies for libsignal" - npm prune -ignore-scripts --omit=dev + yarn --ignore-scripts --frozen-lockfile --production ) ( - cd "$builddir"/node-sqlcipher + cd "$srcdir"/Signal-FTS5-Extension-$_stokenizerver - ( - cd deps/extension - msg "Building sqlcipher-extension" - cargo auditable build --release --target $CTARGET - ) - - msg "Building sqlcipher" - node-gyp configure --nodedir=/usr/include/electron/node_headers --build-from-source - node-gyp build --nodedir=/usr/include/electron/node_headers --build-from-source - - msg "Building sqlcipher glue code" - pnpm build - - mkdir -p prebuilds/linux-$chromium_arch - mv build/Release/obj.target/node_sqlcipher.node prebuilds/linux-$chromium_arch/node.napi.node - - msg "Cleaning dev dependencies for sqlcipher" - pnpm prune --ignore-scripts --prod + msg "Building signal tokenizer" + cargo auditable build --features extension --release --frozen + cbindgen --profile release . -o target/release/signal-tokenizer.h ) - msg "Building signal-desktop" - cd "$builddir"/Signal-Desktop - # from package.json postinstall - pnpm run build:acknowledgments + yarn build:acknowledgments + yarn patch-package rm -rf node_modules/dtrace-provider # get esbuild installed (needed for next step) - pnpm rebuild esbuild + npm rebuild esbuild # build front - # resets GIT_CEILING_DIRECTORIES as sometimes abuild sets this and breaks get-expire-time NODE_ENV=production \ SIGNAL_ENV=production \ NODE_OPTIONS=--openssl-legacy-provider \ - GIT_CEILING_DIRECTORIES= \ - pnpm run build:dev + yarn build:dev # purge non-production deps - pnpm prune --ignore-scripts --prod + yarn install --ignore-scripts --frozen-lockfile --production + + # XXX: the previous step undoes the patches. and removes the patch applier. + # please force me to just implement packaging without dev modules in tasje. -lnl + for x in patches/*.patch; do + # some of these patches are made for devDependencies + if [ -d "$(grep -Eo 'node_modules/(@[a-z\d_-]+/)?[a-z\d_-]+/' "$x" | head -n1)" ]; then + msg "$x" + patch -Np1 -i ./"$x" + fi + done # use our libsignal rm -rf node_modules/@signalapp/libsignal-client/ - cp -r "$builddir"/libsignal/node/ node_modules/@signalapp/libsignal-client + mv "$srcdir"/libsignal-$_libsignalver/node/ node_modules/@signalapp/libsignal-client # use our libringrtc rm -rf node_modules/@signalapp/ringrtc/ - cp -r "$builddir"/ringrtc/src/node/ node_modules/@signalapp/ringrtc + mv "$srcdir"/ringrtc-$_ringrtcver/src/node/ node_modules/@signalapp/ringrtc - # use our sqlcipher - rm -rf node_modules/@signalapp/sqlcipher/ - cp -r "$builddir"/node-sqlcipher node_modules/@signalapp/sqlcipher + # patch the sqlcipher module + for x in $source; do + case "$x" in + bettersqlite-*.patch) + msg "$x" + patch -Np1 -i "$srcdir"/$x -d "$srcdir"/Signal-Desktop-$pkgver/node_modules/@signalapp/better-sqlite3/ + ;; + esac + done + + mkdir node_modules/@signalapp/better-sqlite3/tokenizer + mv "$srcdir"/Signal-FTS5-Extension-$_stokenizerver/target/release/libsignal_tokenizer.a node_modules/@signalapp/better-sqlite3/tokenizer/ + mv "$srcdir"/Signal-FTS5-Extension-$_stokenizerver/target/release/signal-tokenizer.h node_modules/@signalapp/better-sqlite3/tokenizer/ + + npm rebuild \ + sharp @signalapp/better-sqlite3 spellchecker websocket \ + utf-8-validate bufferutil fs-xattr \ + --nodedir=/usr/include/electron/node_headers --build-from-source SIGNAL_ENV=production \ tasje pack } check() { - cd "$builddir"/Signal-Desktop # tests run against downloaded build of electron for glibc, probably can be patched - pnpm run test + yarn test } package() { - cd "$builddir"/Signal-Desktop/tasje_out + cd "$builddir"/tasje_out install -Dm644 resources/app.asar "$pkgdir"/usr/lib/$pkgname/app.asar cp -r resources/app.asar.unpacked "$pkgdir"/usr/lib/$pkgname/app.asar.unpacked install -Dm644 signal.desktop "$pkgdir"/usr/share/applications/$pkgname.desktop # this should be in /usr/lib/signal-desktop. however, it does not simply work and I stopped to care - install -Dm755 "$builddir"/ringrtc/out/release/libsignaldeswebrtc.so "$pkgdir"/usr/lib/libsignaldeswebrtc.so + install -Dm755 "$srcdir"/ringrtc-$_ringrtcver/out/release/libsignaldeswebrtc.so "$pkgdir"/usr/lib/libsignaldeswebrtc.so - install -Dm755 "$srcdir"/signal-desktop.sh "$pkgdir"/usr/bin/signal-desktop + install -Dm755 "$srcdir"/$pkgname "$pkgdir"/usr/bin/$pkgname while read -r size; do install -Dm644 icons/$size.png "$pkgdir"/usr/share/icons/hicolor/$size/apps/$pkgname.png @@ -481,25 +472,19 @@ package() { } sha512sums=" -c847d3679df77ca137b4c3345b3b941a08639677efcd5eeea6613572fa90b8ad1b8d1d53e077902d4f47c05c480c408787024906d6917dcbf4a840838bf6d79d Signal-Desktop-7.76.0.tar.gz -43271a64f65a4cf0e7855fb84476ff811ef248665cb74fdaa9ce12b02d2039abdf8fca28554e7e884eabaa9bdd77e8f5383e6354e589436671675ddab7194d81 libsignal-0.83.0.tar.gz -ba4a1850bd096470a6370a0bf730550f64df4a2349cacca3b4864ef1a3a04713dd200307b9ad7ba47425322573148d6bd2ce85c11c2a49232d41e739ef5e788d ringrtc-2.59.0.tar.gz -79dd21548329b4ee409fa73b013c18ed4e85038aeef7a4cfe196fd6b5113279da8ad287a259fa6a6b546b52a5a6dd6ae2cb1050007043d25f76d7917dbbbc02d node-sqlcipher-2.4.4.tar.gz -06ffb4cdb82f818cc419d42ff2de03977d7e94c5f3eb8ac8a401bcb52ec38fa988c5d757f4bd79e5d9968fa83754fc9046180c950961c90a59eeb6130bf5552f webrtc-7339c.tar.zst -8d2d2d82c8546c2dd1fef161b61df79918f8c22235a56a46adb375a0beb4acef12c5fe53e67242a4be97f77adc522ff79b47949c352956c742a70d50f4179f7f libsignal-auditable.patch -7ee747c8aaa9d6e9149fe0a031e3d4cc9e9c08f22c42076bd05e2acb86952f8170032613d13a53716010edfa3f26ad97b530e82460318eb46a42e28cf5faeb9d signal-use-system-sqlcipher.patch -ef3622da416a5bd2d4bea4f2a4fbb21a985f660d4acc17bbe66ce51ac1180ab92c0c843a5414ff56ea1deda87c2b0f611a299ca8ebe4d6a24df53626b36ceea8 signal-disable-updates.patch -853de84d636f730694f17bcec63463fa7bfbdd0a7f7a64618a8fc6bc523ce1a9854b4c651753735af735c18101295d3efbe54f83ae0bccbed83c8c1fee3e7049 signal-update-links.patch -882d6889b23a3ebc6449c8b6acec8c3853674a7e94f066d65b57bab674ba8c11d582ba2c760825cb67b9202716e6d8b7123001d1e9f9229e49a0b77e9d978265 signal-show-window-please.patch -3dd3bf2f6925e2672a20ef56bbac519099d54e912e5a434a0649ea152db5039dbe1bbade3430b485ae9a6085d747dd88602d4efc5198d5a4dbf1b8359de11f94 signal-rollback-locale-changes.patch -961568777b86f8fbcc73360252123686c9d1e16b2650f23d8afbc6d7580d53024f81b62e9e9cbdcd0031b5cf99854bd47c6dd4580197f2b27b8b4cbb51c6c9c9 signal-do-not-package-sqlcipher-deps.patch -d8cafd4ae1f7438417f5c414d68a175c3d24b66a14b9f3b8ca9c9acae2b2eaa68985ee81c1df7d754a206ff1c9b02929803440fb0734db38b6ac9ab3e34205b0 signal-do-not-package-desktop-entry.patch -02a648bb8541a39c75fec2db39f024a27976afca41908eefa2fe1f2e30b05b5d59f980ccc930021c0b0c09ba8b0cbcae071e9f0dd530543c667adbc4272af552 ringrtc-webrtc-renamed.patch -19d2e07bdc0b160ec542fcb0a3d94ae1e37dcb1b3455e57b278cf074f8aac625341b47f4f06a1f7eb5a197cb0f11754de8785ffd10876852972cbfafdc2615db ringrtc-use-sh.patch -a9374040dcbc9203c8a3b4ad1cf97d58805cd4755f4f585a988b113697ea97d5900ad68f6a30aa0621f34ab54ae98984a8ce228a2d08186ee1bf3384abf3f364 webrtc-shared-libs.patch -8ba740f0552872ddf383545a6bb99bf7bcdd2610cee51c6e69dc667893006facd5d72f62274e25c1a58e1a58c8e8b0b5303b648e4c74a71925639cc9691c72c4 webrtc-compiler.patch -d44f62e4ccf2d9094d6ed217b24fa2cde276c7f64f4d6fd26e84dfc021ea667abcb21f9e4666cfd0d88d6ee0a6b1a20b6cc68c8720462711e3b5451e263f6c4a webrtc-use-only-payloadtypesuggester-for-pt-assignement.patch -ace87a2be03c6965012a87a10918c5923b10d5e74a7169c1e1384c15b34a367d0c47e806764c368cc30dad01a3dce54b50587abea9831130178db3806619abc8 webrtc-fix-declaration-that-change-meaning-inside-class.patch -d17ecd89e867b24a21144d267e1bf7d09e3898018a0f9fcd87084b9de8091bc56f904a1cabdc487a8e46ab509c11ddd363c574d75d85a79e3c4d9424a13b2093 webrtc-rtcbase-platform-thread-type-do-not-include-linux-prctl-header.patch -8e1de53ec1608fa05972af605213e8423b8f88cfd8d6a1989bdcaf77ed1420871c39efa15c56ffeccb6ff86677acc5bc436020f3554bee4f94930c7d9f4e16b6 signal-desktop.sh +51edb647832a1f9658abb7fddb4c35e8c84f5ea73c36f52bb02cf3460b871ace5bc6a86b439df738d6fbc418f0753e717962a0edefa95a0d4b2ca846fa11371e Signal-Desktop-7.4.0.tar.gz +a311dd8d61d6c072a76e247bf4e4d752f1fe9dfcf0993d1b14790dc2eeec65d3c1bf8b8288156dee5ff89cbed9e282b73a58fcdd69bda9b49441fc9c443a83ec libsignal-0.41.2.tar.gz +c36eb4f3ab02cfa341ccb42a80d5fed53bf21bf495eb3627712db912c97bd76f4fb8fa1951ecfeff1b64c36fdfe72aec59bf459b27a612da5b4e16a885c225e4 ringrtc-2.39.2.tar.gz +341144563eafbd6e263c46cca5cf4954c9d8c72ba4caea1c9342b5b5311e7f618f3e595051195f9894662928cc5015641303aae2c5d5bbc18b22fb36651ee2e8 webrtc-6261c.tar.zst +84a1f2fc29262a12842e94698d124a85b823128e72a493b0be8ea92fbb72c5c268499f4a6827cdedaae06ec73cce4039a39fe5c5d536cbef330e59ba0183da28 stokenizer-0.2.1.tar.gz +be5b4e823543b79175a12314f10c6326d9f0d59f470136962daed4665887006acc05b48b40dc1b67747396d8f6f7d23be298c1e110ccdd35ff9b09d5e6b80bab bettersqlite-use-system-sqlcipher.patch +92de6fc7cc5f2b6d65bedbd74cc733dd86dafc9cbfb9b727c3267aef63a71a07247cde9b163c68fddfeb9096dcd7f554d36d0b2de078d8905e3825645ddbd6eb libsignal-auditable.patch +f13389dd7a1360022d919fa1350210a92e5b832aa32b0ac278b63b1f41462c7807ac28c7867eecf71dac8f3ca699fd0fb0d87de8d1244c3e65cc4b78304e8ef4 signal-disable-updates.patch +d50eb5724502df9ea4d795db8cfc27af767c25168d7db2af512e615be7cc2ca290210a9ae78e1abb153c0198677e858ad3d74926c958099d0319295e7d9e7f1d signal-update-links.patch +646d303fe58cae3f0896ae0275a66695b902fae6ddde7c568cc9798157dee9f45ceff907bc951fadc4c511d512a73d114b4e4f7c8914e2311c63929d29e1621a signal-show-window-please.patch +ab51b8fdcda1d8811213d2c5d8cb5d8457b478a02e23ce40f36b38ec56d45a3bd7a2d184720c27046f98a27771551cfad93c1290fe93856cc02695d318b33e47 ringrtc-webrtc-renamed.patch +9d92389637cdda83a0a7039fa6c52516d7bc491d0b1e42d5374b9d1f4fa7b9c930642f2dca896da17a2dc3344fa1bb97434c8dddd0539a4fedfd0dec809fc875 webrtc-shared-like-my-wife.patch +e07ae8544988d402aaf0fbd95ea36a64c94c59566c561132578aa6dcf8ff11a34058530e64dc204e5cadc2482f1401e74b32384a144e5e08017c663d0cf7c2fc webrtc-compiler.patch +88515d8b8cc82355c9f9b0f44fac83b7ff149b13e9fb102fd46036ec5234cfb2385fa5ad58a0520ee604b93dc4ddd6ae18a7005978ef207841645724ef7a9749 webrtc-gcc13.patch +87534e7b5ad7365509eab75629e6bd1a9ed61ee92f7e358405a0abaf0df57de14623fb3894eb082f8785422e5c087e1c50f9e2e5cafbb2529591fd7bf447f7f5 signal-desktop " diff --git a/backports/signal-desktop/README.md b/backports/signal-desktop/README.md deleted file mode 100644 index a23f037..0000000 --- a/backports/signal-desktop/README.md +++ /dev/null @@ -1,61 +0,0 @@ -# signal-desktop - -This is the `signal-desktop` package for Alpine Linux. - -Please report any issues [using Gitlab](https://gitlab.alpinelinux.org/alpine/aports/-/issues/new) and tag @ayakael - -## Building signal-desktop - -Signal-desktop is an electron application that is rather complex to build - -The first layer of complexity is the use of dependencies that are themselves -rather complex to build. Some are based on nodejs, others rust. Those -dependencies are built before signal-desktop, like ringrtc, webrtc and -libsignal. The versions of those dependencies are tracked in different files, -which adds complexity when maintaining the package. Executing `abuild -_update_depends` automatically fetches the expected versions and updates -the relevant variables. - -A second layer of complexity is that webrtc's 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`, webrtc 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/signal-desktop) automatically -fetches and packages the source code and makes it available in a [generic -Forgejo repository](https://ayakael.net/mirrors/-/packages/generic/webrtc). - -## Updating signal-desktop - -In a nutshell: - -1. Set `pkgver` to up-to-date version - -2. Update the dependency versions using `abuild _update_depends` - -3. Optional: fetch webrtc using `abuild snapshot`, making sure `client` -is in your path - -4. Update source checksum using `abuild checksum` - -## Finding dependency version information - -Here is where the version information is stored. It is different for every -extra dependency. - -* _libsignalver: follow signal-desktop package.json -> -@signalapp/libsignal-client -* _ringrtcver: follow signal-desktop package.json -> @signalapp/ringrtc -* _webrtcver: follow ringrtc (on version above) -> config/version.properties -> -webrtc.version downloading tarball generated with abuild snapshot (with gclient -dependencies fetched) -* _stokenizerver: follow @signalapp/better-sqlite3 (on version in package.json) --> deps/download.js -> TOKENIZER_VERSION - -## Why is this package still in testing - -As `electron` is still in testing, this package cannot yet be moved to -`community`. Until that changes, this package is also kept-to-date against the -latest release of Alpine Linux (along with `electron`) in -[Ayakael's Forge](https://ayakael.net/forge/-/packages/alpine/signal-desktop). -This is true of all Ayakael's packages still in `testing`. diff --git a/backports/signal-desktop/bettersqlite-use-system-sqlcipher.patch b/backports/signal-desktop/bettersqlite-use-system-sqlcipher.patch new file mode 100644 index 0000000..f0dfe0d --- /dev/null +++ b/backports/signal-desktop/bettersqlite-use-system-sqlcipher.patch @@ -0,0 +1,56 @@ +--- a/binding.gyp ++++ b/binding.gyp +@@ -7,7 +7,16 @@ + 'targets': [ + { + 'target_name': 'better_sqlite3', +- 'dependencies': ['deps/sqlite3.gyp:sqlite3'], ++ 'include_dirs': [ ++ '/usr/include/sqlcipher', ++ 'tokenizer', ++ ], ++ 'link_settings': { ++ 'libraries': [ ++ '-lsqlcipher', ++ ' int: - if 'npm_config_libsignal_debug_level_logs' not in os.environ: - features.append('log/release_max_level_info') +--- ./node/build_node_bridge.py.orig ++++ ./node/build_node_bridge.py +@@ -63,7 +63,7 @@ -- cmdline = ['cargo', 'build', '--target', cargo_target, '-p', 'libsignal-node', '--features', ','.join(features)] -+ cmdline = ['cargo', 'auditable', 'build', '--target', cargo_target, '-p', 'libsignal-node', '--features', ','.join(features)] + out_dir = options.out_dir.strip('"') or os.path.join('build', configuration_name) + +- cmdline = ['cargo', 'build', '--target', cargo_target, '-p', 'libsignal-node', '--features', 'testing-fns'] ++ cmdline = ['cargo', 'auditable', 'build', '--target', cargo_target, '-p', 'libsignal-node', '--features', 'testing-fns'] if configuration_name == 'Release': cmdline.append('--release') print("Running '%s'" % (' '.join(cmdline))) diff --git a/backports/signal-desktop/ringrtc-use-sh.patch b/backports/signal-desktop/ringrtc-use-sh.patch deleted file mode 100644 index 53ec09c..0000000 --- a/backports/signal-desktop/ringrtc-use-sh.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff --git a/ringrtc/src/node/package.json.orig b/ringrtc/src/node/package.json -index 366caf2927f..eedeca3895e 100644 ---- a/ringrtc/src/node/package.json.orig -+++ b/ringrtc/src/node/package.json -@@ -16,7 +16,7 @@ - "virtual_audio": "dist/bin/virtual_audio.sh" - }, - "scripts": { -- "build": "tsc && bash scripts/build-help.sh", -+ "build": "tsc && sh scripts/build-help.sh", - "clean": "rimraf dist", - "test": "electron-mocha --renderer --recursive dist/test --timeout 10000 --require source-map-support/register", - "eslint": "eslint .", - diff --git a/backports/signal-desktop/ringrtc-webrtc-renamed.patch b/backports/signal-desktop/ringrtc-webrtc-renamed.patch index 6e5e6d1..2d2a61a 100644 --- a/backports/signal-desktop/ringrtc-webrtc-renamed.patch +++ b/backports/signal-desktop/ringrtc-webrtc-renamed.patch @@ -1,25 +1,19 @@ -diff --git a/ringrtc/src/rust/build.rs.orig b/ringrtc/src/rust/build.rs -index ff2ce04d1cf..ccdaaaef84d 100644 ---- a/ringrtc/src/rust/build.rs.orig -+++ b/ringrtc/src/rust/build.rs -@@ -61,6 +61,7 @@ fn main() { +--- ./src/rust/build.rs.orig ++++ ./src/rust/build.rs +@@ -41,15 +41,15 @@ if cfg!(feature = "native") { - let webrtc_dir = - if cfg!(feature = "prebuilt_webrtc") || cfg!(feature = "prebuilt_webrtc_sim") { -+ panic!("trying to download prebuild webrtc"); - if let Err(e) = fs::create_dir_all(&out_dir) { - panic!("Failed to create webrtc out directory: {:?}", e); - } -@@ -74,12 +75,12 @@ fn main() { - // Ignore build type since we only have release prebuilts - format!("{}/release/obj/", out_dir) - } else { -- format!("{}/{}/obj", out_dir, build_type) -+ format!("{}/{}", out_dir, build_type) - }; - println!("cargo:rerun-if-changed={}", webrtc_dir); - println!("cargo:rerun-if-changed={}", config_dir()); - println!("cargo:rustc-link-search=native={}", webrtc_dir); + if let Ok(out_dir) = out_dir { + println!( +- "cargo:rustc-link-search=native={}/{}/obj/", ++ "cargo:rustc-link-search=native={}/{}/", + out_dir, build_type, + ); +- println!("cargo:rerun-if-changed={}/{}/obj/", out_dir, build_type,); ++ println!("cargo:rerun-if-changed={}/{}/", out_dir, build_type,); + } else { + println!("cargo:warning=No WebRTC output directory (OUTPUT_DIR) defined!"); + } + - println!("cargo:rustc-link-lib=webrtc"); + println!("cargo:rustc-link-lib=dylib=signaldeswebrtc"); diff --git a/backports/signal-desktop/signal-desktop.sh b/backports/signal-desktop/signal-desktop similarity index 66% rename from backports/signal-desktop/signal-desktop.sh rename to backports/signal-desktop/signal-desktop index 3904d51..370469c 100755 --- a/backports/signal-desktop/signal-desktop.sh +++ b/backports/signal-desktop/signal-desktop @@ -3,4 +3,4 @@ # app chooses config (including used endpoints) based on this export NODE_ENV=production -exec electron /usr/lib/signal-desktop/app.asar "$@" +exec electron /usr/lib/signal-desktop/app.asar diff --git a/backports/signal-desktop/signal-disable-updates.patch b/backports/signal-desktop/signal-disable-updates.patch index 3d8fc38..1e38199 100644 --- a/backports/signal-desktop/signal-disable-updates.patch +++ b/backports/signal-desktop/signal-disable-updates.patch @@ -1,11 +1,9 @@ -diff --git a/Signal-Desktop/config/production.json.orig b/Signal-Desktop/config/production.json -index ee1fc6523d8..6fcb97f3a36 100644 ---- a/Signal-Desktop/config/production.json.orig -+++ b/Signal-Desktop/config/production.json -@@ -16,5 +16,5 @@ +--- a/config/production.json ++++ b/config/production.json +@@ -15,5 +15,5 @@ + "serverPublicParams": "AMhf5ywVwITZMsff/eCyudZx9JDmkkkbV6PInzG4p8x3VqVJSFiMvnvlEKWuRob/1eaIetR31IYeAbm0NdOuHH8Qi+Rexi1wLlpzIo1gstHWBfZzy1+qHRV5A4TqPp15YzBPm0WSggW6PbSn+F4lf57VCnHF7p8SvzAA2ZZJPYJURt8X7bbg+H3i+PEjH9DXItNEqs2sNcug37xZQDLm7X36nOoGPs54XsEGzPdEV+itQNGUFEjY6X9Uv+Acuks7NpyGvCoKxGwgKgE5XyJ+nNKlyHHOLb6N1NuHyBrZrgtY/JYJHRooo5CEqYKBqdFnmbTVGEkCvJKxLnjwKWf+fEPoWeQFj5ObDjcKMZf2Jm2Ae69x+ikU5gBXsRmoF94GXTLfN0/vLt98KDPnxwAQL9j5V1jGOY8jQl6MLxEs56cwXN0dqCnImzVH3TZT1cJ8SW1BRX6qIVxEzjsSGx3yxF3suAilPMqGRp4ffyopjMD1JXiKR2RwLKzizUe5e8XyGOy9fplzhw3jVzTRyUZTRSZKkMLWcQ/gv0E4aONNqs4P+NameAZYOD12qRkxosQQP5uux6B2nRyZ7sAV54DgFyLiRcq1FvwKw2EPQdk4HDoePrO/RNUbyNddnM/mMgj4FW65xCoT1LmjrIjsv/Ggdlx46ueczhMgtBunx1/w8k8V+l8LVZ8gAT6wkU5J+DPQalQguMg12Jzug3q4TbdHiGCmD9EunCwOmsLuLJkz6EcSYXtrlDEnAM+hicw7iergYLLlMXpfTdGxJCWJmP4zqUFeTTmsmhsjGBt7NiEB/9pFFEB3pSbf4iiUukw63Eo8Aqnf4iwob6X1QviCWuc8t0I=", + "serverTrustRoot": "BXu6QIKVz5MA8gstzfOgRQGqyLqOwNKHL6INkv3IHWMF", "genericServerPublicParams": "AByD873dTilmOSG0TjKrvpeaKEsUmIO8Vx9BeMmftwUs9v7ikPwM8P3OHyT0+X3EUMZrSe9VUp26Wai51Q9I8mdk0hX/yo7CeFGJyzoOqn8e/i4Ygbn5HoAyXJx5eXfIbqpc0bIxzju4H/HOQeOpt6h742qii5u/cbwOhFZCsMIbElZTaeU+BWMBQiZHIGHT5IE0qCordQKZ5iPZom0HeFa8Yq0ShuEyAl0WINBiY6xE3H/9WnvzXBbMuuk//eRxXgzO8ieCeK8FwQNxbfXqZm6Ro1cMhCOF3u7xoX83QhpN", - "backupServerPublicParams": "AJwNSU55fsFCbgaxGRD11wO1juAs8Yr5GF8FPlGzzvdJJIKH5/4CC7ZJSOe3yL2vturVaRU2Cx0n751Vt8wkj1bozK3CBV1UokxV09GWf+hdVImLGjXGYLLhnI1J2TWEe7iWHyb553EEnRb5oxr9n3lUbNAJuRmFM7hrr0Al0F0wrDD4S8lo2mGaXe0MJCOM166F8oYRQqpFeEHfiLnxA1O8ZLh7vMdv4g9jI5phpRBTsJ5IjiJrWeP0zdIGHEssUeprDZ9OUJ14m0v61eYJMKsf59Bn+mAT2a7YfB+Don9O", - "stripePublishableKey": "pk_live_6cmGZopuTsV8novGgJJW9JpC00vLIgtQ1D", - "updatesEnabled": true + "updatesEnabled": false } diff --git a/backports/signal-desktop/signal-do-not-package-desktop-entry.patch b/backports/signal-desktop/signal-do-not-package-desktop-entry.patch deleted file mode 100644 index 7a973a1..0000000 --- a/backports/signal-desktop/signal-do-not-package-desktop-entry.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/Signal-Desktop/package.json.orig b/Signal-Desktop/package.json -index 832035e..e6ac14c 100644 ---- a/Signal-Desktop/package.json.orig -+++ b/Signal-Desktop/package.json -@@ -519,11 +519,6 @@ - }, - "linux": { - "category": "Network;InstantMessaging;Chat", -- "desktop": { -- "entry": { -- "StartupWMClass": "signal" -- } -- }, - "target": [ - "deb" - ], diff --git a/backports/signal-desktop/signal-do-not-package-sqlcipher-deps.patch b/backports/signal-desktop/signal-do-not-package-sqlcipher-deps.patch deleted file mode 100644 index c91209d..0000000 --- a/backports/signal-desktop/signal-do-not-package-sqlcipher-deps.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/Signal-Desktop/package.json.orig b/Signal-Desktop/package.json -index 5b7b015e20a..bb348fdb4c2 100644 ---- a/Signal-Desktop/package.json.orig -+++ b/Signal-Desktop/package.json -@@ -607,6 +607,7 @@ - "node_modules/socks/build/client/*.js", - "node_modules/smart-buffer/build/*.js", - "node_modules/@signalapp/sqlcipher/prebuilds/${platform}-${arch}/*.node", -+ "!node_modules/@signalapp/sqlcipher/deps/**", - "node_modules/@signalapp/libsignal-client/prebuilds/${platform}-${arch}/*.node", - "!node_modules/@signalapp/ringrtc/scripts/*", - "node_modules/@signalapp/ringrtc/build/${platform}/*${arch}*.node", diff --git a/backports/signal-desktop/signal-rollback-locale-changes.patch b/backports/signal-desktop/signal-rollback-locale-changes.patch deleted file mode 100644 index 97e2cf9..0000000 --- a/backports/signal-desktop/signal-rollback-locale-changes.patch +++ /dev/null @@ -1,225 +0,0 @@ -From a094a2ca2b6d8758b4aea24389c35fc4f142b715 Mon Sep 17 00:00:00 2001 -From: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com> -Date: Mon, 3 Mar 2025 19:10:01 -0800 -Subject: [PATCH] Compactify locales even more - -Rollback of Compactify locales even more. For some reason, (maybe tasje?), -these new locales aren't working - ---- - app/locale.ts | 56 ++++++++++++++++-- - package.json | 2 +- - ts/scripts/generate-compact-locales.ts | 82 +++++++++++++++++++------- - 3 files changed, 112 insertions(+), 28 deletions(-) - - -diff --git a/Signal-Desktop/package.json.orig b/Signal-Desktop/package.json -index 04dd9f9200b..e7b69ef963f 100644 ---- a/Signal-Desktop/package.json.orig -+++ b/Signal-Desktop/package.json -@@ -538,10 +538,7 @@ - { - "from": "build/compact-locales", - "to": "_locales", -- "filter": [ -- "**/values.json", -- "keys.json" -- ] -+ "filter": "**/messages.json" - }, - "js/**", - "libtextsecure/**", -diff --git a/Signal-Desktop/app/locale.ts.orig b/Signal-Desktop/app/locale.ts -index a63eef4079d..2a959da4d0d 100644 ---- a/Signal-Desktop/app/locale.ts.orig -+++ b/Signal-Desktop/app/locale.ts -@@ -1,9 +1,8 @@ - // Copyright 2017 Signal Messenger, LLC - // SPDX-License-Identifier: AGPL-3.0-only - --import { join } from 'node:path'; --import { readFileSync } from 'node:fs'; --import { app } from 'electron'; -+import { join } from 'path'; -+import { readFileSync } from 'fs'; - import lodash from 'lodash'; - import * as LocaleMatcher from '@formatjs/intl-localematcher'; - import { z } from 'zod'; -@@ -16,9 +15,6 @@ import type { LocalizerType } from '../ts/types/Util'; - import * as Errors from '../ts/types/errors'; - import { parseUnknown } from '../ts/util/schemas'; - --type CompactLocaleMessagesType = ReadonlyArray; --type CompactLocaleKeysType = ReadonlyArray; -- - const TextInfoSchema = z.object({ - direction: z.enum(['ltr', 'rtl']), - }); -@@ -29,17 +25,6 @@ function getLocaleMessages(locale: string): LocaleMessagesType { - return JSON.parse(readFileSync(targetFile, 'utf-8')); - } - --function getCompactLocaleKeys(): CompactLocaleKeysType { -- const targetFile = join(__dirname, '..', '_locales', 'keys.json'); -- return JSON.parse(readFileSync(targetFile, 'utf-8')); --} -- --function getCompactLocaleValues(locale: string): CompactLocaleMessagesType { -- const targetFile = join(__dirname, '..', '_locales', locale, 'values.json'); -- -- return JSON.parse(readFileSync(targetFile, 'utf-8')); --} -- - export type LocaleDisplayNames = Record>; - export type CountryDisplayNames = Record>; - -@@ -154,42 +139,13 @@ export function load({ - - logger.info(`locale: Matched locale: ${matchedLocale}`); - -+ const matchedLocaleMessages = getLocaleMessages(matchedLocale); -+ const englishMessages = getLocaleMessages('en'); - const localeDisplayNames = getLocaleDisplayNames(); - const countryDisplayNames = getCountryDisplayNames(); - -- let finalMessages: LocaleMessagesType; -- if (app.isPackaged) { -- const matchedLocaleMessages = getCompactLocaleValues(matchedLocale); -- const englishMessages = getCompactLocaleValues('en'); -- const keys = getCompactLocaleKeys(); -- if (matchedLocaleMessages.length !== keys.length) { -- throw new Error( -- `Invalid "${matchedLocale}" entry count, ` + -- `${matchedLocaleMessages.length} != ${keys.length}` -- ); -- } -- if (englishMessages.length !== keys.length) { -- throw new Error( -- `Invalid "en" entry count, ${englishMessages.length} != ${keys.length}` -- ); -- } -- -- // We start with english, then overwrite that with anything present in locale -- finalMessages = Object.create(null); -- for (const [i, key] of keys.entries()) { -- finalMessages[key] = { -- messageformat: -- matchedLocaleMessages[i] ?? englishMessages[i] ?? undefined, -- }; -- } -- } else { -- const matchedLocaleMessages = getLocaleMessages(matchedLocale); -- const englishMessages = getLocaleMessages('en'); -- -- // We start with english, then overwrite that with anything present in locale -- finalMessages = merge(englishMessages, matchedLocaleMessages); -- } -- -+ // We start with english, then overwrite that with anything present in locale -+ const finalMessages = merge(englishMessages, matchedLocaleMessages); - const i18n = setupI18n(matchedLocale, finalMessages, { - renderEmojify: shouldNeverBeCalled, - }); -diff --git a/Signal-Desktop/ts/scripts/generate-compact-locales.ts.orig b/Signal-Desktop/ts/scripts/generate-compact-locales.ts -index 7187d287acc..9a17d638f44 100644 ---- a/Signal-Desktop/ts/scripts/generate-compact-locales.ts.orig -+++ b/Signal-Desktop/ts/scripts/generate-compact-locales.ts -@@ -3,49 +3,6 @@ - - import { readdir, mkdir, readFile, writeFile } from 'node:fs/promises'; - import { join, dirname } from 'node:path'; --import pMap from 'p-map'; --import { isLocaleMessageType } from '../util/setupI18nMain.js'; -- --async function compact({ -- sourceDir, -- targetDir, -- locale, -- keys, --}: { -- sourceDir: string; -- targetDir: string; -- locale: string; -- keys: ReadonlyArray; --}): Promise> { -- const sourcePath = join(sourceDir, locale, 'messages.json'); -- const targetPath = join(targetDir, locale, 'values.json'); -- -- await mkdir(dirname(targetPath), { recursive: true }); -- -- const json = JSON.parse(await readFile(sourcePath, 'utf8')); -- -- const result = new Array(); -- for (const key of keys) { -- if (json[key] == null) { -- // Pull English translation, or leave blank (string was deleted) -- result.push(null); -- continue; -- } -- -- const value = json[key]; -- if (!isLocaleMessageType(value)) { -- continue; -- } -- if (value.messageformat == null) { -- continue; -- } -- result.push(value.messageformat); -- } -- -- await writeFile(targetPath, JSON.stringify(result)); -- -- return keys; --} - - async function main(): Promise { - const rootDir = join(__dirname, '..', '..'); -@@ -54,27 +11,30 @@ async function main(): Promise { - - const locales = await readdir(sourceDir); - -- const allKeys = await pMap( -- locales, -- async locale => { -+ await Promise.all( -+ locales.map(async locale => { - const sourcePath = join(sourceDir, locale, 'messages.json'); -- const json = JSON.parse(await readFile(sourcePath, 'utf8')); -- return Object.entries(json) -- .filter(([, value]) => isLocaleMessageType(value)) -- .map(([key]) => key); -- }, -- { concurrency: 10 } -- ); -+ const targetPath = join(targetDir, locale, 'messages.json'); - -- // Sort keys alphabetically for better incremental updates. -- const keys = Array.from(new Set(allKeys.flat())).sort(); -- await mkdir(targetDir, { recursive: true }); -- await writeFile(join(targetDir, 'keys.json'), JSON.stringify(keys)); -+ await mkdir(dirname(targetPath), { recursive: true }); - -- await pMap( -- locales, -- locale => compact({ sourceDir, targetDir, locale, keys }), -- { concurrency: 10 } -+ const json = JSON.parse(await readFile(sourcePath, 'utf8')); -+ for (const value of Object.values(json)) { -+ const typedValue = value as { description?: string }; -+ delete typedValue.description; -+ } -+ delete json.smartling; -+ -+ const entries = [...Object.entries(json)]; -+ -+ // Sort entries alphabetically for better incremental updates. -+ entries.sort(([a], [b]) => { -+ return a < b ? -1 : 1; -+ }); -+ -+ const result = Object.fromEntries(entries); -+ await writeFile(targetPath, JSON.stringify(result)); -+ }) - ); - } - diff --git a/backports/signal-desktop/signal-show-window-please.patch b/backports/signal-desktop/signal-show-window-please.patch index c8c5a65..39c8381 100644 --- a/backports/signal-desktop/signal-show-window-please.patch +++ b/backports/signal-desktop/signal-show-window-please.patch @@ -1,13 +1,11 @@ -diff --git a/Signal-Desktop/app/main.ts.orig b/Signal-Desktop/app/main.ts -index aa1bec8..bd7c1d5 100644 ---- a/Signal-Desktop/app/main.ts.orig -+++ b/Signal-Desktop/app/main.ts -@@ -690,7 +690,7 @@ async function createWindow() { - : DEFAULT_HEIGHT; +--- ./app/main.ts.orig ++++ ./app/main.ts +@@ -721,7 +721,7 @@ + const titleBarOverlay = await getTitleBarOverlay(); const windowOptions: Electron.BrowserWindowConstructorOptions = { - show: false, + show: true, - width, - height, + width: DEFAULT_WIDTH, + height: DEFAULT_HEIGHT, minWidth: MIN_WIDTH, diff --git a/backports/signal-desktop/signal-update-links.patch b/backports/signal-desktop/signal-update-links.patch index afd0b6b..39ec819 100644 --- a/backports/signal-desktop/signal-update-links.patch +++ b/backports/signal-desktop/signal-update-links.patch @@ -1,5 +1,5 @@ ---- ./Signal-Desktop/ts/components/DialogExpiredBuild.tsx.orig -+++ ./Signal-Desktop/ts/components/DialogExpiredBuild.tsx +--- ./ts/components/DialogExpiredBuild.tsx.orig ++++ ./ts/components/DialogExpiredBuild.tsx @@ -23,9 +23,9 @@ containerWidthBreakpoint={containerWidthBreakpoint} type="error" @@ -12,8 +12,8 @@ hasAction > {i18n('icu:expiredWarning')}{' '} ---- ./Signal-Desktop/ts/types/support.ts.orig -+++ ./Signal-Desktop/ts/types/support.ts +--- ./ts/types/support.ts.orig ++++ ./ts/types/support.ts @@ -1,7 +1,7 @@ // Copyright 2023 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only diff --git a/backports/signal-desktop/signal-use-system-sqlcipher.patch b/backports/signal-desktop/signal-use-system-sqlcipher.patch deleted file mode 100644 index 576ee66..0000000 --- a/backports/signal-desktop/signal-use-system-sqlcipher.patch +++ /dev/null @@ -1,29 +0,0 @@ -diff --git a/node-sqlcipher/binding.gyp.orig b/node-sqlcipher/binding.gyp -index 9a5caa2f713..8d3da54fea7 100644 ---- a/node-sqlcipher/binding.gyp.orig -+++ b/node-sqlcipher/binding.gyp -@@ -3,8 +3,15 @@ - 'targets': [ - { - 'target_name': 'node_sqlcipher', -+ 'include_dirs': [ -+ '/usr/include/sqlcipher', -+ ], -+ 'link_settings': { -+ 'libraries': [ -+ '-lsqlcipher', -+ ] -+ }, - 'dependencies': [ -- 'deps/sqlcipher/sqlcipher.gyp:sqlcipher', - 'deps/extension/extension.gyp:extension', - " SctpTransport() const { return sctp_transport_; } -+ scoped_refptr<::webrtc::SctpTransport> SctpTransport() const { -+ return sctp_transport_; -+ } - - // TODO(bugs.webrtc.org/9719): Delete method, update callers to use - // SctpTransport() instead. diff --git a/backports/signal-desktop/webrtc-gcc13.patch b/backports/signal-desktop/webrtc-gcc13.patch new file mode 100644 index 0000000..f27bc56 --- /dev/null +++ b/backports/signal-desktop/webrtc-gcc13.patch @@ -0,0 +1,20 @@ +--- ./rtc_base/system/file_wrapper.h.orig ++++ ./rtc_base/system/file_wrapper.h +@@ -13,6 +13,7 @@ + + #include + #include ++#include + + #include + +--- ./modules/audio_coding/neteq/reorder_optimizer.cc.orig ++++ ./modules/audio_coding/neteq/reorder_optimizer.cc +@@ -11,6 +11,7 @@ + #include "modules/audio_coding/neteq/reorder_optimizer.h" + + #include ++#include + #include + #include + diff --git a/backports/signal-desktop/webrtc-rtcbase-platform-thread-type-do-not-include-linux-prctl-header.patch b/backports/signal-desktop/webrtc-rtcbase-platform-thread-type-do-not-include-linux-prctl-header.patch deleted file mode 100644 index c2279a0..0000000 --- a/backports/signal-desktop/webrtc-rtcbase-platform-thread-type-do-not-include-linux-prctl-header.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/webrtc/rtc_base/platform_thread_types.cc.orig b/webrtc/rtc_base/platform_thread_types.cc -index 20bf4af..482b15f 100644 ---- a/webrtc/rtc_base/platform_thread_types.cc.orig -+++ b/webrtc/rtc_base/platform_thread_types.cc -@@ -12,7 +12,6 @@ - - // IWYU pragma: begin_keep - #if defined(WEBRTC_LINUX) --#include - #include - #include - diff --git a/backports/signal-desktop/webrtc-shared-libs.patch b/backports/signal-desktop/webrtc-shared-libs.patch deleted file mode 100644 index 04b55c0..0000000 --- a/backports/signal-desktop/webrtc-shared-libs.patch +++ /dev/null @@ -1,78 +0,0 @@ ---- ./webrtc/BUILD.gn.orig -+++ ./webrtc/BUILD.gn -@@ -38,7 +38,7 @@ - # 'ninja default' and then 'ninja all', the second build should do no work. - group("default") { - testonly = true -- deps = [ ":webrtc" ] -+ deps = [ ":signaldeswebrtc" ] - if (rtc_build_examples) { - deps += [ "examples" ] - } -@@ -464,7 +464,7 @@ - - if (!build_with_chromium) { - # Target to build all the WebRTC production code. -- rtc_static_library("webrtc") { -+ rtc_shared_library("signaldeswebrtc") { - # Only the root target and the test should depend on this. - visibility = [ - "//:default", -@@ -530,7 +530,6 @@ if (!build_with_chromium) { - - sources = [] - -- complete_static_lib = true - suppressed_configs += [ "//build/config/compiler:thin_archive" ] - defines = [] - -diff --git a/webrtc/third_party/googletest/BUILD.gn.orig b/webrtc/third_party/googletest/BUILD.gn -index 14089f0..b7dc621 100644 ---- a/webrtc/third_party/googletest/BUILD.gn.orig -+++ b/webrtc/third_party/googletest/BUILD.gn -@@ -48,7 +48,6 @@ config("gtest_config") { - - configs = [ - "//third_party/abseil-cpp:absl_include_config", -- "//third_party/re2:re2_config", - ] - } - -diff --git a/webrtc/third_party/googletest/BUILD.gn.orig b/webrtc/third_party/googletest/BUILD.gn -index b7dc621..367f929 100644 ---- a/webrtc/third_party/googletest/BUILD.gn.orig -+++ b/webrtc/third_party/googletest/BUILD.gn -@@ -129,7 +128,6 @@ source_set("gtest") { - - # googletest only needs `absl`, but this makes gn check happier. - deps = [ "//third_party/abseil-cpp:absl_full" ] -- public_deps = [ "//third_party/re2" ] - if (!build_with_chromium) { - defines += [ "GTEST_DISABLE_PRINT_STACK_TRACE" ] - sources -= [ -diff --git a/webrtc/third_party/fuzztest/BUILD.gn.orig b/webrtc/third_party/fuzztest/BUILD.gn -index 57ee790..ba1d297 100644 ---- a/webrtc/third_party/fuzztest/BUILD.gn.orig -+++ b/webrtc/third_party/fuzztest/BUILD.gn -@@ -309,7 +309,6 @@ source_set("fuzztest_internal") { - # For RE2 mutators. It's questionable whether we want to pull this library - # into every fuzztest target, but this is the approach used in other - # fuzztest contexts so we'll do the same -- "//third_party/re2", - - # For protobuf mutators - "$protobuf_target_prefix:protobuf_lite", -diff --git a/webrtc/third_party/BUILD.gn b/webrtc/third_party/BUILD.gn -index 256fd092e2e..4ce797ebad7 100644 ---- a/webrtc/third_party/BUILD.gn -+++ b/webrtc/third_party/BUILD.gn -@@ -71,8 +69,5 @@ component("freetype_harfbuzz") { - - buildflag_header("freetype_buildflags") { - header = "freetype_buildflags.h" -- flags = [ -- "USE_SYSTEM_FREETYPE=$use_system_freetype", -- "ENABLE_FREETYPE=$enable_freetype", -- ] -+ flags = [ "USE_SYSTEM_FREETYPE=$use_system_freetype" ] - } diff --git a/backports/signal-desktop/webrtc-shared-like-my-wife.patch b/backports/signal-desktop/webrtc-shared-like-my-wife.patch new file mode 100644 index 0000000..bd7115a --- /dev/null +++ b/backports/signal-desktop/webrtc-shared-like-my-wife.patch @@ -0,0 +1,28 @@ +--- ./BUILD.gn.orig ++++ ./BUILD.gn +@@ -38,7 +38,7 @@ + # 'ninja default' and then 'ninja all', the second build should do no work. + group("default") { + testonly = true +- deps = [ ":webrtc" ] ++ deps = [ ":signaldeswebrtc" ] + if (rtc_build_examples) { + deps += [ "examples" ] + } +@@ -464,7 +464,7 @@ + + if (!build_with_chromium) { + # Target to build all the WebRTC production code. +- rtc_static_library("webrtc") { ++ rtc_shared_library("signaldeswebrtc") { + # Only the root target and the test should depend on this. + visibility = [ + "//:default", +@@ -472,7 +472,6 @@ + ] + + sources = [] +- complete_static_lib = true + suppressed_configs += [ "//build/config/compiler:thin_archive" ] + defines = [] + diff --git a/backports/signal-desktop/webrtc-use-only-payloadtypesuggester-for-pt-assignement.patch b/backports/signal-desktop/webrtc-use-only-payloadtypesuggester-for-pt-assignement.patch deleted file mode 100644 index 1504f81..0000000 --- a/backports/signal-desktop/webrtc-use-only-payloadtypesuggester-for-pt-assignement.patch +++ /dev/null @@ -1,459 +0,0 @@ -diff --git a/webrtc/pc/codec_vendor.cc b/webrtc/pc/codec_vendor.cc -index 42d52f6..e45516c 100644 ---- a/webrtc/pc/codec_vendor.cc -+++ b/webrtc/pc/codec_vendor.cc -@@ -39,7 +39,6 @@ - #include "pc/rtp_media_utils.h" - #include "pc/session_description.h" - #include "pc/typed_codec_vendor.h" --#include "pc/used_ids.h" - #include "rtc_base/checks.h" - #include "rtc_base/logging.h" - #include "rtc_base/string_encode.h" -@@ -54,11 +53,6 @@ - - namespace { - --using webrtc::PayloadTypeSuggester; --using webrtc::RTCError; --using webrtc::RTCErrorOr; --using webrtc::RtpTransceiverDirection; -- - bool IsRtxCodec(const RtpCodecCapability& capability) { - return absl::EqualsIgnoreCase(capability.name, kRtxCodecName); - } -@@ -75,8 +69,7 @@ - std::optional FindMatchingCodec(const CodecList& codecs1, - const CodecList& codecs2, - const Codec& codec_to_match) { -- return webrtc::FindMatchingCodec(codecs1.codecs(), codecs2.codecs(), -- codec_to_match); -+ return FindMatchingCodec(codecs1.codecs(), codecs2.codecs(), codec_to_match); - } - - void StripCNCodecs(CodecList& audio_codecs) { -@@ -105,7 +98,7 @@ - } - - int associated_pt; -- if (!webrtc::FromString(associated_pt_str, &associated_pt)) { -+ if (!FromString(associated_pt_str, &associated_pt)) { - RTC_LOG(LS_WARNING) << "Couldn't convert payload type " << associated_pt_str - << " of RTX codec " << rtx_codec.id - << " to an integer."; -@@ -136,14 +129,14 @@ - return nullptr; - } - -- std::vector redundant_payloads = webrtc::split(fmtp, '/'); -+ std::vector redundant_payloads = split(fmtp, '/'); - if (redundant_payloads.size() < 2) { - return nullptr; - } - - absl::string_view associated_pt_str = redundant_payloads[0]; - int associated_pt; -- if (!webrtc::FromString(associated_pt_str, &associated_pt)) { -+ if (!FromString(associated_pt_str, &associated_pt)) { - RTC_LOG(LS_WARNING) << "Couldn't convert first payload type " - << associated_pt_str << " of RED codec " << red_codec.id - << " to an integer."; -@@ -182,7 +175,21 @@ - return suggestion.MoveError(); - } - codec.id = suggestion.value(); -- offered_codecs.push_back(codec); -+ // The rewrite of the parameter may have turned the codec into -+ // one that is already present. -+ bool skip = false; -+ for (const Codec& present_codec : offered_codecs) { -+ if (present_codec.id == codec.id) { -+ RTC_DCHECK(MatchesWithReferenceAttributes(present_codec, codec)) -+ << "Codec mismatch: present " << present_codec << ", new " -+ << codec; -+ skip = true; -+ break; -+ } -+ } -+ if (!skip) { -+ offered_codecs.push_back(codec); -+ } - } - } - -@@ -232,7 +239,7 @@ - } - std::string red_param = absl::StrCat(matching_codec->id); - red_codec.params[kCodecParamNotInNameValueFormat] = -- webrtc::StrJoin(std::vector{red_param, red_param}, "/"); -+ StrJoin(std::vector{red_param, red_param}, "/"); - } - RTCErrorOr suggestion = - pt_suggester.SuggestPayloadType(mid, red_codec); -@@ -240,84 +247,25 @@ - return suggestion.MoveError(); - } - red_codec.id = suggestion.value(); -- offered_codecs.push_back(red_codec); -+ // The rewrite of the parameter may have turned the RED codec into -+ // one that is already present. -+ bool skip = false; -+ for (const Codec& present_codec : offered_codecs) { -+ if (present_codec.id == red_codec.id) { -+ RTC_DCHECK(MatchesWithReferenceAttributes(present_codec, red_codec)); -+ skip = true; -+ break; -+ } -+ } -+ if (!skip) { -+ offered_codecs.push_back(red_codec); -+ } - } - } - offered_codecs.CheckConsistency(); - return RTCError::OK(); - } - --// Adds all codecs from `reference_codecs` to `offered_codecs` that don't --// already exist in `offered_codecs` and ensure the payload types don't --// collide. --// OLD VERSION - uses UsedPayloadTypes --void MergeCodecs(const CodecList& reference_codecs, -- CodecList& offered_codecs, -- UsedPayloadTypes* used_pltypes) { -- // Add all new codecs that are not RTX/RED codecs. -- // The two-pass splitting of the loops means preferring payload types -- // of actual codecs with respect to collisions. -- for (const Codec& reference_codec : reference_codecs) { -- if (reference_codec.GetResiliencyType() != Codec::ResiliencyType::kRtx && -- reference_codec.GetResiliencyType() != Codec::ResiliencyType::kRed && -- !FindMatchingCodec(reference_codecs, offered_codecs, reference_codec)) { -- Codec codec = reference_codec; -- used_pltypes->FindAndSetIdUsed(&codec); -- offered_codecs.push_back(codec); -- } -- } -- -- // Add all new RTX or RED codecs. -- for (const Codec& reference_codec : reference_codecs) { -- if (reference_codec.GetResiliencyType() == Codec::ResiliencyType::kRtx && -- !FindMatchingCodec(reference_codecs, offered_codecs, reference_codec)) { -- Codec rtx_codec = reference_codec; -- const Codec* associated_codec = -- GetAssociatedCodecForRtx(reference_codecs, rtx_codec); -- if (!associated_codec) { -- continue; -- } -- // Find a codec in the offered list that matches the reference codec. -- // Its payload type may be different than the reference codec. -- std::optional matching_codec = FindMatchingCodec( -- reference_codecs, offered_codecs, *associated_codec); -- if (!matching_codec) { -- RTC_LOG(LS_WARNING) -- << "Couldn't find matching " << associated_codec->name << " codec."; -- continue; -- } -- -- rtx_codec.params[kCodecParamAssociatedPayloadType] = -- absl::StrCat(matching_codec->id); -- used_pltypes->FindAndSetIdUsed(&rtx_codec); -- offered_codecs.push_back(rtx_codec); -- } else if (reference_codec.GetResiliencyType() == -- Codec::ResiliencyType::kRed && -- !FindMatchingCodec(reference_codecs, offered_codecs, -- reference_codec)) { -- Codec red_codec = reference_codec; -- const Codec* associated_codec = -- GetAssociatedCodecForRed(reference_codecs, red_codec); -- if (associated_codec) { -- std::optional matching_codec = FindMatchingCodec( -- reference_codecs, offered_codecs, *associated_codec); -- if (!matching_codec) { -- RTC_LOG(LS_WARNING) << "Couldn't find matching " -- << associated_codec->name << " codec."; -- continue; -- } -- -- red_codec.params[kCodecParamNotInNameValueFormat] = -- absl::StrCat(matching_codec->id) + "/" + -- absl::StrCat(matching_codec->id); -- } -- used_pltypes->FindAndSetIdUsed(&red_codec); -- offered_codecs.push_back(red_codec); -- } -- } -- offered_codecs.CheckConsistency(); --} -- - // `codecs` is a full list of codecs with correct payload type mappings, which - // don't conflict with mappings of the other media type; `supported_codecs` is - // a list filtered for the media section`s direction but with default payload -@@ -382,7 +330,7 @@ - codec.params.find(kCodecParamNotInNameValueFormat); - if (fmtp != codec.params.end()) { - std::vector redundant_payloads = -- webrtc::split(fmtp->second, '/'); -+ split(fmtp->second, '/'); - if (!redundant_payloads.empty() && - redundant_payloads[0] == id) { - if (!red_was_added) { -@@ -443,7 +391,7 @@ - for (const Codec& supported_codec : supported_codecs) { - if (absl::EqualsIgnoreCase(supported_codec.name, kH265CodecName)) { - std::optional supported_ptl = -- webrtc::ParseSdpForH265ProfileTierLevel(supported_codec.params); -+ ParseSdpForH265ProfileTierLevel(supported_codec.params); - if (supported_ptl.has_value()) { - supported_h265_profiles[supported_ptl->profile] = - supported_ptl->level; -@@ -458,14 +406,14 @@ - for (auto& filtered_codec : filtered_codecs) { - if (absl::EqualsIgnoreCase(filtered_codec.name, kH265CodecName)) { - std::optional filtered_ptl = -- webrtc::ParseSdpForH265ProfileTierLevel(filtered_codec.params); -+ ParseSdpForH265ProfileTierLevel(filtered_codec.params); - if (filtered_ptl.has_value()) { - auto it = supported_h265_profiles.find(filtered_ptl->profile); - - if (it != supported_h265_profiles.end() && - filtered_ptl->level != it->second) { - filtered_codec.params[kH265FmtpLevelId] = -- webrtc::H265LevelToString(it->second); -+ H265LevelToString(it->second); - } - } - } -@@ -506,13 +454,13 @@ - } - } - if (absl::EqualsIgnoreCase(ours.name, kH264CodecName)) { -- webrtc::H264GenerateProfileLevelIdForAnswer(ours.params, theirs->params, -- &negotiated.params); -+ H264GenerateProfileLevelIdForAnswer(ours.params, theirs->params, -+ &negotiated.params); - } - #ifdef RTC_ENABLE_H265 - if (absl::EqualsIgnoreCase(ours.name, kH265CodecName)) { -- webrtc::H265GenerateProfileTierLevelForAnswer( -- ours.params, theirs->params, &negotiated.params); -+ H265GenerateProfileTierLevelForAnswer(ours.params, theirs->params, -+ &negotiated.params); - NegotiateTxMode(ours, *theirs, &negotiated); - } - #endif -@@ -534,7 +482,7 @@ - continue; - } - int apt_value; -- if (!webrtc::FromString(apt_str, &apt_value)) { -+ if (!FromString(apt_str, &apt_value)) { - RTC_LOG(LS_WARNING) << "Unconvertable apt value"; - continue; - } -@@ -634,9 +582,11 @@ - } - // Add our codecs that are not in the current description. - if (media_description_options.type == MediaType::AUDIO) { -- MergeCodecs(all_audio_codecs(), mid, codecs, pt_suggester); -+ MergeCodecs(audio_recv_codecs(), mid, codecs, pt_suggester); -+ MergeCodecs(audio_send_codecs(), mid, codecs, pt_suggester); - } else { -- MergeCodecs(all_video_codecs(), mid, codecs, pt_suggester); -+ MergeCodecs(video_recv_codecs(), mid, codecs, pt_suggester); -+ MergeCodecs(video_send_codecs(), mid, codecs, pt_suggester); - } - CodecList filtered_codecs; - CodecList supported_codecs = -@@ -667,20 +617,11 @@ - const MediaContentDescription* mcd = - current_content->media_description(); - for (const Codec& codec : mcd->codecs()) { -- if (webrtc::FindMatchingCodec(mcd->codecs(), codecs.codecs(), -- codec)) { -+ if (FindMatchingCodec(mcd->codecs(), codecs.codecs(), codec)) { - filtered_codecs.push_back(codec); - } - } - } -- // Note what PTs are already in use. -- UsedPayloadTypes -- used_pltypes; // Used to avoid pt collisions in filtered_codecs -- for (auto& codec : filtered_codecs) { -- // Note: This may change PTs. Doing so woud indicate an error, but -- // UsedPayloadTypes doesn't offer a means to make the distinction. -- used_pltypes.FindAndSetIdUsed(&codec); -- } - // Add other supported codecs. - for (const Codec& codec : supported_codecs) { - std::optional found_codec = -@@ -707,8 +648,11 @@ - changed_referenced_codec->id); - } - } -- // Quick fix for b/395077842: Remap the codec if it collides. -- used_pltypes.FindAndSetIdUsed(&(*found_codec)); -+ auto pt_or_error = pt_suggester.SuggestPayloadType(mid, *found_codec); -+ if (!pt_or_error.ok()) { -+ return pt_or_error.MoveError(); -+ } -+ found_codec->id = pt_or_error.value(); - filtered_codecs.push_back(*found_codec); - } - } -@@ -763,9 +707,11 @@ - } - // Add all our supported codecs - if (media_description_options.type == MediaType::AUDIO) { -- MergeCodecs(all_audio_codecs(), mid, codecs, pt_suggester); -+ MergeCodecs(audio_recv_codecs(), mid, codecs, pt_suggester); -+ MergeCodecs(audio_send_codecs(), mid, codecs, pt_suggester); - } else { -- MergeCodecs(all_video_codecs(), mid, codecs, pt_suggester); -+ MergeCodecs(video_recv_codecs(), mid, codecs, pt_suggester); -+ MergeCodecs(video_send_codecs(), mid, codecs, pt_suggester); - } - CodecList filtered_codecs; - CodecList negotiated_codecs; -@@ -794,8 +740,8 @@ - const MediaContentDescription* mcd = - current_content->media_description(); - for (const Codec& codec : mcd->codecs()) { -- if (std::optional found_codec = webrtc::FindMatchingCodec( -- mcd->codecs(), codecs.codecs(), codec)) { -+ if (std::optional found_codec = -+ FindMatchingCodec(mcd->codecs(), codecs.codecs(), codec)) { - filtered_codecs.push_back(*found_codec); - } - } -@@ -913,8 +859,7 @@ - case RtpTransceiverDirection::kSendRecv: - case RtpTransceiverDirection::kStopped: - case RtpTransceiverDirection::kInactive: -- return GetVideoCodecsForOffer( -- webrtc::RtpTransceiverDirectionReversed(offer)); -+ return GetVideoCodecsForOffer(RtpTransceiverDirectionReversed(offer)); - case RtpTransceiverDirection::kSendOnly: - return video_send_codecs_.codecs(); - case RtpTransceiverDirection::kRecvOnly: -@@ -948,8 +893,7 @@ - case RtpTransceiverDirection::kSendRecv: - case RtpTransceiverDirection::kStopped: - case RtpTransceiverDirection::kInactive: -- return GetAudioCodecsForOffer( -- webrtc::RtpTransceiverDirectionReversed(offer)); -+ return GetAudioCodecsForOffer(RtpTransceiverDirectionReversed(offer)); - case RtpTransceiverDirection::kSendOnly: - return audio_send_codecs_.codecs(); - case RtpTransceiverDirection::kRecvOnly: -@@ -958,43 +902,6 @@ - RTC_CHECK_NOTREACHED(); - } - --CodecList CodecVendor::all_video_codecs() const { -- CodecList all_codecs; -- UsedPayloadTypes used_payload_types; -- for (const Codec& codec : video_recv_codecs_.codecs()) { -- Codec codec_mutable = codec; -- used_payload_types.FindAndSetIdUsed(&codec_mutable); -- all_codecs.push_back(codec_mutable); -- } -- -- // Use MergeCodecs to merge the second half of our list as it already checks -- // and fixes problems with duplicate payload types. -- MergeCodecs(video_send_codecs_.codecs(), all_codecs, &used_payload_types); -- -- return all_codecs; --} -- --CodecList CodecVendor::all_audio_codecs() const { -- // Compute the audio codecs union. -- CodecList codecs; -- for (const Codec& send : audio_send_codecs_.codecs()) { -- codecs.push_back(send); -- if (!FindMatchingCodec(audio_send_codecs_.codecs(), -- audio_recv_codecs_.codecs(), send)) { -- // It doesn't make sense to have an RTX codec we support sending but not -- // receiving. -- RTC_DCHECK(send.GetResiliencyType() != Codec::ResiliencyType::kRtx); -- } -- } -- for (const Codec& recv : audio_recv_codecs_.codecs()) { -- if (!FindMatchingCodec(audio_recv_codecs_.codecs(), -- audio_send_codecs_.codecs(), recv)) { -- codecs.push_back(recv); -- } -- } -- return codecs; --} -- - CodecList CodecVendor::audio_sendrecv_codecs() const { - // Use NegotiateCodecs to merge our codec lists, since the operation is - // essentially the same. Put send_codecs as the offered_codecs, which is the -diff --git a/webrtc/pc/wcodec_vendor.h b/webrtc/pc/codec_vendor.h -index 1472225..4a3a8d9 100644 ---- a/webrtc/pc/codec_vendor.h -+++ b/webrtc/pc/codec_vendor.h -@@ -102,9 +102,6 @@ - const RtpTransceiverDirection& offer, - const RtpTransceiverDirection& answer) const; - -- CodecList all_video_codecs() const; -- CodecList all_audio_codecs() const; -- - TypedCodecVendor audio_send_codecs_; - TypedCodecVendor audio_recv_codecs_; - -diff --git a/webrtc/pc/used_ids.h b/webrtc/pc/used_ids.h -index fe80531..f9d825c 100644 ---- a/webrtc/pc/used_ids.h -+++ b/webrtc/pc/used_ids.h -@@ -14,7 +14,6 @@ - #include - - #include "api/rtp_parameters.h" --#include "media/base/codec.h" - #include "rtc_base/checks.h" - - namespace webrtc { -@@ -88,41 +86,6 @@ - std::set id_set_; - }; - --// Helper class used for finding duplicate RTP payload types among audio, video --// and data codecs. When bundle is used the payload types may not collide. --class UsedPayloadTypes : public UsedIds { -- public: -- UsedPayloadTypes() -- : UsedIds(kFirstDynamicPayloadTypeLowerRange, -- kLastDynamicPayloadTypeUpperRange) {} -- -- // Check if a payload type is valid. The range [64-95] is forbidden -- // when rtcp-mux is used. -- static bool IsIdValid(Codec codec, bool rtcp_mux) { -- if (rtcp_mux && (codec.id > kLastDynamicPayloadTypeLowerRange && -- codec.id < kFirstDynamicPayloadTypeUpperRange)) { -- return false; -- } -- return codec.id >= 0 && codec.id <= kLastDynamicPayloadTypeUpperRange; -- } -- -- protected: -- bool IsIdUsed(int new_id) override { -- // Range marked for RTCP avoidance is "used". -- if (new_id > kLastDynamicPayloadTypeLowerRange && -- new_id < kFirstDynamicPayloadTypeUpperRange) -- return true; -- return UsedIds::IsIdUsed(new_id); -- } -- -- private: -- static const int kFirstDynamicPayloadTypeLowerRange = 35; -- static const int kLastDynamicPayloadTypeLowerRange = 63; -- -- static const int kFirstDynamicPayloadTypeUpperRange = 96; -- static const int kLastDynamicPayloadTypeUpperRange = 127; --}; -- - // Helper class used for finding duplicate RTP Header extension ids among - // audio and video extensions. - class UsedRtpHeaderExtensionIds : public UsedIds { diff --git a/backports/soqt/APKBUILD b/backports/soqt/APKBUILD new file mode 100644 index 0000000..778776e --- /dev/null +++ b/backports/soqt/APKBUILD @@ -0,0 +1,30 @@ +# Contributor: Aiden Grossman +# Maintainer: Aiden Grossman +pkgname=soqt +pkgver=1.6.0 +pkgrel=0 +pkgdesc="GUI binding library for coin" +url="https://github.com/coin3d/soqt" +arch="all" +license="BSD-3-Clause" +makedepends="coin-dev cmake mesa-dev qt5-qtbase-dev" +options="!check" # test suite consists only of interactive programs +subpackages="$pkgname-dev $pkgname-doc" +source="https://github.com/coin3d/soqt/releases/download/SoQt-$pkgver/soqt-$pkgver-src.tar.gz" +builddir="$srcdir/$pkgname" + +build() { + cmake -B build . \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=None \ + -DSOQT_BUILD_DOC_MAN=ON + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} + +sha512sums=" +4221e98f51cca4dda23043428e869b60ab4d994710f97c0f44cd82631ffad2bd8bbaf0b820434a4636892df663d66ecd2aec14b185972671b2d22c0fe242b553 soqt-1.6.0-src.tar.gz +" diff --git a/backports/thelounge/APKBUILD b/backports/thelounge/APKBUILD index 22b5565..7988787 100644 --- a/backports/thelounge/APKBUILD +++ b/backports/thelounge/APKBUILD @@ -1,84 +1,83 @@ # Contributor: Kay Thomas -# Contributor: Fabricio Silva -# Maintainer: Fabricio Silva +# Maintainer: Kay Thomas pkgname=thelounge -pkgver=4.4.3 -pkgrel=0 +pkgver=4.4.1 +pkgrel=2 pkgdesc="Modern, responsive, cross-platform, self-hosted web IRC client" url="https://thelounge.chat" -# build broken against node 24 -#arch="all !riscv64" # riscv64 gets SIGILL +# x86: textrels +# s390x: fails to check +# riscv64: fails to build +arch="all !x86 !s390x !riscv64" license="MIT" depends="nodejs" -makedepends="yarn py3-setuptools" -subpackages="$pkgname-openrc $pkgname-doc" +makedepends="yarn npm python3" +subpackages="$pkgname-openrc" +pkgusers="thelounge" +pkggroups="thelounge" install="$pkgname.pre-install $pkgname.post-install" -source=" - $pkgname-$pkgver.tar.gz::https://github.com/thelounge/thelounge/archive/v$pkgver.tar.gz +source="$pkgname-$pkgver.tar.gz::https://github.com/thelounge/thelounge/archive/v$pkgver.tar.gz + no-version-test.patch thelounge.initd - thelounge.confd + allow-https-for-connect-src.patch " -options="net" # net for npm - -case $CARCH in - # loongarch64: 2 tests failed on the builder - # 1) SQLite Message Storage: should retrieve latest LIMIT messages in order - # 2) SQLite Message Storage: should search messages - loongarch64) options="$options !check";; -esac +options="net" # npm prepare() { default_prepare - export BROWSERSLIST_IGNORE_OLD_DATA=true - # to build npm/sqlite3 from source - export npm_config_build_from_source=true yarn install --frozen-lockfile } build() { - NODE_ENV=production yarn build - - # these are the same file - ln -sf ../package.json ./dist/package.json - # set home location - echo "/var/lib/thelounge" >.thelounge_home + NODE_ENV=production yarn run build } check() { - # skips tests that checks if version is using "source" and "git sha" - yarn test:mocha --grep "\#getVersion" --invert + CI=yes yarn run test:mocha } package() { - # cleanup unused files (cant be done before check) yarn install --production --ignore-scripts --prefer-offline - find ./ -type f \( \ - -iname "*.ts" -o -iname "*.map" -o -iname "*.md" -o -iname "*.sh" -o \ - -iname "babel.config*" -o -iname "webpack.config*" -o -iname "tsconfig*" \ - \) -delete - find ./node_modules -type f \( \ - -iname "Makefile*" -o -iname "README*" -o -iname "LICENSE*" -o -iname "CHANGELOG*" \ - \) -delete - find ./node_modules -type d \( \ - -iname "test" -o -iname "node-gyp" -o -iname ".github" \ - \) -prune -exec rm -rf {} \; + NODE_ENV=production npm install --unsafe-perm -g --prefix "$pkgdir"/usr - install -dm755 "$pkgdir"/usr/share/webapps/thelounge - install -Dm755 index.js -t "$pkgdir"/usr/share/webapps/thelounge/ - install -Dm644 package.json .thelounge_home -t "$pkgdir"/usr/share/webapps/thelounge/ - install -Dm644 client/index.html.tpl -t "$pkgdir"/usr/share/webapps/thelounge/client/ - cp -a node_modules public dist "$pkgdir"/usr/share/webapps/thelounge/ - mkdir -p "$pkgdir"/usr/bin - ln -sf ../share/webapps/thelounge/index.js "$pkgdir"/usr/bin/thelounge + # Remove incorrect symlink, copy correct files + rm "$pkgdir"/usr/lib/node_modules/thelounge + mkdir -p "$pkgdir"/usr/lib/node_modules/thelounge + cp -a index.js client public node_modules dist package.json "$pkgdir"/usr/lib/node_modules/thelounge/ - install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/thelounge/ - install -Dm755 "$srcdir"/$pkgname.initd "$pkgdir"/etc/init.d/$pkgname - install -Dm755 "$srcdir"/$pkgname.confd "$pkgdir"/etc/conf.d/$pkgname + # cleanup unused files + find "$pkgdir" -type f -a \( \ + -name "*.ts" \ + -o -name "webpack*" \ + -o -name "tsconfig*" \ + -o -name "babel.config*" \ + -o -name "README*" \ + -o -name "CHANGELOG*" \ + -o -name "*.map" \ + -o -name "LICENSE" \ + \) \ + -delete + + # Set home location + echo /var/lib/thelounge > \ + "$pkgdir"/usr/lib/node_modules/$pkgname/.thelounge_home + + # Add default config + # this is only read from 'home' so we have to just put everything in var/lib + install -dm755 -o thelounge -g thelounge \ + "$pkgdir"/var/lib/thelounge + install -m644 -o thelounge -g thelounge \ + "$pkgdir"/usr/lib/node_modules/$pkgname/dist/defaults/config.js \ + "$pkgdir"/var/lib/thelounge/config.js + + install -Dm755 "$srcdir"/$pkgname.initd \ + "$pkgdir"/etc/init.d/$pkgname } sha512sums=" -d1a873b15b5ac003c59257c591030ebeb8810609ea646477cc319ddb82fa2842b0b71f3edfe60eb5b54749ed90d55074d5b82ab6312b55cccee8281057b425f2 thelounge-4.4.3.tar.gz -126913f79c3eda7c0e6f2f792ce8a799e2100259b62de57c97329f079072e3d8d81c5591b08b99630803c9e320c85c8e34ac7ffe2ddba7f2982a5ba958960789 thelounge.initd -2c44963a1e4303a6045b80df0931bb636150cb7b1f14d536c3624bb6dacfabfa08d7ea4e261e40245b80eedbb53a47fbf73672a02c865295300c5121fb83a558 thelounge.confd +7695121a713a23688bc6f52dae2574bab1288eea930fd50d4dd85037233e9f23bd8e460980c69cdd14ea8648da4720d84e8196547b6a18e69d2f478b43d6e29a thelounge-4.4.1.tar.gz +cbf80e23b0af8f0185699d6b03816c645c51b85fff7f163d3cd3d00296ed816b6ab01529b359fbfd549a79e8adb72bbc83bc7a389cf13e0afd50636ff79a138e no-version-test.patch +f367d27ebcc412ff03c12ae98e50aeae5051fb5ffa9da6220f664c59993ed0e330b55b3b41fe941d546634901163d006e318891b4b886f6c49a93e0888fccd3e thelounge.initd +212e468d6cedaa528b7fad534b8ba0e7a3d69137940cdabd22dbe34375491900d5b7d577550aa3b245ad7775488a90e308019db55ff15e8ede105c4b9c15b015 allow-https-for-connect-src.patch " diff --git a/backports/thelounge/allow-https-for-connect-src.patch b/backports/thelounge/allow-https-for-connect-src.patch new file mode 100644 index 0000000..a147a91 --- /dev/null +++ b/backports/thelounge/allow-https-for-connect-src.patch @@ -0,0 +1,13 @@ +diff --git a/server/server.ts b/server/server.ts.orig +index 7a1514e..5ecdea9 100644 +--- a/server/server.ts ++++ b/server/server.ts.orig +@@ -377,7 +377,7 @@ function addSecurityHeaders(req: Request, res: Response, next: NextFunction) { + "default-src 'none'", // default to nothing + "base-uri 'none'", // disallow , has no fallback to default-src + "form-action 'self'", // 'self' to fix saving passwords in Firefox, even though login is handled in javascript +- "connect-src 'self' ws: wss:", // allow self for polling; websockets ++ "connect-src 'self' ws: wss: https:", // allow self for polling; websockets + "style-src 'self' https: 'unsafe-inline'", // allow inline due to use in irc hex colors + "script-src 'self'", // javascript + "worker-src 'self'", // service worker diff --git a/backports/thelounge/no-version-test.patch b/backports/thelounge/no-version-test.patch new file mode 100644 index 0000000..dfae092 --- /dev/null +++ b/backports/thelounge/no-version-test.patch @@ -0,0 +1,19 @@ +diff --git a/test/src/helperTest.ts b/test/src/helperTest.ts +index 2a8ddc8..22f0532 100644 +--- a/test/src/helperTest.ts ++++ b/test/src/helperTest.ts +@@ -40,14 +40,6 @@ describe("Helper", function () { + describe("#getVersion()", function () { + const version = Helper.getVersion(); + +- it("should mention it is served from source code", function () { +- expect(version).to.include("source"); +- }); +- +- it("should include a short Git SHA", function () { +- expect(version).to.match(/\([0-9a-f]{7,11} /); +- }); +- + it("should include a valid semver version", function () { + expect(version).to.match(/v[0-9]+\.[0-9]+\.[0-9]+/); + }); diff --git a/backports/thelounge/thelounge.confd b/backports/thelounge/thelounge.confd deleted file mode 100644 index a7e59bd..0000000 --- a/backports/thelounge/thelounge.confd +++ /dev/null @@ -1,9 +0,0 @@ -# thelounge configuration options - -command_user="thelounge:thelounge" # user:group -supervisor="supervise-daemon" -directory="/var/lib/thelounge" - -logdir="/var/log/thelounge" -output_log="$logdir/output.log" -error_log="$logdir/error.log" diff --git a/backports/thelounge/thelounge.initd b/backports/thelounge/thelounge.initd index fc00ef8..b10d1c5 100644 --- a/backports/thelounge/thelounge.initd +++ b/backports/thelounge/thelounge.initd @@ -1,34 +1,14 @@ #!/sbin/openrc-run -# fallback values for /etc/conf.d/thelounge -: ${command_user:=thelounge:thelounge} -: ${directory:=/var/lib/thelounge} -: ${logdir:=/var/log/thelounge} - +supervisor=supervise-daemon name="thelounge" command="/usr/bin/thelounge" command_args="start" +command_user="thelounge:thelounge" command_background=true pidfile="/run/thelounge.pid" depend() { - need net - use dns + need net localmount after firewall } - -start_pre() { - checkpath -d -o "$command_user" "$directory" - - if [ -n "$logdir" ]; then - checkpath -d -o "$command_user" "$logdir" - fi - - if [ -n "$output_log" ]; then - checkpath -f -o "$command_user" "$output_log" - fi - - if [ -n "$error_log" ]; then - checkpath -f -o "$command_user" "$error_log" - fi -} diff --git a/backports/thelounge/thelounge.post-install b/backports/thelounge/thelounge.post-install index b08cddb..1651780 100644 --- a/backports/thelounge/thelounge.post-install +++ b/backports/thelounge/thelounge.post-install @@ -2,8 +2,11 @@ cat >&2 <<-EOF * -* The configuration will be placed at /var/lib/thelounge/config.js after first run -* To add users, use the cli: doas -u thelounge thelounge add myuser +* The configuration is in /var/lib/thelounge/config.js. +* To add users, use the cli: +* doas -u thelounge thelounge .. +* e.g. +* doas -u thelounge thelounge add myuser * EOF diff --git a/backports/thelounge/thelounge.pre-install b/backports/thelounge/thelounge.pre-install index dd54b45..b91b1ef 100644 --- a/backports/thelounge/thelounge.pre-install +++ b/backports/thelounge/thelounge.pre-install @@ -1,6 +1,6 @@ #!/bin/sh addgroup -S thelounge 2>/dev/null -adduser -S -D -h /var/lib/thelounge -s /sbin/nologin -G thelounge -g thelounge thelounge 2>/dev/null +adduser -S -D -H -s /sbin/nologin -G thelounge -g thelounge thelounge 2>/dev/null exit 0 diff --git a/backports/uranium/874_fix-simplebutton-use-of-um-colorimage.patch b/backports/uranium/874_fix-simplebutton-use-of-um-colorimage.patch new file mode 100644 index 0000000..3112c9c --- /dev/null +++ b/backports/uranium/874_fix-simplebutton-use-of-um-colorimage.patch @@ -0,0 +1,34 @@ +From 88fd460a63263d66173f1e0127b0f208577d7f4e Mon Sep 17 00:00:00 2001 +Patch-Source: https://github.com/Ultimaker/Uranium/pull/874 +From: fieldOfView +Date: Sat, 20 May 2023 21:14:36 +0200 +Subject: [PATCH] Fix SimpleButton use of UM.ColorImage + +Fixes https://github.com/Ultimaker/Cura/issues/15524 +--- + UM/Qt/qml/UM/SimpleButton.qml | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/UM/Qt/qml/UM/SimpleButton.qml b/UM/Qt/qml/UM/SimpleButton.qml +index d3d398753c..d3bd0e8e14 100644 +--- a/UM/Qt/qml/UM/SimpleButton.qml ++++ b/UM/Qt/qml/UM/SimpleButton.qml +@@ -1,7 +1,8 @@ +-// Copyright (c) 2018 Ultimaker B.V. ++// Copyright (c) 2023 Ultimaker B.V. + // Uranium is released under the terms of the LGPLv3 or higher. + + import QtQuick 2.1 ++import UM 1.5 as UM + + MouseArea + { +@@ -27,7 +28,7 @@ MouseArea + radius: 0 + } + +- ColorImage ++ UM.ColorImage + { + id: image + diff --git a/backports/uranium/APKBUILD b/backports/uranium/APKBUILD new file mode 100644 index 0000000..a26eae0 --- /dev/null +++ b/backports/uranium/APKBUILD @@ -0,0 +1,61 @@ +# Contributor: Anjandev Momi +# Maintainer: Anjandev Momi +pkgname=uranium +pkgver=5.2.2 +pkgrel=4 +pkgdesc="A Python framework for building Desktop applications" +url="https://github.com/Ultimaker/Uranium" +arch="noarch !armhf !riscv64" # armhf: no py3-qt5, rv64: no py3-shapely +license="LGPL-3.0-or-later" +depends=" + py3-cryptography + py3-numpy + py3-qt6 + py3-scipy + python3 + " +# add cura-binary-data to makedepends when packaged +makedepends="samurai cmake doxygen gettext-dev graphviz" +checkdepends="py3-pytest py3-pytest-benchmark py3-twisted" +options="!check" # checks broken from 5.x onward +source="$pkgname-$pkgver.tar.gz::https://github.com/Ultimaker/Uranium/archive/refs/tags/$pkgver.tar.gz + cmake.patch + 874_fix-simplebutton-use-of-um-colorimage.patch + fix-logger-used-but-not-imported.patch + qt-try-ints-then-bytes.patch + cmake-helpers.patch" +builddir="$srcdir/Uranium-$pkgver" + +build() { + if [ "$CBUILD" != "$CHOST" ]; then + CMAKE_CROSSOPTS="-DCMAKE_SYSTEM_NAME=Linux -DCMAKE_HOST_SYSTEM_NAME=Linux" + fi + cmake -B build -G Ninja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DCMAKE_BUILD_TYPE=MinSizeRel \ + -DGETTEXT_MSGINIT_EXECUTABLE=msginit \ + -DCURA_BINARY_DATA_DIRECTORY=/usr/share/cura \ + $CMAKE_CROSSOPTS + cmake --build build +} + +check() { + # useless code style test with another dependency + ctest -j $JOBS --output-on-failure -T Test +} + +package() { + DESTDIR="$pkgdir" cmake --install build + mkdir "$pkgdir"/usr/share/uranium/cmake + mv "$pkgdir"/usr/share/cmake-*/Modules/* "$pkgdir"/usr/share/uranium/cmake/ +} + +sha512sums=" +a9c222400022e05b5c42c72843b024204a58f5d233805bdffa610a2d9cbd1873773868b049aabbe52c6e859f235ca5428fcdfdbb86651f428483999060611e10 uranium-5.2.2.tar.gz +196a04164de288f5bffeebb73ace9390059dcffebaf40395368f413d1af2e2c668d85dd4c761ad226732540d41598235c2c368152cc157d2e89445ce27738c9b cmake.patch +c50b37a3a44c4d4f66d115e72a430b82a8125efa49ce51271d5cad7fac15b2941a6a82b71fd07cef751b159296b64d783b348cebe7dfd865f0121815d2cf41f4 874_fix-simplebutton-use-of-um-colorimage.patch +78e1415133bc4135f93633375bdb71a9e04b9cd128067d223985d0878f0e3de3ed1d336117fc527f0804b99878bd56817e3eb7a5aa545cc877b9f43386e17e78 fix-logger-used-but-not-imported.patch +26489638fcf80822d16b0a295aee21a8973c23a023b1daf7f2cf5f7be7c56e72a15edd87ac6993f8a2ad09086d7d1a8b7d32247522c9429183625e3a0b63f2ae qt-try-ints-then-bytes.patch +aa185ce3592036f045e3386266015cc08443c2e4f9b9a4c03c77c13525af98d68eaa3360e8858e0561417a826c73bf8a2b209bcad91d2cc16cce32fb0231fcf8 cmake-helpers.patch +" diff --git a/backports/uranium/cmake-helpers.patch b/backports/uranium/cmake-helpers.patch new file mode 100644 index 0000000..3c5d1f3 --- /dev/null +++ b/backports/uranium/cmake-helpers.patch @@ -0,0 +1,89 @@ +--- /dev/null ++++ ./cmake/UraniumPluginInstall.cmake +@@ -0,0 +1,86 @@ ++# Copyright (c) 2022 Ultimaker B.V. ++# UraniumPluginInstall.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 "UM_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. ++# ++ ++# Options or configuration variables ++set(UM_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 ${UM_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) ++ message(STATUS "[+] PLUGIN TO INSTALL: ${_rel_plugin_dir}") ++ get_filename_component(_rel_plugin_parent_dir ${_rel_plugin_dir} DIRECTORY) ++ install(DIRECTORY ${_rel_plugin_dir} ++ DESTINATION lib${LIB_SUFFIX}/uranium/${_rel_plugin_parent_dir} ++ PATTERN "__pycache__" EXCLUDE ++ PATTERN "*.qmlc" EXCLUDE ++ ) ++ list(APPEND _install_plugin_list ${_plugin_dir}) ++ elseif(_is_no_install_plugin) ++ message(STATUS "[-] PLUGIN TO REMOVE : ${_rel_plugin_dir}") ++ 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() diff --git a/backports/uranium/cmake.patch b/backports/uranium/cmake.patch new file mode 100644 index 0000000..b1a888b --- /dev/null +++ b/backports/uranium/cmake.patch @@ -0,0 +1,16 @@ +--- ./CMakeLists.txt.orig ++++ ./CMakeLists.txt +@@ -19,9 +19,12 @@ + # Build Translations + CREATE_TRANSLATION_TARGETS() + ++find_package(Python REQUIRED COMPONENTS Interpreter) + +-install(DIRECTORY UM DESTINATION "${Python_SITELIB_LOCAL}") ++install(DIRECTORY UM DESTINATION "${Python_SITELIB}") + + install(FILES ${CMAKE_SOURCE_DIR}/cmake/UraniumTranslationTools.cmake + DESTINATION ${CMAKE_INSTALL_DATADIR}/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/ ) + install(DIRECTORY resources DESTINATION ${CMAKE_INSTALL_DATADIR}/uranium) ++ ++include(UraniumPluginInstall) diff --git a/backports/uranium/fix-logger-used-but-not-imported.patch b/backports/uranium/fix-logger-used-but-not-imported.patch new file mode 100644 index 0000000..151893c --- /dev/null +++ b/backports/uranium/fix-logger-used-but-not-imported.patch @@ -0,0 +1,14 @@ +Patch-Source: https://src.fedoraproject.org/rpms/python-uranium/blob/rawhide/f/Uranium-5.3.0-qt-try-ints-then-bytes-for-gl-mask-functions.patch + +diff --git a/UM/View/SelectionPass.py.orig b/UM/View/SelectionPass.py +index 945b789..ef042a5 100644 +--- a/UM/View/SelectionPass.py.orig ++++ b/UM/View/SelectionPass.py +@@ -5,6 +5,7 @@ import enum + import random + from typing import TYPE_CHECKING + ++from UM.Logger import Logger + from UM.Resources import Resources + from UM.Application import Application + diff --git a/backports/uranium/qt-try-ints-then-bytes.patch b/backports/uranium/qt-try-ints-then-bytes.patch new file mode 100644 index 0000000..8f7d6db --- /dev/null +++ b/backports/uranium/qt-try-ints-then-bytes.patch @@ -0,0 +1,96 @@ +Patch-Source: https://src.fedoraproject.org/rpms/python-uranium/blob/rawhide/f/Uranium-5.3.0-qt-try-ints-then-bytes-for-gl-mask-functions.patch + +diff --git a/UM/View/RenderBatch.py.orig b/UM/View/RenderBatch.py +index 6deeeb1..5f1eda5 100644 +--- a/UM/View/RenderBatch.py.orig ++++ b/UM/View/RenderBatch.py +@@ -186,10 +186,24 @@ class RenderBatch: + + if self._render_type == self.RenderType.Solid: + self._gl.glEnable(self._gl.GL_DEPTH_TEST) +- self._gl.glDepthMask(self._gl.GL_TRUE) ++ try: ++ self._gl.glDepthMask(self._gl.GL_TRUE) ++ except: ++ Logger.log("w", "glDepthMask does not like ints, trying bytes...") ++ try: ++ self._gl.glDepthMask(b'1') ++ except: ++ Logger.log("e", "glDepthMask does not like ints or bytes, no idea what it wants") + elif self._render_type == self.RenderType.Transparent: + self._gl.glEnable(self._gl.GL_DEPTH_TEST) +- self._gl.glDepthMask(self._gl.GL_FALSE) ++ try: ++ self._gl.glDepthMask(self._gl.GL_FALSE) ++ except: ++ Logger.log("w", "glDepthMask does not like ints, trying bytes...") ++ try: ++ self._gl.glDepthMask(b'1') ++ except: ++ Logger.log("e", "glDepthMask does not like ints or bytes, no idea what it wants") + elif self._render_type == self.RenderType.Overlay: + self._gl.glDisable(self._gl.GL_DEPTH_TEST) + +diff --git a/UM/View/RenderPass.py.orig b/UM/View/RenderPass.py +index 8068ddf..8cb4f67 100644 +--- a/UM/View/RenderPass.py.orig ++++ b/UM/View/RenderPass.py +@@ -93,8 +93,22 @@ class RenderPass: + self._fbo.bind() + + # Ensure we can actually write to the relevant FBO components. +- self._gl.glColorMask(self._gl.GL_TRUE, self._gl.GL_TRUE,self._gl.GL_TRUE, self._gl.GL_TRUE) +- self._gl.glDepthMask(self._gl.GL_TRUE) ++ try: ++ self._gl.glColorMask(self._gl.GL_TRUE, self._gl.GL_TRUE,self._gl.GL_TRUE, self._gl.GL_TRUE) ++ except: ++ Logger.log("w", "glColorMask does not like ints, trying bytes...") ++ try: ++ self._gl.glColorMask(b'1', b'1',b'1', b'1') ++ except: ++ Logger.log("e", "glColorMask does not like ints or bytes, no idea what it wants") ++ try: ++ self._gl.glDepthMask(self._gl.GL_TRUE) ++ except: ++ Logger.log("w", "glDepthMask does not like ints, trying bytes...") ++ try: ++ self._gl.glDepthMask(b'1') ++ except: ++ Logger.log("e", "glDepthMask does not like ints or bytes, no idea what it wants") + + self._gl.glClear(self._gl.GL_COLOR_BUFFER_BIT | self._gl.GL_DEPTH_BUFFER_BIT) + +diff --git a/UM/View/SelectionPass.py.orig b/UM/View/SelectionPass.py +index ef042a5..c28fe4f 100644 +--- a/UM/View/SelectionPass.py.orig ++++ b/UM/View/SelectionPass.py +@@ -110,13 +110,27 @@ class SelectionPass(RenderPass): + if selectable_objects: + batch.render(self._scene.getActiveCamera()) + +- self._gl.glColorMask(self._gl.GL_TRUE, self._gl.GL_TRUE, self._gl.GL_TRUE, self._gl.GL_FALSE) ++ try: ++ self._gl.glColorMask(self._gl.GL_TRUE, self._gl.GL_TRUE, self._gl.GL_TRUE, self._gl.GL_FALSE) ++ except: ++ Logger.log("w", "glColorMask does not like ints, trying bytes...") ++ try: ++ self._gl.glColorMask(b'1', b'1', b'1', b'0') ++ except: ++ Logger.log("e", "glColorMask does not like ints or bytes, no idea what it wants") + self._gl.glDisable(self._gl.GL_DEPTH_TEST) + + tool_handle.render(self._scene.getActiveCamera()) + + self._gl.glEnable(self._gl.GL_DEPTH_TEST) +- self._gl.glColorMask(self._gl.GL_TRUE, self._gl.GL_TRUE, self._gl.GL_TRUE, self._gl.GL_TRUE) ++ try: ++ self._gl.glColorMask(self._gl.GL_TRUE, self._gl.GL_TRUE, self._gl.GL_TRUE, self._gl.GL_TRUE) ++ except: ++ Logger.log("w", "glColorMask does not like ints, trying bytes...") ++ try: ++ self._gl.glColorMask(b'1', b'1', b'1', b'1') ++ except: ++ Logger.log("e", "glColorMask does not like ints or bytes, no idea what it wants") + + self.release() + diff --git a/backports/yarn-berry/APKBUILD b/backports/yarn-berry/APKBUILD deleted file mode 100644 index 715d16c..0000000 --- a/backports/yarn-berry/APKBUILD +++ /dev/null @@ -1,33 +0,0 @@ -maintainer="Fabricio Silva " -pkgname=yarn-berry -pkgver=4.9.1 -pkgrel=0 -pkgdesc="Fast, reliable, and secure dependency management for Node.js - Active development version" -url="https://yarnpkg.com/" -license="BSD-2-Clause" -arch="noarch" -depends="!yarn nodejs" # not backward compatible with yarn classic (v1) -source="$pkgname-$pkgver.tgz::https://registry.npmjs.org/@yarnpkg/cli-dist/-/cli-dist-$pkgver.tgz" -builddir="$srcdir/package" -replaces="yarn" - -check() { - ./bin/yarn.js --version - ./bin/yarn.js --help -} - -package() { - local destdir="usr/share/node_modules/@yarnpkg/cli-dist" - - mkdir -p "$pkgdir"/$destdir/bin - install -Dm0644 package.json -t "$pkgdir"/$destdir - install -Dm0755 bin/yarn.js -t "$pkgdir"/$destdir/bin - - mkdir -p "$pkgdir"/usr/bin - ln -s ../share/node_modules/@yarnpkg/cli-dist/bin/yarn.js "$pkgdir"/usr/bin/yarn - ln -s yarn "$pkgdir"/usr/bin/yarnpkg -} - -sha512sums=" -cae0bcb10349af010b472ef7fa1023c33c0afd60a54dc29d18797e6bb771bd6c0d3d06aefa801c56363bcc6ecf6133988d1f943543293e7335ede60618fb28e8 yarn-berry-4.9.1.tgz -" diff --git a/unmaintained/craftbukkit-plugin-essentialsx/APKBUILD b/unmaintained/craftbukkit-plugin-essentialsx/APKBUILD new file mode 100644 index 0000000..9848a42 --- /dev/null +++ b/unmaintained/craftbukkit-plugin-essentialsx/APKBUILD @@ -0,0 +1,108 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +pkgname=craftbukkit-plugin-essentialx +_pkgver=2.19.2 +_buildver=release +_buildcommit=0 +pkgrel=2 +pkgdesc="EssentialsX is the essential plugin suite for Minecraft servers, with over 130 commands for servers of all size and scale." +options=!check +arch='noarch' +url="https://essentialsx.net/" +license="GPL-3.0" +depends="craftbukkit>=1.8.8 craftbukkit<=1.18.1" + +if _buildver=release; then + pkgver=$_pkgver + _url=https://github.com/EssentialsX/Essentials/releases/download/$pkgver + _filename="$pkgver.jar" +else + pkgver=$_pkgver.$_buildver + _url=https://ci.ender.zone/job/EssentialsX/lastSuccessfulBuild/artifact/jars + _filename="$_pkgver-dev+$_buildver-$_buildcommit.jar" +fi + +source=" + $_url/EssentialsX-$_filename + $_url/EssentialsXChat-$_filename + $_url/EssentialsXSpawn-$_filename + $_url/EssentialsXAntiBuild-$_filename + $_url/EssentialsXDiscord-$_filename + $_url/EssentialsXGeoIP-$_filename + $_url/EssentialsXProtect-$_filename + $_url/EssentialsXXMPP-$_filename +" + +subpackages="$pkgname-core $pkgname-chat $pkgname-spawn $pkgname-antibuild $pkgname-discord $pkgname-geo $pkgname-protect $pkgname-xmpp" + + +package() { + mkdir -p "$pkgdir" +} + +core() { + pkgdesc="Core functionality: teleports, private messages, homes, warps and more" + install -Dm644 "$srcdir"/EssentialsX-*.jar "$subpkgdir/var/lib/craftbukkit/plugins/Essentials.jar" + chown craftbukkit:craftbukkit "$subpkgdir"/var/lib/craftbukkit/plugins/Essentials.jar +} + +chat() { + pkgdesc="Chat formatting, local chat" + depends="$pkgname-core" + install -Dm644 "$srcdir"/EssentialsXChat-*.jar "$subpkgdir/var/lib/craftbukkit/plugins/EssentialsChat.jar" + chown craftbukkit:craftbukkit "$subpkgdir"/var/lib/craftbukkit/plugins/EssentialsChat.jar +} + +spawn() { + pkgdesc="Spawnpoint control, per-player spawns" + depends="$pkgname-core" + install -Dm644 "$srcdir"/EssentialsXSpawn-*.jar "$subpkgdir/var/lib/craftbukkit/plugins/EssentialsSpawn.jar" + chown craftbukkit:craftbukkit "$subpkgdir"/var/lib/craftbukkit/plugins/EssentialsSpawn.jar +} + +antibuild() { + pkgdesc="Simple permissions-based building control" + depends="$pkgname-core" + install -Dm644 "$srcdir"/EssentialsXAntiBuild-*.jar "$subpkgdir/var/lib/craftbukkit/plugins/EssentialsAntiBuild.jar" + chown craftbukkit:craftbukkit "$subpkgdir"/var/lib/craftbukkit/plugins/EssentialsAntiBuild.jar +} + +discord() { + pkgdesc="Lightweight chat, messaging and command integration with Discord" + depends="$pkgname-core" + install -Dm644 "$srcdir"/EssentialsXDiscord-*.jar "$subpkgdir/var/lib/craftbukkit/plugins/EssentialsDiscord.jar" + chown craftbukkit:craftbukkit "$subpkgdir"/var/lib/craftbukkit/plugins/EssentialsDiscord.jar +} + +geo() { + pkgdesc="Geographical player lookup (formerly EssentialsX GeoIP)" + depends="$pkgname-core" + install -Dm644 "$srcdir"/EssentialsXGeoIP-*.jar "$subpkgdir/var/lib/craftbukkit/plugins/EssentialsGeo.jar" + chown craftbukkit:craftbukkit "$subpkgdir"/var/lib/craftbukkit/plugins/EssentialsGeo.jar +} + +protect() { + pkgdesc="Configurable world protection and control" + depends="$pkgname-core" + install -Dm644 "$srcdir"/EssentialsXProtect-*.jar "$subpkgdir/var/lib/craftbukkit/plugins/EssentialsProtect.jar" + chown craftbukkit:craftbukkit "$subpkgdir"/var/lib/craftbukkit/plugins/EssentialsProtect.jar +} + +xmpp() { + pkgdesc="Lightweight chat, messaging and server log integration with Jabber/XMPP services" + depends="$pkgname-core" + install -Dm644 "$srcdir"/EssentialsXXMPP-*.jar "$subpkgdir/var/lib/craftbukkit/plugins/EssentialsXMPP.jar" + chown craftbukkit:craftbukkit "$subpkgdir"/var/lib/craftbukkit/plugins/EssentialsXMPP.jar +} + +sha512sums=" +c91c0905c11482d93b1565f8b9dce7b6f939567b4cb2756b112ee408bdcca1fece04742f9b7b0876d5b2e84cebdbc555d35cf783e9e86ab12fafb9dc02bc6008 EssentialsX-2.19.2.jar +e2df6f242db38689579501b34763ad7d4b5e8ddd87b7b57956c6b5cc667f1b34af6b1289d668a64761da63f8ae8507eb9687ca490cc715a3eff6338770963240 EssentialsXChat-2.19.2.jar +24e41168428f20bd6506282b9920718c43f7e5227bf35e174522e49859e294048a1d979ae42044bdbdba45c8a1109f4db6ffd0e24d5f3e909d0f9a3ac31e21d3 EssentialsXSpawn-2.19.2.jar +326ec004241b526965cb67ae0f0245dfa960da2fdb4b59d867eb08e5196fceb468f9314cb838c8a0bc513cc55f43cf58023d11b18ed98e472be7089838538f97 EssentialsXAntiBuild-2.19.2.jar +211c575adde17c3f2f901144e5c31beb2918df7e6e15f8ebe16805d3b53214a4756b87ec84466790ebf1dacb41e1aea97b6a9ba8ed39e85092293a821044d579 EssentialsXDiscord-2.19.2.jar +7845e7666f983d3e793528a7085ced7c9f1bf881740bcc68b6a54fea74e31c3c0c2a52e26fc20330ba7d4a190dad0a1b27195fed0e1417a48494c5fa2ac60d92 EssentialsXGeoIP-2.19.2.jar +e74ed72a15b5e6cd3c5f61d032a26c151865e3197638c9059237dc2d1144b0cb15668545532fc532ac8ec247bdf9b9ee6843b8f4af7506aef86d155dd5672c5f EssentialsXProtect-2.19.2.jar +8d35009499557700f49c27ca3132e866f511a200791dbcfd2f595396977058cc2fc9349d0b4eaa0eb67b27331e91e6209df6ed57a766c06fd3b3325718462478 EssentialsXXMPP-2.19.2.jar +" diff --git a/unmaintained/craftbukkit-plugin-luckperms/APKBUILD b/unmaintained/craftbukkit-plugin-luckperms/APKBUILD new file mode 100644 index 0000000..1ef75e9 --- /dev/null +++ b/unmaintained/craftbukkit-plugin-luckperms/APKBUILD @@ -0,0 +1,23 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +pkgname=craftbukkit-plugin-luckperms +_pkgver=5.3.89 +_buildver=1389 +pkgver=$_pkgver.$_buildver +pkgrel=1 +pkgdesc="An advanced permissions plugin for Bukkit/Spigot, BungeeCord and Sponge." +options=!check +arch='noarch' +url="https://github.com/lucko/LuckPerms" +license="MIT" +depends="craftbukkit>=1.8.8 craftbukkit<=1.18.1" +source="https://ci.lucko.me/job/LuckPerms/$_buildver/artifact/bukkit/loader/build/libs/LuckPerms-Bukkit-$_pkgver.jar" + +package() { + install -Dm644 "$srcdir"/LuckPerms-Bukkit-$_pkgver.jar "$pkgdir/var/lib/craftbukkit/plugins/LuckPerms.jar" + chown craftbukkit:craftbukkit "$pkgdir"/var/lib/craftbukkit/plugins/LuckPerms.jar +} +sha512sums=" +7e146616cdf7f667c483bbe2112439c85f32427e9aa3714f0b0e869abf0cde6aacc7341d8d9e6a72ddcf8f35af840f4ba678c4690222912113f497cafce11154 LuckPerms-Bukkit-5.3.89.jar +" diff --git a/unmaintained/craftbukkit-plugin-worldedit/APKBUILD b/unmaintained/craftbukkit-plugin-worldedit/APKBUILD new file mode 100644 index 0000000..6ee40e2 --- /dev/null +++ b/unmaintained/craftbukkit-plugin-worldedit/APKBUILD @@ -0,0 +1,22 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +pkgname=craftbukkit-plugin-worldedit +pkgver=7.2.8 +_pkgver=$pkgver +pkgrel=1 +pkgdesc="WorldEdit is an easy-to-use in-game Minecraft map editor" +options=!check +arch='noarch' +url="https://dev.bukkit.org/projects/worldedit" +license="GPL-3.0" +depends="craftbukkit>=1.13.2 craftbukkit<=1.18.1" +source="https://media.forgecdn.net/files/3559/523/worldedit-bukkit-7.2.8.jar" + +package() { + install -Dm644 "$srcdir"/worldedit-bukkit-$_pkgver.jar "$pkgdir/var/lib/craftbukkit/plugins/WorldEdit.jar" + chown craftbukkit:craftbukkit $pkgdir/var/lib/craftbukkit/plugins/WorldEdit.jar +} +sha512sums=" +b57eacf7a2d90461f996f71cf55aa2e328d7b75c724291f11bcd1ab0f7e64e980db7ae3a2a56fffdf2bc31bfbcf68dda89b7c6f2ffa32ee430b8016020d796e3 worldedit-bukkit-7.2.8.jar +" diff --git a/unmaintained/craftbukkit-plugin-worldguard/APKBUILD b/unmaintained/craftbukkit-plugin-worldguard/APKBUILD new file mode 100644 index 0000000..478480b --- /dev/null +++ b/unmaintained/craftbukkit-plugin-worldguard/APKBUILD @@ -0,0 +1,22 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +pkgname=craftbukkit-plugin-worldedit +pkgver=7.0.6 +_pkgver=$pkgver +pkgrel=3 +pkgdesc="WorldGuard lets you and players guard areas of land against griefers and undesirables" +options=!check +arch='noarch' +url="https://dev.bukkit.org/projects/worldguard" +license="GPL-3.0" +depends="craftbukkit>=1.17.0 craftbukkit<=1.18.1" +source="https://media.forgecdn.net/files/3461/546/worldguard-bukkit-7.0.6-dist.jar" + +package() { + install -Dm644 "$srcdir"/worldguard-bukkit-$_pkgver-dist.jar "$pkgdir/var/lib/craftbukkit/plugins/WorldGuard.jar" + chown craftbukkit:craftbukkit $pkgdir/var/lib/craftbukkit/plugins/WorldGuard.jar +} +sha512sums=" +f2f857ffbbe7896b8986d5944564d7ab01e51d86476e05c66067a57d83dcb2ee60019ab9d75b16d551e9cfe102d29a602de41f316da57d7743d2595d6a11d839 worldguard-bukkit-7.0.6-dist.jar +" diff --git a/unmaintained/firefly-iii-plaid-connector/APKBUILD b/unmaintained/firefly-iii-plaid-connector/APKBUILD index 13a222e..66c3fea 100644 --- a/unmaintained/firefly-iii-plaid-connector/APKBUILD +++ b/unmaintained/firefly-iii-plaid-connector/APKBUILD @@ -1,29 +1,32 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin pkgname=firefly-iii-plaid-connector pkgver=0.3.1 -pkgrel=7 -pkgdesc="The Free Software Media System" -#arch="x86_64" -url="https://gitlab.com/GeorgeHahn/firefly-plaid-connector" -license="MIT" -options="!check" -depends="firefly-iii dotnet6-runtime" -makedepends="dotnet6-sdk" -source="firefly-plaid-connector-$pkgver.tar.gz::https://gitlab.com/GeorgeHahn/firefly-plaid-connector/-/archive/v$pkgver/firefly-plaid-connector-v$pkgver.tar.gz net6-support.patch" -builddir="$srcdir/firefly-plaid-connector-v$pkgver" +pkgrel=5 +pkgdesc='The Free Software Media System' +arch='i686 x86_64' +url='https://gitlab.com/GeorgeHahn/firefly-plaid-connector' +license='MIT' +options="!strip !check" +#depends='firefly-iii dotnet31-runtime' +makedepends='dotnet31-sdk' +source="firefly-plaid-connector-$pkgver.tar.gz::https://gitlab.com/GeorgeHahn/firefly-plaid-connector/-/archive/v${pkgver}/firefly-plaid-connector-v${pkgver}.tar.gz" +builddir="${srcdir}/firefly-plaid-connector-v${pkgver}" -build() { - dotnet publish --configuration Release --output ./publish --use-current-runtime --no-self-contained +build(){ + cd "${builddir}" + + # Disable dotnet telemetry + export DOTNET_CLI_TELEMETRY_OPTOUT=1 + + # publish app and libraries + dotnet publish --configuration Release --output "$PWD"/publish } package() { - mkdir -p "$pkgdir"/usr/lib - cp -r "$builddir"/publish "$pkgdir"/usr/lib/firefly-plaid-connector -} + mkdir -p "${pkgdir}"/var/lib + cp -r "${builddir}"/publish "$pkgdir"/var/lib/firefly-plaid-connector + +} +sha512sums="57a64673bf2e8cae00cb215e1dc90eb02bddf50010835a9318f55f83313c00f19d6c8d8af65e2739b0fb6fd4522a2327941bdc7d11cbe59c9537ff6c1575765e firefly-plaid-connector-0.3.1.tar.gz" -sha512sums=" -57a64673bf2e8cae00cb215e1dc90eb02bddf50010835a9318f55f83313c00f19d6c8d8af65e2739b0fb6fd4522a2327941bdc7d11cbe59c9537ff6c1575765e firefly-plaid-connector-0.3.1.tar.gz -f795fe58659763082e3f2bba0e6e2a70c4732bc6b402a4e586104bf09525ffca1d3586acda43ccba3b71d15e1a0a62794574f72a2fc6cd3d1905dcb2e8782dc2 net6-support.patch -" diff --git a/unmaintained/mathjax2/APKBUILD b/unmaintained/mathjax2/APKBUILD index ceb2b15..3075ca1 100644 --- a/unmaintained/mathjax2/APKBUILD +++ b/unmaintained/mathjax2/APKBUILD @@ -1,38 +1,35 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) +# $Id: PKGBUILD 362427 2018-07-19 17:42:59Z arojas $ +# Maintainer: Antonio Rojas +# Contributor: Kevin Dodd +# Contributor: Tianjiao Yin pkgname=mathjax2 pkgver=2.7.9 -pkgrel=1 -pkgdesc="An open source JavaScript display engine for mathematics that works in all modern browsers" -url="https://www.mathjax.org/" +pkgrel=0 +pkgdesc='An open source JavaScript display engine for mathematics that works in all modern browsers' +url='https://www.mathjax.org/' arch=noarch -license="Apache-2.0" +license=Apache source="$pkgname-$pkgver.tar.gz::https://github.com/mathjax/MathJax/archive/$pkgver.tar.gz" -builddir="$srcdir"/MathJax-$pkgver -options="!check" # No testsuite +options=!check -build() { - # Remove unneeded stuff, see https://github.com/mathjax/MathJax-docs/wiki/Guide%3A-reducing-size-of-a-mathjax-installation - for i in docs test unpacked fonts/HTML-CSS/TeX/png; do - rm -r $i - done - for _format in eot otf svg ; do - find . -type d -name "$_format" -prune -exec rm -rf {} \; - done +prepare() { + cd $srcdir/MathJax-$pkgver + +# Remove unneeded stuff, see https://github.com/mathjax/MathJax-docs/wiki/Guide%3A-reducing-size-of-a-mathjax-installation + rm -r docs test unpacked + rm -r fonts/HTML-CSS/TeX/png + for _format in eot otf svg ; do + find . -type d -name "$_format" -prune -exec rm -rf {} \; + done } package() { - mkdir -p \ - "$pkgdir"/usr/share/fonts \ - "$pkgdir"/usr/share/licenses/mathjax2 - - cp -a "$builddir" "$pkgdir"/usr/share/mathjax2 - - mv "$pkgdir"/usr/share/mathjax2/fonts "$pkgdir"/usr/share/fonts/mathjax2 - ln -s /usr/share/fonts/mathjax2 "$pkgdir"/usr/share/mathjax2/fonts - mv "$pkgdir"/usr/share/mathjax2/LICENSE "$pkgdir"/usr/share/licenses/mathjax2/ + cd ${srcdir} + mkdir -p "$pkgdir"/usr/share/fonts "$pkgdir"/usr/share/licenses/mathjax2 + cp -a MathJax-$pkgver "$pkgdir"/usr/share/mathjax2 + mv "$pkgdir"/usr/share/mathjax2/fonts "$pkgdir"/usr/share/fonts/mathjax2 + ln -s /usr/share/fonts/mathjax2 "$pkgdir"/usr/share/mathjax2/fonts + mv "$pkgdir"/usr/share/mathjax2/LICENSE "$pkgdir"/usr/share/licenses/mathjax2/ } -sha512sums=" -ac7b2dfc6064148e941e5ee05361467514e5f28449dbb697ff1df556968ccb71f501c4021ade285cbbb995983513669c14d9c06886a7b83a5c75fa30504fa8ab mathjax2-2.7.9.tar.gz -" +sha512sums="ac7b2dfc6064148e941e5ee05361467514e5f28449dbb697ff1df556968ccb71f501c4021ade285cbbb995983513669c14d9c06886a7b83a5c75fa30504fa8ab mathjax2-2.7.9.tar.gz" diff --git a/unmaintained/papermc/APKBUILD b/unmaintained/papermc/APKBUILD new file mode 100644 index 0000000..e400914 --- /dev/null +++ b/unmaintained/papermc/APKBUILD @@ -0,0 +1,56 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +pkgname=papermc +_pkgver=1.18.1 +_build=99 +_license_commit=4a7962c +pkgver="$_pkgver.$_build" +pkgrel=1 +pkgdesc="Next generation of Minecraft server, compatible with Spigot plugins and offering uncompromising performance" +pkgusers="craftbukkit" +pkggroups="craftbukkit" +arch='noarch' +url="https://papermc.io/" +license='custom' +depends='openjdk17-jre-headless screen sudo bash gawk sed netcat-openbsd tar' +options="!check" +provides="craftbukkit=$_pkgver" +subpackages="$pkgname-openrc" +source="papermc.$pkgver.jar::https://papermc.io/api/v2/projects/paper/versions/$_pkgver/builds/$_build/downloads/paper-$_pkgver-$_build.jar + papermc.initd + papermc.conf + papermc.sh + LICENSE_$pkgver.md::https://raw.githubusercontent.com/PaperMC/Paper/$_license_commit/LICENSE.md +" + +_game="papermc" +_server_root="/var/lib/papermc" + +package() { + install -Dm644 "$srcdir"/$_game.conf "$pkgdir"/etc/conf.d/$_game + install -Dm755 "$srcdir"/$_game.sh "$pkgdir"/usr/bin/$_game + install -Dm755 "$srcdir"/$_game.initd "$pkgdir"/etc/init.d/$_game + install -Dm644 "$srcdir"/$_game.$pkgver.jar "$pkgdir"/$_server_root/$_game/$pkgver.jar + ln -s "$_game"/$pkgver.jar "$pkgdir"/$_server_root/$_game/server.jar + + # Link to craftbukkit plugins var + ln -s "/var/lib/craftbukkit/plugins" "$pkgdir"/$_server_root/plugins + + # Link the log files + mkdir -p "$pkgdir"/var/log/ + install -dm2755 "$pkgdir"/$_server_root/logs + ln -s "$_server_root"/logs "$pkgdir"/var/log/$_game + + # Give the group write permissions and set user or group ID on execution + chmod g+ws "$pkgdir"/$_server_root + + install -D "$srcdir"/LICENSE_$pkgver.md "$pkgdir"/usr/share/licenses/$pkgname/LICENSE +} +sha512sums=" +623d6423ee337671d546469e6bf1821005484192a1ae56d7b77f547f79102df50462e1d0144be13a0de9021c9d931bc974143b1e1526114627ba28688589d76a papermc.1.18.1.99.jar +c5d1bf85ceb74162aaaf2bcd2d06dc2e3dd2e37c39f0cee2be7c8dbff9970a6aff1e48a43e6d1e83e6a0ac610bd89f62b1279bf27b64afa88d9831a36aebbd3e papermc.initd +9b8e267428731ee9255f82a93f1e8674d7e917a0f154bd395cd2280a49aa248a4b8427520b08dbb4b3a74a5471dac0e439eedc8ab94bf2e53bb8d411d2d8a789 papermc.conf +943ba0d4c10173246bdc6497dcedd54da0788f966841c8d3381398711d79f8d5eb07a24ce28f519b6f24f59d99fa9e74bc6bb882059f343df4eeda5de3660ac7 papermc.sh +d4c645a58e1a17a0a1e42856a3cc43097711a05bf3d9f18c77c3bc9874417f223552859042ff00b7d3dda0003f49a9ee568540c2eb24e9f8fbb3c055f3b6e0a5 LICENSE_1.18.1.99.md +" diff --git a/unmaintained/papermc/APKBUILD.orig b/unmaintained/papermc/APKBUILD.orig new file mode 100644 index 0000000..fe78218 --- /dev/null +++ b/unmaintained/papermc/APKBUILD.orig @@ -0,0 +1,56 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +pkgname=papermc +_pkgver=1.18.1 +_build=99 +_license_commit=4a7962c +pkgver="$_pkgver.$_build" +pkgrel=1 +pkgdesc="Next generation of Minecraft server, compatible with Spigot plugins and offering uncompromising performance" +pkgusers="craftbukkit" +pkggroups="craftbukkit" +arch='noarch' +url="https://papermc.io/" +license='custom' +depends='openjdk17-jre-headless screen sudo bash gawk sed netcat-openbsd tar' +options="!check" +provides="craftbukkit=$_pkgver" +subpackages="$pkgname.openrc" +source="papermc.$pkgver.jar::https://papermc.io/api/v2/projects/paper/versions/$_pkgver/builds/$_build/downloads/paper-$_pkgver-$_build.jar + papermc.initd + papermc.conf + papermc.sh + LICENSE_$pkgver.md::https://raw.githubusercontent.com/PaperMC/Paper/$_license_commit/LICENSE.md +" + +_game="papermc" +_server_root="/var/lib/papermc" + +package() { + install -Dm644 $srcdir.$_game.conf "$pkgdir.etc/conf.d/$_game" + install -Dm755 $srcdir.$_game.sh "$pkgdir.usr/bin/$_game" + install -Dm755 $srcdir.$_game.initd "$pkgdir.etc/init.d/$_game" + install -Dm644 $srcdir.$_game.$pkgver.jar "$pkgdir.$_server_root.$_game.$pkgver.jar" + ln -s "$_game.$pkgver.jar" "$pkgdir._server_root.$_game.server.jar" + + # Link to craftbukkit plugins var + ln -s "/var/lib/craftbukkit/plugins" "$pkgdir.$_server_root.plugins" + + # Link the log files + mkdir -p "$pkgdir.var/log/" + install -dm2755 "$pkgdir.$_server_root.logs" + ln -s "$_server_root.logs" "$pkgdir.var/log/$_game" + + # Give the group write permissions and set user or group ID on execution + chmod g+ws "$pkgdir._server_root" + + install -D $srcdir../LICENSE_$pkgver.md "$pkgdir.usr/share/licenses/$pkgname.LICENSE" +} +sha512sums=" +623d6423ee337671d546469e6bf1821005484192a1ae56d7b77f547f79102df50462e1d0144be13a0de9021c9d931bc974143b1e1526114627ba28688589d76a papermc.1.18.1.99.jar +c5d1bf85ceb74162aaaf2bcd2d06dc2e3dd2e37c39f0cee2be7c8dbff9970a6aff1e48a43e6d1e83e6a0ac610bd89f62b1279bf27b64afa88d9831a36aebbd3e papermc.initd +9b8e267428731ee9255f82a93f1e8674d7e917a0f154bd395cd2280a49aa248a4b8427520b08dbb4b3a74a5471dac0e439eedc8ab94bf2e53bb8d411d2d8a789 papermc.conf +943ba0d4c10173246bdc6497dcedd54da0788f966841c8d3381398711d79f8d5eb07a24ce28f519b6f24f59d99fa9e74bc6bb882059f343df4eeda5de3660ac7 papermc.sh +d4c645a58e1a17a0a1e42856a3cc43097711a05bf3d9f18c77c3bc9874417f223552859042ff00b7d3dda0003f49a9ee568540c2eb24e9f8fbb3c055f3b6e0a5 LICENSE_1.18.1.99.md +" diff --git a/unmaintained/papermc/APKBUILD.rej b/unmaintained/papermc/APKBUILD.rej new file mode 100644 index 0000000..f8c4908 --- /dev/null +++ b/unmaintained/papermc/APKBUILD.rej @@ -0,0 +1,38 @@ +--- user/papermc/APKBUILD ++++ user/papermc/APKBUILD +@@ -28,24 +28,24 @@ _game="papermc" + _server_root="/var/lib/papermc" + + package() { +- install -Dm644 $srcdir.$_game.conf "$pkgdir.etc/conf.d/$_game" +- install -Dm755 $srcdir.$_game.sh "$pkgdir.usr/bin/$_game" +- install -Dm755 $srcdir.$_game.initd "$pkgdir.etc/init.d/$_game" +- install -Dm644 $srcdir.$_game.$pkgver.jar "$pkgdir.$_server_root.$_game.$pkgver.jar" +- ln -s "$_game.$pkgver.jar" "$pkgdir._server_root.$_game.server.jar" ++ install -Dm644 "$srcdir"/$_game.conf "$pkgdir"/etc/conf.d/$_game ++ install -Dm755 "$srcdir"/$_game.sh "$pkgdir"/usr/bin/$_game ++ install -Dm755 "$srcdir"/$_game.initd "$pkgdir"/etc/init.d/$_game ++ install -Dm644 "$srcdir"/$_game.$pkgver.jar "$pkgdir"/$_server_root/$_game/$pkgver.jar ++ ln -s "$_game"/$pkgver.jar "$pkgdir"/$_server_root/$_game/server.jar + + # Link to craftbukkit plugins var +- ln -s "/var/lib/craftbukkit/plugins" "$pkgdir.$_server_root.plugins" ++ ln -s "/var/lib/craftbukkit/plugins" "$pkgdir"/$_server_root/plugins + + # Link the log files +- mkdir -p "$pkgdir.var/log/" +- install -dm2755 "$pkgdir.$_server_root.logs" +- ln -s "$_server_root.logs" "$pkgdir.var/log/$_game" ++ mkdir -p "$pkgdir"/var/log/ ++ install -dm2755 "$pkgdir"/$_server_root/logs ++ ln -s "$_server_root"/logs "$pkgdir"/var/log/$_game + + # Give the group write permissions and set user or group ID on execution +- chmod g+ws "$pkgdir._server_root" ++ chmod g+ws "$pkgdir"/$_server_root + +- install -D $srcdir../LICENSE_$pkgver.md "$pkgdir.usr/share/licenses/$pkgname.LICENSE" ++ install -D "$srcdir"/LICENSE_$pkgver.md "$pkgdir"/usr/share/licenses/$pkgname/LICENSE + } + sha512sums=" + 623d6423ee337671d546469e6bf1821005484192a1ae56d7b77f547f79102df50462e1d0144be13a0de9021c9d931bc974143b1e1526114627ba28688589d76a papermc.1.18.1.99.jar diff --git a/user/papermc/papermc.conf b/unmaintained/papermc/papermc.conf similarity index 100% rename from user/papermc/papermc.conf rename to unmaintained/papermc/papermc.conf diff --git a/user/papermc/papermc.initd b/unmaintained/papermc/papermc.initd similarity index 100% rename from user/papermc/papermc.initd rename to unmaintained/papermc/papermc.initd diff --git a/user/papermc/papermc.post-install b/unmaintained/papermc/papermc.post-install similarity index 100% rename from user/papermc/papermc.post-install rename to unmaintained/papermc/papermc.post-install diff --git a/user/papermc/papermc.service b/unmaintained/papermc/papermc.service similarity index 100% rename from user/papermc/papermc.service rename to unmaintained/papermc/papermc.service diff --git a/user/papermc/papermc.sh b/unmaintained/papermc/papermc.sh similarity index 100% rename from user/papermc/papermc.sh rename to unmaintained/papermc/papermc.sh diff --git a/unmaintained/py3-html5-parser/APKBUILD b/unmaintained/py3-html5-parser/APKBUILD new file mode 100644 index 0000000..160a9ee --- /dev/null +++ b/unmaintained/py3-html5-parser/APKBUILD @@ -0,0 +1,33 @@ +# Maintainer: Antoine Martin + +_pkgname="html5-parser" +pkgname='py3-html5-parser' +pkgver=0.4.9 +pkgrel=0 +pkgdesc="Fast C based HTML 5 parsing for python" +arch='x86_64' +url="https://github.com/kovidgoyal/${_pkgname}" +license='Apache' +checkdepends='py3-beautifulsoup4' +makedepends='py3-chardet py3-lxml py3-setuptools libxml2-dev python3-dev' +source="${pkgname}-${pkgver}.tar.gz::${url}/archive/v${pkgver}.tar.gz" + +build() { + cd "${srcdir}"/${_pkgname}-${pkgver} + + python3 setup.py build +} + +check() { + cd "${srcdir}"/${_pkgname}-${pkgver} + + python3 setup.py test +} + +package() { + cd "${srcdir}"/${_pkgname}-${pkgver} + python3 setup.py install --root="${pkgdir}" --optimize=1 --skip-build +} + + +sha512sums="31d0499e690c1cfe86fcaabddf4a5842b504706f6d95268dfad4ce80a8b91df6ba779c27dd4fe877232f6664142ed04b9d2af0aff601aa1855f91d9720adf512 py3-html5-parser-0.4.9.tar.gz" diff --git a/unmaintained/airsonic/APKBUILD b/user/airsonic/APKBUILD similarity index 100% rename from unmaintained/airsonic/APKBUILD rename to user/airsonic/APKBUILD diff --git a/unmaintained/airsonic/airsonic.conf b/user/airsonic/airsonic.conf similarity index 100% rename from unmaintained/airsonic/airsonic.conf rename to user/airsonic/airsonic.conf diff --git a/unmaintained/airsonic/airsonic.initd b/user/airsonic/airsonic.initd similarity index 100% rename from unmaintained/airsonic/airsonic.initd rename to user/airsonic/airsonic.initd diff --git a/unmaintained/airsonic/airsonic.sh b/user/airsonic/airsonic.sh similarity index 100% rename from unmaintained/airsonic/airsonic.sh rename to user/airsonic/airsonic.sh diff --git a/user/authentik/APKBUILD b/user/authentik/APKBUILD new file mode 100644 index 0000000..05f723c --- /dev/null +++ b/user/authentik/APKBUILD @@ -0,0 +1,246 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=authentik +pkgver=2024.2.2 +pkgrel=1 +pkgdesc="An open-source Identity Provider focused on flexibility and versatility" +url="https://github.com/goauthentik/authentik" +# s390x: missing py3-celery py3-flower and py3-kombu +# armhf/armv7/x86: out of memory error when building goauthentik +# ppc64le: not supported by Rollup build +arch="aarch64 x86_64" +license="MIT" +depends=" + libcap-setcap + nginx + postgresql + procps + pwgen + py3-aiohttp + py3-aiosignal + py3-amqp + py3-anyio + py3-asgiref + py3-asn1 + py3-asn1crypto + py3-async-timeout + py3-attrs + py3-autobahn + py3-automat + py3-bcrypt + py3-billiard + py3-cachetools + py3-cbor2 + py3-celery + py3-certifi + py3-cffi + py3-channels + py3-channels_redis + py3-charset-normalizer + py3-click + py3-click-didyoumean + py3-click-plugins + py3-click-repl + py3-codespell + py3-colorama + py3-constantly + py3-cparser + py3-cryptography + py3-dacite + py3-daphne + py3-dateutil + py3-deepmerge + py3-defusedxml + py3-deprecated + py3-dnspython + py3-django + py3-django-filter + py3-django-guardian + py3-django-model-utils + py3-django-otp + py3-django-prometheus + py3-django-redis + py3-django-rest-framework + py3-django-rest-framework-guardian + py3-docker-py + py3-dotenv + py3-dumb-init + py3-duo_client + py3-drf-spectacular + py3-email-validator + py3-facebook-sdk + py3-flower + py3-frozenlist + py3-geoip2 + py3-google-auth + py3-gunicorn + py3-h11 + py3-httptools + py3-humanize + py3-hyperlink + py3-idna + py3-incremental + py3-inflection + py3-jsonschema + py3-jsonpatch + py3-jwt + py3-kombu + py3-kubernetes + py3-ldap3 + py3-lxml + py3-maxminddb + py3-msgpack + py3-multidict + py3-oauthlib + py3-opencontainers + py3-openssl + py3-packaging + py3-paramiko + py3-parsing + py3-prometheus-client + py3-prompt_toolkit + py3-psycopg + py3-psycopg-c + py3-pycryptodome + py3-pydantic-scim + py3-pynacl + py3-pyrsistent + py3-python-jwt + py3-redis + py3-requests + py3-requests-oauthlib + py3-rsa + py3-sentry-sdk + py3-service_identity + py3-setuptools + py3-six + py3-sniffio + py3-sqlparse + py3-structlog + py3-swagger-spec-validator + py3-tornado + py3-twilio + py3-twisted + py3-txaio + py3-typing-extensions + py3-tz + py3-ua-parser + py3-uritemplate + py3-urllib3-secure-extra + py3-uvloop + py3-vine + py3-watchdog + py3-watchfiles + py3-wcwidth + py3-webauthn + py3-websocket-client + py3-websockets + py3-wrapt + py3-wsproto + py3-xmlsec + py3-yaml + py3-yarl + py3-zope-interface + py3-zxcvbn + redis + uvicorn + " +makedepends="go npm" +# checkdepends scooped up by poetry due to number +checkdepends="poetry py3-coverage" +# tests disabled for now +options="!check" +install="$pkgname.post-install $pkgname.post-upgrade $pkgname.pre-install" +source=" + $pkgname-$pkgver.tar.gz::https://github.com/goauthentik/authentik/archive/refs/tags/version/$pkgver.tar.gz + authentik.openrc + authentik-worker.openrc + authentik-ldap.openrc + authentik-ldap.conf + authentik-manage.sh + root-settings-csrf_trusted_origins.patch + " +builddir="$srcdir/"authentik-version-$pkgver +subpackages="$pkgname-openrc $pkgname-doc" +pkgusers="authentik" +pkggroups="authentik" + +export GOPATH=$srcdir/go +export GOCACHE=$srcdir/go-build +export GOTMPDIR=$srcdir + +build() { + msg "Building authentik-ldap" + go build -o ldap cmd/ldap/main.go + msg "Building authentik-proxy" + go build -o proxy cmd/proxy/main.go + msg "Building authentik-radius" + go build -o radius cmd/proxy/main.go + msg "Building authentik-server" + go build -o server cmd/server/*.go + + msg "Building authentik-web" + cd web + npm ci --no-audit + npm run build + cd .. + + msg "Building website" + cd website + npm ci --no-audit + npm run build +} + +package() { + msg "Packaging $pkgname" + mkdir -p "$pkgdir"/usr/share/webapps/authentik/web + mkdir -p "$pkgdir"/usr/share/webapps/authentik/website + mkdir -p "$pkgdir"/var/lib/authentik + mkdir -p "$pkgdir"/usr/share/doc + mkdir -p "$pkgdir"/usr/bin + cp -dr "$builddir"/authentik "$pkgdir"/usr/share/webapps/authentik + cp -dr "$builddir"/web/dist "$pkgdir"/usr/share/webapps/authentik/web/dist + cp -dr "$builddir"/web/authentik "$pkgdir"/usr/share/webapps/authentik/web/authentik + cp -dr "$builddir"/website/build "$pkgdir"/usr/share/doc/authentik + cp -dr "$builddir"/tests "$pkgdir"/usr/share/webapps/authentik/tests + cp -dr "$builddir"/lifecycle "$pkgdir"/usr/share/webapps/authentik/lifecycle + cp -dr "$builddir"/locale "$pkgdir"/usr/share/webapps/authentik/locale + cp -dr "$builddir"/blueprints "$pkgdir"/var/lib/authentik/blueprints + install -Dm755 "$builddir"/manage.py "$pkgdir"/usr/share/webapps/authentik/manage.py + install -Dm755 "$builddir"/server "$pkgdir"/usr/share/webapps/authentik/server + ln -s "/etc/authentik/config.yml" "$pkgdir"/usr/share/webapps/authentik/local.env.yml + + install -Dm755 "$builddir"/proxy "$pkgdir"/usr/bin/authentik-proxy + install -Dm755 "$builddir"/ldap "$pkgdir"/usr/bin/authentik-ldap + install -Dm755 "$builddir"/radius "$pkgdir"/usr/bin/authentik-radius + + install -Dm755 "$srcdir"/$pkgname.openrc \ + "$pkgdir"/etc/init.d/$pkgname + install -Dm755 "$srcdir"/$pkgname-worker.openrc \ + "$pkgdir"/etc/init.d/$pkgname-worker + install -Dm755 "$srcdir"/$pkgname-ldap.openrc \ + "$pkgdir"/etc/init.d/$pkgname-ldap + install -Dm640 "$srcdir"/$pkgname-ldap.conf \ + "$pkgdir"/etc/conf.d/$pkgname-ldap + install -Dm640 "$builddir"/authentik/lib/default.yml \ + "$pkgdir"/etc/authentik/config.yml + chown root:www-data "$pkgdir"/etc/authentik/config.yml + sed -i 's|cert_discovery_dir.*|cert_discovery_dir: /var/lib/authentik/certs|' "$pkgdir"/etc/authentik/config.yml + sed -i 's|blueprints_dir.*|blueprints_dir: /var/lib/authentik/blueprints|' "$pkgdir"/etc/authentik/config.yml + sed -i 's|template_dir.*|template_dir: /var/lib/authentik/templates|' "$pkgdir"/etc/authentik/config.yml + printf "\ncsrf:\n trusted_origins: ['auth.example.com']" >> "$pkgdir"/etc/authentik/config.yml + printf "\nsecret_key: '@@SECRET_KEY@@'" >> "$pkgdir"/etc/authentik/config.yml + + # Install wrapper script to /usr/bin. + install -m755 -D "$srcdir"/authentik-manage.sh "$pkgdir"/usr/bin/authentik-manage +} + +sha512sums=" +98b7265b8ed32dde659dc984c4a71097da2ab7c32f3361984f56cfb97226ea8b2f4fdf1a3d019d341cff92c9832a3964038bf5eca3aae238a18c2445dbcf0ed8 authentik-2024.2.2.tar.gz +4defb4fe3a4230f4aa517fbecd5e5b8bcef2a64e1b40615660ae9eec33597310a09df5e126f4d39ce7764bd1716c0a7040637699135c103cbc1879593c6c06f1 authentik.openrc +5d7f28bf5a9f358a0fc3634b2bac6d070c276c3f8181d26fa7e94a17503a4d54556bf7c3207ccd6cb924b81754ed965795d5e2a8aa1af409fd9e32d390ec4cf5 authentik-worker.openrc +351e6920d987861f8bf0d7ab2f942db716a8dbdad1f690ac662a6ef29ac0fd46cf817cf557de08f1c024703503d36bc8b46f0d9eb1ecaeb399dce4c3bb527d17 authentik-ldap.openrc +89ee5f0ffdade1c153f3a56ff75b25a7104aa81d8c7a97802a8f4b0eab34850cee39f874dabe0f3c6da3f71d6a0f938f5e8904169e8cdd34d407c8984adee6b0 authentik-ldap.conf +d2df285e09d05bb78b17cdbf156cb19883764d0ae61d4c8faed599c015277b75c3f51e5fcb35e01fc25d5847f667ff2089d5e6c48b85a3a6b4523278b2eea89d authentik-manage.sh +a50ceddb239851d869212cd5064df117ab977d0e01bf0bc5fa7b5fa6e6428a4af59f802ca223a7e840753f86bfdb0df17d330f9ba4cbaa30a167f51d8aecb9bd root-settings-csrf_trusted_origins.patch +" diff --git a/user/authentik/authentik-ldap.conf b/user/authentik/authentik-ldap.conf new file mode 100644 index 0000000..c31e819 --- /dev/null +++ b/user/authentik/authentik-ldap.conf @@ -0,0 +1,3 @@ +AUTHENTIK_HOST=https://example.com +AUTHENTIK_TOKEN=your-authentik-token +AUTHENTIK_INSECURE=true diff --git a/user/authentik/authentik-ldap.openrc b/user/authentik/authentik-ldap.openrc new file mode 100644 index 0000000..fc033be --- /dev/null +++ b/user/authentik/authentik-ldap.openrc @@ -0,0 +1,24 @@ +#!/sbin/openrc-run + +name="$RC_SVCNAME" +cfgfile="/etc/conf.d/$RC_SVCNAME" +pidfile="/run/$RC_SVCNAME.pid" +working_directory="/usr/share/webapps/authentik" +command="/usr/bin/authentik-ldap" +command_user="authentik" +command_group="authentik" +start_stop_daemon_args="" +command_background="yes" +output_log="/var/log/authentik/$RC_SVCNAME.log" +error_log="/var/log/authentik/$RC_SVCNAME.err" + +depend() { + need authentik +} + +start_pre() { + cd "$working_directory" + checkpath --directory --owner $command_user:$command_group --mode 0775 \ + /var/log/authentik + export AUTHENTIK_HOST AUTHENTIK_TOKEN AUTHENTIK_INSECURE AUTHENTIK_DEBUG +} diff --git a/user/authentik/authentik-manage.sh b/user/authentik/authentik-manage.sh new file mode 100644 index 0000000..43244b0 --- /dev/null +++ b/user/authentik/authentik-manage.sh @@ -0,0 +1,12 @@ + +#!/bin/sh + +BUNDLE_DIR='/usr/share/webapps/authentik' + +cd $BUNDLE_DIR + +if [ "$(id -un)" != 'authentik' ]; then + exec su authentik -c '"$0" "$@"' -- ./manage.py "$@" +else + exec ./manage.py "$@" +fi diff --git a/user/authentik/authentik-worker.openrc b/user/authentik/authentik-worker.openrc new file mode 100644 index 0000000..e7970cc --- /dev/null +++ b/user/authentik/authentik-worker.openrc @@ -0,0 +1,32 @@ +#!/sbin/openrc-run + +name="$RC_SVCNAME" +cfgfile="/etc/conf.d/$RC_SVCNAME.conf" +pidfile="/run/$RC_SVCNAME.pid" +working_directory="/usr/share/webapps/authentik" +command="celery" +command_args="-A authentik.root.celery worker -Ofair --max-tasks-per-child=1 --autoscale 3,1 -E -B -s /tmp/celerybeat-schedule -Q authentik,authentik_scheduled,authentik_events" +command_user="authentik" +command_group="authentik" +start_stop_daemon_args="" +command_background="yes" +output_log="/var/log/authentik/$RC_SVCNAME.log" +error_log="/var/log/authentik/$RC_SVCNAME.err" + +depend() { + need redis + need postgresql +} + +start_pre() { + cd "$working_directory" + checkpath --directory --owner $command_user:$command_group --mode 0775 \ + /var/log/authentik \ + /var/lib/authentik/certs \ + /var/lib/authentik/blueprints +} + +stop_pre() { + ebegin "Killing child processes" + kill $(ps -o pid= --ppid $(cat $pidfile)) || true +} diff --git a/user/authentik/authentik.openrc b/user/authentik/authentik.openrc new file mode 100644 index 0000000..a036393 --- /dev/null +++ b/user/authentik/authentik.openrc @@ -0,0 +1,30 @@ +#!/sbin/openrc-run + +name="$RC_SVCNAME" +cfgfile="/etc/conf.d/$RC_SVCNAME.conf" +pidfile="/run/$RC_SVCNAME.pid" +working_directory="/usr/share/webapps/authentik" +command="/usr/share/webapps/authentik/server" +command_user="authentik" +command_group="authentik" +start_stop_daemon_args="" +command_background="yes" +output_log="/var/log/authentik/$RC_SVCNAME.log" +error_log="/var/log/authentik/$RC_SVCNAME.err" + +depend() { + need redis + need postgresql +} + +start_pre() { + cd "$working_directory" + checkpath --directory --owner $command_user:$command_group --mode 0775 \ + /var/log/authentik \ + /var/lib/authentik/certs +} + +stop_pre() { + ebegin "Killing child processes" + kill $(ps -o pid= --ppid $(cat $pidfile)) || true +} diff --git a/user/authentik/authentik.post-install b/user/authentik/authentik.post-install new file mode 100755 index 0000000..a715d20 --- /dev/null +++ b/user/authentik/authentik.post-install @@ -0,0 +1,39 @@ +#!/bin/sh +set -eu + +group=authentik +config_file='/etc/authentik/config.yml' + +setcap 'cap_net_bind_service=+ep' /usr/share/webapps/authentik/server + +if [ $(grep '@@SECRET_KEY@@' "$config_file") ]; then + echo "* Generating random secret in $config_file" >&2 + + secret_key="$(pwgen -s 50 1)" + sed -i "s|@@SECRET_KEY@@|$secret_key|" "$config_file" + chown root:$group "$config_file" +fi + +if [ "${0##*.}" = 'post-upgrade' ]; then + cat >&2 <<-EOF + * + * To finish Authentik upgrade run: + * + * authentik-manage migrate + * + EOF +else + cat >&2 <<-EOF + * + * 1. Adjust settings in /etc/authentik/config.yml. + * + * 2. Create database for Authentik: + * + * psql -c "CREATE ROLE authentik PASSWORD 'top-secret' INHERIT LOGIN;" + * psql -c "CREATE DATABASE authentik OWNER authentik ENCODING 'UTF-8';" + * + * 3. Run "authentik-manage migrate" + * 4. Setup admin user at https:///if/flow/initial-setup/ + * + EOF +fi diff --git a/user/authentik/authentik.post-upgrade b/user/authentik/authentik.post-upgrade new file mode 120000 index 0000000..d310dd8 --- /dev/null +++ b/user/authentik/authentik.post-upgrade @@ -0,0 +1 @@ +authentik.post-install \ No newline at end of file diff --git a/user/authentik/authentik.pre-install b/user/authentik/authentik.pre-install new file mode 100644 index 0000000..792f304 --- /dev/null +++ b/user/authentik/authentik.pre-install @@ -0,0 +1,26 @@ +#!/bin/sh +# It's very important to set user/group correctly. + +authentik_dir='/var/lib/authentik' + +if ! getent group authentik 1>/dev/null; then + echo '* Creating group authentik' 1>&2 + + addgroup -S authentik +fi + +if ! id authentik 2>/dev/null 1>&2; then + echo '* Creating user authentik' 1>&2 + + adduser -DHS -G authentik -h "$authentik_dir" -s /bin/sh \ + -g "added by apk for authentik" authentik + passwd -u authentik 1>/dev/null # unlock +fi + +if ! id -Gn authentik | grep -Fq redis; then + echo '* Adding user authentik to group redis' 1>&2 + + addgroup authentik redis +fi + +exit 0 diff --git a/user/authentik/root-settings-csrf_trusted_origins.patch b/user/authentik/root-settings-csrf_trusted_origins.patch new file mode 100644 index 0000000..52a892f --- /dev/null +++ b/user/authentik/root-settings-csrf_trusted_origins.patch @@ -0,0 +1,12 @@ +diff --git a/authentik/root/settings.py.orig b/authentik/root/settings.py +index ebfc471..ce1ef3b 100644 +--- a/authentik/root/settings.py.orig ++++ b/authentik/root/settings.py +@@ -56,6 +56,7 @@ AUTH_USER_MODEL = "authentik_core.User" + + CSRF_COOKIE_NAME = "authentik_csrf" + CSRF_HEADER_NAME = "HTTP_X_AUTHENTIK_CSRF" ++CSRF_TRUSTED_ORIGINS = CONFIG.get("csrf.trusted_origins") + LANGUAGE_COOKIE_NAME = "authentik_language" + SESSION_COOKIE_NAME = "authentik_session" + SESSION_COOKIE_DOMAIN = CONFIG.get("cookie_domain", None) diff --git a/user/calibre-web/APKBUILD b/user/calibre-web/APKBUILD index 37f5ea0..df1b79a 100644 --- a/user/calibre-web/APKBUILD +++ b/user/calibre-web/APKBUILD @@ -1,8 +1,8 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=calibre-web -pkgver=0.6.25 -pkgrel=0 +pkgver=0.6.21 +pkgrel=1 pkgdesc="Web app for browsing, reading and downloading eBooks stored in a Calibre database" arch='noarch' url="https://github.com/janeczku/calibre-web" @@ -10,27 +10,26 @@ license='GPL-3.0-only' depends=" py3-apscheduler py3-babel - py3-bleach + py3-backports_abc + py3-blinker py3-chardet - py3-cryptography py3-flask-babel + py3-flask-login py3-flask-limiter py3-flask-principal py3-flask-wtf - py3-flask-httpauth + py3-goodreads + py3-levenshtein + py3-iso639 py3-lxml - py3-magic - py3-netifaces - py3-pypdf - py3-pycountry - py3-regex + py3-pypdf2 py3-requests py3-sqlalchemy py3-tornado py3-tz py3-unidecode - py3-urllib3 py3-wand + py3-werkzeug " source=" $pkgname-$pkgver.tar.gz::https://github.com/janeczku/calibre-web/archive/$pkgver.tar.gz @@ -57,7 +56,7 @@ package() { install -D -m 644 "$srcdir"/calibre-web.conf "$pkgdir"/etc/conf.d/calibre-web } sha512sums=" -878d057613b7f89e57ad536c415bb4dc346d5f8c4ca2660517b68c70c4eefa5358317fe0e917738d468cb003358a0341411155289d952b1aa6cd4a022a84c8f0 calibre-web-0.6.25.tar.gz +d2f07eec0b6c9f65e68ae0b72fddd14444eb8be8b0fee997ec7caaa1feebb8a26603844752347547becde501669af5bce69e9eab466a28fd4b10624b65c9afcf calibre-web-0.6.21.tar.gz 4aba825eb12f44eb0912cc6981b46bec9b77ad114627564c9c7585862a099c7d1ff8deec5f15d047319805e2b9a3e2d128b2d1292dd92293a7e72359009a480f calibre-web.conf 62859a8a304216dc0dbfb7f2e8144a50d348c6621f5b292c08aa97a872ada67b52d36b567546fd0f4c439dbefe0bbe0e4fb1e1affbe507278b4a8d36ed3fa2a9 calibre-web.initd " diff --git a/backports/caprine/APKBUILD b/user/caprine/APKBUILD similarity index 58% rename from backports/caprine/APKBUILD rename to user/caprine/APKBUILD index f8f2b6d..73c3e02 100644 --- a/backports/caprine/APKBUILD +++ b/user/caprine/APKBUILD @@ -1,30 +1,33 @@ -# Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + pkgname=caprine -pkgver=2.60.3 -pkgrel=6 +pkgver=2.59.1 +pkgrel=0 pkgdesc="Elegant Facebook Messenger desktop app" -arch="x86_64 aarch64" # blocked by electron +arch="x86_64 aarch64" # bloced by electron url="https://github.com/sindresorhus/caprine" license="MIT" depends="electron" makedepends="npm findutils coreutils" -options="!check" # No test suite +options="!check" source=" $pkgname-$pkgver.tar.gz::https://github.com/sindresorhus/caprine/archive/refs/tags/v$pkgver.tar.gz caprine.desktop - caprine.sh + caprine.js " build() { - npm ci --ignore-scripts - npx patch-package + npm install --ignore-scripts + npx --yes patch-package npx tsc - npm prune --ignore-scripts --omit=dev + rm -r node_modules + npm install --ignore-scripts --production + npx --yes patch-package } package() { - local appdir=/usr/lib/caprine + local appdir=/usr/lib/$pkgname install -d "$pkgdir"$appdir cp -r ./* "$pkgdir"$appdir @@ -32,13 +35,13 @@ package() { install -dm755 "$pkgdir/usr/share/pixmaps" install -m644 build/icon.png "$pkgdir/usr/share/pixmaps/$pkgname.png" - install -Dm755 "$srcdir"/caprine.sh "$pkgdir"/usr/bin/caprine - install -Dm644 "$srcdir"/caprine.desktop \ - "$pkgdir"/usr/share/applications/caprine.desktop + install -Dm755 "$srcdir"/$pkgname.js "$pkgdir"/usr/bin/$pkgname + install -Dm644 "$srcdir"/$pkgname.desktop \ + "$pkgdir"/usr/share/applications/$pkgname.desktop - install -dm755 "$pkgdir"/usr/share/licenses/caprine - ln -s "$(realpath -m --relative-to=/usr/share/licenses/caprine $appdir/license)" \ - "$pkgdir"/usr/share/licenses/caprine + install -dm755 "$pkgdir"/usr/share/licenses/$pkgname + ln -s "$(realpath -m --relative-to=/usr/share/licenses/$pkgname $appdir/license)" \ + "$pkgdir"/usr/share/licenses/$pkgname # Clean up rm -r "$pkgdir"$appdir/build @@ -46,7 +49,7 @@ package() { rm -r "$pkgdir"$appdir/tsconfig.json find "$pkgdir"$appdir \ -name "package.json" \ - -exec sed -e "s|$srcdir/caprine|$appdir|" \ + -exec sed -e "s|$srcdir/$pkgname|$appdir|" \ -i {} \; \ -or -name ".*" -prune -exec rm -r '{}' \; \ -or -name "bin" -prune -exec rm -r '{}' \; \ @@ -57,7 +60,7 @@ package() { -or -name "test" -prune -exec rm -r '{}' \; } sha512sums=" -edf6452294b3c661befd9811c5836da33311171d587cb9a5939ac11a0c1e2a7ebbc4f2a8d81e02c1db1a2d814ac1aa7bbdadca9e21892cc8d7f7e9c23dc2e221 caprine-2.60.3.tar.gz +a525bafb6a53dd2dbdfc4b9b3e96d3939d93be950a3287f2a5ef6465d5a6b64ecda79b6d393023d067f939e1a6e85debc35f83bbb1f758011db9d94dd9ff8a72 caprine-2.59.1.tar.gz a469e3bea24926119e51642b777ef794c5fa65421107903f967c36d81bbb1adb3d52469ce3a3301b2c890f1aa53ab989ded22a7c6e811fb8cf0a582dbd835e19 caprine.desktop -3ad8994c1a0417e73d622587769e527b4236a32c1a89442ff76413b75b4392d667c9e2908979b453e5926e54db6d94b31625340c5a94e84e91ea77f56feae778 caprine.sh +44280c62ce43bdafa8528729371fccb16b8a0e3db7aca28d5c157ae0144dca5fbb023b8883b561955aa28ab62e967f2674d8c6bcaff186e2cdd0e7ba8beab9ac caprine.js " diff --git a/backports/caprine/caprine.desktop b/user/caprine/caprine.desktop similarity index 100% rename from backports/caprine/caprine.desktop rename to user/caprine/caprine.desktop diff --git a/user/caprine/caprine.js b/user/caprine/caprine.js new file mode 100644 index 0000000..a963ee6 --- /dev/null +++ b/user/caprine/caprine.js @@ -0,0 +1,29 @@ +#!/usr/bin/electron + +const name = 'caprine'; + +const {app} = require('electron'); +const fs = require('fs'); +const path = require('path'); + +// Change command name. +const fd = fs.openSync('/proc/self/comm', fs.constants.O_WRONLY); +fs.writeSync(fd, name); +fs.closeSync(fd); + +// Remove first command line argument (/usr/bin/electron). +process.argv.splice(0, 1); + +// Set application paths. +const appPath = path.join(path.dirname(__dirname), 'lib', name); +const packageJson = require(path.join(appPath, 'package.json')); +const productName = packageJson.productName; +app.setAppPath(appPath); +app.setDesktopName(name + '.desktop'); +app.setName(productName); +app.setPath('userCache', path.join(app.getPath('cache'), productName)); +app.setPath('userData', path.join(app.getPath('appData'), productName)); +app.setVersion(packageJson.version); + +// Run the application. +require('module')._load(appPath, module, true); diff --git a/user/filebrowser/APKBUILD b/user/filebrowser/APKBUILD deleted file mode 100644 index 7ff2627..0000000 --- a/user/filebrowser/APKBUILD +++ /dev/null @@ -1,53 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -pkgname=filebrowser -pkgver=1.0.3 -_gittag="v$pkgver-stable" -pkgrel=0 -pkgdesc="Standalone web file manager" -arch="all" -url="https://github.com/gtsteffaniak/filebrowser" -license="Apache-2.0" -depends="libcap-setcap" -makedepends="go nodejs npm" -source=" - $pkgname-$_gittag.tar.gz::https://github.com/gtsteffaniak/filebrowser/archive/refs/tags/$_gittag.tar.gz - frontend-package-lock.json - filebrowser.openrc - " -builddir="$srcdir"/$pkgname-${_gittag/v} -options="!check" # TODO: setup test suite -subpackages="$pkgname-openrc" -install="$pkgname.pre-install $pkgname.post-upgrade" - -prepare() { - default_prepare - ( - cd "$builddir"/frontend - cp "$srcdir"/frontend-package-lock.json package-lock.json - npm ci - ) -} - -build() { - ( - cd "$builddir"/frontend - npm run build - ) - ( - cd "$builddir"/backend - go build -o filebrowser \ - --ldflags="-w -s -X 'github.com/gtsteffaniak/filebrowser/backend/common/version.CommitSHA=production' \ - -X 'github.com/gtsteffaniak/filebrowser/backend/common/version.Version=$pkgver'" - ) -} - -package() { - install -Dm755 "$builddir"/backend/filebrowser "$pkgdir"/usr/bin/filebrowser - install -Dm755 "$srcdir"/filebrowser.openrc "$pkgdir"/etc/init.d/filebrowser - install -Dm644 "$builddir"/frontend/public/config.generated.yaml "$pkgdir"/etc/filebrowser/filebrowser.yaml -} -sha512sums=" -7919d391e45c7a88bcbff61f6d63963fe559afe21170c2940ae7895e6b794ce68af0742d4ce81584437b14e603a4ff8b95fb1fb16d72a032a40b76986ed8981b filebrowser-v1.0.3-stable.tar.gz -4ffe0c2ae7d6d972950fb38c9c777c20e3f507da6b4562231e09843b3ae618362ffdfbaf6dbb60959b3811c1856eb326d608e9d32e236bac405c65974e6e1e50 frontend-package-lock.json -06319bc67b088b5ffdad01a575691d82c5319730b4e46975bfc09ebb7466d6913eaca73e93f8db7b8c8bc374e6b9e35634ff1a69e701d24a5d2eae444de6bdf7 filebrowser.openrc -" diff --git a/user/filebrowser/filebrowser.openrc b/user/filebrowser/filebrowser.openrc deleted file mode 100644 index 3282368..0000000 --- a/user/filebrowser/filebrowser.openrc +++ /dev/null @@ -1,30 +0,0 @@ -#!/sbin/openrc-run - -description="File browser for ${RC_SVCNAME/*.}" -supervisor=supervise-daemon -respawn_max=0 -respawn_delay=10 - - -# Change $directory to path to middleware scripts -directory=${directory:-/var/lib/${RC_SVCNAME/.*}/${RC_SVCNAME/*.}} -pidfile=${pidfile:-/run/$RC_SVCNAME.pid} - -log_dir="/var/log/${RC_SVCNAME/.*}/" -logfile=${logfile:-$log_dir/${RC_SVCNAME/*.}.log} -output_log="${output_log:-$logfile}" -error_log="${error_log:-$logfile}" - -command=${command:-/usr/bin/filebrowser} -command_args="-c /etc/filebrowser/${RC_SVCNAME/*.}.yaml" -command_user=${command_user:-filebrowser:filebrowser} -command_background=true - -depend() { - need net -} - -start_pre() { - checkpath --owner=$command_user --directory $log_dir /var/lib/filebrowser $directory - cd $directory -} diff --git a/user/filebrowser/filebrowser.post-upgrade b/user/filebrowser/filebrowser.post-upgrade deleted file mode 120000 index 85089dd..0000000 --- a/user/filebrowser/filebrowser.post-upgrade +++ /dev/null @@ -1 +0,0 @@ -filebrowser.pre-install \ No newline at end of file diff --git a/user/filebrowser/filebrowser.pre-install b/user/filebrowser/filebrowser.pre-install deleted file mode 100644 index b79bd82..0000000 --- a/user/filebrowser/filebrowser.pre-install +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/sh - -setcap 'cap_net_bind_service=+ep' /usr/bin/filebrowser - -if [ "${0##*.}" = 'pre-install' ]; then - cat >&2 <<-EOF - -1. Generate filebrowser config file - - cd /etc/filebrowser - filebrowser setup - -2. Rename config.yaml to $service.yaml (i.e. movies.yaml) and adjust as desired (see https://filebrowserquantum.com/en/docs/configuration/configuration-overview/ for more information) -3. Create symbolic link for service file, enable, and start - - ln -s /etc/init.d/filebrowser /etc/init.d/filebrowser.$service - rc-update add filebrowser.$service - service filebrowser.$service - -You should now be able to go to http://ip-address:port (default 80) - -For more documentation, go to https://filebrowserquantum.com/en/docs - - EOF - - if ! getent group filebrowser 1>/dev/null; then - echo 'Creating group filebrowser' 1>&2 - - addgroup -S filebrowser - fi - - if ! id filebrowser 2>/dev/null 1>&2; then - echo 'Creating user filebrowser' 1>&2 - - adduser -DHS -G filebrowser -h "$DATADIR" -s /bin/sh \ - -g "added by apk for filebrowser" filebrowser - passwd -u filebrowser 1>/dev/null # unlock - fi - - if ! id -Gn filebrowser | grep -Fq www-data; then - echo 'Adding user filebrowser to group www-data' 1>&2 - - addgroup filebrowser www-data - fi - - exit 0 -fi diff --git a/user/filebrowser/frontend-package-lock.json b/user/filebrowser/frontend-package-lock.json deleted file mode 100644 index fca845b..0000000 --- a/user/filebrowser/frontend-package-lock.json +++ /dev/null @@ -1,7568 +0,0 @@ -{ - "name": "filebrowser-frontend", - "version": "3.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "filebrowser-frontend", - "version": "3.0.0", - "dependencies": { - "@onlyoffice/document-editor-vue": "^1.4.0", - "@skjnldsv/vue-plyr": "^7.5.0", - "ace-builds": "^1.24.2", - "axios": "^1.7.9", - "clipboard": "^2.0.4", - "css-vars-ponyfill": "^2.4.3", - "dompurify": "^3.2.4", - "epubjs": "^0.3.93", - "file-loader": "^6.2.0", - "glob": "^9.3.5", - "highlight.js": "^11.11.1", - "mammoth": "^1.9.1", - "marked": "^15.0.6", - "normalize.css": "^8.0.1", - "qrcode.vue": "^3.4.1", - "srt-support-for-html5-videos": "^2.6.11", - "vue": "^3.4.21", - "vue-i18n": "^9.10.2", - "vue-lazyload": "^3.0.0", - "vue-router": "^4.3.0" - }, - "devDependencies": { - "@intlify/eslint-plugin-vue-i18n": "^3.2.0", - "@intlify/unplugin-vue-i18n": "^4.0.0", - "@playwright/test": "^1.54.1", - "@types/node": "^24.1.0", - "@vitejs/plugin-vue": "^5.0.4", - "@vue/eslint-config-typescript": "^13.0.0", - "deepl-node": "^1.18.0", - "eslint": "^8.57.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-vue": "^9.24.0", - "fs-extra": "^11.3.0", - "jsdom": "^25.0.1", - "vite": "^6.2.0", - "vite-plugin-checker": "^0.10.3", - "vite-plugin-compression2": "^1.0.0", - "vitest": "^3.0.7", - "vue-tsc": "^2.0.7" - }, - "engines": { - "node": ">=20.0.0", - "npm": ">=9.0.0" - } - }, - "node_modules/@asamuzakjp/css-color": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", - "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@csstools/css-calc": "^2.1.3", - "@csstools/css-color-parser": "^3.0.9", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "lru-cache": "^10.4.3" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.28.5" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", - "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", - "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@csstools/color-helpers": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", - "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - } - }, - "node_modules/@csstools/css-calc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", - "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-color-parser": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", - "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/color-helpers": "^5.1.0", - "@csstools/css-calc": "^2.1.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-parser-algorithms": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", - "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-tokenizer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", - "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", - "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", - "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", - "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", - "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", - "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", - "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", - "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", - "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", - "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", - "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", - "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", - "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", - "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", - "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", - "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", - "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", - "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", - "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", - "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", - "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", - "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", - "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", - "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", - "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", - "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", - "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", - "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", - "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.1", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@intlify/bundle-utils": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@intlify/bundle-utils/-/bundle-utils-8.0.0.tgz", - "integrity": "sha512-1B++zykRnMwQ+20SpsZI1JCnV/YJt9Oq7AGlEurzkWJOFtFAVqaGc/oV36PBRYeiKnTbY9VYfjBimr2Vt42wLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@intlify/message-compiler": "^9.4.0", - "@intlify/shared": "^9.4.0", - "acorn": "^8.8.2", - "escodegen": "^2.1.0", - "estree-walker": "^2.0.2", - "jsonc-eslint-parser": "^2.3.0", - "mlly": "^1.2.0", - "source-map-js": "^1.0.1", - "yaml-eslint-parser": "^1.2.2" - }, - "engines": { - "node": ">= 14.16" - }, - "peerDependenciesMeta": { - "petite-vue-i18n": { - "optional": true - }, - "vue-i18n": { - "optional": true - } - } - }, - "node_modules/@intlify/core-base": { - "version": "9.14.5", - "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.14.5.tgz", - "integrity": "sha512-5ah5FqZG4pOoHjkvs8mjtv+gPKYU0zCISaYNjBNNqYiaITxW8ZtVih3GS/oTOqN8d9/mDLyrjD46GBApNxmlsA==", - "license": "MIT", - "dependencies": { - "@intlify/message-compiler": "9.14.5", - "@intlify/shared": "9.14.5" - }, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/kazupon" - } - }, - "node_modules/@intlify/eslint-plugin-vue-i18n": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@intlify/eslint-plugin-vue-i18n/-/eslint-plugin-vue-i18n-3.2.0.tgz", - "integrity": "sha512-TOIrD4tJE48WMyVIB8bNeQJJPYo1Prpqnm9Xpn1UZmcqlELhm8hmP8QyJnkgesfbG7hyiX/kvo63W7ClEQmhpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint/eslintrc": "^3.0.0", - "@intlify/core-base": "^9.12.0", - "@intlify/message-compiler": "^9.12.0", - "debug": "^4.3.4", - "eslint-compat-utils": "^0.6.0", - "glob": "^10.3.3", - "globals": "^15.0.0", - "ignore": "^6.0.0", - "import-fresh": "^3.3.0", - "is-language-code": "^3.1.0", - "js-yaml": "^4.1.0", - "json5": "^2.2.3", - "jsonc-eslint-parser": "^2.3.0", - "lodash": "^4.17.21", - "parse5": "^7.1.2", - "semver": "^7.5.4", - "synckit": "^0.9.0", - "vue-eslint-parser": "^9.3.1", - "yaml-eslint-parser": "^1.2.2" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "eslint": "^8.0.0 || ^9.0.0-0" - } - }, - "node_modules/@intlify/eslint-plugin-vue-i18n/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@intlify/eslint-plugin-vue-i18n/node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@intlify/eslint-plugin-vue-i18n/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@intlify/eslint-plugin-vue-i18n/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/@intlify/message-compiler": { - "version": "9.14.5", - "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.14.5.tgz", - "integrity": "sha512-IHzgEu61/YIpQV5Pc3aRWScDcnFKWvQA9kigcINcCBXN8mbW+vk9SK+lDxA6STzKQsVJxUPg9ACC52pKKo3SVQ==", - "license": "MIT", - "dependencies": { - "@intlify/shared": "9.14.5", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/kazupon" - } - }, - "node_modules/@intlify/shared": { - "version": "9.14.5", - "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.14.5.tgz", - "integrity": "sha512-9gB+E53BYuAEMhbCAxVgG38EZrk59sxBtv3jSizNL2hEWlgjBjAw1AwpLHtNaeda12pe6W20OGEa0TwuMSRbyQ==", - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/kazupon" - } - }, - "node_modules/@intlify/unplugin-vue-i18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-4.0.0.tgz", - "integrity": "sha512-q2Mhqa/mLi0tulfLFO4fMXXvEbkSZpI5yGhNNsLTNJJ41icEGUuyDe+j5zRZIKSkOJRgX6YbCyibTDJdRsukmw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@intlify/bundle-utils": "^8.0.0", - "@intlify/shared": "^9.4.0", - "@rollup/pluginutils": "^5.1.0", - "@vue/compiler-sfc": "^3.2.47", - "debug": "^4.3.3", - "fast-glob": "^3.2.12", - "js-yaml": "^4.1.0", - "json5": "^2.2.3", - "pathe": "^1.0.0", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2", - "unplugin": "^1.1.0" - }, - "engines": { - "node": ">= 14.16" - }, - "peerDependencies": { - "petite-vue-i18n": "*", - "vue-i18n": "*", - "vue-i18n-bridge": "*" - }, - "peerDependenciesMeta": { - "petite-vue-i18n": { - "optional": true - }, - "vue-i18n": { - "optional": true - }, - "vue-i18n-bridge": { - "optional": true - } - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", - "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@onlyoffice/document-editor-vue": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@onlyoffice/document-editor-vue/-/document-editor-vue-1.6.1.tgz", - "integrity": "sha512-sdU7h684ESSdXvGNDcMf73UmToiZGMVO5QRIazTmGfm+bKOnT5ildomeagYFdnQaHQH0J28EJqc4jqXOcQbicA==", - "license": "Apache-2.0", - "dependencies": { - "lodash": "^4.17.21" - }, - "peerDependencies": { - "vue": "^3.0.0" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@pkgr/core": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.2.tgz", - "integrity": "sha512-fdDH1LSGfZdTH2sxdpVMw31BanV28K/Gry0cVFxaNP77neJSkd82mM8ErPNYs9e+0O7SdHBLTDzDgwUuy18RnQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/@playwright/test": { - "version": "1.57.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.57.0.tgz", - "integrity": "sha512-6TyEnHgd6SArQO8UO2OMTxshln3QMWBtPGrOCgs3wVEmQmwyuNtB10IZMfmYDE0riwNR1cu4q+pPcxMVtaG3TA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright": "1.57.0" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", - "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.5.tgz", - "integrity": "sha512-iDGS/h7D8t7tvZ1t6+WPK04KD0MwzLZrG0se1hzBjSi5fyxlsiggoJHwh18PCFNn7tG43OWb6pdZ6Y+rMlmyNQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.5.tgz", - "integrity": "sha512-wrSAViWvZHBMMlWk6EJhvg8/rjxzyEhEdgfMMjREHEq11EtJ6IP6yfcCH57YAEca2Oe3FNCE9DSTgU70EIGmVw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.5.tgz", - "integrity": "sha512-S87zZPBmRO6u1YXQLwpveZm4JfPpAa6oHBX7/ghSiGH3rz/KDgAu1rKdGutV+WUI6tKDMbaBJomhnT30Y2t4VQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.5.tgz", - "integrity": "sha512-YTbnsAaHo6VrAczISxgpTva8EkfQus0VPEVJCEaboHtZRIb6h6j0BNxRBOwnDciFTZLDPW5r+ZBmhL/+YpTZgA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.5.tgz", - "integrity": "sha512-1T8eY2J8rKJWzaznV7zedfdhD1BqVs1iqILhmHDq/bqCUZsrMt+j8VCTHhP0vdfbHK3e1IQ7VYx3jlKqwlf+vw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.5.tgz", - "integrity": "sha512-sHTiuXyBJApxRn+VFMaw1U+Qsz4kcNlxQ742snICYPrY+DDL8/ZbaC4DVIB7vgZmp3jiDaKA0WpBdP0aqPJoBQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.5.tgz", - "integrity": "sha512-dV3T9MyAf0w8zPVLVBptVlzaXxka6xg1f16VAQmjg+4KMSTWDvhimI/Y6mp8oHwNrmnmVl9XxJ/w/mO4uIQONA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.5.tgz", - "integrity": "sha512-wIGYC1x/hyjP+KAu9+ewDI+fi5XSNiUi9Bvg6KGAh2TsNMA3tSEs+Sh6jJ/r4BV/bx/CyWu2ue9kDnIdRyafcQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.5.tgz", - "integrity": "sha512-Y+qVA0D9d0y2FRNiG9oM3Hut/DgODZbU9I8pLLPwAsU0tUKZ49cyV1tzmB/qRbSzGvY8lpgGkJuMyuhH7Ma+Vg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.5.tgz", - "integrity": "sha512-juaC4bEgJsyFVfqhtGLz8mbopaWD+WeSOYr5E16y+1of6KQjc0BpwZLuxkClqY1i8sco+MdyoXPNiCkQou09+g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.5.tgz", - "integrity": "sha512-rIEC0hZ17A42iXtHX+EPJVL/CakHo+tT7W0pbzdAGuWOt2jxDFh7A/lRhsNHBcqL4T36+UiAgwO8pbmn3dE8wA==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.5.tgz", - "integrity": "sha512-T7l409NhUE552RcAOcmJHj3xyZ2h7vMWzcwQI0hvn5tqHh3oSoclf9WgTl+0QqffWFG8MEVZZP1/OBglKZx52Q==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.5.tgz", - "integrity": "sha512-7OK5/GhxbnrMcxIFoYfhV/TkknarkYC1hqUw1wU2xUN3TVRLNT5FmBv4KkheSG2xZ6IEbRAhTooTV2+R5Tk0lQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.5.tgz", - "integrity": "sha512-GwuDBE/PsXaTa76lO5eLJTyr2k8QkPipAyOrs4V/KJufHCZBJ495VCGJol35grx9xryk4V+2zd3Ri+3v7NPh+w==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.5.tgz", - "integrity": "sha512-IAE1Ziyr1qNfnmiQLHBURAD+eh/zH1pIeJjeShleII7Vj8kyEm2PF77o+lf3WTHDpNJcu4IXJxNO0Zluro8bOw==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.5.tgz", - "integrity": "sha512-Pg6E+oP7GvZ4XwgRJBuSXZjcqpIW3yCBhK4BcsANvb47qMvAbCjR6E+1a/U2WXz1JJxp9/4Dno3/iSJLcm5auw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.5.tgz", - "integrity": "sha512-txGtluxDKTxaMDzUduGP0wdfng24y1rygUMnmlUJ88fzCCULCLn7oE5kb2+tRB+MWq1QDZT6ObT5RrR8HFRKqg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.5.tgz", - "integrity": "sha512-3DFiLPnTxiOQV993fMc+KO8zXHTcIjgaInrqlG8zDp1TlhYl6WgrOHuJkJQ6M8zHEcntSJsUp1XFZSY8C1DYbg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.5.tgz", - "integrity": "sha512-nggc/wPpNTgjGg75hu+Q/3i32R00Lq1B6N1DO7MCU340MRKL3WZJMjA9U4K4gzy3dkZPXm9E1Nc81FItBVGRlA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.5.tgz", - "integrity": "sha512-U/54pTbdQpPLBdEzCT6NBCFAfSZMvmjr0twhnD9f4EIvlm9wy3jjQ38yQj1AGznrNO65EWQMgm/QUjuIVrYF9w==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.5.tgz", - "integrity": "sha512-2NqKgZSuLH9SXBBV2dWNRCZmocgSOx8OJSdpRaEcRlIfX8YrKxUT6z0F1NpvDVhOsl190UFTRh2F2WDWWCYp3A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.5.tgz", - "integrity": "sha512-JRpZUhCfhZ4keB5v0fe02gQJy05GqboPOaxvjugW04RLSYYoB/9t2lx2u/tMs/Na/1NXfY8QYjgRljRpN+MjTQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@skjnldsv/vue-plyr": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@skjnldsv/vue-plyr/-/vue-plyr-7.5.0.tgz", - "integrity": "sha512-JmbKPe8Eh0yTP+7w4VYeqGhrUqDKM4qSsCn37CbADAvvwMvceBwYC0IBXil0RBtyzStxwXPtOj1oI//lQ5DeTw==", - "license": "MIT", - "dependencies": { - "plyr": "^3.7.8", - "vue": "^3.3.4" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0", - "npm": "^9.0.0 || ^10.0.0" - } - }, - "node_modules/@types/chai": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", - "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/deep-eql": "*", - "assertion-error": "^2.0.1" - } - }, - "node_modules/@types/deep-eql": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", - "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "license": "MIT", - "peer": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "license": "MIT" - }, - "node_modules/@types/localforage": { - "version": "0.0.34", - "resolved": "https://registry.npmjs.org/@types/localforage/-/localforage-0.0.34.tgz", - "integrity": "sha512-tJxahnjm9dEI1X+hQSC5f2BSd/coZaqbIl1m3TCl0q9SVuC52XcXfV0XmoCU1+PmjyucuVITwoTnN8OlTbEXXA==", - "deprecated": "This is a stub types definition for localforage (https://github.com/localForage/localForage). localforage provides its own type definitions, so you don't need @types/localforage installed!", - "license": "MIT", - "dependencies": { - "localforage": "*" - } - }, - "node_modules/@types/node": { - "version": "24.10.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.4.tgz", - "integrity": "sha512-vnDVpYPMzs4wunl27jHrfmwojOGKya0xyM3sH+UE5iv5uPS6vX7UIoh6m+vQc5LGBq52HBKPIn/zcSZVzeDEZg==", - "license": "MIT", - "dependencies": { - "undici-types": "~7.16.0" - } - }, - "node_modules/@types/trusted-types": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", - "license": "MIT", - "optional": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", - "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/type-utils": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", - "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", - "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", - "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", - "dev": true, - "license": "ISC" - }, - "node_modules/@vitejs/plugin-vue": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", - "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "vite": "^5.0.0 || ^6.0.0", - "vue": "^3.2.25" - } - }, - "node_modules/@vitest/expect": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", - "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/chai": "^5.2.2", - "@vitest/spy": "3.2.4", - "@vitest/utils": "3.2.4", - "chai": "^5.2.0", - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/mocker": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", - "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/spy": "3.2.4", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.17" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "msw": "^2.4.9", - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" - }, - "peerDependenciesMeta": { - "msw": { - "optional": true - }, - "vite": { - "optional": true - } - } - }, - "node_modules/@vitest/mocker/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/@vitest/pretty-format": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", - "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/runner": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz", - "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/utils": "3.2.4", - "pathe": "^2.0.3", - "strip-literal": "^3.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/runner/node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@vitest/snapshot": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz", - "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "3.2.4", - "magic-string": "^0.30.17", - "pathe": "^2.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/snapshot/node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@vitest/spy": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", - "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyspy": "^4.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/utils": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz", - "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "3.2.4", - "loupe": "^3.1.4", - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@volar/language-core": { - "version": "2.4.15", - "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.15.tgz", - "integrity": "sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/source-map": "2.4.15" - } - }, - "node_modules/@volar/source-map": { - "version": "2.4.15", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.15.tgz", - "integrity": "sha512-CPbMWlUN6hVZJYGcU/GSoHu4EnCHiLaXI9n8c9la6RaI9W5JHX+NqG+GSQcB0JdC2FIBLdZJwGsfKyBB71VlTg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@volar/typescript": { - "version": "2.4.15", - "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.15.tgz", - "integrity": "sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/language-core": "2.4.15", - "path-browserify": "^1.0.1", - "vscode-uri": "^3.0.8" - } - }, - "node_modules/@vue/compiler-core": { - "version": "3.5.25", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.25.tgz", - "integrity": "sha512-vay5/oQJdsNHmliWoZfHPoVZZRmnSWhug0BYT34njkYTPqClh3DNWLkZNJBVSjsNMrg0CCrBfoKkjZQPM/QVUw==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.28.5", - "@vue/shared": "3.5.25", - "entities": "^4.5.0", - "estree-walker": "^2.0.2", - "source-map-js": "^1.2.1" - } - }, - "node_modules/@vue/compiler-dom": { - "version": "3.5.25", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.25.tgz", - "integrity": "sha512-4We0OAcMZsKgYoGlMjzYvaoErltdFI2/25wqanuTu+S4gismOTRTBPi4IASOjxWdzIwrYSjnqONfKvuqkXzE2Q==", - "license": "MIT", - "dependencies": { - "@vue/compiler-core": "3.5.25", - "@vue/shared": "3.5.25" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "3.5.25", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.25.tgz", - "integrity": "sha512-PUgKp2rn8fFsI++lF2sO7gwO2d9Yj57Utr5yEsDf3GNaQcowCLKL7sf+LvVFvtJDXUp/03+dC6f2+LCv5aK1ag==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.28.5", - "@vue/compiler-core": "3.5.25", - "@vue/compiler-dom": "3.5.25", - "@vue/compiler-ssr": "3.5.25", - "@vue/shared": "3.5.25", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.21", - "postcss": "^8.5.6", - "source-map-js": "^1.2.1" - } - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.5.25", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.25.tgz", - "integrity": "sha512-ritPSKLBcParnsKYi+GNtbdbrIE1mtuFEJ4U1sWeuOMlIziK5GtOL85t5RhsNy4uWIXPgk+OUdpnXiTdzn8o3A==", - "license": "MIT", - "dependencies": { - "@vue/compiler-dom": "3.5.25", - "@vue/shared": "3.5.25" - } - }, - "node_modules/@vue/compiler-vue2": { - "version": "2.7.16", - "resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", - "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", - "dev": true, - "license": "MIT", - "dependencies": { - "de-indent": "^1.0.2", - "he": "^1.2.0" - } - }, - "node_modules/@vue/devtools-api": { - "version": "6.6.4", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", - "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", - "license": "MIT" - }, - "node_modules/@vue/eslint-config-typescript": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-13.0.0.tgz", - "integrity": "sha512-MHh9SncG/sfqjVqjcuFLOLD6Ed4dRAis4HNt0dXASeAuLqIAx4YMB1/m2o4pUKK1vCt8fUvYG8KKX2Ot3BVZTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/eslint-plugin": "^7.1.1", - "@typescript-eslint/parser": "^7.1.1", - "vue-eslint-parser": "^9.3.1" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "peerDependencies": { - "eslint": "^8.56.0", - "eslint-plugin-vue": "^9.0.0", - "typescript": ">=4.7.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@vue/language-core": { - "version": "2.2.12", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.12.tgz", - "integrity": "sha512-IsGljWbKGU1MZpBPN+BvPAdr55YPkj2nB/TBNGNC32Vy2qLG25DYu/NBN2vNtZqdRbTRjaoYrahLrToim2NanA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/language-core": "2.4.15", - "@vue/compiler-dom": "^3.5.0", - "@vue/compiler-vue2": "^2.7.16", - "@vue/shared": "^3.5.0", - "alien-signals": "^1.0.3", - "minimatch": "^9.0.3", - "muggle-string": "^0.4.1", - "path-browserify": "^1.0.1" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@vue/language-core/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@vue/language-core/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@vue/reactivity": { - "version": "3.5.25", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.25.tgz", - "integrity": "sha512-5xfAypCQepv4Jog1U4zn8cZIcbKKFka3AgWHEFQeK65OW+Ys4XybP6z2kKgws4YB43KGpqp5D/K3go2UPPunLA==", - "license": "MIT", - "dependencies": { - "@vue/shared": "3.5.25" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.5.25", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.25.tgz", - "integrity": "sha512-Z751v203YWwYzy460bzsYQISDfPjHTl+6Zzwo/a3CsAf+0ccEjQ8c+0CdX1WsumRTHeywvyUFtW6KvNukT/smA==", - "license": "MIT", - "dependencies": { - "@vue/reactivity": "3.5.25", - "@vue/shared": "3.5.25" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.5.25", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.25.tgz", - "integrity": "sha512-a4WrkYFbb19i9pjkz38zJBg8wa/rboNERq3+hRRb0dHiJh13c+6kAbgqCPfMaJ2gg4weWD3APZswASOfmKwamA==", - "license": "MIT", - "dependencies": { - "@vue/reactivity": "3.5.25", - "@vue/runtime-core": "3.5.25", - "@vue/shared": "3.5.25", - "csstype": "^3.1.3" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.5.25", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.25.tgz", - "integrity": "sha512-UJaXR54vMG61i8XNIzTSf2Q7MOqZHpp8+x3XLGtE3+fL+nQd+k7O5+X3D/uWrnQXOdMw5VPih+Uremcw+u1woQ==", - "license": "MIT", - "dependencies": { - "@vue/compiler-ssr": "3.5.25", - "@vue/shared": "3.5.25" - }, - "peerDependencies": { - "vue": "3.5.25" - } - }, - "node_modules/@vue/shared": { - "version": "3.5.25", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.25.tgz", - "integrity": "sha512-AbOPdQQnAnzs58H2FrrDxYj/TJfmeS2jdfEEhgiKINy+bnOANmVizIEgq1r+C5zsbs6l1CCQxtcj71rwNQ4jWg==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "license": "MIT", - "peer": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "license": "MIT", - "peer": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "license": "MIT", - "peer": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.13.2", - "@webassemblyjs/helper-api-error": "1.13.2", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "license": "MIT", - "peer": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/wasm-gen": "1.14.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "license": "MIT", - "peer": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/helper-wasm-section": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-opt": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1", - "@webassemblyjs/wast-printer": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-api-error": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xmldom/xmldom": { - "version": "0.7.13", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.13.tgz", - "integrity": "sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==", - "deprecated": "this version is no longer supported, please update to at least 0.8.*", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "license": "Apache-2.0", - "peer": true - }, - "node_modules/ace-builds": { - "version": "1.43.5", - "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.43.5.tgz", - "integrity": "sha512-iH5FLBKdB7SVn9GR37UgA/tpQS8OTWIxWAuq3Ofaw+Qbc69FfPXsXd9jeW7KRG2xKpKMqBDnu0tHBrCWY5QI7A==", - "license": "BSD-3-Clause" - }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-phases": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", - "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "acorn": "^8.14.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/adm-zip": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz", - "integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0" - } - }, - "node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "license": "MIT", - "peer": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT", - "peer": true - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/alien-signals": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-1.0.13.tgz", - "integrity": "sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/assertion-error": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/axios": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", - "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/baseline-browser-mapping": { - "version": "2.9.8", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.8.tgz", - "integrity": "sha512-Y1fOuNDowLfgKOypdc9SPABfoWXuZHBOyCS4cD52IeZBhr4Md6CLLs6atcxVrzRmQ06E7hSlm5bHHApPKR/byA==", - "license": "Apache-2.0", - "peer": true, - "bin": { - "baseline-browser-mapping": "dist/cli.js" - } - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", - "license": "MIT" - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true, - "license": "ISC" - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", - "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "baseline-browser-mapping": "^2.9.0", - "caniuse-lite": "^1.0.30001759", - "electron-to-chromium": "^1.5.263", - "node-releases": "^2.0.27", - "update-browserslist-db": "^1.2.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "license": "MIT", - "peer": true - }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001760", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001760.tgz", - "integrity": "sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0", - "peer": true - }, - "node_modules/chai": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", - "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "assertion-error": "^2.0.1", - "check-error": "^2.1.1", - "deep-eql": "^5.0.1", - "loupe": "^3.1.0", - "pathval": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/check-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", - "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - } - }, - "node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/clipboard": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz", - "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==", - "license": "MIT", - "dependencies": { - "good-listener": "^1.2.2", - "select": "^1.1.2", - "tiny-emitter": "^2.0.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "license": "MIT", - "peer": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/confbox": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", - "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/core-js": { - "version": "3.47.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.47.0.tgz", - "integrity": "sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-vars-ponyfill": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/css-vars-ponyfill/-/css-vars-ponyfill-2.4.9.tgz", - "integrity": "sha512-aZyLue5bdiGVNCiCclNjo123D8I7kyoYNUaAvz+H1JalX1ye4Ilz7jNRRH5YbM+dYD6ucejiydGwk7lol/GCXQ==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.2", - "get-css-data": "^2.0.2" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssstyle": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", - "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@asamuzakjp/css-color": "^3.2.0", - "rrweb-cssom": "^0.8.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/cssstyle/node_modules/rrweb-cssom": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", - "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", - "dev": true, - "license": "MIT" - }, - "node_modules/csstype": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "license": "MIT" - }, - "node_modules/custom-event-polyfill": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/custom-event-polyfill/-/custom-event-polyfill-1.0.7.tgz", - "integrity": "sha512-TDDkd5DkaZxZFM8p+1I3yAlvM3rSr1wbrOliG4yJiwinMZN8z/iGL7BTlDkrJcYTmgUSb4ywVCc3ZaUtOtC76w==", - "license": "MIT" - }, - "node_modules/d": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", - "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", - "license": "ISC", - "dependencies": { - "es5-ext": "^0.10.64", - "type": "^2.7.2" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/data-urls": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", - "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/de-indent": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", - "dev": true, - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decimal.js": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", - "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", - "dev": true, - "license": "MIT" - }, - "node_modules/deep-eql": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", - "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/deepl-node": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/deepl-node/-/deepl-node-1.24.0.tgz", - "integrity": "sha512-vZ9jUpzJRvFamgVOfm1LDy3YYJ7k8FhxtAX9whR92EFshLIP9JlYS0HFwXL5yYsfqzXdb/wssGRSWvR48t7nSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": ">=12.0", - "adm-zip": "^0.5.16", - "axios": "^1.7.4", - "form-data": "^3.0.0", - "loglevel": ">=1.6.2", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=12.0" - } - }, - "node_modules/deepl-node/node_modules/form-data": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.4.tgz", - "integrity": "sha512-f0cRzm6dkyVYV3nPoooP8XlccPQukegwhAnpoLcXy+X+A8KfpGOoXwDr9FLZd3wzgLaBGQBE3lY93Zm/i1JvIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.35" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/delegate": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", - "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", - "license": "MIT" - }, - "node_modules/dingbat-to-unicode": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dingbat-to-unicode/-/dingbat-to-unicode-1.0.1.tgz", - "integrity": "sha512-98l0sW87ZT58pU4i61wa2OHwxbiYSbuxsCBozaVnYX2iCnr3bLM3fIes1/ej7h1YdOKuKt/MLs706TVnALA65w==", - "license": "BSD-2-Clause" - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dompurify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.3.1.tgz", - "integrity": "sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q==", - "license": "(MPL-2.0 OR Apache-2.0)", - "optionalDependencies": { - "@types/trusted-types": "^2.0.7" - } - }, - "node_modules/duck": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/duck/-/duck-0.1.12.tgz", - "integrity": "sha512-wkctla1O6VfP89gQ+J/yDesM0S7B7XLXjKGzXxMDVFg7uEn706niAtyYovKbyq1oT9YwDcly721/iUWoc8MVRg==", - "license": "BSD", - "dependencies": { - "underscore": "^1.13.1" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.267", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", - "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", - "license": "ISC", - "peer": true - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.18.4", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz", - "integrity": "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==", - "license": "MIT", - "peer": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/epubjs": { - "version": "0.3.93", - "resolved": "https://registry.npmjs.org/epubjs/-/epubjs-0.3.93.tgz", - "integrity": "sha512-c06pNSdBxcXv3dZSbXAVLE1/pmleRhOT6mXNZo6INKmvuKpYB65MwU/lO7830czCtjIiK9i+KR+3S+p0wtljrw==", - "license": "BSD-2-Clause", - "dependencies": { - "@types/localforage": "0.0.34", - "@xmldom/xmldom": "^0.7.5", - "core-js": "^3.18.3", - "event-emitter": "^0.3.5", - "jszip": "^3.7.1", - "localforage": "^1.10.0", - "lodash": "^4.17.21", - "marks-pane": "^1.0.9", - "path-webpack": "0.0.3" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", - "dev": true, - "license": "MIT" - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es5-ext": { - "version": "0.10.64", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", - "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", - "hasInstallScript": true, - "license": "ISC", - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "esniff": "^2.0.1", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "license": "MIT", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", - "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", - "license": "ISC", - "dependencies": { - "d": "^1.0.2", - "ext": "^1.7.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/esbuild": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", - "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.12", - "@esbuild/android-arm": "0.25.12", - "@esbuild/android-arm64": "0.25.12", - "@esbuild/android-x64": "0.25.12", - "@esbuild/darwin-arm64": "0.25.12", - "@esbuild/darwin-x64": "0.25.12", - "@esbuild/freebsd-arm64": "0.25.12", - "@esbuild/freebsd-x64": "0.25.12", - "@esbuild/linux-arm": "0.25.12", - "@esbuild/linux-arm64": "0.25.12", - "@esbuild/linux-ia32": "0.25.12", - "@esbuild/linux-loong64": "0.25.12", - "@esbuild/linux-mips64el": "0.25.12", - "@esbuild/linux-ppc64": "0.25.12", - "@esbuild/linux-riscv64": "0.25.12", - "@esbuild/linux-s390x": "0.25.12", - "@esbuild/linux-x64": "0.25.12", - "@esbuild/netbsd-arm64": "0.25.12", - "@esbuild/netbsd-x64": "0.25.12", - "@esbuild/openbsd-arm64": "0.25.12", - "@esbuild/openbsd-x64": "0.25.12", - "@esbuild/openharmony-arm64": "0.25.12", - "@esbuild/sunos-x64": "0.25.12", - "@esbuild/win32-arm64": "0.25.12", - "@esbuild/win32-ia32": "0.25.12", - "@esbuild/win32-x64": "0.25.12" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-compat-utils": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.6.5.tgz", - "integrity": "sha512-vAUHYzue4YAa2hNACjB8HvUQj5yehAZgiClyFVVom9cP8z5NSFq3PwB/TtJslN2zAMgRX6FCFCjYBbQh71g5RQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "eslint": ">=6.0.0" - } - }, - "node_modules/eslint-config-prettier": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.2.tgz", - "integrity": "sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ==", - "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-plugin-vue": { - "version": "9.33.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.33.0.tgz", - "integrity": "sha512-174lJKuNsuDIlLpjeXc5E2Tss8P44uIimAfGD0b90k0NoirJqpG7stLuU9Vp/9ioTOrQdWVREc4mRd1BD+CvGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "globals": "^13.24.0", - "natural-compare": "^1.4.0", - "nth-check": "^2.1.1", - "postcss-selector-parser": "^6.0.15", - "semver": "^7.6.3", - "vue-eslint-parser": "^9.4.3", - "xml-name-validator": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" - } - }, - "node_modules/eslint-plugin-vue/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/esniff": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", - "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", - "license": "ISC", - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.62", - "event-emitter": "^0.3.5", - "type": "^2.7.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.15.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "license": "MIT" - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", - "license": "MIT", - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/expect-type": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", - "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "license": "ISC", - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", - "dev": true, - "license": "ISC" - }, - "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fs-extra": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", - "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-css-data": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/get-css-data/-/get-css-data-2.1.1.tgz", - "integrity": "sha512-JpMa/f5P4mDXKg6l5/2cHL5xNY77Jap7tHyduMa6BF0E2a7bQ6Tvaz2BIMjeVYZYLcmOZ5w2Ro0yVJEI41tMbw==", - "license": "MIT" - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/glob": { - "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^8.0.2", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "license": "BSD-2-Clause", - "peer": true - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/globals": { - "version": "15.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", - "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby/node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/good-listener": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", - "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", - "license": "MIT", - "dependencies": { - "delegate": "^3.1.2" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/highlight.js": { - "version": "11.11.1", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz", - "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/html-encoding-sniffer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", - "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-encoding": "^3.1.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ignore": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-6.0.2.tgz", - "integrity": "sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "license": "MIT" - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-language-code": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-language-code/-/is-language-code-3.1.0.tgz", - "integrity": "sha512-zJdQ3QTeLye+iphMeK3wks+vXSRFKh68/Pnlw7aOfApFSEIOhYa8P9vwwa6QrImNNBMJTiL1PpYF0f4BxDuEgA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.14.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsdom": { - "version": "25.0.1", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz", - "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssstyle": "^4.1.0", - "data-urls": "^5.0.0", - "decimal.js": "^10.4.3", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^4.0.0", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.5", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.12", - "parse5": "^7.1.2", - "rrweb-cssom": "^0.7.1", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^5.0.0", - "w3c-xmlserializer": "^5.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^3.1.1", - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0", - "ws": "^8.18.0", - "xml-name-validator": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "canvas": "^2.11.2" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsdom/node_modules/xml-name-validator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", - "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "license": "MIT", - "peer": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-eslint-parser": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.2.tgz", - "integrity": "sha512-1e4qoRgnn448pRuMvKGsFFymUCquZV0mpGgOyIKNgD3JVDTsVJyRBGH/Fm0tBb8WsWGgmB1mDe6/yJMQM37DUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.5.0", - "eslint-visitor-keys": "^3.0.0", - "espree": "^9.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" - } - }, - "node_modules/jsonc-eslint-parser/node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jszip": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", - "license": "(MIT OR GPL-3.0-or-later)", - "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "license": "MIT", - "dependencies": { - "immediate": "~3.0.5" - } - }, - "node_modules/loader-runner": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", - "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6.11.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/loadjs": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loadjs/-/loadjs-4.3.0.tgz", - "integrity": "sha512-vNX4ZZLJBeDEOBvdr2v/F+0aN5oMuPu7JTqrMwp+DtgK+AryOlpy6Xtm2/HpNr+azEa828oQjOtWsB6iDtSfSQ==", - "license": "MIT" - }, - "node_modules/localforage": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", - "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", - "license": "Apache-2.0", - "dependencies": { - "lie": "3.1.1" - } - }, - "node_modules/localforage/node_modules/lie": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", - "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", - "license": "MIT", - "dependencies": { - "immediate": "~3.0.5" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/loglevel": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz", - "integrity": "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/loglevel" - } - }, - "node_modules/lop": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/lop/-/lop-0.4.2.tgz", - "integrity": "sha512-RefILVDQ4DKoRZsJ4Pj22TxE3omDO47yFpkIBoDKzkqPRISs5U1cnAdg/5583YPkWPaLIYHOKRMQSvjFsO26cw==", - "license": "BSD-2-Clause", - "dependencies": { - "duck": "^0.1.12", - "option": "~0.2.1", - "underscore": "^1.13.1" - } - }, - "node_modules/loupe": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", - "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, - "node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, - "node_modules/mammoth": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/mammoth/-/mammoth-1.11.0.tgz", - "integrity": "sha512-BcEqqY/BOwIcI1iR5tqyVlqc3KIaMRa4egSoK83YAVrBf6+yqdAAbtUcFDCWX8Zef8/fgNZ6rl4VUv+vVX8ddQ==", - "license": "BSD-2-Clause", - "dependencies": { - "@xmldom/xmldom": "^0.8.6", - "argparse": "~1.0.3", - "base64-js": "^1.5.1", - "bluebird": "~3.4.0", - "dingbat-to-unicode": "^1.0.1", - "jszip": "^3.7.1", - "lop": "^0.4.2", - "path-is-absolute": "^1.0.0", - "underscore": "^1.13.1", - "xmlbuilder": "^10.0.0" - }, - "bin": { - "mammoth": "bin/mammoth" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/mammoth/node_modules/@xmldom/xmldom": { - "version": "0.8.11", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz", - "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/mammoth/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/marked": { - "version": "15.0.12", - "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", - "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", - "license": "MIT", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/marks-pane": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/marks-pane/-/marks-pane-1.0.9.tgz", - "integrity": "sha512-Ahs4oeG90tbdPWwAJkAAoHg2lRR8lAs9mZXETNPO9hYg3AkjUJBKi1NQ4aaIQZVGrig7c/3NUV1jANl8rFTeMg==", - "license": "MIT" - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "license": "MIT", - "peer": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minipass": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", - "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/mlly": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.0.tgz", - "integrity": "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.15.0", - "pathe": "^2.0.3", - "pkg-types": "^1.3.1", - "ufo": "^1.6.1" - } - }, - "node_modules/mlly/node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/muggle-string": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", - "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "license": "MIT", - "peer": true - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "license": "ISC" - }, - "node_modules/node-releases": { - "version": "2.0.27", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", - "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", - "license": "MIT", - "peer": true - }, - "node_modules/normalize.css": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz", - "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==", - "license": "MIT" - }, - "node_modules/npm-run-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", - "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^4.0.0", - "unicorn-magic": "^0.3.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nwsapi": { - "version": "2.2.23", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.23.tgz", - "integrity": "sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/option": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/option/-/option-0.2.4.tgz", - "integrity": "sha512-pkEqbDyl8ou5cpq+VsnQbe/WlEy5qS7xPzMS1U55OCG9KPvwFD46zDbxQIj3egJSFc3D+XhYOPUzz49zQAVy7A==", - "license": "BSD-2-Clause" - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "license": "(MIT AND Zlib)" - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^6.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-webpack": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/path-webpack/-/path-webpack-0.0.3.tgz", - "integrity": "sha512-AmeDxedoo5svf7aB3FYqSAKqMxys014lVKBzy1o/5vv9CtU7U4wgGWL1dA2o6MOzcD53ScN4Jmiq6VbtLz1vIQ==", - "license": "MIT" - }, - "node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pathval": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", - "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.16" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-types": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", - "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "confbox": "^0.1.8", - "mlly": "^1.7.4", - "pathe": "^2.0.1" - } - }, - "node_modules/pkg-types/node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, - "node_modules/playwright": { - "version": "1.57.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.57.0.tgz", - "integrity": "sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.57.0" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.57.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.57.0.tgz", - "integrity": "sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/plyr": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/plyr/-/plyr-3.8.3.tgz", - "integrity": "sha512-0+iI5uw0WRvtKBpgPCkmQQv7ucHVQKTEo6UFJjgJ8cy/JZhy0dQqshHQVitHXV6l2O3MzhgnuvQ95VSkWcWeSw==", - "license": "MIT", - "dependencies": { - "core-js": "^3.45.1", - "custom-event-polyfill": "^1.0.7", - "loadjs": "^4.3.0", - "rangetouch": "^2.0.1", - "url-polyfill": "^1.1.13" - } - }, - "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "license": "MIT" - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT" - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/qrcode.vue": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/qrcode.vue/-/qrcode.vue-3.6.0.tgz", - "integrity": "sha512-vQcl2fyHYHMjDO1GguCldJxepq2izQjBkDEEu9NENgfVKP6mv/e2SU62WbqYHGwTgWXLhxZ1NCD1dAZKHQq1fg==", - "license": "MIT", - "peerDependencies": { - "vue": "^3.0.0" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/rangetouch": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/rangetouch/-/rangetouch-2.0.1.tgz", - "integrity": "sha512-sln+pNSc8NGaHoLzwNBssFSf/rSYkqeBXzX1AtJlkJiUaVSJSbRAWJk+4omsXkN+EJalzkZhWQ3th1m0FpR5xA==", - "license": "MIT" - }, - "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.18.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "4.53.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.5.tgz", - "integrity": "sha512-iTNAbFSlRpcHeeWu73ywU/8KuU/LZmNCSxp6fjQkJBD3ivUb8tpDrXhIxEzA05HlYMEwmtaUnb3RP+YNv162OQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.8" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.53.5", - "@rollup/rollup-android-arm64": "4.53.5", - "@rollup/rollup-darwin-arm64": "4.53.5", - "@rollup/rollup-darwin-x64": "4.53.5", - "@rollup/rollup-freebsd-arm64": "4.53.5", - "@rollup/rollup-freebsd-x64": "4.53.5", - "@rollup/rollup-linux-arm-gnueabihf": "4.53.5", - "@rollup/rollup-linux-arm-musleabihf": "4.53.5", - "@rollup/rollup-linux-arm64-gnu": "4.53.5", - "@rollup/rollup-linux-arm64-musl": "4.53.5", - "@rollup/rollup-linux-loong64-gnu": "4.53.5", - "@rollup/rollup-linux-ppc64-gnu": "4.53.5", - "@rollup/rollup-linux-riscv64-gnu": "4.53.5", - "@rollup/rollup-linux-riscv64-musl": "4.53.5", - "@rollup/rollup-linux-s390x-gnu": "4.53.5", - "@rollup/rollup-linux-x64-gnu": "4.53.5", - "@rollup/rollup-linux-x64-musl": "4.53.5", - "@rollup/rollup-openharmony-arm64": "4.53.5", - "@rollup/rollup-win32-arm64-msvc": "4.53.5", - "@rollup/rollup-win32-ia32-msvc": "4.53.5", - "@rollup/rollup-win32-x64-gnu": "4.53.5", - "@rollup/rollup-win32-x64-msvc": "4.53.5", - "fsevents": "~2.3.2" - } - }, - "node_modules/rrweb-cssom": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", - "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", - "dev": true, - "license": "MIT" - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, - "license": "MIT" - }, - "node_modules/saxes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", - "dev": true, - "license": "ISC", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=v12.22.7" - } - }, - "node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/select": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", - "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==", - "license": "MIT" - }, - "node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "license": "MIT" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/siginfo": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "dev": true, - "license": "ISC" - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "license": "MIT", - "peer": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "license": "BSD-3-Clause" - }, - "node_modules/srt-support-for-html5-videos": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/srt-support-for-html5-videos/-/srt-support-for-html5-videos-2.6.11.tgz", - "integrity": "sha512-rHsP8iaE7vwhPHpaJPj178YZn6ak1jZvjtEA+XrRm9hhOfC3KZVK/TdNyZIi+fBFtSC+EkscWkyNFKiMuLE4IQ==" - }, - "node_modules/stackback": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", - "dev": true, - "license": "MIT" - }, - "node_modules/std-env": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", - "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", - "dev": true, - "license": "MIT" - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-literal": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz", - "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "js-tokens": "^9.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/strip-literal/node_modules/js-tokens": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", - "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true, - "license": "MIT" - }, - "node_modules/synckit": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.3.tgz", - "integrity": "sha512-JJoOEKTfL1urb1mDoEblhD9NhEbWmq9jHEMEnxoC4ujUaZ4itA8vKgwkFAyNClgxplLi9tsUKX+EduK0p/l7sg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@pkgr/core": "^0.1.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/tapable": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", - "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/tar-mini": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/tar-mini/-/tar-mini-0.2.0.tgz", - "integrity": "sha512-+qfUHz700DWnRutdUsxRRVZ38G1Qr27OetwaMYTdg8hcPxf46U0S1Zf76dQMWRBmusOt2ZCK5kbIaiLkoGO7WQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/terser": { - "version": "5.44.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.1.tgz", - "integrity": "sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==", - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.15.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.16", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz", - "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==", - "license": "MIT", - "peer": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "jest-worker": "^27.4.5", - "schema-utils": "^4.3.0", - "serialize-javascript": "^6.0.2", - "terser": "^5.31.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT", - "peer": true - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", - "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, - "node_modules/tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", - "license": "MIT" - }, - "node_modules/tiny-invariant": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinybench": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", - "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinyexec": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", - "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/tinypool": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", - "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.0.0 || >=20.0.0" - } - }, - "node_modules/tinyrainbow": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", - "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tinyspy": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz", - "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tldts": { - "version": "6.1.86", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", - "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "tldts-core": "^6.1.86" - }, - "bin": { - "tldts": "bin/cli.js" - } - }, - "node_modules/tldts-core": { - "version": "6.1.86", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", - "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", - "dev": true, - "license": "MIT" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tough-cookie": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", - "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tldts": "^6.1.32" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/tr46": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", - "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", - "dev": true, - "license": "MIT", - "dependencies": { - "punycode": "^2.3.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/ts-api-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", - "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, - "node_modules/type": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", - "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", - "license": "ISC" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "devOptional": true, - "license": "Apache-2.0", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/ufo": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", - "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", - "dev": true, - "license": "MIT" - }, - "node_modules/underscore": { - "version": "1.13.7", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", - "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", - "license": "MIT" - }, - "node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", - "license": "MIT" - }, - "node_modules/unicorn-magic": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", - "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unplugin": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.16.1.tgz", - "integrity": "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.14.0", - "webpack-virtual-modules": "^0.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", - "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-polyfill": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/url-polyfill/-/url-polyfill-1.1.14.tgz", - "integrity": "sha512-p4f3TTAG6ADVF3mwbXw7hGw+QJyw5CnNGvYh5fCuQQZIiuKUswqcznyV3pGDP9j0TSmC4UvRKm8kl1QsX1diiQ==", - "license": "MIT" - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/vite": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", - "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.25.0", - "fdir": "^6.4.4", - "picomatch": "^4.0.2", - "postcss": "^8.5.3", - "rollup": "^4.34.9", - "tinyglobby": "^0.2.13" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "jiti": ">=1.21.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/vite-node": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", - "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cac": "^6.7.14", - "debug": "^4.4.1", - "es-module-lexer": "^1.7.0", - "pathe": "^2.0.3", - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" - }, - "bin": { - "vite-node": "vite-node.mjs" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/vite-node/node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, - "node_modules/vite-plugin-checker": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/vite-plugin-checker/-/vite-plugin-checker-0.10.3.tgz", - "integrity": "sha512-f4sekUcDPF+T+GdbbE8idb1i2YplBAoH+SfRS0e/WRBWb2rYb1Jf5Pimll0Rj+3JgIYWwG2K5LtBPCXxoibkLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "chokidar": "^4.0.3", - "npm-run-path": "^6.0.0", - "picocolors": "^1.1.1", - "picomatch": "^4.0.3", - "strip-ansi": "^7.1.0", - "tiny-invariant": "^1.3.3", - "tinyglobby": "^0.2.14", - "vscode-uri": "^3.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "peerDependencies": { - "@biomejs/biome": ">=1.7", - "eslint": ">=7", - "meow": "^13.2.0", - "optionator": "^0.9.4", - "stylelint": ">=16", - "typescript": "*", - "vite": ">=2.0.0", - "vls": "*", - "vti": "*", - "vue-tsc": "~2.2.10 || ^3.0.0" - }, - "peerDependenciesMeta": { - "@biomejs/biome": { - "optional": true - }, - "eslint": { - "optional": true - }, - "meow": { - "optional": true - }, - "optionator": { - "optional": true - }, - "stylelint": { - "optional": true - }, - "typescript": { - "optional": true - }, - "vls": { - "optional": true - }, - "vti": { - "optional": true - }, - "vue-tsc": { - "optional": true - } - } - }, - "node_modules/vite-plugin-checker/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/vite-plugin-checker/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/vite-plugin-compression2": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/vite-plugin-compression2/-/vite-plugin-compression2-1.4.0.tgz", - "integrity": "sha512-UEk0Bq1IkkwqbDLoLOHZ8WTmN1QbvR28fvNl2liB88/6SG1oLrTVkxfjqW3pdla/rKQ6QXn+pJpv3GBbl+k56g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^5.1.0", - "tar-mini": "^0.2.0" - }, - "peerDependencies": { - "vite": "^2.0.0||^3.0.0||^4.0.0||^5.0.0 ||^6.0.0" - } - }, - "node_modules/vite/node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/vitest": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", - "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/chai": "^5.2.2", - "@vitest/expect": "3.2.4", - "@vitest/mocker": "3.2.4", - "@vitest/pretty-format": "^3.2.4", - "@vitest/runner": "3.2.4", - "@vitest/snapshot": "3.2.4", - "@vitest/spy": "3.2.4", - "@vitest/utils": "3.2.4", - "chai": "^5.2.0", - "debug": "^4.4.1", - "expect-type": "^1.2.1", - "magic-string": "^0.30.17", - "pathe": "^2.0.3", - "picomatch": "^4.0.2", - "std-env": "^3.9.0", - "tinybench": "^2.9.0", - "tinyexec": "^0.3.2", - "tinyglobby": "^0.2.14", - "tinypool": "^1.1.1", - "tinyrainbow": "^2.0.0", - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", - "vite-node": "3.2.4", - "why-is-node-running": "^2.3.0" - }, - "bin": { - "vitest": "vitest.mjs" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "@edge-runtime/vm": "*", - "@types/debug": "^4.1.12", - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "@vitest/browser": "3.2.4", - "@vitest/ui": "3.2.4", - "happy-dom": "*", - "jsdom": "*" - }, - "peerDependenciesMeta": { - "@edge-runtime/vm": { - "optional": true - }, - "@types/debug": { - "optional": true - }, - "@types/node": { - "optional": true - }, - "@vitest/browser": { - "optional": true - }, - "@vitest/ui": { - "optional": true - }, - "happy-dom": { - "optional": true - }, - "jsdom": { - "optional": true - } - } - }, - "node_modules/vitest/node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, - "node_modules/vscode-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", - "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/vue": { - "version": "3.5.25", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.25.tgz", - "integrity": "sha512-YLVdgv2K13WJ6n+kD5owehKtEXwdwXuj2TTyJMsO7pSeKw2bfRNZGjhB7YzrpbMYj5b5QsUebHpOqR3R3ziy/g==", - "license": "MIT", - "dependencies": { - "@vue/compiler-dom": "3.5.25", - "@vue/compiler-sfc": "3.5.25", - "@vue/runtime-dom": "3.5.25", - "@vue/server-renderer": "3.5.25", - "@vue/shared": "3.5.25" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/vue-eslint-parser": { - "version": "9.4.3", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", - "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.4", - "eslint-scope": "^7.1.1", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.0", - "lodash": "^4.17.21", - "semver": "^7.3.6" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=6.0.0" - } - }, - "node_modules/vue-eslint-parser/node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/vue-i18n": { - "version": "9.14.5", - "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.14.5.tgz", - "integrity": "sha512-0jQ9Em3ymWngyiIkj0+c/k7WgaPO+TNzjKSNq9BvBQaKJECqn9cd9fL4tkDhB5G1QBskGl9YxxbDAhgbFtpe2g==", - "license": "MIT", - "dependencies": { - "@intlify/core-base": "9.14.5", - "@intlify/shared": "9.14.5", - "@vue/devtools-api": "^6.5.0" - }, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/kazupon" - }, - "peerDependencies": { - "vue": "^3.0.0" - } - }, - "node_modules/vue-lazyload": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/vue-lazyload/-/vue-lazyload-3.0.0.tgz", - "integrity": "sha512-h2keL/Rj550dLgesgOtXJS9qOiSMmuJNeVlfNAYV1/IYwOQYaWk5mFJlwRxmZDK9YC5gECcFLYYj7z1lKSf9ug==", - "license": "MIT" - }, - "node_modules/vue-router": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.6.4.tgz", - "integrity": "sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==", - "license": "MIT", - "dependencies": { - "@vue/devtools-api": "^6.6.4" - }, - "funding": { - "url": "https://github.com/sponsors/posva" - }, - "peerDependencies": { - "vue": "^3.5.0" - } - }, - "node_modules/vue-tsc": { - "version": "2.2.12", - "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.2.12.tgz", - "integrity": "sha512-P7OP77b2h/Pmk+lZdJ0YWs+5tJ6J2+uOQPo7tlBnY44QqQSPYvS0qVT4wqDJgwrZaLe47etJLLQRFia71GYITw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/typescript": "2.4.15", - "@vue/language-core": "2.2.12" - }, - "bin": { - "vue-tsc": "bin/vue-tsc.js" - }, - "peerDependencies": { - "typescript": ">=5.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", - "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "xml-name-validator": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/w3c-xmlserializer/node_modules/xml-name-validator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", - "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/watchpack": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", - "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", - "license": "MIT", - "peer": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - } - }, - "node_modules/webpack": { - "version": "5.104.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.104.0.tgz", - "integrity": "sha512-5DeICTX8BVgNp6afSPYXAFjskIgWGlygQH58bcozPOXgo2r/6xx39Y1+cULZ3gTxUYQP88jmwLj2anu4Xaq84g==", - "license": "MIT", - "peer": true, - "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.8", - "@types/json-schema": "^7.0.15", - "@webassemblyjs/ast": "^1.14.1", - "@webassemblyjs/wasm-edit": "^1.14.1", - "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.15.0", - "acorn-import-phases": "^1.0.3", - "browserslist": "^4.28.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.4", - "es-module-lexer": "^2.0.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.3.1", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^4.3.3", - "tapable": "^2.3.0", - "terser-webpack-plugin": "^5.3.16", - "watchpack": "^2.4.4", - "webpack-sources": "^3.3.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-sources": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", - "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-virtual-modules": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", - "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/webpack/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack/node_modules/es-module-lexer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", - "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", - "license": "MIT", - "peer": true - }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webpack/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "license": "BSD-2-Clause", - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/webpack/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT", - "peer": true - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", - "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/whatwg-encoding": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", - "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "iconv-lite": "0.6.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/whatwg-mimetype": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", - "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/whatwg-url": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", - "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tr46": "^5.1.0", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/why-is-node-running": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", - "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", - "dev": true, - "license": "MIT", - "dependencies": { - "siginfo": "^2.0.0", - "stackback": "0.0.2" - }, - "bin": { - "why-is-node-running": "cli.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12" - } - }, - "node_modules/xmlbuilder": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-10.1.1.tgz", - "integrity": "sha512-OyzrcFLL/nb6fMGHbiRDuPup9ljBycsdCypwuyg5AAHvyWzGfChJpCXMG88AGTIMFhGZ9RccFN1e6lhg3hkwKg==", - "license": "MIT", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true, - "license": "MIT" - }, - "node_modules/yaml": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", - "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", - "dev": true, - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14.6" - }, - "funding": { - "url": "https://github.com/sponsors/eemeli" - } - }, - "node_modules/yaml-eslint-parser": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.3.2.tgz", - "integrity": "sha512-odxVsHAkZYYglR30aPYRY4nUGJnoJ2y1ww2HDvZALo0BDETv9kWbi16J52eHs+PWRNmF4ub6nZqfVOeesOvntg==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.0.0", - "yaml": "^2.0.0" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/user/firefly-iii-plaid-connector/APKBUILD b/user/firefly-iii-plaid-connector/APKBUILD new file mode 100644 index 0000000..77c50a9 --- /dev/null +++ b/user/firefly-iii-plaid-connector/APKBUILD @@ -0,0 +1,29 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +pkgname=firefly-iii-plaid-connector +pkgver=0.3.1 +pkgrel=7 +pkgdesc="The Free Software Media System" +arch="x86_64" +url="https://gitlab.com/GeorgeHahn/firefly-plaid-connector" +license="MIT" +options="!check" +depends="firefly-iii dotnet6-runtime" +makedepends="dotnet6-sdk" +source="firefly-plaid-connector-$pkgver.tar.gz::https://gitlab.com/GeorgeHahn/firefly-plaid-connector/-/archive/v$pkgver/firefly-plaid-connector-v$pkgver.tar.gz net6-support.patch" +builddir="$srcdir/firefly-plaid-connector-v$pkgver" + +build() { + dotnet publish --configuration Release --output ./publish --use-current-runtime --no-self-contained +} + +package() { + mkdir -p "$pkgdir"/usr/lib + cp -r "$builddir"/publish "$pkgdir"/usr/lib/firefly-plaid-connector +} + +sha512sums=" +57a64673bf2e8cae00cb215e1dc90eb02bddf50010835a9318f55f83313c00f19d6c8d8af65e2739b0fb6fd4522a2327941bdc7d11cbe59c9537ff6c1575765e firefly-plaid-connector-0.3.1.tar.gz +f795fe58659763082e3f2bba0e6e2a70c4732bc6b402a4e586104bf09525ffca1d3586acda43ccba3b71d15e1a0a62794574f72a2fc6cd3d1905dcb2e8782dc2 net6-support.patch +" diff --git a/unmaintained/firefly-iii-plaid-connector/net6-support.patch b/user/firefly-iii-plaid-connector/net6-support.patch similarity index 100% rename from unmaintained/firefly-iii-plaid-connector/net6-support.patch rename to user/firefly-iii-plaid-connector/net6-support.patch diff --git a/unmaintained/firefly-iii/APKBUILD b/user/firefly-iii/APKBUILD similarity index 98% rename from unmaintained/firefly-iii/APKBUILD rename to user/firefly-iii/APKBUILD index 08f146b..c8dfe1f 100644 --- a/unmaintained/firefly-iii/APKBUILD +++ b/user/firefly-iii/APKBUILD @@ -5,12 +5,11 @@ pkgname=firefly-iii pkgver=5.7.18 pkgrel=0 pkgdesc="PHP personal finances manager" -# FTBFS -#arch="noarch" +arch="noarch" url="https://github.com/firefly-iii/firefly-iii" license="AGPL-3.0-only" options="!check" # No testsuite -_php=php83 +_php=php82 _php_mods="-intl -curl -bcmath -zip -gd -xml -mbstring -ldap -session -fileinfo -simplexml -sodium -tokenizer -xmlwriter -dom -pdo" depends="$_php ${_php_mods//-/$_php-}" makedepends="composer" diff --git a/user/freescout/APKBUILD b/user/freescout/APKBUILD new file mode 100644 index 0000000..681d038 --- /dev/null +++ b/user/freescout/APKBUILD @@ -0,0 +1,82 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) +pkgname=freescout +pkgver=1.8.135 +pkgrel=0 +pkgdesc="Free self-hosted help desk & shared mailbox" +arch="noarch" +url="freescout.net" +license="AGPL-3.0" +_php=php83 +_php_mods="-fpm -mbstring -xml -imap -zip -gd -curl -intl -tokenizer -pdo_pgsql -openssl -session -iconv -fileinfo -dom -pcntl" +depends="$_php ${_php_mods//-/$_php-} nginx postgresql pwgen" +makedepends="composer pcre" +install="$pkgname.post-install $pkgname.post-upgrade $pkgname.pre-install" +source=" + $pkgname-$pkgver.tar.gz::https://github.com/freescout-helpdesk/freescout/archive/refs/tags/$pkgver.tar.gz + freescout.nginx + freescout-manage.sh + rename-client-to-membre-fr-en.patch + " +pkgusers="freescout" +pkggroups="freescout" + +build() { + composer install --ignore-platform-reqs +} + +package() { + local logdir="/var/log/$pkgname" + local datadir="/var/lib/$pkgname" + local wwwdir="/usr/share/webapps/$pkgname" + local confdir="/etc/$pkgname" + + # Make directories + install -dm 755 \ + "$pkgdir"/$wwwdir \ + "$pkgdir"/$confdir \ + "$pkgdir"/$logdir \ + "$pkgdir"/$datadir + + # Copy and ln operations + cp $builddir/* -R "$pkgdir"/$wwwdir/. + for i in storage/app storage/framework bootstrap/cache \ + public/css/builds public/js/builds public/modules Modules; do + + if [ -d "$pkgdir"$wwwdir/$i ]; then + if [ ! -d "$pkgdir"/$datadir/${i%/*} ]; then + mkdir -p "$pkgdir"/$datadir/${i%/*} + fi + mv "$pkgdir"$wwwdir/$i "$pkgdir"/$datadir/$i + else + mkdir -p "$pkgdir"/$datadir/$i + fi + ln -s $datadir/$i "$pkgdir"/$wwwdir/$i + done + ln -s /etc/freescout/freescout.conf "$pkgdir"/usr/share/webapps/freescout/.env + ln -s $wwwdir/storage/app/public "$pkgdir"/$wwwdir/public/storage + + # log dir + rm -R "$pkgdir"/$wwwdir/storage/logs + ln -s "$logdir" "$pkgdir"/$wwwdir/storage/logs + + # Permission settings + chown -R freescout:www-data "$pkgdir"/$datadir "$pkgdir"/$logdir + + # config files + install -Dm644 "$srcdir"/freescout.nginx \ + "$pkgdir"/etc/nginx/http.d/freescout.conf + install -Dm640 "$builddir"/.env.example \ + "$pkgdir"/etc/freescout/freescout.conf + sed -i 's|APP_KEY.*|APP_KEY=@@SECRET_KEY@@|' "$pkgdir"/etc/freescout/freescout.conf + chown root:www-data "$pkgdir"/etc/freescout/freescout.conf + + # Install wrapper script to /usr/bin. + install -m755 -D "$srcdir"/freescout-manage.sh "$pkgdir"/usr/bin/freescout-manage +} +sha512sums=" +72b50f4d44607575aa507fe8ef9977eee126ca6a9912b127be54e9da05e3d7d3b770dd31acb20c03aeb5c7f951ffeb24363719d36684db68c2afeed11bf3eb15 freescout-1.8.135.tar.gz +e4af6c85dc12f694bef2a02e4664e31ed50b2c109914d7ffad5001c2bbd764ef25b17ecaa59ff55ef41bccf17169bf910d1a08888364bdedd0ecc54d310e661f freescout.nginx +7ce9b3ee3a979db44f5e6d7daa69431e04a5281f364ae7be23e5a0a0547f96abc858d2a8010346be2fb99bd2355fb529e7030ed20d54f310249e61ed5db4d0ba freescout-manage.sh +3416da98d71aea5a7093913ea34e783e21ff05dca90bdc5ff3d00c548db5889f6d0ec98441cd65ab9f590be5cd59fdd0d7f1c98b5deef7bb3adbc8db435ec9bf rename-client-to-membre-fr-en.patch +" diff --git a/user/freescout/freescout-manage.sh b/user/freescout/freescout-manage.sh new file mode 100644 index 0000000..9367807 --- /dev/null +++ b/user/freescout/freescout-manage.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +BUNDLE_DIR='/usr/share/webapps/freescout' + +cd $BUNDLE_DIR + +if [ "$(id -un)" != 'freescout' ]; then + exec su freescout -c '"$0" "$@"' -- php artisan "$@" +else + exec php artisan "$@" +fi diff --git a/user/freescout/freescout.nginx b/user/freescout/freescout.nginx new file mode 100644 index 0000000..15f2161 --- /dev/null +++ b/user/freescout/freescout.nginx @@ -0,0 +1,56 @@ +server { + listen 80; + listen [::]:80; + + server_name example.com www.example.com; + + root /usr/share/webapps/freescout/public; + + index index.php index.html index.htm; + + error_log /var/www/html/storage/logs/web-server.log; + + # Max. attachment size. + # It must be also set in PHP.ini via "upload_max_filesize" and "post_max_size" directives. + client_max_body_size 20M; + + location / { + try_files $uri $uri/ /index.php?$query_string; + } + location ~ \.php$ { + fastcgi_split_path_info ^(.+\.php)(/.+)$; + fastcgi_pass unix:/run/php/php8.0-fpm.sock; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + include fastcgi_params; + } + # Uncomment this location if you want to improve attachments downloading speed. + # Also make sure to set APP_DOWNLOAD_ATTACHMENTS_VIA=nginx in the .env file. + #location ^~ /storage/app/attachment/ { + # internal; + # alias /var/www/html/storage/app/attachment/; + #} + location ~* ^/storage/attachment/ { + expires 1M; + access_log off; + try_files $uri $uri/ /index.php?$query_string; + } + location ~* ^/(?:css|js)/.*\.(?:css|js)$ { + expires 2d; + access_log off; + add_header Cache-Control "public, must-revalidate"; + } + # The list should be in sync with /storage/app/public/uploads/.htaccess and /config/app.php + location ~* ^/storage/.*\.((?!(jpg|jpeg|jfif|pjpeg|pjp|apng|bmp|gif|ico|cur|png|tif|tiff|webp|pdf|txt|diff|patch|json|mp3|wav|ogg|wma)).)*$ { + add_header Content-disposition "attachment; filename=$2"; + default_type application/octet-stream; + } + location ~* ^/(?:css|fonts|img|installer|js|modules|[^\\\]+\..*)$ { + expires 1M; + access_log off; + add_header Cache-Control "public"; + } + location ~ /\. { + deny all; + } +} diff --git a/user/freescout/freescout.post-install b/user/freescout/freescout.post-install new file mode 100755 index 0000000..467962b --- /dev/null +++ b/user/freescout/freescout.post-install @@ -0,0 +1,48 @@ +#!/bin/sh +set -eu + +group=www-data +config_file='/etc/freescout/freescout.conf' + +if [ $(grep '@@SECRET_KEY@@' "$config_file") ]; then + echo "* Generating random secret in $config_file" >&2 + + secret_key="$(freescout-manage key:generate --show)" + sed -i "s|@@SECRET_KEY@@|$secret_key|" "$config_file" +fi + +if [ "${0##*.}" = 'post-upgrade' ]; then + cat >&2 <<-EOF + * + * To finish Freescout upgrade run: + * + * freescout-manage freescout:after-app-update + * + EOF +else + cat >&2 <<-EOF + * + * 1. Adjust settings in /etc/freescout/freescout.conf + * + * 2. Make sure cgi.fix_pathinfo=0 is set in /etc/php8x/php.ini is set + * + * 3. Create database for Freescout: + * + * psql -c "CREATE ROLE freescout PASSWORD 'top-secret' INHERIT LOGIN;" + * psql -c "CREATE DATABASE freescout OWNER freescout ENCODING 'UTF-8';" + * + * 4. Clear application cache and apply .env file changes: + * + * freescout-manage freescout:clear-cache + * + * 5. Create tables: + * + * freescout-manage migrate + * + * 6. Create admin user + * + * freescout-manage freescout:create-user + * + EOF +fi + diff --git a/user/freescout/freescout.post-upgrade b/user/freescout/freescout.post-upgrade new file mode 120000 index 0000000..d53f932 --- /dev/null +++ b/user/freescout/freescout.post-upgrade @@ -0,0 +1 @@ +freescout.post-install \ No newline at end of file diff --git a/user/freescout/freescout.pre-install b/user/freescout/freescout.pre-install new file mode 100755 index 0000000..6332408 --- /dev/null +++ b/user/freescout/freescout.pre-install @@ -0,0 +1,25 @@ +#!/bin/sh + +freescout_dir='/var/lib/freescout' + +if ! getent group freescout 1>/dev/null; then + echo '* Creating group freescout' 1>&2 + + addgroup -S freescout +fi + +if ! id freescout 2>/dev/null 1>&2; then + echo '* Creating user freescout' 1>&2 + + adduser -DHS -G freescout -h "$freescout_dir" -s /bin/sh \ + -g "added by apk for freescout" freescout + passwd -u freescout 1>/dev/null # unlock +fi + +if ! id -Gn freescout | grep -Fq www-data; then + echo '* Adding user freescout to group www-data' 1>&2 + + addgroup freescout www-data +fi + +exit 0 diff --git a/user/freescout/rename-client-to-membre-fr-en.patch b/user/freescout/rename-client-to-membre-fr-en.patch new file mode 100644 index 0000000..097e503 --- /dev/null +++ b/user/freescout/rename-client-to-membre-fr-en.patch @@ -0,0 +1,220 @@ +diff --git a/resources/lang/en.json b/resources/lang/en.json +new file mode 100644 +index 00000000..82d26052 +--- /dev/null ++++ b/resources/lang/en.json +@@ -0,0 +1,32 @@ ++{ ++ ":person changed the customer to :customer": ":person changed the member to :customer", ++ ":person changed the customer to :customer in conversation #:conversation_number": ":person changed the member to :customer in conversation #:conversation_number", ++ "Auto reply to customer": "Auto reply to member", ++ "Change Customer": "Change Member", ++ "Change the customer to :customer_email?": "Change the member to :customer_email?", ++ "Create a new customer": "Create a new member", ++ "Customer": "Member", ++ "Customer Name": "Member Name", ++ "Customer Profile": "Member Profile", ++ "Customer changed": "Member changed", ++ "Customer saved successfully.": "Member saved successfully", ++ "Customer viewed :when": "Member viewed :when", ++ "Customers": "Members", ++ "Customers email this address for help (e.g. support@domain.com)": "Members email this address for help (e.g. support@domain.com)", ++ "Email :tag_email_begin:email:tag_email_end has been moved from another customer: :a_begin:customer:a_end.": "Email :tag_email_begin:email:tag_email_end has been moved from another member: :a_begin:customer:a_end.", ++ "Email to customer": "Email to member", ++ "Emails to Customers": "Emails to Members", ++ "Error sending email to customer": "Error sending email to member", ++ "Message not sent to customer": "Message not sent to member", ++ "Name that will appear in the From<\/strong> field when a customer views your email.": "Name that will appear in the From<\/strong> field when a member views your email.", ++ "No customers found": "No members found", ++ "No customers found. Would you like to create one?": "No members found. Would you like to create one?", ++ "Notify :person when a customer replies…": "Notify :person when a member replies…", ++ "Notify me when a customer replies…": "Notify me when a member replies…", ++ "Search for a customer by name or email": "Search for a member by name or email", ++ "Sending emails need to be configured for the mailbox in order to send emails to customers and support agents": "Sending emails need to be configured for the mailbox in order to send emails to members and support agents", ++ "This number is not visible to customers. It is only used to track conversations within :app_name": "This number is not visible to members. It is only used to track conversations within :app_name", ++ "This reply will go to the customer. :%switch_start%Switch to a note:switch_end if you are replying to :user_name.": "This reply will go to the member. :%switch_start%Switch to a note:switch_end if you are replying to :user_name.", ++ "This text will be added to the beginning of each email reply sent to a customer.": "This text will be added to the beginning of each email reply sent to a member.", ++ "When a customer emails this mailbox, application can send an auto reply to the customer immediately.Only one auto reply is sent per new conversation.": "When a member emails this mailbox, application can send an auto reply to the member immediately.Only one auto reply is sent per new conversation." ++} +\ No newline at end of file +diff --git a/resources/lang/fr.json.orig b/resources/lang/fr.json +index ff8d9d4..98d158f 100644 +--- a/resources/lang/fr.json.orig ++++ b/resources/lang/fr.json +@@ -26,8 +26,8 @@ + ":person added a note to conversation #:conversation_number": ":person a ajouté une note à la conversation #:conversation_number", + ":person assigned :assignee conversation #:conversation_number": ":person a assigné :assignee à la conversation #:conversation_number", + ":person assigned to :assignee": ":person a assigné :assignee", +- ":person changed the customer to :customer": ":person a changé le client en :customer", +- ":person changed the customer to :customer in conversation #:conversation_number": ":person a changé le client en :customer dans la conversation #:conversation_number", ++ ":person changed the customer to :customer": ":person a changé le membre en :customer", ++ ":person changed the customer to :customer in conversation #:conversation_number": ":person a changé le membre en :customer dans la conversation #:conversation_number", + ":person created a draft": ":person a créé un brouillon", + ":person deleted": ":person supprimée", + ":person edited :creator's draft": ":person a modifié brouillon de :creator", +@@ -112,7 +112,7 @@ + "Auto Reply": "Réponse Automatique", + "Auto Reply status saved": "Statut de réponse automatique enregistré", + "Auto replies don't include your mailbox signature, so be sure to add your contact information if necessary.": "Les réponses automatiques n'incluent pas la signature de votre boîte aux lettres, assurez-vous d'ajouter vos coordonnées si nécessaire.", +- "Auto reply to customer": "Réponse automatique au client", ++ "Auto reply to customer": "Réponse automatique au membre", + "Back": "Retour", + "Back to folder": "Retour au dossier", + "Background Jobs": "Emplois d'arrière-plan", +@@ -123,10 +123,10 @@ + "Cancel": "Annuler", + "Cc": "Cc", + "Change": "Modifier", +- "Change Customer": "Changer de client", ++ "Change Customer": "Changer de membre", + "Change address in mailbox settings": "Modifier l'adresse dans les paramètres de la boîte aux lettres", + "Change default redirect": "Modifier la redirection par défaut", +- "Change the customer to :customer_email?": "Changer le client en :customer_email ?", ++ "Change the customer to :customer_email?": "Changer le membre en :customer_email ?", + "Change your password": "Changer votre mot de passe", + "Chat": "Tchat", + "Check Connection": "Vérifier la connexion", +@@ -182,7 +182,7 @@ + "Create a New User": "Créer un nouvel utilisateur", + "Create a Password": "Créer un mot de passe", + "Create a mailbox": "Créer une boîte de réception", +- "Create a new customer": "Créer un nouveau client", ++ "Create a new customer": "Créer un nouveau membre", + "Create symlink manually": "Créer un lien symbolique manuellement", + "Created At": "Créé à", + "Created by :person": "Créé par :person", +@@ -190,14 +190,14 @@ + "Current Password": "Mot de passe actuel", + "Custom From Name": "Nom de l'expéditeur personnalisé", + "Custom Name": "Nom personnalisé", +- "Customer": "Client", +- "Customer Name": "Nom du client", +- "Customer Profile": "Profil client", +- "Customer changed": "Client changé", +- "Customer saved successfully.": "Client enregistré avec succès.", +- "Customer viewed :when": "Client vu :when", +- "Customers": "Clients", +- "Customers email this address for help (e.g. support@domain.com)": "Les clients utilisent cette adresse par e-mail pour obtenir de l'aide (par exemple, support@domain.com)", ++ "Customer": "Membre", ++ "Customer Name": "Nom du membre", ++ "Customer Profile": "Profil membre", ++ "Customer changed": "Membre changé", ++ "Customer saved successfully.": "Membre enregistré avec succès.", ++ "Customer viewed :when": "Membre vu :when", ++ "Customers": "Membres", ++ "Customers email this address for help (e.g. support@domain.com)": "Les membres utilisent cette adresse par e-mail pour obtenir de l'aide (par exemple, support@domain.com)", + "Daily": "Quotidien", + "Dashboard": "Tableau de bord", + "Date": "Date", +@@ -247,15 +247,15 @@ + "Edit User": "Modifier l'utilisateur", + "Edited by :whom :when": "Édité par :whom :when", + "Email": "Email", +- "Email :tag_email_begin:email:tag_email_end has been moved from another customer: :a_begin:customer:a_end.": "Email :tag_email_begin:email:tag_email_end a été déplacé depuis un autre client : :a_begin:customer:a_end.", ++ "Email :tag_email_begin:email:tag_email_end has been moved from another customer: :a_begin:customer:a_end.": "Email :tag_email_begin:email:tag_email_end a été déplacé depuis un autre membre : :a_begin:customer:a_end.", + "Email Address": "Adresse e-mail", + "Email Alerts For Administrators": "Envoyez des alertes par e-mail aux administrateurs", + "Email Header": "En-tête de l'e-mail", + "Email Signature": "Signature e-mail", + "Email Template": "Modèle d'e-mail", + "Email passed for delivery. If you don't receive a test email, check your mail server logs.": "E-mail transmis pour livraison. Si vous ne recevez pas d'e-mail de test, consultez les journaux de votre serveur de messagerie.", +- "Email to customer": "Courriel au client", +- "Emails to Customers": "Emails aux clients", ++ "Email to customer": "Courriel au membre", ++ "Emails to Customers": "Emails aux membres", + "Empty Trash": "Vider la corbeille", + "Empty license key": "Clé de licence vide", + "Enable Auto Reply": "Activer la réponse automatique", +@@ -276,7 +276,7 @@ + "Error occurred. Please try again later.": "Erreur est survenue. Veuillez réessayer plus tard.", + "Error occurred. Please try again or try another :%a_start%update method:%a_end%": "Erreur est survenue. Veuillez réessayer ou en essayer une autre :%a_start% méthode de mise à jour:%a_end%", + "Error sending alert": "Erreur lors de l'envoi de l'alerte", +- "Error sending email to customer": "Erreur lors de l'envoi d'un e-mail au client", ++ "Error sending email to customer": "Erreur lors de l'envoi d'un e-mail au membre", + "Error sending email to the user who replied to notification from wrong email": "Erreur lors de l'envoi d'un e-mail à l'utilisateur qui a répondu à la notification d'un mauvais e-mail", + "Error sending email to user": "Erreur lors de l'envoi d'un e-mail à l'utilisateur", + "Error sending invitation email to user": "Erreur lors de l'envoi d'un e-mail d'invitation à l'utilisateur", +@@ -419,7 +419,7 @@ + "Message bounced (:link)": "Message renvoyé (:link)", + "Message cannot be empty": "Le message ne peut pas être vide", + "Message has been already sent. Please discard this draft.": "Le message a déjà été envoyé. Veuillez effacer ce brouillon.", +- "Message not sent to customer": "Message non envoyé au client", ++ "Message not sent to customer": "Message non envoyé au membre", + "Method": "Méthode", + "Migrate DB": "Migrer la base de données", + "Mine": "Mes conversations", +@@ -439,7 +439,7 @@ + "My Apps": "Mes Applications", + "My open conversations": "Mes conversations ouvertes", + "Name": "Nom", +- "Name that will appear in the From<\/strong> field when a customer views your email.": "Nom qui apparaîtra dans le champ De<\/strong> lorsqu'un client consulte votre e-mail.", ++ "Name that will appear in the From<\/strong> field when a customer views your email.": "Nom qui apparaîtra dans le champ De<\/strong> lorsqu'un membre consulte votre e-mail.", + "New Conversation": "Nouvelle conversation", + "New Mailbox": "Nouvelle boîte de réception", + "New Password": "Nouveau mot de passe", +@@ -451,8 +451,8 @@ + "Next active conversation": "Conversation active suivante", + "No": "Non", + "No activations left for this license key": "Il ne reste aucune activation pour cette clé de licence", +- "No customers found": "Aucun client trouvé", +- "No customers found. Would you like to create one?": "Aucun client trouvé. Souhaitez-vous en créer un?", ++ "No customers found": "Aucun membre trouvé", ++ "No customers found. Would you like to create one?": "Aucun membre trouvé. Souhaitez-vous en créer un?", + "No invite was found. Please contact your administrator to have a new invite email sent.": "Aucune invitation trouvée. Veuillez contacter votre administrateur pour qu'il envoie une nouvelle invitation par email.", + "Non-writable files found": "Fichiers non-inscriptibles trouvés", + "None": "Aucun", +@@ -471,10 +471,10 @@ + "Notifications": "Notifications", + "Notifications saved successfully": "Notifications enregistrées", + "Notifications will start showing up here soon": "Les notifications commenceront bientôt à apparaître ici", +- "Notify :person when a customer replies…": "Avertir :person lorsqu'un client répond…", ++ "Notify :person when a customer replies…": "Avertir :person lorsqu'un membre répond…", + "Notify :person when another :app_name user replies or adds a note…": "Notifier :person quand un autre utilisateur :app_name répond ou ajoute une note…", + "Notify :person when…": "Avertir :person lorsque…", +- "Notify me when a customer replies…": "M'avertir lorsqu'un client répond…", ++ "Notify me when a customer replies…": "M'avertir lorsqu'un membre répond…", + "Notify me when another :app_name user replies or adds a note…": "M'avertir lorsqu'un autre utilisateur :app_name répond ou ajoute une note…", + "Notify me when…": "Prévenez-moi quand…", + "Number": "Numéro", +@@ -587,7 +587,7 @@ + "Search": "Recherche", + "Search Conversation by Number": "Rechercher une conversation par identifiant", + "Search Users": "Rechercher des utilisateurs", +- "Search for a customer by name or email": "Rechercher un client par nom ou par e-mail", ++ "Search for a customer by name or email": "Rechercher un membre par nom ou par e-mail", + "See logs": "Voir les journaux", + "Select Mailbox": "Sélectionnez une boîte aux lettres", + "Selected Users have access to this mailbox:": "Les utilisateurs sélectionnés ont accès à cette boîte aux lettres:", +@@ -613,7 +613,7 @@ + "Sending": "Envoi en cours", + "Sending Emails": "Sending Emails", + "Sending can not be undone": "L'envoie ne peut être annulé", +- "Sending emails need to be configured for the mailbox in order to send emails to customers and support agents": "L'envoi d'e-mails doit être configuré pour la boîte aux lettres afin d'envoyer des e-mails aux clients et aux agents de support", ++ "Sending emails need to be configured for the mailbox in order to send emails to customers and support agents": "L'envoi d'e-mails doit être configuré pour la boîte aux lettres afin d'envoyer des e-mails aux membre et aux agents de support", + "Sendmail": "Exécutable Sendmail", + "Separate each email with a comma.": "Séparez chaque e-mail par une virgule", + "Server": "Serveur", +@@ -670,11 +670,11 @@ + "This is a test mail sent by :app_name. It means that outgoing email settings of your :mailbox mailbox are fine.": "Il s'agit d'un mail de test envoyé par :app_name. Cela signifie que les paramètres de courrier électronique sortant de votre boîte aux lettres :mailbox sont corrects.", + "This is a test system mail sent by :app_name. It means that mail settings are fine.": "Il s'agit d'un e-mail du système de test envoyé par :app_name. Cela signifie que les paramètres de messagerie sont corrects.", + "This may take several minutes": "Cela peut prendre plusieurs minutes", +- "This number is not visible to customers. It is only used to track conversations within :app_name": "Ce numéro n'est pas visible pour les clients. Il est uniquement utilisé pour suivre les conversations dans :app_name", ++ "This number is not visible to customers. It is only used to track conversations within :app_name": "Ce numéro n'est pas visible pour les membres. Il est uniquement utilisé pour suivre les conversations dans :app_name", + "This password is incorrect.": "Ce mot de passe est incorrect.", +- "This reply will go to the customer. :%switch_start%Switch to a note:switch_end if you are replying to :user_name.": "Cette réponse ira au client. :%switch_start%Passez à une note:switch_end si vous répondez à :user_name.", ++ "This reply will go to the customer. :%switch_start%Switch to a note:switch_end if you are replying to :user_name.": "Cette réponse ira au membre. :%switch_start%Passez à une note:switch_end si vous répondez à :user_name.", + "This setting gives you control over what page loads after you perform an action (send a reply, add a note, change conversation status or assignee).": "Ce paramètre vous permet de contrôler la page qui se charge après avoir effectué une action (envoyer une réponse, ajouter une note, etc.).", +- "This text will be added to the beginning of each email reply sent to a customer.": "Ce texte sera ajouté au début de chaque réponse par e-mail envoyée à un client.", ++ "This text will be added to the beginning of each email reply sent to a customer.": "Ce texte sera ajouté au début de chaque réponse par e-mail envoyée à un membre.", + "Thread is not in a draft state": "Le fil n'est pas à l'état de brouillon", + "Thread not found": "Fil non trouvé", + "Time Format": "Format de l'heure", +@@ -751,7 +751,7 @@ + "Welcome to :company_name!": "Bienvenue chez :company_name !", + "Welcome to :company_name, :first_name!": "Bienvenue chez :company_name, :first_name!", + "Welcome to the team!": "Bienvenue dans l'équipe !", +- "When a customer emails this mailbox, application can send an auto reply to the customer immediately.Only one auto reply is sent per new conversation.": "Lorsqu'un client envoie un e-mail à cette boîte aux lettres, l'application peut envoyer immédiatement une réponse automatique au client. Une seule réponse automatique est envoyée par nouvelle conversation.", ++ "When a customer emails this mailbox, application can send an auto reply to the customer immediately.Only one auto reply is sent per new conversation.": "Lorsqu'un membre envoie un e-mail à cette boîte aux lettres, l'application peut envoyer immédiatement une réponse automatique au membre. Une seule réponse automatique est envoyée par nouvelle conversation.", + "Which mailboxes will user use?": "Quelles boîtes aux lettres l'utilisateur utilisera-t-il?", + "Who Else Will Use This Mailbox": "Qui d'autre utilisera cette boîte aux lettres", + "Work": "Professionnel", diff --git a/user/gitaly/APKBUILD b/user/gitaly/APKBUILD new file mode 100644 index 0000000..3a56350 --- /dev/null +++ b/user/gitaly/APKBUILD @@ -0,0 +1,86 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) +# Contributor: Jakub Jirutka +pkgname=gitaly +pkgver=16.9.3 +pkgrel=0 +pkgdesc="A Git RPC service for handling all the git calls made by GitLab" +url="https://gitlab.com/gitlab-org/gitaly/" +arch="all" +# GPL-2.0-only WITH GCC-exception-2.0: bundled libgit2 +license="MIT AND GPL-2.0-only WITH GCC-exception-2.0" +depends=" + git>=2.42 + " +makedepends=" + bash + cmake + go + icu-dev + libssh2-dev + libxml2-dev + libxslt-dev + " +subpackages=" + $pkgname-backup + $pkgname-blackbox + $pkgname-praefect + $pkgname-openrc + " +source="https://gitlab.com/gitlab-org/gitaly/-/archive/v$pkgver/gitaly-v$pkgver.tar.gz + config.patch + $pkgname.initd + " +builddir="$srcdir/$pkgname-v$pkgver" +options="!check" + +build() { + make V=1 BUILD_TAGS="tracer_static tracer_static_jaeger" +} + +package() { + ## Go part + + make install DESTDIR="$pkgdir" PREFIX=/usr + + # Not very useful for us. + rm "$pkgdir"/usr/bin/gitaly-debug + rm "$pkgdir"/usr/bin/gitaly-wrapper + + install -m644 -D config.toml.example "$pkgdir"/etc/gitlab/gitaly.toml + install -m644 -D config.praefect.toml.example "$pkgdir"/etc/gitlab/praefect.toml + install -m644 -D cmd/gitaly-blackbox/config.toml.example "$pkgdir"/etc/gitlab/gitaly-blackbox.toml + + install -m755 -D "$srcdir"/gitaly.initd "$pkgdir"/etc/init.d/gitlab.gitaly +} + +backup() { + pkgdesc="Utility used by the backup Rake task to create/restore repository backups from Gitaly" + depends="" + + amove usr/bin/gitaly-backup +} + +# TODO: Add init script. +blackbox() { + pkgdesc="Prometheus exporter that measures GitLab server performance by performing a Git HTTP clone" + depends="" + + amove etc/gitlab/gitaly-blackbox.toml + amove usr/bin/gitaly-blackbox +} + +# TODO: Add init script. +praefect() { + pkgdesc="A reverse-proxy for Gitaly to manage a cluster of Gitaly nodes for HA" + depends="" + + amove etc/gitlab/praefect.toml + amove usr/bin/praefect +} + +sha512sums=" +c3784b7fb692d2e57a484b3a33b719de76d3ee8bfabc95919e7dabd89f5429f06000c615e433c99f18c1a6706ecd389dcf15d55a59ed546f62c10b585e20ad7b gitaly-v16.9.3.tar.gz +7685330e637c3a34db941c9e6b8776d0611ec16297e8be998a3eb4716c455d9f015d433a4d27720c24e520d489dd56bdab7c0e4264f2852b4b0bfd6ecaa7f773 config.patch +c32105d921be16eaf559cf21d6840bc346cd92b5e37974cedecdb5a2d2ca1eb5e8fbb144f5fc8a1289bf9415102b313cf2d61ee510c80f08ab33a799f5ac7122 gitaly.initd +" diff --git a/user/gitaly/config.patch b/user/gitaly/config.patch new file mode 100644 index 0000000..9df7db0 --- /dev/null +++ b/user/gitaly/config.patch @@ -0,0 +1,91 @@ +diff --git a/config.toml.example.orig b/config.toml.example +index 82b8502..9982087 100644 +--- a/config.toml.example.orig ++++ b/config.toml.example +@@ -2,19 +2,24 @@ + # For Gitaly documentation, see https://docs.gitlab.com/ee/administration/gitaly/. + + # A path which Gitaly should open a Unix socket. +-socket_path = "/home/git/gitlab/tmp/sockets/private/gitaly.socket" ++socket_path = "/run/gitlab/gitaly.socket" + + # Directory containing Gitaly executables. +-bin_dir = "/home/git/gitaly/_build/bin" ++bin_dir = "/usr/bin" + + # # Optional. The directory where Gitaly can create all files required to + # # properly operate at runtime. If not set, Gitaly will create a directory in + # # the global temporary directory. This directory must exist. +-# runtime_dir = "/home/git/gitaly/run" ++runtime_dir = "/run/gitaly" + + # # Optional if socket_path is set. TCP address for Gitaly to listen on. This is insecure (unencrypted connection). + # listen_addr = "localhost:9999" + ++# # Optional: configure where the Gitaly creates the sockets for internal connections. If unset, Gitaly will create a randomly ++# # named temp directory each time it boots. ++# # Non Gitaly clients should never connect to these sockets. ++internal_socket_dir = "/run/gitaly/internal" ++ + # # Optional. TCP over TLS address for Gitaly to listen on. + # tls_listen_addr = "localhost:8888" + +@@ -35,9 +40,9 @@ bin_dir = "/home/git/gitaly/_build/bin" + # # Gitaly supports TLS encryption. You must bring your own certificates because this isn’t provided automatically. + # [tls] + # # Path to the certificate. +-# certificate_path = '/home/git/cert.cert' ++# certificate_path = '/etc/gitlab/ssl/gitaly.crt' + # # Path to the key. +-# key_path = '/home/git/key.pem' ++# key_path = '/etc/gitlab/ssl/gitaly.key' + + # # Git settings + # [git] +@@ -58,7 +63,7 @@ bin_dir = "/home/git/gitaly/_build/bin" + # # The name of the storage + name = "default" + # # The path to the storage. +-path = "/home/git/repositories" ++path = "/var/lib/gitlab/repositories" + + # # You can optionally configure more storages for this Gitaly instance to serve up + # +@@ -70,12 +75,12 @@ path = "/home/git/repositories" + # # Optional. Configure Gitaly to output JSON-formatted log messages to stdout. + # [logging] + # # Directory where Gitaly stores extra log files. +-dir = "/home/git/gitlab/log" ++dir = "/vat/log/gitlab" + # # Log format. Either 'text' or 'json'. +-# format = "json" ++format = "text" + # # Optional. Set log level to only log entries with that severity or above. + # # Valid values are, in order, 'debug', 'info', 'warn', 'error', 'fatal', and 'panic'. Defaults to 'info'. +-# level = "warn" ++level = "warn" + # # Additionally, exceptions from the Go server can be reported to Sentry. Sentry DSN (Data Source Name) + # # for exception monitoring. + # sentry_dsn = "https://:@sentry.io/" +@@ -91,18 +96,18 @@ sentry_environment = "" + # # Custom Git hooks that are used to perform tasks based on changes performed in any repository. + [hooks] + # # Directory where custom Git hooks are installed. If left unset, no custom hooks are used. +-custom_hooks_dir = "/home/git/custom_hooks" ++custom_hooks_dir = "/etc/gitlab/custom_hooks" + + # # Gitaly must connect to the GitLab application to perform access checks when a user performs a change. + [gitlab] + # # URL of the GitLab server. +-url = "http+unix://%2Fhome%2Fgit%2Fgitlab%2Ftmp%2Fsockets%2Fgitlab-workhorse.socket" ++url = "http+unix://%2Frun%2Fgitlab%2Fworkhorse.socket" + # # 'relative_url_root' is only needed if a UNIX socket is used in 'url' and GitLab is configured to + # # use a relative path. For example, '/gitlab'. + # relative_url_root = '/' + # # Path of the file containing the secret token used to authenticate with GitLab. Use either 'secret_token' or 'secret' + # # but not both. +-secret_file = "/home/git/gitlab-shell/.gitlab_shell_secret" ++secret_file = "/etc/gitlab/gitlab_shell_secret" + # # Secret token used to authenticate with GitLab. + # secret = "" + diff --git a/user/gitaly/gitaly.initd b/user/gitaly/gitaly.initd new file mode 100644 index 0000000..290c922 --- /dev/null +++ b/user/gitaly/gitaly.initd @@ -0,0 +1,39 @@ +#!/sbin/openrc-run + +name="Gitaly" +description="A Git RPC service for handling all the git calls made by GitLab" + +: ${gitaly_config:="/etc/gitlab/gitaly.toml"} +: ${gitaly_logfile:="/var/log/gitlab/gitaly.log"} + +command="/usr/bin/gitaly" +command_args="$gitaly_config" +command_background="yes" +command_user="git" + +output_log="$gitaly_logfile" +error_log="$gitaly_logfile" +pidfile="/run/gitaly.pid" +supervise_daemon_args="--env TZ=:/etc/localtime" +start_stop_daemon_args="$supervise_daemon_args" + +rc_ulimit="-n 15000" + +required_files="$gitaly_config" + +depend() { + use net +} + +start_pre() { + local socket_path=$(sed -En "s/^\s*socket_path\s*=\s*[\"']([^\"']+)[\"']/\1/p" "$gitaly_config") + local runtime_dir=$(sed -En "s/^\s*runtime_dir\s*=\s*[\"']([^\"']+)[\"']/\1/p" "$gitaly_config") + + if [ "$socket_path" ]; then + checkpath -q -d -m 755 -o $command_user "${socket_path%/*}" || return 1 + fi + if [ "$runtime_dir" ]; then + checkpath -q -d -m 750 -o $command_user "$runtime_dir" || return 1 + fi + checkpath -f -m 640 -o $command_user "$gitaly_logfile" +} diff --git a/user/gitlab-foss/APKBUILD b/user/gitlab-foss/APKBUILD new file mode 100644 index 0000000..12b33fb --- /dev/null +++ b/user/gitlab-foss/APKBUILD @@ -0,0 +1,396 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Jakub Jirutka +# Contributor: Antoine Martin (ayakael) +pkgname=gitlab-foss +_pkgname=${pkgname%-foss} +pkgver=16.9.3 +_gittag=v$pkgver +pkgrel=0 +pkgdesc="A version control for your server" +url="https://gitlab.com/gitlab-org/gitlab-foss" +arch="x86_64 aarch64" +license="MIT" +# ruby-irb is needed only for Rails console (gitlab-rails console) +depends=" + $pkgname-assets=$pkgver-r$pkgrel + ca-certificates + cmd:dpkg-deb + exiftool + git>=2.42.0 + gitaly~=16.9 + gitlab-shell~=14.34 + graphicsmagick + http-parser + procps + py-docutils + python3 + redis>=2.8 + ruby3.2 + ruby3.2-bigdecimal + ruby3.2-bundler + ruby3.2-fiddle + ruby3.2-io-console + ruby3.2-irb + ruby3.2-json + ruby3.2-rake + ruby3.2-rdoc + ruby3.2-webrick + shared-mime-info + tzdata + " +makedepends=" + cargo + clang-dev + cmd:chrpath + cmake + file-dev + go + gpgme-dev + icu-dev + libffi-dev + libgcrypt-dev + libpq-dev + libxml2-dev + libxslt-dev + linux-headers + llvm + nodejs + openssl-dev + protobuf-dev + re2-dev + ruby3.2-dev + ruby3.2-grpc~=1.58 + ruby3.2-rugged + rust + yarn>=1.2.0 + " +pkgusers="git" +pkggroups="git www-data" +install="$pkgname.pre-install $pkgname.post-install $pkgname.post-upgrade" +subpackages="$pkgname-assets::noarch $pkgname-openrc" +source="https://gitlab.com/gitlab-org/gitlab-foss/-/archive/$_gittag/gitlab-foss-$_gittag.tar.gz + database-config.patch + $_pkgname.initd + $_pkgname.mailroom.initd + $_pkgname.rails.initd + $_pkgname.sidekiq.initd + $_pkgname.workhorse.initd + $_pkgname.confd + $_pkgname.logrotate + bin-wrapper.in + downgrade-sys-filesystem-depend.patch + " +builddir="$srcdir/gitlab-foss-$_gittag" + +_prefix="usr/lib/bundles/$_pkgname" + +export BUNDLE_DEPLOYMENT=true +export BUNDLE_FORCE_RUBY_PLATFORM=true +export BUNDLE_FROZEN=true +# Should be tied to $JOBS, but rust native code fails to build +export BUNDLE_JOBS=1 + +prepare() { + local sysgemdir=$(ruby -e 'puts Gem.default_dir') + + default_prepare + + # The default log level is very chatty. + sed -i 's/^\(\s*config.log_level\s*=\).*$/\1 :warn/' \ + config/environments/production.rb + + # This is not needed, the secret_token is generated by the + # gitlab-shell package. It also makes problems in the build phase. + rm config/initializers/gitlab_shell_secret_token.rb + + # Remove all locale files except en. + find locale -type d -mindepth 1 ! -name en -exec rm -rf {} + + + # Allow use of any bundler + sed -i -e '/BUNDLED/,+1d' Gemfile.lock + + # Some gems are broken, so we copy our fixed version + # instead of installing it from RubyGems using Bundler. + for i in grpc rugged; do + mkdir -p vendor/gems/$i/src/ruby/lib/$i + cp -r "$sysgemdir"/gems/$i-*/* vendor/gems/$i/ + cp "$sysgemdir"/specifications/$i-*.gemspec \ + vendor/gems/$i/$i.gemspec + cp "$sysgemdir"/extensions/*/*/$i-*/$i/*.so \ + vendor/gems/$i/src/ruby/lib/$i/ + done +} + +build() { + local bundle_without='exclude development kerberos mysql test' + + cd "$builddir"/workhorse + + make + + cd "$builddir" + + msg "Installing Ruby gems..." + bundle config --local without "$bundle_without" + bundle config --local build.ffi --enable-system-libffi + bundle config --local build.gpgme --use-system-libraries + bundle config --local build.re2 --enable-system-libraries + bundle config --local build.nokogiri --use-system-libraries \ + --with-xml2-include=/usr/include/libxml2 \ + --with-xslt-include=/usr/include/libxslt + bundle config --local build.ruby-magic --enable-system-libraries + bundle config --local build.google-protobuf '-- --with-cflags=-D__va_copy=va_copy' + bundle config --local path "vendor/bundle" + + bundle install --no-cache + + # Replace bundled CA bundle with symlink. + ( + cd vendor/bundle/ruby/*/gems/aws-sdk-core-*/ + rm ca-bundle.crt + ln -s /etc/ssl/certs/ca-certificates.crt ca-bundle.crt + ) + + # Remove faulty RPATH. + chrpath -d vendor/bundle/ruby/*/extensions/*/*/ruby-magic-*/magic/magic.so + + # cp grpc lib + cp vendor/gems/grpc/src/ruby/lib/grpc/grpc_c.so vendor/bundle/ruby/*/gems/grpc-*/src/ruby/lib/grpc/grpc_c.so + + # Patch installed gem gitlab-markup to use python3. + # Option "-S" causes that Python cannot find docutils module. + sed -i 's/python2 -S/python3/g' \ + vendor/bundle/ruby/*/gems/gitlab-markup-*/lib/github/markups.rb + + # Remove non-sense require of code for tests from top-level module + # (we're gonna delete tests from the package). + sed -i '/require .carrierwave\/test\/matchers./d' \ + vendor/bundle/ruby/*/gems/carrierwave-*/lib/carrierwave.rb + + msg "Installing npm modules..." + yarn install --production --frozen-lockfile + + # Since we have moved assets gems into a group, they are not implicitly + # loaded by default. This will be reverted after compiling assets. + sed -i.bak '/Bundler.require(\*Rails.groups/s/)/, :assets)/' \ + config/application.rb + + # assets:precompile and gettext:compile bootstraps the app, + # so they needs configs. + cp config/gitlab.yml.example config/gitlab.yml + cp config/database.yml.postgresql config/database.yml + cp config/secrets.yml.example config/secrets.yml + + # The configured path is not readable for the user building + # the package, so we must remove it; GitLab will use the default path. + sed -i '/^\s*secret_file:.*/d' config/gitlab.yml + + ( + export NODE_ENV=production + export RAILS_ENV=production + export SKIP_STORAGE_VALIDATION=true + export USE_DB=false + export NO_SOURCEMAPS=true + export NODE_OPTIONS="--max_old_space_size=3584" + + msg "Compiling GetText PO files..." + bundle exec rake gettext:compile + + msg "Compiling assets (this will take few minutes)..." + bundle exec rake gitlab:assets:compile + ) + + # Revert changes. + mv config/application.rb.bak config/application.rb + + msg "Cleaning assets gems..." + bundle config --local without 'exclude development kerberos mysql test assets' + bundle clean + + # Create executables in bin/*. + # See also https://github.com/bundler/bundler/issues/6149. + bundle binstubs --force bundler gitlab-mail_room puma sidekiq + + # Cleanup + rm config/database.yml config/gitlab.yml config/secrets.yml +} + +package() { + local destdir="$pkgdir/$_prefix" + local datadir="$pkgdir/var/lib/gitlab" + local file dest + + install -d -m755 "$destdir" "$destdir"/bin + + install -d -m755 -o git -g git \ + "$datadir" \ + "$pkgdir"/etc/gitlab \ + "$pkgdir"/var/log/gitlab \ + "$datadir"/pages + + install -d -m700 -o git -g git \ + "$datadir"/artifacts \ + "$datadir"/builds \ + "$datadir"/ci_secure_files \ + "$datadir"/dependency_proxy \ + "$datadir"/encrypted_settings \ + "$datadir"/external-diffs \ + "$datadir"/lfs-objects \ + "$datadir"/packages \ + "$datadir"/pages \ + "$datadir"/terraform_state \ + "$datadir"/uploads \ + "$pkgdir"/var/tmp/gitlab \ + "$pkgdir"/var/tmp/gitlab/downloads \ + "$pkgdir"/var/tmp/gitlab/backups + + install -d -m0750 -o git -g www-data \ + "$datadir"/pages + + install -d -m02770 -o git -g git \ + "$datadir"/repositories + + # Install application files. + # Note: *VERSION files and doc directory are required (Help in GitLab + # menu refers to the doc directory). + cp -rl .bundle config.ru Gemfile* INSTALLATION_TYPE Rakefile ./*VERSION \ + app data db doc fixtures config lib locale metrics_server public sidekiq_cluster vendor gems \ + "$destdir"/ + + install -m755 -t "$destdir"/bin/ \ + bin/bundle \ + bin/mail_room \ + bin/metrics-server \ + bin/rails \ + bin/rake \ + bin/sidekiq \ + bin/sidekiq-cluster \ + bin/sidekiqmon \ + bin/puma + + cd "$destdir" + + # Not needed in runtime since we have already compiled all assets. + rm -r app/assets + rm -r vendor/assets + find public/assets -name '*.vue' -delete + find public/assets -type d -exec rmdir --ignore-fail-on-non-empty '{}' \; + # These load gems in the assets group. + rm config/initializers/sprockets.rb + + # Remove more stuff not neeeded in production. + rm -r lib/support + rm -r db/fixtures/development + find lib/tasks -maxdepth 1 -type f ! -name cache.rake ! -name setup.rake -delete + find lib/tasks/gitlab \( -name 'generate_docs.*' \ + -o -name 'shell.*' \ + -o -name 'test.*' \) -delete + + + cd "$destdir"/vendor/bundle/ruby/*/ + + # Remove tests, documentations and other useless files. + find gems/ \( -name 'doc' \ + -o -name 'spec' \ + -o -name 'test' \) \ + -type d -maxdepth 2 -exec rm -fr "{}" + + find gems/ \( -name 'README*' \ + -o -name 'CHANGELOG*' \ + -o -name 'CONTRIBUT*' \ + -o -name '*LICENSE*' \ + -o -name 'Rakefile' \ + -o -name '.*' \) \ + -type f -delete + + # Remove bundled libgit2 sources. + rm -r gems/rugged-*/vendor/libgit2 + + # Remove assets, they are already compiled. + rm -r gems/tanuki_emoji-*/app/assets + + # Remove build logs and cache. + rm -rf build_info/ cache/ + find extensions/ \( -name gem_make.out -o -name mkmf.log \) -delete + + + cd "$destdir" + + # Install and symlink config files. + for file in cable.yml.example \ + database.yml.postgresql \ + gitlab.yml.example \ + puma.rb.example \ + resque.yml.example \ + sidekiq.yml.example \ + initializers/smtp_settings.rb.sample + do + dest="$(basename "${file%.*}")" + install -m640 -g git -D config/$file "$pkgdir"/etc/gitlab/$dest + ln -sf /etc/gitlab/$dest "$pkgdir"/$_prefix/config/${file%.*} + done + + # This file will be generated by the post-install script, just prepare symlink. + ln -sf /etc/gitlab/secrets.yml config/secrets.yml + # These shouldn't be necessary, they are all configurable, but OmniBus + # creates them too, so just to be sure... + ln -sf /etc/gitlab/gitlab_kas_secret .gitlab_kas_secret + ln -sf /etc/gitlab/gitlab_pages_secret .gitlab_pages_secret + ln -sf /etc/gitlab/gitlab_shell_secret .gitlab_shell_secret + ln -sf /etc/gitlab/gitlab_workhorse_secret .gitlab_workhorse_secret + + # Some paths are hard-coded in GitLab, so we must make symlinks. :( + ln -sf /var/lib/gitlab/uploads public/uploads + ln -sf /var/log/gitlab log + ln -sf /var/tmp/gitlab tmp + + cat > "$datadir"/.profile <<-EOF + export RAILS_ENV=production + export NODE_ENV=production + export EXECJS_RUNTIME=Disabled + EOF + + # Install wrapper scripts to /usr/bin. + local name; for name in rake rails; do + sed "s/__COMMAND__/$name/g" "$srcdir"/bin-wrapper.in \ + > "$builddir"/gitlab-$name + install -m755 -D "$builddir"/gitlab-$name "$pkgdir"/usr/bin/gitlab-$name + done + + + cd "$builddir"/workhorse + + # Install workhorse. + make install DESTDIR="$pkgdir" PREFIX=/usr + install -m644 config.toml.example "$pkgdir"/etc/gitlab/workhorse.toml + + + for file in $_pkgname $_pkgname.rails $_pkgname.sidekiq $_pkgname.mailroom $_pkgname.workhorse; do + install -m755 -D "$srcdir"/$file.initd "$pkgdir"/etc/init.d/$file + done + + install -m644 -D "$srcdir"/$_pkgname.confd \ + "$pkgdir"/etc/conf.d/$_pkgname + + install -m644 -D "$srcdir"/$_pkgname.logrotate \ + "$pkgdir"/etc/logrotate.d/$_pkgname +} + +assets() { + depends="" + + amove $_prefix/public/assets +} + +sha512sums=" +d17ff841977d157965337774ac8ebed409e058bb1617d3fadeb8330d46efe32a091483ba30955c883e654b138d9a3ae7740a528418cd30eb1ed18cced508ddb8 gitlab-foss-v16.9.3.tar.gz +daa496f3d9146f9dbddff62477bf49d5c7bd2f2a4cdbadc70ee51c8230f3ef01dc950ef157154b31c7e7bef0beecc5cbac50fbac65a79d6d9099b27bcba8b2ab database-config.patch +55b0667d3969113ffd6860652ee8bdb9a534c25f413f33b2739e922c886988e7cea72c1c00c7eecf29fcff3682b1324156365605ffc6aae45d1e0ccddf96288b gitlab.initd +1f451b67a5d5e58650b0fe862a2b65cfb8bff5502b37d94ae90619c1ff9affbecf24428303a2849bebce5f94bef37078f0e5710e344bbab616134e910938384a gitlab.mailroom.initd +b6a6d9ba20557e61efa24f2d5a489873fefbb981f7d4465794a857b2971263c08ec29cc001c372522cdc0d48245e59751307c9f44f6ef4d87bf2e3ec5c23fb1c gitlab.rails.initd +cb4ec100f0ea7ffcbb37aead8423e636629e2f4848b2974a7b2468e96cb1081ca732ac336417b08dd943afb961df888c73af1334dcbe054dfd361e74f492fd86 gitlab.sidekiq.initd +85c4e257a030832bd70ad1e257ae7cb568b31e01201fc845abac02d00f02492ca694be1fa2bf743dd8c8623e6a79d36adee3f4de02040134c11158a6001c064b gitlab.workhorse.initd +4dc00b16462f30591297fcb535fc364185d3ed76e9956597f0423a8dfd8a9a351f6ac29d9f0c73052c11324fba4768eb89a21c6bef4da99f15baaea8c9ab8407 gitlab.confd +57f258246925fbef0780caebdf005983c72fe3db1ab3242a1e00137bd322f5ec6c0fd958db7178b8fc22103d071f550d6f71f08422bcd9e859d2a734b2ecef00 gitlab.logrotate +a944c3886388ba1574bf8c96b6de4d9f24ef4a83f553c31a224e17a3b01f2a5c65b60c59b7ed7ca4b25670c60ea8dd41b96a8a623d909d2bb09bdf2520ed7f23 bin-wrapper.in +ab9a09fca6126b18b76e61380990dc217f915162985880e90b905b3210a1fef229af3db1f1ca180177d3cba91ab5fe33798ac685055abf0adc44a1b630f71b39 downgrade-sys-filesystem-depend.patch +" diff --git a/user/gitlab-foss/bin-wrapper.in b/user/gitlab-foss/bin-wrapper.in new file mode 100644 index 0000000..aa1d411 --- /dev/null +++ b/user/gitlab-foss/bin-wrapper.in @@ -0,0 +1,15 @@ +#!/bin/sh + +BUNDLE_DIR='/usr/lib/bundles/gitlab' +export RAILS_ENV='production' +export NODE_ENV='production' +export EXECJS_RUNTIME='Disabled' + +cd $BUNDLE_DIR +install -m 700 -o git -g git -d "$(readlink ./tmp)" + +if [ "$(id -un)" != 'git' ]; then + exec su git -c '"$0" "$@"' -- bin/__COMMAND__ "$@" +else + exec bin/__COMMAND__ "$@" +fi diff --git a/user/gitlab-foss/database-config.patch b/user/gitlab-foss/database-config.patch new file mode 100644 index 0000000..9b113e1 --- /dev/null +++ b/user/gitlab-foss/database-config.patch @@ -0,0 +1,66 @@ +diff --git a/config/database.yml.postgresql.orig b/config/database.yml.postgresql +index da9f458..2d6d44e 100644 +--- a/config/database.yml.postgresql.orig ++++ b/config/database.yml.postgresql +@@ -26,13 +26,6 @@ production: + username: git + password: "secure password" + host: localhost +- geo: +- adapter: postgresql +- encoding: unicode +- database: gitlabhq_geo_production +- username: git +- password: "secure password" +- host: localhost + + # + # Development specific +@@ -57,13 +50,6 @@ development: + host: localhost + variables: + statement_timeout: 15s +- geo: +- adapter: postgresql +- encoding: unicode +- database: gitlabhq_geo_development +- username: postgres +- password: "secure password" +- host: localhost + + # + # Staging specific +@@ -84,13 +70,6 @@ staging: + username: git + password: "secure password" + host: localhost +- geo: +- adapter: postgresql +- encoding: unicode +- database: gitlabhq_geo_staging +- username: git +- password: "secure password" +- host: localhost + + # Warning: The database defined as "test" will be erased and + # re-generated from your development database when you run "rake". +@@ -119,19 +98,3 @@ test: &test + reaping_frequency: nil + variables: + statement_timeout: 15s +- geo: +- adapter: postgresql +- encoding: unicode +- database: gitlabhq_geo_test +- username: postgres +- password: +- host: localhost +- reaping_frequency: nil +- embedding: +- adapter: postgresql +- encoding: unicode +- database: gitlabhq_embedding_test +- username: postgres +- password: +- host: localhost +- reaping_frequency: nil diff --git a/user/gitlab-foss/downgrade-sys-filesystem-depend.patch b/user/gitlab-foss/downgrade-sys-filesystem-depend.patch new file mode 100644 index 0000000..3ed59d0 --- /dev/null +++ b/user/gitlab-foss/downgrade-sys-filesystem-depend.patch @@ -0,0 +1,37 @@ +diff --git a/Gemfile.orig b/Gemfile +index c1e9e34..a4448b7 100644 +--- a/Gemfile.orig ++++ b/Gemfile +@@ -525,7 +525,7 @@ gem 'health_check', '~> 3.0' # rubocop:todo Gemfile/MissingFeatureCategory + + # System information + gem 'vmstat', '~> 2.3.0' # rubocop:todo Gemfile/MissingFeatureCategory +-gem 'sys-filesystem', '~> 1.4.3' # rubocop:todo Gemfile/MissingFeatureCategory ++gem 'sys-filesystem', '= 1.3.2' # rubocop:todo Gemfile/MissingFeatureCategory + + # NTP client + gem 'net-ntp' # rubocop:todo Gemfile/MissingFeatureCategory +diff --git a/Gemfile.lock.orig b/Gemfile.lock +index e2ebb91..39b6df3 100644 +--- a/Gemfile.lock.orig ++++ b/Gemfile.lock +@@ -1605,8 +1605,8 @@ GEM + attr_required (>= 0.0.5) + httpclient (>= 2.4) + sync (0.5.0) +- sys-filesystem (1.4.3) +- ffi (~> 1.1) ++ sys-filesystem (1.3.2) ++ ffi (>= 0) + sysexits (1.2.0) + table_print (1.5.7) + tanuki_emoji (0.9.0) +@@ -2061,7 +2059,7 @@ DEPENDENCIES + ssh_data (~> 1.3) + stackprof (~> 0.2.25) + state_machines-activerecord (~> 0.8.0) +- sys-filesystem (~> 1.4.3) ++ sys-filesystem (= 1.3.2) + tanuki_emoji (~> 0.9) + telesignenterprise (~> 2.2) + terser (= 1.0.2) diff --git a/user/gitlab-foss/gitlab-foss.post-install b/user/gitlab-foss/gitlab-foss.post-install new file mode 100644 index 0000000..65d05cc --- /dev/null +++ b/user/gitlab-foss/gitlab-foss.post-install @@ -0,0 +1,108 @@ +#!/bin/sh +set -eu + +group='git' +data_dir='/var/lib/gitlab' +secrets_file='/etc/gitlab/secrets.yml' +shell_secret_file='/etc/gitlab/gitlab_shell_secret' +workhorse_secret_file='/etc/gitlab/gitlab_workhorse_secret' +kas_secret_file='/etc/gitlab/gitlab_kas_secret' + +gen_random_b64() { + local bits="$1" + ruby <<-EOF + require 'securerandom' + require 'base64' + puts Base64.strict_encode64(SecureRandom.random_bytes($bits)) + EOF +} + + +echo "* Checking $secrets_file" >&2 + +ruby <<-EOF + require 'openssl' + require 'securerandom' + require 'yaml' + + secrets_file = '$secrets_file' + changed = false + + secrets = YAML.load_file(secrets_file) if File.exist?(secrets_file) + secrets ||= {} + prod = secrets['production'] ||= {} + prod['db_key_base'] ||= ( changed = true; SecureRandom.hex(64) ) + prod['secret_key_base'] ||= ( changed = true; SecureRandom.hex(64) ) + prod['otp_key_base'] ||= ( changed = true; SecureRandom.hex(64) ) + prod['encrypted_settings_key_base'] ||= ( changed = true; SecureRandom.hex(64) ) + prod['openid_connect_signing_key'] ||= begin + changed = true + prod.delete('jws_private_key') || OpenSSL::PKey::RSA.new(2048).to_pem + end + # db/fixtures/production/010_settings.rb + prod['ci_jwt_signing_key'] ||= ( changed = true; OpenSSL::PKey::RSA.new(2048).to_pem ) + + if changed + STDERR.puts "* Generating random secrets into #{secrets_file}" + File.write(secrets_file, YAML.dump(secrets), mode: 'w', perm: 0640) + end +EOF +chown root:$group "$secrets_file" + +if [ ! -f "$shell_secret_file" ]; then + echo "* Generating random secret in $shell_secret_file" >&2 + + head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 64 > "$shell_secret_file" + chown root:$group "$shell_secret_file" + chmod 0640 "$shell_secret_file" +fi + +if [ ! -f "$workhorse_secret_file" ]; then + echo "* Generating random secret in $workhorse_secret_file" >&2 + + # Sync with lib/gitlab/workhorse.rb. + gen_random_b64 32 > "$workhorse_secret_file" + chown root:$group "$workhorse_secret_file" + chmod 0640 "$workhorse_secret_file" +fi + +if [ ! -f "$kas_secret_file" ]; then + echo "* Generating random secret in $kas_secret_file" >&2 + + # Sync with lib/gitlab/workhorse.rb. + gen_random_b64 32 > "$kas_secret_file" + chown root:$group "$kas_secret_file" + chmod 0640 "$kas_secret_file" +fi + +# NOTE: We create this symlink in post-install script instead of APKBULD, +# so user can decide to have tmp dir inside $data_dir (e.g. it's on bigger disk). +if [ ! -e "$data_dir"/tmp ]; then + ln -s /var/tmp/gitlab "$data_dir"/tmp +fi + + +if [ "${0##*.}" = 'post-upgrade' ]; then + cat >&2 <<-EOF + * + * To finish GitLab upgrade run: + * + * gitlab-rake gitlab:db:configure + * + EOF +else + cat >&2 <<-EOF + * + * 1. Adjust settings in /etc/gitlab/database.yml and gitlab.yml. + * + * 2. Create database for GitLab: + * + * psql -c "CREATE ROLE gitlab PASSWORD 'top-secret' INHERIT LOGIN;" + * psql -c "CREATE DATABASE gitlab OWNER gitlab ENCODING 'UTF-8';" + * psql -d gitlab -c "CREATE EXTENSION pg_trgm; CREATE EXTENSION btree_gist;" + * + * 3. Run "gitlab-rake gitlab:setup", or "gitlab-rake gitlab:db:configure" if + * you are updating existing database. + * + EOF +fi diff --git a/user/gitlab-foss/gitlab-foss.post-upgrade b/user/gitlab-foss/gitlab-foss.post-upgrade new file mode 120000 index 0000000..20d2b0c --- /dev/null +++ b/user/gitlab-foss/gitlab-foss.post-upgrade @@ -0,0 +1 @@ +gitlab-foss.post-install \ No newline at end of file diff --git a/user/gitlab-foss/gitlab-foss.pre-install b/user/gitlab-foss/gitlab-foss.pre-install new file mode 100644 index 0000000..66ad895 --- /dev/null +++ b/user/gitlab-foss/gitlab-foss.pre-install @@ -0,0 +1,53 @@ +#!/bin/sh +# It's very important to set user/group correctly. + +git_dir='/var/lib/gitlab' + +if ! getent group git 1>/dev/null; then + echo '* Creating group git' 1>&2 + + addgroup -S git +fi + +if ! id git 2>/dev/null 1>&2; then + echo '* Creating user git' 1>&2 + + adduser -DHS -G git -h "$git_dir" -s /bin/sh \ + -g "added by apk for gitlab-foss" git + passwd -u git 1>/dev/null # unlock +fi + +if ! id -Gn git | grep -Fq redis; then + echo '* Adding user git to group redis' 1>&2 + + addgroup git redis +fi + +if [ "$(id -gn git)" != 'git' ]; then + cat >&2 <<-EOF + !! + !! User git has primary group $(id -gn git). We strongly recommend to change + !! git's primary group to git, otherwise GitLab may not work correctly. + !! + EOF + + # Add it at least as a supplementary group. + adduser git git +fi + +user_home="$(getent passwd git | cut -d: -f6)" + +if [ "$user_home" != "$git_dir" ]; then + cat >&2 <<-EOF + !! + !! User git has home directory in $user_home, but this package assumes + !! $git_dir. Although it's possible to use a different directory, + !! it's really not easy. + !! + !! Please change git's home directory to $git_dir, or adjust settings + !! and move files yourself. Otherwise GitLab will not work! + !! + EOF +fi + +exit 0 diff --git a/user/gitlab-foss/gitlab-rails.confd b/user/gitlab-foss/gitlab-rails.confd new file mode 100644 index 0000000..d85aa9c --- /dev/null +++ b/user/gitlab-foss/gitlab-rails.confd @@ -0,0 +1,20 @@ +# Configuration for /etc/init.d/gitlab.rails + +# Path to the Puma configuration file. +#puma_config="/etc/gitlab/puma.rb" + +# IP address and port for Puma server to listen on. +#puma_listen_tcp="127.0.0.1:8080" + +# Absolute path of unix socket for Puma server to listen on. +#puma_listen_unix="/run/gitlab/gitlab.socket" + +# Path to the file to redirect stdout from Puma server to. +#puma_stdout_file="/var/log/gitlab/puma_stdout.log" + +# Path to the file to redirect stderr from Puma server to. +#puma_stderr_file="/var/log/gitlab/puma_stderr.log" + +# Action Cable uses a separate thread pool per Puma worker. This configures +# number of threads in the pool. +#action_cable_worker_pool_size=4 diff --git a/user/gitlab-foss/gitlab.confd b/user/gitlab-foss/gitlab.confd new file mode 100644 index 0000000..ade6bcc --- /dev/null +++ b/user/gitlab-foss/gitlab.confd @@ -0,0 +1,85 @@ +# Configuration file for /etc/init.d/gitlab and +# /etc/init.d/gitlab.{mailroom,rails,sidekiq,workhorse} + + +# Path to the base directory for the Prometheus metrics used by Puma and +# Sidekiq. +#metrics_dir=/dev/shm/gitlab + + +# How many Puma worker processes to create (0 to disable cluster mode). +#puma_workers=3 + +# IP address and port for Puma server to listen on. +#puma_listen_tcp="127.0.0.1:8080" + +# Absolute path of unix socket for Puma server to listen on. +#puma_listen_unix="/run/gitlab/gitlab.socket" + +# Action Cable uses a separate thread pool per Puma worker. This configures +# number of threads in the pool. +#action_cable_worker_pool_size=4 + + +# IP address and port, or absolute path of the unix socket, where should +# Workhorse listen on for connections from a web server. +#workhorse_listen="/run/gitlab/workhorse.socket" + +# How long to wait for response headers when proxying the request. +#workhorse_proxy_header_timeout="1m0s" + +# Number of API requests allowed at single time. +#workhorse_api_limit= + +# Maximum queueing duration of requests (default 30s). +#workhorse_api_queue_duration= + +# Number of API requests allowed to be queued. +#workhorse_api_queue_limit= + +# Long polling duration for job requesting for runners (default 0s - disabled) +#workhorse_ci_long_polling_duration= + +# Log format to use: text, json, structured, none. Defaults to "text". +#workhorse_log_format= + +# Prometheus listening address. +#workhorse_prometheus_listen= + +# Sentry DSN for Workhorse. +#workhorse_sentry_dsn= + + +# Specify how many processes to create using sidekiq-cluster and which queue +# they should handle. Each whitespace-separated item equates to one additional +# Sidekiq process, and comma-separated values in each item determine the queues +# it works on. The special queue name "*" means all queues. +# Example: "* gitlab_shell process_commit,post_receive" +# See https://docs.gitlab.com/ee/administration/sidekiq/extra_sidekiq_processes.html. +#sidekiq_queue_groups="*" + +# Maximum threads to use with Sidekiq (default: 50, 0 to disable). +#sidekiq_max_concurrency= + +# Minimum threads to use with Sidekiq (default: 0). +#sidekiq_min_concurrency= + +# The number of seconds to wait between worker checks. +#sidekiq_interval= + +# Graceful timeout for all running processes. +#sidekiq_shutdown_timeout= + +# Run workers for all queues in sidekiq_queues.yml except the given ones. +#sidekiq_negate=no + +# Run workers based on the provided selector. +#sidekiq_queue_selector=no + +# Memory limit (in MiB) for the Sidekiq process. If the RSS (Resident Set Size) +# of the Sidekiq process exceeds this limit, a delayed shutdown is triggered. +#sidekiq_memkiller_max_rss=2000 + + +# Enable mail_room to handle incoming mails? +#mailroom_enabled="no" diff --git a/user/gitlab-foss/gitlab.initd b/user/gitlab-foss/gitlab.initd new file mode 100644 index 0000000..c286ae2 --- /dev/null +++ b/user/gitlab-foss/gitlab.initd @@ -0,0 +1,49 @@ +#!/sbin/openrc-run + +name="GitLab" +description="Meta script for starting/stopping all the GitLab components" + +: ${mailroom_enabled:="no"} +: ${pages_enabled:="yes"} + +subservices="gitlab.rails gitlab.gitaly gitlab.sidekiq gitlab.workhorse" +if yesno "$mailroom_enabled"; then + subservices="$subservices gitlab.mailroom" +fi +if yesno "$pages_enabled" && [ -e /etc/init.d/gitlab.pages ]; then + subservices="$subservices gitlab.pages" +fi + +depend() { + use net +} + +start() { + local ret=0 + + ebegin "Starting all GitLab components" + local svc; for svc in $subservices; do + service $svc start || ret=1 + done + eend $ret +} + +stop() { + local ret=0 + + ebegin "Stopping all GitLab components" + local svc; for svc in $subservices; do + service $svc stop || ret=1 + done + eend $ret +} + +status() { + local ret=0 + + local svc; for svc in $subservices; do + echo "$svc:" + service $svc status || ret=1 + done + eend $ret +} diff --git a/user/gitlab-foss/gitlab.logrotate b/user/gitlab-foss/gitlab.logrotate new file mode 100644 index 0000000..721ff49 --- /dev/null +++ b/user/gitlab-foss/gitlab.logrotate @@ -0,0 +1,24 @@ +/var/log/gitlab/workhorse.log { + compress + maxsize 10M + minsize 1M + missingok + postrotate + /etc/init.d/gitlab.workhorse --quiet --ifstarted reopen + endscript + sharedscripts + rotate 5 + weekly +} + +/var/log/gitlab/*.log { + compress + copytruncate + delaycompress + maxsize 10M + minsize 1M + missingok + sharedscripts + rotate 10 + weekly +} diff --git a/user/gitlab-foss/gitlab.mailroom.initd b/user/gitlab-foss/gitlab.mailroom.initd new file mode 100644 index 0000000..e6d6a64 --- /dev/null +++ b/user/gitlab-foss/gitlab.mailroom.initd @@ -0,0 +1,40 @@ +#!/sbin/openrc-run + +supervisor=supervise-daemon + +name="GitLab (mailroom)" +description="GitLab service for processing incoming mails." + +: ${gitlab_base:="/usr/lib/bundles/gitlab"} +: ${gitlab_config:="/etc/gitlab/gitlab.yml"} +: ${mailroom_logfile:="/var/log/gitlab/mail_room.log"} +: ${mailroom_config:="$gitlab_base/config/mail_room.yml"} + +command="$gitlab_base/bin/mail_room" +command_args="-c $mailroom_config" +command_background="yes" +command_user="git" + +directory="$gitlab_base" +error_log="$mailroom_logfile" +output_log="$mailroom_logfile" + +supervise_daemon_args=" + --env RAILS_ENV=production + --env TZ=:/etc/localtime + --env MAIL_ROOM_GITLAB_CONFIG_FILE=$gitlab_config + " +start_stop_daemon_args="--interpreted $supervise_daemon_args" +pidfile="/run/gitlab/mail_room.pid" + +required_files="$mailroom_config $gitlab_config" + +depend() { + need redis + use net +} + +start_pre() { + checkpath -d -m 755 -o $command_user -q "${pidfile%/*}" || return 1 + checkpath -f -m 640 -o $command_user "$mailroom_logfile" +} diff --git a/user/gitlab-foss/gitlab.rails.initd b/user/gitlab-foss/gitlab.rails.initd new file mode 100644 index 0000000..051cbcd --- /dev/null +++ b/user/gitlab-foss/gitlab.rails.initd @@ -0,0 +1,114 @@ +#!/sbin/openrc-run + +name="GitLab Rails" +description="GitLab application" + +extra_started_commands="reload reopen" +description_reload="Reload configuration" +description_reopen="Reopen log files" + +: ${gitlab_base:="/usr/lib/bundles/gitlab"} +: ${metrics_dir:="/dev/shm/gitlab"} + +: ${action_cable_worker_pool_size:=4} +: ${gitlab_config:="/etc/gitlab/gitlab.yml"} +: ${puma_workers:=3} +: ${puma_listen_unix:="/run/gitlab/gitlab.socket"} +: ${puma_listen_tcp:="127.0.0.1:8080"} +: ${puma_stdout_file:="/var/log/gitlab/puma_stdout.log"} +: ${puma_stderr_file:="/var/log/gitlab/puma_stderr.log"} +: ${puma_config:="/etc/gitlab/puma.rb"} +: ${puma_metrics_dir:="$metrics_dir/puma"} + +command="$gitlab_base/bin/puma" +command_args=" + --config $puma_config + --workers $puma_workers + --bind tcp://$puma_listen_tcp + --bind unix://$puma_listen_unix + --redirect-stdout $puma_stdout_file + --redirect-stderr $puma_stderr_file + --redirect-append + --state /run/gitlab/puma.state + " +command_background="yes" +command_user="git" +directory="$gitlab_base" + +supervise_daemon_args=" + --env ACTION_CABLE_WORKER_POOL_SIZE=$action_cable_worker_pool_size + --env RAILS_ENV=production + --env NODE_ENV=production + --env EXECJS_RUNTIME=Disabled + --env GITLAB_BASE=$gitlab_base + --env TZ=:/etc/localtime + --env prometheus_multiproc_dir=$puma_metrics_dir + ${supervise_daemon_args:-} + " +start_stop_daemon_args=" + --interpreted + $supervise_daemon_args + $start_stop_daemon_args + " +pidfile="/run/gitlab/puma.pid" + +required_files="$gitlab_config $puma_config" + +depend() { + need redis + want sshd postgresql docker-registry + use net +} + +start_pre() { + checkpath -d -m 755 -o $command_user -q "${pidfile%/*}" || return 1 + checkpath -d -m 700 -o $command_user -q "$(readlink -f "$gitlab_base"/tmp)" || return 1 + checkpath -d -m 700 -o $command_user -q "$metrics_dir" || return 1 + checkpath -d -m 700 -o $command_user --directory-truncate "$puma_metrics_dir" || return 1 + checkpath -f -m 644 -o $command_user "$puma_stdout_file" || return 1 + checkpath -f -m 644 -o $command_user "$puma_stderr_file" || return 1 + + # Ruby requires sticky bit on TMP directory. + checkpath -d -m 1777 /tmp + + local downloads_path="$(_parse_yaml "$gitlab_config" \ + production.gitlab.repository_downloads_path)" + + if [ -n "$downloads_path" ]; then + checkpath -d -m 700 -o $command_user -q "$downloads_path" + fi +} + +reload() { + ebegin "Reloading $name" + + if [ "$supervisor" ]; then + $supervisor "$RC_SVCNAME" --signal USR2 + else + start-stop-daemon --pidfile "$pidfile" --signal USR2 + fi + eend $? +} + +reopen() { + ebegin "Telling $name to reopen log files" + + if [ "$supervisor" ]; then + $supervisor "$RC_SVCNAME" --signal USR1 + else + start-stop-daemon --pidfile "$pidfile" --signal USR1 + fi + eend $? +} + +_parse_yaml() { + local file="$1" + local key="$2" + local default="${3:-}" + local key_path="$(echo "[\"$key\"]" | sed 's/\./"]["/g')" + + ruby <<-EOF + require "yaml" + puts YAML.load_file("$file")$key_path rescue puts "$default" + EOF +} diff --git a/user/gitlab-foss/gitlab.sidekiq.initd b/user/gitlab-foss/gitlab.sidekiq.initd new file mode 100644 index 0000000..eb30f4c --- /dev/null +++ b/user/gitlab-foss/gitlab.sidekiq.initd @@ -0,0 +1,76 @@ +#!/sbin/openrc-run + +extra_started_commands="finish" + +name="GitLab Sidekiq" +description="GitLab backgroud workers" +description_finish="Stop fetching new jobs and finish current ones" + +: ${gitlab_base:="/usr/lib/bundles/gitlab"} +: ${metrics_dir:="/dev/shm/gitlab"} + +: ${sidekiq_logfile:="/var/log/gitlab/sidekiq.log"} +: ${sidekiq_memkiller_max_rss:="2000"} # default per Omnibus +: ${sidekiq_metrics_dir:="$metrics_dir/sidekiq"} +: ${sidekiq_negate:="no"} +: ${sidekiq_queue_groups:="*"} +: ${sidekiq_queue_selector:="no"} + +command="$gitlab_base/bin/sidekiq-cluster" +# Note: The rest of the options is set in start_pre(). +command_args="-r $gitlab_base -e production ${command_args:-}" +command_background="yes" +command_user="git" + +directory="$gitlab_base" +error_log="$sidekiq_logfile" +output_log="$sidekiq_logfile" + +supervise_daemon_args=" + --env RAILS_ENV=production + --env NODE_ENV=production + --env EXECJS_RUNTIME=Disabled + --env TZ=:/etc/localtime + --env SIDEKIQ_MEMORY_KILLER_MAX_RSS=$(( sidekiq_memkiller_max_rss * 1024 )) + --env prometheus_multiproc_dir=$sidekiq_metrics_dir + " +start_stop_daemon_args="--interpreted $supervise_daemon_args" +pidfile="/run/gitlab/sidekiq.pid" + +depend() { + need redis + use net postgresql +} + +start_pre() { + yesno "$sidekiq_queue_selector" && command_args="$command_args --queue-selector" + + command_args="$command_args + $(optif --max-concurrency ${sidekiq_max_concurrency:-}) + $(optif --min-concurrency ${sidekiq_min_concurrency:-}) + $(optif --interval ${sidekiq_interval:-}) + $(optif --timeout ${sidekiq_shutdown_timeout:-}) + $(set -f; printf "'%s' " $sidekiq_queue_groups) + " + yesno "$sidekiq_negate" && command_args="$command_args --negate" + + checkpath -d -m 755 -o $command_user -q "${pidfile%/*}" || return 1 + checkpath -d -m 700 -o $command_user -q "$metrics_dir" || return 1 + checkpath -d -m 700 -o $command_user --directory-truncate "$sidekiq_metrics_dir" || return 1 + checkpath -f -m 644 -o $command_user "$sidekiq_logfile" +} + +finish() { + ebegin "Telling $name to stop fetching new jobs" + + if [ "$supervisor" ]; then + $supervisor "$RC_SVCNAME" --signal TSTP + else + start-stop-daemon --pidfile "$pidfile" --signal TSTP + fi + eend $? +} + +optif() { + test -n "$2" && printf '%s/n' "$1=$2" || true +} diff --git a/user/gitlab-foss/gitlab.workhorse.initd b/user/gitlab-foss/gitlab.workhorse.initd new file mode 100644 index 0000000..4b04d7c --- /dev/null +++ b/user/gitlab-foss/gitlab.workhorse.initd @@ -0,0 +1,75 @@ +#!/sbin/openrc-run + +extra_started_commands="reopen" + +name="GitLab Workhorse" +description="A reverse proxy for GitLab." +description_reopen="Reopen log files" + +: ${gitlab_base:="/usr/lib/bundles/gitlab"} +: ${workhorse_logfile:="/var/log/gitlab/workhorse.log"} +: ${workhorse_access_log:="no"} + +command="/usr/bin/gitlab-workhorse" +# Note: The rest of the options is set in start_pre(). +command_args=" + -authBackend=http://${puma_listen_tcp:="127.0.0.1:8080"} + -config=${workhorse_config:="/etc/gitlab/workhorse.toml"} + -documentRoot=${gitlab_public_dir:="$gitlab_base/public"} + -listenAddr=${workhorse_listen:="/run/gitlab/workhorse.socket"} + -listenUmask=${workhorse_listen_umask:="000"} + -logFile=$workhorse_logfile + -secretPath=${workhorse_secret_path:="/etc/gitlab/gitlab_workhorse_secret"} + " +command_background="yes" +command_user="git" +directory="$gitlab_base" +pidfile="/run/gitlab/workhorse.pid" + +depend() { + use net +} + +start_pre() { + local listen_net="tcp" + [ "${workhorse_listen:0:1}" = '/' ] && listen_net="unix" + + command_args="$command_args + -listenNetwork=$listen_net + $(optif -apiCiLongPollingDuration "$workhorse_ci_long_polling_duration") + $(optif -apiLimit "$workhorse_api_limit") + $(optif -apiQueueDuration "$workhorse_api_queue_duration") + $(optif -apiQueueLimit "$workhorse_api_queue_limit") + $(optif -authSocket "$puma_listen_unix") + $(optif -logFormat "$workhorse_log_format") + $(optif -prometheusListenAddr "$workhorse_prometheus_listen_addr") + $(optif -proxyHeadersTimeout "$workhorse_proxy_header_timeout")" + # FIXME: not implemented + #yesno "$workhorse_access_log" || command_args="$command_args -disableAccessLog" + + start_stop_daemon_args="$start_stop_daemon_args + $(optif '--env GITLAB_WORKHORSE_SENTRY_DSN' "$workhorse_sentry_dns")" + supervise_daemon_args="$supervise_daemon_args + $(optif '--env GITLAB_WORKHORSE_SENTRY_DSN' "$workhorse_sentry_dns")" + + checkpath -d -m 755 -o $command_user -q "${pidfile%/*}" || return 1 + if [ "$listen_net" = "unix" ]; then + checkpath -d -m 755 -o $command_user -q "${workhorse_listen%/*}" || return 1 + fi + checkpath -f -m 640 -o $command_user "$workhorse_logfile" +} + +reopen() { + ebegin "Telling $name to reopen log files" + + if [ "$supervisor" ]; then + $supervisor "$RC_SVCNAME" --signal HUP + else + start-stop-daemon --pidfile "$pidfile" --signal HUP + fi + eend $? +} + +optif() { + test -n "$2" && printf '%s/n' "$1=$2" || true +} diff --git a/user/gitlab-pages/APKBUILD b/user/gitlab-pages/APKBUILD new file mode 100644 index 0000000..ec35745 --- /dev/null +++ b/user/gitlab-pages/APKBUILD @@ -0,0 +1,35 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) +# Contributor: Jakub Jirutka +pkgname=gitlab-pages +pkgver=16.9.3 +_gittag="v$pkgver" +pkgrel=0 +pkgdesc="A daemon used to serve static websites for GitLab users" +url="https://gitlab.com/gitlab-org/gitlab-pages/" +arch="all" +license="MIT" +makedepends="go>=1.5" +source=" + https://gitlab.com/gitlab-org/gitlab-pages/-/archive/$_gittag/gitlab-pages-$_gittag.tar.gz + ungit-makefile.patch + $pkgname.initd + " +subpackages="$pkgname-openrc" +builddir="$srcdir"/$pkgname-$_gittag + +build() { + make VERSION=$pkgver REVISION=$pkgrel GOPATH="$srcdir" CGO_ENABLED=0 +} + +package() { + install -D -m 755 $pkgname "$pkgdir"/usr/bin/$pkgname + install -m755 -D "$srcdir"/$pkgname.initd \ + "$pkgdir"/etc/init.d/gitlab.pages +} + +sha512sums=" +5a97176d820f787b96cac54dc040a0232c6b0e8a98f7e737af2f5c9a0cff10ce79263a35fdf560c58eb84eaaf1ed109a75121b050f059b4bdf493d05b58861bc gitlab-pages-v16.9.3.tar.gz +710a9b652327e57e620c2bdb02bf912a6f61044eaaf61d36c6612284e9b951d2ac6f5eef77dfea16a0cde328bd4c556d9e47791c560139c27cb9659076f809b1 ungit-makefile.patch +20bc66c1c3548568ed353ca8d584f9108b9688f9375f212a18efc7b8386fdaafb3b2dc9e865f21c7f8fd31ada6e91842a8bb8d397f64851d853bb0de3e0e60bb gitlab-pages.initd +" diff --git a/user/gitlab-pages/gitlab-pages.initd b/user/gitlab-pages/gitlab-pages.initd new file mode 100644 index 0000000..4a34507 --- /dev/null +++ b/user/gitlab-pages/gitlab-pages.initd @@ -0,0 +1,55 @@ +#!/sbin/openrc-run + +name="GitLab Pages" +description="A daemon used to serve static websites for GitLab users" + +: ${pages_user:=${user:-"git"}} +: ${pages_root:="/var/lib/gitlab/pages"} +: ${pages_logfile:="/var/log/gitlab/pages.log"} + +command="/usr/bin/gitlab-pages" +# Note: The rest of the options is set in start_pre(). +command_args=" + -pages-domain=$pages_domain + -pages-root=$pages_root + -redirect-http=${pages_redirect_http:-true} + -use-http2=${pages_use_http2:-true} + " +command_background="yes" + +start_stop_daemon_args=" + --chdir $pages_root + --user $pages_user + --stdout $pages_logfile + --stderr $pages_logfile" +pidfile="/run/gitlab-pages.pid" + + +depend() { + use net +} + +start_pre() { + local item + + for item in $pages_listen_http; do + command_args="$command_args -listen-http=$item" + done + for item in $pages_listen_https; do + command_args="$command_args -listen-https=$item" + done + for item in $pages_listen_proxy; do + command_args="$command_args -listen-proxy=$item" + done + + command_args="$command_args + $(optif -metrics-address "$pages_metrics_address") + $(optif -root-cert "$pages_root_cert") + $(optif -root-key "$pages_root_key")" + + checkpath -m 640 -o $pages_user -f "$pages_logfile" +} + +optif() { + test -n "$2" && printf '%s/n' "$1=$2" || true +} diff --git a/user/gitlab-pages/ungit-makefile.patch b/user/gitlab-pages/ungit-makefile.patch new file mode 100644 index 0000000..4cbc132 --- /dev/null +++ b/user/gitlab-pages/ungit-makefile.patch @@ -0,0 +1,18 @@ +diff --git a/Makefile.internal.mk.orig b/Makefile.internal.mk +index 6dfaa1b..207bdaf 100644 +--- a/Makefile.internal.mk.orig ++++ b/Makefile.internal.mk +@@ -1,13 +1,3 @@ +-REVISION := $(shell git rev-parse --short HEAD || echo unknown) +-LAST_TAG := $(shell git describe --tags --abbrev=0) +-COMMITS := $(shell echo `git log --oneline $(LAST_TAG)..HEAD | wc -l`) +-VERSION := $(shell cat VERSION) +-BRANCH := $(shell git rev-parse --abbrev-ref HEAD) +- +-ifneq (v$(VERSION),$(LAST_TAG)) +- VERSION := $(shell echo $(VERSION)~beta.$(COMMITS).g$(REVISION)) +-endif +- + VERSION_FLAGS :=-X "main.VERSION=$(VERSION)" -X "main.REVISION=$(REVISION)" + + export GOBIN := $(CURDIR)/bin diff --git a/user/gitlab-shell/APKBUILD b/user/gitlab-shell/APKBUILD new file mode 100644 index 0000000..544bd55 --- /dev/null +++ b/user/gitlab-shell/APKBUILD @@ -0,0 +1,66 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) +# Contributor: Jakub Jirutka +pkgname=gitlab-shell +pkgver=14.34.0 +pkgrel=0 +pkgdesc="GitLab Shell handles git SSH sessions for GitLab" +url="https://gitlab.com/gitlab-org/gitlab-shell" +arch="all" +license="MIT" +depends="git openssh" +makedepends="go krb5-dev" +pkgusers="git" +pkggroups="git" +install="$pkgname.pre-install $pkgname.post-install" +# NOTE: user vs system gitconfig, see https://gitlab.com/gitlab-org/omnibus-gitlab/-/merge_requests/6166 +source="https://gitlab.com/gitlab-org/gitlab-shell/-/archive/v$pkgver/gitlab-shell-v$pkgver.tar.gz + config.patch + change-config-path.patch + gitconfig + " +builddir="$srcdir/$pkgname-v$pkgver" +options="!check" + +build() { + # BUILD_TAGS - build without tracing libs, + # see https://gitlab.com/gitlab-org/labkit/-/merge_requests/2 + make build \ + VERSION_STRING="$pkgver" \ + BUILD_TAGS="" +} + +package() { + local datadir="$pkgdir/var/lib/gitlab" + local libdir="$pkgdir/usr/lib/gitlab-shell" + + # XXX: I couldn't figure out how/where is gitlab-shell called, + # so I kept /usr/lib/gitlab-shell. It should be changed to /usr. + make install DESTDIR="$pkgdir" PREFIX=/usr/lib/gitlab-shell + + install -m644 VERSION "$libdir"/ + install -m644 -D config.yml.example "$pkgdir"/etc/gitlab/gitlab-shell.yml + + cd "$pkgdir" + + rm "$libdir"/bin/gitlab-sshd + + install -d -m755 -o git -g git \ + "$pkgdir"/var/log/gitlab \ + "$datadir" + + install -d -m02770 -o git -g git \ + "$datadir"/repositories + + install -m644 -o git -g git "$srcdir"/gitconfig "$datadir"/.gitconfig + + ln -s /etc/gitlab/gitlab-shell.yml "$libdir"/config.yml + ln -s /etc/gitlab/gitlab_shell_secret "$libdir"/.gitlab_shell_secret +} + +sha512sums=" +703685c8aae6498ad42103a70a65e18b4d2a617687a5488a52bf4c8147cd56a724a109ea27456ca93a723b458499ab09590ad5d1591eb5d3c38d8d33870736eb gitlab-shell-v14.34.0.tar.gz +5123f639de976b83a961f5d0a9f53b0ff7559ceb4e73b25a8029423932ba6249c430b8bb04dae4dce2e13330e95d4a7a88e63376ead2d6369f6adb264fd36d49 config.patch +499b3a46ea94a33a23b01f6a7509d74f5a6781b930619b3b8ae42bdeae8a052cc636578744d7992b4ae4f9b9f72b11ee3d3c0f5e50986fa3f7e35b979b08aada change-config-path.patch +c53da7f145593693392d9fa880ad5a1909bfc7504fd1c93d94a468c3e0f5cc80f712f41ee1dc8bf38105b410c1165658f208bd88a70c4674104c78af33d8d09c gitconfig +" diff --git a/user/gitlab-shell/change-config-path.patch b/user/gitlab-shell/change-config-path.patch new file mode 100644 index 0000000..52d44ce --- /dev/null +++ b/user/gitlab-shell/change-config-path.patch @@ -0,0 +1,11 @@ +--- a/support/gitlab_config.rb ++++ b/support/gitlab_config.rb +@@ -4,7 +4,7 @@ class GitlabConfig + attr_reader :config + + def initialize +- @config = YAML.load_file(File.join(ROOT_PATH, 'config.yml')) ++ @config = YAML.load_file(ENV.fetch('GITLAB_SHELL_CONFIG', '/etc/gitlab/gitlab-shell.yml')) + end + + def home diff --git a/user/gitlab-shell/config.patch b/user/gitlab-shell/config.patch new file mode 100644 index 0000000..27d6771 --- /dev/null +++ b/user/gitlab-shell/config.patch @@ -0,0 +1,110 @@ +diff --git a/config.yml.example.orig b/config.yml.example +index 13850e6..98eb0e3 100644 +--- a/config.yml.example.orig ++++ b/config.yml.example +@@ -13,7 +13,7 @@ user: git + # only listen on a Unix domain socket. For Unix domain sockets use + # "http+unix://", e.g. + # "http+unix://%2Fpath%2Fto%2Fsocket" +-gitlab_url: "http+unix://%2Fhome%2Fgit%2Fgitlab%2Ftmp%2Fsockets%2Fgitlab-workhorse.socket" ++gitlab_url: "http+unix://%2Frun%2Fgitlab%2Fworkhorse.socket" + + # When a http+unix:// is used in gitlab_url, this is the relative URL root to GitLab. + # Not used if gitlab_url is http:// or https://. +@@ -29,15 +29,15 @@ http_settings: + # + + # File used as authorized_keys for gitlab user +-auth_file: "/home/git/.ssh/authorized_keys" ++auth_file: "/var/lib/gitlab/.ssh/authorized_keys" + + # SSL certificate dir where custom certificates can be placed + # https://golang.org/pkg/crypto/x509/ +-# ssl_cert_dir: /opt/gitlab/embedded/ssl/certs/ ++# ssl_cert_dir: /etc/gitlab/ssl/certs/ + + # File that contains the secret key for verifying access to GitLab. + # Default is .gitlab_shell_secret in the gitlab-shell directory. +-# secret_file: "/home/git/gitlab-shell/.gitlab_shell_secret" ++secret_file: "/etc/gitlab/gitlab_shell_secret" + # + # The secret field supersedes the secret_file, and if set that + # file will not be read. +@@ -45,13 +45,13 @@ auth_file: "/home/git/.ssh/authorized_keys" + + # Log file. + # Default is gitlab-shell.log in the root directory. +-# log_file: "/home/git/gitlab-shell/gitlab-shell.log" ++log_file: "/var/log/gitlab/gitlab-shell.log" + + # Log level. INFO by default +-log_level: INFO ++log_level: WARN + + # Log format. 'json' by default, can be changed to 'text' if needed +-# log_format: json ++log_format: text + + # Audit usernames. + # Set to true to see real usernames in the logs instead of key ids, which is easier to follow, but +@@ -62,60 +62,6 @@ audit_usernames: false + # For more details, visit https://docs.gitlab.com/ee/development/distributed_tracing.html + # gitlab_tracing: opentracing://driver + +-# This section configures the built-in SSH server. Ignored when running on OpenSSH. +-sshd: +- # Address which the SSH server listens on. Defaults to [::]:22. +- listen: "[::]:22" +- # Set to true if gitlab-sshd is being fronted by a load balancer that implements +- # the PROXY protocol. +- proxy_protocol: false +- # Proxy protocol policy ("use", "require", "reject", "ignore"), "use" is the default value +- # Values: https://github.com/pires/go-proxyproto/blob/195fedcfbfc1be163f3a0d507fac1709e9d81fed/policy.go#L20 +- proxy_policy: "use" +- # Proxy allowed IP addresses. Takes precedent over proxy_policy. Disabled by default. +- # proxy_allowed: +- # - "192.168.0.1" +- # - "192.168.1.0/24" +- # Address which the server listens on HTTP for monitoring/health checks. Defaults to localhost:9122. +- web_listen: "localhost:9122" +- # Maximum number of concurrent sessions allowed on a single SSH connection. Defaults to 10. +- concurrent_sessions_limit: 10 +- # Sets an interval after which server will send keepalive message to a client. Defaults to 15s. +- client_alive_interval: 15 +- # The server waits for this time for the ongoing connections to complete before shutting down. Defaults to 10s. +- grace_period: 10 +- # The server disconnects after this time if the user has not successfully logged in. Defaults to 60s. +- login_grace_time: 60 +- # A short timeout to decide to abort the connection if the protocol header is not seen within it. Defaults to 500ms +- proxy_header_timeout: 500ms +- # The endpoint that returns 200 OK if the server is ready to receive incoming connections; otherwise, it returns 503 Service Unavailable. Defaults to "/start". +- readiness_probe: "/start" +- # The endpoint that returns 200 OK if the server is alive. Defaults to "/health". +- liveness_probe: "/health" +- # Specifies the available message authentication code algorithms that are used for protecting data integrity +- macs: [hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1] +- # Specifies the available Key Exchange algorithms +- kex_algorithms: [curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1] +- # Specified the ciphers allowed +- ciphers: [aes128-gcm@openssh.com, chacha20-poly1305@openssh.com, aes256-gcm@openssh.com, aes128-ctr, aes192-ctr,aes256-ctr] +- # SSH host key files. +- host_key_files: +- - /run/secrets/ssh-hostkeys/ssh_host_rsa_key +- - /run/secrets/ssh-hostkeys/ssh_host_ecdsa_key +- - /run/secrets/ssh-hostkeys/ssh_host_ed25519_key +- host_key_certs: +- - /run/secrets/ssh-hostkeys/ssh_host_rsa_key-cert.pub +- - /run/secrets/ssh-hostkeys/ssh_host_ecdsa_key-cert.pub +- - /run/secrets/ssh-hostkeys/ssh_host_ed25519_key-cert.pub +- # GSSAPI-related settings +- gssapi: +- # Enable the gssapi-with-mic authentication method. Defaults to false. +- enabled: false +- # Keytab path. Defaults to "", system default (usually /etc/krb5.keytab). +- keytab: "" +- # The Kerberos service name to be used by sshd. Defaults to "", accepts any service name in keytab file. +- service_principal_name: "" +- + lfs: + # https://gitlab.com/groups/gitlab-org/-/epics/11872, disabled by default. + pure_ssh_protocol: false diff --git a/user/gitlab-shell/gitconfig b/user/gitlab-shell/gitconfig new file mode 100644 index 0000000..ccf8053 --- /dev/null +++ b/user/gitlab-shell/gitconfig @@ -0,0 +1,17 @@ +# Based on files/gitlab-cookbooks/gitlab/templates/default/gitconfig.erb +# in omnibus-gitlab. + +[user] +name = GitLab +email = gitlab@local.host + +[core] +# Needed for the web editor. +autocrlf = input +alternateRefsCommand="exit 0 #" +# This option is unnecessary on journaled file systems and it's not recognized +# by git >= 2.36. +# fsyncObjectFiles = true + +[gc] +auto = 0 diff --git a/user/gitlab-shell/gitlab-shell.post-install b/user/gitlab-shell/gitlab-shell.post-install new file mode 100644 index 0000000..01c425c --- /dev/null +++ b/user/gitlab-shell/gitlab-shell.post-install @@ -0,0 +1,23 @@ +#!/bin/sh +set -eu + +keys_file='/var/lib/gitlab/.ssh/authorized_keys' + +if [ ! -f "$keys_file" ]; then + keys_dir="$(dirname "$keys_file")" + echo "* Initializing authorized_keys file in $keys_dir" 1>&2 + + mkdir -m0700 -p "$keys_dir" + chown git:git "$keys_dir" + + touch "$keys_file" + chmod 0600 "$keys_file" + chown git:git "$keys_file" +fi + +cat <&2 +* +* GitLab Shell has been initialized. Read /etc/gitlab/gitlab-shell.yml and +* modify settings as need. +* +EOF diff --git a/user/gitlab-shell/gitlab-shell.pre-install b/user/gitlab-shell/gitlab-shell.pre-install new file mode 100644 index 0000000..9421862 --- /dev/null +++ b/user/gitlab-shell/gitlab-shell.pre-install @@ -0,0 +1,41 @@ +#!/bin/sh +# It's very important to set user/group correctly. + +git_dir='/var/lib/gitlab' + +if ! getent group git >/dev/null; then + echo '* Creating group git' >&2 + + addgroup -S git +fi + +if ! id git 2>/dev/null 1>&2; then + echo '* Creating user git' >&2 + + adduser -DHS -G git -h "$git_dir" -s /bin/sh \ + -g "added by apk for gitlab-shell" git + passwd -u git >/dev/null # unlock +fi + +if ! id -Gn git | grep -Fq redis; then + echo '* Adding user git to group redis' >&2 + + addgroup git redis +fi + +user_home="$(getent passwd git | cut -d: -f6)" + +if [ "$user_home" != "$git_dir" ]; then + cat >&2 <<-EOF + !! + !! User git has home directory in $user_home, but this package and gitlab-ce + !! package assumes $git_dir. Although it's possible to use a different + !! directory, it's really not easy. + !! + !! Please change git's home directory to $git_dir, or adjust settings + !! and move files yourself. Otherwise GitLab will not work! + !! + EOF +fi + +exit 0 diff --git a/user/grpc/01-chttp2-maybe-uninitialized.patch b/user/grpc/01-chttp2-maybe-uninitialized.patch new file mode 100644 index 0000000..b531fbc --- /dev/null +++ b/user/grpc/01-chttp2-maybe-uninitialized.patch @@ -0,0 +1,10 @@ +--- a/src/core/ext/transport/chttp2/transport/chttp2_transport.cc ++++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +@@ -978,6 +978,7 @@ + } else { + r = grpc_chttp2_begin_write(t); + } ++ #pragma GCC diagnostic ignored "-Wmaybe-uninitialized" + if (r.writing) { + if (r.partial) { + GRPC_STATS_INC_HTTP2_PARTIAL_WRITES(); diff --git a/user/grpc/APKBUILD b/user/grpc/APKBUILD new file mode 100644 index 0000000..1572117 --- /dev/null +++ b/user/grpc/APKBUILD @@ -0,0 +1,273 @@ +# Contributor: Keith Maxwell +# Contributor: wener +# Maintainer: wener +pkgname=grpc +pkgver=1.58.0 +pkgrel=2 +pkgdesc="The C based gRPC" +url="https://grpc.io/" +arch="all" +# BSD-3-Clause: third_party/upb, third_party/address_sorting +# MIT: third_party/upb/third_party/utf8_range +license="Apache-2.0 AND BSD-3-Clause AND MIT" +depends="ca-certificates" +depends_dev=" + $pkgname-cpp=$pkgver-r$pkgrel + $pkgname-plugins=$pkgver-r$pkgrel + " +_pythondepends=" + cython + python3-dev + py3-setuptools + " +_rubydepends=" + $pkgname=$pkgver-r$pkgrel + ruby3.2-google-protobuf>=3.19 + " +makedepends=" + abseil-cpp-dev + autoconf + automake + benchmark-dev + c-ares-dev + chrpath + cmake + libstdc++ + libtool + linux-headers + openssl-dev>3 + protobuf-dev + re2-dev + ruby3.2-dev + samurai + yaml-dev + xxhash-dev + zlib-dev + $_pythondepends + $_rubydepends + " +checkdepends="coreutils python3 py3-six" +subpackages=" + $pkgname-dev + $pkgname-cpp + $pkgname-plugins + $pkgname-doc + py3-grpcio-pyc + py3-grpcio:grpcio + ruby3.2-grpc:_ruby + libaddress_sorting:lib + libgpr:lib + libgrpc:lib + libgrpc_authorization_provider:lib + libgrpc_unsecure:lib + libupb:lib + " +_googletest_rev=0e402173c97aea7a00749e825b194bfede4f2e45 + +# ruby-dont-strip-library.patch: abuild will dot the strip +source="https://github.com/grpc/grpc/archive/v$pkgver/grpc-v$pkgver.tar.gz + googletest-$_googletest_rev.tar.gz::https://github.com/google/googletest/archive/$_googletest_rev.tar.gz + 01-chttp2-maybe-uninitialized.patch + find-dependency.patch + ruby-fix-protoc-path.patch + ruby-use-shared-libs.patch + ruby-use-system-certs.patch + makefile-use-system-abseil.patch + cython3.patch + " +options="net !check" # sometimes hang indefinitely on builders + +prepare() { + rm -r third_party/googletest + mv "$srcdir"/googletest-$_googletest_rev third_party/googletest + + # Remove bundled xxhash. + # Since grpc sets XXH_INCLUDE_ALL wherever it uses xxhash, it is using xxhash + # as a header-only library. This means we can replace it with the system copy + # by doing nothing further; xxhash.h is in the system include path and will be + # found instead, and there are no linker flags to add. See also + # https://github.com/grpc/grpc/issues/25945. + rm -rvf third_party/xxhash/* + + # This will be replaced with a symlink to system certs. + echo '' > etc/roots.pem + + default_prepare + + # Remove some bundled dependencies from the gem's files list. + sed -i \ + -e '/etc\/roots.pem/d' \ + -e '/third_party\/abseil/d' \ + -e '/third_party\/boringssl/d' \ + -e '/third_party\/cares/d' \ + -e '/third_party\/re2/d' \ + -e '/third_party\/xxhash/d' \ + -e '/third_party\/zlib/d' \ + grpc.gemspec + + # Remove unused dependency from gemspec - it's not required anyhwere, + # it's just Google pushing their crap everywhere... + sed -i '/add_dependency.*googleapis-common-protos-types/d' \ + grpc.gemspec +} + +build() { + export CFLAGS="$CFLAGS -flto=auto -DNDEBUG -O2" + export CXXFLAGS="$CXXFLAGS -flto=auto -DNDEBUG -O2" + cmake -B _build -G Ninja \ + -DCMAKE_BUILD_TYPE=None \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_CXX_STANDARD=17 \ + -DBUILD_SHARED_LIBS=True \ + -DgRPC_INSTALL=ON \ + -DgRPC_CARES_PROVIDER=package \ + -DgRPC_PROTOBUF_PROVIDER=package \ + -DgRPC_SSL_PROVIDER=package \ + -DgRPC_ZLIB_PROVIDER=package \ + -DgRPC_ABSL_PROVIDER=package \ + -DgRPC_BENCHMARK_PROVIDER=package \ + -DgRPC_RE2_PROVIDER=package \ + -DgRPC_BACKWARDS_COMPATIBILITY_MODE=OFF \ + -DgRPC_BUILD_TESTS="$(want_check && echo ON || echo OFF)" + cmake --build _build + + GRPC_PYTHON_CFLAGS="-std=c++17" \ + GRPC_PYTHON_DISABLE_LIBC_COMPATIBILITY=1 \ + GRPC_PYTHON_BUILD_SYSTEM_CARES=1 \ + GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1 \ + GRPC_PYTHON_BUILD_SYSTEM_ZLIB=1 \ + GRPC_PYTHON_BUILD_SYSTEM_RE2=1 \ + GRPC_PYTHON_BUILD_SYSTEM_ABSL=1 \ + python3 setup.py build + + # grpcio-tools + cd tools/distrib/python + python3 make_grpcio_tools.py + + cd "$builddir" + gem build grpc.gemspec + TOPDIR="$PWD/_build" gem install \ + --local \ + --install-dir _build/ruby \ + --ignore-dependencies \ + --no-document \ + --verbose \ + grpc-$pkgver.gem +} + +check() { + # delete times out in ci or broken for ci tests + rm -f _build/spinlock_test _build/resolve_address_using_ares_resolver_posix_test build/resolve_address_using_native_resolver_posix_test + rm -f _build/flaky_network_test _build/unknown_frame_bad_client_test _build/ssl_transport_security_test _build/httpscli_test + rm -f _build/headers_bad_client_test _build/httpcli_test + case $CARCH in + aarch64|ppc64le) rm -f _build/server_test _build/grpc_tool_test ;; + s390x) rm -f _build/client_lb_end2end_test _build/alts_frame_protector_test _build/alts_iovec_record_protocol_test ;; + armv7) rm -f _build/initial_settings_frame_bad_client_test ;; + x86) rm -f _build/time_jump_test _build/connection_prefix_bad_client_test ;; + esac + + # start helper + ./tools/run_tests/start_port_server.py & + find build/ -maxdepth 1 -type f -executable -name "*_test" -exec {} \; + # kill helper + pkill -9 python3 +} + +package() { + DESTDIR="$pkgdir" cmake --install _build + python3 setup.py install --skip-build --root="$pkgdir" + + cd doc + find ./ -type f -print -exec install -Dm644 {} "$pkgdir"/usr/share/doc/grpc/{} \; + rm "$pkgdir"/usr/share/doc/grpc/.gitignore + + find "$pkgdir" -type f -name roots.pem -exec \ + sh -c 'rm $0 && ln -s /etc/ssl/certs/ca-certificates.crt $0' "{}" \; +} + +cpp() { + pkgdesc="C++ language bindings for gRPC" + depends="$pkgname=$pkgver-r$pkgrel" + + amove usr/lib/libgrpc++*.so.* + amove usr/lib/libgrpc_plugin_support.so.* + amove usr/lib/libgrpcpp*.so.* +} + +plugins() { + pkgdesc="Protocol buffers compiler plugins for gRPC" + depends="$pkgname-cpp=$pkgver-r$pkgrel protobuf" + + amove usr/bin/grpc_*_plugin +} + +cli() { + pkgdesc="gRPC command line tool" + + install -Dm644 -t "$subpkgdir"/usr/lib "$builddir"/_build/libgrpc++_test_config.so.$pkgver + install -Dm755 -t "$subpkgdir"/usr/bin "$builddir"/_build/grpc_cli + + # Fix "Has /home/... in rpath" + chrpath -d "$subpkgdir"/usr/lib/libgrpc++_test_config.so.$pkgver + chrpath -d "$subpkgdir"/usr/bin/grpc_cli +} + +grpcio() { + pkgdesc="gRPC Python HTTP/2-based RPC framework" + depends="py3-six" + + amove usr/lib/python3* +} + +_ruby() { + pkgdesc="Send RPCs from Ruby using GRPC" + depends="$_rubydepends" + + local gemdir="$subpkgdir/$(ruby -e 'puts Gem.default_dir')" + + cd "$builddir"/_build/ruby + + mkdir -p "$gemdir" + cp -r extensions gems specifications "$gemdir"/ + + # Remove unnecessary files and rubbish... + cd "$gemdir"/extensions/*/*/grpc-$pkgver + rm gem_make.out mkmf.log || true + + cd "$gemdir"/gems/grpc-$pkgver + rm -rf .yardopts \ + Makefile \ + include/ \ + src/core/ \ + third_party/ + + cd src/ruby + rm -rf bin/ \ + ext/ \ + lib/grpc/*.so \ + pb/generate_proto_ruby.sh \ + pb/README.md \ + pb/src/ \ + pb/test/ \ + spec/ +} + +lib() { + pkgdesc="$pkgdesc ($subpkgname library)" + depends="$pkgname=$pkgver-r$pkgrel" + + amove usr/lib/$subpkgname.so.* +} + +sha512sums=" +fb2fd211a22dd777cf4df39a9dd72e5c8014f1546a89d3910b006503aac80a74d5797705e02911e9c07316ed973f71110b94cc0e86225f648d4ff91773748a43 grpc-v1.58.0.tar.gz +5c5eaf6ff9f3c1bca025b7ef0234ba97232ba85b43e6354a92f49b7208f5c47581ebaf18bf58618498e5d264f2620c2b6676e81bb0f7df77112b96ba271ececf googletest-0e402173c97aea7a00749e825b194bfede4f2e45.tar.gz +7fa146ce86ddd4f160bb1ca9ff01cb7aca6b2b8c9aa50e4fa6b84504b9117b104be0d1e31ccb452d846549dfe1e9012ceccfcdc1f2357ed567621d71fb8b08c5 01-chttp2-maybe-uninitialized.patch +6702e39c6a3c065fe4ff5ae48898057135c09bf6851e35fc958cf95ee5d77e9dd34e8c34d978efe60682384e46c4c4b2e51156d546b06a0eb1feed89adcc024b find-dependency.patch +4ea72d2acd8bee9c9022a4412aa0af0477faca7b0810d14decb3ad5d4da044247f51189512323bfee855b9b260a7f82b812310391451e5d8ee718297800d7a73 ruby-fix-protoc-path.patch +7123bf1bbc48ceb303ce1e9820ea45a06dabd25e20e3c1c116ef68e629e80f229cf20314c415d74f0c5c1725f23a00b446656e0cffba3dcd3cc766ae29d8fb2f ruby-use-shared-libs.patch +631af4b9ac29c1ebabb2c88394ea2993e36cec1beda38195e1587dbd9d3c8c9eef75a17d2326d3cd2e682de551401216075ba08fdc501c098b8092d718ded381 ruby-use-system-certs.patch +89e260934da83eb45fa6b73884cba1b1c30f99c0eb883a726e2d36ee4788246f4c6fa1b201077038af956bcb58e625f83bedba4f186c711785ec240373ce4fc5 makefile-use-system-abseil.patch +896d2771fbb726db97efc7a76687a8fddfae18b0492977fc1f7cec4002803f7aed29e8276c94c6b60a06ecfe3ee7795d4ec3f8f90031dd3eda32d3e23dc9c98c cython3.patch +" diff --git a/user/grpc/cython3.patch b/user/grpc/cython3.patch new file mode 100644 index 0000000..9068927 --- /dev/null +++ b/user/grpc/cython3.patch @@ -0,0 +1,172 @@ +From b3277bac1585ddee88a170b0a95c260d909cce9c Mon Sep 17 00:00:00 2001 +From: Atri Bhattacharya +Date: Sat, 24 Feb 2024 04:06:08 +0530 +Subject: [PATCH] [python] Cython 3 compatibility: declare functions noexcept. + +In Cython 3, cdef functions that really will not raise exceptions must +be declared as `noexcept`. Fixed by this commit. + +Update requirements to `cython >= 3.0` in requirements*.txt and +setup.py. + +Fixes issue #33918. +--- + requirements.bazel.txt | 2 +- + requirements.txt | 2 +- + setup.py | 2 +- + .../grpcio/grpc/_cython/_cygrpc/aio/callback_common.pxd.pxi | 2 +- + .../grpcio/grpc/_cython/_cygrpc/aio/callback_common.pyx.pxi | 2 +- + src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi | 2 +- + src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pxd.pxi | 6 +++--- + src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pyx.pxi | 6 +++--- + src/python/grpcio/grpc/_cython/_cygrpc/vtable.pyx.pxi | 6 +++--- + 9 files changed, 15 insertions(+), 15 deletions(-) + +diff --git a/requirements.bazel.txt b/requirements.bazel.txt +index f46432cc88891..905c092ce4c33 100644 +--- a/requirements.bazel.txt ++++ b/requirements.bazel.txt +@@ -1,6 +1,6 @@ + # GRPC Python setup requirements + coverage==4.5.4 +-cython==0.29.21 ++cython==3.0.0 + protobuf>=3.5.0.post1, < 4.0dev + wheel==0.38.1 + oauth2client==4.1.0 +diff --git a/requirements.txt b/requirements.txt +index 05390850559f1..56169434b1b78 100644 +--- a/requirements.txt ++++ b/requirements.txt +@@ -1,5 +1,5 @@ + # GRPC Python setup requirements + coverage>=4.0 +-cython>=0.29.8,<3.0.0rc1 ++cython>=3.0.0 + protobuf>=4.21.3,<5.0dev + wheel>=0.29 +diff --git a/setup.py b/setup.py +index 2ce5fef422316..8b4ce5c16736a 100644 +--- a/setup.py ++++ b/setup.py +@@ -539,7 +539,7 @@ def cython_extensions_and_necessity(): + sys.stderr.write( + "We could not find Cython. Setup may take 10-20 minutes.\n" + ) +- SETUP_REQUIRES += ("cython>=0.23,<3.0.0rc1",) ++ SETUP_REQUIRES += ("cython>=3.0.0",) + + COMMAND_CLASS = { + "doc": commands.SphinxDocumentation, +diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/aio/callback_common.pxd.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/aio/callback_common.pxd.pxi +index e54e5107547c1..26edbdb917b10 100644 +--- a/src/python/grpcio/grpc/_cython/_cygrpc/aio/callback_common.pxd.pxi ++++ b/src/python/grpcio/grpc/_cython/_cygrpc/aio/callback_common.pxd.pxi +@@ -48,7 +48,7 @@ cdef class CallbackWrapper: + @staticmethod + cdef void functor_run( + grpc_completion_queue_functor* functor, +- int succeed) ++ int succeed) noexcept + + cdef grpc_completion_queue_functor *c_functor(self) + +diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/aio/callback_common.pyx.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/aio/callback_common.pyx.pxi +index 14a0098fc2041..2b0df0e5ce7f7 100644 +--- a/src/python/grpcio/grpc/_cython/_cygrpc/aio/callback_common.pyx.pxi ++++ b/src/python/grpcio/grpc/_cython/_cygrpc/aio/callback_common.pyx.pxi +@@ -50,7 +50,7 @@ cdef class CallbackWrapper: + @staticmethod + cdef void functor_run( + grpc_completion_queue_functor* functor, +- int success): ++ int success) noexcept: + cdef CallbackContext *context = functor + cdef object waiter = context.waiter + if not waiter.cancelled(): +diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi +index 74a3f16d72dbb..600c0f304e067 100644 +--- a/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi ++++ b/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi +@@ -316,7 +316,7 @@ def server_credentials_ssl_dynamic_cert_config(initial_cert_config, + return credentials + + cdef grpc_ssl_certificate_config_reload_status _server_cert_config_fetcher_wrapper( +- void* user_data, grpc_ssl_server_certificate_config **config) with gil: ++ void* user_data, grpc_ssl_server_certificate_config **config) noexcept with gil: + # This is a credentials.ServerCertificateConfig + cdef ServerCertificateConfig cert_config = None + if not user_data: +diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pxd.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pxd.pxi +index 13a02434787ba..b300883abae81 100644 +--- a/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pxd.pxi ++++ b/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pxd.pxi +@@ -12,10 +12,10 @@ + # See the License for the specific language governing permissions and + # limitations under the License. + +-cdef void __prefork() nogil ++cdef void __prefork() noexcept nogil + + +-cdef void __postfork_parent() nogil ++cdef void __postfork_parent() noexcept nogil + + +-cdef void __postfork_child() nogil +\ No newline at end of file ++cdef void __postfork_child() noexcept nogil +diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pyx.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pyx.pxi +index 565f483b2ae00..d901cfddf4321 100644 +--- a/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pyx.pxi ++++ b/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pyx.pxi +@@ -35,7 +35,7 @@ _GRPC_ENABLE_FORK_SUPPORT = ( + + _fork_handler_failed = False + +-cdef void __prefork() nogil: ++cdef void __prefork() noexcept nogil: + with gil: + global _fork_handler_failed + _fork_handler_failed = False +@@ -49,14 +49,14 @@ cdef void __prefork() nogil: + _fork_handler_failed = True + + +-cdef void __postfork_parent() nogil: ++cdef void __postfork_parent() noexcept nogil: + with gil: + with _fork_state.fork_in_progress_condition: + _fork_state.fork_in_progress = False + _fork_state.fork_in_progress_condition.notify_all() + + +-cdef void __postfork_child() nogil: ++cdef void __postfork_child() noexcept nogil: + with gil: + try: + if _fork_handler_failed: +diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/vtable.pyx.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/vtable.pyx.pxi +index da4b81bd97e65..f59410073b736 100644 +--- a/src/python/grpcio/grpc/_cython/_cygrpc/vtable.pyx.pxi ++++ b/src/python/grpcio/grpc/_cython/_cygrpc/vtable.pyx.pxi +@@ -13,16 +13,16 @@ + # limitations under the License. + + # TODO(https://github.com/grpc/grpc/issues/15662): Reform this. +-cdef void* _copy_pointer(void* pointer): ++cdef void* _copy_pointer(void* pointer) noexcept: + return pointer + + + # TODO(https://github.com/grpc/grpc/issues/15662): Reform this. +-cdef void _destroy_pointer(void* pointer): ++cdef void _destroy_pointer(void* pointer) noexcept: + pass + + +-cdef int _compare_pointer(void* first_pointer, void* second_pointer): ++cdef int _compare_pointer(void* first_pointer, void* second_pointer) noexcept: + if first_pointer < second_pointer: + return -1 + elif first_pointer > second_pointer: diff --git a/user/grpc/find-dependency.patch b/user/grpc/find-dependency.patch new file mode 100644 index 0000000..f846e16 --- /dev/null +++ b/user/grpc/find-dependency.patch @@ -0,0 +1,13 @@ +without this find_dependency() doesn't exist +-- +diff --git a/cmake/gRPCConfig.cmake.in b/cmake/gRPCConfig.cmake.in +index 98d8c6d..5500ca2 100644 +--- a/cmake/gRPCConfig.cmake.in ++++ b/cmake/gRPCConfig.cmake.in +@@ -1,5 +1,6 @@ + # Module path + list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/modules) ++include(CMakeFindDependencyMacro) + + # Depend packages + @_gRPC_FIND_ZLIB@ diff --git a/user/grpc/makefile-use-system-abseil.patch b/user/grpc/makefile-use-system-abseil.patch new file mode 100644 index 0000000..ac4f9fc --- /dev/null +++ b/user/grpc/makefile-use-system-abseil.patch @@ -0,0 +1,22 @@ +--- a/Makefile ++++ b/Makefile +@@ -575,8 +575,8 @@ + + # Setup abseil dependency + +-GRPC_ABSEIL_DEP = $(LIBDIR)/$(CONFIG)/libgrpc_abseil.a +-GRPC_ABSEIL_MERGE_LIBS = $(LIBDIR)/$(CONFIG)/libgrpc_abseil.a ++GRPC_ABSEIL_DEP = -labsl_base -labsl_int128 -labsl_strings -labsl_time -labsl_bad_optional_access -labsl_throw_delegate -labsl_str_format_internal ++GRPC_ABSEIL_MERGE_LIBS = -labsl_base -labsl_int128 -labsl_strings -labsl_time -labsl_bad_optional_access -labsl_throw_delegate -labsl_str_format_internal + + # Setup re2 dependency + +@@ -2809,7 +2809,7 @@ + third_party/abseil-cpp/absl/types/bad_variant_access.cc \ + + +-LIBGRPC_ABSEIL_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC_ABSEIL_SRC)))) ++LIBGRPC_ABSEIL_OBJS = + + $(LIBGRPC_ABSEIL_OBJS): CPPFLAGS += -g -Ithird_party/abseil-cpp + diff --git a/user/grpc/ruby-fix-protoc-path.patch b/user/grpc/ruby-fix-protoc-path.patch new file mode 100644 index 0000000..91f0268 --- /dev/null +++ b/user/grpc/ruby-fix-protoc-path.patch @@ -0,0 +1,25 @@ +Patch-Source: https://sources.debian.org/src/grpc/1.44.0-3/debian/patches/fix-protoc-path.patch (modified) + +--- a/src/ruby/end2end/package_with_underscore_test.rb ++++ b/src/ruby/end2end/package_with_underscore_test.rb +@@ -20,8 +20,8 @@ def main + pb_dir = File.join(root_dir, 'src', 'ruby', 'end2end', 'protos') + +- bins_dir = File.join(root_dir, 'cmake', 'build') ++ bins_dir = '/usr/bin' + plugin = File.join(bins_dir, 'grpc_ruby_plugin') +- protoc = File.join(bins_dir, 'third_party', 'protobuf', 'protoc') ++ protoc = File.join(bins_dir, 'protoc') + + got = nil + +--- a/src/ruby/tools/bin/grpc_tools_ruby_protoc ++++ b/src/ruby/tools/bin/grpc_tools_ruby_protoc +@@ -25,6 +25,5 @@ plugin_name = 'grpc_ruby_plugin' + ext + +-protoc_dir = File.join(File.dirname(__FILE__), +- PLATFORM.architecture + '-' + PLATFORM.os_name) ++protoc_dir = '/usr/bin' + + protoc_path = File.join(protoc_dir, protoc_name) + diff --git a/user/grpc/ruby-use-shared-libs.patch b/user/grpc/ruby-use-shared-libs.patch new file mode 100644 index 0000000..736869a --- /dev/null +++ b/user/grpc/ruby-use-shared-libs.patch @@ -0,0 +1,81 @@ +From: Jakub Jirutka +Date: Wed, 24 Aug 2022 21:20:22 +0200 +Subject: [PATCH] Link with shared libraries, don't embed anything + +- Don't statically link openssl, zlib and cares. +- Don't build and statically link libgrpc, link shared libgrpc. +- Don't statically link libgcc and libstdc++. + +diff --git a/src/ruby/ext/grpc/extconf.rb b/src/ruby/ext/grpc/extconf.rb +index 98a8876..808ecfe 100644 +--- a/src/ruby/ext/grpc/extconf.rb ++++ b/src/ruby/ext/grpc/extconf.rb +@@ -69,11 +69,11 @@ if apple_toolchain && !cross_compiling + end + + # Don't embed on TruffleRuby (constant-time crypto is unsafe with Sulong, slow build times) +-ENV['EMBED_OPENSSL'] = (RUBY_ENGINE != 'truffleruby').to_s ++ENV['EMBED_OPENSSL'] = 'false' + # Don't embed on TruffleRuby (the system zlib is already linked for the zlib C extension, slow build times) +-ENV['EMBED_ZLIB'] = (RUBY_ENGINE != 'truffleruby').to_s ++ENV['EMBED_ZLIB'] = 'false' + +-ENV['EMBED_CARES'] = 'true' ++ENV['EMBED_CARES'] = 'false' + + ENV['ARCH_FLAGS'] = RbConfig::CONFIG['ARCH_FLAG'] + if apple_toolchain && !cross_compiling +@@ -97,32 +97,7 @@ + strip_tool = RbConfig::CONFIG['STRIP'] + strip_tool += ' -x' if apple_toolchain + +-unless windows +- puts 'Building internal gRPC into ' + grpc_lib_dir +- nproc = 4 +- nproc = Etc.nprocessors if Etc.respond_to? :nprocessors +- nproc_override = ENV['GRPC_RUBY_BUILD_PROCS'] +- unless nproc_override.nil? or nproc_override.size == 0 +- nproc = nproc_override +- puts "Overriding make parallelism to #{nproc}" +- end +- make = bsd ? 'gmake' : 'make' +- cmd = "#{make} -j#{nproc} -C #{grpc_root} #{grpc_lib_dir}/libgrpc.a CONFIG=#{grpc_config} Q=" +- puts "Building grpc native library: #{cmd}" +- system(cmd) +- exit 1 unless $? == 0 +- +- if grpc_config == 'opt' +- rm_obj_cmd = "rm -rf #{File.join(output_dir, 'objs')}" +- puts "Removing grpc object files: #{rm_obj_cmd}" +- system(rm_obj_cmd) +- exit 1 unless $? == 0 +- strip_cmd = "#{strip_tool} #{grpc_lib_dir}/*.a" +- puts "Stripping grpc native library: #{strip_cmd}" +- system(strip_cmd) +- exit 1 unless $? == 0 +- end +-end ++$LDFLAGS << ' -L' + ENV.fetch('TOPDIR', '.') + + $CFLAGS << ' -DGRPC_RUBY_WINDOWS_UCRT' if windows_ucrt + $CFLAGS << ' -I' + File.join(grpc_root, 'include') +@@ -118,7 +103,7 @@ ext_export_file += '-truffleruby' if RUBY_ENGINE == 'truffleruby' + $LDFLAGS << ' -Wl,--version-script="' + ext_export_file + '.gcc"' if linux + $LDFLAGS << ' -Wl,-exported_symbols_list,"' + ext_export_file + '.clang"' if apple_toolchain + +-$LDFLAGS << ' ' + File.join(grpc_lib_dir, 'libgrpc.a') unless windows ++$LDFLAGS << ' -Wl,-wrap,memcpy -lgrpc' unless windows + if grpc_config == 'gcov' + $CFLAGS << ' -O0 -fprofile-arcs -ftest-coverage' + $LDFLAGS << ' -fprofile-arcs -ftest-coverage -rdynamic' +@@ -129,10 +114,6 @@ if grpc_config == 'dbg' + end + + $LDFLAGS << ' -Wl,-wrap,memcpy' if linux +-# Do not statically link standard libraries on TruffleRuby as this does not work when compiling to bitcode +-if linux && RUBY_ENGINE != 'truffleruby' +- $LDFLAGS << ' -static-libgcc -static-libstdc++' +-end + $LDFLAGS << ' -static' if windows + + $CFLAGS << ' -std=c11 ' diff --git a/user/grpc/ruby-use-system-certs.patch b/user/grpc/ruby-use-system-certs.patch new file mode 100644 index 0000000..5d3ba16 --- /dev/null +++ b/user/grpc/ruby-use-system-certs.patch @@ -0,0 +1,15 @@ +From: Jakub Jirutka +Date: Fri, 20 May 2017 01:35:00 +0200 +Subject: [PATCH] Use system CA certificates + +--- a/src/ruby/lib/grpc.rb ++++ b/src/ruby/lib/grpc.rb +@@ -12,7 +12,7 @@ + # See the License for the specific language governing permissions and + # limitations under the License. + +-ssl_roots_path = File.expand_path('../../../../etc/roots.pem', __FILE__) ++ssl_roots_path = '/etc/ssl/certs/ca-certificates.crt' + + require_relative 'grpc/errors' + require_relative 'grpc/structs' diff --git a/user/i18nspector/APKBUILD b/user/i18nspector/APKBUILD deleted file mode 100644 index 96d499d..0000000 --- a/user/i18nspector/APKBUILD +++ /dev/null @@ -1,31 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=i18nspector -pkgver=0.27.1 -pkgrel=0 -pkgdesc="checking tool for gettext POT, PO and MO files" -url="https://jwilk.net/software/i18nspector" -arch="noarch" -license="MIT" -depends="py3-polib py3-rply" -checkdepends="python3-dev py3-pytest" -makedepends="py3-docutils py3-setuptools py3-gpep517 py3-wheel perl" -source="$pkgname-$pkgver.tar.gz::https://github.com/jwilk/i18nspector/archive/refs/tags/$pkgver.tar.gz" -subpackages="$pkgname-doc" -options="!check" # test failure - -build() { - make -C doc -} - -check() { - pytest -v -} - -package() { - make PREFIX=/usr DESTDIR="$pkgdir" install -} - -sha512sums=" -b6b3d68ba03ead88393d6fff7233ec6d67196496f3eaaba8fe036ac9976746370885f72ec3c4e6b4dbf892f3d04c505a306900fafade1623e90ec9c1ad546166 i18nspector-0.27.1.tar.gz -" diff --git a/unmaintained/jellysub/APKBUILD b/user/jellysub/APKBUILD similarity index 100% rename from unmaintained/jellysub/APKBUILD rename to user/jellysub/APKBUILD diff --git a/unmaintained/jellysub/jellysub.conf b/user/jellysub/jellysub.conf similarity index 100% rename from unmaintained/jellysub/jellysub.conf rename to user/jellysub/jellysub.conf diff --git a/unmaintained/jellysub/jellysub.openrc b/user/jellysub/jellysub.openrc similarity index 100% rename from unmaintained/jellysub/jellysub.openrc rename to user/jellysub/jellysub.openrc diff --git a/user/kb/APKBUILD b/user/kb/APKBUILD index db1d678..a8f9c74 100644 --- a/user/kb/APKBUILD +++ b/user/kb/APKBUILD @@ -1,8 +1,9 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=kb -pkgver=0.1.8 -pkgrel=0 +_pkgreal=kb-manager +pkgver=0.1.7 +pkgrel=2 pkgdesc="A command line minimalist knowledge base manager" arch="noarch" url="https://github.com/gnebbia/kb" @@ -10,8 +11,9 @@ license="GPL-3.0-only" depends="py3-attrs py3-colored py3-gitpython py3-toml" makedepends="py3-setuptools py3-gpep517 py3-wheel" checkdepends="py3-pytest-cov" -source="$pkgname-$pkgver.tar.gz::https://github.com/gnebbia/kb/archive/refs/tags/v$pkgver.tar.gz" +source="https://files.pythonhosted.org/packages/source/k/kb-manager/kb-manager-$pkgver.tar.gz" subpackages="$pkgname-pyc" +builddir="$srcdir"/$_pkgreal-$pkgver build() { gpep517 build-wheel \ @@ -28,5 +30,5 @@ package() { .dist/*.whl } sha512sums=" -95fab9b5baa728795a6ce1e126fe90dd599528bc13f2274c5484dc43bdbca8fd5807e8ed4ec4e9ffa8382c5ec71662022d792e8ae941bd1629ed47c72d87d7a2 kb-0.1.8.tar.gz +f0dff69a5e95339ea22d0a9d1260473f7b0b6ace184936896e164172aecb77672e9e0a228159abc95e50f30de2ec9ca5185ffbd825dce87edfec267bc56c75dc kb-manager-0.1.7.tar.gz " diff --git a/user/koreader/APKBUILD b/user/koreader/APKBUILD deleted file mode 100644 index 73d1a63..0000000 --- a/user/koreader/APKBUILD +++ /dev/null @@ -1,82 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -pkgname=koreader -pkgver=2025.10 -pkgrel=0 -pkgdesc="An ebook reader application supporting PDF, DjVu, EPUB, FB2 and many more formats" -# s390x|riscv64|ppc64le|loongarch64: FTBFS -# armhf|armv7|x86: Tests fail, segmentation fault -arch="x86_64 aarch64" -url="https://github.com/koreader/koreader/" -license="AGPL-3.0-only" -depends=" - bash - sdl2 - procps-ng - " -makedepends=" - autoconf - automake - cmake - coreutils - curl - diffutils - findutils - gettext - grep - libtool - linux-headers - meson - nasm - ninja-build - perl - pkgconf - wget - " -source=" - https://ayakael.net/api/packages/mirrors/generic/koreader/v$pkgver/koreader-v$pkgver.tar.gz - reader-lua-use-absolute-path-to-luajit.patch - " -subpackages="$pkgname-doc" -builddir="$srcdir"/$pkgname-v$pkgver - -# has vendored copies of system libraries -sonameprefix="$pkgname:" - -prepare() { - default_prepare - - # no need to test manually set version - rm "$builddir"/spec/unit/version_spec.lua -} - -build() { - # add ninja bin to path - export PATH="$PATH":/usr/lib/ninja-build/bin - - # default target is emulator build - make TARGET= KODEBUG= VERBOSE= -} - -check() { - KODEBUG= TARGET= VERBOSE= ./base/utils/fake_tty.py make --assume-old=base testfront -} - -package() { - install -Dm755 "$builddir"/platform/linux/koreader.sh "$pkgdir"/usr/bin/koreader - install -Dm644 "$builddir"/platform/linux/koreader.desktop -t "$pkgdir"/usr/share/applications/ - install -Dm644 "$builddir"/resources/koreader.png -t "$pkgdir"/usr/share/pixmaps/ - install -Dm644 "$builddir"/platform/linux/koreader.1 -t "$pkgdir"/usr/share/man/man1/ - - mkdir -p "$pkgdir"/usr/lib - cp -RL "$builddir"/koreader-emulator-*/koreader "$pkgdir"/usr/lib/koreader - - # delete debug files - find "$pkgdir" -name '*.dbg' -delete - - # version information - echo "v$pkgver" > "$pkgdir"/usr/lib/koreader/git-rev -} -sha512sums=" -3fbbe49ae6134abd810d9932cfb650d031100c95570c8eaa6d6e5d4c6a9a86916961b989696a7d97c149920d63853108905eea34f75f987e58f89e3a49d63948 koreader-v2025.10.tar.gz -76dd6f2ea6416b135b76d95f3c8150378f577ddd68d48312eabd6e12adaa111253dc83fc02add3ded07d3e6174fd5f4bd6c9f7b635ef27e3d760d5acced9e6fe reader-lua-use-absolute-path-to-luajit.patch -" diff --git a/user/koreader/reader-lua-use-absolute-path-to-luajit.patch b/user/koreader/reader-lua-use-absolute-path-to-luajit.patch deleted file mode 100644 index 3d25e3f..0000000 --- a/user/koreader/reader-lua-use-absolute-path-to-luajit.patch +++ /dev/null @@ -1,10 +0,0 @@ -diff --git a/reader.lua.orig b/reader.lua -index 6fe9489..c4cbb2b 100755 ---- a/reader.lua.orig -+++ b/reader.lua -@@ -1,4 +1,4 @@ --#!./luajit -+#!/usr/lib/koreader/luajit - - -- Enforce line-buffering for stdout (this is the default if it points to a tty, but we redirect to a file on most platforms). - io.stdout:setvbuf("line") diff --git a/user/linux-rm-headers/APKBUILD b/user/linux-rm-headers/APKBUILD new file mode 100644 index 0000000..0e34b2d --- /dev/null +++ b/user/linux-rm-headers/APKBUILD @@ -0,0 +1,40 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +pkgname=linux-rm-headers +pkgver=5.4.70 +_rmver=1.3.4 +pkgrel=2 +pkgdesc="Linux kernel headers with reMarkable patches" +url=https://github.com/reMarkable/linux +provides="linux-headers=$pkgver-r$pkgrel" +makedepends="perl" +options="!check !dbg !strip !tracedeps" +builddir="$srcdir"/linux-RM1XX_${pkgver}_v$_rmver +source="https://github.com/reMarkable/linux/archive/refs/tags/RM1XX_${pkgver}_v$_rmver.tar.gz" +arch="noarch" +license="GPL-2.0" + +_carch=$CARCH +case "$CARCH" in + aarch64) _carch="arm64" ;; + arm*) _carch="arm" ;; +esac + +build() { + make headers ARCH="$_carch" +} + +package() { + mkdir -p "$pkgdir"/usr/ + cp -a usr/include/ "$pkgdir"/usr/include/ + + msg "purging non header files.." + find "$pkgdir"/usr/include/ ! -iname "*.h" -type f -exec rm -v {} \+ + + # provided by libdrm + rm -rf "$pkgdir"/usr/include/drm +} +sha512sums=" +0409c8443f5a705e8254858f966eed571b935f1be952f64c1d74b52a043d0638ba358370ca20f665d69b70aabe06f03e0bfa02ccd1a4a2a174d5b9579a10b44e RM1XX_5.4.70_v1.3.4.tar.gz +" diff --git a/user/linux-rm/APKBUILD b/user/linux-rm/APKBUILD new file mode 100644 index 0000000..864b2b5 --- /dev/null +++ b/user/linux-rm/APKBUILD @@ -0,0 +1,258 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +pkgname=linux-rm +pkgver=5.4.70 +_rmver=1.3.4 +pkgrel=11 +pkgdesc="Linux kernel with reMarkable patches" +url=https://github.com/reMarkable/linux +depends="initramfs-generator linux-firmware-brcm linux-firmware-cypress" +_depends_dev="perl gmp-dev elfutils-dev bash mpc1-dev mpfr-dev" +makedepends="$_depends_dev sed installkernel bc linux-headers linux-firmware mawk + bison flex openssl-dev>3 diffutils pahole findutils xz lzop +" +options="!strip !check" +builddir="$srcdir"/linux-RM1XX_${pkgver}_v$_rmver +source=" + https://github.com/reMarkable/linux/archive/refs/tags/RM1XX_${pkgver}_v$_rmver.tar.gz + https://raw.githubusercontent.com/ichaozi/RemarkableFramebuffer/0f37dc8c06d340dc1af52ff2d4d6d5789ccf14bb/kernel-mxc-epdc-fb-reference/epdc_ES103CS1.fw + arm-replace-sun-style-flash-on-section-directive.patch + brcmfmac-disable-power-management.patch + brcmfmac-fix-suspend-resume-when-power-is-cut-off.patch + enable-automatic-partial-refreshing.patch + config-changes-rm.armv7 + config-changes-rm.armhf + " +arch="armv7" +license="GPL-2.0" +for _i in $source; do + case $_i in + config-*.$CARCH) + _f=${_i%."$CARCH"} + _f=${_f#config-changes-} + _flavors="$_flavors $_f" + [ "linux-$_f" != "$pkgname" ] && subpackages="$subpackages linux-$_f::$CTARGET_ARCH" + subpackages="$subpackages linux-$_f-dev:_dev:$CTARGET_ARCH" + ;; + esac +done + +_carch=$CARCH +case "$CARCH" in + aarch64) _carch="arm64" ;; + arm*) _carch="arm" ;; +esac + +# generate config from defconfig and apply local changes. +# config-changes-$flavor.$CARCH holds a list of = delimited +# config command and values used by kernel scripts/config script. +_genconfig() { + local flavor=$1 defconfig= + local subbuilddir="$srcdir"/build-$flavor + local defconfig= + case $flavor in + rm) defconfig=zero-gravitas_defconfig ;; + rm2) defconfig=zero-sugar_defconfig ;; + *) die "Unknown flavor: $flavor" ;; + esac + + cp "$builddir"/arch/$_carch/configs/$defconfig \ + "$subbuilddir"/.config + + while read -r line; do + # skip comments + case "$line" in + "#"*) continue;; + esac + local option=${line%%=*} str= + local cmd=$(echo $line | cut -d= -f2) + case "$cmd" in + y) cmd="enable";; + n) cmd="disable";; + m) cmd="module";; + '"'*) cmd="set-str"; str="${line#*=}";; + [0-9]*) cmd="set-val"; str="${line#*=}";; + *) die "Command $cmd not accepted" ;; + esac + msg "[$flavor] $cmd: $option $str" + "$builddir"/scripts/config \ + --file "$subbuilddir"/.config \ + --$cmd "$option" "${str//\"/}" + done < "$srcdir"/config-changes-$flavor.$CARCH +} + +# verify if options are set to correct value +_verifyconfig() { + local flavor=$1 + local subbuilddir="$srcdir"/build-$flavor + while read -r line; do + [ ${line:0:1} = "#" ] && continue + local option=${line%%=*} str= invert= + local cmd=$(echo $line | cut -d= -f2) + case "$cmd" in + enable) str="$option=y" ;; + disable) str="$option"; invert="-v" ;; + module) str="$option=m" ;; + set-val) str="$option=${line##*=}" ;; + set-str) str=${line##*=} + str="$option=\"${str//\"/}\"" ;; + esac + grep -q $invert "^$str" "$subbuilddir"/.config || \ + die "Config: $option not properly set!" + done < "$srcdir"/config-changes-$flavor.$CARCH +} + +prepare() { + default_prepare + + local flavor= + for flavor in $_flavors; do + local _builddir="$srcdir"/build-$flavor + mkdir -p "$_builddir" + echo "-$pkgrel-$flavor" > "$_builddir"/localversion-alpine + _genconfig $flavor + make -C "$builddir" \ + O="$_builddir" \ + ARCH="$_carch" \ + olddefconfig + _verifyconfig $flavor + done +} + +build() { + unset LDFLAGS + for i in $_flavors; do + cd "$srcdir"/build-$i + local _kver=$(make kernelversion) + if [ "$_kver" != "$pkgver" ]; then + error "Version in Makefile ($_kver) does not correspond with pkgver ($pkgver)" + return 1 + fi + + make ARCH="$_carch" CC="${CC:-gcc}" KLZOP="/usr/bin/lzop" \ + KBUILD_BUILD_VERSION="$((pkgrel + 1 ))-Alpine" + done +} + +_package() { + local _flavor="$1" _outdir="$2" + local _builddir="$srcdir"/build-$_flavor + local _abi_release="$(make -C "$_builddir" -s kernelrelease)" + + cd "$srcdir"/build-$_flavor + + mkdir -p "$_outdir"/boot "$_outdir"/lib/modules + + local _install="zinstall dtbs_install" + + cd "$srcdir"/build-$_flavor + # modules_install seems to regenerate a defect Modules.symvers. Work + # around it by backing it up and restore it after modules_install + cp Module.symvers Module.symvers.backup + + local INSTALL_DTBS_PATH="$_outdir"/boot + make -j1 modules_install $_install \ + ARCH="$_carch" \ + INSTALL_MOD_PATH="$_outdir" \ + INSTALL_MOD_STRIP=1 \ + INSTALL_PATH="$_outdir"/boot \ + INSTALL_DTBS_PATH="$INSTALL_DTBS_PATH" + cp Module.symvers.backup Module.symvers + + cp "$_builddir"/arch/arm/boot/zImage "$_outdir"/boot/zImage + rm "$_outdir"/boot/vmlinuz-$_flavor + + rm -f "$_outdir"/lib/modules/$_abi_release/build \ + "$_outdir"/lib/modules/$_abi_release/source + rm -rf "$_outdir"/lib/firmware + + install -D -m644 include/config/kernel.release \ + "$_outdir"/usr/share/kernel/$_flavor/kernel.release + + # install missing firmware + install -vDm644 "$srcdir"/epdc_ES103CS1.fw "$_outdir"/lib/firmware/imx/epdc/epdc_ES103CS1.fw +} + +# main flavor installs in $pkgdir +package() { + _package rm "$pkgdir" +} + +# subflavors install in $subpkgdir +rm2() { + depends="initramfs-generator linux-firmware-brcm linux-firmware-cypress" + _package rm2 "$subpkgdir" +} + +_dev() { + local _flavor=$(echo $subpkgname | sed -E 's/(^linux-|-dev$)//g') + local _builddir="$srcdir"/build-$_flavor + local _abi_release="$(make -C "$_builddir" -s kernelrelease)" + # copy the only the parts that we really need for build 3rd party + # kernel modules and install those as /usr/src/linux-headers, + # simlar to what ubuntu does + # + # this way you dont need to install the 300-400 kernel sources to + # build a tiny kernel module + # + pkgdesc="Headers and script for third party modules for $_flavor kernel" + depends="$_depends_dev" + local dir="$subpkgdir"/usr/src/linux-headers-$_abi_release + + # first we import config, run prepare to set up for building + # external modules, and create the scripts + mkdir -p "$dir" + cp "$_builddir"/.config "$dir"/.config + echo "-$pkgrel-$_flavor" > "$dir"/localversion-alpine + + make -j1 -C "$builddir" \ + O="$dir" \ + ARCH="$_carch" \ + AWK="${AWK:-mawk}" \ + syncconfig prepare modules_prepare scripts + + # remove the stuff that points to real sources. we want 3rd party + # modules to believe this is the soruces + rm "$dir"/Makefile "$dir"/source + + # scripts aren't being crossbuilt from some reason + if cross_compiling; then + for i in $(scanelf -R "$dir" | awk '{print $2}' | sed '1d'); do rm "$i"; done + fi + + # copy the needed stuff from real sources + # + # this is taken from ubuntu kernel build script + # http://kernel.ubuntu.com/git/ubuntu/ubuntu-zesty.git/tree/debian/rules.d/3-binary-indep.mk + cd "$builddir" + find . -path './include/*' -prune \ + -o -path './scripts/*' -prune -o -type f \ + \( -name 'Makefile*' -o -name 'Kconfig*' -o -name 'Kbuild*' -o \ + -name '*.sh' -o -name '*.pl' -o -name '*.lds' \) \ + -print | cpio -pdm "$dir" + + cp -a scripts include "$dir" + + # shellcheck disable=SC2046 + find $(find arch -name include -type d -print) -type f \ + | cpio -pdm "$dir" + + install -Dm644 "$_builddir"/Module.symvers \ + "$dir"/Module.symvers + + mkdir -p "$subpkgdir"/lib/modules/$_abi_release + ln -sf /usr/src/linux-headers-$_abi_release \ + "$subpkgdir"/lib/modules/$_abi_release/build +} + +sha512sums=" +0409c8443f5a705e8254858f966eed571b935f1be952f64c1d74b52a043d0638ba358370ca20f665d69b70aabe06f03e0bfa02ccd1a4a2a174d5b9579a10b44e RM1XX_5.4.70_v1.3.4.tar.gz +ad4bd6f332319aceee7a1c7b71b49439e8217621214b6249c7e20198360d02ea442f31edfc8e1af1b85ed71e6f97c1cb7decf7b0885c9d0293361eef47f218b2 epdc_ES103CS1.fw +f9114f8843317e1d26fbf1831182bc9c8d5907a92af6312c778f32be81414cfddfc3ced7b58375960232031d3295e8770b1a1e7466d2ace99e01bbcccd838543 arm-replace-sun-style-flash-on-section-directive.patch +c5fc4f2f70112cc66a91a2948f7fd4adcd7172a95191b4c862084c7b80093cfa696925aa9a825c41bddac7441ba153eb264b8146e52a4556a73349e6fd10e641 brcmfmac-disable-power-management.patch +27ec1bc1d916dbd2258192c1ed864eacbd2746b49caa554fbaf1124bac478bab0b729e7fabbab8705ae175bb098800f795d415f4de4964da921c1b802560b67a brcmfmac-fix-suspend-resume-when-power-is-cut-off.patch +0f47278c5bfafb939e46224fbf16f9491e3cc560ac128dcf430a1f6cf9064fb1c5bf5db1a3076c35d30c004aec525a7d6616a647564f197bb29c57701c1db982 enable-automatic-partial-refreshing.patch +9d01054ea7e4ee43836cc536bead5c1707b133790a4ef63e29feb10de4e0b290ba8829980b5340f56bee1e9ec0de66e1e4a55f03c0e6aacbce871a9d60e6ef2e config-changes-rm.armv7 +9d01054ea7e4ee43836cc536bead5c1707b133790a4ef63e29feb10de4e0b290ba8829980b5340f56bee1e9ec0de66e1e4a55f03c0e6aacbce871a9d60e6ef2e config-changes-rm.armhf +" diff --git a/user/linux-rm/arm-replace-sun-style-flash-on-section-directive.patch b/user/linux-rm/arm-replace-sun-style-flash-on-section-directive.patch new file mode 100644 index 0000000..29fef7f --- /dev/null +++ b/user/linux-rm/arm-replace-sun-style-flash-on-section-directive.patch @@ -0,0 +1,428 @@ +From 790756c7e0229dedc83bf058ac69633045b1000e Mon Sep 17 00:00:00 2001 +From: Nick Desaulniers +Date: Mon, 4 Nov 2019 19:31:45 +0100 +Subject: [PATCH] ARM: 8933/1: replace Sun/Solaris style flag on section + directive + +It looks like a section directive was using "Solaris style" to declare +the section flags. Replace this with the GNU style so that Clang's +integrated assembler can assemble this directive. + +The modified instances were identified via: +$ ag \.section | grep # + +Link: https://ftp.gnu.org/old-gnu/Manuals/gas-2.9.1/html_chapter/as_7.html#SEC119 +Link: https://github.com/ClangBuiltLinux/linux/issues/744 +Link: https://bugs.llvm.org/show_bug.cgi?id=43759 +Link: https://reviews.llvm.org/D69296 + +Acked-by: Nicolas Pitre +Reviewed-by: Ard Biesheuvel +Reviewed-by: Stefan Agner +Signed-off-by: Nick Desaulniers +Suggested-by: Fangrui Song +Suggested-by: Jian Cai +Suggested-by: Peter Smith +Signed-off-by: Russell King +--- + arch/arm/boot/bootp/init.S | 2 +- + arch/arm/boot/compressed/big-endian.S | 2 +- + arch/arm/boot/compressed/head.S | 2 +- + arch/arm/boot/compressed/piggy.S | 2 +- + arch/arm/mm/proc-arm1020.S | 2 +- + arch/arm/mm/proc-arm1020e.S | 2 +- + arch/arm/mm/proc-arm1022.S | 2 +- + arch/arm/mm/proc-arm1026.S | 2 +- + arch/arm/mm/proc-arm720.S | 2 +- + arch/arm/mm/proc-arm740.S | 2 +- + arch/arm/mm/proc-arm7tdmi.S | 2 +- + arch/arm/mm/proc-arm920.S | 2 +- + arch/arm/mm/proc-arm922.S | 2 +- + arch/arm/mm/proc-arm925.S | 2 +- + arch/arm/mm/proc-arm926.S | 2 +- + arch/arm/mm/proc-arm940.S | 2 +- + arch/arm/mm/proc-arm946.S | 2 +- + arch/arm/mm/proc-arm9tdmi.S | 2 +- + arch/arm/mm/proc-fa526.S | 2 +- + arch/arm/mm/proc-feroceon.S | 2 +- + arch/arm/mm/proc-mohawk.S | 2 +- + arch/arm/mm/proc-sa110.S | 2 +- + arch/arm/mm/proc-sa1100.S | 2 +- + arch/arm/mm/proc-v6.S | 2 +- + arch/arm/mm/proc-v7.S | 2 +- + arch/arm/mm/proc-v7m.S | 4 ++-- + arch/arm/mm/proc-xsc3.S | 2 +- + arch/arm/mm/proc-xscale.S | 2 +- + 28 files changed, 29 insertions(+), 29 deletions(-) + +diff --git a/arch/arm/boot/bootp/init.S b/arch/arm/boot/bootp/init.S +index 5c476bd2b4ce9c..b562da2f704088 100644 +--- a/arch/arm/boot/bootp/init.S ++++ b/arch/arm/boot/bootp/init.S +@@ -13,7 +13,7 @@ + * size immediately following the kernel, we could build this into + * a binary blob, and concatenate the zImage using the cat command. + */ +- .section .start,#alloc,#execinstr ++ .section .start, "ax" + .type _start, #function + .globl _start + +diff --git a/arch/arm/boot/compressed/big-endian.S b/arch/arm/boot/compressed/big-endian.S +index 88e2a88d324b25..0e092c36da2f27 100644 +--- a/arch/arm/boot/compressed/big-endian.S ++++ b/arch/arm/boot/compressed/big-endian.S +@@ -6,7 +6,7 @@ + * Author: Nicolas Pitre + */ + +- .section ".start", #alloc, #execinstr ++ .section ".start", "ax" + + mrc p15, 0, r0, c1, c0, 0 @ read control reg + orr r0, r0, #(1 << 7) @ enable big endian mode +diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S +index ae70754d003daa..ead21e5f2b8032 100644 +--- a/arch/arm/boot/compressed/head.S ++++ b/arch/arm/boot/compressed/head.S +@@ -140,7 +140,7 @@ + #endif + .endm + +- .section ".start", #alloc, #execinstr ++ .section ".start", "ax" + /* + * sort out different calling conventions + */ +diff --git a/arch/arm/boot/compressed/piggy.S b/arch/arm/boot/compressed/piggy.S +index 0284f84dcf3804..27577644ee721a 100644 +--- a/arch/arm/boot/compressed/piggy.S ++++ b/arch/arm/boot/compressed/piggy.S +@@ -1,5 +1,5 @@ + /* SPDX-License-Identifier: GPL-2.0 */ +- .section .piggydata,#alloc ++ .section .piggydata, "a" + .globl input_data + input_data: + .incbin "arch/arm/boot/compressed/piggy_data" +diff --git a/arch/arm/mm/proc-arm1020.S b/arch/arm/mm/proc-arm1020.S +index 4fa5371bc6624c..2785da387c9104 100644 +--- a/arch/arm/mm/proc-arm1020.S ++++ b/arch/arm/mm/proc-arm1020.S +@@ -491,7 +491,7 @@ cpu_arm1020_name: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __arm1020_proc_info,#object + __arm1020_proc_info: +diff --git a/arch/arm/mm/proc-arm1020e.S b/arch/arm/mm/proc-arm1020e.S +index 5d8a8339e09a4e..e9ea237ed78525 100644 +--- a/arch/arm/mm/proc-arm1020e.S ++++ b/arch/arm/mm/proc-arm1020e.S +@@ -449,7 +449,7 @@ arm1020e_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __arm1020e_proc_info,#object + __arm1020e_proc_info: +diff --git a/arch/arm/mm/proc-arm1022.S b/arch/arm/mm/proc-arm1022.S +index b3dd95c345e482..920c279e7879d8 100644 +--- a/arch/arm/mm/proc-arm1022.S ++++ b/arch/arm/mm/proc-arm1022.S +@@ -443,7 +443,7 @@ arm1022_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __arm1022_proc_info,#object + __arm1022_proc_info: +diff --git a/arch/arm/mm/proc-arm1026.S b/arch/arm/mm/proc-arm1026.S +index e927187157d7d5..0bdf25a95b107d 100644 +--- a/arch/arm/mm/proc-arm1026.S ++++ b/arch/arm/mm/proc-arm1026.S +@@ -437,7 +437,7 @@ arm1026_crval: + string cpu_arm1026_name, "ARM1026EJ-S" + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __arm1026_proc_info,#object + __arm1026_proc_info: +diff --git a/arch/arm/mm/proc-arm720.S b/arch/arm/mm/proc-arm720.S +index c99d24363f32ee..39361e196d61b8 100644 +--- a/arch/arm/mm/proc-arm720.S ++++ b/arch/arm/mm/proc-arm720.S +@@ -172,7 +172,7 @@ arm720_crval: + * See for a definition of this structure. + */ + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .macro arm720_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cpu_flush:req + .type __\name\()_proc_info,#object +diff --git a/arch/arm/mm/proc-arm740.S b/arch/arm/mm/proc-arm740.S +index 1b4a3838393fbd..1a94bbf6e53fc2 100644 +--- a/arch/arm/mm/proc-arm740.S ++++ b/arch/arm/mm/proc-arm740.S +@@ -128,7 +128,7 @@ __arm740_setup: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + .type __arm740_proc_info,#object + __arm740_proc_info: + .long 0x41807400 +diff --git a/arch/arm/mm/proc-arm7tdmi.S b/arch/arm/mm/proc-arm7tdmi.S +index 17a4687065c7f9..52b66cf0259e3f 100644 +--- a/arch/arm/mm/proc-arm7tdmi.S ++++ b/arch/arm/mm/proc-arm7tdmi.S +@@ -72,7 +72,7 @@ __arm7tdmi_setup: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .macro arm7tdmi_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, \ + extra_hwcaps=0 +diff --git a/arch/arm/mm/proc-arm920.S b/arch/arm/mm/proc-arm920.S +index 298c76b47749f9..31ac8acc34dc55 100644 +--- a/arch/arm/mm/proc-arm920.S ++++ b/arch/arm/mm/proc-arm920.S +@@ -434,7 +434,7 @@ arm920_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __arm920_proc_info,#object + __arm920_proc_info: +diff --git a/arch/arm/mm/proc-arm922.S b/arch/arm/mm/proc-arm922.S +index 824be3a0bc2382..ca2c7ca8af2146 100644 +--- a/arch/arm/mm/proc-arm922.S ++++ b/arch/arm/mm/proc-arm922.S +@@ -412,7 +412,7 @@ arm922_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __arm922_proc_info,#object + __arm922_proc_info: +diff --git a/arch/arm/mm/proc-arm925.S b/arch/arm/mm/proc-arm925.S +index d40cff8f102c2b..a381a0c9f1092e 100644 +--- a/arch/arm/mm/proc-arm925.S ++++ b/arch/arm/mm/proc-arm925.S +@@ -477,7 +477,7 @@ arm925_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .macro arm925_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cache + .type __\name\()_proc_info,#object +diff --git a/arch/arm/mm/proc-arm926.S b/arch/arm/mm/proc-arm926.S +index 4ef89e1d11276e..1ba253c2bce190 100644 +--- a/arch/arm/mm/proc-arm926.S ++++ b/arch/arm/mm/proc-arm926.S +@@ -460,7 +460,7 @@ arm926_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __arm926_proc_info,#object + __arm926_proc_info: +diff --git a/arch/arm/mm/proc-arm940.S b/arch/arm/mm/proc-arm940.S +index 1c26d991386d7d..4b8a00220cc976 100644 +--- a/arch/arm/mm/proc-arm940.S ++++ b/arch/arm/mm/proc-arm940.S +@@ -340,7 +340,7 @@ __arm940_setup: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __arm940_proc_info,#object + __arm940_proc_info: +diff --git a/arch/arm/mm/proc-arm946.S b/arch/arm/mm/proc-arm946.S +index 2dc1c75a4fd4a8..555becf9c758d1 100644 +--- a/arch/arm/mm/proc-arm946.S ++++ b/arch/arm/mm/proc-arm946.S +@@ -395,7 +395,7 @@ __arm946_setup: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + .type __arm946_proc_info,#object + __arm946_proc_info: + .long 0x41009460 +diff --git a/arch/arm/mm/proc-arm9tdmi.S b/arch/arm/mm/proc-arm9tdmi.S +index 913c06e590af51..ef517530130b03 100644 +--- a/arch/arm/mm/proc-arm9tdmi.S ++++ b/arch/arm/mm/proc-arm9tdmi.S +@@ -66,7 +66,7 @@ __arm9tdmi_setup: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .macro arm9tdmi_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req + .type __\name\()_proc_info, #object +diff --git a/arch/arm/mm/proc-fa526.S b/arch/arm/mm/proc-fa526.S +index 8120b6f4dbb83e..dddf833fe00078 100644 +--- a/arch/arm/mm/proc-fa526.S ++++ b/arch/arm/mm/proc-fa526.S +@@ -185,7 +185,7 @@ fa526_cr1_set: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __fa526_proc_info,#object + __fa526_proc_info: +diff --git a/arch/arm/mm/proc-feroceon.S b/arch/arm/mm/proc-feroceon.S +index bb6dc34d42a374..b12b76bc8d30ca 100644 +--- a/arch/arm/mm/proc-feroceon.S ++++ b/arch/arm/mm/proc-feroceon.S +@@ -571,7 +571,7 @@ feroceon_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .macro feroceon_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cache:req + .type __\name\()_proc_info,#object +diff --git a/arch/arm/mm/proc-mohawk.S b/arch/arm/mm/proc-mohawk.S +index f083085788857b..d47d6c5cee63a6 100644 +--- a/arch/arm/mm/proc-mohawk.S ++++ b/arch/arm/mm/proc-mohawk.S +@@ -416,7 +416,7 @@ mohawk_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __88sv331x_proc_info,#object + __88sv331x_proc_info: +diff --git a/arch/arm/mm/proc-sa110.S b/arch/arm/mm/proc-sa110.S +index d5bc5d70256399..baba503ba81669 100644 +--- a/arch/arm/mm/proc-sa110.S ++++ b/arch/arm/mm/proc-sa110.S +@@ -196,7 +196,7 @@ sa110_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __sa110_proc_info,#object + __sa110_proc_info: +diff --git a/arch/arm/mm/proc-sa1100.S b/arch/arm/mm/proc-sa1100.S +index be7b611c76c76a..75ebacc8e4e5cb 100644 +--- a/arch/arm/mm/proc-sa1100.S ++++ b/arch/arm/mm/proc-sa1100.S +@@ -239,7 +239,7 @@ sa1100_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .macro sa1100_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req + .type __\name\()_proc_info,#object +diff --git a/arch/arm/mm/proc-v6.S b/arch/arm/mm/proc-v6.S +index c1c85eb3484f31..1dd0d5ca27da8f 100644 +--- a/arch/arm/mm/proc-v6.S ++++ b/arch/arm/mm/proc-v6.S +@@ -261,7 +261,7 @@ v6_crval: + string cpu_elf_name, "v6" + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + /* + * Match any ARMv6 processor core. +diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S +index c4e8006a1a8cdd..48e0ef6f0dccfe 100644 +--- a/arch/arm/mm/proc-v7.S ++++ b/arch/arm/mm/proc-v7.S +@@ -644,7 +644,7 @@ __v7_setup_stack: + string cpu_elf_name, "v7" + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + /* + * Standard v7 proc info content +diff --git a/arch/arm/mm/proc-v7m.S b/arch/arm/mm/proc-v7m.S +index 1a49d503eafc80..84459c1d31b87f 100644 +--- a/arch/arm/mm/proc-v7m.S ++++ b/arch/arm/mm/proc-v7m.S +@@ -93,7 +93,7 @@ ENTRY(cpu_cm7_proc_fin) + ret lr + ENDPROC(cpu_cm7_proc_fin) + +- .section ".init.text", #alloc, #execinstr ++ .section ".init.text", "ax" + + __v7m_cm7_setup: + mov r8, #(V7M_SCB_CCR_DC | V7M_SCB_CCR_IC| V7M_SCB_CCR_BP) +@@ -177,7 +177,7 @@ ENDPROC(__v7m_setup) + string cpu_elf_name "v7m" + string cpu_v7m_name "ARMv7-M" + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .macro __v7m_proc name, initfunc, cache_fns = nop_cache_fns, hwcaps = 0, proc_fns = v7m_processor_functions + .long 0 /* proc_info_list.__cpu_mm_mmu_flags */ +diff --git a/arch/arm/mm/proc-xsc3.S b/arch/arm/mm/proc-xsc3.S +index 1ac0fbbe9f127f..42eaecc43cfeff 100644 +--- a/arch/arm/mm/proc-xsc3.S ++++ b/arch/arm/mm/proc-xsc3.S +@@ -496,7 +496,7 @@ xsc3_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .macro xsc3_proc_info name:req, cpu_val:req, cpu_mask:req + .type __\name\()_proc_info,#object +diff --git a/arch/arm/mm/proc-xscale.S b/arch/arm/mm/proc-xscale.S +index bdb2b7749b0393..18ac5a1f892258 100644 +--- a/arch/arm/mm/proc-xscale.S ++++ b/arch/arm/mm/proc-xscale.S +@@ -610,7 +610,7 @@ xscale_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .macro xscale_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cache + .type __\name\()_proc_info,#object diff --git a/user/linux-rm/brcmfmac-disable-power-management.patch b/user/linux-rm/brcmfmac-disable-power-management.patch new file mode 100644 index 0000000..2d48b3f --- /dev/null +++ b/user/linux-rm/brcmfmac-disable-power-management.patch @@ -0,0 +1,13 @@ +diff --git a/./drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c.orig b/./drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +index f507d82..6c06044 100644 +--- a/./drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c.orig ++++ b/./drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +@@ -2743,6 +2743,8 @@ brcmf_cfg80211_set_power_mgmt(struct wiphy *wiphy, struct net_device *ndev, + * preference in cfg struct to apply this to + * FW later while initializing the dongle + */ ++ pr_info("power management disabled\n"); ++ enabled = false; + cfg->pwr_save = enabled; + if (!check_vif_up(ifp->vif)) { + diff --git a/user/linux-rm/brcmfmac-fix-suspend-resume-when-power-is-cut-off.patch b/user/linux-rm/brcmfmac-fix-suspend-resume-when-power-is-cut-off.patch new file mode 100644 index 0000000..713c034 --- /dev/null +++ b/user/linux-rm/brcmfmac-fix-suspend-resume-when-power-is-cut-off.patch @@ -0,0 +1,221 @@ +From patchwork Wed Sep 25 13:44:57 2019 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +X-Patchwork-Submitter: Adrian Ratiu +X-Patchwork-Id: 11160709 +X-Patchwork-Delegate: kvalo@adurom.com +Return-Path: +Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org + [172.30.200.123]) + by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E6264924 + for ; + Wed, 25 Sep 2019 13:45:07 +0000 (UTC) +Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) + by mail.kernel.org (Postfix) with ESMTP id CEE8421D7E + for ; + Wed, 25 Sep 2019 13:45:07 +0000 (UTC) +Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand + id S2406776AbfIYNo5 (ORCPT + ); + Wed, 25 Sep 2019 09:44:57 -0400 +Received: from bhuna.collabora.co.uk ([46.235.227.227]:57998 "EHLO + bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org + with ESMTP id S2406646AbfIYNo5 (ORCPT + ); + Wed, 25 Sep 2019 09:44:57 -0400 +Received: from [127.0.0.1] (localhost [127.0.0.1]) + (Authenticated sender: aratiu) + with ESMTPSA id 34818280400 +From: Adrian Ratiu +To: brcm80211-dev-list.pdl@broadcom.com +Cc: linux-wireless@vger.kernel.org, netdev@vger.kernel.org, + linux-kernel@vger.kernel.org, + Martyn Welch +Subject: [PATCH 1/2] brcmfmac: don't WARN when there are no requests +Date: Wed, 25 Sep 2019 16:44:57 +0300 +Message-Id: <20190925134458.1413790-1-adrian.ratiu@collabora.com> +X-Mailer: git-send-email 2.23.0 +MIME-Version: 1.0 +Sender: linux-wireless-owner@vger.kernel.org +Precedence: bulk +List-ID: +X-Mailing-List: linux-wireless@vger.kernel.org + +When n_reqs == 0 there is nothing to do so it doesn't make sense to +search for requests and issue a warning because none is found. + +Signed-off-by: Martyn Welch +Signed-off-by: Adrian Ratiu +--- + drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c +index 14e530601ef3..fabfbb0b40b0 100644 +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c +@@ -57,6 +57,10 @@ static int brcmf_pno_remove_request(struct brcmf_pno_info *pi, u64 reqid) + + mutex_lock(&pi->req_lock); + ++ /* Nothing to do if we have no requests */ ++ if (pi->n_reqs == 0) ++ goto done; ++ + /* find request */ + for (i = 0; i < pi->n_reqs; i++) { + if (pi->reqs[i]->reqid == reqid) + +From patchwork Wed Sep 25 13:44:58 2019 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +X-Patchwork-Submitter: Adrian Ratiu +X-Patchwork-Id: 11160707 +X-Patchwork-Delegate: kvalo@adurom.com +Return-Path: +Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org + [172.30.200.123]) + by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 47A3C14DB + for ; + Wed, 25 Sep 2019 13:45:03 +0000 (UTC) +Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) + by mail.kernel.org (Postfix) with ESMTP id 2F3CC21D7F + for ; + Wed, 25 Sep 2019 13:45:03 +0000 (UTC) +Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand + id S2406832AbfIYNo6 (ORCPT + ); + Wed, 25 Sep 2019 09:44:58 -0400 +Received: from bhuna.collabora.co.uk ([46.235.227.227]:58004 "EHLO + bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org + with ESMTP id S2406650AbfIYNo5 (ORCPT + ); + Wed, 25 Sep 2019 09:44:57 -0400 +Received: from [127.0.0.1] (localhost [127.0.0.1]) + (Authenticated sender: aratiu) + with ESMTPSA id 8EFA628BCCF +From: Adrian Ratiu +To: brcm80211-dev-list.pdl@broadcom.com +Cc: linux-wireless@vger.kernel.org, netdev@vger.kernel.org, + linux-kernel@vger.kernel.org, + Gustavo Padovan +Subject: [PATCH 2/2] brcmfmac: fix suspend/resume when power is cut off +Date: Wed, 25 Sep 2019 16:44:58 +0300 +Message-Id: <20190925134458.1413790-2-adrian.ratiu@collabora.com> +X-Mailer: git-send-email 2.23.0 +In-Reply-To: <20190925134458.1413790-1-adrian.ratiu@collabora.com> +References: <20190925134458.1413790-1-adrian.ratiu@collabora.com> +MIME-Version: 1.0 +Sender: linux-wireless-owner@vger.kernel.org +Precedence: bulk +List-ID: +X-Mailing-List: linux-wireless@vger.kernel.org + +brcmfmac assumed the wifi device always remains powered on and thus +hardcoded the MMC_PM_KEEP_POWER flag expecting the wifi device to +remain on even during suspend/resume cycles. + +This is not always the case, some appliances cut power to everything +connected via SDIO for efficiency reasons and this leads to wifi not +being usable after coming out of suspend because the device was not +correctly reinitialized. + +So we check for the keep_power capability and if it's not present then +we remove the device and probe it again during resume to mirror what's +happening in hardware and ensure correct reinitialization in the case +when MMC_PM_KEEP_POWER is not supported. + +Suggested-by: Gustavo Padovan +Signed-off-by: Adrian Ratiu +--- + .../broadcom/brcm80211/brcmfmac/bcmsdh.c | 53 ++++++++++++++----- + 1 file changed, 39 insertions(+), 14 deletions(-) + +diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c +index 987731b..dac4685 100644 +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c +@@ -1136,7 +1136,8 @@ static int brcmf_ops_sdio_suspend(struct device *dev) + struct sdio_func *func; + struct brcmf_bus *bus_if; + struct brcmf_sdio_dev *sdiodev; +- mmc_pm_flag_t sdio_flags; ++ mmc_pm_flag_t pm_caps, sdio_flags; ++ int ret = 0; + struct brcmf_cfg80211_info *config; + int retry = BRCMF_PM_WAIT_MAXRETRY; + +@@ -1159,19 +1160,33 @@ static int brcmf_ops_sdio_suspend(struct device *dev) + + sdiodev = bus_if->bus_priv.sdio; + +- brcmf_sdiod_freezer_on(sdiodev); +- brcmf_sdio_wd_timer(sdiodev->bus, 0); +- +- sdio_flags = MMC_PM_KEEP_POWER; +- if (sdiodev->wowl_enabled) { +- if (sdiodev->settings->bus.sdio.oob_irq_supported) +- enable_irq_wake(sdiodev->settings->bus.sdio.oob_irq_nr); +- else +- sdio_flags |= MMC_PM_WAKE_SDIO_IRQ; ++ pm_caps = sdio_get_host_pm_caps(func); ++ ++ if (pm_caps & MMC_PM_KEEP_POWER) { ++ /* preserve card power during suspend */ ++ brcmf_sdiod_freezer_on(sdiodev); ++ brcmf_sdio_wd_timer(sdiodev->bus, 0); ++ ++ sdio_flags = MMC_PM_KEEP_POWER; ++ if (sdiodev->wowl_enabled) { ++ if (sdiodev->settings->bus.sdio.oob_irq_supported) ++ enable_irq_wake(sdiodev->settings->bus.sdio.oob_irq_nr); ++ else ++ sdio_flags |= MMC_PM_WAKE_SDIO_IRQ; ++ } ++ ++ if (sdio_set_host_pm_flags(sdiodev->func1, sdio_flags)) ++ brcmf_err("Failed to set pm_flags %x\n", sdio_flags); ++ ++ } else { ++ /* power will be cut so remove device, probe again in resume */ ++ brcmf_sdiod_intr_unregister(sdiodev); ++ ret = brcmf_sdiod_remove(sdiodev); ++ if (ret) ++ brcmf_err("Failed to remove device on suspend\n"); + } +- if (sdio_set_host_pm_flags(sdiodev->func1, sdio_flags)) +- brcmf_err("Failed to set pm_flags %x\n", sdio_flags); +- return 0; ++ ++ return ret; + } + + static int brcmf_ops_sdio_resume(struct device *dev) +@@ -1179,13 +1194,23 @@ static int brcmf_ops_sdio_resume(struct device *dev) + struct brcmf_bus *bus_if = dev_get_drvdata(dev); + struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio; + struct sdio_func *func = container_of(dev, struct sdio_func, dev); ++ mmc_pm_flag_t pm_caps = sdio_get_host_pm_caps(func); ++ int ret = 0; + + brcmf_dbg(SDIO, "Enter: F%d\n", func->num); + if (func->num != 2) + return 0; + +- brcmf_sdiod_freezer_off(sdiodev); +- return 0; ++ if (!(pm_caps & MMC_PM_KEEP_POWER)) { ++ /* bus was powered off and device removed, probe again */ ++ ret = brcmf_sdiod_probe(sdiodev); ++ if (ret) ++ brcmf_err("Failed to probe device on resume\n"); ++ } else { ++ brcmf_sdiod_freezer_off(sdiodev); ++ } ++ ++ return ret; + } + + static const struct dev_pm_ops brcmf_sdio_pm_ops = { diff --git a/user/linux-rm/config-changes-rm.armhf b/user/linux-rm/config-changes-rm.armhf new file mode 120000 index 0000000..6c4e6a5 --- /dev/null +++ b/user/linux-rm/config-changes-rm.armhf @@ -0,0 +1 @@ +config-changes-rm.armv7 \ No newline at end of file diff --git a/user/linux-rm/config-changes-rm.armv7 b/user/linux-rm/config-changes-rm.armv7 new file mode 100644 index 0000000..fa272a1 --- /dev/null +++ b/user/linux-rm/config-changes-rm.armv7 @@ -0,0 +1,62 @@ +# format is config=command +# where command can be one of: +# y,n,m,", +# from remarkable-microsd project +# see http://www.davisr.me/projects/remarkable-microsd/ +CONFIG_RTL_CARDS=y +CONFIG_BATTERY_BQ27XXX=y +CONFIG_BATTERY_BQ27XXX_I2C=y +CONFIG_CRYPTO_AEAD=y +CONFIG_CRYPTO_GF128MUL=y +CONFIG_CRYPTO_NULL=y +CONFIG_CRYPTO_SEQIV=y +CONFIG_CRYPTO_CTR=y +CONFIG_CRYPTO_GHASH=y +# serial through USB +CONFIG_USB_ACM=y +CONFIG_USB_F_ACM=y +CONFIG_USB_U_SERIAL=y +CONFIG_USB_CDC_COMPOSITE=y +# console through serial +CONFIG_USB_G_SERIAL=y +CONFIG_U_SERIAL_CONSOLE=y +# wifi module doesn't load early enough for lack of initramfs +CONFIG_CFG80211=m +CONFIG_MAC80211=m +CONFIG_BRCMFMAC=m +CONFIG_BRCMUTIL=m +# iwd requires these modules +CONFIG_CRYPTO_AES=y +CONFIG_CRYPTO_USER_API_HASH=y +CONFIG_CRYPTO_USER_API_SKCIPHER=y +CONFIG_KEY_DH_OPERATIONS=y +CONFIG_CRYPTO_ECB=y +CONFIG_CRYPTO_MD4=y +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_CBC=y +CONFIG_CRYPTO_SHA256=y +CONFIG_CRYPTO_DES=y +CONFIG_CRYPTO_CMAC=y +CONFIG_CRYPTO_HMAC=y +CONFIG_CRYPTO_SHA512=y +CONFIG_CRYPTO_SHA1=y +# other +LOCALVERSION="" +CONFIG_DEFAULT_HOSTNAME="remarkable" +CONFIG_MODULE_UNLOAD=y +# f2fs support +CONFIG_F2FS_FS=y +CONFIG_F2FS_STAT_FS=y +CONFIG_F2FS_FS_XATTR=y +CONFIG_F2FS_FS_POSIX_ACL=y +CONFIG_F2FS_FS_SECURITY=y +CONFIG_F2FS_CHECK_FS=n +CONFIG_F2FS_IO_TRACE=n +CONFIG_F2FS_FAULT_INJECTION=n +CONFIG_F2FS_FS_COMPRESSION=y +CONFIG_F2FS_FS_LZO=y +CONFIG_F2FS_FS_LZ4=y +CONFIG_F2FS_FS_ZSTD=y +CONFIG_F2FS_FS_LZORLE=y +# disabled as breaks build +CONFIG_MXC_GPU_VIV=n diff --git a/user/linux-rm/config-changes-rm2.armhf b/user/linux-rm/config-changes-rm2.armhf new file mode 120000 index 0000000..6c4e6a5 --- /dev/null +++ b/user/linux-rm/config-changes-rm2.armhf @@ -0,0 +1 @@ +config-changes-rm.armv7 \ No newline at end of file diff --git a/user/linux-rm/config-changes-rm2.armv7 b/user/linux-rm/config-changes-rm2.armv7 new file mode 120000 index 0000000..6c4e6a5 --- /dev/null +++ b/user/linux-rm/config-changes-rm2.armv7 @@ -0,0 +1 @@ +config-changes-rm.armv7 \ No newline at end of file diff --git a/user/linux-rm/enable-automatic-partial-refreshing.patch b/user/linux-rm/enable-automatic-partial-refreshing.patch new file mode 100644 index 0000000..e78bc13 --- /dev/null +++ b/user/linux-rm/enable-automatic-partial-refreshing.patch @@ -0,0 +1,26 @@ +diff --git a/drivers/video/fbdev/mxc/mxc_epdc_fb.c.orig b/drivers/video/fbdev/mxc/mxc_epdc_fb.c +index 5c7d87d..5c31379 100644 +--- a/drivers/video/fbdev/mxc/mxc_epdc_fb.c.orig ++++ b/drivers/video/fbdev/mxc/mxc_epdc_fb.c +@@ -3489,10 +3489,10 @@ static void mxc_epdc_fb_update_pages(struct mxc_epdc_fb_data *fb_data, + update.update_region.top = y1; + update.update_region.height = y2 - y1; + update.waveform_mode = WAVEFORM_MODE_AUTO; +- update.update_mode = UPDATE_MODE_FULL; ++ update.update_mode = UPDATE_MODE_PARTIAL; + update.update_marker = 0; + update.temp = TEMP_USE_AMBIENT; +- update.flags = 0; ++ update.flags = EPDC_FLAG_USE_REGAL; + + mxc_epdc_fb_send_update(&update, &fb_data->info); + } +@@ -3687,7 +3687,7 @@ static struct fb_ops mxc_epdc_fb_ops = { + }; + + static struct fb_deferred_io mxc_epdc_fb_defio = { +- .delay = HZ, ++ .delay = HZ / 30, + .deferred_io = mxc_epdc_fb_deferred_io, + }; + diff --git a/user/linux-rm/enable-sdhc1.patch b/user/linux-rm/enable-sdhc1.patch new file mode 100644 index 0000000..31c2b72 --- /dev/null +++ b/user/linux-rm/enable-sdhc1.patch @@ -0,0 +1,790 @@ +diff --git a/arch/arm/boot/dts/zero-gravitas.dts b/arch/arm/boot/dts/zero-gravitas.dts +index f51edfdedf8a..947f43c3434c 100644 +--- a/arch/arm/boot/dts/zero-gravitas.dts ++++ b/arch/arm/boot/dts/zero-gravitas.dts +@@ -1,6 +1,783 @@ +-#include "zero-gravitas-factory.dts" ++/* ++ * Copyright (C) 2013 Freescale Semiconductor, Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++ ++/dts-v1/; ++ ++#include ++#include ++#include "imx6sl.dtsi" ++#include "zero-gravitas-padctl.h" ++ ++/ { ++ model = "reMarkable 1.0"; ++ compatible = "remarkable,zero-gravitas", "fsl,imx6sl"; ++ ++ memory { ++ reg = <0x80000000 0x20000000>; ++ }; ++ ++ wifi_pwrseq: wifi_pwrseq { ++ compatible = "mmc-pwrseq-simple"; ++ reset-gpios = <&gpio3 30 GPIO_ACTIVE_LOW>, ++ <&gpio4 0 GPIO_ACTIVE_LOW>; ++ clocks = <&clks IMX6SL_CLK_OSC>; ++ clock-names = "ext_clock"; ++ }; ++ ++ regulators { ++ compatible = "simple-bus"; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ reg_usb_otg1_vbus: regulator@0 { ++ compatible = "regulator-fixed"; ++ reg = <0>; ++ regulator-name = "usb_otg1_vbus"; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ gpio = <&gpio4 15 0>; ++ enable-active-high; ++ vin-supply = <&swbst_reg>; ++ }; ++ ++ charger_regulator: regulator@1 { ++ reg = <1>; ++ compatible = "regulator-fixed"; ++ regulator-name = "charger-regulator"; ++ regulator-min-microamp = <5000000>; ++ regulator-max-microamp = <5000000>; ++ gpios = <&gpio3 27 GPIO_ACTIVE_LOW>; ++ enable-active-high; /* Don't invert twice */ ++ regulator-boot-on; ++ status = "disabled"; ++ }; ++ }; ++ ++ wacom_reset: wacom-reset { ++ compatible = "gpio-reset"; ++ reset-gpios = <&gpio4 4 1>; ++ reset-delay-us = <100000>; ++ #reset-cells = <0>; ++ }; ++ ++ gpio-keys { ++ compatible = "gpio-keys"; ++ pinctrl-0 = <&pinctrl_keys>; ++ pinctrl-names = "default"; ++ status = "okay"; ++ ++ button_0 { ++ label = "Power"; ++ gpios = <&gpio4 9 GPIO_ACTIVE_LOW>; ++ linux,code = ; ++ gpio-key,wakeup; ++ debounce-interval = <10>; ++ }; ++ ++ button_1 { ++ label = "Left"; ++ gpios = <&gpio3 24 GPIO_ACTIVE_LOW>; ++ linux,code = ; ++ gpio-key,wakeup; ++ debounce-interval = <5>; ++ }; ++ ++ button_2 { ++ label = "Home"; ++ gpios = <&gpio3 26 GPIO_ACTIVE_LOW>; ++ linux,code = ; ++ gpio-key,wakeup; ++ debounce-interval = <5>; ++ }; ++ button_3 { ++ label = "Right"; ++ gpios = <&gpio3 28 GPIO_ACTIVE_LOW>; ++ linux,code = ; ++ gpio-key,wakeup; ++ debounce-interval = <5>; ++ }; ++ button_4 { ++ label = "LowPower"; ++ gpios = <&gpio3 31 GPIO_ACTIVE_LOW>; ++ linux,code = ; ++ gpio-key,wakeup; ++ debounce-interval = <100>; ++ }; ++ }; ++ ++ usb_charger: usb_charger { ++ compatible = "gpio-charger"; ++ gpios = <&gpio4 1 0>; ++ status = "disabled"; ++ }; ++}; ++ ++&epdc { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_epdc_0>; ++ VCOM-supply = <&VCOM_reg>; ++ DISPLAY-supply = <&DISPLAY_reg>; ++ TMST-supply = <&TMST_reg>; ++ status = "okay"; ++}; ++ ++&gpc { ++ fsl,ldo-bypass = <1>; ++}; ++ ++®_arm { ++ vin-supply = <&sw1a_reg>; ++ regulator-allow-bypass; ++}; ++ ++®_soc { ++ vin-supply = <&sw1c_reg>; ++ regulator-allow-bypass; ++}; ++ ++®_pu { ++ vin-supply = <&sw1c_reg>; ++ regulator-allow-bypass; ++}; ++ ++&i2c1 { ++ clock-frequency = <100000>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_i2c1>; ++ status = "okay"; ++ ++ battery: bq27441@55 { ++ reg = <0x55>; ++ compatible = "ti,bq27441"; ++ /*power-supplies = <&usb_charger>;*/ ++ /*charger-supply = <&charger_regulator>;*/ ++ /*interrupt-parent = <&gpio3>; ++ interrupts = <31 IRQ_TYPE_LEVEL_HIGH>;*/ ++ ti,resistor-sense = <10>; ++ }; ++ ++ pmic: pfuze100@8 { ++ compatible = "fsl,pfuze100"; ++ reg = <0x08>; ++ ++ regulators { ++ sw1a_reg: sw1ab { ++ regulator-min-microvolt = <300000>; ++ regulator-max-microvolt = <1875000>; ++ regulator-boot-on; ++ regulator-always-on; ++ regulator-ramp-delay = <6250>; ++ }; ++ ++ sw1c_reg: sw1c { ++ regulator-min-microvolt = <300000>; ++ regulator-max-microvolt = <1875000>; ++ regulator-boot-on; ++ regulator-always-on; ++ regulator-ramp-delay = <6250>; ++ }; ++ ++ sw2_reg: sw2 { ++ regulator-min-microvolt = <400000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ ++ sw3a_reg: sw3a { ++ regulator-min-microvolt = <400000>; ++ regulator-max-microvolt = <1975000>; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ ++ sw3b_reg: sw3b { ++ regulator-min-microvolt = <400000>; ++ regulator-max-microvolt = <1975000>; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ ++ sw4_reg: sw4 { ++ regulator-min-microvolt = <800000>; ++ regulator-max-microvolt = <3300000>; ++ }; ++ ++ swbst_reg: swbst { ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5150000>; ++ }; ++ ++ snvs_reg: vsnvs { ++ regulator-min-microvolt = <1000000>; ++ regulator-max-microvolt = <3000000>; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ ++ vref_reg: vrefddr { ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ ++ vgen1_reg: vgen1 { ++ regulator-min-microvolt = <800000>; ++ regulator-max-microvolt = <1550000>; ++ regulator-always-on; ++ }; ++ ++ vgen2_reg: vgen2 { ++ regulator-min-microvolt = <800000>; ++ regulator-max-microvolt = <1550000>; ++ }; ++ ++ vgen3_reg: vgen3 { ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <3300000>; ++ }; ++ ++ vgen4_reg: vgen4 { ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-always-on; ++ }; ++ ++ vgen5_reg: vgen5 { ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-always-on; ++ }; ++ ++ vgen6_reg: vgen6 { ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-always-on; ++ }; ++ }; ++ }; ++ ++ max17135@48 { ++ compatible = "maxim,max17135"; ++ reg = <0x48>; ++ pass_num = <2>; ++ gvee_pwrup = <0>; /* ms */ ++ vneg_pwrup = <3>; ++ vpos_pwrup = <6>; ++ gvdd_pwrup = <3>; ++ ++ gvdd_pwrdn = <1>; ++ vpos_pwrdn = <2>; ++ vneg_pwrdn = <6>; ++ gvee_pwrdn = <50>; ++ /* These are only for passnum 1, we use i2c */ ++ gpio_pmic_pwrgood = <&gpio2 13 0>; ++ gpio_pmic_vcom_ctrl = <&gpio2 3 0>; ++ gpio_pmic_wakeup = <&gpio2 14 0>; ++ gpio_pmic_v3p3 = <&gpio2 7 0>; ++ gpio_pmic_intr = <&gpio2 12 0>; ++ ++ regulators { ++ DISPLAY_reg: DISPLAY { ++ regulator-name = "DISPLAY"; ++ }; ++ ++ GVDD_reg: GVDD { ++ /* 20v */ ++ regulator-name = "GVDD"; ++ }; ++ ++ GVEE_reg: GVEE { ++ /* -22v */ ++ regulator-name = "GVEE"; ++ }; ++ ++ HVINN_reg: HVINN { ++ /* -22v */ ++ regulator-name = "HVINN"; ++ }; ++ ++ HVINP_reg: HVINP { ++ /* 20v */ ++ regulator-name = "HVINP"; ++ }; ++ ++ VCOM_reg: VCOM { ++ regulator-name = "VCOM"; ++ /* Real max value: -500000 */ ++ regulator-max-microvolt = <4325000>; ++ /* Real min value: -4325000 */ ++ regulator-min-microvolt = <500000>; ++ }; ++ ++ VNEG_reg: VNEG { ++ /* -15v */ ++ regulator-name = "VNEG"; ++ }; ++ ++ VPOS_reg: VPOS { ++ /* 15v */ ++ regulator-name = "VPOS"; ++ }; ++ ++ TMST_reg: TMST { ++ regulator-name = "TMST"; ++ /* 2's-compliment, -127 */ ++ regulator-min-microvolt = <0xffffff81>; ++ /* 2's-compliment, +127 */ ++ regulator-max-microvolt = <0x0000007f>; ++ }; ++ }; ++ }; ++ ++}; ++ ++&i2c2 { ++ clock-frequency = <100000>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_i2c2>; ++ status = "okay"; ++ ++ digitizer: wacom-i2c@9 { ++ compatible = "wacom,wacom-i2c"; ++ reg = <0x09>; ++ interrupt-parent = <&gpio2>; ++ interrupts = <10 2>; ++ resets = <&wacom_reset>; ++ }; ++}; ++ ++&i2c3 { ++ clock-frequency = <100000>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_i2c3>; ++ status = "okay"; ++ ++ tsc@24 { ++ compatible = "cy,cyttsp5_i2c_adapter"; ++ reg = <0x24>; ++ interrupt-parent = <&gpio4>; ++ interrupts = <3 2>; ++ cy,adapter_id = "cyttsp5_i2c_adapter"; ++ status = "okay"; ++ ++ cy,core { ++ cy,name = "cyttsp5_core"; ++ ++ cy,irq_gpio = <&gpio4 3 0>; ++ cy,rst_gpio = <&gpio4 5 0>; ++ cy,hid_desc_register = <1>; ++ /* CY_CORE_FLAG_RESTORE_PARAMETERS */ ++ cy,flags = <4>; ++ /* CY_CORE_EWG_NONE */ ++ cy,easy_wakeup_gesture = <0>; ++ cy,btn_keys = <172 /* KEY_HOMEPAGE */ ++ /* previously was KEY_HOME, new Android versions use KEY_HOMEPAGE */ ++ 139 /* KEY_MENU */ ++ 158 /* KEY_BACK */ ++ 217 /* KEY_SEARCH */ ++ 114 /* KEY_VOLUMEDOWN */ ++ 115 /* KEY_VOLUMEUP */ ++ 212 /* KEY_CAMERA */ ++ 116>; /* KEY_POWER */ ++ cy,btn_keys-tag = <0>; ++ ++ cy,mt { ++ cy,name = "cyttsp5_mt"; ++ ++ cy,inp_dev_name = "cyttsp5_mt"; ++ cy,flags = <0>; ++ cy,abs = ++ /* ABS_MT_POSITION_X, CY_ABS_MIN_X, CY_ABS_MAX_X, 0, 0 */ ++ <0x35 0 880 0 0 ++ /* ABS_MT_POSITION_Y, CY_ABS_MIN_Y, CY_ABS_MAX_Y, 0, 0 */ ++ 0x36 0 1280 0 0 ++ /* ABS_MT_PRESSURE, CY_ABS_MIN_P, CY_ABS_MAX_P, 0, 0 */ ++ 0x3a 0 255 0 0 ++ /* CY_IGNORE_VALUE, CY_ABS_MIN_W, CY_ABS_MAX_W, 0, 0 */ ++ 0xffff 0 255 0 0 ++ /* ABS_MT_TRACKING_ID, CY_ABS_MIN_T, CY_ABS_MAX_T, 0, 0 */ ++ 0x39 0 15 0 0 ++ /* ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0 */ ++ 0x30 0 255 0 0 ++ /* ABS_MT_TOUCH_MINOR, 0, 255, 0, 0 */ ++ 0x31 0 255 0 0 ++ /* ABS_MT_ORIENTATION, -127, 127, 0, 0 */ ++ 0x34 0xffffff81 127 0 0 ++ /* ABS_MT_TOOL_TYPE, 0, MT_TOOL_MAX, 0, 0 */ ++ 0x37 0 1 0 0 ++ /* ABS_DISTANCE, 0, 255, 0, 0 */ ++ 0x19 0 255 0 0>; ++ ++ cy,vkeys_x = <720>; ++ cy,vkeys_y = <1280>; ++ ++ cy,virtual_keys = /* KeyCode CenterX CenterY Width Height */ ++ /* KEY_BACK */ ++ <158 1360 90 160 180 ++ /* KEY_MENU */ ++ 139 1360 270 160 180 ++ /* KEY_HOMEPAGE */ ++ 172 1360 450 160 180 ++ /* KEY SEARCH */ ++ 217 1360 630 160 180>; ++ }; ++ }; ++ }; ++}; ++ ++&iomuxc { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_hog>; ++ ++ zero-gravitas { ++ pinctrl_hog: hoggrp { ++ fsl,pins = < ++ /* MAX17135 pwrgood */ ++ MX6SL_PAD_EPDC_PWRSTAT__GPIO2_IO13 PAD_CTL_NONE ++ /* MAX17135 vcom ctrl */ ++ MX6SL_PAD_EPDC_VCOM0__GPIO2_IO03 PAD_CTL_NONE ++ /* MAX17135 wakeup */ ++ MX6SL_PAD_EPDC_PWRWAKEUP__GPIO2_IO14 PAD_CTL_NONE ++ /* MAX17135 v3p3 */ ++ MX6SL_PAD_EPDC_PWRCTRL0__GPIO2_IO07 PAD_CTL_NONE ++ /* MAX17135 intr */ ++ MX6SL_PAD_EPDC_PWRINT__GPIO2_IO12 PAD_CTL_NONE ++ ++ /* BQ27441 low power */ ++ MX6SL_PAD_KEY_ROW3__GPIO3_IO31 0x17000 ++ ++ /* Wacom interrupt */ ++ MX6SL_PAD_EPDC_PWRCTRL3__GPIO2_IO10 0x17000 ++ /* Wacom reset */ ++ MX6SL_PAD_KEY_COL6__GPIO4_IO04 0x110b0 ++ ++ /* CYTTSP interrupt */ ++ MX6SL_PAD_KEY_ROW5__GPIO4_IO03 0x17000 ++ /* CYTTSP reset */ ++ MX6SL_PAD_KEY_ROW6__GPIO4_IO05 0x110b0 ++ ++ /* USB OTG1 voltage control */ ++ /*MX6SL_PAD_ECSPI2_SS0__GPIO4_IO15 0x17000*/ ++ /*MX6SL_PAD_ECSPI2_SS0__GPIO4_IO15 0x000b0*/ ++ MX6SL_PAD_ECSPI2_SS0__GPIO4_IO15 PAD_CTL_NONE ++ /*MX6SL_PAD_ECSPI2_SS0__USB_OTG1_PWR 0x17000*/ ++ /* USB OTG1 over current detection */ ++ MX6SL_PAD_ECSPI2_MISO__USB_OTG1_OC 0x1b0b0 ++ ++ /* Charger control */ ++ MX6SL_PAD_KEY_ROW1__GPIO3_IO27 0x110b0 ++ /* Charger status */ ++ MX6SL_PAD_KEY_ROW4__GPIO4_IO01 PAD_CTL_NONE ++ ++ /* USDHC1 card detect */ ++ MX6SL_PAD_KEY_ROW7__GPIO4_IO07 0x17059 ++ ++ /* CHIP_WAKE_HOST */ ++ MX6SL_PAD_KEY_COL5__GPIO4_IO02 PAD_CTL_NONE ++ /* POWER_WIFI: WiFi external power control */ ++ MX6SL_PAD_KEY_COL3__GPIO3_IO30 PAD_CTL_NONE ++ /* WL_DIS: WiFi internal power control */ ++ MX6SL_PAD_KEY_COL4__GPIO4_IO00 PAD_CTL_NONE ++ ++ /* 32Khz clock from i.MX6 to WiFi for power saving */ ++ MX6SL_PAD_REF_CLK_32K__XTALOSC_REF_CLK_32K 0x1b0b0 ++ >; ++ }; ++ ++ pinctrl_epdc_0: epdcgrp-0 { ++ fsl,pins = < ++ MX6SL_PAD_EPDC_D0__EPDC_DATA00 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_D1__EPDC_DATA01 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_D2__EPDC_DATA02 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_D3__EPDC_DATA03 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_D4__EPDC_DATA04 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_D5__EPDC_DATA05 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_D6__EPDC_DATA06 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_D7__EPDC_DATA07 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_D8__EPDC_DATA08 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_D9__EPDC_DATA09 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_D10__EPDC_DATA10 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_D11__EPDC_DATA11 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_D12__EPDC_DATA12 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_D13__EPDC_DATA13 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_D14__EPDC_DATA14 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_D15__EPDC_DATA15 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_GDCLK__EPDC_GDCLK PAD_CTL_NONE ++ MX6SL_PAD_EPDC_GDOE__EPDC_GDOE PAD_CTL_NONE ++ MX6SL_PAD_EPDC_GDSP__EPDC_GDSP PAD_CTL_NONE ++ MX6SL_PAD_EPDC_SDCE0__EPDC_SDCE0 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_SDCLK__EPDC_SDCLK_P PAD_CTL_NONE ++ MX6SL_PAD_EPDC_SDLE__EPDC_SDLE PAD_CTL_NONE ++ MX6SL_PAD_EPDC_SDOE__EPDC_SDOE PAD_CTL_NONE ++ MX6SL_PAD_EPDC_BDR0__EPDC_BDR0 PAD_CTL_NONE ++ MX6SL_PAD_EPDC_BDR1__EPDC_BDR1 PAD_CTL_NONE ++ >; ++ }; ++ ++ pinctrl_i2c1: i2c1grp { ++ fsl,pins = < ++ MX6SL_PAD_I2C1_SCL__I2C1_SCL 0x4001b8b1 ++ MX6SL_PAD_I2C1_SDA__I2C1_SDA 0x4001b8b1 ++ >; ++ }; ++ ++ ++ pinctrl_i2c2: i2c2grp { ++ fsl,pins = < ++ MX6SL_PAD_I2C2_SCL__I2C2_SCL 0x4001b8b1 ++ MX6SL_PAD_I2C2_SDA__I2C2_SDA 0x4001b8b1 ++ >; ++ }; ++ ++ pinctrl_i2c3: i2c3grp { ++ fsl,pins = < ++ MX6SL_PAD_AUD_RXFS__I2C3_SCL 0x4001b8b1 ++ MX6SL_PAD_AUD_RXC__I2C3_SDA 0x4001b8b1 ++ >; ++ }; ++ ++ pinctrl_keys: keygrp { ++ fsl,pins = < ++ MX6SL_PAD_ECSPI1_MOSI__GPIO4_IO09 0x100b1 ++ MX6SL_PAD_KEY_COL0__GPIO3_IO24 0x100b1 ++ MX6SL_PAD_KEY_COL1__GPIO3_IO26 0x100b1 ++ MX6SL_PAD_KEY_COL2__GPIO3_IO28 0x100b1 ++ >; ++ }; ++ ++ pinctrl_uart1: uart1grp { ++ fsl,pins = < ++ MX6SL_PAD_UART1_RXD__UART1_RX_DATA 0x1b0b1 ++ MX6SL_PAD_UART1_TXD__UART1_TX_DATA 0x1b0b1 ++ >; ++ }; ++ ++ pinctrl_usbotg1: usbotg1grp { ++ fsl,pins = < ++ MX6SL_PAD_EPDC_PWRCOM__USB_OTG1_ID 0x17059 ++ >; ++ }; ++ ++ pinctrl_usdhc1: usdhc1grp { ++ fsl,pins = < ++ MX6SL_PAD_SD1_CMD__SD1_CMD PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD1_CLK__SD1_CLK PAD_CTL_USDHC_CLK_DEFAULT ++ MX6SL_PAD_SD1_DAT0__SD1_DATA0 PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD1_DAT1__SD1_DATA1 PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD1_DAT2__SD1_DATA2 PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD1_DAT3__SD1_DATA3 PAD_CTL_USDHC_DEFAULT ++ >; ++ }; ++ ++ pinctrl_usdhc1_100mhz: usdhc1grp100mhz { ++ fsl,pins = < ++ MX6SL_PAD_SD1_CMD__SD1_CMD PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD1_CLK__SD1_CLK PAD_CTL_USDHC_CLK_100MHZ ++ MX6SL_PAD_SD1_DAT0__SD1_DATA0 PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD1_DAT1__SD1_DATA1 PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD1_DAT2__SD1_DATA2 PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD1_DAT3__SD1_DATA3 PAD_CTL_USDHC_100MHZ ++ >; ++ }; ++ ++ pinctrl_usdhc1_200mhz: usdhc1grp200mhz { ++ fsl,pins = < ++ MX6SL_PAD_SD1_CMD__SD1_CMD PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD1_CLK__SD1_CLK PAD_CTL_USDHC_CLK_200MHZ ++ MX6SL_PAD_SD1_DAT0__SD1_DATA0 PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD1_DAT1__SD1_DATA1 PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD1_DAT2__SD1_DATA2 PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD1_DAT3__SD1_DATA3 PAD_CTL_USDHC_200MHZ ++ >; ++ }; ++ ++ pinctrl_usdhc2: usdhc2grp { ++ fsl,pins = < ++ MX6SL_PAD_SD2_CMD__SD2_CMD PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD2_CLK__SD2_CLK PAD_CTL_USDHC_CLK_DEFAULT ++ MX6SL_PAD_SD2_DAT0__SD2_DATA0 PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD2_DAT1__SD2_DATA1 PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD2_DAT2__SD2_DATA2 PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD2_DAT3__SD2_DATA3 PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD2_DAT4__SD2_DATA4 PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD2_DAT5__SD2_DATA5 PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD2_DAT6__SD2_DATA6 PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD2_DAT7__SD2_DATA7 PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD2_RST__SD2_RESET PAD_CTL_USDHC_CLK_DEFAULT ++ >; ++ }; ++ ++ pinctrl_usdhc2_100mhz: usdhc2grp100mhz { ++ fsl,pins = < ++ MX6SL_PAD_SD2_CMD__SD2_CMD PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD2_CLK__SD2_CLK PAD_CTL_USDHC_CLK_100MHZ ++ MX6SL_PAD_SD2_DAT0__SD2_DATA0 PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD2_DAT1__SD2_DATA1 PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD2_DAT2__SD2_DATA2 PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD2_DAT3__SD2_DATA3 PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD2_DAT4__SD2_DATA4 PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD2_DAT5__SD2_DATA5 PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD2_DAT6__SD2_DATA6 PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD2_DAT7__SD2_DATA7 PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD2_RST__SD2_RESET PAD_CTL_USDHC_CLK_DEFAULT ++ >; ++ }; ++ ++ pinctrl_usdhc2_200mhz: usdhc2grp200mhz { ++ fsl,pins = < ++ MX6SL_PAD_SD2_CMD__SD2_CMD PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD2_CLK__SD2_CLK PAD_CTL_USDHC_CLK_200MHZ ++ MX6SL_PAD_SD2_DAT0__SD2_DATA0 PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD2_DAT1__SD2_DATA1 PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD2_DAT2__SD2_DATA2 PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD2_DAT3__SD2_DATA3 PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD2_DAT4__SD2_DATA4 PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD2_DAT5__SD2_DATA5 PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD2_DAT6__SD2_DATA6 PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD2_DAT7__SD2_DATA7 PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD2_RST__SD2_RESET PAD_CTL_USDHC_CLK_DEFAULT ++ >; ++ }; ++ ++ pinctrl_usdhc3: usdhc3grp { ++ fsl,pins = < ++ MX6SL_PAD_SD3_CMD__SD3_CMD PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD3_CLK__SD3_CLK PAD_CTL_USDHC_CLK_DEFAULT ++ MX6SL_PAD_SD3_DAT0__SD3_DATA0 PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD3_DAT1__SD3_DATA1 PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD3_DAT2__SD3_DATA2 PAD_CTL_USDHC_DEFAULT ++ MX6SL_PAD_SD3_DAT3__SD3_DATA3 PAD_CTL_USDHC_DEFAULT ++ >; ++ }; ++ ++ pinctrl_usdhc3_100mhz: usdhc3grp100mhz { ++ fsl,pins = < ++ MX6SL_PAD_SD3_CMD__SD3_CMD PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD3_CLK__SD3_CLK PAD_CTL_USDHC_CLK_100MHZ ++ MX6SL_PAD_SD3_DAT0__SD3_DATA0 PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD3_DAT1__SD3_DATA1 PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD3_DAT2__SD3_DATA2 PAD_CTL_USDHC_100MHZ ++ MX6SL_PAD_SD3_DAT3__SD3_DATA3 PAD_CTL_USDHC_100MHZ ++ >; ++ }; ++ ++ pinctrl_usdhc3_200mhz: usdhc3grp200mhz { ++ fsl,pins = < ++ MX6SL_PAD_SD3_CMD__SD3_CMD PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD3_CLK__SD3_CLK PAD_CTL_USDHC_CLK_200MHZ ++ MX6SL_PAD_SD3_DAT0__SD3_DATA0 PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD3_DAT1__SD3_DATA1 PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD3_DAT2__SD3_DATA2 PAD_CTL_USDHC_200MHZ ++ MX6SL_PAD_SD3_DAT3__SD3_DATA3 PAD_CTL_USDHC_200MHZ ++ >; ++ }; ++ }; ++}; ++ ++&pxp { ++ status = "okay"; ++}; ++ ++&snvs_poweroff { ++ status = "okay"; ++}; ++ ++&uart1 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_uart1>; ++ status = "okay"; ++}; ++ ++/*&usbmisc { ++ vbus-wakeup-supply = <®_usb_otg1_vbus>; ++};*/ + + &usbotg1 { +- vbus-supply = <®_usb_otg1_vbus>; ++ /*vbus-supply = <®_usb_otg1_vbus>;*/ ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_usbotg1>; ++ disable-over-current; ++ /* This kills the speed */ ++ imx-usb-charger-detection; ++ srp-disable; ++ hnp-disable; ++ adp-disable; ++ status = "okay"; + }; + ++&usbotg2 { ++ dr_mode = "host"; ++ disable-over-current; ++ srp-disable; ++ hnp-disable; ++ adp-disable; ++ status = "disabled"; ++}; ++ ++ ++&usbphy1 { ++ tx-d-cal = <0x5>; ++}; ++ ++&usbphy2 { ++ tx-d-cal = <0x5>; ++ status = "disabled"; ++}; ++ ++&usdhc1 { ++ pinctrl-names = "default", "state_100mhz", "state_200mhz"; ++ pinctrl-0 = <&pinctrl_usdhc1>; ++ pinctrl-1 = <&pinctrl_usdhc1_100mhz>; ++ pinctrl-2 = <&pinctrl_usdhc1_200mhz>; ++ bus-width = <4>; ++ cd-gpios = <&gpio4 7 GPIO_ACTIVE_LOW>; ++ disable-wp; ++ wp-controller; ++ keep-power-in-suspend; ++ enable-sdio-wakeup; ++ no-1-8-v; ++ status = "okay"; ++}; ++ ++&usdhc2 { ++ pinctrl-names = "default", "state_100mhz", "state_200mhz"; ++ pinctrl-0 = <&pinctrl_usdhc2>; ++ pinctrl-1 = <&pinctrl_usdhc2_100mhz>; ++ pinctrl-2 = <&pinctrl_usdhc2_200mhz>; ++ bus-width = <8>; ++ non-removable; ++ keep-power-in-suspend; ++ no-1-8-v; ++ disable-wp; ++ cap-mmc-highspeed; ++ status = "okay"; ++}; ++ ++&usdhc3 { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ pinctrl-names = "default", "state_100mhz", "state_200mhz"; ++ pinctrl-0 = <&pinctrl_usdhc3>; ++ pinctrl-1 = <&pinctrl_usdhc3_100mhz>; ++ pinctrl-2 = <&pinctrl_usdhc3_200mhz>; ++ mmc-pwrseq = <&wifi_pwrseq>; ++ bus-width = <4>; ++ enable-sdio-wakeup; ++ non-removable; ++ disable-wp; ++ no-1-8-v; ++ wifi-host; ++ keep-power-in-suspend; ++ status = "okay"; ++ ++ brcmf: bcrmf@1 { ++ reg = <1>; ++ compatible = "brcm,bcm4329-fmac"; ++ /*resets = <&wifi_reset>;*/ ++ }; ++}; diff --git a/user/listmonk/APKBUILD b/user/listmonk/APKBUILD new file mode 100644 index 0000000..00951f0 --- /dev/null +++ b/user/listmonk/APKBUILD @@ -0,0 +1,71 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=listmonk +pkgver=3.0.0 +pkgrel=0 +pkgdesc='Self-hosted newsletter and mailing list manager with a modern dashboard' +arch="all" +url=https://listmonk.app +license="AGPL3" +depends=" + libcap-setcap + postgresql + procps + " +makedepends="go npm nodejs yarn" +source=" + $pkgname-$pkgver.tar.gz::https://github.com/knadh/listmonk/archive/v$pkgver.tar.gz + listmonk.sh + listmonk.openrc + " +install="$pkgname.pre-install $pkgname.post-install $pkgname.post-upgrade" +subpackages="$pkgname-openrc" +pkgusers="listmonk" +pkggroups="listmonk" + +build() { + go build \ + -trimpath \ + -buildmode=pie \ + -mod=readonly \ + -modcacherw \ + -ldflags "-extldflags '$LDFLAGS' -X 'main.buildString=Alpine Linux v$pkgver-$pkgrel' -X 'main.versionString=v$pkgver'" \ + -o $pkgname \ + cmd/*.go + + ( + cd frontend + export YARN_CACHE_FOLDER="$srcdir/node_modules" + export VUE_APP_VERSION="v$pkgver" + yarn install --frozen-lockfile + yarn build + ) +} + +check() { + go test ./... +} + +package() { + install -Dm755 "$srcdir"/listmonk.sh "$pkgdir"/usr/bin/listmonk + install -Dm644 config.toml.sample "$pkgdir"/etc/listmonk/config.toml + install -Dm644 -t "$pkgdir"/usr/share/webapps/listmonk/ \ + schema.sql \ + queries.sql \ + config.toml.sample + install -Dm755 listmonk "$pkgdir"/usr/share/webapps/listmonk/ + install -Dm644 -t "$pkgdir"/usr/share/webapps/listmonk/frontend/dist/ \ + frontend/dist/static/favicon.png + cp -a frontend/dist/static "$pkgdir"/usr/share/webapps/listmonk/frontend/dist/static + cp -a frontend/dist/index.html "$pkgdir"/usr/share/webapps/listmonk/frontend/dist/index.html + cp -a static "$pkgdir"/usr/share/webapps/listmonk/ + cp -a i18n "$pkgdir"/usr/share/webapps/listmonk/ + install -Dm755 "$srcdir"/$pkgname.openrc \ + "$pkgdir"/etc/init.d/$pkgname + ln -s /etc/listmonk/config.toml "$pkgdir"/usr/share/webapps/listmonk/config.toml +} +sha512sums=" +afd0ea1d4d2b2753c3043526590cf09c45a541a2d818f5d1581644ffd10818326fd553a3b04bca59494860a7bb6e96364b08afd33d337a9fc5c71bedd1a5ee6c listmonk-3.0.0.tar.gz +939450af4b23708e3d23a5a88fad4c24b957090bdd21351a6dd520959e52e45e5fcac117a3eafa280d9506616dae39ad3943589571f008cac5abe1ffd8062424 listmonk.sh +8e9c0b1f335c295fb741418246eb17c7566e5e4200a284c6483433e8ddbf5250aa692435211cf062ad1dfcdce3fae9148def28f03f2492d33fe5e66cbeebd4bd listmonk.openrc +" diff --git a/user/listmonk/listmonk.openrc b/user/listmonk/listmonk.openrc new file mode 100644 index 0000000..e2ccb5b --- /dev/null +++ b/user/listmonk/listmonk.openrc @@ -0,0 +1,29 @@ +#!/sbin/openrc-run + +name="$RC_SVCNAME" +cfgfile="/etc/conf.d/$RC_SVCNAME.conf" +pidfile="/run/$RC_SVCNAME.pid" +working_directory="/usr/share/webapps/listmonk" +command="/usr/share/webapps/listmonk/listmonk" +command_user="listmonk" +command_group="listmonk" +start_stop_daemon_args="" +command_background="yes" +output_log="/var/log/listmonk/$RC_SVCNAME.log" +error_log="/var/log/listmonk/$RC_SVCNAME.err" + +depend() { + need postgresql +} + +start_pre() { + cd "$working_directory" + checkpath --directory --owner $command_user:$command_group --mode 0775 \ + /var/log/listmonk \ + /var/lib/listmonk +} + +stop_pre() { + ebegin "Killing child processes" + kill $(ps -o pid= --ppid $(cat $pidfile)) || true +} diff --git a/user/listmonk/listmonk.post-install b/user/listmonk/listmonk.post-install new file mode 100644 index 0000000..fe3cc8d --- /dev/null +++ b/user/listmonk/listmonk.post-install @@ -0,0 +1,27 @@ +#!/bin/sh +set -eu + +setcap 'cap_net_bind_service=+ep' /usr/share/webapps/listmonk/listmonk + +if [ "${0##*.}" = 'post-upgrade' ]; then + cat >&2 <<-EOF + * + * To finish Listmonk upgrade run: + * + * listmonk --upgrade + * + EOF +else + cat >&2 <<-EOF + * + * 1. Adjust settings in /etc/listmonk/config.toml. + * + * 2. Create database for Listmonk: + * + * psql -c "CREATE ROLE listmonk PASSWORD 'top-secret' INHERIT LOGIN;" + * psql -c "CREATE DATABASE listmonk OWNER listmonk ENCODING 'UTF-8';" + * + * 3. Run "listmonk --install" + * + EOF +fi diff --git a/user/listmonk/listmonk.post-upgrade b/user/listmonk/listmonk.post-upgrade new file mode 120000 index 0000000..0b729b1 --- /dev/null +++ b/user/listmonk/listmonk.post-upgrade @@ -0,0 +1 @@ +listmonk.post-install \ No newline at end of file diff --git a/user/listmonk/listmonk.pre-install b/user/listmonk/listmonk.pre-install new file mode 100644 index 0000000..71eb3a0 --- /dev/null +++ b/user/listmonk/listmonk.pre-install @@ -0,0 +1,21 @@ +#!/bin/sh +# It's very important to set user/group correctly. + +listmonk_dir='/var/lib/listmonk' + +if ! getent group listmonk 1>/dev/null; then + echo '* Creating group listmonk' 1>&2 + + addgroup -S listmonk +fi + +if ! id listmonk 2>/dev/null 1>&2; then + echo '* Creating user listmonk' 1>&2 + + adduser -DHS -G listmonk -h "$listmonk_dir" -s /bin/sh \ + -g "added by apk for listmonk" listmonk + passwd -u listmonk 1>/dev/null # unlock +fi + + +exit 0 diff --git a/user/listmonk/listmonk.sh b/user/listmonk/listmonk.sh new file mode 100644 index 0000000..d89ca52 --- /dev/null +++ b/user/listmonk/listmonk.sh @@ -0,0 +1,12 @@ + +#!/bin/sh + +BUNDLE_DIR='/usr/share/webapps/listmonk' + +cd $BUNDLE_DIR + +if [ "$(id -un)" != 'listmonk' ]; then + exec su listmonk -c '"$0" "$@"' -- ./listmonk "$@" +else + exec ./listmonk "$@" +fi diff --git a/user/loomio/APKBUILD b/user/loomio/APKBUILD new file mode 100644 index 0000000..38eb631 --- /dev/null +++ b/user/loomio/APKBUILD @@ -0,0 +1,196 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Jakub Jirutka +# Contributor: Antoine Martin (ayakael) +pkgname=loomio +pkgver=2.21.4 +_gittag=v$pkgver +pkgrel=0 +pkgdesc="A collaborative decision making tool" +url="https://github.com/loomio/loomio" +arch="x86_64" +license="MIT" +depends=" + postgresql + postgresql-contrib + python3 + redis + ruby3.2 + ruby3.2-bundler + ruby3.2-grpc + vips + npm + procps-ng + " +makedepends=" + cmd:chrpath + ruby3.2-dev + nodejs + openssl-dev + readline-dev + zlib-dev + libpq-dev + libffi-dev + imagemagick-dev + " +pkgusers="loomio" +pkggroups="loomio www-data" +install="$pkgname.pre-install $pkgname.post-install $pkgname.post-upgrade" +subpackages="$pkgname-openrc" +source=" + $pkgname-$pkgver.tar.gz::https://github.com/loomio/loomio/archive/refs/tags/v$pkgver.tar.gz + bin-wrapper.in + loomio.confd + loomio.logrotate + loomio.sidekiq.initd + loomio.vue.initd + loomio.initd + " +_prefix="usr/lib/webapps/loomio" + +export BUNDLE_DEPLOYMENT=true +export BUNDLE_FORCE_RUBY_PLATFORM=true +export BUNDLE_FROZEN=true +export BUNDLE_JOBS=${JOBS:-2} + +prepare() { + local sysgemdir=$(ruby -e 'puts Gem.default_dir') + + default_prepare + + # Allow use of any bundler + sed -i -e '/BUNDLED/,+1d' Gemfile.lock + + # Allow use of any platform + sed -i -e 's/PLATFORMS/PLATFORMS\n ruby/' Gemfile.lock + + # Some gems are broken, so we copy our fixed version + # instead of installing it from RubyGems using Bundler. + mkdir -p vendor/gems/grpc/src/ruby/lib/grpc + cp -r "$sysgemdir"/gems/grpc-*/* vendor/gems/grpc/ + cp "$sysgemdir"/specifications/grpc-*.gemspec \ + vendor/gems/grpc/grpc.gemspec + cp "$sysgemdir"/extensions/*/*/grpc-*/grpc/*.so \ + vendor/gems/grpc/src/ruby/lib/grpc/ +} + +build() { + local bundle_without='exclude development test' + + bundle config --local build.ffi --enable-system-libffi + bundle config --local build.vips --enable-system-libraries + bundle config --local build.nokogiri --use-system-libraries \ + --with-xml2-include=/usr/include/libxml2 \ + --with-xslt-include=/usr/include/libxslt + bundle config --local build.google-protobuf '-- --with-cflags=-D__va_copy=va_copy' + + msg "Installing Ruby gems..." + bundle config --local without "$bundle_without" + bundle config --local path "vendor/bundle" + + bundle install --no-cache + + msg "Precompiling static assets..." + bundle exec bootsnap precompile --gemfile app/ lib/ + + # Create executables in bin/*. + # See also https://github.com/bundler/bundler/issues/6149. + bundle binstubs --force bundler puma sidekiq + + # Remove faulty RPATH. + chrpath -d vendor/bundle/ruby/*/gems/*/lib/nokogiri/*/nokogiri.so + + # cp grpc so + cp vendor/gems/grpc/src/ruby/lib/grpc/grpc_c.so vendor/bundle/ruby/*/gems/grpc*/src/ruby/lib/grpc/. + rm -R vendor/bundle/ruby/*/gems/grpc*/src/ruby/lib/grpc/3* vendor/bundle/ruby/*/gems/grpc*/src/ruby/lib/grpc/2* + + msg "Installing npm modules..." + cd vue + # force as vite-plugin-yaml hasn't updated their peerDependencies list yet + npm ci --force + npm run build +} + +package() { + local destdir="$pkgdir/$_prefix" + local datadir="$pkgdir/var/lib/loomio" + local file dest + + # Make directories + install -dm 755 \ + "$(dirname $destdir)" \ + "$datadir" + + mkdir -p "$(dirname $destdir)" + cp -R "$builddir" "$destdir" + + cd "$destdir"/vendor/bundle/ruby/*/ + + # Remove tests, documentations and other useless files. + find gems/ \( -name 'doc' \ + -o -name 'spec' \ + -o -name 'test' \) \ + -type d -maxdepth 2 -exec rm -fr "{}" + + find gems/ \( -name 'README*' \ + -o -name 'CHANGELOG*' \ + -o -name 'CONTRIBUT*' \ + -o -name '*LICENSE*' \ + -o -name 'Rakefile' \ + -o -name '.*' \) \ + -type f -delete + + # Remove build logs and cache. + rm -rf build_info/ cache/ + find extensions/ \( -name gem_make.out -o -name mkmf.log \) -delete + + cd "$destdir" + + # Install and symlink config files. + for file in database.yml.postgresql puma.rb sidekiq.yml; do + dest="$(basename "${file/.postgresql/}")" + install -m640 -g loomio -D config/$file "$pkgdir"/etc/loomio/$dest + ln -sf /etc/loomio/$dest "$pkgdir"/$_prefix/config/${file/.postgrewsql/} + done + + # This file will be generated by the post-install script, just prepare symlink. + ln -sf /etc/loomio/secrets.yml config/secrets.yml + # These shouldn't be necessary, they are all configurable, but OmniBus + + cat > "$datadir"/.profile <<-EOF + export RAILS_ENV=production + export NODE_ENV=production + export EXECJS_RUNTIME=Disabled + EOF + + # Install wrapper scripts to /usr/bin. + local name; for name in rake rails; do + sed "s/__COMMAND__/$name/g" "$srcdir"/bin-wrapper.in \ + > "$builddir"/loomio-$name + install -m755 -D "$builddir"/loomio-$name "$pkgdir"/usr/bin/loomio-$name + done + + for file in $pkgname $pkgname.sidekiq $pkgname.vue; do + install -m755 -D "$srcdir"/$file.initd "$pkgdir"/etc/init.d/$file + done + + install -m644 -D "$srcdir"/loomio.confd \ + "$pkgdir"/etc/conf.d/loomio + + install -m644 -D "$srcdir"/loomio.logrotate \ + "$pkgdir"/etc/logrotate.d/loomio +} + +assets() { + depends="" + + amove $_prefix/public/assets +} + +sha512sums=" +72a1238c1eaa3b963bd20a09d4fc2e52798264779bdf06d3f32891f2880d246059c77381329d1274bfa5979a35740017f0ced324f88b205369e77335b403ffba loomio-2.21.4.tar.gz +6cd4bb030660a9f4697eeb7c6de3f7509558aab3651e68218583dfeea56634f3b9f58acb50c7c9a4188a38c19434a815dd6c347e30207c4c0ae028c8dcb6ccaf bin-wrapper.in +0f1c91fbd4b8099f0a115705d5af799e4492fa2a0fd54175f3bfbfb5be1122bd7fd73a7709695c7caf2dcc667f3b8715051c24f424472e1115753e43a38fdf50 loomio.confd +1ecb0717cd5f04b894467b21d226b98d8f83b8f62afbf8da7edd57973aeabb13d121e9061cc48aec7572b1c710e82c8b44a1cedc0a924efd4bc4a124b3afe9a8 loomio.logrotate +c5dae2b6f9a23853c3c7ac068d97a7b0269b1775f6e0169c3d8999ec67c2baf3545515ea21037e882d900b15a7abf9061dd5a584bdc82c347b54d8c134f6d7a4 loomio.sidekiq.initd +f774954d8b06aacab27af9593b1b12fbe18ec2d0593dd4f82e4d3dfbc7e325fb1a423347fd974a2ec6665776a6cfe85f255f4fd7493c97eb840f34eb7fbdb329 loomio.vue.initd +645637c4112ec91ec2ea6022713e77a8ee76c0f0a81f9adf1f9210b52a578e94b5b02f0b6244b173905f580f72dc362b5434c714aae11e3619f73af223891bb8 loomio.initd +" diff --git a/user/loomio/bin-wrapper.in b/user/loomio/bin-wrapper.in new file mode 100644 index 0000000..fad9737 --- /dev/null +++ b/user/loomio/bin-wrapper.in @@ -0,0 +1,15 @@ +#!/bin/sh + +BUNDLE_DIR='/usr/lib/webapps/loomio' +export RAILS_ENV='production' +export NODE_ENV='production' +export EXECJS_RUNTIME='Disabled' + +cd $BUNDLE_DIR +install -m 700 -o loomio -g loomio -d "$(readlink ./tmp)" + +if [ "$(id -un)" != 'loomio' ]; then + exec su loomio -c '"$0" "$@"' -- bin/__COMMAND__ "$@" +else + exec bin/__COMMAND__ "$@" +fi diff --git a/user/loomio/loomio.confd b/user/loomio/loomio.confd new file mode 100644 index 0000000..890ad21 --- /dev/null +++ b/user/loomio/loomio.confd @@ -0,0 +1,32 @@ +# Configuration file for /etc/init.d/loomio and +# /etc/init.d/loomio.{vue,sidekiq} + +# Specify how many processes to create using sidekiq-cluster and which queue +# they should handle. Each whitespace-separated item equates to one additional +# Sidekiq process, and comma-separated values in each item determine the queues +# it works on. The special queue name "*" means all queues. +# Example: "* gitlab_shell process_commit,post_receive" +# See https://docs.gitlab.com/ee/administration/sidekiq/extra_sidekiq_processes.html. +#sidekiq_queue_groups="*" + +# Maximum threads to use with Sidekiq (default: 50, 0 to disable). +#sidekiq_max_concurrency= + +# Minimum threads to use with Sidekiq (default: 0). +#sidekiq_min_concurrency= + +# The number of seconds to wait between worker checks. +#sidekiq_interval= + +# Graceful timeout for all running processes. +#sidekiq_shutdown_timeout= + +# Run workers for all queues in sidekiq_queues.yml except the given ones. +#sidekiq_negate=no + +# Run workers based on the provided selector. +#sidekiq_queue_selector=no + +# Memory limit (in MiB) for the Sidekiq process. If the RSS (Resident Set Size) +# of the Sidekiq process exceeds this limit, a delayed shutdown is triggered. +#sidekiq_memkiller_max_rss=2000 diff --git a/user/loomio/loomio.initd b/user/loomio/loomio.initd new file mode 100644 index 0000000..864d102 --- /dev/null +++ b/user/loomio/loomio.initd @@ -0,0 +1,39 @@ +#!/sbin/openrc-run + +name="Loomio" +description="Meta script for starting/stopping all the Loomio components" +subservices="loomio.sidekiq loomio.vue" + +depend() { + use net +} + +start() { + local ret=0 + + ebegin "Starting all Loomio components" + local svc; for svc in $subservices; do + service $svc start || ret=1 + done + eend $ret +} + +stop() { + local ret=0 + + ebegin "Stopping all Loomio components" + local svc; for svc in $subservices; do + service $svc stop || ret=1 + done + eend $ret +} + +status() { + local ret=0 + + local svc; for svc in $subservices; do + echo "$svc:" + service $svc status || ret=1 + done + eend $ret +} diff --git a/user/loomio/loomio.logrotate b/user/loomio/loomio.logrotate new file mode 100644 index 0000000..f7fd264 --- /dev/null +++ b/user/loomio/loomio.logrotate @@ -0,0 +1,11 @@ +/var/log/loomio/*.log { + compress + copytruncate + delaycompress + maxsize 10M + minsize 1M + missingok + sharedscripts + rotate 10 + weekly +} diff --git a/user/loomio/loomio.post-install b/user/loomio/loomio.post-install new file mode 100755 index 0000000..2e2fb10 --- /dev/null +++ b/user/loomio/loomio.post-install @@ -0,0 +1,32 @@ +#!/bin/sh +set -eu + +group=loomio +config_file='/etc/loomio/config.yml' + +#if [ $(grep '@@SECRET_KEY@@' "$config_file") ]; then +# echo "* Generating random secret in $config_file" >&2 + +# secret_key="$(pwgen -s 50 1)" +# sed -i "s|@@SECRET_KEY@@|$secret_key|" "$config_file" +#fi + +if [ "${0##*.}" = 'post-upgrade' ]; then + cat >&2 <<-EOF + * + * To finish Loomio upgrade run: + * + * + EOF +else + cat >&2 <<-EOF + * + * 1. Adjust settings in /etc/loomio/config.yml. + * + * 2. Create database for loomio: + * + * psql -c "CREATE ROLE loomio PASSWORD 'top-secret' INHERIT LOGIN;" + * psql -c "CREATE DATABASE loomio OWNER loomio ENCODING 'UTF-8';" + * + EOF +fi diff --git a/user/loomio/loomio.post-upgrade b/user/loomio/loomio.post-upgrade new file mode 120000 index 0000000..ec5bf9b --- /dev/null +++ b/user/loomio/loomio.post-upgrade @@ -0,0 +1 @@ +loomio.post-install \ No newline at end of file diff --git a/user/loomio/loomio.pre-install b/user/loomio/loomio.pre-install new file mode 100644 index 0000000..612ce4c --- /dev/null +++ b/user/loomio/loomio.pre-install @@ -0,0 +1,26 @@ +#!/bin/sh +# It's very important to set user/group correctly. + +loomio_dir='/var/lib/loomio' + +if ! getent group loomio 1>/dev/null; then + echo '* Creating group loomio' 1>&2 + + addgroup -S loomio +fi + +if ! id loomio 2>/dev/null 1>&2; then + echo '* Creating user loomio' 1>&2 + + adduser -DHS -G loomio -h "$loomio_dir" -s /bin/sh \ + -g "added by apk for loomio" loomio + passwd -u loomio 1>/dev/null # unlock +fi + +if ! id -Gn loomio | grep -Fq redis; then + echo '* Adding user loomio to group www-data' 1>&2 + + addgroup loomio www-data +fi + +exit 0 diff --git a/user/loomio/loomio.sidekiq.initd b/user/loomio/loomio.sidekiq.initd new file mode 100644 index 0000000..fd3dd2d --- /dev/null +++ b/user/loomio/loomio.sidekiq.initd @@ -0,0 +1,32 @@ +#!/sbin/openrc-run + +name="Loomio background workers Service" +root="/usr/share/webapps/loomio" +pidfile="/run/loomio-sidekiq.pid" +logfile="/var/log/loomio/sidekiq.log" + +depend() { + use net + need redis +} + +start() { + ebegin "Starting Loomio background workers" + + cd $root + + start-stop-daemon --start --background \ + --chdir "${root}" \ + --user="loomio" \ + --make-pidfile --pidfile="${pidfile}" \ + -1 "${logfile}" -2 "${logfile}" \ + --exec /usr/bin/env -- RAILS_ENV=production bundle exec rails s + eend $? +} + +stop() { + ebegin "Stopping Loomio background workers" + start-stop-daemon --stop \ + --pidfile=${pidfile} \ + eend $? +} diff --git a/user/loomio/loomio.vue.initd b/user/loomio/loomio.vue.initd new file mode 100644 index 0000000..8fffb40 --- /dev/null +++ b/user/loomio/loomio.vue.initd @@ -0,0 +1,31 @@ +#!/sbin/openrc-run + +name="$RC_SVCNAME" +cfgfile="/etc/conf.d/$RC_SVCNAME.conf" +pidfile="/run/$RC_SVCNAME.pid" +working_directory="/usr/share/bundles/loomio" +command="npm" +command_args="run serve" +command_user="loomio" +command_group="loomio" +start_stop_daemon_args="" +command_background="yes" +output_log="/var/log/loomio/$RC_SVCNAME.log" +error_log="/var/log/loomio/$RC_SVCNAME.err" + +depend() { + need redis + need postgresql +} + +start_pre() { + cd "$working_directory" + checkpath --directory --owner $command_user:$command_group --mode 0775 \ + /var/log/loomio \ + /var/lib/loomio +} + +stop_pre() { + ebegin "Killing child processes" + kill $(ps -o pid= --ppid $(cat $pidfile)) || true +} diff --git a/user/mastodon/APKBUILD b/user/mastodon/APKBUILD new file mode 100644 index 0000000..29f1f81 --- /dev/null +++ b/user/mastodon/APKBUILD @@ -0,0 +1,202 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=mastodon +_pkgname=$pkgname +pkgver=4.2.8 +_gittag=v$pkgver +pkgrel=1 +pkgdesc="Self-hosted social media and network server based on ActivityPub and OStatus" +arch="x86_64" +url="https://github.com/mastodon/mastodon" +license="AGPL-3.0-only" +depends=" + $pkgname-assets=$pkgver-r$pkgrel + ffmpeg + file + gcompat + imagemagick + nodejs + npm + protobuf + py3-elasticsearch + redis + ruby3.2 + ruby3.2-bundler + yarn + " +makedepends=" + gnu-libiconv-dev + icu-dev + libffi-dev + libidn-dev + libxml2-dev + libxslt-dev + openssl-dev + postgresql-dev + protobuf-dev + ruby3.2-dev + yaml-dev + zlib-dev + " +install=" + $pkgname.pre-install + $pkgname.post-upgrade + $pkgname.post-install + " +source=" + mastodon-$_gittag.tar.gz::https://github.com/mastodon/mastodon/archive/$_gittag.tar.gz + mastodon.initd + mastodon.web.initd + mastodon.sidekiq.initd + mastodon.streaming.initd + mastodon.logrotate + bin-wrapper.in + " +subpackages="$pkgname-openrc $pkgname-assets::noarch" +options="!check" # No test suite + +_prefix="usr/lib/bundles/$_pkgname" + +export BUNDLE_DEPLOYMENT=true +export BUNDLE_FORCE_RUBY_PLATFORM=true +export BUNDLE_FROZEN=true +export BUNDLE_JOBS=${JOBS:-2} + +prepare() { + default_prepare + + # Allow use of any bundler + sed -i -e '/BUNDLED/,+1d' Gemfile.lock + + # Allow use of higher Node versions + sed -i 's/"node": .*"/"node": ">=14.15"/' package.json + + mkdir -p "$srcdir"/gem-cache +} + +build() { + local bundle_without='exclude development' + + msg "Installing Ruby gems..." + bundle config --local build.nokogiri --use-system-libraries \ + --with-xml2-include=/usr/include/libxml2 \ + --with-xslt-include=/usr/include/libxslt + bundle config --local build.ffi --enable-system-libffi + bundle config --local build.idn --enable-system-libidn + bundle config --local path "vendor/bundle" + bundle config --local set deployment 'false' + bundle config --local set without "$bundle_without" + + bundle install --no-cache -j"$(getconf _NPROCESSORS_ONLN)" + + msg "Installing npm modules..." + yarn install --production --frozen-lockfile + + ( + msg "Compiling assets..." + export NODE_ENV=production + export RAILS_ENV=production + export NODE_OPTIONS="--openssl-legacy-provider" + + OTP_SECRET=precompile_placeholder SECRET_KEY_BASE=precompile_placeholder bundle exec rails assets:precompile + ) + + msg "Cleaning assets gems..." + bundle config --local without "$bundle_without" + bundle clean + + # Create executables in bin/*. + # See also https://github.com/bundler/bundler/issues/6149. + bundle binstubs --force bundler puma sidekiq +} + +package() { + local destdir="$pkgdir"/$_prefix + local datadir="$pkgdir/var/lib/gitlab" + # directory creation + install -dm 755 \ + "$destdir" \ + "$datadir" \ + "$pkgdir"/etc/init.d + + + # Install application files. + rmdir "$destdir" + cp -a "$builddir" "$destdir" + + install -m755 -t "$destdir"/bin/ \ + bin/bundle \ + bin/rails \ + bin/rake \ + bin/sidekiq \ + bin/sidekiqmon \ + bin/tootctl \ + bin/puma + + cd "$destdir"/vendor/bundle/ruby/*/ + + # Remove tests, documentations and other useless files. + find gems/ \( -name 'doc' \ + -o -name 'spec' \ + -o -name 'test' \) \ + -type d -maxdepth 2 -exec rm -fr "{}" + + find gems/ \( -name 'README*' \ + -o -name 'CHANGELOG*' \ + -o -name 'CONTRIBUT*' \ + -o -name '*LICENSE*' \ + -o -name 'Rakefile' \ + -o -name '.*' \) \ + -type f -delete + + # Remove assets, they are already compiled. + rm -r gems/doorkeeper-*/app/assets + rm -r gems/pghero-*/app/assets + + # Remove build logs and cache. + rm -rf build_info/ cache/ + find extensions/ \( -name gem_make.out -o -name mkmf.log \) -delete + + cat > "$datadir"/.profile <<-EOF + export RAILS_ENV=production + export NODE_ENV=production + export EXECJS_RUNTIME=Disabled + EOF + + # Install wrapper scripts to /usr/bin. + local name; for name in rake rails tootctl; do + sed "s/__COMMAND__/$name/g" "$srcdir"/bin-wrapper.in \ + > "$builddir"/mastodon-$name + install -m755 -D "$builddir"/mastodon-$name "$pkgdir"/usr/bin/mastodon-$name + done + + # Put the config file in /etc and link to it + touch "$pkgdir"/etc/mastodon.conf + ln -s /etc/mastodon.conf "$destdir"/.env.production + ln -s /usr/bin/node "$destdir"/node + + for file in $_pkgname $_pkgname.sidekiq $_pkgname.web $_pkgname.streaming; do + install -m755 -D "$srcdir"/$file.initd "$pkgdir"/etc/init.d/$file + done + + # Removing all prebuilt artifacts + rm -R "$destdir"/node_modules/*/prebuilds 2>&1 || true + + install -m644 -D "$srcdir"/$_pkgname.logrotate \ + "$pkgdir"/etc/logrotate.d/$_pkgname +} + +assets() { + depends="" + + amove $_prefix/public/assets +} + +sha512sums=" +c48a04df9c59518f7325b8119bf943436e29ccbfaecff3f7b96162e77fa2012df3f5d4e92e209e233ca7c4646205f5e34bf5f7d22b973115b8e16b3b5ada1fb0 mastodon-v4.2.8.tar.gz +36604cd630f0f5b4d88b630b1512cd26e922f859e5d19cbb85106ff29fc9048d2349f926d5c4b6947c655f67e60ec33e2f524a8154405a4369f283e00be7cdce mastodon.initd +9e77061fbdebe90492398f8089a7d2612ff4b6e70b5462dd67330b66d9788cb0133eab38c372b1f27a7214aacdd9f7f70381d4ecc6e92c8c38d794404ae0f840 mastodon.web.initd +6dacafca86dd39f6a6efa773cfe35b4632098175605a7c64488027237b01028d9785e50a3a0532b88ebf8f857c9a594c7b68f9e577b46e95104e7cffde51ccf8 mastodon.sidekiq.initd +63b67ec16107e4d1747ae956cdd41edd03be71da1ed96d21a18710cbba69ce37c856f4abc080a61f172a10859d0b9a33ba9290fc69213e1bc15a1ce8f8d40108 mastodon.streaming.initd +83b3bae5b6fdb4d0dbc1cbe546c62c0aa77397b97d1a5d5377af032466677de188065b556710c0d96576bbae89cc76800f1ffb8cd718155eb2784da818f27619 mastodon.logrotate +dfd0e43ac6c28387bd4aa57fd98ae41aeb5a098b6deb3e44b89f07818e2470773b025364afee7ef6fd0f664cb86bbbbe8796c9f222f5436c256a787282fbe3e1 bin-wrapper.in +" diff --git a/user/mastodon/bin-wrapper.in b/user/mastodon/bin-wrapper.in new file mode 100644 index 0000000..eb1d637 --- /dev/null +++ b/user/mastodon/bin-wrapper.in @@ -0,0 +1,15 @@ + +#!/bin/sh + +BUNDLE_DIR='/usr/lib/bundles/mastodon' +export RAILS_ENV='production' +export NODE_ENV='production' +export EXECJS_RUNTIME='Disabled' + +cd $BUNDLE_DIR + +if [ "$(id -un)" != 'mastodon' ]; then + exec su mastodon -c '"$0" "$@"' -- bin/__COMMAND__ "$@" +else + exec bin/__COMMAND__ "$@" +fi diff --git a/user/mastodon/mastodon.initd b/user/mastodon/mastodon.initd new file mode 100644 index 0000000..6d9c704 --- /dev/null +++ b/user/mastodon/mastodon.initd @@ -0,0 +1,40 @@ +#!/sbin/openrc-run + +name="Mastodon" +description="Meta script for starting/stopping all the Mastodon components" + +subservices="mastodon.sidekiq mastodon.streaming mastodon.web" + +depend() { + use net +} + +start() { + local ret=0 + + ebegin "Starting all Mastodon components" + local svc; for svc in $subservices; do + service $svc start || ret=1 + done + eend $ret +} + +stop() { + local ret=0 + + ebegin "Stopping all Mastodon components" + local svc; for svc in $subservices; do + service $svc stop || ret=1 + done + eend $ret +} + +status() { + local ret=0 + + local svc; for svc in $subservices; do + echo "$svc:" + service $svc status || ret=1 + done + eend $ret +} diff --git a/user/mastodon/mastodon.logrotate b/user/mastodon/mastodon.logrotate new file mode 100644 index 0000000..cbfecfc --- /dev/null +++ b/user/mastodon/mastodon.logrotate @@ -0,0 +1,11 @@ +/var/log/mastodon/*.log { + compress + copytruncate + delaycompress + maxsize 10M + minsize 1M + missingok + sharedscripts + rotate 10 + weekly +} diff --git a/user/mastodon/mastodon.post-install b/user/mastodon/mastodon.post-install new file mode 100644 index 0000000..9387d45 --- /dev/null +++ b/user/mastodon/mastodon.post-install @@ -0,0 +1,27 @@ +#!/bin/sh +set -eu + +if [ "${0##*.}" = 'post-upgrade' ]; then + cat >&2 <<-EOF + * + * To finish Mastodon upgrade run: + * + * mastodon-rails db:migrate + * + EOF +else + cat >&2 <<-EOF + * + * 1. Adjust settings in /etc/mastodon.conf + * + * 2. Create database for Mastodon: + * + * psql -c "CREATE ROLE mastodon PASSWORD 'top-secret' INHERIT LOGIN;" + * psql -c "CREATE DATABASE mastodon OWNER mastodon ENCODING 'UTF-8';" + * psql -d mastodon -c "CREATE EXTENSION pg_trgm; CREATE EXTENSION btree_gist;" + * psql -c "ALTER DATABASE name OWNER TO new_owner;" + * + * 3. Run "mastodon-rake db:migrate" + * + EOF +fi diff --git a/user/mastodon/mastodon.post-upgrade b/user/mastodon/mastodon.post-upgrade new file mode 120000 index 0000000..0fcc8b2 --- /dev/null +++ b/user/mastodon/mastodon.post-upgrade @@ -0,0 +1 @@ +mastodon.post-install \ No newline at end of file diff --git a/user/mastodon/mastodon.pre-install b/user/mastodon/mastodon.pre-install new file mode 100644 index 0000000..c869177 --- /dev/null +++ b/user/mastodon/mastodon.pre-install @@ -0,0 +1,54 @@ +#!/bin/sh +# It's very important to set user/group correctly. + +mastodon_dir='/var/lib/mastodon' + +if ! getent group mastodon 1>/dev/null; then + echo '* Creating group mastodon' 1>&2 + + addgroup -S mastodon +fi + +if ! id mastodon 2>/dev/null 1>&2; then + echo '* Creating user mastodon' 1>&2 + + adduser -DHS -G mastodon -h "$mastodon_dir" -s /bin/sh \ + -g "added by apk for mastodon" mastodon + passwd -u mastodon 1>/dev/null # unlock +fi + +if ! id -Gn mastodon | grep -Fq redis; then + echo '* Adding user mastodon to group redis' 1>&2 + + addgroup mastodon redis +fi + +if [ "$(id -gn mastodon)" != 'mastodon' ]; then + cat >&2 <<-EOF + !! + !! User mastodon has primary group $(id -gn mastodon). We strongly recommend to change + !! mastodon's primary group to mastodon. + !! + EOF + + # Add it at least as a supplementary group. + adduser mastodon mastodon +fi + +user_home="$(getent passwd mastodon | cut -d: -f6)" + +if [ "$user_home" != "$mastodon_dir" ]; then + cat >&2 <<-EOF + !! + !! User mastodon has home directory in $user_home, but this package assumes + !! $mastodon_dir. Although it's possible to use a different directory, + !! it's really not easy. + !! + !! Please change mastodon's home directory to $mastodon_dir, or adjust settings + !! and move files yourself. Otherwise Mastodon will not work! + !! + EOF +fi + +exit 0 + diff --git a/user/mastodon/mastodon.sidekiq.initd b/user/mastodon/mastodon.sidekiq.initd new file mode 100644 index 0000000..f7d62b0 --- /dev/null +++ b/user/mastodon/mastodon.sidekiq.initd @@ -0,0 +1,32 @@ +#!/sbin/openrc-run + +name="Mastodon background workers Service" +root="/usr/share/webapps/mastodon" +pidfile="/run/mastodon-sidekiq.pid" +logfile="/var/log/mastodon/sidekiq.log" + +depend() { + use net + need redis +} + +start() { + ebegin "Starting Mastodon background workers" + + cd $root + + start-stop-daemon --start --background \ + --chdir "${root}" \ + --user="mastodon" \ + --make-pidfile --pidfile="${pidfile}" \ + -1 "${logfile}" -2 "${logfile}" \ + --exec /usr/bin/env -- RAILS_ENV=production DB_POOL=25 MALLOC_ARENA_MAX=2 bundle exec sidekiq -c 25 + eend $? +} + +stop() { + ebegin "Stopping Mastodon background workers" + start-stop-daemon --stop \ + --pidfile=${pidfile} \ + eend $? +} diff --git a/user/mastodon/mastodon.streaming.initd b/user/mastodon/mastodon.streaming.initd new file mode 100644 index 0000000..647f719 --- /dev/null +++ b/user/mastodon/mastodon.streaming.initd @@ -0,0 +1,33 @@ +#!/sbin/openrc-run + +name="Mastodon streaming API service" +root="/usr/share/webapps/mastodon" +pidfile="/run/mastodon-streaming.pid" +logfile="/var/log/mastodon/streaming.log" + +depend() { + use net +} + +start() { + ebegin "Starting Mastodon streaming API" + + cd $root + + start-stop-daemon --start \ + --background --quiet \ + --chdir "${root}" \ + --user="mastodon" \ + --make-pidfile --pidfile="${pidfile}" \ + --stdout "${logfile}" --stderr "${logfile}" \ + --exec /usr/bin/env -- NODE_ENV=production PORT=4000 /usr/bin/node ./streaming/index.js + eend $? +} + +stop() { + ebegin "Stopping Mastodon streaming API" + start-stop-daemon --stop \ + --pidfile="${pidfile}" \ + eend $? +} + diff --git a/user/mastodon/mastodon.web.initd b/user/mastodon/mastodon.web.initd new file mode 100644 index 0000000..1a82acb --- /dev/null +++ b/user/mastodon/mastodon.web.initd @@ -0,0 +1,29 @@ +#!/sbin/openrc-run + +name="Mastodon Web Service" +root="/usr/share/webapps/mastodon" +pidfile="/run/mastodon-web.pid" +logfile="/var/log/mastodon/web.log" + +depend() { + use net +} + +start() { + ebegin "Starting Mastodon web workers" + cd $root + start-stop-daemon --start --background \ + --chdir "${root}" \ + --user="mastodon" \ + --pidfile="${pidfile}" --make-pidfile \ + --stdout="${logfile}" --stderr="${logfile}" \ + --exec /usr/bin/env -- RAILS_ENV=production PORT=3000 bundle exec puma -C config/puma.rb + eend $? +} + +stop() { + ebegin "Stopping Mastodon web workers" + start-stop-daemon --stop \ + --pidfile=${pidfile} \ + eend $? +} diff --git a/user/mathjax2/APKBUILD b/user/mathjax2/APKBUILD new file mode 100644 index 0000000..bc78cb6 --- /dev/null +++ b/user/mathjax2/APKBUILD @@ -0,0 +1,38 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +pkgname=mathjax2 +pkgver=2.7.9 +pkgrel=0 +pkgdesc="An open source JavaScript display engine for mathematics that works in all modern browsers" +url="https://www.mathjax.org/" +arch=noarch +license="Apache-2.0" +source="$pkgname-$pkgver.tar.gz::https://github.com/mathjax/MathJax/archive/$pkgver.tar.gz" +builddir="$srcdir"/MathJax-$pkgver +options="!check" # No testsuite + +build() { + # Remove unneeded stuff, see https://github.com/mathjax/MathJax-docs/wiki/Guide%3A-reducing-size-of-a-mathjax-installation + for i in docs test unpacked fonts/HTML-CSS/TeX/png; do + rm -r $i + done + for _format in eot otf svg ; do + find . -type d -name "$_format" -prune -exec rm -rf {} \; + done +} + +package() { + mkdir -p \ + "$pkgdir"/usr/share/fonts \ + "$pkgdir"/usr/share/licenses/mathjax2 + + cp -a "$builddir" "$pkgdir"/usr/share/mathjax2 + + mv "$pkgdir"/usr/share/mathjax2/fonts "$pkgdir"/usr/share/fonts/mathjax2 + ln -s /usr/share/fonts/mathjax2 "$pkgdir"/usr/share/mathjax2/fonts + mv "$pkgdir"/usr/share/mathjax2/LICENSE "$pkgdir"/usr/share/licenses/mathjax2/ +} +sha512sums=" +ac7b2dfc6064148e941e5ee05361467514e5f28449dbb697ff1df556968ccb71f501c4021ade285cbbb995983513669c14d9c06886a7b83a5c75fa30504fa8ab mathjax2-2.7.9.tar.gz +" diff --git a/unmaintained/paperless-ngx/1746_add-OpenID-Connect-SSO-support-via-django-allauth.patch b/user/paperless-ngx/1746_add-OpenID-Connect-SSO-support-via-django-allauth.patch similarity index 100% rename from unmaintained/paperless-ngx/1746_add-OpenID-Connect-SSO-support-via-django-allauth.patch rename to user/paperless-ngx/1746_add-OpenID-Connect-SSO-support-via-django-allauth.patch diff --git a/unmaintained/paperless-ngx/APKBUILD b/user/paperless-ngx/APKBUILD similarity index 99% rename from unmaintained/paperless-ngx/APKBUILD rename to user/paperless-ngx/APKBUILD index 01ea699..3e017fb 100644 --- a/unmaintained/paperless-ngx/APKBUILD +++ b/user/paperless-ngx/APKBUILD @@ -8,7 +8,6 @@ url="https://github.com/paperless-ngx/paperless-ngx" license="GPL-3.0-only" # s390x: ocrmypdf py3-joblib py3-scikit-learn py3-watchfiles # armhf / ppc64le: py3-uvloop -# all: uvicorn doesn't yet work with websockets 14 arch="noarch !s390x !armhf !ppc64le" install="$pkgname.post-install $pkgname.post-upgrade $pkgname.pre-install" depends=" diff --git a/unmaintained/paperless-ngx/paperless-consumer.openrc b/user/paperless-ngx/paperless-consumer.openrc similarity index 100% rename from unmaintained/paperless-ngx/paperless-consumer.openrc rename to user/paperless-ngx/paperless-consumer.openrc diff --git a/unmaintained/paperless-ngx/paperless-ngx.post-install b/user/paperless-ngx/paperless-ngx.post-install similarity index 100% rename from unmaintained/paperless-ngx/paperless-ngx.post-install rename to user/paperless-ngx/paperless-ngx.post-install diff --git a/unmaintained/paperless-ngx/paperless-ngx.post-upgrade b/user/paperless-ngx/paperless-ngx.post-upgrade similarity index 100% rename from unmaintained/paperless-ngx/paperless-ngx.post-upgrade rename to user/paperless-ngx/paperless-ngx.post-upgrade diff --git a/unmaintained/paperless-ngx/paperless-ngx.pre-install b/user/paperless-ngx/paperless-ngx.pre-install similarity index 100% rename from unmaintained/paperless-ngx/paperless-ngx.pre-install rename to user/paperless-ngx/paperless-ngx.pre-install diff --git a/unmaintained/paperless-ngx/paperless-scheduler.openrc b/user/paperless-ngx/paperless-scheduler.openrc similarity index 100% rename from unmaintained/paperless-ngx/paperless-scheduler.openrc rename to user/paperless-ngx/paperless-scheduler.openrc diff --git a/unmaintained/paperless-ngx/paperless-task-queue.openrc b/user/paperless-ngx/paperless-task-queue.openrc similarity index 100% rename from unmaintained/paperless-ngx/paperless-task-queue.openrc rename to user/paperless-ngx/paperless-task-queue.openrc diff --git a/unmaintained/paperless-ngx/paperless-webserver.openrc b/user/paperless-ngx/paperless-webserver.openrc similarity index 100% rename from unmaintained/paperless-ngx/paperless-webserver.openrc rename to user/paperless-ngx/paperless-webserver.openrc diff --git a/unmaintained/paperless-ngx/paperless.conf b/user/paperless-ngx/paperless.conf similarity index 100% rename from unmaintained/paperless-ngx/paperless.conf rename to user/paperless-ngx/paperless.conf diff --git a/user/papermc-plugin-essentialsx/APKBUILD b/user/papermc-plugin-essentialsx/APKBUILD deleted file mode 100644 index 51459a5..0000000 --- a/user/papermc-plugin-essentialsx/APKBUILD +++ /dev/null @@ -1,81 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=papermc-plugin-essentialsx -pkgver=2.21.1 -_gittag=$pkgver -pkgrel=0 -pkgdesc="EssentialsX is the essential plugin suite for Minecraft servers, with over 130 commands for servers of all size and scale." -# blocked by luckperms -# armv7: blocked my openjdk21-jdk -#arch='noarch !armv7' -url="https://essentialsx.net/" -license="GPL-3.0" -depends=" - papermc>=1.8.8 - papermc-plugin-luckperms - papermc-plugin-vault -" -makedepends="openjdk21-jdk" -source="$pkgname-$_gittag.tar.gz::https://github.com/EssentialsX/Essentials/archive/$_gittag.tar.gz" -builddir="$srcdir"/Essentials-$_gittag - -subpackages="$pkgname-chat $pkgname-spawn $pkgname-antibuild $pkgname-discord $pkgname-geo $pkgname-protect $pkgname-xmpp" - -build() { - ./gradlew build -} - -check() { - ./gradlew test -} - -package() { - install -Dm644 "$builddir"/jars/EssentialsX-*.jar "$pkgdir/var/lib/papermc/plugins/Essentials.jar" -} - -chat() { - pkgdesc="Chat formatting, local chat" - depends="$pkgname" - install -Dm644 "$builddir"/jars/EssentialsXChat-*.jar "$subpkgdir/var/lib/papermc/plugins/EssentialsChat.jar" -} - -spawn() { - pkgdesc="Spawnpoint control, per-player spawns" - depends="$pkgname" - install -Dm644 "$builddir"/jars/EssentialsXSpawn-*.jar "$subpkgdir/var/lib/papermc/plugins/EssentialsSpawn.jar" -} - -antibuild() { - pkgdesc="Simple permissions-based building control" - depends="$pkgname" - install -Dm644 "$builddir"/jars/EssentialsXAntiBuild-*.jar "$subpkgdir/var/lib/papermc/plugins/EssentialsAntiBuild.jar" -} - -discord() { - pkgdesc="Lightweight chat, messaging and command integration with Discord" - depends="$pkgname" - install -Dm644 "$builddir"/jars/EssentialsXDiscord-*.jar "$subpkgdir/var/lib/papermc/plugins/EssentialsDiscord.jar" - install -Dm644 "$builddir"/jars/EssentialsXDiscordLink-*.jar "$subpkgdir/var/lib/papermc/plugins/EssentialsDiscordLink.jar" -} - -geo() { - pkgdesc="Geographical player lookup (formerly EssentialsX GeoIP)" - depends="$pkgname" - install -Dm644 "$builddir"/jars/EssentialsXGeoIP-*.jar "$subpkgdir/var/lib/papermc/plugins/EssentialsGeo.jar" -} - -protect() { - pkgdesc="Configurable world protection and control" - depends="$pkgname" - install -Dm644 "$builddir"/jars/EssentialsXProtect-*.jar "$subpkgdir/var/lib/papermc/plugins/EssentialsProtect.jar" -} - -xmpp() { - pkgdesc="Lightweight chat, messaging and server log integration with Jabber/XMPP services" - depends="$pkgname" - install -Dm644 "$builddir"/jars/EssentialsXXMPP-*.jar "$subpkgdir/var/lib/papermc/plugins/EssentialsXMPP.jar" -} - -sha512sums=" -2634a909e4fced837acfd89e0972511da418a9ab3d648f4eb466688b779c7d4215aa25ed891504bc39805d292f1ebf72bb71077c0354117fdaf28ba032483262 papermc-plugin-essentialsx-2.21.1.tar.gz -" diff --git a/user/papermc-plugin-luckperms/APKBUILD b/user/papermc-plugin-luckperms/APKBUILD deleted file mode 100644 index 6b7a4e4..0000000 --- a/user/papermc-plugin-luckperms/APKBUILD +++ /dev/null @@ -1,36 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=papermc-plugin-luckperms -pkgver=5.4.151 -_gittag=0fef481d480737528491fc0b3b8487eb1612f955 -pkgrel=0 -pkgdesc="An advanced permissions plugin for Bukkit/Spigot, BungeeCord and Sponge." -# dependency not available upstream anymore -# armv7: blocked by openjdk21-jdk -#arch='noarch !armv7' -url="https://github.com/lucko/LuckPerms" -license="MIT" -depends="papermc>=1.8.8" -makedepends="openjdk21-jdk" -source="$pkgname-$_gittag.tar.gz::https://github.com/LuckPerms/LuckPerms/archive/$_gittag.tar.gz" -builddir="$srcdir"/LuckPerms-$_gittag - -prepare() { - default_prepare - sed -i "s|project.ext.patchVersion = determinePatchVersion()|project.ext.patchVersion = '${pkgver##*.}'|" build.gradle -} - -build() { - ./gradlew build -} - -check() { - ./gradlew test -} - -package() { - install -Dm644 "$builddir"/bukkit/loader/build/libs/LuckPerms-Bukkit-*.jar "$pkgdir/var/lib/papermc/plugins/LuckPerms.jar" -} -sha512sums=" -e016d2a161472974cc75151e1a6cb3495881d4db7e0aa75d81a1c54fd16d191fe721b1f9fadeaac0bef7ec4a7c47329a2cf367cf3a7577b284077ec173db0579 papermc-plugin-luckperms-0fef481d480737528491fc0b3b8487eb1612f955.tar.gz -" diff --git a/user/papermc-plugin-vault/1996cfa_finish-removal-native-support-for-abandonned-economy-plugins.patch b/user/papermc-plugin-vault/1996cfa_finish-removal-native-support-for-abandonned-economy-plugins.patch deleted file mode 100644 index 7ea071a..0000000 Binary files a/user/papermc-plugin-vault/1996cfa_finish-removal-native-support-for-abandonned-economy-plugins.patch and /dev/null differ diff --git a/user/papermc-plugin-vault/2022cb0_support-newer-jdk-for-building.patch b/user/papermc-plugin-vault/2022cb0_support-newer-jdk-for-building.patch deleted file mode 100644 index 5c1adee..0000000 --- a/user/papermc-plugin-vault/2022cb0_support-newer-jdk-for-building.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 2022cb08922caa42aa77faca254c9b7d7506bee8 Mon Sep 17 00:00:00 2001 -From: Geolykt -Date: Mon, 27 Jun 2022 12:02:49 +0200 -Subject: [PATCH] Support newer JDKs for building - -Apparently the ancient version of lombok used -by a dependency is not compatible with newer -versions of java. As Vault proper did not make -use of lombok, it can be safely removed without -declaring an alternative. - -This commit allows Vault to build under Java 17. ---- - pom.xml | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/pom.xml b/pom.xml -index 5b8a6dfd..17c189fd 100644 ---- a/pom.xml -+++ b/pom.xml -@@ -324,6 +324,12 @@ Vault currently supports the following: Permissions 3, PEX, GroupManager, bPerms - craftconomy3 - 3.2.2-SNAPSHOT - true -+ -+ -+ org.projectlombok -+ lombok -+ -+ - - - net.crystalyx.bukkit.simplyperms diff --git a/user/papermc-plugin-vault/823_add-option-to-silence-no-update-logs.patch b/user/papermc-plugin-vault/823_add-option-to-silence-no-update-logs.patch deleted file mode 100644 index 7cb7ba1..0000000 --- a/user/papermc-plugin-vault/823_add-option-to-silence-no-update-logs.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 52df9d3287e8d593d0e4d999c6d5daaebe947ca1 Mon Sep 17 00:00:00 2001 -From: Ricardo Boss -Date: Tue, 28 Jun 2022 18:50:18 +0200 -Subject: [PATCH] Add option to silence "no update" logs (#823) - -* Added "silent-no-update" config option - -Added switch to turn off messages if no update is available. - -* Set default value for "silent-no-update" - -* Removed any "no update available" option and message ---- - src/net/milkbowl/vault/Vault.java | 3 --- - 1 file changed, 3 deletions(-) - -diff --git a/src/net/milkbowl/vault/Vault.java b/src/net/milkbowl/vault/Vault.java -index ef8b5578..fd2a9787 100644 ---- a/src/net/milkbowl/vault/Vault.java -+++ b/src/net/milkbowl/vault/Vault.java -@@ -171,8 +171,6 @@ public void run() { - log.warning("Update at: https://dev.bukkit.org/projects/vault"); - } else if (currentVersion > newVersion) { - log.info("Stable Version: " + newVersionTitle + " | Current Version: " + currentVersionTitle); -- } else { -- log.info("No new version available"); - } - } catch (Exception e) { - // ignore exceptions -@@ -182,7 +180,6 @@ public void run() { - }, 0, 432000); - - } -- - }); - - // Load up the Plugin metrics diff --git a/user/papermc-plugin-vault/868_update-bstats.patch b/user/papermc-plugin-vault/868_update-bstats.patch deleted file mode 100644 index 2ce8023..0000000 --- a/user/papermc-plugin-vault/868_update-bstats.patch +++ /dev/null @@ -1,72 +0,0 @@ -From 3f20655f0b1b9c7a0f69eb241c5bedd8e748b5c9 Mon Sep 17 00:00:00 2001 -From: Leonardo Di Gianfelice Stornelli - -Date: Tue, 28 Jun 2022 00:34:40 +0200 -Subject: [PATCH] Update bStats (#868) - ---- - pom.xml | 2 +- - src/net/milkbowl/vault/Vault.java | 9 +++++---- - 2 files changed, 6 insertions(+), 5 deletions(-) - -diff --git a/pom.xml b/pom.xml -index 17c189fd..ccd8cde4 100644 ---- a/pom.xml -+++ b/pom.xml -@@ -85,7 +85,7 @@ Vault currently supports the following: Permissions 3, PEX, GroupManager, bPerms - - org.bstats - bstats-bukkit -- 1.5 -+ 3.0.0 - - - com.gmail.bleedobsidian.miconomy -diff --git a/src/net/milkbowl/vault/Vault.java b/src/net/milkbowl/vault/Vault.java -index 30f6f17f..ef8b5578 100644 ---- a/src/net/milkbowl/vault/Vault.java -+++ b/src/net/milkbowl/vault/Vault.java -@@ -78,6 +78,7 @@ - import net.milkbowl.vault.permission.plugins.Permission_KPerms; - - import org.bstats.bukkit.Metrics; -+import org.bstats.charts.SimplePie; - import org.bukkit.Bukkit; - import org.bukkit.OfflinePlayer; - import org.bukkit.command.Command; -@@ -185,7 +186,7 @@ public void run() { - }); - - // Load up the Plugin metrics -- Metrics metrics = new Metrics(this); -+ Metrics metrics = new Metrics(this, 887); - findCustomData(metrics); - - log.info(String.format("Enabled Version %s", getDescription().getVersion())); -@@ -581,7 +582,7 @@ private void findCustomData(Metrics metrics) { - econ = rspEcon.getProvider(); - } - final String econName = econ != null ? econ.getName() : "No Economy"; -- metrics.addCustomChart(new Metrics.SimplePie("economy", new Callable() { -+ metrics.addCustomChart(new SimplePie("economy", new Callable() { - @Override - public String call() { - return econName; -@@ -590,7 +591,7 @@ public String call() { - - // Create our Permission Graph and Add our permission Plotters - final String permName = Bukkit.getServer().getServicesManager().getRegistration(Permission.class).getProvider().getName(); -- metrics.addCustomChart(new Metrics.SimplePie("permission", new Callable() { -+ metrics.addCustomChart(new SimplePie("permission", new Callable() { - @Override - public String call() { - return permName; -@@ -604,7 +605,7 @@ public String call() { - chat = rspChat.getProvider(); - } - final String chatName = chat != null ? chat.getName() : "No Chat"; -- metrics.addCustomChart(new Metrics.SimplePie("chat", new Callable() { -+ metrics.addCustomChart(new SimplePie("chat", new Callable() { - @Override - public String call() { - return chatName; diff --git a/user/papermc-plugin-vault/APKBUILD b/user/papermc-plugin-vault/APKBUILD deleted file mode 100644 index 21897eb..0000000 --- a/user/papermc-plugin-vault/APKBUILD +++ /dev/null @@ -1,43 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=papermc-plugin-vault -pkgver=1.7.3 -pkgrel=0 -pkgdesc="Vault of common APIs for Bukkit Plugins" -# armv7: blocked by openjdk21-jdk -arch='noarch !armv7' -url="https://github.com/MilkBowl/Vault" -license="MIT" -depends="papermc>=1.8.8" -makedepends=" - openjdk21-jdk - maven -" -source=" - vault-$pkgver.tar.gz::https://github.com/MilkBowl/Vault/archive/refs/tags/1.7.3.tar.gz - 2022cb0_support-newer-jdk-for-building.patch - 868_update-bstats.patch - 823_add-option-to-silence-no-update-logs.patch - 1996cfa_finish-removal-native-support-for-abandonned-economy-plugins.patch - " -builddir="$srcdir"/Vault-$pkgver - -build() { - mvn compile - mvn package -} - -check() { - mvn test -} - -package() { - install -Dm644 "$builddir"/target/Vault-$pkgver.jar "$pkgdir/var/lib/papermc/plugins/Vault.jar" -} -sha512sums=" -3d154945e63b7824f0a0e0900fe6db7dc77c97f1967c29760d27a3322ca0b95d76965d8574c24b7cc0e86e822f9b5e3f860cb7167796351c9a921ddf5ef3d36b vault-1.7.3.tar.gz -8b7197b25acf06e545f10dd7dc5447aab6a73d3455bf89b01a4b466331eefa77c86152a47818348cfb901a0d65cff115b75ae37e0f8bb702c35cf13a3942a484 2022cb0_support-newer-jdk-for-building.patch -9124d0feef633f405c3aea6081d4b749df9828d99d0c93d09ba52adb680a781288523d2dfc71be566b8cafd58ac97f152258174ab02294c6e97020a033ee0faa 868_update-bstats.patch -b76b385ff62a955430db8d4d60592983e7475e1e63cd6a9e8c0be0a035662ec4472c6f9c8f09125745c198074695b3e04fe6ad96cbafa5faaba72bcf1bfee896 823_add-option-to-silence-no-update-logs.patch -ea5e36649e65ca690fd8a075bb5f251a8b449ab780a546007e242ec465c58c8c5ae346efac5f1b52e3287f4f400c658f745d130d1e361ecca3436dcf5cb46fb5 1996cfa_finish-removal-native-support-for-abandonned-economy-plugins.patch -" diff --git a/user/papermc-plugin-worldedit/APKBUILD b/user/papermc-plugin-worldedit/APKBUILD deleted file mode 100644 index f487664..0000000 --- a/user/papermc-plugin-worldedit/APKBUILD +++ /dev/null @@ -1,35 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=papermc-plugin-worldedit -pkgver=7.3.13 -_pkgver=$pkgver -pkgrel=0 -pkgdesc="WorldEdit is an easy-to-use in-game Minecraft map editor" -# missingupstream dependencies -# armv7: blocked by openjdk21-jdk -#arch='noarch !armv7' -url="https://github.com/EngineHub/WorldEdit" -license="GPL-3.0" -depends="papermc>=1.13.2" -makedepends="openjdk21-jdk" -source=" - $pkgname-$pkgver.tar.gz::https://github.com/EngineHub/WorldEdit/archive/refs/tags/$pkgver.tar.gz - papermc-fix-build.patch - " -builddir="$srcdir"/WorldEdit-$pkgver - -build() { - ./gradlew build --parallel -} - -check() { - ./gradlew test -} - -package() { - install -Dm644 "$builddir"/worldedit-bukkit/build/libs/worldedit-bukkit-$pkgver-dist.jar "$pkgdir/var/lib/papermc/plugins/WorldEdit.jar" -} -sha512sums=" -dbea1e2ff5b41ad25f8ddc5ae5456f9b7337d406cb4791fb3718b38bfbb94b0d8ba9fc7e2cd5c0d94c3c1845a35e68a87d89c0f147f9d988dd3fc3e375144198 papermc-plugin-worldedit-7.3.13.tar.gz -e36ac06da26e8817c7c666c972a09cbdba0fca8e0a511e53c5650d46ef1ee9a44d783900ed0afb39faab5dc718bf68e26d8c9b310ceedffa5d11bd15880aaa88 papermc-fix-build.patch -" diff --git a/user/papermc-plugin-worldedit/papermc-fix-build.patch b/user/papermc-plugin-worldedit/papermc-fix-build.patch deleted file mode 100644 index 95710e9..0000000 --- a/user/papermc-plugin-worldedit/papermc-fix-build.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/gradle/libs.versions.toml.orig b/gradle/libs.versions.toml -index 5f0e7da..ff0569b 100644 ---- a/gradle/libs.versions.toml.orig -+++ b/gradle/libs.versions.toml -@@ -77,7 +77,7 @@ mockito-junit-jupiter.module = "org.mockito:mockito-junit-jupiter" - commonsCli = "commons-cli:commons-cli:1.4" - - # https://repo.papermc.io/service/rest/repository/browse/maven-public/io/papermc/paper/paper-api/ --paperApi = "io.papermc.paper:paper-api:1.21.5-R0.1-20250503.204036-71" -+paperApi = "io.papermc.paper:paper-api:1.21.5-R0.1-20250520.110141-3" - paperLib = "io.papermc:paperlib:1.0.8" - - dummypermscompat = "com.sk89q:dummypermscompat:1.10" diff --git a/user/papermc-plugin-worldguard/APKBUILD b/user/papermc-plugin-worldguard/APKBUILD deleted file mode 100644 index ba13b1d..0000000 --- a/user/papermc-plugin-worldguard/APKBUILD +++ /dev/null @@ -1,30 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=papermc-plugin-worldguard -pkgver=7.0.13_beta1 -_gittag=2f13ae0444409376feb6c7674591142fe854e12e -pkgrel=0 -pkgdesc="WorldGuard lets you and players guard areas of land against griefers and undesirables" -# armv7: blocked by openjdk21-jdk -arch='noarch !armv7' -url="https://github.com/EngineHub/WorldGuard" -license="GPL-3.0" -depends="papermc>=1.17.0" -makedepends="openjdk21-jdk" -source="$pkgname-$_gittag.tar.gz::https://github.com/EngineHub/WorldGuard/archive/$_gittag.tar.gz" -builddir="$srcdir"/WorldGuard-$_gittag - -build() { - ./gradlew build -} - -check() { - ./gradlew test -} - -package() { - install -Dm644 "$builddir"/worldguard-bukkit/build/libs/worldguard-bukkit-*dist.jar "$pkgdir/var/lib/papermc/plugins/WorldGuard.jar" -} -sha512sums=" -755646330c17df22b1d4eb6f38fc8ea712eff86a0165f2dba6dc1bcd420d2d112547adf60a35f268f45730b8444e540d7d08a02a50df0238bf16c9ff7dc799ff papermc-plugin-worldguard-2f13ae0444409376feb6c7674591142fe854e12e.tar.gz -" diff --git a/user/papermc/APKBUILD b/user/papermc/APKBUILD deleted file mode 100644 index f4a7f7b..0000000 --- a/user/papermc/APKBUILD +++ /dev/null @@ -1,51 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) -pkgname=papermc -pkgver=1.21.7 -_gittag=${pkgver/.0} -pkgrel=0 -pkgdesc="Next generation of Minecraft server, compatible with Spigot plugins and offering uncompromising performance" -# armv7: blocked by openjdk21-jdk -arch='noarch !armv7' -url="https://papermc.io/" -license='custom' -depends='openjdk21-jdk screen sudo bash gawk sed netcat-openbsd' -makedepends="gradle zstd" -options="!check" -subpackages="$pkgname-openrc" -source=" - https://ayakael.net/api/packages/mirrors/generic/papermc/$_gittag/papermc-$_gittag.tar.zst - papermc.initd - papermc.conf - papermc.sh -" - -build() { - ./gradlew --parallel createMojmapBundlerJar -} - -check() { - ./gradlew --parallel check -} - -package() { - install -Dm644 "$srcdir"/$pkgname.conf "$pkgdir"/etc/conf.d/$pkgname - install -Dm755 "$srcdir"/$pkgname.sh "$pkgdir"/usr/bin/$pkgname - install -Dm755 "$srcdir"/$pkgname.initd "$pkgdir"/etc/init.d/$pkgname - install -Dm644 "$builddir"/paper-server/build/libs/paper-server*.jar "$pkgdir"/var/lib/$pkgname/$pkgver.jar - ln -s $pkgver.jar "$pkgdir"/var/lib/$pkgname/server.jar - - # Link the log files - mkdir -p "$pkgdir"/var/log/ - install -dm2755 "$pkgdir"/var/lib/$pkgname/logs - ln -s "/var/lib/$pkgname"/logs "$pkgdir"/var/log/$pkgname - - # Give the group write permissions and set user or group ID on execution - chmod g+ws "$pkgdir"/var/lib/$pkgname -} -sha512sums=" -90c3017f7e4031816f6d4e30612a88d7b15d9e99cfb4e887b868e3d0d55ec5db0e9e71dc433dd399959da9b099e7fc4fd3768635ccabcce84d1adfc48837309a papermc-1.21.7.tar.zst -c5d1bf85ceb74162aaaf2bcd2d06dc2e3dd2e37c39f0cee2be7c8dbff9970a6aff1e48a43e6d1e83e6a0ac610bd89f62b1279bf27b64afa88d9831a36aebbd3e papermc.initd -9b8e267428731ee9255f82a93f1e8674d7e917a0f154bd395cd2280a49aa248a4b8427520b08dbb4b3a74a5471dac0e439eedc8ab94bf2e53bb8d411d2d8a789 papermc.conf -943ba0d4c10173246bdc6497dcedd54da0788f966841c8d3381398711d79f8d5eb07a24ce28f519b6f24f59d99fa9e74bc6bb882059f343df4eeda5de3660ac7 papermc.sh -" diff --git a/user/pdf4qt/APKBUILD b/user/pdf4qt/APKBUILD new file mode 100644 index 0000000..4680132 --- /dev/null +++ b/user/pdf4qt/APKBUILD @@ -0,0 +1,54 @@ +# Maintainer: Antoine Martin (ayakael) +pkgname=pdf4qt +pkgver=1.3.7 +pkgrel=0 +pkgdesc="Open source PDF editor" +arch="x86_64" +url="https://jakubmelka.github.io/" +license="LGPL-3.0" +# opt depends: +# 'flite: Text-To-Speech using flite synthesizer', +# 'libspeechd: Text-To-Speech using speechd synthesizer' +makedepends=" + cmake + openssl-dev + libjpeg-turbo-dev + openjpeg-dev + onetbb-dev + lcms2-dev + freetype-dev + zlib-dev + musl-dev + qt6-qtbase-dev + qt6-qtsvg-dev + qt6-qtspeech-dev + qt6-qtdeclarative-dev + qt6-qtmultimedia-dev + " +source=" + $pkgname-$pkgver.tar.gz::https://github.com/JakubMelka/PDF4QT/archive/refs/tags/v$pkgver.tar.gz + CMakeListsMain.patch + CMakeListsLib.patch + FindLCMS2.cmake + " +builddir="$srcdir"/PDF4QT-$pkgver + +build() { + cmake -B build \ + -DCMAKE_BUILD_TYPE='Release' \ + -DCMAKE_INSTALL_PREFIX='/' \ + -Wno-dev \ + -DCMAKE_MODULE_PATH="$srcdir" \ + -DPDF4QT_INSTALL_DEPENDENCIES=0 + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} +sha512sums=" +86be79c901edee7ca9a0f534979b88ae1cf6dac3ecb0cd40b165354765dabdfcae94b288001e918e068a0bb4e61d8e9c90842d7f415659403979aa87d8830ee7 pdf4qt-1.3.7.tar.gz +98392178a57739a3f5629aac27ac36f0aa0f33a508b2bd3d3de66c61a20c799a86a5dec6feabb250388c2e17319f7bdff05b34131d95c4c9ce8ee33d3dae3a8d CMakeListsMain.patch +f0ee3675a70624f2ecefd8a157a68941aa7b18da03298186317c566e3b26a34e60991ce4c5501a619b7aa8744ab193b74417a84278f13eecd1ffaec28116dc30 CMakeListsLib.patch +48cdc9f6cf0691baef2d80b423c62315772e51ac7b9bfa1c0c619315a11a6867e282fcf764c50290eb3c310d51be496502bb0e60b6a82e9bbcfd4f15e6ee1a73 FindLCMS2.cmake +" diff --git a/user/pdf4qt/CMakeListsLib.patch b/user/pdf4qt/CMakeListsLib.patch new file mode 100644 index 0000000..8b354d0 --- /dev/null +++ b/user/pdf4qt/CMakeListsLib.patch @@ -0,0 +1,13 @@ +diff --git a/Pdf4QtLibCore/CMakeLists.txt b/Pdf4QtLibCore/CMakeLists.txt +index 6f12727..e0fd971 100644 +--- a/Pdf4QtLibCore/CMakeLists.txt ++++ b/Pdf4QtLibCore/CMakeLists.txt +@@ -153,7 +153,7 @@ GENERATE_EXPORT_HEADER(Pdf4QtLibCore + EXPORT_FILE_NAME "${CMAKE_BINARY_DIR}/${INSTALL_INCLUDEDIR}/pdf4qtlibcore_export.h") + + target_link_libraries(Pdf4QtLibCore PRIVATE Qt6::Core Qt6::Gui Qt6::Xml Qt6::Svg) +-target_link_libraries(Pdf4QtLibCore PRIVATE lcms2::lcms2) ++target_link_libraries(Pdf4QtLibCore PRIVATE LCMS2::LCMS2) + target_link_libraries(Pdf4QtLibCore PRIVATE OpenSSL::SSL OpenSSL::Crypto) + target_link_libraries(Pdf4QtLibCore PRIVATE ZLIB::ZLIB) + target_link_libraries(Pdf4QtLibCore PRIVATE Freetype::Freetype) diff --git a/user/pdf4qt/CMakeListsMain.patch b/user/pdf4qt/CMakeListsMain.patch new file mode 100644 index 0000000..c2109ca --- /dev/null +++ b/user/pdf4qt/CMakeListsMain.patch @@ -0,0 +1,17 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 7dc98bc..ea790b1 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -64,10 +64,10 @@ endif() + qt_standard_project_setup() + + find_package(OpenSSL REQUIRED) +-find_package(lcms REQUIRED) ++find_package(LCMS2 REQUIRED) + find_package(ZLIB REQUIRED) + find_package(Freetype REQUIRED) +-find_package(OpenJPEG CONFIG REQUIRED) ++find_package(OpenJPEG REQUIRED) + find_package(JPEG REQUIRED) + find_package(PNG REQUIRED) + diff --git a/user/pdf4qt/FindLCMS2.cmake b/user/pdf4qt/FindLCMS2.cmake new file mode 100644 index 0000000..10db145 --- /dev/null +++ b/user/pdf4qt/FindLCMS2.cmake @@ -0,0 +1,105 @@ +# Copyright (C) 2021 Igalia S.L. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +# THE POSSIBILITY OF SUCH DAMAGE. + +#[=======================================================================[.rst: +FindLCMS2 +--------- + +Find LCMS2 headers and libraries. + +Imported Targets +^^^^^^^^^^^^^^^^ + +``LCMS2::LCMS2`` + The LCMS2 library, if found. + +Result Variables +^^^^^^^^^^^^^^^^ + +This will define the following variables in your project: + +``LCMS2_FOUND`` + true if (the requested version of) LCMS2 is available. +``LCMS2_VERSION`` + the version of LCMS2. +``LCMS2_LIBRARIES`` + the libraries to link against to use LCMS2. +``LCMS2_INCLUDE_DIRS`` + where to find the LCMS2 headers. +``LCMS2_COMPILE_OPTIONS`` + this should be passed to target_compile_options(), if the + target is not used for linking + +#]=======================================================================] + +find_package(PkgConfig QUIET) +if (PkgConfig_FOUND) + pkg_check_modules(PC_LCMS2 QUIET lcms2) + set(LCMS2_COMPILE_OPTIONS ${PC_LCMS2_CFLAGS_OTHER}) + set(LCMS2_VERSION ${PC_LCMS2_VERSION}) +endif () + +find_path(LCMS2_INCLUDE_DIR + NAMES lcms2.h + HINTS ${PC_LCMS2_INCLUDEDIR} ${PC_LCMS2_INCLUDE_DIRS} ${LCMS2_INCLUDE_DIR} + PATH_SUFFIXES lcms2 liblcms2 +) + +find_library(LCMS2_LIBRARY + NAMES ${LCMS2_NAMES} lcms2 liblcms2 lcms-2 liblcms-2 + HINTS ${PC_LCMS2_LIBDIR} ${PC_LCMS2_LIBRARY_DIRS} + PATH_SUFFIXES lcms2 +) + +if (LCMS2_INCLUDE_DIR AND NOT LCMS_VERSION) + file(READ ${LCMS2_INCLUDE_DIR}/lcms2.h LCMS2_VERSION_CONTENT) + string(REGEX MATCH "#define[ \t]+LCMS_VERSION[ \t]+([0-9]+)[ \t]*\n" LCMS2_VERSION_MATCH ${LCMS2_VERSION_CONTENT}) + if (LCMS2_VERSION_MATCH) + string(SUBSTRING ${CMAKE_MATCH_1} 0 1 LCMS2_VERSION_MAJOR) + string(SUBSTRING ${CMAKE_MATCH_1} 1 2 LCMS2_VERSION_MINOR) + set(LCMS2_VERSION "${LCMS2_VERSION_MAJOR}.${LCMS2_VERSION_MINOR}") + endif () +endif () + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(LCMS2 + FOUND_VAR LCMS2_FOUND + REQUIRED_VARS LCMS2_LIBRARY LCMS2_INCLUDE_DIR + VERSION_VAR LCMS2_VERSION +) + +if (LCMS2_LIBRARY AND NOT TARGET LCMS2::LCMS2) + add_library(LCMS2::LCMS2 UNKNOWN IMPORTED GLOBAL) + set_target_properties(LCMS2::LCMS2 PROPERTIES + IMPORTED_LOCATION "${LCMS2_LIBRARY}" + INTERFACE_COMPILE_OPTIONS "${LCMS2_COMPILE_OPTIONS}" + INTERFACE_INCLUDE_DIRECTORIES "${LCMS2_INCLUDE_DIR}" + ) +endif () + +mark_as_advanced(LCMS2_INCLUDE_DIR LCMS2_LIBRARY) + +if (LCMS2_FOUND) + set(LCMS2_LIBRARIES ${LCMS2_LIBRARY}) + set(LCMS2_INCLUDE_DIRS ${LCMS2_INCLUDE_DIR}) +endif () diff --git a/user/peertube/APKBUILD b/user/peertube/APKBUILD new file mode 100644 index 0000000..f50d1c1 --- /dev/null +++ b/user/peertube/APKBUILD @@ -0,0 +1,81 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) +pkgname=peertube +pkgver=6.0.2 +pkgrel=0 +pkgdesc="ActivityPub-federated video streaming platform using P2P directly in your web browser" +arch="x86_64" +url="https://joinpeertube.org/" +license="AGPL" +depends=" + nodejs + ffmpeg + postgresql + openssl + redis + npm + procps-ng + " +makedepends=" + yarn + " +source=" + $pkgname-$pkgver.tar.gz::https://github.com/Chocobozzz/PeerTube/archive/refs/tags/v$pkgver.tar.gz + peertube-manage.sh + peertube.conf + peertube.openrc + " +builddir="$srcdir"/PeerTube-$pkgver +install="$pkgname.post-install $pkgname.pre-install $pkgname.post-upgrade" +subpackages="$pkgname-doc $pkgname-openrc" + +build() { + # need to fetch devel depencencies to build + yarn install --pure-lockfile + npm run build + rm -Rf "$builddir"/node_modules + yarn install --production --pure-lockfile +} + +package() { + install -dm 755 \ + "$pkgdir"/usr/share/webapps \ + "$pkgdir"/usr/share/doc \ + "$pkgdir"/usr/share/licenses/peertube \ + "$pkgdir"/etc/init.d \ + "$pkgdir"/etc/conf.d + + # install + cp -a "$builddir" "$pkgdir/usr/share/webapps/peertube" + + # wrapper script + install -Dm755 "$srcdir"/peertube-manage.sh "$pkgdir"/usr/bin/peertube-manage + + # openrc + install -Dm755 "$srcdir"/peertube.openrc "$pkgdir"/etc/init.d/peertube + install -Dm644 "$srcdir"/peertube.conf "$pkgdir"/etc/conf.d/peertube + + # config file setup + rm -R "$pkgdir"/usr/share/webapps/peertube/config + install -Dm644 "$builddir"/config/production.yaml.example "$pkgdir"/etc/peertube/production.yaml + install -Dm644 "$builddir"/config/default.yaml "$pkgdir"/etc/peertube/default.yaml + sed -i "s|/var/www/peertube/storage|/var/lib/peertube|g" "$pkgdir"/etc/peertube/production.yaml "$pkgdir"/etc/peertube/default.yaml + sed -i "s| tmp:.*| tmp: '/tmp/peertube/'|" "$pkgdir"/etc/peertube/production.yaml "$pkgdir"/etc/peertube/default.yaml + sed -i "s|tmp_persistent:.*|tmp_persistent: '/var/tmp/peertube/'|" "$pkgdir"/etc/peertube/production.yaml "$pkgdir"/etc/peertube/default.yaml + sed -i "s|logs:.*|logs: '/var/log/peertube/'|" "$pkgdir"/etc/peertube/production.yaml "$pkgdir"/etc/peertube/default.yaml + sed -i "s| peertube: ''| peertube: '@@SECRET_KEY@@'|" "$pkgdir"/etc/peertube/production.yaml + + # docs and licenses + mv "$pkgdir"/usr/share/webapps/peertube/support/doc "$pkgdir"/usr/share/doc/$pkgname + mv "$pkgdir"/usr/share/webapps/peertube/*.md "$pkgdir"/usr/share/doc/peertube/. + mv "$pkgdir"/usr/share/webapps/peertube/LICENSE "$pkgdir"/usr/share/licenses/peertube/. + + # delete arm64 prebuild + rm "$pkgdir"/usr/share/webapps/$pkgname/node_modules/fs-native-extensions/prebuilds/linux-arm64/node.napi.node +} +sha512sums=" +91bcec34902f171ffe9ab3f27ab4422319f91430cab22965a5cf9887c5293152f7f85c6fc0f355820000daea0a49327aa66f20bb4cff3850e5e3d192f347c926 peertube-6.0.2.tar.gz +92de1155410848937eeff3bef480c4a074875b4236ce0b6bf4cd7213d00173e7766d130408419c85c4432a8445a03f5d4525e4283384d906d781510cc4fd8fc0 peertube-manage.sh +494bb4daf98fcd62b354eb6fae18ccff19bef1243de083a93e438680deef1d9039e30eff8870b6955c3c7b10638e6df6cbeb4fbdb7539979466f502bcc72c843 peertube.conf +5b4d3f47d0dc2ce991971ff61c604a1566811612cff91f7e6ed19b65d0830695649ddef9afff474d916a5e6764d74bb4fa6b5c12eb5e753d8fc381cdd38ab179 peertube.openrc +" diff --git a/user/peertube/peertube-manage.sh b/user/peertube/peertube-manage.sh new file mode 100644 index 0000000..70bc387 --- /dev/null +++ b/user/peertube/peertube-manage.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +BUNDLE_DIR='/usr/share/webapps/peertube' + +cd $BUNDLE_DIR + +if [ "$(id -un)" != 'peertube' ]; then + source /etc/conf.d/peertube + export NODE_ENV NODE_CONFIG_DIR + exec su peertube -c '"$0" "$@"' -- npm run "$@" +else + source /etc/conf.d/peertube + export NODE_ENV NODE_CONFIG_DIR + exec npm run "$@" +fi diff --git a/user/peertube/peertube.conf b/user/peertube/peertube.conf new file mode 100644 index 0000000..8a7d014 --- /dev/null +++ b/user/peertube/peertube.conf @@ -0,0 +1,2 @@ +NODE_CONFIG_DIR=/etc/peertube +NODE_ENV=production diff --git a/user/peertube/peertube.openrc b/user/peertube/peertube.openrc new file mode 100644 index 0000000..8f03ba0 --- /dev/null +++ b/user/peertube/peertube.openrc @@ -0,0 +1,34 @@ +#!/sbin/openrc-run + +name="$RC_SVCNAME" +cfgfile="/etc/conf.d/$RC_SVCNAME.conf" +pidfile="/run/$RC_SVCNAME.pid" +working_directory="/usr/share/webapps/peertube" +command="/usr/bin/node" +command_args="dist/server.js" +command_user="peertube" +command_group="peertube" +start_stop_daemon_args="" +command_background="yes" +output_log="/var/log/peertube/$RC_SVCNAME.log" + +depend() { + need redis + need postgresql +} + +start_pre() { + cd "$working_directory" + checkpath --directory --owner $command_user:$command_group --mode 0775 \ + /var/log/peertube \ + /var/lib/peertube \ + /var/tmp/peertube \ + /tmp/peertube + + export NODE_ENV NODE_CONFIG_DIR +} + +stop_pre() { + ebegin "Killing child processes" + kill $(ps -o pid= --ppid $(cat $pidfile)) || true +} diff --git a/user/peertube/peertube.post-install b/user/peertube/peertube.post-install new file mode 100755 index 0000000..a83bb10 --- /dev/null +++ b/user/peertube/peertube.post-install @@ -0,0 +1,41 @@ +#!/bin/sh +set -eu + +group=www-data +config_file='/etc/peertube/production.yaml' + +if grep '@@SECRET_KEY@@' "$config_file" >/dev/null; then + echo "* Generating random secret in $config_file" >&2 + + secret_key="$(openssl rand -hex 32)" + sed -i "s|@@SECRET_KEY@@|$secret_key|" "$config_file" +fi + +if [ "${0##*.}" = 'post-upgrade' ]; then + cat >&2 <<-EOF + * + * To finish Peertube upgrade run: + * + * + EOF +else + cat >&2 <<-EOF + * + * 1. Adjust settings in /etc/peertube/production.yaml + * + * 2. Create database for Peertube: + * + * psql -c "CREATE ROLE peertube PASSWORD 'top-secret' INHERIT LOGIN;" + * psql -c "CREATE DATABASE peertube OWNER peertube ENCODING 'UTF-8';" + * + * 3. Start Peertube + * + * service peertube start + * + * 4. Create admin user + * + * peertube-manage reset-password -- -u root + * + EOF +fi + diff --git a/user/peertube/peertube.post-upgrade b/user/peertube/peertube.post-upgrade new file mode 120000 index 0000000..2dd117d --- /dev/null +++ b/user/peertube/peertube.post-upgrade @@ -0,0 +1 @@ +peertube.post-install \ No newline at end of file diff --git a/user/peertube/peertube.pre-install b/user/peertube/peertube.pre-install new file mode 100755 index 0000000..2572d9c --- /dev/null +++ b/user/peertube/peertube.pre-install @@ -0,0 +1,25 @@ +#!/bin/sh + +DATADIR='/var/lib/peertube' + +if ! getent group peertube 1>/dev/null; then + echo '* Creating group peertube' 1>&2 + + addgroup -S peertube +fi + +if ! id peertube 2>/dev/null 1>&2; then + echo '* Creating user peertube' 1>&2 + + adduser -DHS -G peertube -h "$DATADIR" -s /bin/sh \ + -g "added by apk for peertube" peertube + passwd -u peertube 1>/dev/null # unlock +fi + +if ! id -Gn peertube | grep -Fq www-data; then + echo '* Adding user peertube to group www-data' 1>&2 + + addgroup peertube www-data +fi + +exit 0 diff --git a/user/perl-crypt-random-source/APKBUILD b/user/perl-crypt-random-source/APKBUILD new file mode 100644 index 0000000..ffe4aba --- /dev/null +++ b/user/perl-crypt-random-source/APKBUILD @@ -0,0 +1,48 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +_cpaname="Crypt-Random-Source" +_cpanauthor=ETHER +pkgname=perl-crypt-random-source +pkgver=0.14 +pkgrel=1 +pkgdesc="Perl Crypt::Random::Source CPAN module - load and instantiate sources of random data" +arch="noarch" +url="http://search.cpan.org/dist/$_cpaname/" +license="GPL"$ +makedepends=" + perl-module-build-tiny + " +depends=" + perl-capture-tiny + perl-module-find + perl-module-runtime + perl-moo + perl-namespace-clean + perl-sub-exporter + perl-sub-name + perl-test-fatal + perl-type-tiny + perl-yaml + " +source="http://www.cpan.org/authors/id/${_cpanauthor::1}/${_cpanauthor::2}/$_cpanauthor/$_cpaname-$pkgver.tar.gz" +subpackages="$pkgname-doc" +builddir="$srcdir"/$_cpaname-$pkgver + +build() { + export PERL_MM_FALLBACK_SILENCE_WARNING=true + perl Makefile.PL + make +} + +check() { + make test +} + +package() { + make install INSTALLDIRS=vendor DESTDIR="$pkgdir" + rm "$pkgdir"/usr/lib/perl5/core_perl/perllocal.pod +} +sha512sums=" +25760ccfae42f44bd132915e3796042b43c1bc43195a97fc1236579c90b96957b3d86d2e68adde9d7dd486336f132982867413af251c66e527584e7309e0c729 Crypt-Random-Source-0.14.tar.gz +" diff --git a/user/perl-math-random-isaac/APKBUILD b/user/perl-math-random-isaac/APKBUILD new file mode 100644 index 0000000..6c9ef3c --- /dev/null +++ b/user/perl-math-random-isaac/APKBUILD @@ -0,0 +1,36 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +pkgname=perl-math-random-isaac +pkgver=1.004 +pkgrel=1 +pkgdesc="Perl interface to the ISAAC PRNG algorithm" +arch="noarch" +url='https://search.cpan.org/dist/Math-Random-ISAAC/' +license="GPL" +depends="perl" +makedepends="perl-test-nowarnings" +source="https://search.cpan.org/CPAN/authors/id/J/JA/JAWNSY/Math-Random-ISAAC-$pkgver.tar.gz" +builddir="$srcdir"/Math-Random-ISAAC-$pkgver +subpackages="$pkgname-doc" + +build() { + export PERL_MM_USE_DEFAULT=1 PERL_AUTOINSTALL=--skipdeps \ + PERL_MM_OPT="INSTALLDIRS=vendor DESTDIR=$pkgdir" \ + PERL_MB_OPT="--installdirs vendor --destdir $pkgdir" \ + MODULEBUILDRC=/dev/null + perl Makefile.PL + make +} + +check() { + make test +} + +package() { + make install + find "$pkgdir" \( -name .packlist -o -name perllocal.pod \) -delete +} +sha512sums=" +98fdfb28b207b4afe72ab82a2b564b06c5daaac15cdab2ce2ef698b16c0dcf5b23ac28fbebe170d2c6c7239fe6c97f634e5c03a8f2bd0aeb8369d0008b9ae0a2 Math-Random-ISAAC-1.004.tar.gz +" diff --git a/user/perl-math-random-secure/APKBUILD b/user/perl-math-random-secure/APKBUILD new file mode 100644 index 0000000..e7b2a24 --- /dev/null +++ b/user/perl-math-random-secure/APKBUILD @@ -0,0 +1,44 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +_cpaname=Math-Random-Secure +_cpanauthor=FREW +pkgname=perl-math-random-secure +pkgver=0.080001 +pkgrel=1 +pkgdesc="Perl Math::Random::Secure CPAN module - cryptographically-secure, cross-platform replacement for rand()" +arch="noarch" +url="http://search.cpan.org/dist/$_cpaname/" +license="GPL" +options="!check" # Failure +makedepends=" + perl-moo + perl-moose + perl-test-sharedfork + perl-test-warn +" +depends=" + perl-crypt-random-source + perl-math-random-isaac +" +source="http://search.cpan.org/CPAN/authors/id/${_cpanauthor::1}/${_cpanauthor::2}/$_cpanauthor/$_cpaname-$pkgver.tar.gz" +subpackages="$pkgname-doc" +builddir="$srcdir"/$_cpaname-$pkgver + +build() { + perl Makefile.PL + make +} + +check() { + make test +} + +package() { + make install INSTALLDIRS=vendor DESTDIR="$pkgdir" + # provided by perl-crypt-random-source + rm "$pkgdir"/usr/lib/*/core_perl/perllocal.pod +} +sha512sums=" +2092fc01e224ebb438f927f72e835095efdb8790d8f4ef845fc7c4af3e20a05848e7632b0e752221bbe76cebbfa8186638043457ff4f80ff5727a42baec317ce Math-Random-Secure-0.080001.tar.gz +" diff --git a/user/perl-net-domain-tld/APKBUILD b/user/perl-net-domain-tld/APKBUILD new file mode 100644 index 0000000..efa4b57 --- /dev/null +++ b/user/perl-net-domain-tld/APKBUILD @@ -0,0 +1,34 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +_cpaname="Net-Domain-TLD" +_cpanauthor=ALEXP +pkgname=perl-net-domain-tld +pkgver=1.75 +pkgrel=1 +pkgdesc="Work with TLD names" +arch="noarch" +url="http://search.cpan.org/dist/$_cpaname/" +license="GPL" +depends="perl" +source="http://www.cpan.org/authors/id/${_cpanauthor::1}/${_cpanauthor::2}/$_cpanauthor/$_cpaname-$pkgver.tar.gz" +subpackages="$pkgname-doc" +builddir="$srcdir"/$_cpaname-$pkgver + +build() { + export PERL_MM_FALLBACK_SILENCE_WARNING=true + perl Makefile.PL + make +} + +check() { + make test +} + +package() { + make install INSTALLDIRS=vendor DESTDIR="$pkgdir" + rm "$pkgdir"/usr/lib/perl5/core_perl/perllocal.pod +} +sha512sums=" +88b090f427e7fccd8394059b643f260a83fe9ec3fd6741972ec388325bb8c178d9d89fc8da9b1338441972e6744117c4effe3551c2c3f95d52022496667fa4f1 Net-Domain-TLD-1.75.tar.gz +" diff --git a/user/php81-pecl-inotify/APKBUILD b/user/php81-pecl-inotify/APKBUILD new file mode 100644 index 0000000..20a311c --- /dev/null +++ b/user/php81-pecl-inotify/APKBUILD @@ -0,0 +1,33 @@ +# Contributor: Fabio Ribeiro +# Maintainer: Andy Postnikov +pkgname=php81-pecl-inotify +_extname=inotify +pkgver=3.0.0 +pkgrel=0 +pkgdesc="Inotify bindings for PHP 8.1" +url="https://pecl.php.net/package/inotify" +arch="all" +license="PHP-3.01" +depends="php81-common" +makedepends="php81-dev" +source="php-pecl-$_extname-$pkgver.tgz::https://pecl.php.net/get/$_extname-$pkgver.tgz" +builddir="$srcdir"/$_extname-$pkgver + +build() { + phpize81 + ./configure --prefix=/usr --with-php-config=php-config81 + make +} + +check() { + make NO_INTERACTION=1 REPORT_EXIT_STATUS=1 test +} + +package() { + make INSTALL_ROOT="$pkgdir" install + local _confdir="$pkgdir"/etc/php81/conf.d + install -d $_confdir + echo "extension=$_extname" > $_confdir/70_$_extname.ini +} + +sha512sums="f8b29f8611f16b92136ab8de89181c254bba1abee1e61cac2344440567a3155aae4b9b54b10fdb1b0254fd7a96da8c14b7dc5c9f7f08a03db30ab1645aca1eee php-pecl-inotify-3.0.0.tgz" diff --git a/user/php82-pecl-inotify/APKBUILD b/user/php82-pecl-inotify/APKBUILD new file mode 100644 index 0000000..698f0d5 --- /dev/null +++ b/user/php82-pecl-inotify/APKBUILD @@ -0,0 +1,33 @@ +# Contributor: Fabio Ribeiro +# Maintainer: Andy Postnikov +pkgname=php82-pecl-inotify +_extname=inotify +pkgver=3.0.0 +pkgrel=0 +pkgdesc="Inotify bindings for PHP 8.2" +url="https://pecl.php.net/package/inotify" +arch="all" +license="PHP-3.01" +depends="php82-common" +makedepends="php82-dev" +source="php-pecl-$_extname-$pkgver.tgz::https://pecl.php.net/get/$_extname-$pkgver.tgz" +builddir="$srcdir"/$_extname-$pkgver + +build() { + phpize82 + ./configure --prefix=/usr --with-php-config=php-config82 + make +} + +check() { + make NO_INTERACTION=1 REPORT_EXIT_STATUS=1 test +} + +package() { + make INSTALL_ROOT="$pkgdir" install + local _confdir="$pkgdir"/etc/php82/conf.d + install -d $_confdir + echo "extension=$_extname" > $_confdir/70_$_extname.ini +} + +sha512sums="f8b29f8611f16b92136ab8de89181c254bba1abee1e61cac2344440567a3155aae4b9b54b10fdb1b0254fd7a96da8c14b7dc5c9f7f08a03db30ab1645aca1eee php-pecl-inotify-3.0.0.tgz" diff --git a/user/protobuf/APKBUILD b/user/protobuf/APKBUILD new file mode 100644 index 0000000..ec56f54 --- /dev/null +++ b/user/protobuf/APKBUILD @@ -0,0 +1,168 @@ +# Contributor: Sheila Aman +# Maintainer: Natanael Copa +pkgname=protobuf +_gemname=google-protobuf +pkgver=23.4 +_rubyver=3.23.4 +pkgrel=2 +pkgdesc="Library for extensible, efficient structure packing" +url="https://github.com/protocolbuffers/protobuf" +arch="all" +license="BSD-3-Clause" +depends=" + protoc=$pkgver-r$pkgrel + libprotoc=$pkgver-r$pkgrel + libprotobuf=$pkgver-r$pkgrel + libprotobuf-lite=$pkgver-r$pkgrel + " +depends_dev=" + protoc=$pkgver-r$pkgrel + zlib-dev + " +makedepends=" + $depends_dev + abseil-cpp-dev + cmake + ruby3.2 + ruby3.2-dev + ruby3.2-rake + samurai + " +checkdepends="gtest-dev" +subpackages=" + ruby3.2-$_gemname:_ruby + $pkgname-dev + $pkgname-vim::noarch + protoc + libprotoc + libprotobuf + libprotobuf-lite + " + # exclude.patch +source="$pkgname-$pkgver.tar.gz::https://github.com/protocolbuffers/protobuf/archive/refs/tags/v$pkgver.tar.gz + exclude.patch + protoc-cmake.patch + ruby-fix-cflags.patch + skip-failing-tests.patch + soversion.patch + trim-rakefile.patch + " + +# fails some +case "$CARCH" in +armhf) options="$options !check" ;; +esac + +build() { + export CFLAGS="$CFLAGS -DNDEBUG -O2 -flto=auto" + export CXXFLAGS="$CXXFLAGS -DNDEBUG -O2 -flto=auto -Wno-deprecated-declarations" + + cmake -B build -G Ninja \ + -DCMAKE_BUILD_TYPE=None \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_SHARED_LIBS=ON \ + -Dprotobuf_BUILD_TESTS="$(want_check && echo ON || echo OFF)" \ + -Dprotobuf_BUILD_LIBPROTOC=ON \ + -Dprotobuf_ABSL_PROVIDER="package" \ + -Dprotobuf_ALLOW_CCACHE=ON \ + -Dprotobuf_USE_EXTERNAL_GTEST=ON + cmake --build build + + cd "$builddir"/ruby + + export PATH="$PATH:$builddir/build" + + # Generate proto files for built-in protocols. + rake genproto + + gem build $_gemname.gemspec + gem install --local \ + --install-dir dist \ + --ignore-dependencies \ + --no-document \ + --verbose \ + $_gemname +} + +# TODO: Run tests for ruby gem. +check() { + ctest --test-dir build --output-on-failure +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + sed -i \ + -e "/Requires:/s|;| |g" \ + -e "/Requires:/s|::|_|g" \ + "$pkgdir"/usr/lib/pkgconfig/protobuf.pc + + install -Dm644 editors/proto.vim \ + "$pkgdir"/usr/share/vim/vimfiles/syntax/proto.vim + + local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')" + cd ruby/dist + + mkdir -p "$gemdir" + cp -r extensions gems specifications "$gemdir"/ + + # Remove duplicated .so libs (should be only in extensions directory). + find "$gemdir"/gems/ -name "*.so" -delete + + # Remove unnecessary files. + cd "$gemdir"/gems/$_gemname-$_rubyver + rm -r ext/ +} + +_ruby() { + depends="" + pkgdesc="Ruby bindings to Google's data interchange format" + + amove usr/lib/ruby/gems +} + +vim() { + pkgdesc="Vim syntax for $pkgname" + depends="" + install_if="$pkgname=$pkgver-r$pkgrel vim" + + amove usr/share/vim/vimfiles/syntax/proto.vim +} + +libprotoc() { + depends="" + pkgdesc="Runtime library for Protocol Buffer compiler" + + amove usr/lib/libprotoc.so.* +} + +protoc() { + depends="" + pkgdesc="Protocol buffer compiler binary and library" + + amove usr/bin/protoc* +} + +libprotobuf() { + depends="" + pkgdesc="Runtime library for C++ users of protocol buffers" + + amove usr/lib/libprotobuf.so.* +} + +lite() { + depends="" + pkgdesc="Runtime library for C++ users with 'lite runtime' setting of protocol buffers" + + amove usr/lib/libprotobuf-lite.so.* +} + +sha512sums=" +b93a4e0339ecbe085796de5b6c61feae35229d40db9019c043090bcaa483a1cce78a99487c5638482c68832fcede5579a0e5ec731221a88359b80db9bb6dc566 protobuf-23.4.tar.gz +0d46d105a0670ab5cfcb04ed534927a71613234a88efede0b20d426e1caaa708e6ff275a09c5dab7786fe26e69e0882f022b893302e4869006b4ac55fc6172e5 exclude.patch +16b8ee0e50dbb2144ddb83654a63e410b4218e667b6b8b77c7b6f9797508f63c3e8be0f9711841bb6ebbed0883cda2394b219a62b468240f65f4dac418b5a56e protoc-cmake.patch +0cb202a6151ae3746c09e85f2e4ce9abb0d810d4a3c84cb647fde407cf8d13894d3c9b340e06d7a3a85669da1899db265d26d8309d59249f841a40a66e045c83 ruby-fix-cflags.patch +b5070f8e150920c316130ba40f46c66eefddc634844f5d6b8ee11f6824a3707b3e74f68aa0612c16305bf096050214c6120e693225e07e0cea80e68a7830f863 skip-failing-tests.patch +850dc1d6fd3ea01f1689fd700ac35e7da0882092ab34c616702e01bdf4b5327b8ab27381ecf291431a94f54c89d31707a4a171929937e880543974cb64f9e685 soversion.patch +13514a456a50d7243baa23fe43586fc4544cda87b9e2a5afe9d2fac8afca8e8853f9b42232c3fff4c5cf2df443af32f944f451daa1d604d80fd03ee4e7abed3e trim-rakefile.patch +" diff --git a/user/protobuf/exclude.patch b/user/protobuf/exclude.patch new file mode 100644 index 0000000..9c63c0a --- /dev/null +++ b/user/protobuf/exclude.patch @@ -0,0 +1,40 @@ +don't install the utf8_range lib into disk. +also remove it from .pc/cmake, it's statically linked into protobuf and never needed on disk after +-- +diff --git a/cmake/install.cmake b/cmake/install.cmake +index e7eb210..73e1897 100644 +--- a/cmake/install.cmake ++++ b/cmake/install.cmake +@@ -4,7 +4,6 @@ foreach(_target IN LISTS protobuf_ABSL_USED_TARGETS) + string(REPLACE :: _ _modified_target ${_target}) + list(APPEND _pc_targets ${_modified_target}) + endforeach() +-list(APPEND _pc_targets "utf8_range") + + set(_protobuf_PC_REQUIRES "") + set(_sep "") +diff --git a/cmake/protobuf-config.cmake.in b/cmake/protobuf-config.cmake.in +index 44805c7..1a8d243 100644 +--- a/cmake/protobuf-config.cmake.in ++++ b/cmake/protobuf-config.cmake.in +@@ -4,7 +4,6 @@ include("${CMAKE_CURRENT_LIST_DIR}/protobuf-options.cmake") + # Depend packages + @_protobuf_FIND_ZLIB@ + @_protobuf_FIND_ABSL@ +-@_protobuf_FIND_UTF8_RANGE@ + + # Imported targets + include("${CMAKE_CURRENT_LIST_DIR}/protobuf-targets.cmake") +diff --git a/cmake/utf8_range.cmake b/cmake/utf8_range.cmake +index f411a8c..770f94c 100644 +--- a/cmake/utf8_range.cmake ++++ b/cmake/utf8_range.cmake +@@ -8,7 +8,7 @@ if (NOT TARGET utf8_range) + endif() + + set(utf8_range_ENABLE_INSTALL ${protobuf_INSTALL} CACHE BOOL "Set install") +- add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/third_party/utf8_range third_party/utf8_range) ++ add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/third_party/utf8_range third_party/utf8_range EXCLUDE_FROM_ALL) + include_directories(${CMAKE_CURRENT_SOURCE_DIR}/third_party/utf8_range) + endif () + diff --git a/user/protobuf/protoc-cmake.patch b/user/protobuf/protoc-cmake.patch new file mode 100644 index 0000000..4c1ae7a --- /dev/null +++ b/user/protobuf/protoc-cmake.patch @@ -0,0 +1,27 @@ +Patch-Source: https://github.com/protocolbuffers/protobuf/pull/13206 +-- +From 2e62ef1eaa2e712afc5f87aa2c55d478fe96230d Mon Sep 17 00:00:00 2001 +From: Antonio Rojas +Date: Wed, 5 Jul 2023 13:03:11 +0200 +Subject: [PATCH] Handle BUILD_TYPE=None in protobuf-module.cmake + +Fixes Protobuf_PROTOC_EXECUTABLE being undefined in that case. +--- + cmake/protobuf-module.cmake.in | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/cmake/protobuf-module.cmake.in b/cmake/protobuf-module.cmake.in +index 0bb05e38fad..e5b2b2e4b3a 100644 +--- a/cmake/protobuf-module.cmake.in ++++ b/cmake/protobuf-module.cmake.in +@@ -153,6 +153,10 @@ if(NOT Protobuf_PROTOC_EXECUTABLE AND TARGET protobuf::protoc) + get_target_property(Protobuf_PROTOC_EXECUTABLE protobuf::protoc + IMPORTED_LOCATION_NOCONFIG) + endif() ++ if(NOT EXISTS "${Protobuf_PROTOC_EXECUTABLE}") ++ get_target_property(Protobuf_PROTOC_EXECUTABLE protobuf::protoc ++ IMPORTED_LOCATION_NONE) ++ endif() + endif() + + # Version info variable diff --git a/user/protobuf/ruby-fix-cflags.patch b/user/protobuf/ruby-fix-cflags.patch new file mode 100644 index 0000000..24b1d57 --- /dev/null +++ b/user/protobuf/ruby-fix-cflags.patch @@ -0,0 +1,18 @@ +Using builder flags + +diff --git a/ruby/ext/google/protobuf_c/extconf.rb b/ruby/ext/google/protobuf_c/extconf.rb +index b7c439b..0bbc15c 100755 +--- a/ruby/ext/google/protobuf_c/extconf.rb ++++ b/ruby/ext/google/protobuf_c/extconf.rb +@@ -7,9 +7,9 @@ ext_name = "google/protobuf_c" + dir_config(ext_name) + + if RUBY_PLATFORM =~ /darwin/ || RUBY_PLATFORM =~ /linux/ || RUBY_PLATFORM =~ /freebsd/ +- $CFLAGS += " -std=gnu99 -O3 -DNDEBUG -fvisibility=hidden -Wall -Wsign-compare -Wno-declaration-after-statement" ++ $CFLAGS += " -std=gnu99 -DNDEBUG -fvisibility=hidden -Wall -Wsign-compare -Wno-declaration-after-statement" + else +- $CFLAGS += " -std=gnu99 -O3 -DNDEBUG" ++ $CFLAGS += " -std=gnu99 -DNDEBUG" + end + + if RUBY_PLATFORM =~ /linux/ diff --git a/user/protobuf/skip-failing-tests.patch b/user/protobuf/skip-failing-tests.patch new file mode 100644 index 0000000..be0c71b --- /dev/null +++ b/user/protobuf/skip-failing-tests.patch @@ -0,0 +1,99 @@ +diff --git a/src/google/protobuf/any_test.cc b/src/google/protobuf/any_test.cc +index 8b544d9..0f27dbe 100644 +--- a/src/google/protobuf/any_test.cc ++++ b/src/google/protobuf/any_test.cc +@@ -62,13 +62,6 @@ TEST(AnyTest, TestPackAndUnpack) { + EXPECT_EQ(12345, submessage.int32_value()); + } + +-TEST(AnyTest, TestPackFromSerializationExceedsSizeLimit) { +- protobuf_unittest::TestAny submessage; +- submessage.mutable_text()->resize(INT_MAX, 'a'); +- protobuf_unittest::TestAny message; +- EXPECT_FALSE(message.mutable_any_value()->PackFrom(submessage)); +-} +- + TEST(AnyTest, TestUnpackWithTypeMismatch) { + protobuf_unittest::TestAny payload; + payload.set_int32_value(13); +diff --git a/src/google/protobuf/arena_unittest.cc b/src/google/protobuf/arena_unittest.cc +index 4832cff..aa45a25 100644 +--- a/src/google/protobuf/arena_unittest.cc ++++ b/src/google/protobuf/arena_unittest.cc +@@ -1392,11 +1392,11 @@ TEST(ArenaTest, SpaceAllocated_and_Used) { + options.initial_block_size = arena_block.size(); + Arena arena_2(options); + EXPECT_EQ(1024, arena_2.SpaceAllocated()); +- EXPECT_EQ(0, arena_2.SpaceUsed()); ++// EXPECT_EQ(0, arena_2.SpaceUsed()); + EXPECT_EQ(1024, arena_2.Reset()); + Arena::CreateArray(&arena_2, 55); + EXPECT_EQ(1024, arena_2.SpaceAllocated()); +- EXPECT_EQ(Align8(55), arena_2.SpaceUsed()); ++// EXPECT_EQ(Align8(55), arena_2.SpaceUsed()); + EXPECT_EQ(1024, arena_2.Reset()); + } + +@@ -1460,11 +1460,11 @@ TEST(ArenaTest, BlockSizeSmallerThanAllocation) { + + *Arena::Create(&arena) = 42; + EXPECT_GE(arena.SpaceAllocated(), 8); +- EXPECT_EQ(8, arena.SpaceUsed()); ++// EXPECT_EQ(8, arena.SpaceUsed()); + + *Arena::Create(&arena) = 42; + EXPECT_GE(arena.SpaceAllocated(), 16); +- EXPECT_EQ(16, arena.SpaceUsed()); ++// EXPECT_EQ(16, arena.SpaceUsed()); + } + } + +diff --git a/src/google/protobuf/extension_set_unittest.cc b/src/google/protobuf/extension_set_unittest.cc +index ccd1c9b..f420da3 100644 +--- a/src/google/protobuf/extension_set_unittest.cc ++++ b/src/google/protobuf/extension_set_unittest.cc +@@ -871,17 +871,17 @@ TEST(ExtensionSetTest, SpaceUsedExcludingSelf) { + } while (0) + + TEST_REPEATED_EXTENSIONS_SPACE_USED(int32, int32_t, 101); +- TEST_REPEATED_EXTENSIONS_SPACE_USED(int64, int64_t, 102); ++ //TEST_REPEATED_EXTENSIONS_SPACE_USED(int64, int64_t, 102); + TEST_REPEATED_EXTENSIONS_SPACE_USED(uint32, uint32_t, 103); +- TEST_REPEATED_EXTENSIONS_SPACE_USED(uint64, uint64_t, 104); ++ //TEST_REPEATED_EXTENSIONS_SPACE_USED(uint64, uint64_t, 104); + TEST_REPEATED_EXTENSIONS_SPACE_USED(sint32, int32_t, 105); +- TEST_REPEATED_EXTENSIONS_SPACE_USED(sint64, int64_t, 106); ++ //TEST_REPEATED_EXTENSIONS_SPACE_USED(sint64, int64_t, 106); + TEST_REPEATED_EXTENSIONS_SPACE_USED(fixed32, uint32_t, 107); +- TEST_REPEATED_EXTENSIONS_SPACE_USED(fixed64, uint64_t, 108); ++ //TEST_REPEATED_EXTENSIONS_SPACE_USED(fixed64, uint64_t, 108); + TEST_REPEATED_EXTENSIONS_SPACE_USED(sfixed32, int32_t, 109); +- TEST_REPEATED_EXTENSIONS_SPACE_USED(sfixed64, int64_t, 110); ++ //TEST_REPEATED_EXTENSIONS_SPACE_USED(sfixed64, int64_t, 110); + TEST_REPEATED_EXTENSIONS_SPACE_USED(float, float, 111); +- TEST_REPEATED_EXTENSIONS_SPACE_USED(double, double, 112); ++ //TEST_REPEATED_EXTENSIONS_SPACE_USED(double, double, 112); + TEST_REPEATED_EXTENSIONS_SPACE_USED(bool, bool, true); + TEST_REPEATED_EXTENSIONS_SPACE_USED(nested_enum, int, + unittest::TestAllTypes::FOO); +diff --git a/src/google/protobuf/wire_format_unittest.inc b/src/google/protobuf/wire_format_unittest.inc +index 4c7d047..7906cfa 100644 +--- a/src/google/protobuf/wire_format_unittest.inc ++++ b/src/google/protobuf/wire_format_unittest.inc +@@ -1537,6 +1537,7 @@ TEST_F(Utf8ValidationTest, ParseRepeatedString) { + + // Test the old VerifyUTF8String() function, which may still be called by old + // generated code. ++#if 0 + TEST_F(Utf8ValidationTest, OldVerifyUTF8String) { + std::string data(kInvalidUTF8String); + +@@ -1555,7 +1556,7 @@ TEST_F(Utf8ValidationTest, OldVerifyUTF8String) { + WireFormat::SERIALIZE); + } + } +- ++#endif + + TEST(RepeatedVarint, Int32) { + RepeatedField v; diff --git a/user/protobuf/soversion.patch b/user/protobuf/soversion.patch new file mode 100644 index 0000000..25d6959 --- /dev/null +++ b/user/protobuf/soversion.patch @@ -0,0 +1,39 @@ +Patch-Source: https://gitlab.archlinux.org/archlinux/packaging/packages/protobuf/-/blob/e93df92fead2d46cc2825a866af3f402d498439c/soversion.patch +use an soversion that actually makes sense and not just the full pkgver +-- +diff --git a/cmake/libprotobuf-lite.cmake b/cmake/libprotobuf-lite.cmake +index 9b1de677b4f..276c99c489e 100644 +--- a/cmake/libprotobuf-lite.cmake ++++ b/cmake/libprotobuf-lite.cmake +@@ -30,6 +30,7 @@ if(protobuf_BUILD_SHARED_LIBS) + endif() + set_target_properties(libprotobuf-lite PROPERTIES + VERSION ${protobuf_VERSION} ++ SOVERSION ${protobuf_VERSION_MINOR} + OUTPUT_NAME ${LIB_PREFIX}protobuf-lite + DEBUG_POSTFIX "${protobuf_DEBUG_POSTFIX}") + add_library(protobuf::libprotobuf-lite ALIAS libprotobuf-lite) +diff --git a/cmake/libprotobuf.cmake b/cmake/libprotobuf.cmake +index aa3efc9a68a..0f34d20b97d 100644 +--- a/cmake/libprotobuf.cmake ++++ b/cmake/libprotobuf.cmake +@@ -33,6 +33,7 @@ if(protobuf_BUILD_SHARED_LIBS) + endif() + set_target_properties(libprotobuf PROPERTIES + VERSION ${protobuf_VERSION} ++ SOVERSION ${protobuf_VERSION_MINOR} + OUTPUT_NAME ${LIB_PREFIX}protobuf + DEBUG_POSTFIX "${protobuf_DEBUG_POSTFIX}") + add_library(protobuf::libprotobuf ALIAS libprotobuf) +diff --git a/cmake/libprotoc.cmake b/cmake/libprotoc.cmake +index 72b4a1abb92..91e8bbeb04e 100644 +--- a/cmake/libprotoc.cmake ++++ b/cmake/libprotoc.cmake +@@ -24,6 +24,7 @@ endif() + set_target_properties(libprotoc PROPERTIES + COMPILE_DEFINITIONS LIBPROTOC_EXPORTS + VERSION ${protobuf_VERSION} ++ SOVERSION ${protobuf_VERSION_MINOR} + OUTPUT_NAME ${LIB_PREFIX}protoc + DEBUG_POSTFIX "${protobuf_DEBUG_POSTFIX}") + add_library(protobuf::libprotoc ALIAS libprotoc) diff --git a/user/protobuf/trim-rakefile.patch b/user/protobuf/trim-rakefile.patch new file mode 100644 index 0000000..d8a3b87 --- /dev/null +++ b/user/protobuf/trim-rakefile.patch @@ -0,0 +1,79 @@ +diff --git a/ruby/Rakefile b/ruby/Rakefile +index c05e115..20144b7 100644 +--- a/ruby/Rakefile ++++ b/ruby/Rakefile +@@ -1,6 +1,4 @@ + require "rubygems" +-require "rubygems/package_task" +-require "rake/extensiontask" unless RUBY_PLATFORM == "java" + require "rake/testtask" + + spec = Gem::Specification.load("google-protobuf.gemspec") +@@ -95,57 +93,6 @@ else + FileUtils.cp(utf8_root+"/range2-neon.c", "ext/google/protobuf_c") + FileUtils.cp(utf8_root+"/range2-sse.c", "ext/google/protobuf_c") + end +- +- Rake::ExtensionTask.new("protobuf_c", spec) do |ext| +- unless RUBY_PLATFORM =~ /darwin/ +- # TODO: also set "no_native to true" for mac if possible. As is, +- # "no_native" can only be set if the RUBY_PLATFORM doing +- # cross-compilation is contained in the "ext.cross_platform" array. +- ext.no_native = true +- end +- ext.ext_dir = "ext/google/protobuf_c" +- ext.lib_dir = "lib/google" +- ext.cross_compile = true +- ext.cross_platform = [ +- 'x86-mingw32', 'x64-mingw32', 'x64-mingw-ucrt', +- 'x86_64-linux', 'x86-linux', +- 'x86_64-darwin', 'arm64-darwin', +- ] +- end +- +- task 'gem:java' do +- sh "rm Gemfile.lock" +- require 'rake_compiler_dock' +- # Specify the repo root as the working and mount directory to provide access +- # to the java directory +- repo_root = File.realdirpath File.join(Dir.pwd, '..') +- RakeCompilerDock.sh <<-"EOT", platform: 'jruby', rubyvm: :jruby, mountdir: repo_root, workdir: repo_root +- sudo apt-get install maven -y && \ +- cd java && mvn install -Dmaven.test.skip=true && cd ../ruby && \ +- bundle && \ +- IN_DOCKER=true rake compile gem +- EOT +- end +- +- task 'gem:windows' do +- sh "rm Gemfile.lock" +- require 'rake_compiler_dock' +- ['x86-mingw32', 'x64-mingw32', 'x64-mingw-ucrt', 'x86_64-linux', 'x86-linux'].each do |plat| +- RakeCompilerDock.sh <<-"EOT", platform: plat +- bundle && \ +- IN_DOCKER=true rake native:#{plat} pkg/#{spec.full_name}-#{plat}.gem RUBY_CC_VERSION=3.1.0:3.0.0:2.7.0:2.6.0 +- EOT +- end +- end +- +- if RUBY_PLATFORM =~ /darwin/ +- task 'gem:native' do +- system "rake genproto" +- system "rake cross native gem RUBY_CC_VERSION=3.1.0:3.0.0:2.7.0:2.6.0" +- end +- else +- task 'gem:native' => [:genproto, 'gem:windows', 'gem:java'] +- end + end + + task :genproto => genproto_output +@@ -154,9 +101,6 @@ task :clean do + sh "rm -f #{genproto_output.join(' ')}" + end + +-Gem::PackageTask.new(spec) do |pkg| +-end +- + # Skip build/genproto in Bazel builds, where we expect this to + # be done already. + Rake::TestTask.new(:test => ENV['BAZEL'] == 'true' ? [] : [:build, :genproto]) do |t| diff --git a/user/py3-microdata/APKBUILD b/user/py3-microdata/APKBUILD new file mode 100644 index 0000000..7d310b6 --- /dev/null +++ b/user/py3-microdata/APKBUILD @@ -0,0 +1,32 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-microdata +#_pkgreal is used by apkbuild-pypi to find modules at PyPI +_pkgreal=microdata +pkgver=0.8.0 +pkgrel=1 +pkgdesc="html5lib extension for parsing microdata" +url="https://pypi.python.org/project/microdata" +license="CC0-1.0" +arch="noarch" +depends="py3-html5lib" +checkdepends="python3-dev" +makedepends="py3-setuptools py3-gpep517 py3-wheel" +source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/m/microdata/microdata-$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" +subpackages="$pkgname-pyc" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +85ce750f11960e4bcae1cd7f7babbb43e47ad2e0133cc66fb8abb153b1471296b11dc642bee91059f89b45da363fcdd10cfe3770b43d3e7d4d82ff10ab700743 py3-microdata-0.8.0.tar.gz +" diff --git a/user/py3-python3-saml/APKBUILD b/user/py3-python3-saml/APKBUILD new file mode 100644 index 0000000..450d060 --- /dev/null +++ b/user/py3-python3-saml/APKBUILD @@ -0,0 +1,30 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-python3-saml +_pkgreal=python3-saml +pkgver=1.16.0 +pkgrel=1 +pkgdesc="Saml Python Toolkit. Add SAML support to your Python software using this library" +url="http://packages.python.org/pypi/python3-saml" +arch="noarch" +license="MIT" +depends="py3-xmlsec py3-isodate py3-lxml" +makedepends="py3-setuptools py3-gpep517 py3-wheel poetry" +source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/p/python3-saml/python3-saml-$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" +subpackages="$pkgname-pyc" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +715c96f701be3de9002a37198d01715519f11173d37d2870b8d6f20e007440368f76340abfa17ad8556560296a8dfaa999f1774ccb5dd3d9b04b125afc06ac31 py3-python3-saml-1.16.0.tar.gz +" diff --git a/user/py3-xmlsec/253_pkcs11-support.patch b/user/py3-xmlsec/253_pkcs11-support.patch new file mode 100644 index 0000000..e8be41d --- /dev/null +++ b/user/py3-xmlsec/253_pkcs11-support.patch @@ -0,0 +1,925 @@ +From a7f95d55cd660d1a212fa76a527063b3b7dbe8bb Mon Sep 17 00:00:00 2001 +From: Dan Vella +Date: Fri, 17 Mar 2023 13:58:25 +0100 +Subject: [PATCH 1/7] Added changes to enable 3.11 builds + +--- + .appveyor.yml | 4 ++++ + .github/workflows/macosx.yml | 2 +- + .github/workflows/manylinux.yml | 6 +++--- + .github/workflows/opensuse-tumbleweed.yml | 2 +- + .github/workflows/sdist.yml | 4 ++-- + .travis.yml | 3 +++ + setup.py | 1 + + 7 files changed, 15 insertions(+), 7 deletions(-) + +diff --git a/setup.py b/setup.py +index 9a3c927..5c7e0da 100644 +--- a/setup.py ++++ b/setup.py +@@ -533,6 +533,7 @@ def prepare_static_build_linux(self): + 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3.9', ++ 'Programming Language :: Python :: 3.11', + 'Topic :: Text Processing :: Markup :: XML', + 'Typing :: Typed', + ], + +From b7683774f747c7aed6a0b30e6045da679bc68760 Mon Sep 17 00:00:00 2001 +From: Dan Vella +Date: Fri, 17 Mar 2023 14:00:32 +0100 +Subject: [PATCH 2/7] Added changes to enable 3.11 builds + +--- + .appveyor.yml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +From bddf28e68a2509a287f9889aaeadc3adab80ccbc Mon Sep 17 00:00:00 2001 +From: Dan Vella +Date: Fri, 17 Mar 2023 14:52:40 +0100 +Subject: [PATCH 3/7] bumped isort to 5.11.5 + +--- + .pre-commit-config.yaml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +From 2c58d43eedf72590e3e201252f5fc5ddae36f8c6 Mon Sep 17 00:00:00 2001 +From: Tomas Divis +Date: Wed, 22 Mar 2023 20:36:45 +0100 +Subject: [PATCH 4/7] Fix #244 - Fix failing test with libxmlsec-1.2.36, also + make libxmlsec version available from Python. + +--- + src/main.c | 13 ++++ + tests/data/sign5-out-xmlsec_1_2_36_to_37.xml | 67 ++++++++++++++++++++ + tests/test_ds.py | 6 +- + 3 files changed, 85 insertions(+), 1 deletion(-) + create mode 100644 tests/data/sign5-out-xmlsec_1_2_36_to_37.xml + +diff --git a/src/main.c b/src/main.c +index ffcae14..5773db3 100644 +--- a/src/main.c ++++ b/src/main.c +@@ -119,6 +119,13 @@ static PyObject* PyXmlSec_PyShutdown(PyObject* self) { + Py_RETURN_NONE; + } + ++static char PyXmlSec_GetLibXmlSecVersion__doc__[] = \ ++ "get_libxmlsec_version() -> tuple\n" ++ "Returns Version tuple of wrapped libxml library."; ++static PyObject* PyXmlSec_GetLibXmlSecVersion() { ++ return Py_BuildValue("(iii)", XMLSEC_VERSION_MAJOR, XMLSEC_VERSION_MINOR, XMLSEC_VERSION_SUBMINOR); ++} ++ + static char PyXmlSec_PyEnableDebugOutput__doc__[] = \ + "enable_debug_trace(enabled) -> None\n" + "Enables or disables calling LibXML2 callback from the default errors callback.\n\n" +@@ -386,6 +393,12 @@ static PyMethodDef PyXmlSec_MainMethods[] = { + METH_NOARGS, + PyXmlSec_PyShutdown__doc__ + }, ++ { ++ "get_libxmlsec_version", ++ (PyCFunction)PyXmlSec_GetLibXmlSecVersion, ++ METH_NOARGS, ++ PyXmlSec_GetLibXmlSecVersion__doc__ ++ }, + { + "enable_debug_trace", + (PyCFunction)PyXmlSec_PyEnableDebugOutput, +diff --git a/tests/data/sign5-out-xmlsec_1_2_36_to_37.xml b/tests/data/sign5-out-xmlsec_1_2_36_to_37.xml +new file mode 100644 +index 0000000..f359b13 +--- /dev/null ++++ b/tests/data/sign5-out-xmlsec_1_2_36_to_37.xml +@@ -0,0 +1,67 @@ ++ ++ ++ ++ ++ Hello, World! ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++HjY8ilZAIEM2tBbPn5mYO1ieIX4= ++ ++ ++SIaj/6KY3C1SmDXU2++Gm31U1xTadFp04WhBgfsJFbxrL+q7GKSKN9kfQ+UpN9+i ++D5fWmuavXEHe4Gw6RMaMEkq2URQo7F68+d5J/ajq8/l4n+xE6/reGScVwT6L4dEP ++XXVJcAi2ZnQ3O7GTNvNGCPibL9mUcyCWBFZ92Uemtc/vJFCQ7ZyKMdMfACgxOwyN ++T/9971oog241/2doudhonc0I/3mgPYWkZdX6yvr62mEjnG+oUZkhWYJ4ewZJ4hM4 ++JjbFqZO+OEzDRSbw3DkmuBA/mtlx+3t13SESfEub5hqoMdVmtth/eTb64dsPdl9r ++3k1ACVX9f8aHfQQdJOmLFQ== ++ ++ ++ ++ ++ ++ ++Test Issuer ++1 ++ ++MIIE3zCCBEigAwIBAgIBBTANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCVVMx ++EzARBgNVBAgTCkNhbGlmb3JuaWExEjAQBgNVBAcTCVN1bm55dmFsZTE9MDsGA1UE ++ChM0WE1MIFNlY3VyaXR5IExpYnJhcnkgKGh0dHA6Ly93d3cuYWxla3NleS5jb20v ++eG1sc2VjKTEZMBcGA1UECxMQUm9vdCBDZXJ0aWZpY2F0ZTEWMBQGA1UEAxMNQWxl ++a3NleSBTYW5pbjEhMB8GCSqGSIb3DQEJARYSeG1sc2VjQGFsZWtzZXkuY29tMB4X ++DTAzMDMzMTA0MDIyMloXDTEzMDMyODA0MDIyMlowgb8xCzAJBgNVBAYTAlVTMRMw ++EQYDVQQIEwpDYWxpZm9ybmlhMT0wOwYDVQQKEzRYTUwgU2VjdXJpdHkgTGlicmFy ++eSAoaHR0cDovL3d3dy5hbGVrc2V5LmNvbS94bWxzZWMpMSEwHwYDVQQLExhFeGFt ++cGxlcyBSU0EgQ2VydGlmaWNhdGUxFjAUBgNVBAMTDUFsZWtzZXkgU2FuaW4xITAf ++BgkqhkiG9w0BCQEWEnhtbHNlY0BhbGVrc2V5LmNvbTCCASIwDQYJKoZIhvcNAQEB ++BQADggEPADCCAQoCggEBAJe4/rQ/gzV4FokE7CthjL/EXwCBSkXm2c3p4jyXO0Wt ++quaNC3dxBwFPfPl94hmq3ZFZ9PHPPbp4RpYRnLZbRjlzVSOq954AXOXpSew7nD+E ++mTqQrd9+ZIbGJnLOMQh5fhMVuOW/1lYCjWAhTCcYZPv7VXD2M70vVXDVXn6ZrqTg ++qkVHE6gw1aCKncwg7OSOUclUxX8+Zi10v6N6+PPslFc5tKwAdWJhVLTQ4FKG+F53 ++7FBDnNK6p4xiWryy/vPMYn4jYGvHUUk3eH4lFTCr+rSuJY8i/KNIf/IKim7g/o3w ++Ae3GM8xrof2mgO8GjK/2QDqOQhQgYRIf4/wFsQXVZcMCAwEAAaOCAVcwggFTMAkG ++A1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRp ++ZmljYXRlMB0GA1UdDgQWBBQkhCzy1FkgYosuXIaQo6owuicanDCB+AYDVR0jBIHw ++MIHtgBS0ue+a5pcOaGUemM76VQ2JBttMfKGB0aSBzjCByzELMAkGA1UEBhMCVVMx ++EzARBgNVBAgTCkNhbGlmb3JuaWExEjAQBgNVBAcTCVN1bm55dmFsZTE9MDsGA1UE ++ChM0WE1MIFNlY3VyaXR5IExpYnJhcnkgKGh0dHA6Ly93d3cuYWxla3NleS5jb20v ++eG1sc2VjKTEZMBcGA1UECxMQUm9vdCBDZXJ0aWZpY2F0ZTEWMBQGA1UEAxMNQWxl ++a3NleSBTYW5pbjEhMB8GCSqGSIb3DQEJARYSeG1sc2VjQGFsZWtzZXkuY29tggEA ++MA0GCSqGSIb3DQEBBAUAA4GBALU/mzIxSv8vhDuomxFcplzwdlLZbvSQrfoNkMGY ++1UoS3YJrN+jZLWKSyWE3mIaPpElqXiXQGGkwD5iPQ1iJMbI7BeLvx6ZxX/f+c8Wn ++ss0uc1NxfahMaBoyG15IL4+beqO182fosaKJTrJNG3mc//ANGU9OsQM9mfBEt4oL ++NJ2D ++ ++ ++ ++ ++ +diff --git a/tests/test_ds.py b/tests/test_ds.py +index 694ad43..38f0b25 100644 +--- a/tests/test_ds.py ++++ b/tests/test_ds.py +@@ -182,7 +182,11 @@ def test_sign_case5(self): + self.assertEqual("rsakey.pem", ctx.key.name) + + ctx.sign(sign) +- self.assertEqual(self.load_xml("sign5-out.xml"), root) ++ if (1, 2, 36) <= xmlsec.get_libxmlsec_version() <= (1, 2, 37): ++ expected_xml_file = 'sign5-out-xmlsec_1_2_36_to_37.xml' ++ else: ++ expected_xml_file = 'sign5-out.xml' ++ self.assertEqual(self.load_xml(expected_xml_file), root) + + def test_sign_binary_bad_args(self): + ctx = xmlsec.SignatureContext() + +From 1cf6785b3e06c2b8f6cac1266cf8f1934650bc4b Mon Sep 17 00:00:00 2001 +From: Tomas Divis +Date: Wed, 21 Dec 2022 14:01:14 +0100 +Subject: [PATCH 5/7] Fix #164 - Add support for loading keys from engine (e.g. + pkcs11). + +--- + README.rst | 2 +- + src/keys.c | 47 +++++++++++++++++++++++++++++++++++++++++ + src/xmlsec/__init__.pyi | 2 ++ + 3 files changed, 50 insertions(+), 1 deletion(-) + +diff --git a/README.rst b/README.rst +index 34bdd37..e192465 100644 +--- a/README.rst ++++ b/README.rst +@@ -37,7 +37,7 @@ Check the `examples `_ se + Requirements + ************ + - ``libxml2 >= 2.9.1`` +-- ``libxmlsec1 >= 1.2.18`` ++- ``libxmlsec1 >= 1.2.33`` + + Install + ******* +diff --git a/src/keys.c b/src/keys.c +index 1362b12..1440331 100644 +--- a/src/keys.c ++++ b/src/keys.c +@@ -185,6 +185,47 @@ static PyObject* PyXmlSec_KeyFromFile(PyObject* self, PyObject* args, PyObject* + return NULL; + } + ++static const char PyXmlSec_KeyFromEngine__doc__[] = \ ++ "from_engine(engine_and_key_id) -> xmlsec.Key\n" ++ "Loads PKI key from an engine.\n\n" ++ ":param engine_and_key_id: engine and key id, i.e. 'pkcs11;pkcs11:token=XmlsecToken;object=XmlsecKey;pin-value=password'\n" ++ ":type engine_and_key_id: :class:`str`, " ++ ":return: pointer to newly created key\n" ++ ":rtype: :class:`~xmlsec.Key`"; ++static PyObject* PyXmlSec_KeyFromEngine(PyObject* self, PyObject* args, PyObject* kwargs) { ++ static char *kwlist[] = {"engine_and_key_id", NULL}; ++ ++ const char* engine_and_key_id = NULL; ++ PyXmlSec_Key* key = NULL; ++ ++ PYXMLSEC_DEBUG("load key from engine - start"); ++ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s:from_engine", kwlist, &engine_and_key_id)) { ++ goto ON_FAIL; ++ } ++ ++ if ((key = PyXmlSec_NewKey1((PyTypeObject*)self)) == NULL) goto ON_FAIL; ++ ++ Py_BEGIN_ALLOW_THREADS; ++ key->handle = xmlSecCryptoAppKeyLoad(engine_and_key_id, xmlSecKeyDataFormatEngine, NULL, xmlSecCryptoAppGetDefaultPwdCallback(), ++ (void*)engine_and_key_id); ++ Py_END_ALLOW_THREADS; ++ ++ if (key->handle == NULL) { ++ PyXmlSec_SetLastError("cannot read key"); ++ goto ON_FAIL; ++ } ++ ++ key->is_own = 1; ++ ++ PYXMLSEC_DEBUG("load key from engine - ok"); ++ return (PyObject*)key; ++ ++ON_FAIL: ++ PYXMLSEC_DEBUG("load key from engine - fail"); ++ Py_XDECREF(key); ++ return NULL; ++} ++ + static const char PyXmlSec_KeyGenerate__doc__[] = \ + "generate(klass, size, type) -> xmlsec.Key\n" + "Generates key of kind ``klass`` with ``size`` and ``type``.\n\n" +@@ -494,6 +535,12 @@ static PyMethodDef PyXmlSec_KeyMethods[] = { + METH_CLASS|METH_VARARGS|METH_KEYWORDS, + PyXmlSec_KeyFromFile__doc__ + }, ++ { ++ "from_engine", ++ (PyCFunction)PyXmlSec_KeyFromEngine, ++ METH_CLASS|METH_VARARGS|METH_KEYWORDS, ++ PyXmlSec_KeyFromEngine__doc__ ++ }, + { + "generate", + (PyCFunction)PyXmlSec_KeyGenerate, +diff --git a/src/xmlsec/__init__.pyi b/src/xmlsec/__init__.pyi +index 56356e5..6c326f5 100644 +--- a/src/xmlsec/__init__.pyi ++++ b/src/xmlsec/__init__.pyi +@@ -49,6 +49,8 @@ class Key: + @classmethod + def from_file(cls: type[Self], file: GenericPath[AnyStr] | IO[AnyStr], format: int, password: str | None = ...) -> Self: ... + @classmethod ++ def from_engine(cls: type[Self], engine_and_key_id: AnyStr) -> Self: ... ++ @classmethod + def from_memory(cls: type[Self], data: AnyStr, format: int, password: str | None = ...) -> Self: ... + @classmethod + def generate(cls: type[Self], klass: KeyData, size: int, type: int) -> Self: ... + +From 0b5939fc65e98cebb669d311b4fb58844bf887e5 Mon Sep 17 00:00:00 2001 +From: Tomas Divis +Date: Thu, 13 Apr 2023 14:28:02 +0200 +Subject: [PATCH 6/7] Fix #164 - Add tests for pkcs11 (softhsm) key. + +--- + .github/workflows/sdist.yml | 3 +- + tests/softhsm_setup.py | 265 ++++++++++++++++++++++++++++++++++++ + tests/test_pkcs11.py | 57 ++++++++ + 3 files changed, 323 insertions(+), 2 deletions(-) + create mode 100644 tests/softhsm_setup.py + create mode 100644 tests/test_pkcs11.py + +diff --git a/tests/softhsm_setup.py b/tests/softhsm_setup.py +new file mode 100644 +index 0000000..0a7c37d +--- /dev/null ++++ b/tests/softhsm_setup.py +@@ -0,0 +1,265 @@ ++""" ++Testing the PKCS#11 shim layer. ++Heavily inspired by from https://github.com/IdentityPython/pyXMLSecurity by leifj ++under licence "As is", see https://github.com/IdentityPython/pyXMLSecurity/blob/master/LICENSE.txt ++""" ++ ++import logging ++import os ++import shutil ++import subprocess ++import tempfile ++import traceback ++import unittest ++from typing import Dict, List, Optional, Tuple ++ ++DATA_DIR = os.path.join(os.path.dirname(__file__), "data") ++ ++ ++def paths_for_component(component: str, default_paths: List[str]): ++ env_path = os.environ.get(component) ++ return [env_path] if env_path else default_paths ++ ++ ++def find_alts(component_name, alts: List[str]) -> str: ++ for a in alts: ++ if os.path.exists(a): ++ return a ++ raise unittest.SkipTest("Required component is missing: {}".format(component_name)) ++ ++ ++def run_cmd(args, softhsm_conf=None) -> Tuple[bytes, bytes]: ++ env = {} ++ if softhsm_conf is not None: ++ env['SOFTHSM_CONF'] = softhsm_conf ++ env['SOFTHSM2_CONF'] = softhsm_conf ++ proc = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) ++ out, err = proc.communicate() ++ if err is not None and len(err) > 0: ++ logging.error(err) ++ if out is not None and len(out) > 0: ++ logging.debug(out) ++ rv = proc.wait() ++ if rv: ++ with open(softhsm_conf) as f: ++ conf = f.read() ++ msg = '[cmd: {cmd}] [code: {code}] [stdout: {out}] [stderr: {err}] [config: {conf}]' ++ msg = msg.format( ++ cmd=" ".join(args), code=rv, out=out.strip(), err=err.strip(), conf=conf, ++ ) ++ raise RuntimeError(msg) ++ return out, err ++ ++ ++component_default_paths: Dict[str, List[str]] = { ++ 'P11_MODULE': [ ++ '/usr/lib/softhsm/libsofthsm2.so', ++ '/usr/lib/x86_64-linux-gnu/softhsm/libsofthsm2.so', ++ '/usr/lib/softhsm/libsofthsm.so', ++ '/usr/lib64/softhsm/libsofthsm2.so', ++ ], ++ 'P11_ENGINE': [ ++ '/usr/lib/ssl/engines/libpkcs11.so', ++ '/usr/lib/engines/engine_pkcs11.so', ++ '/usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11.so', ++ '/usr/lib64/engines-1.1/pkcs11.so', ++ '/usr/lib64/engines-1.1/libpkcs11.so', ++ '/usr/lib64/engines-3/pkcs11.so', ++ '/usr/lib64/engines-3/libpkcs11.so', ++ '/usr/lib/x86_64-linux-gnu/engines-3/pkcs11.so', ++ '/usr/lib/x86_64-linux-gnu/engines-3/libpkcs11.so', ++ ], ++ 'PKCS11_TOOL': [ ++ '/usr/bin/pkcs11-tool', ++ ], ++ 'SOFTHSM': [ ++ '/usr/bin/softhsm2-util', ++ '/usr/bin/softhsm', ++ ], ++ 'OPENSSL': [ ++ '/usr/bin/openssl', ++ ], ++} ++ ++component_path: Dict[str, str] = { ++ component_name: find_alts(component_name, paths_for_component(component_name, default_paths)) ++ for component_name, default_paths in component_default_paths.items() ++} ++ ++softhsm_version = 1 ++if component_path['SOFTHSM'].endswith('softhsm2-util'): ++ softhsm_version = 2 ++ ++openssl_version = subprocess.check_output([component_path['OPENSSL'], ++ 'version'] ++ )[8:11].decode() ++ ++p11_test_files: List[str] = [] ++softhsm_conf: Optional[str] = None ++softhsm_db: Optional[str] = None ++ ++ ++def _temp_file() -> str: ++ f = tempfile.NamedTemporaryFile(delete=False) ++ p11_test_files.append(f.name) ++ return f.name ++ ++ ++def _temp_dir() -> str: ++ d = tempfile.mkdtemp() ++ p11_test_files.append(d) ++ return d ++ ++ ++@unittest.skipIf(component_path['P11_MODULE'] is None, "SoftHSM PKCS11 module not installed") ++def setup() -> None: ++ logging.debug("Creating test pkcs11 token using softhsm") ++ try: ++ global softhsm_conf ++ softhsm_conf = _temp_file() ++ logging.debug("Generating softhsm.conf") ++ with open(softhsm_conf, "w") as f: ++ if softhsm_version == 2: ++ softhsm_db = _temp_dir() ++ f.write(""" ++# Generated by test ++directories.tokendir = %s ++objectstore.backend = file ++log.level = DEBUG ++""" % softhsm_db) ++ else: ++ softhsm_db = _temp_file() ++ f.write(""" ++# Generated by test ++0:%s ++""" % softhsm_db) ++ ++ logging.debug("Initializing the token") ++ out, err = run_cmd([component_path['SOFTHSM'], ++ '--slot', '0', ++ '--label', 'test', ++ '--init-token', ++ '--pin', 'secret1', ++ '--so-pin', 'secret2'], ++ softhsm_conf=softhsm_conf) ++ ++ # logging.debug("Generating 1024 bit RSA key in token") ++ # run_cmd([component_path['PKCS11_TOOL'], ++ # '--module', component_path['P11_MODULE'], ++ # '-l', ++ # '-k', ++ # '--key-type', 'rsa:1024', ++ # '--id', 'a1b2', ++ # '--label', 'test', ++ # '--pin', 'secret1'], softhsm_conf=softhsm_conf) ++ ++ hash_priv_key = _temp_file() ++ logging.debug("Converting test private key to format for softhsm") ++ run_cmd([component_path['OPENSSL'], 'pkcs8', ++ '-topk8', ++ '-inform', 'PEM', ++ '-outform', 'PEM', ++ '-nocrypt', ++ '-in', os.path.join(DATA_DIR, 'rsakey.pem'), ++ '-out', hash_priv_key], softhsm_conf=softhsm_conf) ++ ++ logging.debug("Importing the test key to softhsm") ++ run_cmd([component_path['SOFTHSM'], ++ '--import', hash_priv_key, ++ '--token', 'test', ++ '--id', 'a1b2', ++ '--label', 'test', ++ '--pin', 'secret1'], ++ softhsm_conf=softhsm_conf) ++ run_cmd([component_path['PKCS11_TOOL'], ++ '--module', component_path['P11_MODULE'], ++ '-l', ++ '--pin', 'secret1', '-O'], softhsm_conf=softhsm_conf) ++ signer_cert_pem = _temp_file() ++ openssl_conf = _temp_file() ++ logging.debug("Generating OpenSSL config for version {}".format(openssl_version)) ++ with open(openssl_conf, "w") as f: ++ # Might be needed with some versions of openssl, but in more recent versions dynamic_path breaks it. ++ # dynamic_path = ( ++ # "dynamic_path = %s" % component_path['P11_ENGINE'] ++ # if openssl_version.startswith(b'1.') ++ # else "" ++ # ) ++ f.write("\n".join([ ++ "openssl_conf = openssl_def", ++ "[openssl_def]", ++ "engines = engine_section", ++ "[engine_section]", ++ "pkcs11 = pkcs11_section", ++ "[req]", ++ "distinguished_name = req_distinguished_name", ++ "[req_distinguished_name]", ++ "[pkcs11_section]", ++ "engine_id = pkcs11", ++ # dynamic_path, ++ "MODULE_PATH = %s" % component_path['P11_MODULE'], ++ "init = 0", ++ ])) ++ ++ with open(openssl_conf, "r") as f: ++ logging.debug('-------- START DEBUG openssl_conf --------') ++ logging.debug(f.readlines()) ++ logging.debug('-------- END DEBUG openssl_conf --------') ++ logging.debug('-------- START DEBUG paths --------') ++ logging.debug(run_cmd(['ls', '-ld', component_path['P11_ENGINE']])) ++ logging.debug(run_cmd(['ls', '-ld', component_path['P11_MODULE']])) ++ logging.debug('-------- END DEBUG paths --------') ++ ++ signer_cert_der = _temp_file() ++ ++ logging.debug("Generating self-signed certificate") ++ run_cmd([component_path['OPENSSL'], 'req', ++ '-new', ++ '-x509', ++ '-subj', "/CN=Test Signer", ++ '-engine', 'pkcs11', ++ '-config', openssl_conf, ++ '-keyform', 'engine', ++ '-key', 'label_test', ++ '-passin', 'pass:secret1', ++ '-out', signer_cert_pem], softhsm_conf=softhsm_conf) ++ ++ run_cmd([component_path['OPENSSL'], 'x509', ++ '-inform', 'PEM', ++ '-outform', 'DER', ++ '-in', signer_cert_pem, ++ '-out', signer_cert_der], softhsm_conf=softhsm_conf) ++ ++ logging.debug("Importing certificate into token") ++ ++ run_cmd([component_path['PKCS11_TOOL'], ++ '--module', component_path['P11_MODULE'], ++ '-l', ++ '--slot-index', '0', ++ '--id', 'a1b2', ++ '--label', 'test', ++ '-y', 'cert', ++ '-w', signer_cert_der, ++ '--pin', 'secret1'], softhsm_conf=softhsm_conf) ++ ++ # TODO: Should be teardowned in teardown: ++ os.environ['SOFTHSM_CONF'] = softhsm_conf ++ os.environ['SOFTHSM2_CONF'] = softhsm_conf ++ ++ except Exception as ex: ++ print("-" * 64) ++ traceback.print_exc() ++ print("-" * 64) ++ logging.error("PKCS11 tests disabled: unable to initialize test token: %s" % ex) ++ raise ex ++ ++ ++def teardown() -> None: ++ global p11_test_files ++ for o in p11_test_files: ++ if os.path.exists(o): ++ if os.path.isdir(o): ++ shutil.rmtree(o) ++ else: ++ os.unlink(o) ++ p11_test_files = [] +diff --git a/tests/test_pkcs11.py b/tests/test_pkcs11.py +new file mode 100644 +index 0000000..accd29a +--- /dev/null ++++ b/tests/test_pkcs11.py +@@ -0,0 +1,57 @@ ++import xmlsec ++from tests import base ++from xmlsec import constants as consts ++ ++KEY_URL = "pkcs11;pkcs11:token=test;object=test;pin-value=secret1" ++ ++ ++def setUpModule(): ++ from tests import softhsm_setup ++ ++ softhsm_setup.setup() ++ ++ ++def tearDownModule(): ++ from tests import softhsm_setup ++ ++ softhsm_setup.teardown() ++ ++ ++class TestKeys(base.TestMemoryLeaks): ++ def test_del_key(self): ++ ctx = xmlsec.SignatureContext(manager=xmlsec.KeysManager()) ++ ctx.key = xmlsec.Key.from_engine(KEY_URL) ++ del ctx.key ++ self.assertIsNone(ctx.key) ++ ++ def test_set_key(self): ++ ctx = xmlsec.SignatureContext(manager=xmlsec.KeysManager()) ++ ctx.key = xmlsec.Key.from_engine(KEY_URL) ++ self.assertIsNotNone(ctx.key) ++ ++ def test_sign_bad_args(self): ++ ctx = xmlsec.SignatureContext() ++ ctx.key = xmlsec.Key.from_engine(KEY_URL) ++ with self.assertRaises(TypeError): ++ ctx.sign('') ++ ++ def test_sign_fail(self): ++ ctx = xmlsec.SignatureContext() ++ ctx.key = xmlsec.Key.from_engine(KEY_URL) ++ with self.assertRaisesRegex(xmlsec.Error, 'failed to sign'): ++ ctx.sign(self.load_xml('sign1-in.xml')) ++ ++ def test_sign_case1(self): ++ """Should sign a pre-constructed template file using a key from a pkcs11 engine.""" ++ root = self.load_xml("sign1-in.xml") ++ sign = xmlsec.tree.find_node(root, consts.NodeSignature) ++ self.assertIsNotNone(sign) ++ ++ ctx = xmlsec.SignatureContext() ++ ctx.key = xmlsec.Key.from_engine(KEY_URL) ++ self.assertIsNotNone(ctx.key) ++ ctx.key.name = 'rsakey.pem' ++ self.assertEqual("rsakey.pem", ctx.key.name) ++ ++ ctx.sign(sign) ++ self.assertEqual(self.load_xml("sign1-out.xml"), root) + +From 4f5daea286df89c64fbfc615f422be62b2cdf114 Mon Sep 17 00:00:00 2001 +From: "pre-commit-ci[bot]" + <66853113+pre-commit-ci[bot]@users.noreply.github.com> +Date: Mon, 17 Apr 2023 11:55:28 +0000 +Subject: [PATCH 7/7] [pre-commit.ci] auto fixes from pre-commit.com hooks + +for more information, see https://pre-commit.ci +--- + tests/softhsm_setup.py | 220 +++++++++++++++++++++++++++-------------- + 1 file changed, 147 insertions(+), 73 deletions(-) + +diff --git a/tests/softhsm_setup.py b/tests/softhsm_setup.py +index 0a7c37d..432d4b1 100644 +--- a/tests/softhsm_setup.py ++++ b/tests/softhsm_setup.py +@@ -45,7 +45,11 @@ def run_cmd(args, softhsm_conf=None) -> Tuple[bytes, bytes]: + conf = f.read() + msg = '[cmd: {cmd}] [code: {code}] [stdout: {out}] [stderr: {err}] [config: {conf}]' + msg = msg.format( +- cmd=" ".join(args), code=rv, out=out.strip(), err=err.strip(), conf=conf, ++ cmd=" ".join(args), ++ code=rv, ++ out=out.strip(), ++ err=err.strip(), ++ conf=conf, + ) + raise RuntimeError(msg) + return out, err +@@ -90,9 +94,7 @@ def run_cmd(args, softhsm_conf=None) -> Tuple[bytes, bytes]: + if component_path['SOFTHSM'].endswith('softhsm2-util'): + softhsm_version = 2 + +-openssl_version = subprocess.check_output([component_path['OPENSSL'], +- 'version'] +- )[8:11].decode() ++openssl_version = subprocess.check_output([component_path['OPENSSL'], 'version'])[8:11].decode() + + p11_test_files: List[str] = [] + softhsm_conf: Optional[str] = None +@@ -121,27 +123,41 @@ def setup() -> None: + with open(softhsm_conf, "w") as f: + if softhsm_version == 2: + softhsm_db = _temp_dir() +- f.write(""" ++ f.write( ++ """ + # Generated by test + directories.tokendir = %s + objectstore.backend = file + log.level = DEBUG +-""" % softhsm_db) ++""" ++ % softhsm_db ++ ) + else: + softhsm_db = _temp_file() +- f.write(""" ++ f.write( ++ """ + # Generated by test + 0:%s +-""" % softhsm_db) ++""" ++ % softhsm_db ++ ) + + logging.debug("Initializing the token") +- out, err = run_cmd([component_path['SOFTHSM'], +- '--slot', '0', +- '--label', 'test', +- '--init-token', +- '--pin', 'secret1', +- '--so-pin', 'secret2'], +- softhsm_conf=softhsm_conf) ++ out, err = run_cmd( ++ [ ++ component_path['SOFTHSM'], ++ '--slot', ++ '0', ++ '--label', ++ 'test', ++ '--init-token', ++ '--pin', ++ 'secret1', ++ '--so-pin', ++ 'secret2', ++ ], ++ softhsm_conf=softhsm_conf, ++ ) + + # logging.debug("Generating 1024 bit RSA key in token") + # run_cmd([component_path['PKCS11_TOOL'], +@@ -155,26 +171,45 @@ def setup() -> None: + + hash_priv_key = _temp_file() + logging.debug("Converting test private key to format for softhsm") +- run_cmd([component_path['OPENSSL'], 'pkcs8', +- '-topk8', +- '-inform', 'PEM', +- '-outform', 'PEM', +- '-nocrypt', +- '-in', os.path.join(DATA_DIR, 'rsakey.pem'), +- '-out', hash_priv_key], softhsm_conf=softhsm_conf) ++ run_cmd( ++ [ ++ component_path['OPENSSL'], ++ 'pkcs8', ++ '-topk8', ++ '-inform', ++ 'PEM', ++ '-outform', ++ 'PEM', ++ '-nocrypt', ++ '-in', ++ os.path.join(DATA_DIR, 'rsakey.pem'), ++ '-out', ++ hash_priv_key, ++ ], ++ softhsm_conf=softhsm_conf, ++ ) + + logging.debug("Importing the test key to softhsm") +- run_cmd([component_path['SOFTHSM'], +- '--import', hash_priv_key, +- '--token', 'test', +- '--id', 'a1b2', +- '--label', 'test', +- '--pin', 'secret1'], +- softhsm_conf=softhsm_conf) +- run_cmd([component_path['PKCS11_TOOL'], +- '--module', component_path['P11_MODULE'], +- '-l', +- '--pin', 'secret1', '-O'], softhsm_conf=softhsm_conf) ++ run_cmd( ++ [ ++ component_path['SOFTHSM'], ++ '--import', ++ hash_priv_key, ++ '--token', ++ 'test', ++ '--id', ++ 'a1b2', ++ '--label', ++ 'test', ++ '--pin', ++ 'secret1', ++ ], ++ softhsm_conf=softhsm_conf, ++ ) ++ run_cmd( ++ [component_path['PKCS11_TOOL'], '--module', component_path['P11_MODULE'], '-l', '--pin', 'secret1', '-O'], ++ softhsm_conf=softhsm_conf, ++ ) + signer_cert_pem = _temp_file() + openssl_conf = _temp_file() + logging.debug("Generating OpenSSL config for version {}".format(openssl_version)) +@@ -185,21 +220,25 @@ def setup() -> None: + # if openssl_version.startswith(b'1.') + # else "" + # ) +- f.write("\n".join([ +- "openssl_conf = openssl_def", +- "[openssl_def]", +- "engines = engine_section", +- "[engine_section]", +- "pkcs11 = pkcs11_section", +- "[req]", +- "distinguished_name = req_distinguished_name", +- "[req_distinguished_name]", +- "[pkcs11_section]", +- "engine_id = pkcs11", +- # dynamic_path, +- "MODULE_PATH = %s" % component_path['P11_MODULE'], +- "init = 0", +- ])) ++ f.write( ++ "\n".join( ++ [ ++ "openssl_conf = openssl_def", ++ "[openssl_def]", ++ "engines = engine_section", ++ "[engine_section]", ++ "pkcs11 = pkcs11_section", ++ "[req]", ++ "distinguished_name = req_distinguished_name", ++ "[req_distinguished_name]", ++ "[pkcs11_section]", ++ "engine_id = pkcs11", ++ # dynamic_path, ++ "MODULE_PATH = %s" % component_path['P11_MODULE'], ++ "init = 0", ++ ] ++ ) ++ ) + + with open(openssl_conf, "r") as f: + logging.debug('-------- START DEBUG openssl_conf --------') +@@ -213,34 +252,69 @@ def setup() -> None: + signer_cert_der = _temp_file() + + logging.debug("Generating self-signed certificate") +- run_cmd([component_path['OPENSSL'], 'req', +- '-new', +- '-x509', +- '-subj', "/CN=Test Signer", +- '-engine', 'pkcs11', +- '-config', openssl_conf, +- '-keyform', 'engine', +- '-key', 'label_test', +- '-passin', 'pass:secret1', +- '-out', signer_cert_pem], softhsm_conf=softhsm_conf) +- +- run_cmd([component_path['OPENSSL'], 'x509', +- '-inform', 'PEM', +- '-outform', 'DER', +- '-in', signer_cert_pem, +- '-out', signer_cert_der], softhsm_conf=softhsm_conf) ++ run_cmd( ++ [ ++ component_path['OPENSSL'], ++ 'req', ++ '-new', ++ '-x509', ++ '-subj', ++ "/CN=Test Signer", ++ '-engine', ++ 'pkcs11', ++ '-config', ++ openssl_conf, ++ '-keyform', ++ 'engine', ++ '-key', ++ 'label_test', ++ '-passin', ++ 'pass:secret1', ++ '-out', ++ signer_cert_pem, ++ ], ++ softhsm_conf=softhsm_conf, ++ ) ++ ++ run_cmd( ++ [ ++ component_path['OPENSSL'], ++ 'x509', ++ '-inform', ++ 'PEM', ++ '-outform', ++ 'DER', ++ '-in', ++ signer_cert_pem, ++ '-out', ++ signer_cert_der, ++ ], ++ softhsm_conf=softhsm_conf, ++ ) + + logging.debug("Importing certificate into token") + +- run_cmd([component_path['PKCS11_TOOL'], +- '--module', component_path['P11_MODULE'], +- '-l', +- '--slot-index', '0', +- '--id', 'a1b2', +- '--label', 'test', +- '-y', 'cert', +- '-w', signer_cert_der, +- '--pin', 'secret1'], softhsm_conf=softhsm_conf) ++ run_cmd( ++ [ ++ component_path['PKCS11_TOOL'], ++ '--module', ++ component_path['P11_MODULE'], ++ '-l', ++ '--slot-index', ++ '0', ++ '--id', ++ 'a1b2', ++ '--label', ++ 'test', ++ '-y', ++ 'cert', ++ '-w', ++ signer_cert_der, ++ '--pin', ++ 'secret1', ++ ], ++ softhsm_conf=softhsm_conf, ++ ) + + # TODO: Should be teardowned in teardown: + os.environ['SOFTHSM_CONF'] = softhsm_conf diff --git a/user/py3-xmlsec/264_xmlsec3-support.patch b/user/py3-xmlsec/264_xmlsec3-support.patch new file mode 100644 index 0000000..12096a7 --- /dev/null +++ b/user/py3-xmlsec/264_xmlsec3-support.patch @@ -0,0 +1,105 @@ +From 5f57f2eac756df213e83a2fdb452057909e2dd21 Mon Sep 17 00:00:00 2001 +From: David Adamec +Date: Fri, 15 Sep 2023 17:49:15 -0700 +Subject: [PATCH 1/3] Add compatibility for xmlsec 1.3 + +--- + doc/source/modules/constants.rst | 6 ------ + src/constants.c | 2 -- + src/enc.c | 7 +++++++ + src/xmlsec/constants.pyi | 2 -- + 4 files changed, 7 insertions(+), 10 deletions(-) + +diff --git a/src/constants.c b/src/constants.c +index 34c81b2..72ae217 100644 +--- a/src/constants.c ++++ b/src/constants.c +@@ -316,8 +316,6 @@ int PyXmlSec_ConstantsModule_Init(PyObject* package) { + PYXMLSEC_ADD_NS_CONSTANT(XPathNs, "XPATH"); + PYXMLSEC_ADD_NS_CONSTANT(XPath2Ns, "XPATH2"); + PYXMLSEC_ADD_NS_CONSTANT(XPointerNs, "XPOINTER"); +- PYXMLSEC_ADD_NS_CONSTANT(Soap11Ns, "SOAP11"); +- PYXMLSEC_ADD_NS_CONSTANT(Soap12Ns, "SOAP12"); + PYXMLSEC_ADD_NS_CONSTANT(NsExcC14N, "EXC_C14N"); + PYXMLSEC_ADD_NS_CONSTANT(NsExcC14NWithComments, "EXC_C14N_WITH_COMMENT"); + +diff --git a/src/enc.c b/src/enc.c +index aaf35ae..475cd2d 100644 +--- a/src/enc.c ++++ b/src/enc.c +@@ -50,6 +50,13 @@ static int PyXmlSec_EncryptionContext__init__(PyObject* self, PyObject* args, Py + } + ctx->manager = manager; + PYXMLSEC_DEBUGF("%p: init enc context - ok, manager - %p", self, manager); ++ ++ // xmlsec 1.3 changed the key search to strict mode, causing various examples ++ // in the docs to fail. For backwards compatibility, this changes it back to ++ // lax mode for now. ++ ctx->handle->keyInfoReadCtx.flags = XMLSEC_KEYINFO_FLAGS_LAX_KEY_SEARCH; ++ ctx->handle->keyInfoWriteCtx.flags = XMLSEC_KEYINFO_FLAGS_LAX_KEY_SEARCH; ++ + return 0; + ON_FAIL: + PYXMLSEC_DEBUGF("%p: init enc context - failed", self); +diff --git a/src/xmlsec/constants.pyi b/src/xmlsec/constants.pyi +index 3430a02..9fd24e5 100644 +--- a/src/xmlsec/constants.pyi ++++ b/src/xmlsec/constants.pyi +@@ -85,8 +85,6 @@ NodeX509Data: Final[str] + Ns: Final[str] + NsExcC14N: Final[str] + NsExcC14NWithComments: Final[str] +-Soap11Ns: Final[str] +-Soap12Ns: Final[str] + TransformAes128Cbc: Final[__Transform] + TransformAes128Gcm: Final[__Transform] + TransformAes192Cbc: Final[__Transform] + +From 0e7c5e718e8d221331b0a5f851094a5b4181eeae Mon Sep 17 00:00:00 2001 +From: David Adamec +Date: Fri, 15 Sep 2023 18:07:07 -0700 +Subject: [PATCH 2/3] fix 1.2 compatibility + +--- + src/enc.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/src/enc.c b/src/enc.c +index 475cd2d..5453ef9 100644 +--- a/src/enc.c ++++ b/src/enc.c +@@ -17,6 +17,11 @@ + #include + #include + ++// Backwards compatibility with xmlsec 1.2 ++#ifndef XMLSEC_KEYINFO_FLAGS_LAX_KEY_SEARCH ++#define XMLSEC_KEYINFO_FLAGS_LAX_KEY_SEARCH 0x00008000 ++#endif ++ + typedef struct { + PyObject_HEAD + xmlSecEncCtxPtr handle; + +From 40c14c45a352f2812e796a071ef7d12f5a70be58 Mon Sep 17 00:00:00 2001 +From: David Adamec +Date: Fri, 15 Sep 2023 19:40:04 -0700 +Subject: [PATCH 3/3] update isort to fix poetry error in pre-commit + +--- + .pre-commit-config.yaml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml +index 0545b12..bf877f3 100644 +--- a/.pre-commit-config.yaml ++++ b/.pre-commit-config.yaml +@@ -31,7 +31,7 @@ repos: + exclude: ^setup.py$ + additional_dependencies: [flake8-docstrings, flake8-bugbear, flake8-logging-format, flake8-builtins, flake8-eradicate, flake8-fixme, pep8-naming, flake8-pep3101, flake8-annotations-complexity,flake8-pyi] + - repo: https://github.com/PyCQA/isort +- rev: 5.10.1 ++ rev: 5.12.0 + hooks: + - id: isort + - repo: https://github.com/pre-commit/mirrors-mypy diff --git a/user/py3-xmlsec/280_fix-function-deprecation.patch b/user/py3-xmlsec/280_fix-function-deprecation.patch new file mode 100644 index 0000000..eab6f1d --- /dev/null +++ b/user/py3-xmlsec/280_fix-function-deprecation.patch @@ -0,0 +1,35 @@ +diff --git a/src/constants.c.orig b/src/constants.c +index 72ae217..b12d0ad 100644 +--- a/src/constants.c.orig ++++ b/src/constants.c +@@ -445,7 +445,7 @@ int PyXmlSec_ConstantsModule_Init(PyObject* package) { + #endif + #if XMLSEC_VERSION_HEX > 0x10212 + // from version 1.2.19 +- PYXMLSEC_ADD_KEYDATA_CONSTANT(KeyDataEcdsa, "ECDSA") ++ PYXMLSEC_ADD_KEYDATA_CONSTANT(KeyDataEc, "ECDSA") + #endif + PYXMLSEC_ADD_KEYDATA_CONSTANT(KeyDataHmac, "HMAC") + PYXMLSEC_ADD_KEYDATA_CONSTANT(KeyDataRsa, "RSA") +diff --git a/src/keys.c.orig b/src/keys.c +index 1440331..8b84c34 100644 +--- a/src/keys.c.orig ++++ b/src/keys.c +@@ -163,7 +163,7 @@ static PyObject* PyXmlSec_KeyFromFile(PyObject* self, PyObject* args, PyObject* + if (is_content) { + key->handle = xmlSecCryptoAppKeyLoadMemory((const xmlSecByte*)data, (xmlSecSize)data_size, format, password, NULL, NULL); + } else { +- key->handle = xmlSecCryptoAppKeyLoad(data, format, password, NULL, NULL); ++ key->handle = xmlSecCryptoAppKeyLoadEx(data, xmlSecKeyDataTypePrivate, format, password, NULL, NULL); + } + Py_END_ALLOW_THREADS; + +@@ -206,7 +206,7 @@ static PyObject* PyXmlSec_KeyFromEngine(PyObject* self, PyObject* args, PyObject + if ((key = PyXmlSec_NewKey1((PyTypeObject*)self)) == NULL) goto ON_FAIL; + + Py_BEGIN_ALLOW_THREADS; +- key->handle = xmlSecCryptoAppKeyLoad(engine_and_key_id, xmlSecKeyDataFormatEngine, NULL, xmlSecCryptoAppGetDefaultPwdCallback(), ++ key->handle = xmlSecCryptoAppKeyLoadEx(engine_and_key_id, xmlSecKeyDataTypePrivate, xmlSecKeyDataFormatEngine, NULL, xmlSecCryptoAppGetDefaultPwdCallback(), + (void*)engine_and_key_id); + Py_END_ALLOW_THREADS; + diff --git a/user/py3-xmlsec/APKBUILD b/user/py3-xmlsec/APKBUILD new file mode 100644 index 0000000..64489f0 --- /dev/null +++ b/user/py3-xmlsec/APKBUILD @@ -0,0 +1,56 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +_pyname=xmlsec +pkgname="py3-$_pyname" +pkgver=1.3.13 +pkgrel=6 +arch="all" +pkgdesc="Python bindings for the XML Security Library" +url="https://pypi.python.org/project/$_pyname" +license="MIT" +depends=" + py3-lxml + xmlsec + " +makedepends=" + py3-gpep517 + py3-setuptools + py3-setuptools_scm + py3-pkgconfig + py3-wheel + python3-dev + libxml2-dev + xmlsec-dev + " +checkdepends="py3-pytest" +source=" + $pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz + 253_pkcs11-support.patch + 264_xmlsec3-support.patch + 280_fix-function-deprecation.patch + " +builddir="$srcdir"/$_pyname-$pkgver + +build() { + gpep517 build-wheel \ + --wheel-dir dist \ + --output-fd 3 3>&1 >&2 + +} + +check() { + pyver=$(python3 -c "import sys; print('{}.{}'.format(*sys.version_info[:2]))") + python3 setup.py install --prefix=/usr --root="$srcdir"/tmp_install --optimize=1 + PYTHONPATH="$srcdir"/tmp_install/usr/lib/python$pyver/site-packages pytest || true +} + +package() { + python3 setup.py install --prefix=/usr --root="$pkgdir" --optimize=1 + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname/ +} +sha512sums=" +2aa080fbc918d5d360dcb086a8c529545514dd429649d99833425f92fa06a3a094cf3139f8ed00827fed358f0fa463b74c267e593ac14e5aadc299d64206ac8e py3-xmlsec-1.3.13.tar.gz +9155a2435d832b4dcd0260616f52eec148dca1dade76a89c23e10f017e4140024ef042b6b10c5b9435fcbf52e7dc4f7e5764dc7f5bdd7595c27b3106fab942cf 253_pkcs11-support.patch +d901c09a49145250dd9325476c1356f820519b9248195240584f6de62b8084205f698501a1f48e42b63fe4c7b169dcb65540edc03724ef7e9297b45216c5b481 264_xmlsec3-support.patch +a47d4d44a518939e72ff7213c6dcd2c391ff5e1bb2be6a1b0d0ab1ef6ed0155d81c26b8f844285883db2f8954b122e48a9b1bccf343a5344af7f1723b3fdd78d 280_fix-function-deprecation.patch +" diff --git a/user/rcu/APKBUILD b/user/rcu/APKBUILD new file mode 100644 index 0000000..12d6941 --- /dev/null +++ b/user/rcu/APKBUILD @@ -0,0 +1,43 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=rcu +pkgver=2023.3 +_gittag="d2023.001(c)" +pkgrel=0 +pkgdesc="RCU is a desktop client for all-in-one offline management of reMarkable e-paper tablet" +url="http://www.davisr.me/projects/rcu/" +license="AGPL-3.0-only" +arch="all" +depends=" + py3-paramiko + py3-protobuf + py3-six + py3-pdfminer + py3-pillow + py3-certifi + py3-pikepdf + py3-pyside6 +" +makedepends="py3-setuptools py3-gpep517 py3-wheel" +source=" + https://lab.ilot.io/mirrors/rcu/-/archive/$_gittag/rcu-$_gittag.tar.gz + rcu-pyside6.patch + " +builddir="$srcdir"/$pkgname-$_gittag +options="!check" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +60ad594b9140125225b8d8500d9efad1c8f48a61b9bdda9967154e3efe4d9d66d0df2d8d1c4f6cf9c839bc4a4031906a87dd4bfc674cbf18ac05dc4dda48b44e rcu-d2023.001(c).tar.gz +6a43037545ea1d1e0d4e0921f0fbd7f85802030a70eb42e7de4d9988adfcd267d6b94e2f9acf13b265c5006b5e330ce45f7d03b905b7299da380a60f2fa3a96b rcu-pyside6.patch +" diff --git a/user/rcu/rcu-pyside6.patch b/user/rcu/rcu-pyside6.patch new file mode 100644 index 0000000..f302a68 --- /dev/null +++ b/user/rcu/rcu-pyside6.patch @@ -0,0 +1,687 @@ +diff --git a/src/controllers/ConnectionDialogController.py b/src/controllers/ConnectionDialogController.py +index ad7ed727a..01c695510 100644 +--- a/src/controllers/ConnectionDialogController.py ++++ b/src/controllers/ConnectionDialogController.py +@@ -4,7 +4,7 @@ The connection dialog allows a user to edit device connection + information and initiate a connection. + + RCU is a management client for the reMarkable Tablet. +-Copyright (C) 2020-21 Davis Remmel ++Copyright (C) 2020-23 Davis Remmel + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as +@@ -26,11 +26,11 @@ import sys + import pathlib + import controllers + import log +-from PySide2.QtCore import Qt, QSettings, QObject, QEvent, QPoint, \ ++from PySide6.QtCore import Qt, QSettings, QObject, QEvent, QPoint, \ + QCoreApplication +-from PySide2.QtWidgets import QMenu, QShortcut, QApplication, QAction, \ ++from PySide6.QtWidgets import QMenu, QApplication, \ + QInputDialog, QLineEdit, QMessageBox +-from PySide2.QtGui import QKeySequence ++from PySide6.QtGui import QKeySequence, QShortcut, QAction + + class OptionButtonEventFilter(QObject): + def eventFilter(self, obj, event): +diff --git a/src/controllers/ConnectionUtilityController.py b/src/controllers/ConnectionUtilityController.py +index 0cce532e9..8a9589dbe 100644 +--- a/src/controllers/ConnectionUtilityController.py ++++ b/src/controllers/ConnectionUtilityController.py +@@ -3,7 +3,7 @@ ConnectionUtilityController.py + This is the main window of the application. + + RCU is a management client for the reMarkable Tablet. +-Copyright (C) 2020-22 Davis Remmel ++Copyright (C) 2020-23 Davis Remmel + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as +@@ -19,10 +19,10 @@ You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + ''' + +-from PySide2.QtCore import Qt, QObject, QEvent, QCoreApplication, \ ++from PySide6.QtCore import Qt, QObject, QEvent, QCoreApplication, \ + QSettings, QTimer +-from PySide2.QtWidgets import QListWidgetItem, QShortcut, QApplication +-from PySide2.QtGui import QKeySequence, QPalette, QPixmap ++from PySide6.QtWidgets import QListWidgetItem, QApplication ++from PySide6.QtGui import QKeySequence, QPalette, QPixmap, QShortcut + from controllers import UIController + from panes import paneslist, IncompatiblePane + from pathlib import Path +diff --git a/src/controllers/RecoveryOSController.py b/src/controllers/RecoveryOSController.py +index ef177b26e..c645eee9d 100644 +--- a/src/controllers/RecoveryOSController.py ++++ b/src/controllers/RecoveryOSController.py +@@ -23,7 +23,7 @@ along with this program. If not, see . + from . import UIController + from pathlib import Path + import log +-from PySide2.QtCore import QTimer ++from PySide6.QtCore import QTimer + + class RecoveryOSController(UIController): + adir = Path(__file__).parent.parent +diff --git a/src/controllers/UIController.py b/src/controllers/UIController.py +index c71a76d69..c9b639735 100644 +--- a/src/controllers/UIController.py ++++ b/src/controllers/UIController.py +@@ -21,8 +21,8 @@ along with this program. If not, see . + + import pathlib + import sys +-from PySide2.QtCore import QFile, QCoreApplication +-from PySide2.QtUiTools import QUiLoader ++from PySide6.QtCore import QFile, QCoreApplication ++from PySide6.QtUiTools import QUiLoader + import log + import re + +diff --git a/src/docrender/document_renderer.py b/src/docrender/document_renderer.py +index 8f51ed4da..752fc4556 100644 +--- a/src/docrender/document_renderer.py ++++ b/src/docrender/document_renderer.py +@@ -25,11 +25,11 @@ from model.template import Template + from model.pens.textures import PencilTextures + from .document_renderer_page import DocumentPage + +-from PySide2.QtGui import QPainter, QImage, QPen, QPixmap, \ ++from PySide6.QtGui import QPainter, QImage, QPen, QPixmap, \ + QPageSize, QColor, QBrush, QPainterPath, QTransform +-from PySide2.QtCore import Qt, QByteArray, QIODevice, QBuffer, QSizeF, \ ++from PySide6.QtCore import Qt, QByteArray, QIODevice, QBuffer, QSizeF, \ + QSettings, QRectF, QPointF, QCoreApplication +-from PySide2.QtPrintSupport import QPrinter ++from PySide6.QtPrintSupport import QPrinter + + from pathlib import Path + import json +diff --git a/src/docrender/document_renderer_page.py b/src/docrender/document_renderer_page.py +index 1e5b1cd5d..08cff3f8e 100644 +--- a/src/docrender/document_renderer_page.py ++++ b/src/docrender/document_renderer_page.py +@@ -24,11 +24,11 @@ from model.template import Template + from model import lines + from model.pens.textures import PencilTextures + +-from PySide2.QtGui import QPainter, QImage, QPen, QPixmap, \ ++from PySide6.QtGui import QPainter, QImage, QPen, QPixmap, \ + QPageSize, QColor, QBrush, QPainterPath, QTransform +-from PySide2.QtCore import Qt, QByteArray, QIODevice, QBuffer, QSizeF, \ ++from PySide6.QtCore import Qt, QByteArray, QIODevice, QBuffer, QSizeF, \ + QSettings, QRectF, QPointF +-from PySide2.QtPrintSupport import QPrinter ++from PySide6.QtPrintSupport import QPrinter + + from pathlib import Path + import json +@@ -833,7 +833,7 @@ class DocumentPageLayer: + devpx = width * height + bytepp = 4 # ARGB32 + # This is the primary image buffer. It needs to be pre-allocated +- # to prevent memory access errors in PySide2. See: ++ # to prevent memory access errors in PySide6. See: + # https://github.com/matplotlib/matplotlib/issues/4283#issuecomment-95950441 + image_ref = QByteArray() + image_ref.fill('\0', devpx * bytepp) +diff --git a/src/main.py b/src/main.py +index 03cbbb45c..f94dd1274 100644 +--- a/src/main.py ++++ b/src/main.py +@@ -70,9 +70,9 @@ from docrender import DocRenderPrefs + + from pathlib import Path + import sys +-from PySide2.QtWidgets import QApplication, QStyleFactory +-from PySide2.QtCore import QCoreApplication, Qt, QThreadPool, QSettings +-from PySide2.QtGui import QFont, QPalette, QColor, QIcon, QPixmap ++from PySide6.QtWidgets import QApplication, QStyleFactory ++from PySide6.QtCore import QCoreApplication, Qt, QThreadPool, QSettings ++from PySide6.QtGui import QFont, QPalette, QColor, QIcon, QPixmap + + + # Handle Ctrl-C +@@ -137,10 +137,10 @@ if args.cli: + + # Start main application + if __name__ == '__main__': +- QCoreApplication.setAttribute(Qt.AA_DisableWindowContextHelpButton) ++ # QCoreApplication.setAttribute(Qt.AA_DisableWindowContextHelpButton) + QCoreApplication.setAttribute(Qt.AA_ShareOpenGLContexts) +- QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling) +- QCoreApplication.setAttribute(Qt.AA_UseHighDpiPixmaps) ++ # QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling) ++ # QCoreApplication.setAttribute(Qt.AA_UseHighDpiPixmaps) + QCoreApplication.setOrganizationName('davisr') + QCoreApplication.setOrganizationDomain('davisr.me') + QCoreApplication.setApplicationName('rcu') +diff --git a/src/model/display.py b/src/model/display.py +index e400e39dc..f91983ddb 100644 +--- a/src/model/display.py ++++ b/src/model/display.py +@@ -45,8 +45,8 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + ''' + + import log +-from PySide2.QtCore import QByteArray, QBuffer, QIODevice +-from PySide2.QtGui import QImage, QMatrix ++from PySide6.QtCore import QByteArray, QBuffer, QIODevice ++from PySide6.QtGui import QImage, QMatrix3x3 + import math + import gc + import ctypes +@@ -139,7 +139,7 @@ class DisplayRM1(DisplayRM): + QImage.Format_Grayscale8) + + center = qimage.rect().center() +- matrix = QMatrix() ++ matrix = QMatrix3x3() + matrix.translate(center.x(), center.y()) + matrix.rotate(90) + qimage_rot = qimage.transformed(matrix) +@@ -255,7 +255,7 @@ class DisplayRM2(DisplayRM): + + # Rotate -90 deg. + center = qimage.rect().center() +- matrix = QMatrix() ++ matrix = QMatrix3x3() + matrix.translate(center.x(), center.y()) + matrix.rotate(-90) + +diff --git a/src/model/document.py b/src/model/document.py +index 465b2b70b..a6d6975c8 100644 +--- a/src/model/document.py ++++ b/src/model/document.py +@@ -34,12 +34,12 @@ import re + import pikepdf + import urllib.request + +-#from PySide2.QtWidgets import QGraphicsScene +-from PySide2.QtGui import QPainter, QImage, QPen, QPixmap, \ ++#from PySide6.QtWidgets import QGraphicsScene ++from PySide6.QtGui import QPainter, QImage, QPen, QPixmap, \ + QPageSize, QColor, QBrush, QPainterPath, QTransform +-from PySide2.QtCore import Qt, QByteArray, QIODevice, QBuffer, QSizeF, \ ++from PySide6.QtCore import Qt, QByteArray, QIODevice, QBuffer, QSizeF, \ + QSettings, QRectF, QPointF +-from PySide2.QtPrintSupport import QPrinter ++from PySide6.QtPrintSupport import QPrinter + + import svgtools + +diff --git a/src/model/pens/ballpoint.py b/src/model/pens/ballpoint.py +index e391c6334..c58bc0543 100644 +--- a/src/model/pens/ballpoint.py ++++ b/src/model/pens/ballpoint.py +@@ -19,8 +19,8 @@ You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + ''' + +-from PySide2.QtCore import Qt, QLineF +-from PySide2.QtGui import QPen ++from PySide6.QtCore import Qt, QLineF ++from PySide6.QtGui import QPen + + class BallpointPen(QPen): + def __init__(self, *args, **kwargs): +diff --git a/src/model/pens/calligraphy.py b/src/model/pens/calligraphy.py +index 7981b5b53..c6927c196 100644 +--- a/src/model/pens/calligraphy.py ++++ b/src/model/pens/calligraphy.py +@@ -19,8 +19,8 @@ You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + ''' + +-from PySide2.QtCore import Qt, QLineF +-from PySide2.QtGui import QPen ++from PySide6.QtCore import Qt, QLineF ++from PySide6.QtGui import QPen + + class CalligraphyPen(QPen): + def __init__(self, *args, **kwargs): +diff --git a/src/model/pens/erasearea.py b/src/model/pens/erasearea.py +index dd0ebf3d8..353541fe3 100644 +--- a/src/model/pens/erasearea.py ++++ b/src/model/pens/erasearea.py +@@ -19,8 +19,8 @@ You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + ''' + +-from PySide2.QtCore import Qt +-from PySide2.QtGui import QPen ++from PySide6.QtCore import Qt ++from PySide6.QtGui import QPen + + class EraseAreaPen(QPen): + def __init__(self, *args, **kwargs): +diff --git a/src/model/pens/eraser.py b/src/model/pens/eraser.py +index e0c1624ff..0e84542c0 100644 +--- a/src/model/pens/eraser.py ++++ b/src/model/pens/eraser.py +@@ -19,8 +19,8 @@ You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + ''' + +-from PySide2.QtCore import Qt, QLineF +-from PySide2.QtGui import QPen, QPainter ++from PySide6.QtCore import Qt, QLineF ++from PySide6.QtGui import QPen, QPainter + + class EraserPen(QPen): + # A PDF graphics state to be used during renders. +diff --git a/src/model/pens/fineliner.py b/src/model/pens/fineliner.py +index 547db3aff..0112a1b32 100644 +--- a/src/model/pens/fineliner.py ++++ b/src/model/pens/fineliner.py +@@ -19,8 +19,8 @@ You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + ''' + +-from PySide2.QtCore import Qt, QLineF +-from PySide2.QtGui import QPen ++from PySide6.QtCore import Qt, QLineF ++from PySide6.QtGui import QPen + + class FinelinerPen(QPen): + def __init__(self, *args, **kwargs): +diff --git a/src/model/pens/generic.py b/src/model/pens/generic.py +index c0efd9a1f..1dfc9d01d 100644 +--- a/src/model/pens/generic.py ++++ b/src/model/pens/generic.py +@@ -19,8 +19,8 @@ You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + ''' + +-from PySide2.QtCore import Qt, QLineF +-from PySide2.QtGui import QPen ++from PySide6.QtCore import Qt, QLineF ++from PySide6.QtGui import QPen + + class GenericPen(QPen): + def __init__(self, *args, **kwargs): +diff --git a/src/model/pens/highlighter.py b/src/model/pens/highlighter.py +index 507132e63..9e2c8d6fe 100644 +--- a/src/model/pens/highlighter.py ++++ b/src/model/pens/highlighter.py +@@ -19,8 +19,8 @@ You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + ''' + +-from PySide2.QtCore import Qt +-from PySide2.QtGui import QPen, QColor, QPainterPath, QPainter, \ ++from PySide6.QtCore import Qt ++from PySide6.QtGui import QPen, QColor, QPainterPath, QPainter, \ + QPainterPathStroker + + class HighlighterPen(QPen): +diff --git a/src/model/pens/marker.py b/src/model/pens/marker.py +index 6adadb5dc..088310e35 100644 +--- a/src/model/pens/marker.py ++++ b/src/model/pens/marker.py +@@ -19,8 +19,8 @@ You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + ''' + +-from PySide2.QtCore import Qt, QLineF +-from PySide2.QtGui import QPen ++from PySide6.QtCore import Qt, QLineF ++from PySide6.QtGui import QPen + + class MarkerPen(QPen): + def __init__(self, *args, **kwargs): +diff --git a/src/model/pens/mechanicalpencil.py b/src/model/pens/mechanicalpencil.py +index 24ea1753e..30fc6b3e6 100644 +--- a/src/model/pens/mechanicalpencil.py ++++ b/src/model/pens/mechanicalpencil.py +@@ -19,8 +19,8 @@ You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + ''' + +-from PySide2.QtCore import Qt, QLineF +-from PySide2.QtGui import QPen, QBrush, QColor ++from PySide6.QtCore import Qt, QLineF ++from PySide6.QtGui import QPen, QBrush, QColor + from pathlib import Path + + class MechanicalPencilPen(QPen): +diff --git a/src/model/pens/mechanicalpencil_1.py b/src/model/pens/mechanicalpencil_1.py +index 165bd8f2b..3466a6dce 100644 +--- a/src/model/pens/mechanicalpencil_1.py ++++ b/src/model/pens/mechanicalpencil_1.py +@@ -20,8 +20,8 @@ You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + ''' + +-from PySide2.QtCore import Qt, QLineF +-from PySide2.QtGui import QPen, QBrush, QColor ++from PySide6.QtCore import Qt, QLineF ++from PySide6.QtGui import QPen, QBrush, QColor + from pathlib import Path + + class MechanicalPencilPen1(QPen): +diff --git a/src/model/pens/paintbrush.py b/src/model/pens/paintbrush.py +index 1e35f084d..6033e67bc 100644 +--- a/src/model/pens/paintbrush.py ++++ b/src/model/pens/paintbrush.py +@@ -19,8 +19,8 @@ You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + ''' + +-from PySide2.QtCore import Qt, QLineF +-from PySide2.QtGui import QPen, QBrush, QColor, QTransform ++from PySide6.QtCore import Qt, QLineF ++from PySide6.QtGui import QPen, QBrush, QColor, QTransform + + import math + +diff --git a/src/model/pens/pencil.py b/src/model/pens/pencil.py +index e66416c4f..ec5a9fbd8 100644 +--- a/src/model/pens/pencil.py ++++ b/src/model/pens/pencil.py +@@ -19,8 +19,8 @@ You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + ''' + +-from PySide2.QtCore import Qt, QLineF +-from PySide2.QtGui import QPen, QBrush, QColor, QPainter, QPainterPath ++from PySide6.QtCore import Qt, QLineF ++from PySide6.QtGui import QPen, QBrush, QColor, QPainter, QPainterPath + import math + + +diff --git a/src/model/pens/textures.py b/src/model/pens/textures.py +index 16f0cdc9c..f5b85f3aa 100644 +--- a/src/model/pens/textures.py ++++ b/src/model/pens/textures.py +@@ -19,8 +19,8 @@ You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + ''' + +-from PySide2.QtCore import Qt +-from PySide2.QtGui import QPen, QBrush, QImage, QBitmap ++from PySide6.QtCore import Qt ++from PySide6.QtGui import QPen, QBrush, QImage, QBitmap + from pathlib import Path + + class PencilTextures: +diff --git a/src/model/rcu.py b/src/model/rcu.py +index c5e9efb60..47854660a 100644 +--- a/src/model/rcu.py ++++ b/src/model/rcu.py +@@ -23,8 +23,8 @@ from .config import Config + import log + import urllib.request + +-from PySide2.QtCore import QThreadPool, QSettings, QTimer +-from PySide2.QtGui import QImage ++from PySide6.QtCore import QThreadPool, QSettings, QTimer ++from PySide6.QtGui import QImage + from worker import Worker + import select + import base64 +diff --git a/src/model/template.py b/src/model/template.py +index c29136c0d..d32b0c355 100644 +--- a/src/model/template.py ++++ b/src/model/template.py +@@ -23,7 +23,7 @@ along with this program. If not, see . + from pathlib import Path + import log + import json +-from PySide2.QtCore import QByteArray ++from PySide6.QtCore import QByteArray + from worker import Worker + import tempfile + import uuid +diff --git a/src/optionals.txt b/src/optionals.txt +index 8da8651da..cc8a611e4 100644 +--- a/src/optionals.txt ++++ b/src/optionals.txt +@@ -1,2 +1,2 @@ +-pyside2>=5.14.2 ++pyside6 + pikepdf==7.2.0 +diff --git a/src/panes/about/pane.py b/src/panes/about/pane.py +index c3bf59873..d08ac7165 100644 +--- a/src/panes/about/pane.py ++++ b/src/panes/about/pane.py +@@ -26,9 +26,9 @@ import sys + + from worker import Worker + +-from PySide2.QtCore import QByteArray, QUrl, QSize, QCoreApplication +-from PySide2.QtGui import QIcon +-from PySide2.QtWidgets import QMessageBox ++from PySide6.QtCore import QByteArray, QUrl, QSize, QCoreApplication ++from PySide6.QtGui import QIcon ++from PySide6.QtWidgets import QMessageBox + import urllib.request + import hashlib + +diff --git a/src/panes/deviceinfo/UploadFirmwareController.py b/src/panes/deviceinfo/UploadFirmwareController.py +index 4de61786f..84a2444b1 100644 +--- a/src/panes/deviceinfo/UploadFirmwareController.py ++++ b/src/panes/deviceinfo/UploadFirmwareController.py +@@ -26,8 +26,8 @@ from pathlib import Path + + from model.firmware import Firmware + +-from PySide2.QtCore import QSettings +-from PySide2.QtWidgets import QFileDialog, QDialogButtonBox, QMessageBox ++from PySide6.QtCore import QSettings ++from PySide6.QtWidgets import QFileDialog, QDialogButtonBox, QMessageBox + + from worker import Worker + +diff --git a/src/panes/deviceinfo/backup/BackupController.py b/src/panes/deviceinfo/backup/BackupController.py +index 19f22d6dd..abe6da894 100644 +--- a/src/panes/deviceinfo/backup/BackupController.py ++++ b/src/panes/deviceinfo/backup/BackupController.py +@@ -31,10 +31,10 @@ import platform + + from .Backup import BackupFile + +-from PySide2.QtWidgets import QTreeWidgetItem, QHeaderView, \ ++from PySide6.QtWidgets import QTreeWidgetItem, QHeaderView, \ + QMenu, QTreeWidget, QFrame, QAbstractItemView, QMessageBox, \ + QSizePolicy +-from PySide2.QtCore import Qt, QRect ++from PySide6.QtCore import Qt, QRect + + import hashlib + +diff --git a/src/panes/deviceinfo/pane.py b/src/panes/deviceinfo/pane.py +index 7e767d8a9..226c92410 100644 +--- a/src/panes/deviceinfo/pane.py ++++ b/src/panes/deviceinfo/pane.py +@@ -25,10 +25,10 @@ import controllers + import log + from worker import Worker + from . import backup +-from PySide2.QtWidgets import QInputDialog, QLineEdit, QMessageBox, \ ++from PySide6.QtWidgets import QInputDialog, QLineEdit, QMessageBox, \ + QMenu, QFileDialog +-from PySide2.QtGui import QIcon, QPixmap +-from PySide2.QtCore import Qt, QSize, QSettings, QCoreApplication ++from PySide6.QtGui import QIcon, QPixmap ++from PySide6.QtCore import Qt, QSize, QSettings, QCoreApplication + import time + import platform + from .BatteryInfoController import BatteryInfoController +diff --git a/src/panes/display/pane.py b/src/panes/display/pane.py +index 3ea5b261f..df35d068d 100644 +--- a/src/panes/display/pane.py ++++ b/src/panes/display/pane.py +@@ -19,10 +19,10 @@ You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + ''' + +-from PySide2.QtCore import Qt, QSize, QObject, QEvent, QSettings, \ ++from PySide6.QtCore import Qt, QSize, QObject, QEvent, QSettings, \ + QCoreApplication +-from PySide2.QtGui import QImage, QPixmap, QColor, QIcon +-from PySide2.QtWidgets import QFileDialog, QWidget ++from PySide6.QtGui import QImage, QPixmap, QColor, QIcon ++from PySide6.QtWidgets import QFileDialog, QWidget + from pathlib import Path + from datetime import datetime + from controllers import UIController +diff --git a/src/panes/incompatible/pane.py b/src/panes/incompatible/pane.py +index 3bc272d8a..0bc4476d5 100644 +--- a/src/panes/incompatible/pane.py ++++ b/src/panes/incompatible/pane.py +@@ -23,7 +23,7 @@ along with this program. If not, see . + from pathlib import Path + from controllers import UIController + import log +-from PySide2.QtGui import QPixmap ++from PySide6.QtGui import QPixmap + + class IncompatiblePane(UIController): + adir = Path(__file__).parent.parent +diff --git a/src/panes/notebooks/pane.py b/src/panes/notebooks/pane.py +index abbe0dbe2..d18d8f458 100644 +--- a/src/panes/notebooks/pane.py ++++ b/src/panes/notebooks/pane.py +@@ -36,12 +36,13 @@ import traceback + import pikepdf + from docrender import DocRenderPrefs + +-from PySide2.QtCore import Qt, QRect, QSize, QTimer, QSettings, \ ++from PySide6.QtCore import Qt, QRect, QSize, QTimer, QSettings, \ + QObject, QEvent, QCoreApplication +-from PySide2.QtWidgets import QTreeWidget, QTreeWidgetItem, QMenu, \ ++from PySide6.QtWidgets import QTreeWidget, QTreeWidgetItem, QMenu, \ + QFrame, QAbstractItemView, QHeaderView, QFileDialog, QSizePolicy, \ +- QColorDialog, QShortcut, QInputDialog, QLineEdit +-from PySide2.QtGui import QIcon, QColor, QPixmap, QKeySequence ++ QColorDialog, QInputDialog, QLineEdit ++from PySide6.QtGui import QIcon, QColor, QPixmap, QKeySequence, \ ++ QShortcut, QAction + + def prettydate(then, abs=False): + if not then: +@@ -1703,7 +1704,6 @@ class CollectionTreeWidgetItem(QTreeWidgetItem): + return False + + +-from PySide2.QtWidgets import QMenu, QAction, QMessageBox + class DocumentTreeWidgetItem(QTreeWidgetItem): + def __init__(self, controller, *args, **kwargs): + super(type(self), self).__init__(*args, **kwargs) +diff --git a/src/panes/software/pane.py b/src/panes/software/pane.py +index aed99d523..633dd0347 100644 +--- a/src/panes/software/pane.py ++++ b/src/panes/software/pane.py +@@ -22,9 +22,9 @@ along with this program. If not, see . + import log + from controllers import UIController + from pathlib import Path +-from PySide2.QtCore import Qt, QSize, QRect, QSettings +-from PySide2.QtGui import QIcon +-from PySide2.QtWidgets import QListWidget, QListWidgetItem, \ ++from PySide6.QtCore import Qt, QSize, QRect, QSettings ++from PySide6.QtGui import QIcon ++from PySide6.QtWidgets import QListWidget, QListWidgetItem, \ + QFileDialog, QMessageBox, QSizePolicy + + class SoftwarePane(UIController): +diff --git a/src/panes/splash/pane.py b/src/panes/splash/pane.py +index 16535a18d..9ce1f3b20 100644 +--- a/src/panes/splash/pane.py ++++ b/src/panes/splash/pane.py +@@ -19,9 +19,9 @@ You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + ''' + +-from PySide2.QtCore import QSize, Qt, QObject, QEvent, QSettings +-from PySide2.QtGui import QPixmap, QImage, QIcon +-from PySide2.QtWidgets import QFileDialog ++from PySide6.QtCore import QSize, Qt, QObject, QEvent, QSettings ++from PySide6.QtGui import QPixmap, QImage, QIcon ++from PySide6.QtWidgets import QFileDialog + from pathlib import Path + from datetime import datetime + import log +diff --git a/src/panes/templates/importcontroller.py b/src/panes/templates/importcontroller.py +index 9faf0010d..9a05e523f 100644 +--- a/src/panes/templates/importcontroller.py ++++ b/src/panes/templates/importcontroller.py +@@ -24,10 +24,10 @@ from controllers import UIController + from pathlib import Path + import log + +-from PySide2.QtCore import QByteArray, QSize, Qt, QTimer, QBuffer, \ ++from PySide6.QtCore import QByteArray, QSize, Qt, QTimer, QBuffer, \ + QIODevice, QCoreApplication +-from PySide2.QtGui import QFontDatabase, QPixmap, QIcon, QImage, QMatrix +-from PySide2.QtWidgets import QListWidgetItem, QMessageBox ++from PySide6.QtGui import QFontDatabase, QPixmap, QIcon, QImage ++from PySide6.QtWidgets import QListWidgetItem, QMessageBox + + from PIL import Image, ImageFont, ImageDraw, ImageOps + +diff --git a/src/panes/templates/pane.py b/src/panes/templates/pane.py +index dfb8bd8e3..9ba1ab265 100644 +--- a/src/panes/templates/pane.py ++++ b/src/panes/templates/pane.py +@@ -22,13 +22,13 @@ along with this program. If not, see . + from controllers import UIController + from pathlib import Path + import log +-from PySide2.QtWidgets import QTreeWidgetItem, QTreeWidget, QMenu, \ ++from PySide6.QtWidgets import QTreeWidgetItem, QTreeWidget, QMenu, \ + QFrame, QAbstractItemView, QMessageBox, QHeaderView, QFileDialog, \ + QSizePolicy +-from PySide2.QtSvg import QSvgWidget +-from PySide2.QtCore import Qt, QRect, QByteArray, QSize, QObject, \ ++from PySide6.QtSvgWidgets import QSvgWidget ++from PySide6.QtCore import Qt, QRect, QByteArray, QSize, QObject, \ + QEvent, QSettings, QCoreApplication +-from PySide2.QtGui import QIcon ++from PySide6.QtGui import QIcon + from model.template import Template + import platform + import re +diff --git a/src/svgtools.py b/src/svgtools.py +index 5bf383293..68d705024 100644 +--- a/src/svgtools.py ++++ b/src/svgtools.py +@@ -3,7 +3,7 @@ svgtools.py + This file provides functions for manipulating SVG and bitmap images. + + RCU is a management client for the reMarkable Tablet. +-Copyright (C) 2020-22 Davis Remmel ++Copyright (C) 2020-23 Davis Remmel + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as +@@ -19,9 +19,9 @@ You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + ''' + +-from PySide2.QtCore import QByteArray, QIODevice, QBuffer +-from PySide2.QtGui import QImage, QPainter, QPixmap +-from PySide2.QtSvg import QSvgRenderer ++from PySide6.QtCore import QByteArray, QIODevice, QBuffer ++from PySide6.QtGui import QImage, QPainter, QPixmap ++from PySide6.QtSvg import QSvgRenderer + + import log + +diff --git a/src/worker.py b/src/worker.py +index 362ec5658..a4d4e55b9 100644 +--- a/src/worker.py ++++ b/src/worker.py +@@ -41,7 +41,7 @@ You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + ''' + +-from PySide2 import QtCore ++from PySide6 import QtCore + import traceback + import sys + diff --git a/user/rm-extractor/APKBUILD b/user/rm-extractor/APKBUILD new file mode 100644 index 0000000..f581976 --- /dev/null +++ b/user/rm-extractor/APKBUILD @@ -0,0 +1,26 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=rm-extractor +_gittag=9d37e9437affea379dadb59e646a819b3b9147dd +pkgver=0.0.1 +pkgrel=4 +pkgdesc="Image extractor for reMarkable firmware files" +arch="noarch" +url="https://github.com/ddvk/remarkable-update" +license="MIT" +depends="py3-six py3-protobuf" +options="!check" # No testsuite +builddir="$srcdir/remarkable-update-$_gittag" +source="$pkgname-$pkgver.tar.gz::https://github.com/ddvk/remarkable-update/archive/$_gittag.tar.gz" + +package() { + install -vDm755 "$builddir"/extractor/extractor.py "$pkgdir"/usr/lib/rm-extractor/extractor.py + install -vDm644 "$builddir"/extractor/update_metadata.proto "$pkgdir"/usr/lib/rm-extractor/update_metadata.proto + install -vDm755 "$builddir"/extractor/update_metadata_pb2.py "$pkgdir"/usr/lib/rm-extractor/update_metadata_pb2.py + install -vdm755 "$pkgdir"/usr/bin + ln -s /usr/lib/rm-extractor/extractor.py "$pkgdir"/usr/bin/rm-extractor +} + +sha512sums=" +866c483950ee2cf7085e7d43d8752458d9aeb58b4361c05f50ac3118e87b295ff62b3d4288ad846eda5f93a4afe38891f6a9166f839c66f5ff0ab07afab6ae16 rm-extractor-0.0.1.tar.gz +" diff --git a/user/rm-utils/APKBUILD b/user/rm-utils/APKBUILD new file mode 100644 index 0000000..d8f2b68 --- /dev/null +++ b/user/rm-utils/APKBUILD @@ -0,0 +1,38 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +pkgname=rm-utils +pkgver=0.0.1 +pkgrel=4 +pkgdesc="Utility files for reMarkable tablet" +arch="armv7" +url="http://www.davisr.me/projects/parabola-rm/" +license="GPL-3.0-only" +makedepends="musl-dev linux-rm-headers" +options="!check" # No testsuite +builddir="$srcdir" +source=" + battery-monitor.sh + epdc-init-auto.c + epdc-show-bitmap.c + xorg.conf +" + +build() { + $CC $CFLAGS epdc-init-auto.c -o epdc-init-auto + $CC $CFLAGS epdc-show-bitmap.c -o epdc-show-bitmap +} + +package() { + install -vDm755 battery-monitor.sh "$pkgdir"/usr/bin/battery-monitor + install -vDm755 epdc-show-bitmap -t "$pkgdir"/usr/bin/ + install -vDm755 epdc-init-auto -t "$pkgdir"/usr/bin/ + install -vDm644 xorg.conf -t "$pkgdir"/etc/defaults/ +} + +sha512sums=" +7f0e6cb276357983b76c37c81a91c0d278dbec16d8982a97618f2217ef5e4d706211d921af6c79db3aad912d50aaed8cf5ce67f52a1081f61585eb97322c8deb battery-monitor.sh +f145d6af541828e69217a73f7b848f7fe57cce37426e15469a1d6a5540604f4078d4cd1f67e69e77b961b608a7b8e2930e1e82b13fe9dd181361e361895a66be epdc-init-auto.c +409744c4bbcac462c38add2b19d3b433e44cb326905fe3af240931e27bb2b71b14696229c46187bf7c060f83d77920376b5c6161f62949a2fa2c0a5464753cc0 epdc-show-bitmap.c +e14a61751e4c830652e7a849b9d596c6bc213fed87ba3f9f7c3df0d5fe35ddf28bde7de2fa977c0321639503ceff5abffd0d856380eacce24389fd50eaf3372a xorg.conf +" diff --git a/user/rm-utils/battery-monitor.sh b/user/rm-utils/battery-monitor.sh new file mode 100644 index 0000000..fb5dbc7 --- /dev/null +++ b/user/rm-utils/battery-monitor.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash +# +# battery-monitor.sh +# Prints the state of charge of the tablet's battery +# +# Parabola-rM is a free operating system for the reMarakble tablet. +# Copyright (C) 2020 +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. + +# Path for Linux 4.9 +battpath="/sys/class/power_supply/bq27441-0" + +chargenow="$(cat $battpath/charge_now)" +chargefull="$(cat $battpath/charge_full)" +status="$(cat $battpath/status)" + +chargepct="$(echo $chargenow $chargefull \ + | awk '{printf "%f", $1 / $2 * 100}' \ + | cut -d'.' -f1)" +symbol="" +if [[ "Charging" == "$status" ]]; then + symbol=$'\u26a1' # Lightning symbol +fi + +echo "${symbol}${chargepct}%" diff --git a/user/rm-utils/epdc-init-auto.c b/user/rm-utils/epdc-init-auto.c new file mode 100644 index 0000000..069ea9f --- /dev/null +++ b/user/rm-utils/epdc-init-auto.c @@ -0,0 +1,126 @@ +/* + epdc-init-auto.c + Initializes the EPDC framebuffer into a deferred-IO automatic-update + mode + + Parabola-rM is a free operating system for the reMarakble tablet. + Copyright (C) 2020 Davis Remmel + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include +#include +#include +#include +#include +#include +#include +#include + +int main() +{ + int ret; + int fb = open("/dev/fb0", O_RDWR); + struct fb_var_screeninfo vinfo; + ret = ioctl(fb, FBIOGET_VSCREENINFO, &vinfo); + if (0 != ret) { + fprintf(stderr, "FBIOGET_VSCREENINFO failed with error " + "%d, aborting\n", ret); + return 1; + } + + vinfo.xres = 1872; + vinfo.yres = 1404; + vinfo.pixclock = 160000000; + vinfo.left_margin = 32; + vinfo.right_margin = 326; + vinfo.upper_margin = 4; + vinfo.lower_margin = 12; + vinfo.hsync_len = 44; + vinfo.vsync_len = 1; + vinfo.sync = 0; + vinfo.vmode = FB_VMODE_NONINTERLACED; + vinfo.accel_flags = 0; + vinfo.activate = FB_ACTIVATE_FORCE; + + // Put screen info. Sometimes this fails when trying to set the + // pixclock. This may be a bug in the driver's arithmetic. + ret = ioctl(fb, FBIOPUT_VSCREENINFO, &vinfo); + if (0 != ret) { + fprintf(stderr, "FBIOPUT_VSCREENINFO failed with error " + "%d, attempting to reset pixclock\n", ret); + vinfo.pixclock = 6250; + ioctl(fb, FBIOPUT_VSCREENINFO, &vinfo); + vinfo.pixclock = 160000000; + ret = ioctl(fb, FBIOPUT_VSCREENINFO, &vinfo); + if (0 != ret) { + fprintf(stderr, "FBIOPUT_VSCREENINFO failed " + "with error %d, aborting\n", ret); + return 1; + } + } + + // Pull the screeninfo agian + ret = ioctl(fb, FBIOGET_VSCREENINFO, &vinfo); + if (0 != ret) { + fprintf(stderr, "FBIOGET_VSCREENINFO failed with error " + "%d, aborting\n", ret); + return 1; + } + + printf("x:%d y:%d activate:%d bpp:%d rotate:%d hsync_len:%d" + "vsync_len: %d sync:%d\n", + vinfo.xres, vinfo.yres, vinfo.activate, + vinfo.bits_per_pixel, vinfo.rotate, vinfo.hsync_len, + vinfo.vsync_len, vinfo.sync); + + struct fb_fix_screeninfo finfo; + ret = ioctl(fb, FBIOGET_FSCREENINFO, &finfo); + if (0 != ret) { + fprintf(stderr, "FBIOGET_FSCREENINFO failed with error " + "%d, aborting\n", ret); + return 1; + } + + // In case the EPDC wasn't accessible + ret = ioctl(fb, MXCFB_ENABLE_EPDC_ACCESS); + if (0 != ret) { + fprintf(stderr, "MXCFB_ENABLE_EPDC_ACCESS failed with " + "error %d, aborting\n", ret); + return 1; + } + + // Set auto update mode + __u32 aumode = AUTO_UPDATE_MODE_AUTOMATIC_MODE; + ret = ioctl(fb, MXCFB_SET_AUTO_UPDATE_MODE, &aumode); + if (0 != ret) { + fprintf(stderr, "MXCFB_SET_AUTO_UPDATE_MODE failed " + "with error %d, aborting\n", ret); + return 1; + } + + // Queue-and-merge is best-performing + __u32 uscheme = UPDATE_SCHEME_QUEUE_AND_MERGE; + ret = ioctl(fb, MXCFB_SET_UPDATE_SCHEME, &uscheme); + if (0 != ret) { + fprintf(stderr, "MXCFB_SET_UPDATE_SCHEME failed with " + "error %d, aborting\n", ret); + return 1; + } + + close(fb); + return 0; +} + diff --git a/user/rm-utils/epdc-show-bitmap.c b/user/rm-utils/epdc-show-bitmap.c new file mode 100644 index 0000000..c42bf30 --- /dev/null +++ b/user/rm-utils/epdc-show-bitmap.c @@ -0,0 +1,184 @@ +/* +epdc-show-bitmap.c +Displays a raw image to the EPDC framebuffer + +Parabola-rM is a free operating system for the reMarakble tablet. +Copyright (C) 2020 Davis Remmel + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int main(int argc, char *argv[]) { + if (argc < 2) { + printf("Must pass an image as an argument.\n"); + return 1; + } + + int ret; + int fb = open("/dev/fb0", O_RDWR); + struct fb_var_screeninfo vinfo; + ret = ioctl(fb, FBIOGET_VSCREENINFO, &vinfo); + if (0 != ret) { + printf("FBIOGET_VSCREENINFO failed with error %d" + ", aborting\n", ret); + return 1; + } + + vinfo.xres = 1872; + vinfo.yres = 1404; + vinfo.pixclock = 160000000; + vinfo.left_margin = 32; + vinfo.right_margin = 326; + vinfo.upper_margin = 4; + vinfo.lower_margin = 12; + vinfo.hsync_len = 44; + vinfo.vsync_len = 1; + vinfo.sync = 0; + vinfo.vmode = FB_VMODE_NONINTERLACED; + vinfo.accel_flags = 0; + vinfo.activate = FB_ACTIVATE_FORCE; + + // Put screen info. Sometimes this fails when trying to set the + // pixclock. This may be a bug in the driver's arithmetic. + ret = ioctl(fb, FBIOPUT_VSCREENINFO, &vinfo); + if (0 != ret) { + fprintf(stderr, "FBIOPUT_VSCREENINFO failed with error " + "%d, attempting To reset pixclock\n", ret); + vinfo.pixclock = 6250; + ioctl(fb, FBIOPUT_VSCREENINFO, &vinfo); + vinfo.pixclock = 160000000; + ret = ioctl(fb, FBIOPUT_VSCREENINFO, &vinfo); + if (0 != ret) { + fprintf(stderr, "FBIOPUT_VSCREENINFO failed " + "with error %d, aborting\n", ret); + return 1; + } + } + + printf("x:%d y:%d activate:%d bpp:%d rotate:%d hsync_len:%d" + "vsync_len: %d sync:%d\n", + vinfo.xres, vinfo.yres, vinfo.activate, + vinfo.bits_per_pixel, vinfo.rotate, vinfo.hsync_len, + vinfo.vsync_len, vinfo.sync); + + struct fb_fix_screeninfo finfo; + ret = ioctl(fb, FBIOGET_FSCREENINFO, &finfo); + if (0 != ret) { + fprintf(stderr, "FBIOGET_FSCREENINFO failed with error " + "%d, aborting\n", ret); + return 1; + } + + // In case the EPDC wasn't accessible + ret = ioctl(fb, MXCFB_ENABLE_EPDC_ACCESS); + if (0 != ret) { + fprintf(stderr, "MXCFB_ENABLE_EPDC_ACCESS failed with " + "error %d, aborting\n", ret); + return 1; + } + + // Set to partial mode to control update parameters + __u32 aumode = AUTO_UPDATE_MODE_REGION_MODE; + ret = ioctl(fb, MXCFB_SET_AUTO_UPDATE_MODE, &aumode); + if (0 != ret) { + fprintf(stderr, "MXCFB_SET_AUTO_UPDATE_MODE failed " + "with error %d, aborting\n", ret); + return 1; + } + + + // No artifacts in display output + __u32 uscheme = UPDATE_SCHEME_SNAPSHOT; + ret = ioctl(fb, MXCFB_SET_UPDATE_SCHEME, &uscheme); + if (0 != ret) { + fprintf(stderr, "MXCFB_SET_UPDATE_SCHEME failed with " + "error %d, aborting\n", ret); + return 1; + } + + // Set up update (same region for all writes, gets reused) + struct mxcfb_update_data bupdate; + bupdate.update_region.left = 0; + bupdate.update_region.top = 0; + bupdate.update_region.width = 1872; + bupdate.update_region.height = 1404; + bupdate.waveform_mode = WAVEFORM_MODE_AUTO; + bupdate.update_mode = UPDATE_MODE_FULL; + bupdate.update_marker = 0; + bupdate.temp = TEMP_USE_AMBIENT; + bupdate.flags = 0; + + struct mxcfb_update_marker_data updm; + updm.update_marker = 0; + + // mmap to framebuffer + int buflength = vinfo.yres_virtual * finfo.line_length; + printf("buflength %d\n", buflength); + char * region = mmap(0, buflength, PROT_READ | PROT_WRITE, + MAP_SHARED, fb, (off_t)0); + if (region == MAP_FAILED) { + fprintf(stderr, "map failed!\n"); + return 1; + } + + // Write black + memset(region, 0x00, buflength); + ioctl(fb, MXCFB_SEND_UPDATE, &bupdate); + ioctl(fb, MXCFB_WAIT_FOR_UPDATE_COMPLETE, &updm); + + // Write white + memset(region, 0xff, buflength); + ioctl(fb, MXCFB_SEND_UPDATE, &bupdate); + ioctl(fb, MXCFB_WAIT_FOR_UPDATE_COMPLETE, &updm); + + // Write image + FILE *pattern = fopen(argv[1], "rb"); + fseek(pattern, 0, SEEK_END); + long psize = ftell(pattern); + printf("psize is %d\n", psize); + fseek(pattern, 0, SEEK_SET); + + if (psize != buflength) { + fprintf(stderr, "Image must match framebuffer size\n"); + return 1; + } + + char *buffer = malloc(psize); + fread(buffer, psize, 1, pattern); + fclose(pattern); + + memcpy(region, buffer, psize); + ret = ioctl(fb, MXCFB_SEND_UPDATE, &bupdate); + ioctl(fb, MXCFB_WAIT_FOR_UPDATE_COMPLETE, &updm); + if (0 != ret) { + fprintf(stderr, "MXCFB_SEND_UPDATE failed with error " + "%d, aborting\n", ret); + return 1; + } + + close(fb); + return 0; +} diff --git a/user/rm-utils/xorg.conf b/user/rm-utils/xorg.conf new file mode 100644 index 0000000..8ebf064 --- /dev/null +++ b/user/rm-utils/xorg.conf @@ -0,0 +1,62 @@ +Section "ServerLayout" + Identifier "reMarkable Tablet RM100" + Screen 0 "Screen0" + InputDevice "wacom" "CorePointer" +EndSection + +Section "ServerFlags" + Option "BlankTime" "0" + Option "StandbyTime" "0" + Option "SuspendTime" "0" + Option "OffTime" "0" +EndSection + +Section "Monitor" + Identifier "Monitor0" + DisplaySize 210 158 # mm, sets DPI + Modeline "1872x1404_30.00" 104.26 1872 1960 2152 2432 1404 1405 \ + 1408 1429 -HSync +Vsync + Option "PreferredMode" "1872x1404_30.00" +EndSection + +Section "Screen" + Identifier "Screen0" + Monitor "Monitor0" + Device "epdc0" + DefaultDepth 16 + SubSection "Display" + Depth 16 + Modes "1872x1404_30.00" + EndSubSection +EndSection + +Section "Device" + Identifier "epdc0" + Driver "fbdev" + Option "fbdev" "/dev/fb0" + Option "Rotate" "CW" +EndSection + +Section "InputDevice" + Identifier "wacom" + Driver "evdev" + Option "Protocol" "Auto" + Option "Device" "/dev/input/event0" + Option "SwapAxes" "1" + Option "InvertY" "1" +EndSection + +Section "InputClass" + Identifier "touchscreen" + MatchIsTouchscreen "on" + MatchDevicePath "/dev/input/event1" + Driver "libinput" + Option "CalibrationMatrix" "-1 0 1 0 -1 1 0 0 1" # Rot 180 +EndSection + +Section "InputClass" + Identifier "facialbuttons" + MatchIsKeyboard "on" + MatchDevicePath "/dev/input/event2" + Driver "libinput" +EndSection diff --git a/user/rmfakecloud/APKBUILD b/user/rmfakecloud/APKBUILD index d4ecc74..1bdaac4 100644 --- a/user/rmfakecloud/APKBUILD +++ b/user/rmfakecloud/APKBUILD @@ -2,16 +2,15 @@ # Contributor: Antoine Martin (ayakael) pkgname=rmfakecloud -pkgver=0.0.27 +pkgver=0.0.17 _gittag=v$pkgver pkgrel=0 pkgdesc="A selfhosted cloud for the Remarkable Tablet" url="https://github.com/ddvk/rmfakecloud" -# armv7: oom -arch="all !armv7" +arch="all" license="AGPL-3.0-only" makedepends="go yarn" -options="chmod-clean net" +options="chmod-clean" source=" $pkgname-$pkgver.tar.gz::https://github.com/ddvk/rmfakecloud/archive/v$pkgver.tar.gz rmfakecloud.conf @@ -19,6 +18,20 @@ source=" " subpackages="$pkgname-openrc" +case "$CTARGET_ARCH" in + aarch64)export GOARCH="arm64" ;; + armel) export GOARCH="arm" GOARM=5 ;; + armhf) export GOARCH="arm" GOARM=6 ;; + armv7) export GOARCH="arm" GOARM=7 ;; + s390x) export GOARCH="s390x" ;; + x86) export GOARCH="386" ;; + x86_64) export GOARCH="amd64" ;; + ppc64) export GOARCH="ppc64" ;; + ppc64le) export GOARCH="ppc64le" ;; + riscv64) export GOARCH="riscv64" ;; + *) export GOARCH="unsupported";; +esac + build() { export GOPATH="$srcdir/go" export LDFLAGS="$LDFLAGS -X main.version=$pkgver" @@ -38,7 +51,7 @@ package() { install -Dm755 "$srcdir"/rmfakecloud.openrc "$pkgdir"/etc/init.d/rmfakecloud } sha512sums=" -b215295c8779f9820e9751e5cbfb8804d6cdeb0d71ffaa60d46fd803760e63227352f55a8b5a2e75d990b20a6a19c43a4ffaa03a1857e6fb37990a8b191a3ea2 rmfakecloud-0.0.27.tar.gz +2836364ba7a0c70b33f5914e357a87fb681275268a1cd5e1b6eba91037017c57f6a24b1bcecf9daa423c2588128ce591c2066d8af1d89eedccca231d24671748 rmfakecloud-0.0.17.tar.gz d5677cef282085cd6642a034dd258ffa294862aeb0ce81d6485a524a15564849bc4eb90a9d1fa4dbcf4eab69dcd893302aa06493fc8fad74d69200c2bdf246c0 rmfakecloud.conf 891d0945886796132f951293e081046334857563b4ebae28a3aa5b6bc37768767c49ce102de645ed8340af2518de606be8bf6ecafeb6d189dd937970aa3e6498 rmfakecloud.openrc " diff --git a/unmaintained/rstudio-desktop/12317_support-system-yaml-cpp.patch b/user/rstudio-desktop/12317_support-system-yaml-cpp.patch similarity index 100% rename from unmaintained/rstudio-desktop/12317_support-system-yaml-cpp.patch rename to user/rstudio-desktop/12317_support-system-yaml-cpp.patch diff --git a/unmaintained/rstudio-desktop/APKBUILD b/user/rstudio-desktop/APKBUILD similarity index 99% rename from unmaintained/rstudio-desktop/APKBUILD rename to user/rstudio-desktop/APKBUILD index 27b21ce..0993211 100644 --- a/unmaintained/rstudio-desktop/APKBUILD +++ b/user/rstudio-desktop/APKBUILD @@ -14,7 +14,7 @@ options="!check" # No testsuite # missing quarto-cli depends=" R>=3.0.1 - clang15 + clang14 hunspell-en libldap lxqt-config @@ -23,7 +23,6 @@ depends=" sqlite " makedepends=" - bash apache-ant boost-dev cmake>=3.1.0 diff --git a/unmaintained/rstudio-desktop/cran_multithread.patch b/user/rstudio-desktop/cran_multithread.patch similarity index 100% rename from unmaintained/rstudio-desktop/cran_multithread.patch rename to user/rstudio-desktop/cran_multithread.patch diff --git a/unmaintained/rstudio-desktop/desktop-main-skip-nosandbox-on-musl.patch b/user/rstudio-desktop/desktop-main-skip-nosandbox-on-musl.patch similarity index 100% rename from unmaintained/rstudio-desktop/desktop-main-skip-nosandbox-on-musl.patch rename to user/rstudio-desktop/desktop-main-skip-nosandbox-on-musl.patch diff --git a/unmaintained/rstudio-desktop/filepath-use-unistd.patch b/user/rstudio-desktop/filepath-use-unistd.patch similarity index 100% rename from unmaintained/rstudio-desktop/filepath-use-unistd.patch rename to user/rstudio-desktop/filepath-use-unistd.patch diff --git a/unmaintained/rstudio-desktop/nodejs-external.patch b/user/rstudio-desktop/nodejs-external.patch similarity index 100% rename from unmaintained/rstudio-desktop/nodejs-external.patch rename to user/rstudio-desktop/nodejs-external.patch diff --git a/unmaintained/rstudio-desktop/qt.conf b/user/rstudio-desktop/qt.conf similarity index 100% rename from unmaintained/rstudio-desktop/qt.conf rename to user/rstudio-desktop/qt.conf diff --git a/unmaintained/rstudio-desktop/sessionhistoryarchive-use-ctime.patch b/user/rstudio-desktop/sessionhistoryarchive-use-ctime.patch similarity index 100% rename from unmaintained/rstudio-desktop/sessionhistoryarchive-use-ctime.patch rename to user/rstudio-desktop/sessionhistoryarchive-use-ctime.patch diff --git a/user/ruby3.2-bundler/APKBUILD b/user/ruby3.2-bundler/APKBUILD new file mode 100644 index 0000000..b21a7d8 --- /dev/null +++ b/user/ruby3.2-bundler/APKBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jakub Jirutka +pkgname=ruby3.2-bundler +_gemname=bundler +pkgver=2.3.26 +pkgrel=0 +pkgdesc="Manage an application's gem dependencies" +url="https://bundler.io/" +arch="noarch" +license="MIT" +depends="ruby3.2" +makedepends="ruby3.2-rake" +subpackages="$pkgname-doc" +source="https://github.com/rubygems/rubygems/archive/bundler-v$pkgver.tar.gz + manpages.patch + " +builddir="$srcdir/rubygems-bundler-v$pkgver/bundler" +options="!check" # tests require deps not available in main repo + +build() { + rake build_metadata + gem build $_gemname.gemspec +} + +package() { + local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')" + + gem install \ + --local \ + --install-dir "$gemdir" \ + --bindir "$pkgdir/usr/bin" \ + --ignore-dependencies \ + --no-document \ + --verbose \ + $_gemname + + local n; for n in 1 5; do + mkdir -p "$pkgdir"/usr/share/man/man$n + mv "$gemdir"/gems/$_gemname-$pkgver/lib/bundler/man/*.$n "$pkgdir"/usr/share/man/man$n/ + done + + rm -rf "$gemdir"/cache \ + "$gemdir"/build_info \ + "$gemdir"/doc \ + "$gemdir"/gems/$_gemname-$pkgver/man \ + "$gemdir"/gems/$_gemname-$pkgver/*.md +} + +sha512sums=" +0a02d5130ecb8ca96e1850fc409a55d9f07481bbb8ec9b20554cdc6f3b3d3aada67717ab17dd30835615e4c228f39f895bd9b6f55bc22d4dbd88caef9cc105ba bundler-v2.3.26.tar.gz +77a36e61ed205aeea6114b1039dfbe29fcaf916eeae3f91785aa53b3ac534e004aa257e218534d927f39e3673eebbfb3ef9ee17f04ed81f74117799b88e53cf4 manpages.patch +" diff --git a/user/ruby3.2-bundler/manpages.patch b/user/ruby3.2-bundler/manpages.patch new file mode 100644 index 0000000..cc11b02 --- /dev/null +++ b/user/ruby3.2-bundler/manpages.patch @@ -0,0 +1,37 @@ +From: Jakub Jirutka +Date: Fri, 26 Mar 2021 23:17:29 +0100 +Subject: [PATCH] Fix --help when man pages are moved out + +* Allow to move man pages from the gem's directory to the standard + system location (/usr/share/man) without breaking `bundler --help`. +* Fallback to the bundled ronn pages when the man command is available, + but the bundler man pages are not (i.e. ruby-bundler-doc is not + installed). +* Execute man with '-c' option to print the man page to the terminal + instead of using pager. + +--- a/lib/bundler/cli.rb ++++ b/lib/bundler/cli.rb +@@ -118,16 +118,17 @@ + end + + man_path = File.expand_path("man", __dir__) +- man_pages = Hash[Dir.glob(File.join(man_path, "**", "*")).grep(/.*\.\d*\Z/).collect do |f| +- [File.basename(f, ".*"), f] ++ man_pages = Hash[Dir.glob(File.join(man_path, "**", "*")).grep(/.*\.\d*\.ronn\Z/).collect do |f| ++ man_name = File.basename(f, ".ronn") ++ [File.basename(man_name, ".*"), man_name] + end] + + if man_pages.include?(command) + man_page = man_pages[command] +- if Bundler.which("man") && man_path !~ %r{^file:/.+!/META-INF/jruby.home/.+} +- Kernel.exec "man #{man_page}" ++ if Bundler.which("man") && Kernel.system("man -w #{command} >/dev/null 2>&1") && man_path !~ %r{^file:/.+!/META-INF/jruby.home/.+} ++ Kernel.exec "man -c #{command}" + else +- puts File.read("#{man_path}/#{File.basename(man_page)}.ronn") ++ puts File.read("#{man_path}/#{man_page}.ronn") + end + elsif command_path = Bundler.which("bundler-#{cli}") + Kernel.exec(command_path, "--help") diff --git a/user/ruby3.2-minitest/APKBUILD b/user/ruby3.2-minitest/APKBUILD new file mode 100644 index 0000000..a3193fb --- /dev/null +++ b/user/ruby3.2-minitest/APKBUILD @@ -0,0 +1,66 @@ +# Contributor: Jakub Jirutka +# Maintainer: Jakub Jirutka +pkgname=ruby3.2-minitest +_gemname=minitest +# Keep version in sync with "Bundled gems" (https://stdgems.org) for the +# packaged Ruby version. +pkgver=5.15.0 +pkgrel=1 +pkgdesc="Suite of testing facilities supporting TDD, BDD, mocking, and benchmarking for Ruby" +url="https://github.com/minitest/minitest" +arch="noarch" +license="MIT" +depends="ruby3.2" +makedepends="ruby3.2-rdoc" +subpackages="$pkgname-doc" +source="https://github.com/minitest/minitest/archive/v$pkgver/$_gemname-$pkgver.tar.gz + https://rubygems.org/downloads/$_gemname-$pkgver.gem + " +builddir="$srcdir/$_gemname-$pkgver" + +prepare() { + default_prepare + + # Generate gemspec (there's no gemspec in the source). + gem specification -l --ruby "$srcdir"/$_gemname-$pkgver.gem \ + > "$builddir"/$_gemname.gemspec +} + +build() { + gem build $_gemname.gemspec +} + +check() { + ruby -Ilib -Itest -e "Dir.glob('./test/**/test_*.rb', &method(:require))" +} + +package() { + local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')" + local geminstdir="$gemdir/gems/$_gemname-$pkgver" + + gem install \ + --local \ + --install-dir "$gemdir" \ + --ignore-dependencies \ + --document ri \ + --verbose \ + $_gemname + + # Remove unnessecary files + cd "$gemdir" + rm -rf build_info cache extensions plugins + + cd "$geminstdir" + rm -rf History.* Manifest.* README.* Rakefile test/ +} + +doc() { + pkgdesc="$pkgdesc (ri docs)" + + amove "$(ruby -e 'puts Gem.default_dir')"/doc +} + +sha512sums=" +194d074fa83a87b21f551f86d2bb682bcbac53d5a23d4e0f81fbf570427c5cdfcb27e10618bea69037f9e55bea637ed96e52a10808c586ab4020d788556bda71 minitest-5.15.0.tar.gz +5e97a7aa616966ffc60e10cdc0ba123a7e793f10283ec3b6bf36066177036788cb950ad566fbac49e613b93f08b9846534f463017cde966b4890c3a34a2286be minitest-5.15.0.gem +" diff --git a/user/ruby3.2-minitest/gemspec.patch b/user/ruby3.2-minitest/gemspec.patch new file mode 100644 index 0000000..a21a0c5 --- /dev/null +++ b/user/ruby3.2-minitest/gemspec.patch @@ -0,0 +1,15 @@ +--- a/webrick.gemspec ++++ b/webrick.gemspec +@@ -14,12 +14,6 @@ + + s.require_path = %w{lib} + s.files = [ +- "Gemfile", +- "LICENSE.txt", +- "README.md", +- "Rakefile", +- "bin/console", +- "bin/setup", + "lib/webrick.rb", + "lib/webrick/accesslog.rb", + "lib/webrick/cgi.rb", diff --git a/user/ruby3.2-power_assert/APKBUILD b/user/ruby3.2-power_assert/APKBUILD new file mode 100644 index 0000000..24d62b2 --- /dev/null +++ b/user/ruby3.2-power_assert/APKBUILD @@ -0,0 +1,62 @@ +# Contributor: Jakub Jirutka +# Maintainer: Jakub Jirutka +pkgname=ruby3.2-power_assert +_gemname=power_assert +# Keep version in sync with "Bundled gems" (https://stdgems.org) for the +# packaged Ruby version. +pkgver=2.0.3 +pkgrel=0 +pkgdesc="Debug tool for Ruby that displays intermediate results of a method chain" +url="https://github.com/ruby/power_assert" +arch="noarch" +license="BSD-2-Clause AND Ruby" +depends="ruby3.2" +checkdepends="ruby3.2-pry ruby3.2-rake ruby3.2-test-unit" +makedepends="ruby3.2-rdoc" +subpackages="$pkgname-doc" +source="https://github.com/ruby/power_assert/archive/v$pkgver/$_gemname-$pkgver.tar.gz + gemspec.patch + " +builddir="$srcdir/$_gemname-$pkgver" +# Avoid circular dependency with ruby-test-unit. +options="!check" + +prepare() { + default_prepare + sed -i '/require .bundler/d' Rakefile +} + +build() { + gem build $_gemname.gemspec +} + +check() { + rake test +} + +package() { + local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')" + + gem install \ + --local \ + --install-dir "$gemdir" \ + --ignore-dependencies \ + --document ri \ + --verbose \ + $_gemname + + # Remove unnessecary files + cd "$gemdir" + rm -rf build_info cache extensions plugins +} + +doc() { + pkgdesc="$pkgdesc (ri docs)" + + amove "$(ruby -e 'puts Gem.default_dir')"/doc +} + +sha512sums=" +f5658d18b3b78e7757ddfc1ccdabc011076c009a7343eaad2748ca7aeb4d112bf19c70621cb938e7dcf1582c8bb7c5512017885ea51503b3ed274980b7d7c0b1 power_assert-2.0.3.tar.gz +eb4321b8ce33476e21f0cd6da92f1f2be93e0892f5e6043d6d5f5578160f1793993b10645c0b06b3b2df3e8190a10c83e5325c367001e222d98b290222c2edfe gemspec.patch +" diff --git a/user/ruby3.2-power_assert/gemspec.patch b/user/ruby3.2-power_assert/gemspec.patch new file mode 100644 index 0000000..ace46ba --- /dev/null +++ b/user/ruby3.2-power_assert/gemspec.patch @@ -0,0 +1,9 @@ +--- a/power_assert.gemspec ++++ b/power_assert.gemspec +@@ -15,5 +15 @@ +- s.files = `git ls-files -z`.split("\x0").reject do |f| +- f.match(%r{\A(?:test|spec|features|benchmark|bin)/}) +- end +- s.bindir = 'exe' +- s.executables = s.files.grep(%r{^exe/}) { |f| File.basename(f) } ++ s.files = Dir['lib/**/*.rb'] diff --git a/user/ruby3.2-rake/APKBUILD b/user/ruby3.2-rake/APKBUILD new file mode 100644 index 0000000..6c34011 --- /dev/null +++ b/user/ruby3.2-rake/APKBUILD @@ -0,0 +1,58 @@ +# Contributor: Jakub Jirutka +# Maintainer: Jakub Jirutka +pkgname=ruby3.2-rake +_gemname=rake +# Keep version in sync with "Bundled gems" (https://stdgems.org) for the +# packaged Ruby version. +pkgver=13.0.6 +pkgrel=1 +pkgdesc="A Ruby task runner, inspired by make" +url="https://github.com/ruby/rake" +arch="noarch" +license="MIT" +depends="ruby3.2" +checkdepends="ruby3.2-minitest" +makedepends="ruby3.2-rdoc" +subpackages="$pkgname-doc" +source="https://github.com/ruby/rake/archive/v$pkgver/$_gemname-$pkgver.tar.gz" +builddir="$srcdir/$_gemname-$pkgver" + +build() { + gem build $_gemname.gemspec +} + +check() { + # FIXME: Fix test_signal_propagation_in_tests + ruby -Ilib -Itest -e "Dir.glob('./test/**/test_*.rb', &method(:require))" -- \ + --exclude=test_signal_propagation_in_tests +} + +package() { + local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')" + + gem install \ + --local \ + --install-dir "$gemdir" \ + --bindir "$pkgdir/usr/bin" \ + --ignore-dependencies \ + --document ri \ + --verbose \ + $_gemname + + # Remove unnessecary files + cd "$gemdir" + rm -rf build_info cache extensions plugins + + cd gems/rake-* + rm -rf doc ./*.rdoc MIT-LICENSE +} + +doc() { + pkgdesc="$pkgdesc (ri docs)" + + amove "$(ruby -e 'puts Gem.default_dir')"/doc +} + +sha512sums=" +1b438be96d8cedaf70e961b0bbd2217692b0b5537b2e1d5f599158e7da3e300cf6ab0c5f0c52fea89be0beb675effbbf563d24e55c84fb673b4982013355e03c rake-13.0.6.tar.gz +" diff --git a/user/ruby3.2-rugged/APKBUILD b/user/ruby3.2-rugged/APKBUILD new file mode 100644 index 0000000..42f7818 --- /dev/null +++ b/user/ruby3.2-rugged/APKBUILD @@ -0,0 +1,75 @@ +# Contributor: Jakub Jirutka +# Maintainer: Jakub Jirutka +pkgname=ruby3.2-rugged +_gemname=rugged +pkgver=1.6.3 +pkgrel=1 +pkgdesc="Ruby bindings to libgit2" +url="https://github.com/libgit2/rugged" +arch="all" +license="MIT" +checkdepends=" + git + libgit2-tests + ruby3.2-minitest + ruby3.2-rake + ruby3.2-rake-compiler + " +makedepends=" + libgit2-dev>=${pkgver%.*} + ruby3.2 + ruby3.2-dev + " +source="$_gemname-$pkgver.tar.gz::https://github.com/libgit2/$_gemname/archive/v$pkgver.tar.gz + fix-extconf-version-check.patch + libgit2-fixture-dir.patch + libgit2-1.7.patch + skip-test_discover_false.patch + skip-test_read_global_config_file.patch + skip-online-tests.patch + " +builddir="$srcdir/$_gemname-$pkgver" +# Rugged::ConfigError: repository path '/tmp/' is not owned by current user +# requires tmp persmissions on host +options="!check" + +build() { + gem build $_gemname.gemspec + + RUGGED_USE_SYSTEM_LIBRARIES=1 gem install --local \ + --install-dir dist \ + --ignore-dependencies \ + --no-document \ + --verbose \ + $_gemname + + # Needed for tests. + cp -l dist/extensions/*/*/$_gemname-*/$_gemname/*.so lib/$_gemname/ +} + +check() { + rake test LIBGIT2_FIXTURE_DIR="/usr/src/libgit2/tests/resources" +} + +package() { + local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')" + cd "$builddir"/dist + + mkdir -p "$gemdir" + cp -r extensions gems specifications "$gemdir"/ + + # Remove unnecessary and duplicated files. + rm -f "$gemdir"/extensions/*/*/$_gemname-*/mkmf.log + cd "$gemdir"/gems/$_gemname-$pkgver + rm -rf ext/ lib/$_gemname/*.so LICENSE* README* +} + +sha512sums=" +4d54b5df04382628aff7e1abbf5fbd9730564c9bcb4e17da34ac59578b306db567b15151629a10c4a6d8174a31cd8be03c27ff0d1514cb19de237e773f4b64ce rugged-1.6.3.tar.gz +0e55aff667175496e9df1920c6d49042077196aa992a729323628224e7930a6f976bcbfae70d2af733a043c173e8cd5f571606f0b898b008472b40fcefe6b425 fix-extconf-version-check.patch +0c749aeb8d6a29aed51737bab09c7b0a6669ac691461758c856ede5d8510ad6edfa284cddd1b54982bf614a45ba817b70e838e071889a9b05e1b0580111ec826 libgit2-fixture-dir.patch +bcf7b554390fb2b1ef9043f8c934ae51a299f223ec1d7826dcb8eed078961cd084c05148c84142d60cc0a3213653bd416af1fbb09bfa5b26c9ce87fca79f6a18 libgit2-1.7.patch +33464eeefc7669fe3bf5f47c4016cacdcba4f7455ed22b441383b49721870072b5095dbb68832cdb933a7659a415476db64b579a98c888b83900d092bb8b54be skip-test_discover_false.patch +b9e028f18830e447773e895046eb03489e94bb5a76fede51f93545ed67f7249ed8f37ed4bb832eb68a2db281ff3e2b84dab8b72bb21eea4b835b0f1ce23943c3 skip-test_read_global_config_file.patch +5f0ad88eb7ac8c69605c43712e046efd47b727f48e98ee4047be850da4fea48c11fc2a383c791810a1bc81c08ca00428d4906c1af02a0d0da6e1ffbd4723b8f3 skip-online-tests.patch +" diff --git a/user/ruby3.2-rugged/fix-extconf-version-check.patch b/user/ruby3.2-rugged/fix-extconf-version-check.patch new file mode 100644 index 0000000..fc22612 --- /dev/null +++ b/user/ruby3.2-rugged/fix-extconf-version-check.patch @@ -0,0 +1,13 @@ +diff --git a/ext/rugged/extconf.rb b/ext/rugged/extconf.rb +index 7dbd2b3..92251e3 100644 +--- a/ext/rugged/extconf.rb ++++ b/ext/rugged/extconf.rb +@@ -70,7 +70,7 @@ if arg_config("--use-system-libraries", !!ENV['RUGGED_USE_SYSTEM_LIBRARIES']) + + major = minor = nil + +- File.readlines(File.join(LIBGIT2_DIR, "include", "git2", "version.h")).each do |line| ++ File.readlines(File.join("/usr", "include", "git2", "version.h")).each do |line| + if !major && (matches = line.match(/^#define LIBGIT2_VER_MAJOR\s+([0-9]+)$/)) + major = matches[1] + next diff --git a/user/ruby3.2-rugged/libgit2-1.7.patch b/user/ruby3.2-rugged/libgit2-1.7.patch new file mode 100644 index 0000000..4fe0884 --- /dev/null +++ b/user/ruby3.2-rugged/libgit2-1.7.patch @@ -0,0 +1,90 @@ +Patch-Source: https://github.com/libgit2/rugged/pull/964 +safe as we apply the libgit2 fix to libgit. +-- +From 508fbc2bcd8fdc400fcc4513b53d5205c4b7e9d4 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= +Date: Tue, 18 Jul 2023 10:27:37 +0200 +Subject: [PATCH 1/3] Update libgit2 to v1.7.0 + +--- + vendor/libgit2 | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/ext/rugged/rugged_allocator.c b/ext/rugged/rugged_allocator.c +index 30ee537..0059af6 100644 +--- a/ext/rugged/rugged_allocator.c ++++ b/ext/rugged/rugged_allocator.c +@@ -13,58 +13,11 @@ static void *rugged_gmalloc(size_t n, const char *file, int line) + return xmalloc(n); + } + +-static void *rugged_gcalloc(size_t nelem, size_t elsize, const char *file, int line) +-{ +- return xcalloc(nelem, elsize); +-} +- +-static char *rugged_gstrdup(const char *str, const char *file, int line) +-{ +- return ruby_strdup(str); +-} +- +-static char *rugged_gstrndup(const char *str, size_t n, const char *file, int line) +-{ +- size_t len; +- char *newstr; +- +- len = strnlen(str, n); +- if (len < n) +- n = len; +- +- newstr = xmalloc(n+1); +- memcpy(newstr, str, n); +- newstr[n] = '\0'; +- +- return newstr; +-} +- +-static char *rugged_gsubstrdup(const char *str, size_t n, const char *file, int line) +-{ +- char *newstr; +- +- newstr = xmalloc(n+1); +- memcpy(newstr, str, n); +- newstr[n] = '\0'; +- +- return newstr; +-} +- + static void *rugged_grealloc(void *ptr, size_t size, const char *file, int line) + { + return xrealloc(ptr, size); + } + +-static void *rugged_greallocarray(void *ptr, size_t nelem, size_t elsize, const char *file, int line) +-{ +- return xrealloc2(ptr, nelem, elsize); +-} +- +-static void *rugged_gmallocarray(size_t nelem, size_t elsize, const char *file, int line) +-{ +- return xmalloc2(nelem, elsize); +-} +- + static void rugged_gfree(void *ptr) + { + xfree(ptr); +@@ -75,14 +28,7 @@ void rugged_set_allocator(void) + git_allocator allocator; + + allocator.gmalloc = rugged_gmalloc; +- allocator.gcalloc = rugged_gcalloc; +- allocator.gstrdup = rugged_gstrdup; +- allocator.gstrndup = rugged_gstrndup; +- allocator.gstrndup = rugged_gstrndup; +- allocator.gsubstrdup = rugged_gsubstrdup; + allocator.grealloc = rugged_grealloc; +- allocator.greallocarray = rugged_greallocarray; +- allocator.gmallocarray = rugged_gmallocarray; + allocator.gfree = rugged_gfree; + + git_libgit2_opts(GIT_OPT_SET_ALLOCATOR, &allocator); diff --git a/user/ruby3.2-rugged/libgit2-fixture-dir.patch b/user/ruby3.2-rugged/libgit2-fixture-dir.patch new file mode 100644 index 0000000..9d6a24d --- /dev/null +++ b/user/ruby3.2-rugged/libgit2-fixture-dir.patch @@ -0,0 +1,12 @@ +--- a/test/test_helper.rb ++++ b/test/test_helper.rb +@@ -130,7 +130,8 @@ + end + + TEST_DIR = File.dirname(File.expand_path(__FILE__)) +- LIBGIT2_FIXTURE_DIR = File.expand_path("../../vendor/libgit2/tests/resources", __FILE__) ++ LIBGIT2_FIXTURE_DIR = ENV['LIBGIT2_FIXTURE_DIR'] \ ++ || File.expand_path("../../vendor/libgit2/tests/resources", __FILE__) + end + + class OnlineTestCase < TestCase diff --git a/user/ruby3.2-rugged/skip-online-tests.patch b/user/ruby3.2-rugged/skip-online-tests.patch new file mode 100644 index 0000000..c0cb6a6 --- /dev/null +++ b/user/ruby3.2-rugged/skip-online-tests.patch @@ -0,0 +1,15 @@ +Skip all online tests. + +--- a/test/test_helper.rb ++++ b/test/test_helper.rb +@@ -155,6 +156,10 @@ + end + + super ++ end ++ else ++ def before_setup ++ skip 'online tests have been disabled' + end + end + diff --git a/user/ruby3.2-rugged/skip-test_discover_false.patch b/user/ruby3.2-rugged/skip-test_discover_false.patch new file mode 100644 index 0000000..e968c02 --- /dev/null +++ b/user/ruby3.2-rugged/skip-test_discover_false.patch @@ -0,0 +1,27 @@ +Skip these two tests: + + 1) Failure: +RepositoryDiscoverTest#test_discover_false [/home/jirutjak/aports/testing/ruby-rugged/src/rugged-0.26.0/test/repo_test.rb:426]: +Rugged::RepositoryError expected but nothing was raised. + + 2) Failure: +RepositoryDiscoverTest#test_discover_nested_false [/home/jirutjak/aports/testing/ruby-rugged/src/rugged-0.26.0/test/repo_test.rb:432]: +Rugged::RepositoryError expected but nothing was raised. + +--- a/test/repo_test.rb ++++ b/test/repo_test.rb +@@ -423,12 +423,14 @@ + end + + def test_discover_false ++ skip 'I have no idea why this test does not pass :(' + assert_raises Rugged::RepositoryError do + Rugged::Repository.discover(@tmpdir) + end + end + + def test_discover_nested_false ++ skip 'I have no idea why this test does not pass :(' + assert_raises Rugged::RepositoryError do + Rugged::Repository.discover(File.join(@tmpdir, 'foo')) + end diff --git a/user/ruby3.2-rugged/skip-test_read_global_config_file.patch b/user/ruby3.2-rugged/skip-test_read_global_config_file.patch new file mode 100644 index 0000000..d3a3310 --- /dev/null +++ b/user/ruby3.2-rugged/skip-test_read_global_config_file.patch @@ -0,0 +1,13 @@ +It seems that this test fails when user.name is NOT set in ~/.gitconfig +on the build system. + +--- a/test/config_test.rb ++++ b/test/config_test.rb +@@ -17,6 +17,7 @@ + end + + def test_read_global_config_file ++ skip 'This test is flawed, it runs on real FS, i.e. it is not isolated' + config = Rugged::Config.global + refute_nil config['user.name'] + assert_nil config['core.bare'] diff --git a/user/ruby3.2-test-unit/APKBUILD b/user/ruby3.2-test-unit/APKBUILD new file mode 100644 index 0000000..6e30887 --- /dev/null +++ b/user/ruby3.2-test-unit/APKBUILD @@ -0,0 +1,54 @@ +# Contributor: Jakub Jirutka +# Maintainer: Jakub Jirutka +pkgname=ruby3.2-test-unit +_gemname=test-unit +# Keep version in sync with "Bundled gems" (https://stdgems.org) for the +# packaged Ruby version. +pkgver=3.5.7 +pkgrel=0 +pkgdesc="An xUnit family unit testing framework for Ruby" +url="https://test-unit.github.io" +arch="noarch" +license="BSD-2-Clause AND Python-2.0 AND Ruby" +depends="ruby3.2 ruby3.2-power_assert" +makedepends="ruby3.2-rdoc" +subpackages="$pkgname-doc" +source="https://github.com/test-unit/test-unit/archive/$pkgver/$_gemname-$pkgver.tar.gz + gemspec.patch + " +builddir="$srcdir/$_gemname-$pkgver" + +build() { + gem build $_gemname.gemspec +} + +check() { + ruby test/run-test.rb +} + +package() { + local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')" + + gem install \ + --local \ + --install-dir "$gemdir" \ + --ignore-dependencies \ + --document ri \ + --verbose \ + $_gemname + + # Remove unnessecary files + cd "$gemdir" + rm -rf build_info cache extensions plugins +} + +doc() { + pkgdesc="$pkgdesc (ri docs)" + + amove "$(ruby -e 'puts Gem.default_dir')"/doc +} + +sha512sums=" +af678a89590c9305eeac3a4e5c7e99354df5b49157de573ee3ff312dad9f12dbcaef3dfe7ffc256194e39e0438625acdd9ab3e9686d7e2c58b2cf225f7f1f74c test-unit-3.5.7.tar.gz +22f54fcf272856a9455d5a7276896ec329377b106ab47e3d376158eee72cf570f4487dd87606d730d061e7b06e5d7a0ff561cd8d279a64d8af0ac04e0f2dba92 gemspec.patch +" diff --git a/user/ruby3.2-test-unit/gemspec.patch b/user/ruby3.2-test-unit/gemspec.patch new file mode 100644 index 0000000..f2beca1 --- /dev/null +++ b/user/ruby3.2-test-unit/gemspec.patch @@ -0,0 +1,8 @@ +--- a/test-unit.gemspec ++++ b/test-unit.gemspec +@@ -27,4 +27 @@ +- spec.files = ["README.md", "Rakefile"] +- spec.files += ["COPYING", "BSDL", "PSFL"] +- spec.files += Dir.glob("{lib,sample}/**/*.rb") +- spec.files += Dir.glob("doc/text/**/*.*") ++ spec.files += Dir.glob("lib/**/*.rb") diff --git a/user/ruby3.2-webrick/APKBUILD b/user/ruby3.2-webrick/APKBUILD new file mode 100644 index 0000000..a0c0b1e --- /dev/null +++ b/user/ruby3.2-webrick/APKBUILD @@ -0,0 +1,58 @@ +# Contributor: omni +# Maintainer: Jakub Jirutka +pkgname=ruby3.2-webrick +_gemname=webrick +pkgver=1.8.1 +pkgrel=0 +pkgdesc="HTTP server toolkit for Ruby" +url="https://github.com/ruby/webrick" +arch="noarch" +license="BSD-2-Clause" +depends="ruby3.2" +checkdepends="ruby3.2-rake ruby3.2-test-unit" +makedepends="ruby3.2-rdoc" +subpackages="$pkgname-doc" +source="https://github.com/ruby/webrick/archive/v$pkgver/ruby-webrick-$pkgver.tar.gz + gemspec.patch + " +builddir="$srcdir/$_gemname-$pkgver" + +prepare() { + default_prepare + sed -i '/require .bundler/d' Rakefile +} + +build() { + gem build $_gemname.gemspec +} + +check() { + rake test +} + +package() { + local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')" + + gem install \ + --local \ + --install-dir "$gemdir" \ + --ignore-dependencies \ + --document ri \ + --verbose \ + $_gemname + + # Remove unnessecary files + cd "$gemdir" + rm -rf build_info cache extensions plugins +} + +doc() { + pkgdesc="$pkgdesc (ri docs)" + + amove "$(ruby -e 'puts Gem.default_dir')"/doc +} + +sha512sums=" +21cb396887025f85cfe04868e7fa7ef039809ca42a3acadfe1decb4dcd02eeeb3c9163e970324b56a9e0eb6202d971370af56e200c69de2d224c1941f866400c ruby-webrick-1.8.1.tar.gz +5c657602228ba5aef4c272b75bc5d7c42855876811a49a7736bfa72b00d65a2bb550ea76ffcc2bc1e2ef9575796f5981eadd97cc92b1f3bf06c0105b8d166222 gemspec.patch +" diff --git a/user/ruby3.2-webrick/gemspec.patch b/user/ruby3.2-webrick/gemspec.patch new file mode 100644 index 0000000..db18f02 --- /dev/null +++ b/user/ruby3.2-webrick/gemspec.patch @@ -0,0 +1,13 @@ +--- a/webrick.gemspec ++++ b/webrick.gemspec +@@ -14,10 +14,6 @@ + + s.require_path = %w{lib} + s.files = [ +- "Gemfile", +- "LICENSE.txt", +- "README.md", +- "Rakefile", + "lib/webrick.rb", + "lib/webrick/accesslog.rb", + "lib/webrick/cgi.rb", diff --git a/user/ruby3.2/APKBUILD b/user/ruby3.2/APKBUILD new file mode 100644 index 0000000..59e7332 --- /dev/null +++ b/user/ruby3.2/APKBUILD @@ -0,0 +1,253 @@ +# Contributor: Carlo Landmeter +# Contributor: Jakub Jirutka +# Maintainer: Jakub Jirutka +# +# secfixes: +# 3.1.4-r0: +# - CVE-2023-28755 +# - CVE-2023-28756 +# 3.1.3-r0: +# - CVE-2021-33621 +# 3.1.2-r0: +# - CVE-2022-28738 +# - CVE-2022-28739 +# 3.0.3-r0: +# - CVE-2021-41817 +# - CVE-2021-41816 +# - CVE-2021-41819 +# 2.7.4-r0: +# - CVE-2021-31799 +# - CVE-2021-31810 +# - CVE-2021-32066 +# 2.7.3-r0: +# - CVE-2021-28965 +# - CVE-2021-28966 +# 2.7.2-r0: +# - CVE-2020-25613 +# 2.6.6-r0: +# - CVE-2020-10663 +# - CVE-2020-10933 +# 2.6.5-r0: +# - CVE-2019-16255 +# - CVE-2019-16254 +# - CVE-2019-15845 +# - CVE-2019-16201 +# 2.5.2-r0: +# - CVE-2018-16395 +# - CVE-2018-16396 +# 2.5.1-r0: +# - CVE-2017-17742 +# - CVE-2018-6914 +# - CVE-2018-8777 +# - CVE-2018-8778 +# - CVE-2018-8779 +# - CVE-2018-8780 +# 2.4.2-r0: +# - CVE-2017-0898 +# - CVE-2017-10784 +# - CVE-2017-14033 +# - CVE-2017-14064 +# - CVE-2017-0899 +# - CVE-2017-0900 +# - CVE-2017-0901 +# - CVE-2017-0902 +# 2.4.3-r0: +# - CVE-2017-17405 +# +pkgname=ruby3.2 +# When upgrading, upgrade also each ruby- aport listed in file +# gems/bundled_gems. If some aport is missing or not in the main repo, +# create/move it. +pkgver=3.2.2 +_abiver="${pkgver%.*}.0" +pkgrel=0 +pkgdesc="An object-oriented language for quick and easy programming" +url="https://www.ruby-lang.org/" +arch="all" +license="Ruby AND BSD-2-Clause AND MIT" +depends="ca-certificates" +depends_dev=" + $pkgname=$pkgver-r$pkgrel + $pkgname-rdoc=$pkgver-r$pkgrel + gmp-dev + libucontext-dev + " +makedepends="$depends_dev + autoconf + gdbm-dev + libffi-dev + linux-headers + openssl-dev>3 + readline-dev + yaml-dev + zlib-dev + " +install="$pkgname.post-upgrade" +subpackages="$pkgname-dbg $pkgname-doc $pkgname-dev + $pkgname-rdoc::noarch + $pkgname-libs + $pkgname-full::noarch + " +source="https://cache.ruby-lang.org/pub/ruby/${pkgver%.*}/ruby-$pkgver.tar.gz + test_insns-lower-recursion-depth.patch + fix-get_main_stack.patch + dont-install-bundled-gems.patch + fix-riscv64-build.patch + " +replaces="ruby3.2-gems" +builddir="$srcdir"/ruby-$pkgver + +# For backward compatibility (pre 3.x). +for _i in bigdecimal etc fiddle gdbm io-console irb json; do + provides="$provides ruby3.2-$_i=$pkgver-r$pkgrel" +done + +_gemdir="/usr/lib/ruby/gems/$_abiver" +_rubydir="/usr/lib/ruby/$_abiver" +_chost="${CHOST/-alpine-/-}" + +case "$CARCH" in + x86) _arch="i386";; + *) _arch="$CARCH";; +esac + +prepare() { + default_prepare + autoconf + + # v2.7.1 - Of all the bootstraptest only test_fiber fails on s390x: + # test_fiber.rb bootstraptest.tmp.rb:8: [BUG] vm_call_cfunc: cfp consistency error (0x000003ffb63fefb0, 0x000003ffb42f5f58) + case "$CARCH" in + s390x) rm bootstraptest/test_fiber.rb;; + esac + + local name ver; while read -r name ver _; do + case "$name=$ver" in + [a-z]*=[0-9]*.[0-9]*) + if ! apk add -qs "ruby-$name>=$ver" >/dev/null 2>&1; then + warning "bump package ruby-$name to version $ver" + fi + echo "ruby-$name>=$ver" >> "$srcdir"/.ruby-full.depends + esac + done < "$builddir"/gems/bundled_gems +} + +build() { + # -fomit-frame-pointer makes ruby segfault, see gentoo bug #150413 + # In many places aliasing rules are broken; play it safe + # as it's risky with newer compilers to leave it as it is. + # -O2 - ruby is a language runtime, so performance is crucial. Moreover, + # ruby 3.1.1 fails with Bus Error when compiled with -Os on armhf/armv7. + # This makes ruby-libs 7% bigger (13.4 -> 14.4 MiB). + export CFLAGS="${CFLAGS/-Os/-O2} -fno-omit-frame-pointer -fno-strict-aliasing" + export CPPFLAGS="${CPPFLAGS/-Os/-O2} -fno-omit-frame-pointer -fno-strict-aliasing" + + # Needed for coroutine stuff + export LIBS="-lucontext" + + # ruby saves path to install. we want use $PATH + export INSTALL=install + + # the configure script does not detect isnan/isinf as macros + export ac_cv_func_isnan=yes + export ac_cv_func_isinf=yes + + ./configure \ + --build=$CBUILD \ + --host=$CHOST \ + --prefix=/usr \ + --sysconfdir=/etc \ + --mandir=/usr/share/man \ + --infodir=/usr/share/info \ + --with-sitedir=/usr/local/lib/site_ruby \ + --with-search-path="/usr/lib/site_ruby/\$(ruby_ver)/$_arch-linux" \ + --enable-pthread \ + --disable-rpath \ + --enable-shared \ + --with-mantype=man + make +} + +check() { + # https://bugs.ruby-lang.org/issues/18380 + local disable_tests="-n !/TestAddressResolve#test_socket_getnameinfo_domain_blocking/" + + case "$CARCH" in + x86 | armhf | armv7) + # TestReadline#test_interrupt_in_other_thread fails on 32 bit arches according + # to upstream, but the test is disabled just on Travis, not in test suite. + # https://bugs.ruby-lang.org/issues/18393 + disable_tests="$disable_tests -n !/TestReadline#test_interrupt_in_other_thread/" + ;; + esac + + make test TESTS="$disable_tests" +} + +package() { + make DESTDIR="$pkgdir" SUDO="" install + + install -m 644 -D COPYING "$pkgdir"/usr/share/licenses/$pkgname/COPYING + + cd "$pkgdir" + + # Remove bundled gem bundler; it's provided by a separate aport/package + # ruby-bundler. + rm -rf ./$_rubydir/bundler + rm ./$_rubydir/bundler.rb + rm -rf ./$_gemdir/gems/bundler-* + rm ./$_gemdir/specifications/default/bundler-*.gemspec + rm usr/bin/bundle usr/bin/bundler + + # Remove bundled CA certificates; they are provided by ca-certificates. + rm ./$_rubydir/rubygems/ssl_certs/*/*.pem + rmdir ./$_rubydir/rubygems/ssl_certs/* || true + + rm -Rf ./$_gemdir/cache/* + + if [ -d usr/local ]; then + local f=$(find usr/local -type f) + if [ -n "$f" ]; then + error "Found files in /usr/local:" + echo "$f" + return 1 + fi + rm -r usr/local + fi +} + +rdoc() { + pkgdesc="Ruby documentation tool" + license="Ruby" + depends="$pkgname" + + amove $_rubydir/rdoc + amove $_gemdir/gems/rdoc-* + amove $_gemdir/specifications/default/rdoc-* + amove usr/bin/ri + amove usr/bin/rdoc +} + +libs() { + pkgdesc="Libraries necessary to run Ruby" + depends="" + + amove usr/lib +} + +full() { + pkgdesc="Ruby with all bundled gems" + # bundler is bundled since Ruby 2.6, so include it in ruby-full despite + # that it's provided by a seprate aport/package. + depends="ruby ruby-rdoc ruby-bundler $(cat "$srcdir"/.ruby-full.depends)" + + mkdir -p "$subpkgdir" +} + +sha512sums=" +bcc68f3f24c1c8987d9c80b57332e5791f25b935ba38daf5addf60dbfe3a05f9dcaf21909681b88e862c67c6ed103150f73259c6e35c564f13a00f432e3c1e46 ruby-3.2.2.tar.gz +16fc1f35aee327d1ecac420b091beaa53c675e0504d5a6932004f17ca68a2c38f57b053b0a3903696f2232c5add160d363e3972a962f7f7bcb52e4e998c7315d test_insns-lower-recursion-depth.patch +42cd45c1db089a1ae57834684479a502e357ddba82ead5fa34e64c13971e7ab7ad2919ddd60a104a817864dd3e2e35bdbedb679210eb41d82cab36a0687e43d4 fix-get_main_stack.patch +a77da5e5eb7d60caf3f1cabb81e09b88dc505ddd746e34efd1908c0096621156d81cc65095b846ba9bdb66028891aefce883a43ddec6b56b5beb4aac5e4ee33f dont-install-bundled-gems.patch +000530316af1fca007fe8cee694b59e2e801674bcc1a2ebea95e67745d4afc0ce66c902fdbc88ee847a4fbf55115b183cd803cbf7c98ef685938efb3e2b7c991 fix-riscv64-build.patch +" diff --git a/user/ruby3.2/dont-install-bundled-gems.patch b/user/ruby3.2/dont-install-bundled-gems.patch new file mode 100644 index 0000000..b125fa0 --- /dev/null +++ b/user/ruby3.2/dont-install-bundled-gems.patch @@ -0,0 +1,20 @@ +Don't install bundled gems - we package them separately. + +--- a/tool/rbinstall.rb ++++ b/tool/rbinstall.rb +@@ -990,6 +990,7 @@ + end + end + ++=begin XXX-Patched + install?(:ext, :comm, :gem, :'bundled-gems') do + gem_dir = Gem.default_dir + install_dir = with_destdir(gem_dir) +@@ -1057,6 +1058,7 @@ + puts "skipped bundled gems: #{gems.join(' ')}" + end + end ++=end + + parse_args() + diff --git a/user/ruby3.2/fix-get_main_stack.patch b/user/ruby3.2/fix-get_main_stack.patch new file mode 100644 index 0000000..864a314 --- /dev/null +++ b/user/ruby3.2/fix-get_main_stack.patch @@ -0,0 +1,68 @@ +--- a/thread_pthread.c ++++ b/thread_pthread.c +@@ -858,9 +858,6 @@ + # define MAINSTACKADDR_AVAILABLE 0 + # endif + #endif +-#if MAINSTACKADDR_AVAILABLE && !defined(get_main_stack) +-# define get_main_stack(addr, size) get_stack(addr, size) +-#endif + + #ifdef STACKADDR_AVAILABLE + /* +@@ -942,6 +939,55 @@ + return 0; + #undef CHECK_ERR + } ++ ++#if defined(__linux__) && !defined(__GLIBC__) && defined(HAVE_GETRLIMIT) ++ ++#ifndef PAGE_SIZE ++#include ++#define PAGE_SIZE sysconf(_SC_PAGE_SIZE) ++#endif ++ ++static int ++get_main_stack(void **addr, size_t *size) ++{ ++ size_t start, end, limit, prevend = 0; ++ struct rlimit r; ++ FILE *f; ++ char buf[PATH_MAX+80], s[8]; ++ int n; ++ STACK_GROW_DIR_DETECTION; ++ ++ f = fopen("/proc/self/maps", "re"); ++ if (!f) ++ return -1; ++ n = 0; ++ while (fgets(buf, sizeof buf, f)) { ++ n = sscanf(buf, "%zx-%zx %*s %*s %*s %*s %7s", &start, &end, s); ++ if (n >= 2) { ++ if (n == 3 && strcmp(s, "[stack]") == 0) ++ break; ++ prevend = end; ++ } ++ n = 0; ++ } ++ fclose(f); ++ if (n == 0) ++ return -1; ++ ++ limit = 100 << 20; /* 100MB stack limit */ ++ if (getrlimit(RLIMIT_STACK, &r)==0 && r.rlim_cur < limit) ++ limit = r.rlim_cur & -PAGE_SIZE; ++ if (limit > end) limit = end; ++ if (prevend < end - limit) prevend = end - limit; ++ if (start > prevend) start = prevend; ++ *addr = IS_STACK_DIR_UPPER() ? (void *)start : (void *)end; ++ *size = end - start; ++ return 0; ++} ++#else ++# define get_main_stack(addr, size) get_stack(addr, size) ++#endif ++ + #endif + + static struct { diff --git a/user/ruby3.2/fix-riscv64-build.patch b/user/ruby3.2/fix-riscv64-build.patch new file mode 100644 index 0000000..e81e8b6 --- /dev/null +++ b/user/ruby3.2/fix-riscv64-build.patch @@ -0,0 +1,38 @@ +Patch-Source: https://lists.openembedded.org/g/openembedded-core/message/161168 +partially extracted to actually apply onto a release tarball + +--- +From dfb22e4d6662bf72879eda806eaa78c7b52b519e Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Tue, 25 Jan 2022 20:29:14 -0800 +Subject: [PATCH] vm_dump.c: Define REG_S1 and REG_S2 for musl/riscv + +These defines are missing in musl, there is a possible +patch to add them to musl, but we need a full list of +these names for mcontext that can be added once for all + +Upstream-Status: Inappropriate [musl bug] +Signed-off-by: Khem Raj +--- + vm_dump.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/vm_dump.c b/vm_dump.c +index a98f5aa..957b785 100644 +--- a/vm_dump.c ++++ b/vm_dump.c +@@ -39,6 +39,11 @@ + + #define MAX_POSBUF 128 + ++#if defined(__riscv) && !defined(__GLIBC__) ++# define REG_S1 9 ++# define REG_S2 18 ++#endif ++ + #define VM_CFP_CNT(ec, cfp) \ + ((rb_control_frame_t *)((ec)->vm_stack + (ec)->vm_stack_size) - \ + (rb_control_frame_t *)(cfp)) +-- +2.35.0 + diff --git a/user/ruby3.2/ruby3.2.post-upgrade b/user/ruby3.2/ruby3.2.post-upgrade new file mode 100644 index 0000000..6cba787 --- /dev/null +++ b/user/ruby3.2/ruby3.2.post-upgrade @@ -0,0 +1,17 @@ +#!/bin/sh + +ver_new="$1" +ver_old="$2" + +if [ "$(apk version -t "$ver_old" "2.5.0-r0")" = "<" ]; then + cat >&2 <<-EOF + * + * In Ruby 2.5 more parts of the stdlib has been splitted into standalone + * gems, yet still installed with Ruby by default. We have moved some of + * them into separate subpackages. If you don't know which subpackages you + * need, you may install meta-package "ruby-full". + * + EOF +fi + +exit 0 diff --git a/user/ruby3.2/test_insns-lower-recursion-depth.patch b/user/ruby3.2/test_insns-lower-recursion-depth.patch new file mode 100644 index 0000000..0069720 --- /dev/null +++ b/user/ruby3.2/test_insns-lower-recursion-depth.patch @@ -0,0 +1,47 @@ +The patched test is a recursion function. We have lower stack size, +so we hit SystemStackError sooner than on other platforms. + + #361 test_insns.rb:389:in `block in ': + # recursive once + def once n + return %r/#{ + if n == 0 + true + else + once(n-1) # here + end + }/ox + end + x = once(128); x = once(7); x = once(16); + x =~ "true" && $~ + #=> "" (expected "true") once + Stderr output is not empty + bootstraptest.tmp.rb:3:in `once': stack level too deep (SystemStackError) + from bootstraptest.tmp.rb:7:in `block in once' + from bootstraptest.tmp.rb:3:in `once' + from bootstraptest.tmp.rb:7:in `block in once' + from bootstraptest.tmp.rb:3:in `once' + from bootstraptest.tmp.rb:7:in `block in once' + from bootstraptest.tmp.rb:3:in `once' + from bootstraptest.tmp.rb:7:in `block in once' + from bootstraptest.tmp.rb:3:in `once' + ... 125 levels... + from bootstraptest.tmp.rb:3:in `once' + from bootstraptest.tmp.rb:7:in `block in once' + from bootstraptest.tmp.rb:3:in `once' + from bootstraptest.tmp.rb:11:in `
' + Test_insns.rb FAIL 1/187 + FAIL 1/1197 tests failed + Make: *** [uncommon.mk:666: yes-btest-ruby] Error 1 + +--- a/bootstraptest/test_insns.rb ++++ b/bootstraptest/test_insns.rb +@@ -274,7 +274,7 @@ + end + }/ox + end +- x = once(128); x = once(7); x = once(16); ++ x = once(32); x = once(7); x = once(16); + x =~ "true" && $~ + }, + [ 'once', <<-'},', ], # { diff --git a/user/sane/APKBUILD b/user/sane/APKBUILD new file mode 100644 index 0000000..1eb5756 --- /dev/null +++ b/user/sane/APKBUILD @@ -0,0 +1,162 @@ +# Contributor: Fabio Riga +# Contributor: Valery Kartel +# Maintainer: Valery Kartel +pkgname=sane +_pkgname=sane-backends +pkgver=1.1.1 +pkgrel=3 +pkgdesc="Scanner Access Now Easy - universal scanner interface" +url="http://www.sane-project.org/" +arch="all" +license="GPL-2.0-or-later GPL-2.0-or-later-with-sane-exception Public-Domain" +makedepends="diffutils file libtool libusb-dev v4l-utils-dev net-snmp-dev + avahi-dev curl-dev libpng-dev libjpeg-turbo-dev tiff-dev libgphoto2-dev + poppler-dev linux-headers libieee1284-dev libxml2-dev" +install="$pkgname-saned.pre-install $pkgname.pre-install" +pkgusers="saned" +pkggroups="scanner" +_backends="abaton agfafocus apple artec artec_eplus48u as6e avision bh canon + canon630u canon_dr canon_pp cardscan coolscan coolscan2 coolscan3 dc25 + dc210 dc240 dell1600n_net dmc epjitsu epson epson2 epsonds escl fujitsu + genesys gphoto2 gt68xx hp hp3500 hp3900 hp4200 hp5400 hp5590 hpsj5s + hpljm1005 hs2p ibm kodak kodakaio kvs1025 kvs20xx kvs40xx leo lexmark + ma1509 magicolor matsushita microtek microtek2 mustek mustek_pp mustek_usb + mustek_usb2 nec net niash p5 pie pieusb pixma plustek plustek_pp ricoh ricoh2 + rts8891 s9036 sceptre sharp sm3600 sm3840 snapscan sp15c st400 stv680 + tamarack teco1 teco2 teco3 test u12 umax umax_pp umax1220u v4l + xerox_mfp" + +case "$CARCH" in + x86) + options="$options !check" + _backends="$_backends qcam canon_lide70" + ;; + x86_64) + _backends="$_backends qcam canon_lide70" + ;; +esac + +_pkgdesc_dell1600n_net="SANE backend for Dell 1600n that supports colour and monochrome scans over ethernet, usb not supported" +for _backend in $_backends; do + subpackages="$subpackages $pkgname-backend-$_backend:_backend" +done +subpackages="$pkgname-doc $pkgname-dev $subpackages $pkgname-utils $pkgname-saned + $pkgname-udev::noarch $_pkgname::noarch" +source="https://gitlab.com/sane-project/backends/uploads/7d30fab4e115029d91027b6a58d64b43/sane-backends-$pkgver.tar.gz + $pkgname-fix-tests.patch::https://gitlab.com/sane-project/backends/-/commit/edfc90450ee06149537fadb3095ba4b215c5c4fa.patch + saned.initd + include.patch + pidfile.patch + check.patch + sane-backends-no-avahi-thread.patch + " +builddir="$srcdir"/$_pkgname-$pkgver + +# secfixes: +# 1.0.30-r0: +# - CVE-2020-12861 +# - CVE-2020-12862 +# - CVE-2020-12863 +# - CVE-2020-12864 +# - CVE-2020-12865 +# - CVE-2020-12866 +# - CVE-2020-12867 + +build() { + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --with-docdir=/usr/share/doc/$pkgname \ + --with-usb \ + --enable-avahi \ + --disable-rpath \ + --disable-locking + make +} + +check() { + make check +} + +package() { + make DESTDIR="$pkgdir" install + echo -n "" > "$pkgdir"/etc/$pkgname.d/dll.conf + install -Dm644 backend/dll.aliases "$pkgdir"/etc/$pkgname.d/dll.aliases +} + +doc() { + default_doc + mkdir -p "$subpkgdir"/usr/share/licenses/$_pkgname + mv "$subpkgdir"/usr/share/doc/$_pkgname/LICENSE \ + "$subpkgdir"/usr/share/licenses/$_pkgname +} + +saned() { + local name=${subpkgname#$pkgname-} + pkgdesc="$pkgdesc (network scanner server)" + mkdir -p "$subpkgdir"/etc/$pkgname.d "$subpkgdir"/usr + mv "$pkgdir"/etc/$pkgname.d/$name.conf "$subpkgdir"/etc/$pkgname.d + mv "$pkgdir"/usr/sbin "$subpkgdir"/usr/ + install -Dm755 "$srcdir"/$name.initd "$subpkgdir"/etc/init.d/$name +} + +utils() { + pkgdesc="$pkgdesc (utilities)" + mkdir -p "$subpkgdir"/usr + mv "$pkgdir"/usr/bin "$subpkgdir"/usr + rm -fr "$pkgdir"/usr/share +} + +udev() { + pkgdesc="$pkgdesc (udev rules)" + install_if="$pkgname=$pkgver-r$pkgrel udev" + install -Dm644 "$builddir"/tools/udev/lib$pkgname.rules \ + "$subpkgdir"/usr/lib/udev/rules.d/49-$pkgname.rules + sed -i 's|NAME="%k", ||g' "$subpkgdir"/usr/lib/udev/rules.d/49-$pkgname.rules +} + +backends() { + local _backend; + pkgdesc="$pkgdesc (metapackage)" + depends="$pkgname-utils $pkgname-saned" + for _backend in $_backends; do + [ "$_backend" = "test" ] && continue + depends="$depends $pkgname-backend-$_backend" + done + mkdir -p "$subpkgdir" +} + +_backend() { + local name=${subpkgname#$pkgname-backend-} + depends="$pkgname" + pkgdesc=$(eval echo \$_pkgdesc_$name) + if [ ! "$pkgdesc" ]; then + # cut description from man-page + pkgdesc=$(tr '\n' ' ' < "$builddir"/doc/$pkgname-$name.man) + pkgdesc=${pkgdesc#*\- } + pkgdesc=${pkgdesc%% .SH *}; + fi + mkdir -p "$subpkgdir"/usr/lib/$pkgname \ + "$subpkgdir"/etc/$pkgname.d/dll.d + mv "$pkgdir"/usr/lib/$pkgname/lib$pkgname-$name.* \ + "$subpkgdir"/usr/lib/$pkgname + echo "$name" > "$subpkgdir"/etc/$pkgname.d/dll.d/$name + if [ -f "$pkgdir"/etc/$pkgname.d/$name.conf ]; then + mv "$pkgdir"/etc/$pkgname.d/$name.conf \ + "$subpkgdir"/etc/$pkgname.d + fi + if [ -f "$pkgdir"/usr/bin/$name ]; then + mkdir -p "$subpkgdir"/usr/bin + mv "$pkgdir"/usr/bin/$name "$subpkgdir"/usr/bin + fi +} + +sha512sums=" +25bd9f90d550cfe6a6d01c48e83716a53f4b0e3a294287e455ecb5e5b80c8fe1699f45c6c87f694475cceb85745c70597e18a7b1094669d5091c5fb183dfe94d sane-backends-1.1.1.tar.gz +f4187409a85dbdb95213948fcc1bb34cf319a3a5ae34093d1e9e7983dfc89336c75132713e6f3113ad7ef2b0ed78bdc0c6e031796fca7004787776f46c742ec6 sane-fix-tests.patch +0a06eaa28b345202f2bdf8361e06f843bb7a010b7d8f80132f742672c94249c43f64031cefa161e415e2e2ab3a53b23070fb63854283f9e040f5ff79394ac7d1 saned.initd +1779ff8beb1ba5f9238c25d819a7f0045f7e257c19b511315feb85650e445ca86450a9e1d7ff8650499d3dae808589a6c2e358d5f3f39a3f40ce4999179b86d6 include.patch +09505943f9441854a6c333f19e2535b4a646a8cc060fe82c6261e7d29c72773ebe98d43a91acc951f4336a3c8b4c84ab7c7b0763426136b4b59d9546bc2fa8c0 pidfile.patch +cfa327209efd9a2a2db7cbcf571852959823aaa19b43d5f6415834cd5ae38b6324ecae16779f6f896aa0d7ac890fe23244100b7d6a68e5e9d52cd38ec82bfac8 check.patch +6e6b6336203ee6d1ac96ed2d742e181fb65e8d93386b76d70b6359afbcce98343d89ec8b2b611261f79901779a2999f9262c3f85898bd15c74b00348e0cd3cd7 sane-backends-no-avahi-thread.patch +" diff --git a/user/sane/check.patch b/user/sane/check.patch new file mode 100644 index 0000000..afbc7ef --- /dev/null +++ b/user/sane/check.patch @@ -0,0 +1,11 @@ +--- a/testsuite/sanei/Makefile.in ++++ b/testsuite/sanei/Makefile.in +@@ -77,7 +77,7 @@ + POST_UNINSTALL = : + build_triplet = @build@ + host_triplet = @host@ +-check_PROGRAMS = sanei_usb_test$(EXEEXT) test_wire$(EXEEXT) \ ++check_PROGRAMS = test_wire$(EXEEXT) \ + sanei_check_test$(EXEEXT) sanei_config_test$(EXEEXT) \ + sanei_constrain_test$(EXEEXT) + subdir = testsuite/sanei diff --git a/user/sane/include.patch b/user/sane/include.patch new file mode 100644 index 0000000..518d3b4 --- /dev/null +++ b/user/sane/include.patch @@ -0,0 +1,11 @@ +--- a/include/sane/sane.h ++++ b/include/sane/sane.h +@@ -16,6 +16,8 @@ + #ifndef sane_h + #define sane_h + ++#include ++ + #ifdef __cplusplus + extern "C" { + #endif diff --git a/user/sane/pidfile.patch b/user/sane/pidfile.patch new file mode 100644 index 0000000..457755b --- /dev/null +++ b/user/sane/pidfile.patch @@ -0,0 +1,11 @@ +--- a/frontend/saned.c ++++ b/frontend/saned.c +@@ -224,7 +224,7 @@ + int numchildren; + + #define SANED_CONFIG_FILE "saned.conf" +-#define SANED_PID_FILE "/var/run/saned.pid" ++#define SANED_PID_FILE "/run/saned/saned.pid" + + #define SANED_SERVICE_NAME "sane-port" + #define SANED_SERVICE_PORT 6566 diff --git a/user/sane/sane-backends-no-avahi-thread.patch b/user/sane/sane-backends-no-avahi-thread.patch new file mode 100644 index 0000000..149a305 --- /dev/null +++ b/user/sane/sane-backends-no-avahi-thread.patch @@ -0,0 +1,48 @@ +diff --git a/backend/net.c.orig b/backend/net.c +index 7c4aae9..0adfbc2 100644 +--- a/backend/net.c.orig ++++ b/backend/net.c +@@ -1043,12 +1043,12 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize) + continue; + } + #if WITH_AVAHI +- avahi_threaded_poll_lock (avahi_thread); ++ if(avahi_thread) avahi_threaded_poll_lock (avahi_thread); + #endif /* WITH_AVAHI */ + DBG (2, "sane_init: trying to add %s\n", device_name); + add_device (device_name, 0); + #if WITH_AVAHI +- avahi_threaded_poll_unlock (avahi_thread); ++ if(avahi_thread) avahi_threaded_poll_unlock (avahi_thread); + #endif /* WITH_AVAHI */ + } + +@@ -1094,12 +1094,12 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize) + continue; + #endif /* ENABLE_IPV6 */ + #if WITH_AVAHI +- avahi_threaded_poll_lock (avahi_thread); ++ if(avahi_thread) avahi_threaded_poll_lock (avahi_thread); + #endif /* WITH_AVAHI */ + DBG (2, "sane_init: trying to add %s\n", host); + add_device (host, 0); + #if WITH_AVAHI +- avahi_threaded_poll_unlock (avahi_thread); ++ if(avahi_thread) avahi_threaded_poll_unlock (avahi_thread); + #endif /* WITH_AVAHI */ + } + free (copy); +@@ -1517,11 +1517,11 @@ sane_open (SANE_String_Const full_name, SANE_Handle * meta_handle) + "sane_open: device %s not found, trying to register it anyway\n", + nd_name); + #if WITH_AVAHI +- avahi_threaded_poll_lock (avahi_thread); ++ if(avahi_thread) avahi_threaded_poll_lock (avahi_thread); + #endif /* WITH_AVAHI */ + status = add_device (nd_name, &dev); + #if WITH_AVAHI +- avahi_threaded_poll_unlock (avahi_thread); ++ if(avahi_thread) avahi_threaded_poll_unlock (avahi_thread); + #endif /* WITH_AVAHI */ + if (status != SANE_STATUS_GOOD) + { diff --git a/user/sane/sane-saned.pre-install b/user/sane/sane-saned.pre-install new file mode 100644 index 0000000..caad990 --- /dev/null +++ b/user/sane/sane-saned.pre-install @@ -0,0 +1,5 @@ +#!/bin/sh + +adduser -SDH -h /run/saned -s /sbin/nologin -G scanner -g saned saned 2>/dev/null + +exit 0 diff --git a/user/sane/sane.pre-install b/user/sane/sane.pre-install new file mode 100644 index 0000000..b75c867 --- /dev/null +++ b/user/sane/sane.pre-install @@ -0,0 +1,5 @@ +#!/bin/sh + +addgroup -S scanner 2>/dev/null + +exit 0 diff --git a/user/sane/saned.initd b/user/sane/saned.initd new file mode 100644 index 0000000..6482073 --- /dev/null +++ b/user/sane/saned.initd @@ -0,0 +1,14 @@ +#!/sbin/openrc-run + +description="SANE network scanner server" + +owner=saned +pidfile=/run/saned/saned.pid +cfgfile=/etc/sane.d/saned.conf +command=/usr/sbin/saned +command_args="-a $owner" +required_files="$cfgfile" + +start_pre() { + checkpath -dm755 -o $owner ${pidfile%/*} +} diff --git a/user/scanservjs/APKBUILD b/user/scanservjs/APKBUILD index 9effbf6..4aeb67d 100644 --- a/user/scanservjs/APKBUILD +++ b/user/scanservjs/APKBUILD @@ -1,7 +1,8 @@ -# Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + pkgname=scanservjs -pkgver=3.0.4 +pkgver=3.0.3 pkgrel=0 pkgdesc="SANE scanner nodejs web ui" arch="noarch" @@ -62,7 +63,7 @@ package() { install -Dm 644 "$srcdir"/scanservjs.conf "$pkgdir"/etc/conf.d/scanservjs } sha512sums=" -f19b1bd5acb01f82fa98bc79f9d401f1b6c19aa9e4319d75efd4b82a6db44a348784953ae1542d362d3b8e328a1a469e9320fd7c937e6aa102a19a36cd8ce9e8 scanservjs-3.0.4.tar.gz +e3746cfab118b08b75fe5a862e1b06d35bce3fafe7b5cf482ddfd28aad8ac9879981eef5bdadc35a783607aac49eef95b966ff1d2ddf431eaf6e2d7e335623fb scanservjs-3.0.3.tar.gz f58dd5e1c4936d7e25065a295f5d01e64189cdefe92ba54fc875348a59a30b2055c93464d510a52820e66b42a69d0626d3513c93ab60b0768e1e8d5b3538bb13 scanservjs.initd 9d4fdab3803a598c729bf703369d8594b383163b05045f31e516f184a87d8deef8c8b40942d324e04bdf751ac9d63f7de25b13364f9f30888eba2af873369b36 scanservjs.conf " diff --git a/user/scantopl/APKBUILD b/user/scantopl/APKBUILD index a68b668..725e413 100644 --- a/user/scantopl/APKBUILD +++ b/user/scantopl/APKBUILD @@ -1,10 +1,11 @@ -# Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + pkgname=scantopl -pkgver=1.0.1 +pkgver=0.0.1 pkgrel=0 pkgdesc="Automatically send scanservjs scanned document to paperless-ng" -_gittag="v$pkgver" +_gittag="5c5d71a9e1cf8985d374453c866c1711692334e2" url="https://github.com/Celedhrim/scantopl" arch="all" license="WTFPL" @@ -15,7 +16,7 @@ source=" scantopl.initd scantopl.conf " -builddir="$srcdir/$pkgname-${_gittag/v}" +builddir="$srcdir/$pkgname-$_gittag" options="!check" # No testsuite build() { @@ -30,7 +31,7 @@ package() { install -Dm644 "$srcdir"/scantopl.conf "$pkgdir"/etc/conf.d/scantopl } sha512sums=" -e5238c4f8e727e80c5c66441e8de5eeb775fdfe05ee85509c942c2516e8996243cd1b72c7c87c8bbee2e0475cc0075244aa28164a746f6e7eded253bcb707ba7 scantopl-1.0.1.tar.gz +f47823ffdea68de71ce9f3a347f31eee3556aae2087f68d2cf4078b9694894d06fc8de94e806ad34358e0ec636ace6dc5d97273c3102192584cb540ede3bd288 scantopl-0.0.1.tar.gz 8238411fe8881be6690a583a6bfc71e52f3131320f5d92bb36f8af61802980265a8cf5250eb699d9214f7c6c168d14c39867a09587fb07841a8504a6a28db74b scantopl.initd ee2e631901b1d88c0dede6587318e44884255a7c82e090371f017dbb91563c16f0567c0d45b3183d0a8abb3ee4b71a33f3d79258ad2b2f6d8930a5bc7625070a scantopl.conf " diff --git a/unmaintained/soci/APKBUILD b/user/soci/APKBUILD similarity index 100% rename from unmaintained/soci/APKBUILD rename to user/soci/APKBUILD diff --git a/user/tandoor-recipes/APKBUILD b/user/tandoor-recipes/APKBUILD index 8a680e0..72a3d33 100644 --- a/user/tandoor-recipes/APKBUILD +++ b/user/tandoor-recipes/APKBUILD @@ -4,8 +4,7 @@ pkgname=tandoor-recipes pkgver=1.5.12 pkgrel=1 pkgdesc="Application for managing recipes, planning meals, building shopping lists, etc." -# armv7: oom -arch="noarch !armv7" +arch="noarch" url="https://github.com/TandoorRecipes/recipes" license="AGPL-3.0-only" depends=" @@ -57,7 +56,7 @@ depends=" py3-requests py3-six py3-uritemplate - py3-validators~0.20 + py3-validators~=0.20 py3-webdavclient3 py3-whitenoise py3-yaml diff --git a/user/u-boot-rm/APKBUILD b/user/u-boot-rm/APKBUILD new file mode 100644 index 0000000..da2e135 --- /dev/null +++ b/user/u-boot-rm/APKBUILD @@ -0,0 +1,125 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +pkgname=u-boot-rm +pkgver=2020.09 +_rm1tag=97b35fdddf0077abd2e0f0409b94ef20adbe8565 +_rm2tag=47c91918aa7724c16b6eaf87cf5dfbf4548eafc1 +pkgrel=9 +pkgdesc="u-boot bootloader common files" +url="https://www.denx.de/wiki/U-Boot/" +arch="armv7" +license="GPL-2.0-or-later OFL-1.1 BSD-2-Clause BSD-3-Clause eCos-2.0 IBM-pibs + ISC LGPL-2.0-only LGPL-2.1-only X11" +options="!check" # no tests +makedepends=" + bc + bison + dtc + flex + gnutls-dev + linux-headers + openssl-dev>3 + py3-elftools + py3-setuptools + python3-dev + swig + util-linux-dev + " +source=" + u-boot-rm1-$_rm1tag.tar.gz::https://github.com/reMarkable/uboot/archive/$_rm1tag.tar.gz + u-boot-rm2-$_rm2tag.tar.gz::https://github.com/reMarkable/uboot/archive/$_rm2tag.tar.gz + update-u-boot + README.txt + rm1-uboot-config-patch.diff + rm2-uboot-config-patch.diff + " +builddir="$srcdir" + +#rm2:zero-sugar broken +case "$CARCH" in +arm*) board_configs=" + zerogravitas:zero-gravitas + ";; +esac + +for board_config in $board_configs; do + _allboards="$_allboards $pkgname-${board_config%%:*}" +done + +subpackages="$pkgname-all:_all $_allboards" +prepare() { + default_prepare + + cd "$builddir"/uboot-$_rm1tag + patch -p1 -i "$srcdir"/rm1-uboot-config-patch.diff + # patch -p1 -i "$srcdir"/rm1-ttygs0-serial.diff + cd "$builddir"/uboot-$_rm2tag + patch -p1 -i "$srcdir"/rm2-uboot-config-patch.diff +} + +build() { + local board_config board + for board_config in $board_configs; do + local configs="${board_config#*:}" + for board in ${configs//,/ }; do + msg "Building u-boot for $board" + case $board in + zero-gravitas) cd "$builddir"/uboot-$_rm1tag;; + zero-sugar) cd "$builddir"/uboot-$_rm2tag;; + esac + + touch include/config.h + LC_ALL=C date +'#define U_BOOT_DATE "%b %d %C%y"' > include/timestamp_autogenerated.h + LC_ALL=C date +'#define U_BOOT_TIME "%T"' >> include/timestamp_autogenerated.h + + export BUILD_DIR="$builddir"/build/$board + mkdir -p "$BUILD_DIR" + make O="$BUILD_DIR" ${board}_config + make O="$BUILD_DIR" all + done + done +} + +package() { + mkdir -p "$pkgdir"/usr/share/$pkgname "$pkgdir"/usr/sbin + install "$srcdir"/README.txt "$pkgdir"/usr/share/$pkgname/README.txt + install "$srcdir"/update-u-boot "$pkgdir"/usr/sbin +} + +_all() { + pkgdesc="u-boot for all boards (meta package)" + depends="$_allboards" + + mkdir -p "$subpkgdir"/ +} + +_split_boards() { + cd "$builddir"/build + pkgdesc="u-boot for $1" + depends="u-boot-rm" + shift + local board + for board; do + msg "Including board $board" + mkdir -p "$subpkgdir"/usr/share/$pkgname/$board + export BUILD_DIR="$builddir"/build/$board + + cp "$BUILD_DIR"/u-boot.imx "$subpkgdir"/usr/share/$pkgname/$board/u-boot.bin + done +} + +for board_config in $board_configs; do + _board="${board_config%%:*}" + _configs="${board_config#*:}" + eval "$_board() { _split_boards $_board ${_configs//,/ }; }" +done + +sha512sums=" +7cc8d513cac1d63ee5119529caa056164ee3bc3633da5d880fbfb344b770c7c53c41475d42dd129b505390dcd5449e14524afc06f7cdba9354af7e70a7035ef9 u-boot-rm1-97b35fdddf0077abd2e0f0409b94ef20adbe8565.tar.gz +d0d18b123c4281285a8b3c1afd9ef623b48a33506399c8e0dbc393f22d967ee3e5df7030aab26c4fe8cad614f3f22f1ea5d6b5bb4ef5cc46fffe56b7ac7c3c28 u-boot-rm2-47c91918aa7724c16b6eaf87cf5dfbf4548eafc1.tar.gz +a905e4dcdb2704e0b1d4f0ab4a6333d3f1ffcec5c3a8359f5789800eb2114dad673cf0b5f24cae3a590f27333dff2e96b6f1efae5a466f9281a3d65efe403a1e update-u-boot +f8c9bb6e84d6f0620c976ac7ad5dd7ec7ff9dfdd4b1d03d2bf6653e7beccf80bdf2debfc92fb1f696dba92fb40287d3c45897e0078951451d0835cb61a5f16d1 README.txt +673cb917cc565ae245d4a7d659227bc240473112bc9c73ae184a64ce74be7994273d6dc4db17194d348941f83a42b3b67d3140f6f23c37c13d6dc93f7d76cc39 rm1-uboot-config-patch.diff +0e98404ca6d20eb01bd9c129b05e2eb10c60a692a56adc221ea283b4bfe7b0bcc2851121d4c3fe51e07a9784c339f7ccb221e0cc3f3603144fec46be66d0cbcc rm2-uboot-config-patch.diff +" diff --git a/user/u-boot-rm/README.txt b/user/u-boot-rm/README.txt new file mode 100644 index 0000000..c342913 --- /dev/null +++ b/user/u-boot-rm/README.txt @@ -0,0 +1,32 @@ +WandBoard +--------- + +- ROM loads boot loader from raw MMC sectors at fixed address +- NOTE: 1st partition needs to start after boot loader + +- Install u-boot with: + dd if=wandboard/SPL of=/dev/mmcblk0 bs=1k seek=1 + dd if=wandboard/u-boot.img of=/dev/mmcblk0 bs=1k seek=69 + sync + + (Note - the SD card node may vary, so adjust this as needed). + +- Insert the SD card into the slot located in the bottom of the board + (same side as the mx6 processor) + +BeagleBoard +----------- + +- ROM looks for 1st partition with FAT, and loads MLO from it +- NOTE: MLO needs to be the first file created on this partition + +- Install u-boot with: + cp am335x_boneblack/{MLO,u-boot.img} /media/mmcblk0p1/ + +Sunxi (Cubie* etc) +------------------ + +- ROM loads boot loader from SD-CARD sectors at fixed address +- Install u-boot with: + sudo dd if=/u-boot-sunxi-with-spl.bin of=/dev/sda bs=1024 seek=8 + diff --git a/user/u-boot-rm/fix-linking-with-ld.patch b/user/u-boot-rm/fix-linking-with-ld.patch new file mode 100644 index 0000000..827c566 --- /dev/null +++ b/user/u-boot-rm/fix-linking-with-ld.patch @@ -0,0 +1,52 @@ +From 58772283210e15f8d803db4aa67c877d668db867 Mon Sep 17 00:00:00 2001 +Patch-Source: https://github.com/u-boot/u-boot/commit/58772283210e15f8d803db4aa67c877d668db867 +From: Alistair Delva +Date: Wed, 20 Oct 2021 21:31:33 +0000 +Subject: [PATCH] x86: Fix linking u-boot with ld.lld + +When linking the final u-boot binary with LLD, the following link errors +are seen: + +ld.lld: error: can't create dynamic relocation R_386_32 against local + symbol in readonly segment; recompile object files with + -fPIC or pass '-Wl,-z,notext' to allow text relocations + in the output +>>> defined in arch/x86/cpu/start.o +>>> referenced by arch/x86/cpu/start.o:(.text.start+0x32) +[...] +>>> defined in arch/x86/cpu/start16.o +>>> referenced by arch/x86/cpu/start16.o:(.start16+0x1C) + +According to Nick Desaulniers: + +"This is a known difference between GNU and LLVM linkers; the GNU + linkers permit relocations in readonly segments (making them not read + only), LLVM does not (by default)." + +Since U-Boot apparently seems to use relocations in readonly segments, +change the global linker flags to permit them when linking with LLD by +specifying '-z notext'. + +Signed-off-by: Alistair Delva +Cc: Nick Desaulniers +Cc: Simon Glass +Cc: Bin Meng +Reviewed-by: Simon Glass +--- + Makefile | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/Makefile b/Makefile +index c0ea933cb636..286757986c02 100644 +--- a/Makefile ++++ b/Makefile +@@ -776,6 +776,9 @@ ifneq ($(CONFIG_SYS_TEXT_BASE),) + LDFLAGS_u-boot += -Ttext $(CONFIG_SYS_TEXT_BASE) + endif + ++# ld.lld support ++LDFLAGS_u-boot += -z notext ++ + # Normally we fill empty space with 0xff + quiet_cmd_objcopy = OBJCOPY $@ + cmd_objcopy = $(OBJCOPY) --gap-fill=0xff $(OBJCOPYFLAGS) \ diff --git a/user/u-boot-rm/rm1-ttygs0-serial.diff b/user/u-boot-rm/rm1-ttygs0-serial.diff new file mode 100644 index 0000000..9596fc4 --- /dev/null +++ b/user/u-boot-rm/rm1-ttygs0-serial.diff @@ -0,0 +1,13 @@ +diff --git a/include/configs/zero-gravitas.h.orig b/include/configs/zero-gravitas.h +index 818ed56..6eb7447 100644 +--- a/include/configs/zero-gravitas.h.orig ++++ b/include/configs/zero-gravitas.h +@@ -73,7 +73,7 @@ + "active_partition=2\0" \ + "bootlimit=1\0" \ + "por=undefined\0" \ +- "mmcargs=setenv bootargs console=${console},${baudrate} " \ ++ "mmcargs=setenv bootargs console=${console},${baudrate} console=ttyGS0,115200 " \ + "root=/dev/mmcblk1p2 rootwait rootfstype=ext4 rw por=${por};\0" \ + "loadimage=ext4load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \ + "loadfdt=ext4load mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \ diff --git a/user/u-boot-rm/rm1-uboot-config-patch.diff b/user/u-boot-rm/rm1-uboot-config-patch.diff new file mode 100644 index 0000000..55d6ce1 --- /dev/null +++ b/user/u-boot-rm/rm1-uboot-config-patch.diff @@ -0,0 +1,83 @@ +diff --git a/include/configs/zero-gravitas.h b/include/configs/zero-gravitas.h +index 074f171422..818ed56892 100644 +--- a/include/configs/zero-gravitas.h ++++ b/include/configs/zero-gravitas.h +@@ -71,12 +71,10 @@ + "splashimage=0x80000000\0" \ + "splashpos=m,m\0" \ + "active_partition=2\0" \ +- "fallback_partition=3\0" \ + "bootlimit=1\0" \ + "por=undefined\0" \ + "mmcargs=setenv bootargs console=${console},${baudrate} " \ +- "systemd.crash_reboot=true memtest " \ +- "root=/dev/mmcblk1p${active_partition} rootwait rootfstype=ext4 quiet rw por=${por};\0" \ ++ "root=/dev/mmcblk1p2 rootwait rootfstype=ext4 rw por=${por};\0" \ + "loadimage=ext4load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \ + "loadfdt=ext4load mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \ + "mmcboot=echo Booting from mmc ...; " \ +@@ -89,41 +87,13 @@ + "echo WARN: Cannot load the DT; " \ + "fi; " \ + "fi; " \ +- "fi;\0" \ +- "memboot=echo Booting from memory...; " \ +- "setenv bootargs console=${console},${baudrate} " \ +- "g_mass_storage.stall=0 g_mass_storage.removable=1 " \ +- "g_mass_storage.idVendor=0x066F g_mass_storage.idProduct=0x37FF "\ +- "g_mass_storage.iSerialNumber=\"\" rdinit=/linuxrc; "\ +- "bootz ${loadaddr} ${initrd} ${fdt_addr};\0" \ +- "altbootcmd=echo Running from fallback root...; " \ +- "run memboot; " \ +- "if test ${bootcount} -gt 10; then " \ +- "echo WARN: Failed too much, resetting bootcount and turning off; " \ +- "setenv bootcount 0; " \ +- "saveenv; " \ +- "poweroff; " \ +- "fi; " \ +- "setenv mmcpart ${fallback_partition}; " \ +- "setenv bootargs console=${console},${baudrate} " \ +- "root=/dev/mmcblk1p${fallback_partition} rootwait rootfstype=ext4 quiet rw " \ +- "systemd.log_level=debug systemd.log_target=kmsg memtest " \ +- "log_buf_len=1M printk.devkmsg systemd.journald.forward_to_console=1; " \ +- "run mmcboot;\0" \ ++ "fi;\0" + + /* Always try to boot from memory first, in case of USB download mode */ + #define CONFIG_BOOTCOMMAND \ +- "if test ! -e mmc 1:1 uboot.env; then " \ +- "saveenv; " \ +- "fi; " \ +- "run memboot; " \ + "run mmcargs; " \ + "setenv mmcpart ${active_partition}; " \ +- "run mmcboot; " \ +- "echo WARN: unable to boot from either RAM or eMMC; " \ +- "setenv upgrade_available 1; " \ +- "saveenv; " \ +- "reset; " ++ "run mmcboot; " + + #ifdef CONFIG_BOOTDELAY + #undef CONFIG_BOOTDELAY +@@ -157,18 +127,8 @@ + /* Environment organization */ + #define CONFIG_ENV_SIZE SZ_8K + +-#define CONFIG_ENV_IS_IN_FAT +-/*#define CONFIG_ENV_IS_NOWHERE*/ +- +-#ifdef CONFIG_ENV_IS_IN_FAT +-#define CONFIG_BOOTCOUNT_LIMIT +-#define CONFIG_BOOTCOUNT_ENV +- +-#define FAT_ENV_INTERFACE "mmc" +-#define FAT_ENV_DEVICE_AND_PART "1:1" +-#define CONFIG_FAT_WRITE +-#define FAT_ENV_FILE "uboot.env" +-#endif ++/*#define CONFIG_ENV_IS_IN_FAT*/ ++#define CONFIG_ENV_IS_NOWHERE + + #ifdef CONFIG_CMD_SF + #define CONFIG_MXC_SPI diff --git a/user/u-boot-rm/rm2-uboot-config-patch.diff b/user/u-boot-rm/rm2-uboot-config-patch.diff new file mode 100644 index 0000000..4aa04bc --- /dev/null +++ b/user/u-boot-rm/rm2-uboot-config-patch.diff @@ -0,0 +1,75 @@ +diff --git a/include/configs/zero-sugar.h.orig b/include/configs/zero-sugar.h +index 6b5450a..dd6da5c 100644 +--- a/include/configs/zero-sugar.h.orig ++++ b/include/configs/zero-sugar.h +@@ -122,12 +122,10 @@ + "panel=EPD\0" \ + "mmcdev=0\0" \ + "active_partition=2\0" \ +- "fallback_partition=3\0 " \ + "bootlimit=1\0 " \ + "mmcautodetect=yes\0" \ + "mmcargs=setenv bootargs console=${console},${baudrate} " \ +- "root=/dev/mmcblk2p${active_partition} rootwait rootfstype=ext4 rw " \ +- "quiet panic=20 systemd.crash_reboot\0" \ ++ "root=/dev/mmcblk2p2 rootwait rootfstype=ext4 rw " \ + "loadimage=ext4load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \ + "loadfdt=ext4load mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \ + "mmcboot=echo Booting from mmc ...; " \ +@@ -140,41 +138,13 @@ + "echo WARN: Cannot load the DT; " \ + "fi; " \ + "fi; " \ +- "fi;\0" \ +- "memboot=echo Booting from memory...; " \ +- "setenv bootargs console=${console},${baudrate} " \ +- "g_mass_storage.stall=0 g_mass_storage.removable=1 " \ +- "g_mass_storage.idVendor=0x066F g_mass_storage.idProduct=0x37FF "\ +- "g_mass_storage.iSerialNumber=\"\" rdinit=/linuxrc; "\ +- "bootz ${loadaddr} ${initrd} ${fdt_addr};\0" \ +- "altbootcmd=echo Running from fallback root...; " \ +- "run memboot; " \ +- "if test ${bootcount} -gt 10; then " \ +- "echo WARN: Failed too much, resetting bootcount and turning off; " \ +- "setenv bootcount 0; " \ +- "saveenv; " \ +- "poweroff; " \ +- "fi; " \ +- "setenv mmcpart ${fallback_partition}; " \ +- "setenv bootargs console=${console},${baudrate} " \ +- "root=/dev/mmcblk2p${fallback_partition} rootwait rootfstype=ext4 quiet rw " \ +- "systemd.log_level=debug systemd.log_target=kmsg memtest " \ +- "log_buf_len=1M printk.devkmsg systemd.journald.forward_to_console=1; " \ +- "run mmcboot;\0" \ ++ "fi;\0" + + /* Always try to boot from memory first, in case of USB download mode */ + #define CONFIG_BOOTCOMMAND \ +- "if test ! -e mmc 0:1 uboot.env; then " \ +- "saveenv; " \ +- "fi; " \ +- "run memboot; " \ + "run mmcargs; " \ + "setenv mmcpart ${active_partition}; " \ +- "run mmcboot; " \ +- "echo WARN: unable to boot from either RAM or eMMC; " \ +- "setenv upgrade_available 1; " \ +- "saveenv; " \ +- "reset; " ++ "run mmcboot; " + + #define CONFIG_SYS_MEMTEST_START 0x80000000 + #define CONFIG_SYS_MEMTEST_END (CONFIG_SYS_MEMTEST_START + 0x20000000) +@@ -198,10 +168,8 @@ + /* Environment organization */ + #define CONFIG_ENV_SIZE SZ_8K + +-#ifdef CONFIG_ENV_IS_IN_FAT +-#define CONFIG_BOOTCOUNT_LIMIT +-#define CONFIG_BOOTCOUNT_ENV +-#endif ++/*#define CONFIG_ENV_IS_IN_FAT*/ ++#define CONFIG_ENV_IS_NOWHERE + + #define CONFIG_SYS_FSL_USDHC_NUM 2 + diff --git a/user/u-boot-rm/update-u-boot b/user/u-boot-rm/update-u-boot new file mode 100755 index 0000000..e90bcbd --- /dev/null +++ b/user/u-boot-rm/update-u-boot @@ -0,0 +1,129 @@ +#!/bin/sh + +verbose= +board= +device= +dryrun= +imagedir= + +get_defaults() { + if [ -z "$board" -a -e /sys/firmware/devicetree/base/compatible ]; then + case "$(cat /sys/firmware/devicetree/base/compatible 2>/dev/null)" in + wand,*) board=wand ;; + esac + fi + + if [ -z "$device" ]; then + case "$board" in + wand|cubie|cubie2) device=/dev/mmcblk0p0 ;; + zero-gravitas) device=/dev/mmcblk1 ;; + esac + fi + + if [ -z "$imagedir" ]; then + imagedir="$(realpath $(dirname $0))" + [ -f "$imagedir/README.txt" ] || imagedir="/usr/share/u-boot-rm" + fi +} + +die() { + echo "ERROR: $@" + exit 1 +} + +usage() { + get_defaults + + cat <] [-d|--device ] + +options: + + -b,--board Specify the board type: wand, cubie, cubie2 + (current default: ${board:-none}) + + -d,--device Specify the device where to install u-boot + (current default: ${device:-none}) + + -i,--imagedir Specify u-boot image directory + (current default: ${imagedir:-none}) + + -n,--dry-run Print commands but don't execute them + +EOF +} + +while [ $# -gt 0 ]; do + opt="$1" + shift + case "$opt" in + -b|--board) + case "$1" in + wand|wandboard) board="wand" ;; + cubie|cubieboard) board="cubie" ;; + zerogravitas) board="zero-gravitas" ;; + zerosugar) board="zero-sugar" ;; + *) usage; exit 1;; + esac + shift + ;; + -d|--device) + device="$1" + shift + ;; + -i|--imagedir) + imagedir="$1" + shift + ;; + -n|--dry-run) + dryrun="echo" + ;; + --) + break + ;; + -*) + usage + exit 1 + ;; + esac +done + +get_defaults +if [ -z "$board" -o -z "$device" -o -z "$imagedir" -o ! -e "$imagedir" ]; then + usage + exit 1 +fi + +if [ -z "$dryrun" ]; then + echo "Updating $board u-boot in $device in 3 seconds..." + sleep 3 +fi + +( +set -e +case "$board" in +wand) + [ -e "$imagedir/wandboard" ] || die "wandboard images not installed, apk add u-boot-wandboard" + $dryrun dd if=$imagedir/wandboard/SPL of=$device bs=1k seek=1 status=none + $dryrun dd if=$imagedir/wandboard/u-boot.img of=$device bs=1k seek=69 status=none + ;; +cubie|cubie2) + [ -e "$imagedir/Cubieboard${board#cubie}" ] || die "Cubieboard images not installed, apk add u-boot-cubieboard" + $dryrun dd if=$imagedir/Cubieboard${board#cubie}/u-boot-sunxi-with-spl.bin of=/dev/sda bs=1024 seek=8 status=none + ;; +zero-gravitas) + [ -e "$imagedir/zero-gravitas" ] || die "rM1 images not installed, apk add u-boot-rm1" + $dryrun dd if=/dev/zero of=$device bs=512 seek=1536 count=16 + [ -z "$dryrun" ] && echo 0 > /sys/block/${device/\/dev\/}boot0/force_ro + $dryrun dd if=/dev/zero of=${device}boot0 bs=512 count=2 + $dryrun dd if=$imagedir/zero-gravitas/u-boot.bin of=${device}boot0 bs=512 seek=2 + [ -z "$dryrun" ] && echo 1 > /sys/block/${device/\/dev\/}boot0/force_ro + ;; +zero-sugar) + die "rM2 not yet tested" + ;; +esac +$dryrun sync +) || die "U-Boot installation in $device failed" + +[ -z "$dryrun" ] && echo "Completed successfully." diff --git a/user/uptime-kuma/APKBUILD b/user/uptime-kuma/APKBUILD new file mode 100644 index 0000000..0b7766e --- /dev/null +++ b/user/uptime-kuma/APKBUILD @@ -0,0 +1,49 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=uptime-kuma +pkgver=1.23.11 +pkgrel=0 +pkgdesc='A fancy self-hosted monitoring tool' +arch="all" +url="https://github.com/louislam/uptime-kuma" +license="MIT" +depends="nodejs" +makedepends="npm" +source=" + uptime-kuma-$pkgver.tar.gz::https://github.com/louislam/uptime-kuma/archive/refs/tags/$pkgver.tar.gz + uptime-kuma.openrc + uptime-kuma.conf + " +subpackages="$pkgname-doc $pkgname-openrc" +install="$pkgname.pre-install" + +build() { + npm ci + npm run build + rm -Rf "$builddir"/node_modules + npm ci --omit=dev +} + +package() { + install -dm 755 \ + "$pkgdir"/usr/share/webapps \ + "$pkgdir"/usr/share/doc \ + "$pkgdir"/usr/share/licenses/uptime-kuma \ + "$pkgdir"/etc/init.d \ + "$pkgdir"/etc/conf.d + + # install + cp -a "$builddir" "$pkgdir/usr/share/webapps/uptime-kuma" + + # openrc + install -Dm755 "$srcdir"/uptime-kuma.openrc "$pkgdir"/etc/init.d/uptime-kuma + install -Dm755 "$srcdir"/uptime-kuma.conf "$pkgdir"/etc/conf.d/uptime-kuma + + # docs and licenses + mv "$pkgdir"/usr/share/webapps/uptime-kuma/LICENSE "$pkgdir"/usr/share/licenses/uptime-kuma/. +} +sha512sums=" +6cd6aef96ac93597334b8fc7987611420b20ee45c5c1348ab42f05865fb679913038fd333416d239c43e047c9995553d2ab8e6fb7a05cea00d290fa05a26fa4e uptime-kuma-1.23.11.tar.gz +0ceddb98a6f318029b8bd8b5a49b55c883e77a5f8fffe2b9b271c9abf0ac52dc7a6ea4dbb4a881124a7857f1e43040f18755c1c2a034479e6a94d2b65a73d847 uptime-kuma.openrc +1dbae536b23e3624e139155abbff383bba3209ff2219983da2616b4376b1a5041df812d1e5164716fc6e967a8446d94baae3b96ee575d400813cc6fdc2cc274e uptime-kuma.conf +" diff --git a/user/uptime-kuma/uptime-kuma.conf b/user/uptime-kuma/uptime-kuma.conf new file mode 100644 index 0000000..f816a99 --- /dev/null +++ b/user/uptime-kuma/uptime-kuma.conf @@ -0,0 +1,47 @@ +# uptime-kuma config +# for more info +# see https://github.com/louislam/uptime-kuma/wiki/Environment-Variables + +# Set the directory where the data should be stored (could be relative) +# DATA_DIR=/var/lib/uptime-kuma + +# Host to bind to, could be an ip. +# UPTIME_KUMA_HOST=:: + +# Port to listen to +# UPTIME_KUMA_PORT=3001 + +# Path to SSL key +# UPTIME_KUMA_SSL_KEY= + +# Path to SSL certificate +# UPTIME_KUMA_SSL_CERT= + +# SSL Key Passphrase +# UPTIME_KUMA_SSL_KEY_PASSPHRASE= + +# Cloudflare Tunnel Token +# UPTIME_KUMA_CLOUDFLARED_TOKEN= + +# By default, Uptime Kuma is not allowed in iframe if the domain name is not +# the same as the parent. It protects your Uptime Kuma to be a phishing +# website. If you don't need this protection, you can set it to true +# UPTIME_KUMA_DISABLE_FRAME_SAMEORIGIN=false + +# By default, Uptime Kuma is verifying that the websockets ORIGIN-Header +# matches your servers hostname. If you don't need this protection, you can +# set it to bypass. See GHSA-mj22-23ff-2hrr for further context. +# UPTIME_KUMA_WS_ORIGIN_CHECK=cors-like + +# Allow to specify any executables as Chromium +# UPTIME_KUMA_ALLOW_ALL_CHROME_EXEC=0 + +# Add your self-signed ca certs. +# NODE_EXTRA_CA_CERTS= + +# Ignore all TLS errors +# NOTE_TLS_REJECT_UNAUTHORIZED=0 + +# Set it to --insecure-http-parser, if you encountered error Invalid header +# value char when your website using WAF +# NODE_OPTIONS= diff --git a/user/uptime-kuma/uptime-kuma.openrc b/user/uptime-kuma/uptime-kuma.openrc new file mode 100644 index 0000000..ce7b00e --- /dev/null +++ b/user/uptime-kuma/uptime-kuma.openrc @@ -0,0 +1,48 @@ +#!/sbin/openrc-run + +description="Uptime Kuma self-hosted monitoring tool" + +# Change $directory to path to uptime-kuma +directory=${directory:-/usr/share/webapps/uptime-kuma} +pidfile=${pidfile:-/run/$RC_SVCNAME.pid} +DATA_DIR=${DATA_DIR:-/var/lib/uptime-kuma} + +log_dir="/var/log/$RC_SVCNAME" +logfile=${logfile:-$log_dir/$RC_SVCNAME.log} +output_log="${output_log:-$logfile}" +error_log="${error_log:-$logfile}" + +command=${command:-/usr/bin/node} +command_args="$directory/server/server.js" +command_user=${command_user:-uptime-kuma:uptime-kuma} +command_background=true + +depend() { + need net +} + +start_pre() { + checkpath --owner=$command_user --directory $log_dir \ + $DATA_DIR \ + $DATA_DIR/upload + checkpath --owner=$command_user --file $logfile \ + $DATA_DIR/error.log + + [ ! -e $DATA_DIR/kuma.db ] && + cp $directory/db/kuma.db $DATA_DIR + + checkpath --owner=$command_user --mode 600 --file $DATA_DIR/kuma.db* + + cd $directory + + export DATA_DIR UPTIME_KUMA_HOST UPTIME_KUMA_PORT UPTIME_KUMA_SSL_KEY \ + UPTIME_KUMA_SSL_CERT UPTIME_KUMA_SSL_KEY_PASSPHRASE \ + UPTIME_KUMA_CLOUDFLARED_TOKEN UPTIME_KUMA_DISABLE_FRAME_SAMEORIGIN \ + UPTIME_KUMA_WS_ORIGIN_CHECK UPTIME_KUMA_ALLOW_ALL_CHROME_EXEC \ + NODE_EXTRA_CA_CERTS NODE_TLS_REJECT_UNAUTHORIZED NODE_OPTIONS +} + +start_post() { + # Wait for the server to be started + sleep 10 +} diff --git a/user/uptime-kuma/uptime-kuma.pre-install b/user/uptime-kuma/uptime-kuma.pre-install new file mode 100755 index 0000000..0217278 --- /dev/null +++ b/user/uptime-kuma/uptime-kuma.pre-install @@ -0,0 +1,25 @@ +#!/bin/sh + +DATADIR='/var/lib/uptime-kuma' + +if ! getent group uptime-kuma 1>/dev/null; then + echo '* Creating group uptime-kuma' 1>&2 + + addgroup -S uptime-kuma +fi + +if ! id uptime-kuma 2>/dev/null 1>&2; then + echo '* Creating user uptime-kuma' 1>&2 + + adduser -DHS -G uptime-kuma -h "$DATADIR" -s /bin/sh \ + -g "added by apk for uptime-kuma" uptime-kuma + passwd -u uptime-kuma 1>/dev/null # unlock +fi + +if ! id -Gn uptime-kuma | grep -Fq www-data; then + echo '* Adding user uptime-kuma to group www-data' 1>&2 + + addgroup uptime-kuma www-data +fi + +exit 0 diff --git a/user/wallabag/APKBUILD b/user/wallabag/APKBUILD index a568868..c697fca 100644 --- a/user/wallabag/APKBUILD +++ b/user/wallabag/APKBUILD @@ -3,12 +3,12 @@ pkgname=wallabag pkgver=2.5.4 -pkgrel=1 +pkgrel=0 pkgdesc="Self hostable application for saving web pages" arch="noarch" url="http://www.wallabag.org/" license="MIT" -_php=php83 +_php=php81 _php_mods="-gd -tidy -tokenizer -bcmath -dom -curl -session -ctype -simplexml -xml -sockets -xmlreader -intl" depends="$_php ${_php_mods//-/$_php-} pcre composer" diff --git a/user/xf86-video-fbdev-rm/APKBUILD b/user/xf86-video-fbdev-rm/APKBUILD new file mode 100644 index 0000000..edfe76b --- /dev/null +++ b/user/xf86-video-fbdev-rm/APKBUILD @@ -0,0 +1,40 @@ +# Maintainer: Natanael Copa +pkgname=xf86-video-fbdev-rm +pkgver=0.5.0 +pkgrel=3 +pkgdesc="Video driver for framebuffer device with rM patches" +url="https://www.x.org" +arch="all" +license="MIT" +subpackages="$pkgname-doc" +provides="xf86-video-fbdev=$pkgver-r$pkgrel" +makedepends="xorg-server-dev libxi-dev util-macros xorgproto linux-rm-headers" +builddir="$srcdir"/xf86-video-fbdev-$pkgver +source=" + https://www.x.org/releases/individual/driver/xf86-video-fbdev-$pkgver.tar.bz2 + epdc_auto-update-patch.patch + fix-build.patch + " + +build() { + export LDFLAGS="$LDFLAGS -Wl,-z,lazy" + ./configure \ + --build=$CBUILD \ + --host=$CHOST \ + --prefix=/usr + make +} + +check() { + make check +} + +package() { + make DESTDIR="$pkgdir" install +} + +sha512sums=" +c1217b943bbe3301b3c2a8649ed1004c3c67b02607bd56bbc14f6dfa05e7f0184332c81a6a19595514745501ed88526aee932e555779b7c3a8233646b0979448 xf86-video-fbdev-0.5.0.tar.bz2 +c211a2edf90b622d522a0513358431afa33c7b3b958b054221ff3a6e8ff72d1012b0141b073ea070f4bb2d2f9042d8e092434f14a91bea3bf8bf188c78c0bcb7 epdc_auto-update-patch.patch +19c6680d8e8b0ba3903fb76438b54f294a1715b93d50e1cb2ef95bb04770add5fdad1df4260ab7eb00bb26578baa79b7cfed3f7fa6cba70348611cc3797af3ee fix-build.patch +" diff --git a/user/xf86-video-fbdev-rm/epdc_auto-update-patch.patch b/user/xf86-video-fbdev-rm/epdc_auto-update-patch.patch new file mode 100644 index 0000000..f54f524 --- /dev/null +++ b/user/xf86-video-fbdev-rm/epdc_auto-update-patch.patch @@ -0,0 +1,128 @@ +diff --git a/src/fbdev.c.orig b/src/fbdev.c +index f25ef72..46b3c8c 100644 +--- a/src/fbdev.c.orig ++++ b/src/fbdev.c +@@ -8,6 +8,8 @@ + #endif + + #include ++#include ++#include + + /* all driver need this */ + #include "xf86.h" +@@ -18,6 +20,7 @@ + #include "colormapst.h" + #include "xf86cmap.h" + #include "shadow.h" ++#include "os.h" + #include "dgaproc.h" + + /* for visuals */ +@@ -186,6 +189,9 @@ typedef struct { + int rotate; + Bool shadowFB; + Bool shadow24; ++ Bool timerActive; ++ OsTimerPtr timer; ++ RegionPtr region_queue; + void *shadow; + CloseScreenProcPtr CloseScreen; + CreateScreenResourcesProcPtr CreateScreenResources; +@@ -697,6 +703,87 @@ fbdevUpdatePacked(ScreenPtr pScreen, shadowBufPtr pBuf) + shadowUpdatePacked(pScreen, pBuf); + } + ++static CARD32 FBDevEPDUpdateWork(OsTimerPtr timer, ++ CARD32 time, ++ void *arg); ++ ++static void FBDevEPDUpdate(ScreenPtr pScreen, shadowBufPtr pBuf) ++{ ++ RegionPtr damage = DamageRegion(pBuf->pDamage); ++ ++ ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); ++ FBDevPtr fPtr = FBDEVPTR(pScrn); ++ shadowUpdateProc update; ++ if (fPtr->shadow24) ++ update = fbdevUpdate32to24; ++ else if (fPtr->rotate) ++ update = fbdevUpdateRotatePacked; ++ else ++ update = fbdevUpdatePacked; ++ ++ update(pScreen, pBuf); ++ ++ if (fPtr->region_queue) { ++ RegionAppend(fPtr->region_queue, damage); ++ } else { ++ fPtr->region_queue = RegionDuplicate(damage); ++ } ++ ++ if (!fPtr->timerActive) { ++ FBDevEPDUpdateWork(fPtr->timer, GetTimeInMillis(), ++ pScreen); ++ } ++} ++ ++static CARD32 FBDevEPDUpdateWork(OsTimerPtr timer, ++ CARD32 time, ++ void *arg) ++{ ++ ScreenPtr pScreen = (void *)arg; ++ ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); ++ FBDevPtr fPtr = FBDEVPTR(pScrn); ++ BoxPtr pbox; ++ Bool overlap; ++ int nbox; ++ int fd = fbdevHWGetFD(pScrn); ++ if (fPtr->region_queue == NULL) { ++ fPtr->timerActive = FALSE; ++ return 0; ++ } ++ ++ struct mxcfb_update_data upd_region; ++ RegionValidate(fPtr->region_queue, &overlap); ++ pbox = RegionRects(fPtr->region_queue); ++ nbox = RegionNumRects(fPtr->region_queue); ++ ++ while(nbox--) { ++ int x, y, w, h; ++ int ret; ++ x = pbox->x1; ++ y = pbox->y1; ++ w = (pbox->x2 - pbox->x1); ++ h = pbox->y2 - pbox->y1; ++ memset(&upd_region, 0, sizeof(upd_region)); ++ upd_region.update_region.left = x; ++ upd_region.update_region.top = y; ++ upd_region.update_region.width = w; ++ upd_region.update_region.height = h; ++ upd_region.waveform_mode = WAVEFORM_MODE_AUTO; ++ upd_region.temp = TEMP_USE_AMBIENT; ++ upd_region.update_mode = UPDATE_MODE_PARTIAL; ++ upd_region.flags = 0; ++ ret = ioctl(fd, MXCFB_SEND_UPDATE, &upd_region); ++ if (ret < 0) ++ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,"update ioctl failed: %d\n", ret); ++ pbox++; ++ } ++ fPtr->timer = TimerSet(timer, 0, 50, FBDevEPDUpdateWork, pScreen); ++ fPtr->timerActive = TRUE; ++ RegionDestroy(fPtr->region_queue); ++ fPtr->region_queue = NULL; ++ return 0; ++} ++ + static Bool + FBDevCreateScreenResources(ScreenPtr pScreen) + { +@@ -722,7 +809,7 @@ FBDevCreateScreenResources(ScreenPtr pScreen) + else + update = fbdevUpdatePacked; + +- if (!shadowAdd(pScreen, pPixmap, update, FBDevWindowLinear, fPtr->rotate, ++ if (!shadowAdd(pScreen, pPixmap, FBDevEPDUpdate, FBDevWindowLinear, fPtr->rotate, + NULL)) { + return FALSE; + } diff --git a/user/xf86-video-fbdev-rm/fix-build.patch b/user/xf86-video-fbdev-rm/fix-build.patch new file mode 100644 index 0000000..f1ca165 --- /dev/null +++ b/user/xf86-video-fbdev-rm/fix-build.patch @@ -0,0 +1,17 @@ +Upstream: no (too lazy) +Reason: fixes build by getting rid of old cpp macro + +diff --git a/src/fbdev.c b/src/fbdev.c +index f25ef72..02a2b7a 100644 +--- a/src/fbdev.c ++++ b/src/fbdev.c +@@ -1010,7 +1010,7 @@ FBDevScreenInit(SCREEN_INIT_ARGS_DECL) + fPtr->CloseScreen = pScreen->CloseScreen; + pScreen->CloseScreen = FBDevCloseScreen; + +-#if XV ++#if defined(XV) + { + XF86VideoAdaptorPtr *ptr; + + diff --git a/user/xochitl-bin/APKBUILD b/user/xochitl-bin/APKBUILD new file mode 100644 index 0000000..4ea4dfa --- /dev/null +++ b/user/xochitl-bin/APKBUILD @@ -0,0 +1,50 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +pkgname=xochitl-bin +pkgver=2.15.1.1189 +_pkgprefix=Xdvv3lBmE4 +pkgrel=1 +pkgdesc="Image extractor for reMarkable firmware files" +arch="armv7" +url="https://archive.org/download/rm110/RM110/" +license="MIT" +makedepends="rm-extractor p7zip" +options="!check !strip !tracedeps" # No testsuite +subpackages="$pkgname-rm1 $pkgname-rm2" +builddir="$srcdir" +source=" + $pkgname-rm1-$pkgver.signed::https://archive.org/download/rm110/RM110/2.15.1.1189_reMarkable-Xdvv3lBmE4-.signed + $pkgname-rm2-$pkgver.signed::https://archive.org/download/rm110/RM110/2.15.1.1189_reMarkable2-wVbHkgKisg-.signed + xochitl.sh +" +package() { + install -vdm755 "$pkgdir"/var/lib/$pkgname + install -vDm755 "$srcdir"/xochitl.sh "$pkgdir"/usr/bin/xochitl +} + +rm1() { + depends="$pkgname" + + mkdir -p "$subpkgdir"/usr/lib/$pkgname + cd "$subpkgdir"/usr/lib/$pkgname + rm-extractor "$builddir"/$pkgname-rm1-$pkgver.signed + 7z x out || true + rm out +} + +rm2() { + depends="$pkgname" + + mkdir -p "$subpkgdir"/usr/lib/$pkgname + cd "$subpkgdir"/usr/lib/$pkgname + rm-extractor "$builddir"/$pkgname-rm1-$pkgver.signed + 7z x out || true + rm out +} + +sha512sums=" +294a5dccebb11366ad4e9a39d15829f310f575044f6e4db2747364ae61ef984cf3e0a8f09f3a33f157365b637d0217f34a01000eff3f92dd177afd011c7b2c9f xochitl-bin-rm1-2.15.1.1189.signed +6b2baac5c970ddfbf84f376fbfd22dab0a72979160b6889352bb2464f46f9d85d0fdc9f5754dbcb431b3629df833e64913c81aa7838f636cce11b00413d8506e xochitl-bin-rm2-2.15.1.1189.signed +e0f7ce6a5a29f98929339f55a2073b251ce76802c244473677be35eeef82e0e840edddfdfe56f8dc16fe80865d22e8dd35f3815f716903966768c3d9300831f2 xochitl.sh +" diff --git a/user/xochitl-bin/xochitl.sh b/user/xochitl-bin/xochitl.sh new file mode 100755 index 0000000..1e02b34 --- /dev/null +++ b/user/xochitl-bin/xochitl.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +# we chroot into codex root, thus need to bind mount +mount -o bind /dev /usr/lib/xochitl-bin/dev +mount -o bind /proc /usr/lib/xochitl-bin/proc +mount -o bind /sys /usr/lib/xochitl-bin/sys + +# xochitl expects home to be mounted +mount -o bind /var/lib/xochitl-bin /usr/lib/xochitl-bin/home/root + +# start xochitl +chroot /usr/lib/xochitl-bin /usr/bin/xochitl diff --git a/unmaintained/znapzend/APKBUILD b/user/znapzend/APKBUILD similarity index 100% rename from unmaintained/znapzend/APKBUILD rename to user/znapzend/APKBUILD diff --git a/user/zotero/APKBUILD b/user/zotero/APKBUILD new file mode 100644 index 0000000..4074407 --- /dev/null +++ b/user/zotero/APKBUILD @@ -0,0 +1,351 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=zotero +pkgver=7.0.0_beta74 +pkgrel=0 +_fxver=115.9.1 +_gittag=$pkgver +# Date of release, YY-MM-DD for metainfo file (see package()) +# https://www.mozilla.org/firefox/organizations/notes/ +_releasedate=2024-03-22 +pkgdesc="A free, easy-to-use tool to help you collect, organize, cite, and share your research sources." +url="https://www.mozilla.org/en-US/firefox/organizations/" +# s390x and riscv64: blocked by rust and cargo +# armhf: build failure on armhf due to wasm +arch="x86_64 armv7 aarch64 x86 ppc64le" +license="GPL-3.0-only AND LGPL-2.1-only AND LGPL-3.0-only AND MPL-2.0" +options="!check" # No test suite +depends=" + ffmpeg-libavcodec + " +makedepends=" + alsa-lib-dev + automake + bash + bsd-compat-headers + cargo + cbindgen + clang + clang-libclang + curl + dbus-glib-dev + gettext + grep + gtk+3.0-dev + hunspell-dev + icu-dev>=69.1 + libevent-dev + libffi-dev + libjpeg-turbo-dev + libnotify-dev + libogg-dev + libtheora-dev + libtool + libvorbis-dev + libvpx-dev + libwebp-dev + libxcomposite-dev + libxt-dev + lld + llvm-dev + m4 + mesa-dev + nasm + nodejs + npm + nspr-dev + nss-dev + perl + pipewire-dev + pulseaudio-dev + py3-psutil + py3-zstandard + python3 + sed + unzip + wasi-sdk + wireless-tools-dev + zip + " +source="https://ftp.mozilla.org/pub/firefox/releases/${_fxver}esr/source/firefox-${_fxver}esr.source.tar.xz + audio-lfs64.patch + disable-moz-stackwalk.patch + esr-metainfo.patch + fix-fortify-system-wrappers.patch + fix-rust-target.patch + fix-webrtc-glibcisms.patch + icu74.patch + lfs64.patch + no-ccache-stats.patch + ppc-musttail.patch + ppc-webrtc.patch + python-deps.patch + rust-lto-thin.patch + sandbox-fork.patch + sandbox-largefile.patch + sandbox-sched_setscheduler.patch + + stab.h + + firefox.desktop + mozilla-location.keys + vendor-prefs.js + + zotero.desktop + https://lab.ilot.io/mirrors/zotero-client/-/releases/$_gittag/downloads/tarball/zotero-client-$_gittag.tar.gz + zotero_build-modifications.patch + zotero_drop-phantomjs.patch + " + +builddir="$srcdir"/firefox-$_fxver +_zoterodir="$srcdir"/zotero-client-$_gittag +_mozappdir=/usr/lib/zotero + +# help our shared-object scanner to find the libs +ldpath="$_mozappdir" + +# we need this because cargo verifies checksums of all files in vendor +# crates when it builds and gives us no way to override or update the +# file sanely... so just clear out the file list +_clear_vendor_checksums() { + sed -i 's/\("files":{\)[^}]*/\1/' third_party/rust/$1/.cargo-checksum.json +} + +export SHELL=/bin/sh +export BUILD_OFFICIAL=1 +export MOZILLA_OFFICIAL=1 +export USE_SHORT_LIBNAME=1 +export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=system +export MOZ_APP_PROFILE="mozilla/firefox" +export MOZ_APP_REMOTINGNAME=firefox-esr +export MOZBUILD_STATE_PATH="$srcdir"/mozbuild +# disable desktop notifications +export MOZ_NOSPAM=1 +# Find our triplet JSON +export RUST_TARGET="$CTARGET" + +# Build with Clang, takes less RAM +export CC="clang" +export CXX="clang++" + +# set rpath so linker finds the libs +export LDFLAGS="$LDFLAGS -Wl,-rpath,$_mozappdir" + +# let firefox do this itself. +unset CARGO_PROFILE_RELEASE_OPT_LEVEL +unset CARGO_PROFILE_RELEASE_LTO + +export CFLAGS="${CFLAGS/-fstack-clash-protection/} -g0 -O2" +export CXXFLAGS="${CXXFLAGS/-fstack-clash-protection/} -g0 -O2 -Wno-deprecated-builtins -Wno-deprecated-declarations" + +prepare() { + # moves zotero source to mozilla source + mv "$_zoterodir" "$builddir"/zotero + default_prepare + cp "$srcdir"/stab.h toolkit/crashreporter/google-breakpad/src/ + + _clear_vendor_checksums audio_thread_priority + + base64 -d "$srcdir"/mozilla-location.keys > "$builddir"/mozilla-api-key + + # webrtc does not build on these + case "$CARCH" in + ppc64le) + local webrtc_config="ac_add_options --disable-webrtc" + ;; + esac + case "$CARCH" in + armv7) + # broken here + local rust_simd="ac_add_options --disable-rust-simd" + ;; + *) + local rust_simd="ac_add_options --enable-rust-simd" + ;; + esac + + case "$CARCH" in + aarch64|arm*|x86*) + # disable-elf-hack: exists only on aarch64, arm*, x86, x86_64 + local arch_config="ac_add_options --disable-elf-hack" + ;; + esac + + # sandbox only supported here + case "$CARCH" in + x86*|armv7|aarch64) + local sandbox="ac_add_options --enable-sandbox" + ;; + *) + local sandbox="ac_add_options --disable-sandbox" + ;; + esac + + cat > base-mozconfig <<-EOF + # disable unwanted things + ac_add_options --disable-bootstrap + ac_add_options --disable-cargo-incremental + ac_add_options --disable-crashreporter + ac_add_options --disable-debug + ac_add_options --disable-debug-symbols + ac_add_options --disable-install-strip + ac_add_options --disable-jemalloc + ac_add_options --disable-strip + ac_add_options --disable-tests + ac_add_options --disable-updater + + # features + ac_add_options --enable-alsa + ac_add_options --enable-dbus + ac_add_options --enable-default-toolkit=cairo-gtk3-wayland + ac_add_options --enable-ffmpeg + ac_add_options --enable-hardening + ac_add_options --enable-linker=lld + ac_add_options --enable-necko-wifi + ac_add_options --enable-official-branding + ac_add_options --enable-optimize="$CFLAGS" + ac_add_options --enable-pulseaudio + ac_add_options --enable-release + ac_add_options --enable-update-channel=release + + # system libs + ac_add_options --enable-system-pixman + ac_add_options --with-system-ffi + ac_add_options --with-system-icu + ac_add_options --with-system-jpeg + ac_add_options --with-system-libevent + ac_add_options --with-system-libvpx + ac_add_options --with-system-nspr + ac_add_options --with-system-nss + ac_add_options --with-system-png + ac_add_options --with-system-webp + ac_add_options --with-system-zlib + + # misc + ac_add_options --allow-addon-sideload + ac_add_options --prefix=/usr + ac_add_options --with-app-name=firefox-esr + ac_add_options --with-distribution-id=org.alpinelinux + ac_add_options --with-libclang-path=/usr/lib + ac_add_options --with-unsigned-addon-scopes=app,system + ac_add_options --with-wasi-sysroot=/usr/share/wasi-sysroot + ac_add_options --host=$CHOST + ac_add_options --target=$CTARGET + + # objdir + mk_add_options MOZ_OBJDIR="$builddir/obj" + + mk_add_options RUSTFLAGS="$RUSTFLAGS" + + # keys + # these are for alpine linux use only + ac_add_options --with-mozilla-api-keyfile="$builddir/mozilla-api-key" + + $arch_config + $rust_simd + $sandbox + $webrtc_config + EOF + + # zotero prepare + ( + cd "$builddir"/zotero + # zotero build expects to be in a git repo + git init + git commit --allow-empty -m 'Initial' + ) +} + +build() { + cat > .mozconfig base-mozconfig + + export MOZ_BUILD_DATE=$(date ${SOURCE_DATE_EPOCH:+ -d@${SOURCE_DATE_EPOCH}} "+%Y%m%d%H%M%S") + + # for lto + ulimit -n 4096 + + # can't be set here and fail + unset RUSTFLAGS + + local thinlto_jobs=${JOBS:-1} + + case "$CARCH" in + # on this platforms, lld seems to not utilise >1 threads for thinlto for some reason. + # at the same time, having more than 8 also crashes lld for firefox buildsystems (why?). + aarch64) + if [ $thinlto_jobs -gt 8 ]; then + thinlto_jobs=8 + fi + ;; + esac + + export LDFLAGS="$LDFLAGS -Wl,--thinlto-jobs=$thinlto_jobs" + + case "$CARCH" in + # lto for 64-bit systems only + aarch64|x86_64|ppc64le) + cat > .mozconfig base-mozconfig <<-EOF + ac_add_options --enable-lto=cross + EOF + esac + + ./mach build + + # install to where zotero expects it + DESTDIR="$builddir"/zotero/app/xulrunner/firefox ./mach install + mv "$builddir"/zotero/app/xulrunner/firefox/usr/lib/firefox-esr/* "$builddir"/zotero/app/xulrunner/firefox/. + rm -R "$builddir"/zotero/app/xulrunner/firefox/usr + + # zotero build + ( + cd "$builddir"/zotero + npm i --legacy-peer-deps + NODE_OPTIONS=--openssl-legacy-provider npm run build + + SKIP_32=1 app/scripts/dir_build -p l + ) +} + +package() { + install -dDm755 "$pkgdir"/usr/bin + install -dDm755 "$pkgdir"/usr/lib/zotero + cp -r "$builddir"/zotero/app/staging/Zotero_linux/* "$pkgdir/usr/lib/zotero" + ln -s /usr/lib/zotero/zotero "$pkgdir/usr/bin/zotero" + install -Dm644 "$srcdir/zotero.desktop" "$pkgdir/usr/share/applications/zotero.desktop" + + # Copy zotero icons to a standard location + install -Dm644 "$pkgdir/usr/lib/zotero/icons/icon32.png" "$pkgdir/usr/share/icons/hicolor/32x32/apps/zotero.png" + install -Dm644 "$pkgdir/usr/lib/zotero/icons/icon64.png" "$pkgdir/usr/share/icons/hicolor/64x64/apps/zotero.png" + install -Dm644 "$pkgdir/usr/lib/zotero/icons/icon128.png" "$pkgdir/usr/share/icons/hicolor/128x128/apps/zotero.png" + + # Close shell when launching + sed -i -r 's:^("\$CALLDIR/zotero-bin" -app "\$CALLDIR/application.ini" "\$@"):exec \1:' "$pkgdir/usr/lib/zotero/zotero" +} + +sha512sums=" +9ccaede2fcda13a07f98a2110bb8f99c7324601d66bff311f3070a669576a1598fe1d7de2d005d725d1f44dbe3934a9c0fd0b7950f60686047d4ce8d9d812310 firefox-115.9.1esr.source.tar.xz +3e0501ae7a650346c667dfdc0ae0ca286084f22e89ab2ac671cc0d7315673dc5b6dcb9f9882f6f39d26e9a31e57f7a0fd53d6b805e520224e22b8976850e2eb8 audio-lfs64.patch +454ea3263cabce099accbdc47aaf83be26a19f8b5a4568c01a7ef0384601cf8315efd86cd917f9c8bf419c2c845db89a905f3ff9a8eb0c8e41042e93aa96a85c disable-moz-stackwalk.patch +f7b3b45ba04d05d17439d009bf0c9f27881e126f424e2257552338a0c1e3771ee1289c044babcb0920f62af62873a268c0cf524e1d35711e6dc8b808ca5e9f26 esr-metainfo.patch +2f4f15974d52de4bb273b62a332d13620945d284bbc6fe6bd0a1f58ff7388443bc1d3bf9c82cc31a8527aad92b0cd3a1bc41d0af5e1800e0dcbd7033e58ffd71 fix-fortify-system-wrappers.patch +cd68b89e29e5f6379fbd5679db27b9a5ef70ea65e51c0d0a8137e1f1fd210e35a8cfb047798e9549bc7275606d7ec5c8d8af1335d29da4699db7acd8bc7ff556 fix-rust-target.patch +305c874fdea3096e9c4c6aa6520ac64bb1c347c4b59db8360096646593fe684c3b5377874d91cecd33d56d1410b4714fbdea2b514923723ecbeff79d51265d9b fix-webrtc-glibcisms.patch +afabea91b328c5a68eaa20f9099ac7b2d0e7f2423e816b05ed168bdd326a5684fa02de08bf05c6033e9b888f02775d1b0443a00329b7a632ee399122a391c13a icu74.patch +5fa9382c692e4bd6a2634308f24a6526fd12a60a2563d2090056d43a60505df3ec9881bbf54562e69394467529b3b0dc45955afca46ed329af03cea074fff070 lfs64.patch +c0437a6753f3f350968fa12d250efdfe1bea77baf0e4c06b072b5cc9e78c774dbf4506bc536337030d349fb3ba4460097b75b0c7c5b8fb2d39d8b0a392948936 no-ccache-stats.patch +2d8dff86212d6d2a904cbb5a5a1d6c17b89adc929fc6a3f4c6cb669f5e83ecddff5a799225319ba445a187b04d111251af75dd3ce8a039164bc14d2a432a2a04 ppc-musttail.patch +6f60e83599041db1b707c21784197ea9816b2c936b89a274bfc24554a600981e6f28448fe41fab0942bd31acd49b1c00beb2eb0961149f2ffa6a4154be123ea7 ppc-webrtc.patch +4e40b34c5f77a1a21fe971a6fcd8a21b1a63423a3a7932a5a6e1c7a2779f9f06a561c806614a01931679a4b1c6afdfd8ae1f3cc6b673f259ccd368e8e54f6e90 python-deps.patch +1c6918dd6655d3a1251bfd4af2e1c561cbb00d540a883b4c1ebf7f5de530d754d9ac07b4b5f56cdab6c511d25c8910ec94043f5733e97501a67abffe1bafaeb1 rust-lto-thin.patch +2518f2fc75b5db30058e0735f47d60fdf1e7adfaeee4b33fb2afb1bd9a616ce943fd88f4404d0802d4083703f4acf1d5ad42377218d025bc768807fbaf7e1609 sandbox-fork.patch +b7d0a6126bdf6c0569f80aabf5b37ed2c7a35712eb8a0404a2d85381552f5555d4f97d213ea26cec6a45dc2785f22439376ed5f8e78b4fd664ef0223307b333e sandbox-largefile.patch +f8c3555ef6207933cbffbf4fc101a9b4c0d2990c0063162f0f0bde70ef0b46f86bfac42e7110695183424a87948de593f3927b2d8509ede3e4fc7bd8a1fad1ce sandbox-sched_setscheduler.patch +0b3f1e4b9fdc868e4738b5c81fd6c6128ce8885b260affcb9a65ff9d164d7232626ce1291aaea70132b3e3124f5e13fef4d39326b8e7173e362a823722a85127 stab.h +d354f48a29bfc16719f3b230b1395063239d4420f9e47522de4662392d9697b15f931ca3bf6055d100fa33d61a9a1a13477687d5eac99e50ae7dbef9882a5808 firefox.desktop +382510375b1a2fa79be0ab79e3391a021ae2c022429ffbaa7e7a69166f99bb56d01e59a1b10688592a29238f21c9d6977672bd77f9fae439b66bdfe0c55ddb15 mozilla-location.keys +fc45bc3ffb9404e5338ea26a9f04807b40f6f516324972cddd48bedb91b8bd7c6b8d4e03a0209020f5e67b703bc4ff89389985791b9bd544a0fc3951e2dc338e vendor-prefs.js +e1a0a4ff5cc1b53f13776ca11927d671426b0691e78e74a4adf2166d57bb2ae8ac409cc11a37ce5e2f680fdf05d5bc3849c33a9717aca1bb62d03ae5231a67fb zotero.desktop +0d33924c32271f22abd91a9a2e151cc920faa03a84f3f0ebb70d00e20d28f44915fcc9c2d1168ab10a866dc6cf23be7ef124d2c3a94406188f44ee323e44a863 zotero-client-7.0.0_beta74.tar.gz +746dbabbb3ea9199d17891e2079b9256d04843f548132178862117d2334694d98e2cc981945d72f31d0e5b2c42904d371633f6905996bb580aa0b5ae95c64ddc zotero_build-modifications.patch +cfe583f2da7508a4e07734a42519d7c28265928fe14c14b2f650ca6e56c35cb79272b03ed3bfb81e06c4e01458b55e04d10df5cbdd549da0d97206b2c10c3530 zotero_drop-phantomjs.patch +" diff --git a/user/zotero/audio-lfs64.patch b/user/zotero/audio-lfs64.patch new file mode 100644 index 0000000..c34671a --- /dev/null +++ b/user/zotero/audio-lfs64.patch @@ -0,0 +1,61 @@ +--- a/third_party/rust/audio_thread_priority/src/rt_linux.rs ++++ b/third_party/rust/audio_thread_priority/src/rt_linux.rs +@@ -112,7 +112,7 @@ + + /// Returns the maximum priority, maximum real-time time slice, and the current real-time time + /// slice for this process. +-fn get_limits() -> Result<(i64, u64, libc::rlimit64), AudioThreadPriorityError> { ++fn get_limits() -> Result<(i64, u64, libc::rlimit), AudioThreadPriorityError> { + let c = Connection::get_private(BusType::System)?; + + let p = Props::new( +@@ -122,7 +122,7 @@ + "org.freedesktop.RealtimeKit1", + DBUS_SOCKET_TIMEOUT, + ); +- let mut current_limit = libc::rlimit64 { ++ let mut current_limit = libc::rlimit { + rlim_cur: 0, + rlim_max: 0, + }; +@@ -141,9 +141,9 @@ + )); + } + +- if unsafe { libc::getrlimit64(libc::RLIMIT_RTTIME, &mut current_limit) } < 0 { ++ if unsafe { libc::getrlimit(libc::RLIMIT_RTTIME, &mut current_limit) } < 0 { + return Err(AudioThreadPriorityError::new_with_inner( +- "getrlimit64", ++ "getrlimit", + Box::new(OSError::last_os_error()), + )); + } +@@ -154,13 +154,13 @@ + fn set_limits(request: u64, max: u64) -> Result<(), AudioThreadPriorityError> { + // Set a soft limit to the limit requested, to be able to handle going over the limit using + // SIGXCPU. Set the hard limit to the maxium slice to prevent getting SIGKILL. +- let new_limit = libc::rlimit64 { ++ let new_limit = libc::rlimit { + rlim_cur: request, + rlim_max: max, + }; +- if unsafe { libc::setrlimit64(libc::RLIMIT_RTTIME, &new_limit) } < 0 { ++ if unsafe { libc::setrlimit(libc::RLIMIT_RTTIME, &new_limit) } < 0 { + return Err(AudioThreadPriorityError::new_with_inner( +- "setrlimit64", ++ "setrlimit", + Box::new(OSError::last_os_error()), + )); + } +@@ -296,9 +296,9 @@ + match r { + Ok(_) => Ok(handle), + Err(e) => { +- if unsafe { libc::setrlimit64(libc::RLIMIT_RTTIME, &limits) } < 0 { ++ if unsafe { libc::setrlimit(libc::RLIMIT_RTTIME, &limits) } < 0 { + return Err(AudioThreadPriorityError::new_with_inner( +- "setrlimit64", ++ "setrlimit", + Box::new(OSError::last_os_error()), + )); + } diff --git a/user/zotero/disable-moz-stackwalk.patch b/user/zotero/disable-moz-stackwalk.patch new file mode 100644 index 0000000..b6bc756 --- /dev/null +++ b/user/zotero/disable-moz-stackwalk.patch @@ -0,0 +1,18 @@ +diff --git a/mozglue/misc/StackWalk.cpp b/mozglue/misc/StackWalk.cpp +index 7d62921..adcfa44 100644 +--- a/mozglue/misc/StackWalk.cpp ++++ b/mozglue/misc/StackWalk.cpp +@@ -33,13 +33,7 @@ using namespace mozilla; + # define MOZ_STACKWALK_SUPPORTS_MACOSX 0 + #endif + +-#if (defined(linux) && \ +- ((defined(__GNUC__) && (defined(__i386) || defined(PPC))) || \ +- defined(HAVE__UNWIND_BACKTRACE))) +-# define MOZ_STACKWALK_SUPPORTS_LINUX 1 +-#else + # define MOZ_STACKWALK_SUPPORTS_LINUX 0 +-#endif + + #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) + # define HAVE___LIBC_STACK_END 1 diff --git a/user/zotero/esr-metainfo.patch b/user/zotero/esr-metainfo.patch new file mode 100644 index 0000000..fff02c5 --- /dev/null +++ b/user/zotero/esr-metainfo.patch @@ -0,0 +1,18 @@ +see https://gitlab.alpinelinux.org/alpine/aports/-/issues/13235 +--- a/taskcluster/docker/firefox-flatpak/org.mozilla.firefox.appdata.xml.in ++++ b/taskcluster/docker/firefox-flatpak/org.mozilla.firefox.appdata.xml.in +@@ -1,10 +1,10 @@ + + +- org.mozilla.firefox ++ org.mozilla.firefox-esr +- org.mozilla.firefox.desktop ++ firefox-esr.desktop +- Firefox ++ Firefox ESR + Mozilla +- Fast, Private & Safe Web Browser ++ Mozilla Firefox Web Browser Extended Support Release + CC0-1.0 + MPL-2.0 + diff --git a/user/zotero/firefox.desktop b/user/zotero/firefox.desktop new file mode 100644 index 0000000..3de789d --- /dev/null +++ b/user/zotero/firefox.desktop @@ -0,0 +1,340 @@ +[Desktop Entry] +Version=1.0 +Name=Firefox ESR +GenericName=Web Browser +GenericName[ar]=متصفح ويب +GenericName[ast]=Restolador Web +GenericName[bn]=ওয়েব ব্রাউজার +GenericName[ca]=Navegador web +GenericName[cs]=Webový prohlížeč +GenericName[da]=Webbrowser +GenericName[de]=Webbrowser +GenericName[el]=Περιηγητής διαδικτύου +GenericName[es]=Navegador web +GenericName[et]=Veebibrauser +GenericName[fa]=مرورگر اینترنتی +GenericName[fi]=WWW-selain +GenericName[fr]=Navigateur Web +GenericName[gl]=Navegador Web +GenericName[he]=דפדפן אינטרנט +GenericName[hr]=Web preglednik +GenericName[hu]=Webböngésző +GenericName[it]=Browser web +GenericName[ja]=ウェブ・ブラウザ +GenericName[ko]=웹 브라우저 +GenericName[ku]=Geroka torê +GenericName[lt]=Interneto naršyklė +GenericName[nb]=Nettleser +GenericName[nl]=Webbrowser +GenericName[nn]=Nettlesar +GenericName[no]=Nettleser +GenericName[pl]=Przeglądarka WWW +GenericName[pt]=Navegador Web +GenericName[pt_BR]=Navegador Web +GenericName[ro]=Navigator Internet +GenericName[ru]=Веб-браузер +GenericName[sk]=Internetový prehliadač +GenericName[sl]=Spletni brskalnik +GenericName[sv]=Webbläsare +GenericName[tr]=Web Tarayıcı +GenericName[ug]=توركۆرگۈ +GenericName[uk]=Веб-браузер +GenericName[vi]=Trình duyệt Web +GenericName[zh_CN]=网络浏览器 +GenericName[zh_TW]=網路瀏覽器 +Comment=Browse the World Wide Web +Comment[ar]=تصفح الشبكة العنكبوتية العالمية +Comment[ast]=Restola pela Rede +Comment[bn]=ইন্টারনেট ব্রাউজ করুন +Comment[ca]=Navegueu per el web +Comment[cs]=Prohlížení stránek World Wide Webu +Comment[da]=Surf på internettet +Comment[de]=Im Internet surfen +Comment[el]=Μπορείτε να περιηγηθείτε στο διαδίκτυο (Web) +Comment[es]=Navegue por la web +Comment[et]=Lehitse veebi +Comment[fa]=صفحات شبکه جهانی اینترنت را مرور نمایید +Comment[fi]=Selaa Internetin WWW-sivuja +Comment[fr]=Naviguer sur le Web +Comment[gl]=Navegar pola rede +Comment[he]=גלישה ברחבי האינטרנט +Comment[hr]=Pretražite web +Comment[hu]=A világháló böngészése +Comment[it]=Esplora il web +Comment[ja]=ウェブを閲覧します +Comment[ko]=웹을 돌아 다닙니다 +Comment[ku]=Li torê bigere +Comment[lt]=Naršykite internete +Comment[nb]=Surf på nettet +Comment[nl]=Verken het internet +Comment[nn]=Surf på nettet +Comment[no]=Surf på nettet +Comment[pl]=Przeglądanie stron WWW +Comment[pt]=Navegue na Internet +Comment[pt_BR]=Navegue na Internet +Comment[ro]=Navigați pe Internet +Comment[ru]=Доступ в Интернет +Comment[sk]=Prehliadanie internetu +Comment[sl]=Brskajte po spletu +Comment[sv]=Surfa på webben +Comment[tr]=İnternet'te Gezinin +Comment[ug]=دۇنيادىكى توربەتلەرنى كۆرگىلى بولىدۇ +Comment[uk]=Перегляд сторінок Інтернету +Comment[vi]=Để duyệt các trang web +Comment[zh_CN]=浏览互联网 +Comment[zh_TW]=瀏覽網際網路 +Keywords=Internet;WWW;Browser;Web;Explorer +Keywords[ar]=انترنت;إنترنت;متصفح;ويب;وب +Keywords[ast]=Internet;WWW;Restolador;Web;Esplorador +Keywords[ca]=Internet;WWW;Navegador;Web;Explorador;Explorer +Keywords[cs]=Internet;WWW;Prohlížeč;Web;Explorer +Keywords[da]=Internet;Internettet;WWW;Browser;Browse;Web;Surf;Nettet +Keywords[de]=Internet;WWW;Browser;Web;Explorer;Webseite;Site;surfen;online;browsen +Keywords[el]=Internet;WWW;Browser;Web;Explorer;Διαδίκτυο;Περιηγητής;Firefox;Φιρεφοχ;Ιντερνετ +Keywords[es]=Explorador;Internet;WWW +Keywords[fi]=Internet;WWW;Browser;Web;Explorer;selain;Internet-selain;internetselain;verkkoselain;netti;surffaa +Keywords[fr]=Internet;WWW;Browser;Web;Explorer;Fureteur;Surfer;Navigateur +Keywords[he]=דפדפן;אינטרנט;רשת;אתרים;אתר;פיירפוקס;מוזילה; +Keywords[hr]=Internet;WWW;preglednik;Web +Keywords[hu]=Internet;WWW;Böngésző;Web;Háló;Net;Explorer +Keywords[it]=Internet;WWW;Browser;Web;Navigatore +Keywords[is]=Internet;WWW;Vafri;Vefur;Netvafri;Flakk +Keywords[ja]=Internet;WWW;Web;インターネット;ブラウザ;ウェブ;エクスプローラ +Keywords[nb]=Internett;WWW;Nettleser;Explorer;Web;Browser;Nettside +Keywords[nl]=Internet;WWW;Browser;Web;Explorer;Verkenner;Website;Surfen;Online +Keywords[pt]=Internet;WWW;Browser;Web;Explorador;Navegador +Keywords[pt_BR]=Internet;WWW;Browser;Web;Explorador;Navegador +Keywords[ru]=Internet;WWW;Browser;Web;Explorer;интернет;браузер;веб;файрфокс;огнелис +Keywords[sk]=Internet;WWW;Prehliadač;Web;Explorer +Keywords[sl]=Internet;WWW;Browser;Web;Explorer;Brskalnik;Splet +Keywords[tr]=İnternet;WWW;Tarayıcı;Web;Gezgin;Web sitesi;Site;sörf;çevrimiçi;tara +Keywords[uk]=Internet;WWW;Browser;Web;Explorer;Інтернет;мережа;переглядач;оглядач;браузер;веб;файрфокс;вогнелис;перегляд +Keywords[vi]=Internet;WWW;Browser;Web;Explorer;Trình duyệt;Trang web +Keywords[zh_CN]=Internet;WWW;Browser;Web;Explorer;网页;浏览;上网;火狐;Firefox;ff;互联网;网站; +Keywords[zh_TW]=Internet;WWW;Browser;Web;Explorer;網際網路;網路;瀏覽器;上網;網頁;火狐 +Exec=firefox-esr %u +Icon=firefox-esr +Terminal=false +X-MultipleArgs=false +Type=Application +MimeType=text/html;text/xml;application/xhtml+xml;x-scheme-handler/http;x-scheme-handler/https;application/x-xpinstall;application/pdf;application/json; +StartupNotify=true +StartupWMClass=firefox-esr +Categories=Network;WebBrowser; +Actions=new-window;new-private-window; + +[Desktop Action new-window] +Name=New Window +Name[ach]=Dirica manyen +Name[af]=Nuwe venster +Name[an]=Nueva finestra +Name[ar]=نافذة جديدة +Name[as]=নতুন উইন্ডো +Name[ast]=Ventana nueva +Name[az]=Yeni Pəncərə +Name[be]=Новае акно +Name[bg]=Нов прозорец +Name[bn_BD]=নতুন উইন্ডো (N) +Name[bn_IN]=নতুন উইন্ডো +Name[br]=Prenestr nevez +Name[brx]=गोदान उइन्ड'(N) +Name[bs]=Novi prozor +Name[ca]=Finestra nova +Name[cak]=K'ak'a' tzuwäch +Name[cs]=Nové okno +Name[cy]=Ffenestr Newydd +Name[da]=Nyt vindue +Name[de]=Neues Fenster +Name[dsb]=Nowe wokno +Name[el]=Νέο παράθυρο +Name[en_GB]=New Window +Name[en_US]=New Window +Name[en_ZA]=New Window +Name[eo]=Nova fenestro +Name[es_AR]=Nueva ventana +Name[es_CL]=Nueva ventana +Name[es_ES]=Nueva ventana +Name[es_MX]=Nueva ventana +Name[et]=Uus aken +Name[eu]=Leiho berria +Name[fa]=پنجره جدید +Name[ff]=Henorde Hesere +Name[fi]=Uusi ikkuna +Name[fr]=Nouvelle fenêtre +Name[fy_NL]=Nij finster +Name[ga_IE]=Fuinneog Nua +Name[gd]=Uinneag ùr +Name[gl]=Nova xanela +Name[gn]=Ovetã pyahu +Name[gu_IN]=નવી વિન્ડો +Name[he]=חלון חדש +Name[hi_IN]=नया विंडो +Name[hr]=Novi prozor +Name[hsb]=Nowe wokno +Name[hu]=Új ablak +Name[hy_AM]=Նոր Պատուհան +Name[id]=Jendela Baru +Name[is]=Nýr gluggi +Name[it]=Nuova finestra +Name[ja]=新しいウィンドウ +Name[ja_JP-mac]=新規ウインドウ +Name[ka]=ახალი ფანჯარა +Name[kk]=Жаңа терезе +Name[km]=បង្អួចថ្មី +Name[kn]=ಹೊಸ ಕಿಟಕಿ +Name[ko]=새 창 +Name[kok]=नवें जनेल +Name[ks]=نئئ وِنڈو +Name[lij]=Neuvo barcon +Name[lo]=ຫນ້າຕ່າງໃຫມ່ +Name[lt]=Naujas langas +Name[ltg]=Jauns lūgs +Name[lv]=Jauns logs +Name[mai]=नव विंडो +Name[mk]=Нов прозорец +Name[ml]=പുതിയ ജാലകം +Name[mr]=नवीन पटल +Name[ms]=Tetingkap Baru +Name[my]=ဝင်းဒိုးအသစ် +Name[nb_NO]=Nytt vindu +Name[ne_NP]=नयाँ सञ्झ्याल +Name[nl]=Nieuw venster +Name[nn_NO]=Nytt vindauge +Name[or]=ନୂତନ ୱିଣ୍ଡୋ +Name[pa_IN]=ਨਵੀਂ ਵਿੰਡੋ +Name[pl]=Nowe okno +Name[pt_BR]=Nova janela +Name[pt_PT]=Nova janela +Name[rm]=Nova fanestra +Name[ro]=Fereastră nouă +Name[ru]=Новое окно +Name[sat]=नावा विंडो (N) +Name[si]=නව කවුළුවක් +Name[sk]=Nové okno +Name[sl]=Novo okno +Name[son]=Zanfun taaga +Name[sq]=Dritare e Re +Name[sr]=Нови прозор +Name[sv_SE]=Nytt fönster +Name[ta]=புதிய சாளரம் +Name[te]=కొత్త విండో +Name[th]=หน้าต่างใหม่ +Name[tr]=Yeni pencere +Name[tsz]=Eraatarakua jimpani +Name[uk]=Нове вікно +Name[ur]=نیا دریچہ +Name[uz]=Yangi oyna +Name[vi]=Cửa sổ mới +Name[wo]=Palanteer bu bees +Name[xh]=Ifestile entsha +Name[zh_CN]=新建窗口 +Name[zh_TW]=開新視窗 +Exec=firefox-esr --new-window %u + +[Desktop Action new-private-window] +Name=New Private Window +Name[ach]=Dirica manyen me mung +Name[af]=Nuwe privaatvenster +Name[an]=Nueva finestra privada +Name[ar]=نافذة خاصة جديدة +Name[as]=নতুন ব্যক্তিগত উইন্ডো +Name[ast]=Ventana privada nueva +Name[az]=Yeni Məxfi Pəncərə +Name[be]=Новае акно адасаблення +Name[bg]=Нов прозорец за поверително сърфиране +Name[bn_BD]=নতুন ব্যক্তিগত উইন্ডো +Name[bn_IN]=নতুন ব্যক্তিগত উইন্ডো +Name[br]=Prenestr merdeiñ prevez nevez +Name[brx]=गोदान प्राइभेट उइन्ड' +Name[bs]=Novi privatni prozor +Name[ca]=Finestra privada nova +Name[cak]=K'ak'a' ichinan tzuwäch +Name[cs]=Nové anonymní okno +Name[cy]=Ffenestr Breifat Newydd +Name[da]=Nyt privat vindue +Name[de]=Neues privates Fenster +Name[dsb]=Nowe priwatne wokno +Name[el]=Νέο παράθυρο ιδιωτικής περιήγησης +Name[en_GB]=New Private Window +Name[en_US]=New Private Window +Name[en_ZA]=New Private Window +Name[eo]=Nova privata fenestro +Name[es_AR]=Nueva ventana privada +Name[es_CL]=Nueva ventana privada +Name[es_ES]=Nueva ventana privada +Name[es_MX]=Nueva ventana privada +Name[et]=Uus privaatne aken +Name[eu]=Leiho pribatu berria +Name[fa]=پنجره ناشناس جدید +Name[ff]=Henorde Suturo Hesere +Name[fi]=Uusi yksityinen ikkuna +Name[fr]=Nouvelle fenêtre de navigation privée +Name[fy_NL]=Nij priveefinster +Name[ga_IE]=Fuinneog Nua Phríobháideach +Name[gd]=Uinneag phrìobhaideach ùr +Name[gl]=Nova xanela privada +Name[gn]=Ovetã ñemi pyahu +Name[gu_IN]=નવી ખાનગી વિન્ડો +Name[he]=חלון פרטי חדש +Name[hi_IN]=नयी निजी विंडो +Name[hr]=Novi privatni prozor +Name[hsb]=Nowe priwatne wokno +Name[hu]=Új privát ablak +Name[hy_AM]=Սկսել Գաղտնի դիտարկում +Name[id]=Jendela Mode Pribadi Baru +Name[is]=Nýr huliðsgluggi +Name[it]=Nuova finestra anonima +Name[ja]=新しいプライベートウィンドウ +Name[ja_JP-mac]=新規プライベートウインドウ +Name[ka]=ახალი პირადი ფანჯარა +Name[kk]=Жаңа жекелік терезе +Name[km]=បង្អួចឯកជនថ្មី +Name[kn]=ಹೊಸ ಖಾಸಗಿ ಕಿಟಕಿ +Name[ko]=새 사생활 보호 모드 +Name[kok]=नवो खाजगी विंडो +Name[ks]=نْو پرایوٹ وینڈو +Name[lij]=Nêuvo barcón privòu +Name[lo]=ເປີດຫນ້າຕ່າງສວນຕົວຂື້ນມາໃຫມ່ +Name[lt]=Naujas privataus naršymo langas +Name[ltg]=Jauns privatais lūgs +Name[lv]=Jauns privātais logs +Name[mai]=नया निज विंडो (W) +Name[mk]=Нов приватен прозорец +Name[ml]=പുതിയ സ്വകാര്യ ജാലകം +Name[mr]=नवीन वैयक्तिक पटल +Name[ms]=Tetingkap Persendirian Baharu +Name[my]=New Private Window +Name[nb_NO]=Nytt privat vindu +Name[ne_NP]=नयाँ निजी सञ्झ्याल +Name[nl]=Nieuw privévenster +Name[nn_NO]=Nytt privat vindauge +Name[or]=ନୂତନ ବ୍ୟକ୍ତିଗତ ୱିଣ୍ଡୋ +Name[pa_IN]=ਨਵੀਂ ਪ੍ਰਾਈਵੇਟ ਵਿੰਡੋ +Name[pl]=Nowe okno prywatne +Name[pt_BR]=Nova janela privativa +Name[pt_PT]=Nova janela privada +Name[rm]=Nova fanestra privata +Name[ro]=Fereastră privată nouă +Name[ru]=Новое приватное окно +Name[sat]=नावा निजेराक् विंडो (W ) +Name[si]=නව පුද්ගලික කවුළුව (W) +Name[sk]=Nové okno v režime Súkromné prehliadanie +Name[sl]=Novo zasebno okno +Name[son]=Sutura zanfun taaga +Name[sq]=Dritare e Re Private +Name[sr]=Нови приватан прозор +Name[sv_SE]=Nytt privat fönster +Name[ta]=புதிய தனிப்பட்ட சாளரம் +Name[te]=కొత్త ఆంతరంగిక విండో +Name[th]=หน้าต่างส่วนตัวใหม่ +Name[tr]=Yeni gizli pencere +Name[tsz]=Juchiiti eraatarakua jimpani +Name[uk]=Приватне вікно +Name[ur]=نیا نجی دریچہ +Name[uz]=Yangi maxfiy oyna +Name[vi]=Cửa sổ riêng tư mới +Name[wo]=Panlanteeru biir bu bees +Name[xh]=Ifestile yangasese entsha +Name[zh_CN]=新建隐私浏览窗口 +Name[zh_TW]=新增隱私視窗 +Exec=firefox-esr --private-window %u diff --git a/user/zotero/fix-fortify-system-wrappers.patch b/user/zotero/fix-fortify-system-wrappers.patch new file mode 100644 index 0000000..17cf7e3 --- /dev/null +++ b/user/zotero/fix-fortify-system-wrappers.patch @@ -0,0 +1,13 @@ +The wrapper features.h gets pulled in by system headers causing thigns to +break. We work around it by simply not wrap features.h + +--- ./config/system-headers.mozbuild.orig ++++ ./config/system-headers.mozbuild +@@ -229,7 +229,6 @@ + 'execinfo.h', + 'extras.h', + 'fcntl.h', +- 'features.h', + 'fenv.h', + 'ffi.h', + 'fibdef.h', diff --git a/user/zotero/fix-rust-target.patch b/user/zotero/fix-rust-target.patch new file mode 100644 index 0000000..9342063 --- /dev/null +++ b/user/zotero/fix-rust-target.patch @@ -0,0 +1,31 @@ +Allow us to just set RUST_TARGEt ourselves instead of hacking around in mozilla's +weird custom build system... + +--- a/build/moz.configure/rust.configure ++++ b/build/moz.configure/rust.configure +@@ -225,7 +225,9 @@ + data.setdefault(key, []).append(namespace(rust_target=t, target=info)) + return data + +- ++@imports('os') ++@imports(_from='mozbuild.util', _import='ensure_unicode') ++@imports(_from='mozbuild.util', _import='system_encoding') + def detect_rustc_target( + host_or_target, compiler_info, arm_target, rust_supported_targets + ): +@@ -340,13 +342,13 @@ + + return None + +- rustc_target = find_candidate(candidates) ++ rustc_target = os.environ['RUST_TARGET'] + + if rustc_target is None: + die("Don't know how to translate {} for rustc".format(host_or_target.alias)) + +- return rustc_target ++ return ensure_unicode(rustc_target, system_encoding) + + + @imports('os') diff --git a/user/zotero/fix-webrtc-glibcisms.patch b/user/zotero/fix-webrtc-glibcisms.patch new file mode 100644 index 0000000..4f9043b --- /dev/null +++ b/user/zotero/fix-webrtc-glibcisms.patch @@ -0,0 +1,20 @@ +--- a/third_party/libwebrtc/system_wrappers/source/cpu_features_linux.cc ++++ b/third_party/libwebrtc/system_wrappers/source/cpu_features_linux.cc +@@ -18,7 +18,7 @@ + #define WEBRTC_GLIBC_PREREQ(a, b) 0 + #endif + +-#if WEBRTC_GLIBC_PREREQ(2, 16) ++#if !__GLIBC__ || WEBRTC_GLIBC_PREREQ(2, 16) + #include + #else + #include +@@ -40,7 +40,7 @@ + int architecture = 0; + uint64_t hwcap = 0; + const char* platform = NULL; +-#if WEBRTC_GLIBC_PREREQ(2, 16) ++#if !__GLIBC__ || WEBRTC_GLIBC_PREREQ(2, 16) + hwcap = getauxval(AT_HWCAP); + platform = (const char*)getauxval(AT_PLATFORM); + #else diff --git a/user/zotero/icu74.patch b/user/zotero/icu74.patch new file mode 100644 index 0000000..46c9445 --- /dev/null +++ b/user/zotero/icu74.patch @@ -0,0 +1,38 @@ +https://bugzilla.mozilla.org/show_bug.cgi?id=1862601 + +# HG changeset patch +# User André Bargull +# Date 1697435923 -7200 +# Node ID d5f3b0c4f08a426ce00a153c04e177eecb6820e2 +# Parent c63994f8259efdf6e745c960aa9e1409d5477049 +Bug xxx - Part 12: Add new line break classes. r? + +diff --git a/intl/lwbrk/LineBreaker.cpp b/intl/lwbrk/LineBreaker.cpp +--- a/intl/lwbrk/LineBreaker.cpp ++++ b/intl/lwbrk/LineBreaker.cpp +@@ -443,17 +443,23 @@ static int8_t GetClass(uint32_t u, LineB + /* JT = 34, [JT] */ CLASS_CHARACTER, + /* JV = 35, [JV] */ CLASS_CHARACTER, + /* CLOSE_PARENTHESIS = 36, [CP] */ CLASS_CLOSE_LIKE_CHARACTER, + /* CONDITIONAL_JAPANESE_STARTER = 37, [CJ] */ CLASS_CLOSE, + /* HEBREW_LETTER = 38, [HL] */ CLASS_CHARACTER, + /* REGIONAL_INDICATOR = 39, [RI] */ CLASS_CHARACTER, + /* E_BASE = 40, [EB] */ CLASS_BREAKABLE, + /* E_MODIFIER = 41, [EM] */ CLASS_CHARACTER, +- /* ZWJ = 42, [ZWJ]*/ CLASS_CHARACTER}; ++ /* ZWJ = 42, [ZWJ]*/ CLASS_CHARACTER, ++ /* AKSARA = 43, [AK] */ CLASS_CHARACTER, ++ /* AKSARA_PREBASE = 44, [AP] */ CLASS_CHARACTER, ++ /* AKSARA_START = 45, [AS] */ CLASS_CHARACTER, ++ /* VIRAMA_FINAL = 46, [VF] */ CLASS_CHARACTER, ++ /* VIRAMA = 47, [VI] */ CLASS_CHARACTER, ++ }; + + static_assert(U_LB_COUNT == mozilla::ArrayLength(sUnicodeLineBreakToClass), + "Gecko vs ICU LineBreak class mismatch"); + + auto cls = GetLineBreakClass(u); + MOZ_ASSERT(cls < mozilla::ArrayLength(sUnicodeLineBreakToClass)); + + // Overrides based on rules for the different line-break values given in + diff --git a/user/zotero/lfs64.patch b/user/zotero/lfs64.patch new file mode 100644 index 0000000..bae8b5d --- /dev/null +++ b/user/zotero/lfs64.patch @@ -0,0 +1,35 @@ +force stat() instead of stat64() on 32-bit +-- +--- a/xpcom/io/nsLocalFileUnix.h ++++ b/xpcom/io/nsLocalFileUnix.h +@@ -21,7 +21,7 @@ + + // stat64 and lstat64 are deprecated on OS X. Normal stat and lstat are + // 64-bit by default on OS X 10.6+. +-#if defined(HAVE_STAT64) && defined(HAVE_LSTAT64) && !defined(XP_DARWIN) ++#if 0 && defined(HAVE_STAT64) && defined(HAVE_LSTAT64) && !defined(XP_DARWIN) + # if defined(AIX) + # if defined STAT + # undef STAT +--- a/mozglue/baseprofiler/core/shared-libraries-linux.cc ++++ b/mozglue/baseprofiler/core/shared-libraries-linux.cc +@@ -178,7 +178,7 @@ + return false; + } + +-#if defined(__x86_64__) || defined(__aarch64__) || \ ++#if 1 || defined(__x86_64__) || defined(__aarch64__) || \ + (defined(__mips__) && _MIPS_SIM == _ABI64) || \ + !(defined(GP_OS_linux) || defined(GP_OS_android)) + +--- a/security/sandbox/linux/broker/SandboxBrokerUtils.h ++++ b/security/sandbox/linux/broker/SandboxBrokerUtils.h +@@ -15,7 +15,7 @@ + // calls. We'll intercept those and handle them in the stat functions + // but must be sure to use the right structure layout. + +-#if defined(__NR_stat64) || defined(__NR_fstatat64) ++#if 0 && (defined(__NR_stat64) || defined(__NR_fstatat64) ) + typedef struct stat64 statstruct; + # define statsyscall stat64 + # define lstatsyscall lstat64 diff --git a/user/zotero/mozilla-location.keys b/user/zotero/mozilla-location.keys new file mode 100644 index 0000000..8a3262d --- /dev/null +++ b/user/zotero/mozilla-location.keys @@ -0,0 +1 @@ +NjhhZGJjMDEtMDM3OC00Zjc0LTk0N2UtMzBiYzA5NjlhMDc3Cg== diff --git a/user/zotero/no-ccache-stats.patch b/user/zotero/no-ccache-stats.patch new file mode 100644 index 0000000..4d557a0 --- /dev/null +++ b/user/zotero/no-ccache-stats.patch @@ -0,0 +1,13 @@ +prevents a call to ccache +diff --git a/python/mozbuild/mozbuild/controller/building.py b/python/mozbuild/mozbuild/controller/building.py +index bf7009a..011c012 100644 +--- a/python/mozbuild/mozbuild/controller/building.py ++++ b/python/mozbuild/mozbuild/controller/building.py +@@ -570,6 +570,7 @@ class BuildMonitor(MozbuildObject): + ) + + def ccache_stats(self, ccache=None): ++ return None + ccache_stats = None + + if ccache is None: diff --git a/user/zotero/ppc-musttail.patch b/user/zotero/ppc-musttail.patch new file mode 100644 index 0000000..ebe06c0 --- /dev/null +++ b/user/zotero/ppc-musttail.patch @@ -0,0 +1,30 @@ +Patch-Source: https://github.com/chimera-linux/cports/blob/506127954653ccebf9b82df1452cce4ed0dae3b1/contrib/thunderbird/patches/ppc-musttail.patch +-- +commit 5e66655e1456c9d26637ceaed3f4533b537322c4 +Author: Daniel Kolesa +Date: Sat May 13 23:00:04 2023 +0200 + + disable musttail on ppc + + 41:38.04 LLVM ERROR: failed to perform tail call elimination on a call site marked musttail + 41:38.04 PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace. + 41:38.04 Stack dump: + 41:38.04 0. Running pass 'Function Pass Manager' on module '/builddir/thunderbird-114.0_beta1/obj-powerpc64le-unknown-linux-musl/toolkit/library/build/../../../gfx/skia/SkOpts.o'. + 41:38.04 1. Running pass 'PowerPC DAG->DAG Pattern Instruction Selection' on function '@_ZN8portableL15init_lane_masksEPNS_6ParamsEP21SkRasterPipelineStageffff' + 41:38.95 clang-16: error: unable to execute command: Aborted + + To be investigated later. + +diff --git a/gfx/skia/skia/src/core/SkRasterPipeline.h b/gfx/skia/skia/src/core/SkRasterPipeline.h +index 766bb0c..88c6cb2 100644 +--- a/gfx/skia/skia/src/core/SkRasterPipeline.h ++++ b/gfx/skia/skia/src/core/SkRasterPipeline.h +@@ -24,7 +24,7 @@ enum SkColorType : int; + struct SkImageInfo; + struct skcms_TransferFunction; + +-#if __has_cpp_attribute(clang::musttail) && !defined(__EMSCRIPTEN__) && !defined(SK_CPU_ARM32) ++#if __has_cpp_attribute(clang::musttail) && !defined(__EMSCRIPTEN__) && !defined(SK_CPU_ARM32) && !defined(__powerpc__) + #define SK_HAS_MUSTTAIL 1 + #else + #define SK_HAS_MUSTTAIL 0 diff --git a/user/zotero/ppc-webrtc.patch b/user/zotero/ppc-webrtc.patch new file mode 100644 index 0000000..bf4afdd --- /dev/null +++ b/user/zotero/ppc-webrtc.patch @@ -0,0 +1,23 @@ +Patch-Source: https://github.com/chimera-linux/cports/blob/506127954653ccebf9b82df1452cce4ed0dae3b1/contrib/thunderbird/patches/ppc64-webrtc.patch +-- +commit 010bfb0441168d51e0fffe98d1f50e0602e7947f +Author: Daniel Kolesa +Date: Sat May 13 23:40:41 2023 +0200 + + fix webrtc on ppc64 + +diff --git a/third_party/libwebrtc/moz.build b/third_party/libwebrtc/moz.build +index 976cf37..d35d447 100644 +--- a/third_party/libwebrtc/moz.build ++++ b/third_party/libwebrtc/moz.build +@@ -643,3 +643,10 @@ if CONFIG["CPU_ARCH"] == "x86_64" and CONFIG["OS_TARGET"] == "WINNT": + "/third_party/libwebrtc/modules/audio_processing/agc2/rnn_vad/vector_math_avx2_gn", + "/third_party/libwebrtc/modules/desktop_capture/desktop_capture_differ_sse2_gn" + ] ++ ++if CONFIG["CPU_ARCH"] == "ppc64" and CONFIG["OS_TARGET"] == "Linux": ++ ++ DIRS += [ ++ "/third_party/libwebrtc/modules/desktop_capture/desktop_capture_gn", ++ "/third_party/libwebrtc/modules/desktop_capture/primitives_gn" ++ ] diff --git a/user/zotero/python-deps.patch b/user/zotero/python-deps.patch new file mode 100644 index 0000000..dfdd3b2 --- /dev/null +++ b/user/zotero/python-deps.patch @@ -0,0 +1,12 @@ +diff --git a/python/sites/mach.txt b/python/sites/mach.txt +index 55cc6fb..51bf67d 100644 +--- a/python/sites/mach.txt ++++ b/python/sites/mach.txt +@@ -141,5 +141,5 @@ pypi-optional:glean-sdk==52.7.0:telemetry will not be collected + # Mach gracefully handles the case where `psutil` is unavailable. + # We aren't (yet) able to pin packages in automation, so we have to + # support down to the oldest locally-installed version (5.4.2). +-pypi-optional:psutil>=5.4.2,<=5.9.4:telemetry will be missing some data +-pypi-optional:zstandard>=0.11.1,<=0.22.0:zstd archives will not be possible to extract ++pypi-optional:psutil>=5.4.2,<=5.10.0:telemetry will be missing some data ++pypi-optional:zstandard>=0.11.1,<=0.24.0:zstd archives will not be possible to extract diff --git a/user/zotero/rust-lto-thin.patch b/user/zotero/rust-lto-thin.patch new file mode 100644 index 0000000..788fcea --- /dev/null +++ b/user/zotero/rust-lto-thin.patch @@ -0,0 +1,12 @@ +set rust crate lto to thin to not use fatlto for gkrust which fails sometimes +--- a/config/makefiles/rust.mk ++++ b/config/makefiles/rust.mk +@@ -92,7 +92,7 @@ + # Never enable when coverage is enabled to work around https://github.com/rust-lang/rust/issues/90045. + ifndef MOZ_CODE_COVERAGE + ifeq (,$(findstring gkrust_gtest,$(RUST_LIBRARY_FILE))) +-cargo_rustc_flags += -Clto$(if $(filter full,$(MOZ_LTO_RUST_CROSS)),=fat) ++cargo_rustc_flags += -Clto=thin + endif + # We need -Cembed-bitcode=yes for all crates when using -Clto. + RUSTFLAGS += -Cembed-bitcode=yes diff --git a/user/zotero/sandbox-fork.patch b/user/zotero/sandbox-fork.patch new file mode 100644 index 0000000..c7222ab --- /dev/null +++ b/user/zotero/sandbox-fork.patch @@ -0,0 +1,15 @@ +make SYS_fork non-fatal, musl uses it for fork(2) + +--- a/security/sandbox/linux/SandboxFilter.cpp ++++ b/security/sandbox/linux/SandboxFilter.cpp +@@ -1253,6 +1253,10 @@ + // usually do something reasonable on error. + case __NR_clone: + return ClonePolicy(Error(EPERM)); ++#ifdef __NR_fork ++ case __NR_fork: ++ return Error(ENOSYS); ++#endif + + # ifdef __NR_fadvise64 + case __NR_fadvise64: diff --git a/user/zotero/sandbox-largefile.patch b/user/zotero/sandbox-largefile.patch new file mode 100644 index 0000000..f1cf28b --- /dev/null +++ b/user/zotero/sandbox-largefile.patch @@ -0,0 +1,17 @@ +--- a/security/sandbox/linux/SandboxFilter.cpp 2020-11-23 22:41:14.556378950 +0100 ++++ b/security/sandbox/linux/SandboxFilter.cpp 2020-11-23 22:40:23.595806444 +0100 +@@ -68,7 +68,13 @@ + + // The headers define O_LARGEFILE as 0 on x86_64, but we need the + // actual value because it shows up in file flags. +-#define O_LARGEFILE_REAL 00100000 ++#if defined(__x86_64__) || defined(__i386__) || defined(__mips__) ++#define O_LARGEFILE_REAL 0100000 ++#elif defined(__powerpc__) ++#define O_LARGEFILE_REAL 0200000 ++#else ++#define O_LARGEFILE_REAL O_LARGEFILE ++#endif + + // Not part of UAPI, but userspace sees it in F_GETFL; see bug 1650751. + #define FMODE_NONOTIFY 0x4000000 diff --git a/user/zotero/sandbox-sched_setscheduler.patch b/user/zotero/sandbox-sched_setscheduler.patch new file mode 100644 index 0000000..ffdf126 --- /dev/null +++ b/user/zotero/sandbox-sched_setscheduler.patch @@ -0,0 +1,24 @@ +upstream bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1657849 +diff --git a/security/sandbox/linux/SandboxFilter.cpp b/security/sandbox/linux/SandboxFilter.cpp +index ed958bc..9824433 100644 +--- a/security/sandbox/linux/SandboxFilter.cpp ++++ b/security/sandbox/linux/SandboxFilter.cpp +@@ -1751,6 +1751,6 @@ class GMPSandboxPolicy : public SandboxPolicyCommon { + case __NR_sched_get_priority_max: ++ case __NR_sched_setscheduler: + return Allow(); + case __NR_sched_getparam: +- case __NR_sched_getscheduler: +- case __NR_sched_setscheduler: { ++ case __NR_sched_getscheduler: { + Arg pid(0); +@@ -1926,3 +1926,2 @@ class RDDSandboxPolicy final : public SandboxPolicyCommon { + case __NR_sched_getscheduler: +- case __NR_sched_setscheduler: + case __NR_sched_getattr: +@@ -1932,2 +1931,5 @@ class RDDSandboxPolicy final : public SandboxPolicyCommon { + } ++ // sched_setscheduler gets special treatment here (bug 1657849): ++ case __NR_sched_setscheduler: ++ return Allow(); + diff --git a/user/zotero/stab.h b/user/zotero/stab.h new file mode 100644 index 0000000..6f70af3 --- /dev/null +++ b/user/zotero/stab.h @@ -0,0 +1,71 @@ +/* $OpenBSD: stab.h,v 1.3 2003/06/02 19:34:12 millert Exp $ */ +/* $NetBSD: stab.h,v 1.4 1994/10/26 00:56:25 cgd Exp $ */ + +/*- + * Copyright (c) 1991 The Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)stab.h 5.2 (Berkeley) 4/4/91 + */ + +#ifndef _STAB_H_ +#define _STAB_H_ + +/* + * The following are symbols used by various debuggers and by the Pascal + * compiler. Each of them must have one (or more) of the bits defined by + * the N_STAB mask set. + */ + +#define N_GSYM 0x20 /* global symbol */ +#define N_FNAME 0x22 /* F77 function name */ +#define N_FUN 0x24 /* procedure name */ +#define N_STSYM 0x26 /* data segment variable */ +#define N_LCSYM 0x28 /* bss segment variable */ +#define N_MAIN 0x2a /* main function name */ +#define N_PC 0x30 /* global Pascal symbol */ +#define N_RSYM 0x40 /* register variable */ +#define N_SLINE 0x44 /* text segment line number */ +#define N_DSLINE 0x46 /* data segment line number */ +#define N_BSLINE 0x48 /* bss segment line number */ +#define N_SSYM 0x60 /* structure/union element */ +#define N_SO 0x64 /* main source file name */ +#define N_LSYM 0x80 /* stack variable */ +#define N_BINCL 0x82 /* include file beginning */ +#define N_SOL 0x84 /* included source file name */ +#define N_PSYM 0xa0 /* parameter variable */ +#define N_EINCL 0xa2 /* include file end */ +#define N_ENTRY 0xa4 /* alternate entry point */ +#define N_LBRAC 0xc0 /* left bracket */ +#define N_EXCL 0xc2 /* deleted include file */ +#define N_RBRAC 0xe0 /* right bracket */ +#define N_BCOMM 0xe2 /* begin common */ +#define N_ECOMM 0xe4 /* end common */ +#define N_ECOML 0xe8 /* end common (local name) */ +#define N_LENG 0xfe /* length of preceding entry */ + +#endif /* !_STAB_H_ */ diff --git a/user/zotero/vendor-prefs.js b/user/zotero/vendor-prefs.js new file mode 100644 index 0000000..3b75075 --- /dev/null +++ b/user/zotero/vendor-prefs.js @@ -0,0 +1,12 @@ +// Use LANG environment variable to choose locale +pref("intl.locale.requested", ""); + +// Use system-provided dictionaries +pref("spellchecker.dictionary_path", "/usr/share/hunspell"); + +// Disable default browser checking. +pref("browser.shell.checkDefaultBrowser", false); + +// Don't disable our bundled extensions in the application directory +pref("extensions.autoDisableScopes", 11); +pref("extensions.shownSelectionUI", true); diff --git a/user/zotero/zotero.desktop b/user/zotero/zotero.desktop new file mode 100644 index 0000000..249ae57 --- /dev/null +++ b/user/zotero/zotero.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Type=Application +Name=Zotero +GenericName=Zotero Standalone. Is a free, easy-to-use tool to help you collect, organize, cite, and share your research sources. +Icon=zotero +Exec=/usr/bin/zotero -url %U +Categories=Office +Terminal=false +MimeType=x-scheme-handler/zotero diff --git a/user/zotero/zotero_build-modifications.patch b/user/zotero/zotero_build-modifications.patch new file mode 100644 index 0000000..22aa90e --- /dev/null +++ b/user/zotero/zotero_build-modifications.patch @@ -0,0 +1,144 @@ +diff --git a/zotero/app/build.sh b/zotero/app/build.sh +index 649d629..7d078b8 100755 +--- a/zotero/app/build.sh ++++ b/zotero/app/build.sh +@@ -59,10 +59,7 @@ function abspath { + } + + function check_lfs_file { +- if [ "$(head --bytes 5 "$1")" = "versi" ]; then +- echo "$1 not checked out -- install Git LFS and run 'git lfs pull'" >&2 +- exit 1 +- fi ++ return 0 + } + + SOURCE_DIR="" +@@ -840,18 +837,13 @@ if [ $BUILD_LINUX == 1 ]; then + cp -r "$runtime_path/"!(application.ini|browser|defaults|devtools-files|crashreporter|crashreporter.ini|firefox|pingsender|precomplete|removed-files|run-mozilla.sh|update-settings.ini|updater|updater.ini) "$APPDIR" + + # Use our own launcher that calls the original Firefox executable with -app +- mv "$APPDIR"/firefox-bin "$APPDIR"/zotero-bin ++ mv "$APPDIR"/firefox-esr "$APPDIR"/zotero-bin + cp "$CALLDIR/linux/zotero" "$APPDIR"/zotero + + # Copy Ubuntu launcher files + cp "$CALLDIR/linux/zotero.desktop" "$APPDIR" + cp "$CALLDIR/linux/set_launcher_icon" "$APPDIR" + +- # Use our own updater, because Mozilla's requires updates signed by Mozilla +- check_lfs_file "$CALLDIR/linux/updater.tar.xz" +- tar xf "$CALLDIR/linux/updater.tar.xz" --to-stdout updater-$arch > "$APPDIR/updater" +- chmod 755 "$APPDIR/updater" +- + # Copy app files + rsync -a "$base_dir/" "$APPDIR/" + +@@ -860,6 +852,7 @@ if [ $BUILD_LINUX == 1 ]; then + cp -RH "$CALLDIR/modules/zotero-libreoffice-integration/install" "$APPDIR/integration/libreoffice" + + # Copy icons ++ mkdir -p "$APPDIR"/icons + cp "$CALLDIR/linux/icons/icon32.png" "$APPDIR/icons/" + cp "$CALLDIR/linux/icons/icon64.png" "$APPDIR/icons/" + cp "$CALLDIR/linux/icons/icon128.png" "$APPDIR/icons/" + +diff --git a/zotero/app/build.sh.orig b/zotero/app/build.sh +index 702f499..3ee7e34 100755 +--- a/zotero/app/build.sh.orig ++++ b/zotero/app/build.sh +@@ -189,7 +189,7 @@ BUILD_ID=`date +%Y%m%d%H%M%S` + # Paths to Gecko runtimes + MAC_RUNTIME_PATH="$CALLDIR/xulrunner/Firefox.app" + WIN_RUNTIME_PATH_PREFIX="$CALLDIR/xulrunner/firefox-" +-LINUX_RUNTIME_PATH_PREFIX="$CALLDIR/xulrunner/firefox-" ++LINUX_RUNTIME_PATH_PREFIX="$CALLDIR/xulrunner/firefox" + + base_dir="$BUILD_DIR/base" + app_dir="$BUILD_DIR/base/app" +@@ -223,8 +223,8 @@ elif [ $BUILD_WIN == 1 ]; then + unzip -qj "${WIN_RUNTIME_PATH_PREFIX}win-x64"/omni.ja "hyphenation/*" -d "$app_dir"/hyphenation/ + elif [ $BUILD_LINUX == 1 ]; then + # Non-arch-specific files, so just use 64-bit version +- cp -Rp "${LINUX_RUNTIME_PATH_PREFIX}x86_64"/browser/omni "$app_dir" +- unzip -qj "${LINUX_RUNTIME_PATH_PREFIX}x86_64"/omni.ja "hyphenation/*" -d "$app_dir"/hyphenation/ ++ cp -Rp "${LINUX_RUNTIME_PATH_PREFIX}"/browser/omni "$app_dir" ++ unzip -qj "${LINUX_RUNTIME_PATH_PREFIX}"/omni.ja "hyphenation/*" -d "$app_dir"/hyphenation/ + fi + set -e + cd $omni_dir +@@ -825,11 +825,11 @@ if [ $BUILD_LINUX == 1 ]; then + fi + + for arch in $archs; do +- runtime_path="${LINUX_RUNTIME_PATH_PREFIX}${arch}" ++ runtime_path="${LINUX_RUNTIME_PATH_PREFIX}" + + # Set up directory +- echo 'Building Zotero_linux-'$arch +- APPDIR="$STAGE_DIR/Zotero_linux-$arch" ++ echo 'Building Zotero_linux' ++ APPDIR="$STAGE_DIR/Zotero_linux" + rm -rf "$APPDIR" + mkdir "$APPDIR" + +diff --git a/zotero/app/scripts/fetch_xulrunner.orig b/zotero/app/scripts/fetch_xulrunner +index 2b57bfb..2bbc110 100755 +--- a/zotero/app/scripts/fetch_xulrunner.orig ++++ b/zotero/app/scripts/fetch_xulrunner +@@ -134,15 +134,6 @@ function modify_omni { + # Continue using app.update.auto in prefs.js on Windows + replace_line 'PER_INSTALLATION_PREFS_PLATFORMS = \["win"\]' 'PER_INSTALLATION_PREFS_PLATFORMS = []' modules/UpdateUtils.sys.mjs + +- # Prompt if major update is available instead of installing automatically on restart +- replace_line 'if \(!updateAuto\) \{' 'if (update.type == "major") { +- LOG("UpdateService:_selectAndInstallUpdate - prompting because it is a major update"); +- AUSTLMY.pingCheckCode(this._pingSuffix, AUSTLMY.CHK_SHOWPROMPT_PREF); +- Services.obs.notifyObservers(update, "update-available", "show-prompt"); +- return; +- } +- if (!updateAuto) {' modules/UpdateService.sys.mjs +- + # Avoid console warning about resource://gre/modules/FxAccountsCommon.js + replace_line 'const logins = this._data.logins;' 'const logins = this._data.logins; if (this._data.logins.length != -1) return;' modules/LoginStore.sys.mjs + +@@ -516,36 +507,10 @@ fi + + if [ $BUILD_LINUX == 1 ]; then + GECKO_VERSION="$GECKO_VERSION_LINUX" +- DOWNLOAD_URL="https://ftp.mozilla.org/pub/firefox/releases/$GECKO_VERSION" + +- +- # Include 32-bit build if not in CI +- if [[ "${CI:-}" = "1" ]] || [[ "${SKIP_32:-}" = "1" ]]; then +- arches="x86_64" +- else +- arches="i686 x86_64" +- fi +- for arch in $arches; do +- xdir="firefox-$arch" +- rm -rf $xdir +- +- archived_file="firefox-$GECKO_VERSION-$arch.tar.bz2" +- if [ -e "$archived_file" ]; then +- echo "Using $archived_file" +- cp "$archived_file" "firefox-$GECKO_VERSION.tar.bz2" +- else +- curl -O "$DOWNLOAD_URL/linux-$arch/en-US/firefox-$GECKO_VERSION.tar.bz2" +- fi +- +- tar xvf firefox-$GECKO_VERSION.tar.bz2 +- mv firefox firefox-$arch +- +- pushd firefox-$arch +- modify_omni $arch +- popd +- echo $($SCRIPT_DIR/xulrunner_hash -p l) > hash-linux +- rm "firefox-$GECKO_VERSION.tar.bz2" +- done ++ pushd firefox ++ modify_omni linux64 ++ popd + fi + + echo Done diff --git a/user/zotero/zotero_drop-phantomjs.patch b/user/zotero/zotero_drop-phantomjs.patch new file mode 100644 index 0000000..1333cbe --- /dev/null +++ b/user/zotero/zotero_drop-phantomjs.patch @@ -0,0 +1,243 @@ +diff --git a/zotero/reader/epubjs/epub.js/package.json.orig b/zotero/reader/epubjs/epub.js/package.json +index bb440ac..b4c5c32 100644 +--- a/zotero/reader/epubjs/epub.js/package.json.orig ++++ b/zotero/reader/epubjs/epub.js/package.json +@@ -41,7 +41,6 @@ + "karma-chrome-launcher": "^3.1.0", + "karma-mocha": "^2.0.1", + "karma-mocha-reporter": "^2.2.5", +- "karma-phantomjs-launcher": "^1.0.4", + "karma-sourcemap-loader": "^0.3.7", + "karma-webpack": "^5.0.0", + "mocha": "^7.2.0", +diff --git a/zotero/reader/epubjs/epub.js/package-lock.json.orig b/zotero/reader/epubjs/epub.js/package-lock.json +index 6d728e7..c889b68 100644 +--- a/zotero/reader/epubjs/epub.js/package-lock.json.orig ++++ b/zotero/reader/epubjs/epub.js/package-lock.json +@@ -28,7 +28,6 @@ + "karma-chrome-launcher": "^3.1.0", + "karma-mocha": "^2.0.1", + "karma-mocha-reporter": "^2.2.5", +- "karma-phantomjs-launcher": "^1.0.4", + "karma-sourcemap-loader": "^0.3.7", + "karma-webpack": "^5.0.0", + "mocha": "^7.2.0", +@@ -8855,16 +8854,6 @@ + "node": ">=4" + } + }, +- "node_modules/karma-phantomjs-launcher": { +- "version": "1.0.4", +- "resolved": "https://registry.npmjs.org/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.4.tgz", +- "integrity": "sha1-0jyjSAG9qYY60xjju0vUBisTrNI=", +- "dev": true, +- "dependencies": { +- "lodash": "^4.0.1", +- "phantomjs-prebuilt": "^2.1.7" +- } +- }, + "node_modules/karma-sourcemap-loader": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz", +@@ -11342,26 +11331,6 @@ + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, +- "node_modules/phantomjs-prebuilt": { +- "version": "2.1.14", +- "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.14.tgz", +- "integrity": "sha1-1T0xH8+30dCN2yQBRVjxGIxRbaA=", +- "dev": true, +- "dependencies": { +- "es6-promise": "~4.0.3", +- "extract-zip": "~1.5.0", +- "fs-extra": "~1.0.0", +- "hasha": "~2.2.0", +- "kew": "~0.7.0", +- "progress": "~1.1.8", +- "request": "~2.79.0", +- "request-progress": "~2.0.1", +- "which": "~1.2.10" +- }, +- "bin": { +- "phantomjs": "bin/phantomjs" +- } +- }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", +@@ -22124,16 +22093,6 @@ + } + } + }, +- "karma-phantomjs-launcher": { +- "version": "1.0.4", +- "resolved": "https://registry.npmjs.org/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.4.tgz", +- "integrity": "sha1-0jyjSAG9qYY60xjju0vUBisTrNI=", +- "dev": true, +- "requires": { +- "lodash": "^4.0.1", +- "phantomjs-prebuilt": "^2.1.7" +- } +- }, + "karma-sourcemap-loader": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz", +@@ -23984,23 +23943,6 @@ + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, +- "phantomjs-prebuilt": { +- "version": "2.1.14", +- "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.14.tgz", +- "integrity": "sha1-1T0xH8+30dCN2yQBRVjxGIxRbaA=", +- "dev": true, +- "requires": { +- "es6-promise": "~4.0.3", +- "extract-zip": "~1.5.0", +- "fs-extra": "~1.0.0", +- "hasha": "~2.2.0", +- "kew": "~0.7.0", +- "progress": "~1.1.8", +- "request": "~2.79.0", +- "request-progress": "~2.0.1", +- "which": "~1.2.10" +- } +- }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", +diff --git a/zotero/reader/package-lock.json.orig b/zotero/reader/package-lock.json +index 949e5de..0485ddd 100644 +--- a/zotero/reader/package-lock.json.orig ++++ b/zotero/reader/package-lock.json +@@ -83,7 +83,6 @@ + "karma-chrome-launcher": "^3.1.0", + "karma-mocha": "^2.0.1", + "karma-mocha-reporter": "^2.2.5", +- "karma-phantomjs-launcher": "^1.0.4", + "karma-sourcemap-loader": "^0.3.7", + "karma-webpack": "^5.0.0", + "mocha": "^7.2.0", +@@ -12332,20 +12331,6 @@ + "node": ">=4" + } + }, +- "node_modules/karma-phantomjs-launcher": { +- "version": "1.0.4", +- "resolved": "https://registry.npmjs.org/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.4.tgz", +- "integrity": "sha512-tf4P3plsE7wb5Pqh8GJ6RnElxfI/UM4MtVnjbSIZFpdFJlKnjRzfIx8MLCcSYJBwZ1+qSKFz4uBe3XNoq2t3KA==", +- "deprecated": "PhantomJS development have stopped, use puppeteer or similar", +- "dev": true, +- "dependencies": { +- "lodash": "^4.0.1", +- "phantomjs-prebuilt": "^2.1.7" +- }, +- "peerDependencies": { +- "karma": ">=0.9" +- } +- }, + "node_modules/karma-sourcemap-loader": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.8.tgz", +@@ -15330,40 +15315,6 @@ + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, +- "node_modules/phantomjs-prebuilt": { +- "version": "2.1.16", +- "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz", +- "integrity": "sha512-PIiRzBhW85xco2fuj41FmsyuYHKjKuXWmhjy3A/Y+CMpN/63TV+s9uzfVhsUwFe0G77xWtHBG8xmXf5BqEUEuQ==", +- "deprecated": "this package is now deprecated", +- "dev": true, +- "hasInstallScript": true, +- "dependencies": { +- "es6-promise": "^4.0.3", +- "extract-zip": "^1.6.5", +- "fs-extra": "^1.0.0", +- "hasha": "^2.2.0", +- "kew": "^0.7.0", +- "progress": "^1.1.8", +- "request": "^2.81.0", +- "request-progress": "^2.0.1", +- "which": "^1.2.10" +- }, +- "bin": { +- "phantomjs": "bin/phantomjs" +- } +- }, +- "node_modules/phantomjs-prebuilt/node_modules/which": { +- "version": "1.3.1", +- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", +- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", +- "dev": true, +- "dependencies": { +- "isexe": "^2.0.0" +- }, +- "bin": { +- "which": "bin/which" +- } +- }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", +@@ -27177,7 +27128,6 @@ + "karma-chrome-launcher": "^3.1.0", + "karma-mocha": "^2.0.1", + "karma-mocha-reporter": "^2.2.5", +- "karma-phantomjs-launcher": "^1.0.4", + "karma-sourcemap-loader": "^0.3.7", + "karma-webpack": "^5.0.0", + "mocha": "^7.2.0", +@@ -30497,16 +30447,6 @@ + } + } + }, +- "karma-phantomjs-launcher": { +- "version": "1.0.4", +- "resolved": "https://registry.npmjs.org/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.4.tgz", +- "integrity": "sha512-tf4P3plsE7wb5Pqh8GJ6RnElxfI/UM4MtVnjbSIZFpdFJlKnjRzfIx8MLCcSYJBwZ1+qSKFz4uBe3XNoq2t3KA==", +- "dev": true, +- "requires": { +- "lodash": "^4.0.1", +- "phantomjs-prebuilt": "^2.1.7" +- } +- }, + "karma-sourcemap-loader": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.8.tgz", +@@ -32672,34 +32612,6 @@ + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, +- "phantomjs-prebuilt": { +- "version": "2.1.16", +- "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz", +- "integrity": "sha512-PIiRzBhW85xco2fuj41FmsyuYHKjKuXWmhjy3A/Y+CMpN/63TV+s9uzfVhsUwFe0G77xWtHBG8xmXf5BqEUEuQ==", +- "dev": true, +- "requires": { +- "es6-promise": "^4.0.3", +- "extract-zip": "^1.6.5", +- "fs-extra": "^1.0.0", +- "hasha": "^2.2.0", +- "kew": "^0.7.0", +- "progress": "^1.1.8", +- "request": "^2.81.0", +- "request-progress": "^2.0.1", +- "which": "^1.2.10" +- }, +- "dependencies": { +- "which": { +- "version": "1.3.1", +- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", +- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", +- "dev": true, +- "requires": { +- "isexe": "^2.0.0" +- } +- } +- } +- }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",