From d5f70b8302540ff359d957d31f5042ec0ef3c0d7 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Thu, 9 Jul 2026 21:04:40 +0200 Subject: [PATCH] package sourcemod-addon-curl --- flake.nix | 1 + nix/sourcemod/plugins/curl.nix | 89 +++++++++++++++++++++++++++++++ nix/sourcemod/plugins/overlay.nix | 1 + nix/sourcemod/srctvplus.nix | 39 -------------- nix/srcds/curl-compat.nix | 6 +++ nix/srcds/default.nix | 19 +++---- 6 files changed, 107 insertions(+), 48 deletions(-) create mode 100644 nix/sourcemod/plugins/curl.nix delete mode 100644 nix/sourcemod/srctvplus.nix create mode 100644 nix/srcds/curl-compat.nix diff --git a/flake.nix b/flake.nix index 387ed14..9bbf200 100644 --- a/flake.nix +++ b/flake.nix @@ -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" diff --git a/nix/sourcemod/plugins/curl.nix b/nix/sourcemod/plugins/curl.nix new file mode 100644 index 0000000..7c066cc --- /dev/null +++ b/nix/sourcemod/plugins/curl.nix @@ -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" + ]; + }; + }; + }) diff --git a/nix/sourcemod/plugins/overlay.nix b/nix/sourcemod/plugins/overlay.nix index 7bbfe39..bb51207 100644 --- a/nix/sourcemod/plugins/overlay.nix +++ b/nix/sourcemod/plugins/overlay.nix @@ -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 {}; diff --git a/nix/sourcemod/srctvplus.nix b/nix/sourcemod/srctvplus.nix deleted file mode 100644 index ec4277a..0000000 --- a/nix/sourcemod/srctvplus.nix +++ /dev/null @@ -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" - ]; - }; - }; - }) diff --git a/nix/srcds/curl-compat.nix b/nix/srcds/curl-compat.nix new file mode 100644 index 0000000..dc1563b --- /dev/null +++ b/nix/srcds/curl-compat.nix @@ -0,0 +1,6 @@ +{curlWithGnuTls}: +curlWithGnuTls.overrideAttrs ( + final: prev: { + patches = (prev.patches or []) ++ [./curl-symbol-downgrade.patch]; + } +) diff --git a/nix/srcds/default.nix b/nix/srcds/default.nix index f9d735c..f892d05 100644 --- a/nix/srcds/default.nix +++ b/nix/srcds/default.nix @@ -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;