From 99e2f6cb8eb52bc37771f1354e74e419efc7827d Mon Sep 17 00:00:00 2001 From: Evan Stoll Date: Mon, 19 Oct 2020 20:29:30 -0400 Subject: [PATCH] imgbrd-grabber: build from source --- .../graphics/imgbrd-grabber/default.nix | 91 +++++++++++++------ pkgs/top-level/all-packages.nix | 4 +- 2 files changed, 67 insertions(+), 28 deletions(-) diff --git a/pkgs/applications/graphics/imgbrd-grabber/default.nix b/pkgs/applications/graphics/imgbrd-grabber/default.nix index 994f2a10e6c..259f4056707 100644 --- a/pkgs/applications/graphics/imgbrd-grabber/default.nix +++ b/pkgs/applications/graphics/imgbrd-grabber/default.nix @@ -1,50 +1,87 @@ { stdenv , cmake -, fetchzip -, openssl -, autoPatchelfHook -, makeWrapper -, qtmultimedia +, fetchFromGitHub , wrapQtAppsHook +, qtmultimedia +, qttools +, qtscript +, qtdeclarative +, qtbase +, autogen +, automake +, makeWrapper +, catch2 +, nodejs +, libpulseaudio +, openssl +, rsync +, typescript }: stdenv.mkDerivation rec { name = "imgbrd-grabber"; + version = "7.3.2"; + src = fetchFromGitHub { + owner = "Bionus"; + repo = "imgbrd-grabber"; + rev = "v${version}"; + sha256 = "053rwvcr88fcba0447a6r115cgnqsm9rl066z8d5jacqnhdij58k"; + fetchSubmodules = true; + }; buildInputs = [ - stdenv.cc.cc.lib openssl - qtmultimedia + makeWrapper + libpulseaudio + typescript ]; nativeBuildInputs = [ - autoPatchelfHook - makeWrapper + qtmultimedia + qtbase + qtdeclarative + qttools + nodejs + cmake wrapQtAppsHook ]; - installPhase = '' - mkdir -p $out/share/grabber - cp -R * $out/share/grabber + extraOutputsToLink = [ "doc" ]; - mkdir -p $out/bin - ln -s $out/share/grabber/Grabber /$out/bin/grabber + postPatch = '' + # the package.sh script provides some install helpers + # using this might make it easier to maintain/less likely for the + # install phase to fail across version bumps + patchShebangs ./scripts/package.sh - mkdir -p $out/share/applications - mv $out/share/grabber/Grabber.desktop $out/share/applications/ + # ensure the script uses the rsync package from nixpkgs + substituteInPlace ../scripts/package.sh --replace "rsync" "${rsync}/bin/rsync" + + # the npm build step only runs typescript + # run this step directly so it doesn't try and fail to download the unnecessary node_modules, etc. + substituteInPlace ./sites/CMakeLists.txt --replace "npm install" "npm run build" + + # remove the vendored catch2 + rm -rf tests/src/vendor/catch + + # link the catch2 sources from nixpkgs + ln -sf ${catch2.src} tests/src/vendor/catch ''; - src = fetchzip { - url = "https://github.com/Bionus/imgbrd-grabber/releases/download/v${version}/Grabber_v${version}.tar.gz"; - sha256 = "05isnqhvcp8ycaj8hx6wn0c3la729mb36dzpmlpxfb1p5dj8p49k"; - }; + postInstall = '' + # move the binaries to the share/Grabber folder so + # some relative links can be resolved (e.g. settings.ini) + mv $out/bin/* $out/share/Grabber/ + + cd ../.. + # run the package.sh with $out/share/Grabber as the $APP_DIR + sh ./scripts/package.sh $out/share/Grabber - meta = with stdenv.lib; { - homepage = "https://github.com/Bionus/imgbrd-grabber"; - description = "Very customizable imageboard/booru downloader with powerful filenaming features."; - license = licenses.asl20; - platforms = [ "x86_64-linux" ]; - maintainers = with maintainers; [ evanjs ]; - }; + # add symlinks for the binaries to $out/bin + ln -s $out/share/Grabber/Grabber $out/bin/Grabber + ln -s $out/share/Grabber/Grabber-cli $out/bin/Grabber-cli + ''; + + sourceRoot = "source/src"; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 166cf8e079d..fbac860828b 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -21429,7 +21429,9 @@ in img2pdf = with python3Packages; toPythonApplication img2pdf; - imgbrd-grabber = qt5.callPackage ../applications/graphics/imgbrd-grabber { }; + imgbrd-grabber = qt5.callPackage ../applications/graphics/imgbrd-grabber/default.nix { + typescript = nodePackages.typescript; + }; imgcat = callPackage ../applications/graphics/imgcat { };