Compare commits
6 commits
db895980ba
...
2f30464427
Author | SHA1 | Date | |
---|---|---|---|
2f30464427 | |||
93010d0ed0 | |||
bb75482791 | |||
d5d40a37e6 | |||
f85a6c1772 | |||
1888ac78ca |
14 changed files with 452 additions and 107 deletions
|
@ -1,49 +0,0 @@
|
||||||
From 624e2d79ce5a03bb60afd8e1293089dd61c60d52 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Luke Granger-Brown <git@lukegb.com>
|
|
||||||
Date: Sun, 20 Oct 2024 16:12:10 +0100
|
|
||||||
Subject: [PATCH 1/2] [s3] remember compressed chunks when finalizing multipart
|
|
||||||
uploads
|
|
||||||
|
|
||||||
Any compressed chunks will forget that they're compressed when the
|
|
||||||
multipart upload is finalized. This breaks content readback if e.g. the
|
|
||||||
chunks are encrypted, because the sizes won't match the expectation.
|
|
||||||
---
|
|
||||||
weed/s3api/filer_multipart.go | 8 +++++---
|
|
||||||
1 file changed, 5 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/weed/s3api/filer_multipart.go b/weed/s3api/filer_multipart.go
|
|
||||||
index 43f982897..76d27f460 100644
|
|
||||||
--- a/weed/s3api/filer_multipart.go
|
|
||||||
+++ b/weed/s3api/filer_multipart.go
|
|
||||||
@@ -5,9 +5,6 @@ import (
|
|
||||||
"encoding/hex"
|
|
||||||
"encoding/xml"
|
|
||||||
"fmt"
|
|
||||||
- "github.com/seaweedfs/seaweedfs/weed/s3api/s3_constants"
|
|
||||||
- "github.com/seaweedfs/seaweedfs/weed/stats"
|
|
||||||
- "golang.org/x/exp/slices"
|
|
||||||
"math"
|
|
||||||
"path/filepath"
|
|
||||||
"sort"
|
|
||||||
@@ -15,6 +12,10 @@ import (
|
|
||||||
"strings"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
+ "github.com/seaweedfs/seaweedfs/weed/s3api/s3_constants"
|
|
||||||
+ "github.com/seaweedfs/seaweedfs/weed/stats"
|
|
||||||
+ "golang.org/x/exp/slices"
|
|
||||||
+
|
|
||||||
"github.com/aws/aws-sdk-go/aws"
|
|
||||||
"github.com/aws/aws-sdk-go/service/s3"
|
|
||||||
"github.com/google/uuid"
|
|
||||||
@@ -209,6 +210,7 @@ func (s3a *S3ApiServer) completeMultipartUpload(input *s3.CompleteMultipartUploa
|
|
||||||
ModifiedTsNs: chunk.ModifiedTsNs,
|
|
||||||
CipherKey: chunk.CipherKey,
|
|
||||||
ETag: chunk.ETag,
|
|
||||||
+ IsCompressed: chunk.IsCompressed,
|
|
||||||
}
|
|
||||||
finalParts = append(finalParts, p)
|
|
||||||
offset += int64(chunk.Size)
|
|
||||||
--
|
|
||||||
2.46.0
|
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
|
|
||||||
seaweedfs.overrideAttrs (_: _: {
|
seaweedfs.overrideAttrs (_: _: {
|
||||||
patches = [
|
patches = [
|
||||||
./0001-s3-remember-compressed-chunks-when-finalizing-multip.patch
|
|
||||||
./0002-shell-add-fs.meta.edit-for-editing-a-filer-metadata-.patch
|
./0002-shell-add-fs.meta.edit-for-editing-a-filer-metadata-.patch
|
||||||
];
|
];
|
||||||
})
|
})
|
||||||
|
|
|
@ -52,6 +52,10 @@ in {
|
||||||
binfmt.emulatedSystems = [ "aarch64-linux" ];
|
binfmt.emulatedSystems = [ "aarch64-linux" ];
|
||||||
|
|
||||||
kernelParams = [ "amd_pstate=active" ];
|
kernelParams = [ "amd_pstate=active" ];
|
||||||
|
|
||||||
|
extraModulePackages = with config.boot.kernelPackages; [
|
||||||
|
ajantv2
|
||||||
|
];
|
||||||
} (lib.mkIf (lib.versionOlder config.boot.kernelPackages.kernel.version "6.8") {
|
} (lib.mkIf (lib.versionOlder config.boot.kernelPackages.kernel.version "6.8") {
|
||||||
kernelParams = [
|
kernelParams = [
|
||||||
# Scatter/Gather causes display flickering
|
# Scatter/Gather causes display flickering
|
||||||
|
@ -230,10 +234,11 @@ in {
|
||||||
})
|
})
|
||||||
efibootmgr
|
efibootmgr
|
||||||
iw
|
iw
|
||||||
obs-studio
|
(obs-studio.override { ajaSupport = true; })
|
||||||
vulkan-tools
|
vulkan-tools
|
||||||
depot.nix.pkgs.world-of-goo2
|
depot.nix.pkgs.world-of-goo2
|
||||||
yt-dlp
|
yt-dlp
|
||||||
|
openterface-qt
|
||||||
]);
|
]);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
17
third_party/nixpkgs/pkgs/applications/video/obs-studio/CMakeUserPresets.json
vendored
Normal file
17
third_party/nixpkgs/pkgs/applications/video/obs-studio/CMakeUserPresets.json
vendored
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
{
|
||||||
|
"version": 3,
|
||||||
|
"configurePresets": [
|
||||||
|
{
|
||||||
|
"name": "nixpkgs-linux",
|
||||||
|
"displayName": "Nixpkgs (Linux)",
|
||||||
|
"inherits": ["ubuntu"],
|
||||||
|
"binaryDir": "${sourceDir}/build"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "nixpkgs-darwin",
|
||||||
|
"displayName": "Nixpkgs (Darwin)",
|
||||||
|
"inherits": ["macos"],
|
||||||
|
"binaryDir": "${sourceDir}/build"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -2,6 +2,7 @@
|
||||||
, uthash
|
, uthash
|
||||||
, lib
|
, lib
|
||||||
, stdenv
|
, stdenv
|
||||||
|
, ninja
|
||||||
, nv-codec-headers-12
|
, nv-codec-headers-12
|
||||||
, fetchFromGitHub
|
, fetchFromGitHub
|
||||||
, fetchpatch
|
, fetchpatch
|
||||||
|
@ -51,6 +52,8 @@
|
||||||
, asio
|
, asio
|
||||||
, decklinkSupport ? false
|
, decklinkSupport ? false
|
||||||
, blackmagic-desktop-video
|
, blackmagic-desktop-video
|
||||||
|
, ajaSupport ? false
|
||||||
|
, libajantv2
|
||||||
, libdatachannel
|
, libdatachannel
|
||||||
, libvpl
|
, libvpl
|
||||||
, qrcodegencpp
|
, qrcodegencpp
|
||||||
|
@ -107,6 +110,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||||
nativeBuildInputs = [
|
nativeBuildInputs = [
|
||||||
addDriverRunpath
|
addDriverRunpath
|
||||||
cmake
|
cmake
|
||||||
|
ninja
|
||||||
pkg-config
|
pkg-config
|
||||||
wrapGAppsHook3
|
wrapGAppsHook3
|
||||||
wrapQtAppsHook
|
wrapQtAppsHook
|
||||||
|
@ -148,7 +152,8 @@ stdenv.mkDerivation (finalAttrs: {
|
||||||
++ optional alsaSupport alsa-lib
|
++ optional alsaSupport alsa-lib
|
||||||
++ optional pulseaudioSupport libpulseaudio
|
++ optional pulseaudioSupport libpulseaudio
|
||||||
++ optionals pipewireSupport [ pipewire libdrm ]
|
++ optionals pipewireSupport [ pipewire libdrm ]
|
||||||
++ optional withFdk fdk_aac;
|
++ optional withFdk fdk_aac
|
||||||
|
++ optional ajaSupport libajantv2;
|
||||||
|
|
||||||
# Copied from the obs-linuxbrowser
|
# Copied from the obs-linuxbrowser
|
||||||
postUnpack = ''
|
postUnpack = ''
|
||||||
|
@ -157,16 +162,22 @@ stdenv.mkDerivation (finalAttrs: {
|
||||||
ln -s $i cef/Release/
|
ln -s $i cef/Release/
|
||||||
ln -s $i cef/Resources/
|
ln -s $i cef/Resources/
|
||||||
done
|
done
|
||||||
ln -s ${libcef}/lib/libcef.so cef/Release/
|
ln -s ${libcef}/lib/*.so* cef/Release/
|
||||||
|
ln -s ${libcef}/libexec/cef/chrome-sandbox cef/Release/
|
||||||
ln -s ${libcef}/lib/libcef_dll_wrapper.a cef/libcef_dll_wrapper/
|
ln -s ${libcef}/lib/libcef_dll_wrapper.a cef/libcef_dll_wrapper/
|
||||||
ln -s ${libcef}/include cef/
|
ln -s ${libcef}/include cef/
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
postPatch = ''
|
||||||
|
cp ${./CMakeUserPresets.json} ./CMakeUserPresets.json
|
||||||
|
'';
|
||||||
|
|
||||||
cmakeFlags = [
|
cmakeFlags = [
|
||||||
|
"--preset" "nixpkgs-${if stdenv.hostPlatform.isDarwin then "darwin" else "linux"}"
|
||||||
"-DOBS_VERSION_OVERRIDE=${finalAttrs.version}"
|
"-DOBS_VERSION_OVERRIDE=${finalAttrs.version}"
|
||||||
"-Wno-dev" # kill dev warnings that are useless for packaging
|
"-Wno-dev" # kill dev warnings that are useless for packaging
|
||||||
# Add support for browser source
|
# Add support for browser source
|
||||||
"-DBUILD_BROWSER=ON"
|
"-DENABLE_BROWSER=ON"
|
||||||
"-DCEF_ROOT_DIR=../../cef"
|
"-DCEF_ROOT_DIR=../../cef"
|
||||||
"-DENABLE_JACK=ON"
|
"-DENABLE_JACK=ON"
|
||||||
(lib.cmakeBool "ENABLE_QSV11" stdenv.hostPlatform.isx86_64)
|
(lib.cmakeBool "ENABLE_QSV11" stdenv.hostPlatform.isx86_64)
|
||||||
|
@ -174,7 +185,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||||
(lib.cmakeBool "ENABLE_ALSA" alsaSupport)
|
(lib.cmakeBool "ENABLE_ALSA" alsaSupport)
|
||||||
(lib.cmakeBool "ENABLE_PULSEAUDIO" pulseaudioSupport)
|
(lib.cmakeBool "ENABLE_PULSEAUDIO" pulseaudioSupport)
|
||||||
(lib.cmakeBool "ENABLE_PIPEWIRE" pipewireSupport)
|
(lib.cmakeBool "ENABLE_PIPEWIRE" pipewireSupport)
|
||||||
(lib.cmakeBool "ENABLE_AJA" false) # TODO: fix linking against libajantv2
|
(lib.cmakeBool "ENABLE_AJA" ajaSupport)
|
||||||
];
|
];
|
||||||
|
|
||||||
env.NIX_CFLAGS_COMPILE = toString [
|
env.NIX_CFLAGS_COMPILE = toString [
|
||||||
|
@ -193,8 +204,13 @@ stdenv.mkDerivation (finalAttrs: {
|
||||||
blackmagic-desktop-video
|
blackmagic-desktop-video
|
||||||
];
|
];
|
||||||
in ''
|
in ''
|
||||||
# Remove libcef before patchelf, otherwise it will fail
|
# Remove cef components before patchelf, otherwise it will fail
|
||||||
rm $out/lib/obs-plugins/libcef.so
|
rm $out/lib/obs-plugins/libcef.so
|
||||||
|
rm $out/lib/obs-plugins/libEGL.so
|
||||||
|
rm $out/lib/obs-plugins/libGLESv2.so
|
||||||
|
rm $out/lib/obs-plugins/libvk_swiftshader.so
|
||||||
|
rm $out/lib/obs-plugins/libvulkan.so.1
|
||||||
|
rm $out/lib/obs-plugins/chrome-sandbox
|
||||||
|
|
||||||
qtWrapperArgs+=(
|
qtWrapperArgs+=(
|
||||||
--prefix LD_LIBRARY_PATH : "$out/lib:${lib.makeLibraryPath wrapperLibraries}"
|
--prefix LD_LIBRARY_PATH : "$out/lib:${lib.makeLibraryPath wrapperLibraries}"
|
||||||
|
@ -206,8 +222,9 @@ stdenv.mkDerivation (finalAttrs: {
|
||||||
addDriverRunpath $out/lib/lib*.so
|
addDriverRunpath $out/lib/lib*.so
|
||||||
addDriverRunpath $out/lib/obs-plugins/*.so
|
addDriverRunpath $out/lib/obs-plugins/*.so
|
||||||
|
|
||||||
# Link libcef again after patchelfing other libs
|
# Link cef components again after patchelfing other libs
|
||||||
ln -s ${libcef}/lib/* $out/lib/obs-plugins/
|
ln -s ${libcef}/lib/* $out/lib/obs-plugins/
|
||||||
|
ln -s ${libcef}/libexec/cef/* $out/lib/obs-plugins/
|
||||||
'';
|
'';
|
||||||
|
|
||||||
passthru.updateScript = nix-update-script { };
|
passthru.updateScript = nix-update-script { };
|
||||||
|
|
126
third_party/nixpkgs/pkgs/by-name/aj/aja-desktop-software/package.nix
vendored
Normal file
126
third_party/nixpkgs/pkgs/by-name/aj/aja-desktop-software/package.nix
vendored
Normal file
|
@ -0,0 +1,126 @@
|
||||||
|
{
|
||||||
|
stdenvNoCC,
|
||||||
|
lib,
|
||||||
|
fetchzip,
|
||||||
|
dpkg,
|
||||||
|
patchelf,
|
||||||
|
buildFHSEnv,
|
||||||
|
writeShellScript,
|
||||||
|
makeBinaryWrapper,
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
pname = "aja-desktop-software";
|
||||||
|
version = "17.1.3";
|
||||||
|
meta = {
|
||||||
|
description = "Graphical utilities for interacting with AJA desktop video cards";
|
||||||
|
homepage = "https://www.aja.com/products/aja-control-room";
|
||||||
|
license = lib.licenses.unfree; # https://www.aja.com/software-license-agreement
|
||||||
|
maintainers = [ lib.maintainers.lukegb ];
|
||||||
|
platforms = [ "x86_64-linux" ];
|
||||||
|
sourceProvenance = [
|
||||||
|
lib.sourceTypes.binaryNativeCode
|
||||||
|
lib.sourceTypes.binaryFirmware
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
unwrapped = stdenvNoCC.mkDerivation {
|
||||||
|
pname = "${pname}-unwrapped";
|
||||||
|
inherit version;
|
||||||
|
|
||||||
|
src = fetchzip {
|
||||||
|
url = "https://www.aja.com/assets/support/files/9895/en/AJA-Desktop-Software-Installer_Linux-Ubuntu_v${version}_Release.zip";
|
||||||
|
hash = "sha256-TxDcYIhEcpPnpoqpey5vSvUltLT/3xwBfOhAP81Q9+E=";
|
||||||
|
};
|
||||||
|
|
||||||
|
unpackCmd = "dpkg -x $curSrc/ajaretail_*.deb source";
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
dpkg
|
||||||
|
patchelf
|
||||||
|
];
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
|
||||||
|
mkdir -p $out/share
|
||||||
|
mv usr/share/applications $out/share/applications
|
||||||
|
mv usr/share/doc $out/share/doc
|
||||||
|
|
||||||
|
mv etc $out/etc
|
||||||
|
|
||||||
|
mv opt $out/opt
|
||||||
|
|
||||||
|
ln -s $out/opt/aja/bin $out/bin
|
||||||
|
|
||||||
|
# For some reason ajanmos doesn't have /opt/aja/lib in its rpath...
|
||||||
|
patchelf $out/opt/aja/bin/ajanmos --add-rpath $out/opt/aja/lib
|
||||||
|
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
|
||||||
|
dontPatchELF = true;
|
||||||
|
|
||||||
|
inherit meta;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
buildFHSEnv {
|
||||||
|
inherit pname version;
|
||||||
|
|
||||||
|
targetPkgs =
|
||||||
|
pkgs:
|
||||||
|
[ unwrapped ]
|
||||||
|
++ (with pkgs; [
|
||||||
|
ocl-icd
|
||||||
|
libGL
|
||||||
|
udev
|
||||||
|
libpulseaudio
|
||||||
|
zstd
|
||||||
|
glib
|
||||||
|
fontconfig
|
||||||
|
freetype
|
||||||
|
xorg.libxcb
|
||||||
|
xorg.libX11
|
||||||
|
xorg.xcbutilwm
|
||||||
|
xorg.xcbutilimage
|
||||||
|
xorg.xcbutilkeysyms
|
||||||
|
xorg.xcbutilrenderutil
|
||||||
|
xorg.libSM
|
||||||
|
xorg.libICE
|
||||||
|
libxkbcommon
|
||||||
|
dbus
|
||||||
|
avahi
|
||||||
|
]);
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
makeBinaryWrapper
|
||||||
|
];
|
||||||
|
|
||||||
|
unshareIpc = false;
|
||||||
|
unsharePid = false;
|
||||||
|
|
||||||
|
runScript = writeShellScript "aja" ''
|
||||||
|
exec_binary="$1"
|
||||||
|
shift
|
||||||
|
export QT_PLUGIN_PATH="${unwrapped}/opt/aja/plugins"
|
||||||
|
exec "${unwrapped}/opt/aja/bin/$exec_binary" "$@"
|
||||||
|
'';
|
||||||
|
|
||||||
|
extraInstallCommands = ''
|
||||||
|
mkdir -p $out/libexec/aja-desktop
|
||||||
|
mv $out/bin/${pname} $out/libexec/aja-desktop/${pname}
|
||||||
|
|
||||||
|
for binary in controlpanel controlroom ajanmos systemtest; do
|
||||||
|
makeWrapper "$out/libexec/aja-desktop/${pname}" "$out/bin/aja-$binary" \
|
||||||
|
--add-flags "$binary"
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
|
||||||
|
passthru = {
|
||||||
|
inherit unwrapped;
|
||||||
|
};
|
||||||
|
|
||||||
|
meta = meta // {
|
||||||
|
mainProgram = "aja-controlpanel";
|
||||||
|
};
|
||||||
|
}
|
|
@ -3,38 +3,37 @@
|
||||||
"alpha": {
|
"alpha": {
|
||||||
"experimental": {
|
"experimental": {
|
||||||
"candidateHashFilenames": [
|
"candidateHashFilenames": [
|
||||||
"factorio_linux_2.0.25.tar.xz"
|
"factorio_linux_2.0.28.tar.xz"
|
||||||
],
|
],
|
||||||
"name": "factorio_alpha_x64-2.0.25.tar.xz",
|
"name": "factorio_alpha_x64-2.0.28.tar.xz",
|
||||||
"needsAuth": true,
|
"needsAuth": true,
|
||||||
"sha256": "0a27de7e3285f60bc418c5dea93268f08079b90e5fe06fd58d2c138ad7e7a10c",
|
"sha256": "d3acf17e4ca56e3332e920a015d5ca53aea73088460c8b2f67e04b04e7b912bb",
|
||||||
"tarDirectory": "x64",
|
"tarDirectory": "x64",
|
||||||
"url": "https://factorio.com/get-download/2.0.25/alpha/linux64",
|
"url": "https://factorio.com/get-download/2.0.28/alpha/linux64",
|
||||||
"version": "2.0.25"
|
"version": "2.0.28"
|
||||||
},
|
},
|
||||||
"stable": {
|
"stable": {
|
||||||
"candidateHashFilenames": [
|
"candidateHashFilenames": [
|
||||||
"factorio_linux_2.0.23.tar.xz"
|
"factorio_linux_2.0.28.tar.xz"
|
||||||
],
|
],
|
||||||
"name": "factorio_alpha_x64-2.0.23.tar.xz",
|
"name": "factorio_alpha_x64-2.0.28.tar.xz",
|
||||||
"needsAuth": true,
|
"needsAuth": true,
|
||||||
"sha256": "3a3f27a5364d33896c8b35d352d0d2d6086b4ba98627eda71b26e57127309bfb",
|
"sha256": "d3acf17e4ca56e3332e920a015d5ca53aea73088460c8b2f67e04b04e7b912bb",
|
||||||
"tarDirectory": "x64",
|
"tarDirectory": "x64",
|
||||||
"url": "https://factorio.com/get-download/2.0.23/alpha/linux64",
|
"url": "https://factorio.com/get-download/2.0.28/alpha/linux64",
|
||||||
"version": "2.0.23"
|
"version": "2.0.28"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"demo": {
|
"demo": {
|
||||||
"experimental": {
|
"experimental": {
|
||||||
"candidateHashFilenames": [
|
"candidateHashFilenames": [
|
||||||
"factorio_demo_x64_1.1.110.tar.xz"
|
"factorio_demo_x64_2.0.27.tar.xz"
|
||||||
],
|
],
|
||||||
"name": "factorio_demo_x64-1.1.110.tar.xz",
|
"name": "factorio_demo_x64-2.0.27.tar.xz",
|
||||||
"needsAuth": false,
|
"needsAuth": false,
|
||||||
"sha256": "bddb91dcba9f300c25d590f861772eaf41f0b6ce8ae6b754de00d0e5f3eb5a35",
|
|
||||||
"tarDirectory": "x64",
|
"tarDirectory": "x64",
|
||||||
"url": "https://factorio.com/get-download/1.1.110/demo/linux64",
|
"url": "https://factorio.com/get-download/2.0.27/demo/linux64",
|
||||||
"version": "1.1.110"
|
"version": "2.0.27"
|
||||||
},
|
},
|
||||||
"stable": {
|
"stable": {
|
||||||
"candidateHashFilenames": [
|
"candidateHashFilenames": [
|
||||||
|
@ -51,51 +50,51 @@
|
||||||
"expansion": {
|
"expansion": {
|
||||||
"experimental": {
|
"experimental": {
|
||||||
"candidateHashFilenames": [
|
"candidateHashFilenames": [
|
||||||
"factorio-space-age_linux_2.0.25.tar.xz"
|
"factorio-space-age_linux_2.0.28.tar.xz"
|
||||||
],
|
],
|
||||||
"name": "factorio_expansion_x64-2.0.25.tar.xz",
|
"name": "factorio_expansion_x64-2.0.28.tar.xz",
|
||||||
"needsAuth": true,
|
"needsAuth": true,
|
||||||
"sha256": "725468f35995a6e5493d83d2596ca3f40e5f30c6ce4293c4418c568982b6a0aa",
|
"sha256": "e3eee33c439abaffa305dd5c86edea97fbaa2a2b34c368cae3595c1d5d22739e",
|
||||||
"tarDirectory": "x64",
|
"tarDirectory": "x64",
|
||||||
"url": "https://factorio.com/get-download/2.0.25/expansion/linux64",
|
"url": "https://factorio.com/get-download/2.0.28/expansion/linux64",
|
||||||
"version": "2.0.25"
|
"version": "2.0.28"
|
||||||
},
|
},
|
||||||
"stable": {
|
"stable": {
|
||||||
"candidateHashFilenames": [
|
"candidateHashFilenames": [
|
||||||
"factorio-space-age_linux_2.0.23.tar.xz"
|
"factorio-space-age_linux_2.0.28.tar.xz"
|
||||||
],
|
],
|
||||||
"name": "factorio_expansion_x64-2.0.23.tar.xz",
|
"name": "factorio_expansion_x64-2.0.28.tar.xz",
|
||||||
"needsAuth": true,
|
"needsAuth": true,
|
||||||
"sha256": "8c6bb2c3afd198b8d5e1042f2babcb2db2d55645d1e84d9cfbba77cd83ae9e6a",
|
"sha256": "e3eee33c439abaffa305dd5c86edea97fbaa2a2b34c368cae3595c1d5d22739e",
|
||||||
"tarDirectory": "x64",
|
"tarDirectory": "x64",
|
||||||
"url": "https://factorio.com/get-download/2.0.23/expansion/linux64",
|
"url": "https://factorio.com/get-download/2.0.28/expansion/linux64",
|
||||||
"version": "2.0.23"
|
"version": "2.0.28"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"headless": {
|
"headless": {
|
||||||
"experimental": {
|
"experimental": {
|
||||||
"candidateHashFilenames": [
|
"candidateHashFilenames": [
|
||||||
"factorio-headless_linux_2.0.25.tar.xz",
|
"factorio-headless_linux_2.0.28.tar.xz",
|
||||||
"factorio_headless_x64_2.0.25.tar.xz"
|
"factorio_headless_x64_2.0.28.tar.xz"
|
||||||
],
|
],
|
||||||
"name": "factorio_headless_x64-2.0.25.tar.xz",
|
"name": "factorio_headless_x64-2.0.28.tar.xz",
|
||||||
"needsAuth": false,
|
"needsAuth": false,
|
||||||
"sha256": "0d1698f1f29759ff27faa6a5d9c3804377cb1767f2692003a8e9d4c294845e5a",
|
"sha256": "ea9937b6adc7a18e17a4e1e64992ec389407497b36e68280bb14fcdd4c884dd3",
|
||||||
"tarDirectory": "x64",
|
"tarDirectory": "x64",
|
||||||
"url": "https://factorio.com/get-download/2.0.25/headless/linux64",
|
"url": "https://factorio.com/get-download/2.0.28/headless/linux64",
|
||||||
"version": "2.0.25"
|
"version": "2.0.28"
|
||||||
},
|
},
|
||||||
"stable": {
|
"stable": {
|
||||||
"candidateHashFilenames": [
|
"candidateHashFilenames": [
|
||||||
"factorio-headless_linux_2.0.23.tar.xz",
|
"factorio-headless_linux_2.0.28.tar.xz",
|
||||||
"factorio_headless_x64_2.0.23.tar.xz"
|
"factorio_headless_x64_2.0.28.tar.xz"
|
||||||
],
|
],
|
||||||
"name": "factorio_headless_x64-2.0.23.tar.xz",
|
"name": "factorio_headless_x64-2.0.28.tar.xz",
|
||||||
"needsAuth": false,
|
"needsAuth": false,
|
||||||
"sha256": "e819fc9ad6df061bf9d4bffc91988dd18d0e3982c8b1c22c0525d78bda3ef216",
|
"sha256": "ea9937b6adc7a18e17a4e1e64992ec389407497b36e68280bb14fcdd4c884dd3",
|
||||||
"tarDirectory": "x64",
|
"tarDirectory": "x64",
|
||||||
"url": "https://factorio.com/get-download/2.0.23/headless/linux64",
|
"url": "https://factorio.com/get-download/2.0.28/headless/linux64",
|
||||||
"version": "2.0.23"
|
"version": "2.0.28"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
13
third_party/nixpkgs/pkgs/by-name/li/libajantv2/device-info-list.patch
vendored
Normal file
13
third_party/nixpkgs/pkgs/by-name/li/libajantv2/device-info-list.patch
vendored
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
diff --git a/ajantv2/src/ntv2devicescanner.cpp b/ajantv2/src/ntv2devicescanner.cpp
|
||||||
|
index 448e48d372..6b46f9f69d 100644
|
||||||
|
--- a/ajantv2/src/ntv2devicescanner.cpp
|
||||||
|
+++ b/ajantv2/src/ntv2devicescanner.cpp
|
||||||
|
@@ -137,7 +137,7 @@
|
||||||
|
}
|
||||||
|
#endif // !defined(NTV2_DEPRECATE_16_3)
|
||||||
|
|
||||||
|
-NTV2DeviceInfoList GetDeviceInfoList (void)
|
||||||
|
+NTV2DeviceInfoList CNTV2DeviceScanner::GetDeviceInfoList (void)
|
||||||
|
{
|
||||||
|
AJAAutoLock tmpLock(&sDevInfoListLock);
|
||||||
|
return sDevInfoList;
|
|
@ -5,21 +5,25 @@
|
||||||
cmake,
|
cmake,
|
||||||
ninja,
|
ninja,
|
||||||
pkg-config,
|
pkg-config,
|
||||||
|
mbedtls,
|
||||||
|
udev,
|
||||||
|
linuxPackages,
|
||||||
}:
|
}:
|
||||||
|
|
||||||
# Warning: We are aware that the upstream changed and there are new releases,
|
|
||||||
# this got initally packaged for obs-studio which appears to fail to build even upstream with the new version.
|
|
||||||
# https://github.com/NixOS/nixpkgs/pull/296191 / https://github.com/obsproject/obs-studio/pull/10037
|
|
||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation rec {
|
||||||
pname = "libajantv2";
|
pname = "libajantv2";
|
||||||
version = "16.2-bugfix5";
|
version = "17.1.0";
|
||||||
|
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "aja-video";
|
owner = "aja-video";
|
||||||
repo = "ntv2";
|
repo = "libajantv2";
|
||||||
rev = "v${version}";
|
rev = "ntv2_${builtins.replaceStrings [ "." ] [ "_" ] version}";
|
||||||
sha256 = "sha256-h5PKWMwqTeI5/EaTWkjYojuvDU0FyMpzIjWB98UOJwc=";
|
hash = "sha256-n9j98r1E9E0hv5gA8jCg/eQyqGuyU9JlZYm/zlcTQOo=";
|
||||||
};
|
};
|
||||||
|
patches = [
|
||||||
|
./use-system-mbedtls.patch
|
||||||
|
./device-info-list.patch
|
||||||
|
];
|
||||||
|
|
||||||
outputs = [
|
outputs = [
|
||||||
"out"
|
"out"
|
||||||
|
@ -31,27 +35,39 @@ stdenv.mkDerivation rec {
|
||||||
ninja
|
ninja
|
||||||
pkg-config
|
pkg-config
|
||||||
];
|
];
|
||||||
|
buildInputs = [
|
||||||
|
mbedtls
|
||||||
|
udev
|
||||||
|
];
|
||||||
|
|
||||||
|
cmakeFlags = [
|
||||||
|
(lib.cmakeBool "AJANTV2_BUILD_SHARED" true)
|
||||||
|
];
|
||||||
|
|
||||||
postInstall = ''
|
postInstall = ''
|
||||||
mkdir -p "$out/lib/pkgconfig"
|
mkdir -p "$out/lib/pkgconfig"
|
||||||
cat >"$out/lib/pkgconfig/libajantv2.pc" <<EOF
|
cat >"$out/lib/pkgconfig/libajantv2.pc" <<EOF
|
||||||
prefix=$out
|
prefix=$out
|
||||||
libdir=\''${prefix}/lib
|
libdir=\''${prefix}/lib
|
||||||
includedir=\''${prefix}/include/ajalibraries
|
includedir=\''${prefix}/include/libajantv2
|
||||||
|
|
||||||
Name: libajantv2
|
Name: libajantv2
|
||||||
Description: Library for controlling AJA NTV2 video devices
|
Description: Library for controlling AJA NTV2 video devices
|
||||||
Version: ${version}
|
Version: ${version}
|
||||||
Libs: -L\''${libdir} -lajantv2
|
Libs: -L\''${libdir} -lajantv2
|
||||||
Cflags: -I\''${includedir} -I\''${includedir}/ajantv2/includes
|
Cflags: -I\''${includedir} -I\''${includedir}/ajantv2/includes -I\''${includedir}/ajantv2/src/lin
|
||||||
EOF
|
EOF
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
passthru.tests = {
|
||||||
|
inherit (linuxPackages) ajantv2;
|
||||||
|
};
|
||||||
|
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
description = "AJA NTV2 Open Source Static Libs and Headers for building applications that only wish to statically link against";
|
description = "AJA NTV2 Open Source Static Libs and Headers for building applications that only wish to statically link against";
|
||||||
homepage = "https://github.com/aja-video/ntv2";
|
homepage = "https://github.com/aja-video/libajantv2";
|
||||||
license = with licenses; [ mit ];
|
license = with licenses; [ mit ];
|
||||||
maintainers = [ ];
|
maintainers = [ lib.maintainers.lukegb ];
|
||||||
platforms = platforms.linux;
|
platforms = platforms.linux;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
86
third_party/nixpkgs/pkgs/by-name/li/libajantv2/use-system-mbedtls.patch
vendored
Normal file
86
third_party/nixpkgs/pkgs/by-name/li/libajantv2/use-system-mbedtls.patch
vendored
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
Commit ID: 1aeee534119a22e717ce3d0e9f62c8791cd825b9
|
||||||
|
Change ID: pzyrusopmyvtvnwnruvrltqtpqtzxrpo
|
||||||
|
Author: Luke Granger-Brown <git@lukegb.com> (2024-12-20 18:03:16)
|
||||||
|
Committer: Luke Granger-Brown <git@lukegb.com> (2024-12-20 18:03:25)
|
||||||
|
|
||||||
|
Use system mbedtls, rather than downloading from a random Git branch...
|
||||||
|
|
||||||
|
diff --git a/ajantv2/CMakeLists.txt b/ajantv2/CMakeLists.txt
|
||||||
|
index ffa572e9c8..74c23e8e4e 100644
|
||||||
|
--- a/ajantv2/CMakeLists.txt
|
||||||
|
+++ b/ajantv2/CMakeLists.txt
|
||||||
|
@@ -52,49 +52,13 @@
|
||||||
|
else()
|
||||||
|
message(STATUS "NTV2 SDK will load signed 3rd-party plugins")
|
||||||
|
|
||||||
|
- set(MBEDTLS_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/mbedtls-install)
|
||||||
|
- set(MBEDTLS_INCLUDE_DIR ${MBEDTLS_INSTALL_DIR}/include)
|
||||||
|
- set(MBEDTLS_LIBRARY_DIR ${MBEDTLS_INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR})
|
||||||
|
-
|
||||||
|
- if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||||
|
- set(MBEDTLS_LIBRARY ${MBEDTLS_LIBRARY_DIR}/mbedtls.lib)
|
||||||
|
- set(MBEDX509_LIBRARY ${MBEDTLS_LIBRARY_DIR}/mbedx509.lib)
|
||||||
|
- set(MBEDCRYPTO_LIBRARY ${MBEDTLS_LIBRARY_DIR}/mbedcrypto.lib)
|
||||||
|
- set(MBEDTLS_EXTRA_CONFIG_FLAGS
|
||||||
|
- "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON"
|
||||||
|
- "-DMSVC_STATIC_RUNTIME=ON"
|
||||||
|
- "-DCMAKE_MSVC_RUNTIME_LIBRARY=${CMAKE_MSVC_RUNTIME_LIBRARY}")
|
||||||
|
- elseif (CMAKE_SYSTEM_NAME MATCHES "^(Linux|Darwin)$")
|
||||||
|
- set(MBEDTLS_LIBRARY ${MBEDTLS_LIBRARY_DIR}/libmbedtls.a)
|
||||||
|
- set(MBEDX509_LIBRARY ${MBEDTLS_LIBRARY_DIR}/libmbedx509.a)
|
||||||
|
- set(MBEDCRYPTO_LIBRARY ${MBEDTLS_LIBRARY_DIR}/libmbedcrypto.a)
|
||||||
|
- set(MBEDTLS_C_FLAGS -fPIC)
|
||||||
|
- endif()
|
||||||
|
-
|
||||||
|
- # BUILD_BYPRODUCTS informing CMake where the .a files are located is required to make Ninja build work
|
||||||
|
- ExternalProject_Add(
|
||||||
|
- mbedtls
|
||||||
|
- GIT_REPOSITORY https://github.com/aja-video/mbedtls.git
|
||||||
|
- GIT_TAG fix-win-dll-cmake
|
||||||
|
- CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${MBEDTLS_INSTALL_DIR}
|
||||||
|
- -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
|
||||||
|
- -DENABLE_TESTING=OFF
|
||||||
|
- -DENABLE_PROGRAMS=OFF
|
||||||
|
- -DCMAKE_C_FLAGS=${MBEDTLS_C_FLAGS}
|
||||||
|
- -DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}
|
||||||
|
- -DUSE_STATIC_MBEDTLS_LIBRARY=ON
|
||||||
|
- -DUSE_SHARED_MBEDTLS_LIBRARY=OFF
|
||||||
|
- ${MBEDTLS_EXTRA_CONFIG_FLAGS}
|
||||||
|
- BUILD_ALWAYS TRUE
|
||||||
|
- BUILD_BYPRODUCTS ${MBEDTLS_LIBRARY} ${MBEDX509_LIBRARY} ${MBEDCRYPTO_LIBRARY}
|
||||||
|
- )
|
||||||
|
+ find_package(PkgConfig REQUIRED)
|
||||||
|
+ pkg_check_modules(MBEDTLS REQUIRED mbedtls mbedcrypto mbedx509)
|
||||||
|
|
||||||
|
list(APPEND TARGET_INCLUDE_DIRS
|
||||||
|
${MBEDTLS_INCLUDE_DIR})
|
||||||
|
list(APPEND MBEDTLS_LINK_LIBS
|
||||||
|
- ${MBEDTLS_LIBRARY}
|
||||||
|
- ${MBEDCRYPTO_LIBRARY}
|
||||||
|
- ${MBEDX509_LIBRARY})
|
||||||
|
+ ${MBEDTLS_LIBRARIES})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
@@ -668,10 +632,6 @@
|
||||||
|
aja_ntv2_log_build_info()
|
||||||
|
|
||||||
|
add_library(${PROJECT_NAME} SHARED ${TARGET_SOURCES})
|
||||||
|
-
|
||||||
|
- if (NOT AJANTV2_DISABLE_PLUGIN_LOAD)
|
||||||
|
- add_dependencies(${PROJECT_NAME} mbedtls)
|
||||||
|
- endif()
|
||||||
|
|
||||||
|
target_compile_definitions(${PROJECT_NAME} PUBLIC
|
||||||
|
${TARGET_COMPILE_DEFS_DYNAMIC}
|
||||||
|
@@ -687,10 +647,6 @@
|
||||||
|
|
||||||
|
add_library(${PROJECT_NAME} STATIC ${TARGET_SOURCES})
|
||||||
|
|
||||||
|
- if (NOT AJANTV2_DISABLE_PLUGIN_LOAD)
|
||||||
|
- add_dependencies(${PROJECT_NAME} mbedtls)
|
||||||
|
- endif()
|
||||||
|
-
|
||||||
|
target_compile_definitions(${PROJECT_NAME} PUBLIC
|
||||||
|
${TARGET_COMPILE_DEFS_STATIC}
|
||||||
|
${AJANTV2_TARGET_COMPILE_DEFS})
|
68
third_party/nixpkgs/pkgs/by-name/op/openterface-qt/package.nix
vendored
Normal file
68
third_party/nixpkgs/pkgs/by-name/op/openterface-qt/package.nix
vendored
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
stdenv,
|
||||||
|
makeDesktopItem,
|
||||||
|
copyDesktopItems,
|
||||||
|
fetchFromGitHub,
|
||||||
|
qt6,
|
||||||
|
libusb1,
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
version = "0.0.5";
|
||||||
|
description = "Openterface mini-KVM host application for linux";
|
||||||
|
in
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
pname = "openterface-qt";
|
||||||
|
inherit version;
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "TechxArtisanStudio";
|
||||||
|
repo = "Openterface_QT";
|
||||||
|
rev = "v${version}";
|
||||||
|
hash = "sha256-pe7idedtlxGGlNUvXQjIF57m2wW+WlWVM0BYOR+CxBU=";
|
||||||
|
};
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
copyDesktopItems
|
||||||
|
qt6.wrapQtAppsHook
|
||||||
|
];
|
||||||
|
buildInputs = [
|
||||||
|
libusb1
|
||||||
|
qt6.qtbase
|
||||||
|
qt6.qtmultimedia
|
||||||
|
qt6.qtserialport
|
||||||
|
qt6.qtsvg
|
||||||
|
qt6.qmake
|
||||||
|
];
|
||||||
|
|
||||||
|
enableParallelBuilding = true;
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
mkdir -p $out/bin
|
||||||
|
cp ./openterfaceQT $out/bin/
|
||||||
|
mkdir -p $out/share/pixmaps
|
||||||
|
cp images/icon_256.png $out/share/pixmaps/openterfaceQT.png
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
|
||||||
|
desktopItems = [
|
||||||
|
(makeDesktopItem {
|
||||||
|
name = "openterfaceQT";
|
||||||
|
exec = "openterfaceQT";
|
||||||
|
icon = "openterfaceQT";
|
||||||
|
comment = description;
|
||||||
|
desktopName = "Openterface QT";
|
||||||
|
categories = [ "Utility" ];
|
||||||
|
})
|
||||||
|
];
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
inherit description;
|
||||||
|
homepage = "https://github.com/TechxArtisanStudio/Openterface_QT";
|
||||||
|
license = lib.licenses.agpl3Only;
|
||||||
|
mainProgram = "openterfaceQT";
|
||||||
|
maintainers = with lib.maintainers; [ samw ];
|
||||||
|
platforms = lib.platforms.linux;
|
||||||
|
};
|
||||||
|
}
|
|
@ -93,15 +93,20 @@ stdenv.mkDerivation rec {
|
||||||
dontPatchELF = true;
|
dontPatchELF = true;
|
||||||
|
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
mkdir -p $out/lib/ $out/share/cef/
|
mkdir -p $out/lib/ $out/share/cef/ $out/libexec/cef/
|
||||||
cp libcef_dll_wrapper/libcef_dll_wrapper.a $out/lib/
|
cp libcef_dll_wrapper/libcef_dll_wrapper.a $out/lib/
|
||||||
cp ../Release/libcef.so $out/lib/
|
cp ../Release/libcef.so $out/lib/
|
||||||
cp ../Release/libEGL.so $out/lib/
|
cp ../Release/libEGL.so $out/lib/
|
||||||
cp ../Release/libGLESv2.so $out/lib/
|
cp ../Release/libGLESv2.so $out/lib/
|
||||||
|
cp ../Release/libvk_swiftshader.so $out/lib/
|
||||||
|
cp ../Release/libvulkan.so.1 $out/lib/
|
||||||
|
cp ../Release/chrome-sandbox $out/libexec/cef/
|
||||||
patchelf --set-rpath "${rpath}" $out/lib/libcef.so
|
patchelf --set-rpath "${rpath}" $out/lib/libcef.so
|
||||||
patchelf --set-rpath "${gl_rpath}" $out/lib/libEGL.so
|
patchelf --set-rpath "${gl_rpath}" $out/lib/libEGL.so
|
||||||
patchelf --set-rpath "${gl_rpath}" $out/lib/libGLESv2.so
|
patchelf --set-rpath "${gl_rpath}" $out/lib/libGLESv2.so
|
||||||
cp ../Release/*.bin $out/share/cef/
|
patchelf --set-rpath "${gl_rpath}" $out/lib/libvk_swiftshader.so
|
||||||
|
patchelf --set-rpath "${gl_rpath}" $out/lib/libvulkan.so.1
|
||||||
|
cp ../Release/*.bin ../Release/*.json $out/share/cef/
|
||||||
cp -r ../Resources/* $out/share/cef/
|
cp -r ../Resources/* $out/share/cef/
|
||||||
cp -r ../include $out/
|
cp -r ../include $out/
|
||||||
'';
|
'';
|
||||||
|
|
41
third_party/nixpkgs/pkgs/os-specific/linux/ajantv2/default.nix
vendored
Normal file
41
third_party/nixpkgs/pkgs/os-specific/linux/ajantv2/default.nix
vendored
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
stdenv,
|
||||||
|
fetchFromGitHub,
|
||||||
|
kernel,
|
||||||
|
libajantv2,
|
||||||
|
}:
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
name = "ajantv2-module-${libajantv2.version}-${kernel.version}";
|
||||||
|
|
||||||
|
inherit (libajantv2) src;
|
||||||
|
sourceRoot = "source/driver/linux";
|
||||||
|
|
||||||
|
hardeningDisable = [ "pic" ];
|
||||||
|
|
||||||
|
nativeBuildInputs = kernel.moduleBuildDependencies;
|
||||||
|
|
||||||
|
preBuild = ''
|
||||||
|
chmod -R +w ../../
|
||||||
|
'';
|
||||||
|
|
||||||
|
enableParallelBuilding = true;
|
||||||
|
|
||||||
|
buildFlags = [
|
||||||
|
"KDIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
|
||||||
|
];
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
install -D ajantv2.ko $out/lib/modules/${kernel.modDirVersion}/misc/ajantv2.ko
|
||||||
|
install -D ajardma.ko $out/lib/modules/${kernel.modDirVersion}/misc/ajardma.ko
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
inherit (libajantv2.meta) license homepage maintainers;
|
||||||
|
platforms = [
|
||||||
|
"x86_64-linux"
|
||||||
|
"aarch64-linux"
|
||||||
|
];
|
||||||
|
description = "AJA video driver";
|
||||||
|
};
|
||||||
|
}
|
|
@ -321,6 +321,8 @@ in {
|
||||||
|
|
||||||
acpi_call = callPackage ../os-specific/linux/acpi-call {};
|
acpi_call = callPackage ../os-specific/linux/acpi-call {};
|
||||||
|
|
||||||
|
ajantv2 = callPackage ../os-specific/linux/ajantv2 { };
|
||||||
|
|
||||||
akvcam = callPackage ../os-specific/linux/akvcam { };
|
akvcam = callPackage ../os-specific/linux/akvcam { };
|
||||||
|
|
||||||
amneziawg = callPackage ../os-specific/linux/amneziawg { };
|
amneziawg = callPackage ../os-specific/linux/amneziawg { };
|
||||||
|
|
Loading…
Reference in a new issue