package sourcemod-addon-curl

This commit is contained in:
Robin Appelman 2026-07-09 21:04:40 +02:00
commit d5f70b8302
6 changed files with 107 additions and 48 deletions

View file

@ -56,6 +56,7 @@
"sourcemod-include-library"
"sourcemod-include-steamworks"
"srcds-tf2"
"sourcemod-addon-curl"
"sourcemod-plugin-steamworks"
"sourcemod-plugin-soap-tf2dm"
"sourcemod-plugin-progressive-ruleset-timer"

View file

@ -0,0 +1,89 @@
{
fetchFromGitHub,
stdenv,
nix-update-script,
sourcemod,
metamod-source,
curl,
gsasl,
curl-3-compat,
sourcepawn,
sourcemod-includes,
sourcemod-include-curl,
system,
lib,
}: let
inherit (lib) optionalString;
in
stdenv.mkDerivation (finalAttrs: {
pname = "sourcemod-addon-curl";
version = "2.0.1-beta1";
src = fetchFromGitHub {
owner = "sapphonie";
repo = "SM-neocurl-ext";
rev = "v${finalAttrs.version}";
hash = "sha256-R4DnH8oJ1dsh/NfCNRHx8/yTSAo7liWrbQALk4u2esI=";
};
postPatch = ''
substituteInPlace extension/Makefile \
--replace-fail "../build/mm-1.11" ${metamod-source.src} \
--replace-fail "../build/sm-1.11" ${sourcemod.src} \
--replace-fail " -m32" "" \
--replace-fail "-lbrotlidec-static -lbrotlienc-static -lbrotlicommon-static" "-lbrotlidec -lbrotlienc -lbrotlicommon"
rm -r extension/lib extension/curl
substituteInPlace extension/curlmanager.cpp \
--replace-fail "CURLSSLBACKEND_OPENSSL" "CURLSSLBACKEND_GNUTLS"
'';
buildInputs = [gsasl curl-3-compat.dev];
nativeBuildInputs = [
(
sourcepawn.buildEnv [sourcemod-includes sourcemod-include-curl]
)
];
buildPhase = ''
runHook preBuild
mkdir -p build/extensions build/scripting build/plugins
pushd extension
make
mv Release/curl.ext.so ../build/extensions/ -v
popd
cp -Rfv pawn/* build/
spcomp build/scripting/curl_self_test.sp
mv curl_self_test.smx build/plugins
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p $out/addons/sourcemod
mv build/* $out/addons/sourcemod/
runHook postInstall
'';
postInstall = optionalString (system == "x86_64-linux") ''
mkdir -p $out/addons/sourcemod/extensions/x64
mv $out/addons/sourcemod/extensions/curl.ext.so $out/addons/sourcemod/extensions/x64
'';
passthru = {
updateScript = nix-update-script {
extraArgs = [
"--flake"
"--version=unstable"
];
};
};
})

View file

@ -1,4 +1,5 @@
final: prev: {
sourcemod-addon-curl = final.callPackage ./curl.nix {};
sourcemod-plugin-steamworks = final.callPackage ./steamworks.nix {};
sourcemod-plugin-soap-tf2dm = final.callPackage ./soap-tf2dm.nix {};
sourcemod-plugin-progressive-ruleset-timer = final.callPackage ./progressive-ruleset-timer.nix {};

View file

@ -1,39 +0,0 @@
{
fetchurl,
stdenvNoCC,
nix-update-script,
linkFarm,
}: let
fetchFile = version: file: hash: {
name = file;
path = fetchurl {
url = "https://github.com/dalegaard/srctvplus/releases/download/v${version}/${file}";
sha256 = hash;
};
};
in
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "srctvplus";
version = "2.0";
src = linkFarm "srctvplus-src" [
(fetchFile finalAttrs.version "srctvplus.so" "sha256-KoFLjTQXY1nDzdG3x7eU/nTcmEqSH7tdqxFNyI2WCRg=")
(fetchFile finalAttrs.version "srctvplus.vdf" "sha256-iGKHyREgDB8vDv/CMv0BdAzAkTzZJyP98nzzxShUvro=")
];
installPhase = ''
runHook preInstall
mkdir -p $out/addons
cp srctvplus.so srctvplus.vdf $out/addons/
runHook postInstall
'';
passthru = {
updateScript = nix-update-script {
extraArgs = [
"--flake"
];
};
};
})

View file

@ -0,0 +1,6 @@
{curlWithGnuTls}:
curlWithGnuTls.overrideAttrs (
final: prev: {
patches = (prev.patches or []) ++ [./curl-symbol-downgrade.patch];
}
)

View file

@ -7,6 +7,7 @@
symlinkJoin,
autoPatchelfHook,
libgcc,
curl-3-compat,
curlWithGnuTls,
steamworks-sdk-redist,
system,
@ -61,14 +62,6 @@
times = map (depot: depot.date) depotInputs;
time = last (naturalSort times);
curlCompat = curlWithGnuTls.overrideAttrs (
final: prev: {
patches = (prev.patches or []) ++ [./curl-symbol-downgrade.patch];
}
);
addons = callPackage ./addons.nix {inherit sdk gamedir;};
mainProgram =
if system == "x86_64-linux"
then "srcds_run_64"
@ -83,7 +76,10 @@
dontConfigure = true;
nativeBuildInputs = [autoPatchelfHook];
buildInputs = [libgcc curlCompat];
buildInputs = [
libgcc
curl-3-compat
];
installPhase = ''
runHook preInstall
@ -109,7 +105,12 @@
customize = {
cfg ? {},
sourcemod ? false,
plugins ? [],
}: let
addons = callPackage ./addons.nix {
inherit sdk gamedir;
extraPackages = plugins;
};
configFile = callPackage ./cfg.nix {
name = "server.cfg";
inherit cfg gamedir;