mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-22 15:03:28 +00:00
148 lines
3.9 KiB
Nix
148 lines
3.9 KiB
Nix
{
|
|
lib,
|
|
buildDubPackage,
|
|
fetchFromGitHub,
|
|
writeShellScriptBin,
|
|
|
|
cmake,
|
|
gettext,
|
|
copyDesktopItems,
|
|
makeDesktopItem,
|
|
makeWrapper,
|
|
|
|
dbus,
|
|
freetype,
|
|
SDL2,
|
|
zenity,
|
|
luajit_2_1,
|
|
libGL,
|
|
|
|
builderArgs,
|
|
}:
|
|
|
|
let
|
|
cimgui-src = fetchFromGitHub {
|
|
owner = "Inochi2D";
|
|
repo = "cimgui";
|
|
rev = "49bb5ce65f7d5eeab7861d8ffd5aa2a58ca8f08c";
|
|
hash = "sha256-XcnZbIjwq7vmYBnMAs+cEpJL8HB8wrL098FXGxC+diA=";
|
|
fetchSubmodules = true;
|
|
};
|
|
|
|
inherit (builderArgs)
|
|
pname
|
|
appname
|
|
version
|
|
dubLock
|
|
meta
|
|
;
|
|
in
|
|
buildDubPackage (
|
|
builderArgs
|
|
// {
|
|
nativeBuildInputs = [
|
|
cmake # used for building `i2d-imgui`
|
|
gettext # used when generating translations
|
|
copyDesktopItems
|
|
makeWrapper
|
|
|
|
# A fake git implementation to be used by the `gitver` package
|
|
# It is a dependency of the main packages and the `inochi2d` dub dependency
|
|
# A side effect of this script is that `inochi2d` will have the same version listed as the main package
|
|
(writeShellScriptBin "git" "echo v${version}")
|
|
];
|
|
|
|
buildInputs = [
|
|
dbus
|
|
freetype
|
|
SDL2
|
|
];
|
|
|
|
dontUseCmakeConfigure = true;
|
|
|
|
# these deps are not listed inside `dub.sdl`, so they didn't get auto-generated
|
|
# these are used for generating version info when building
|
|
dubLock = lib.recursiveUpdate (lib.importJSON dubLock) {
|
|
dependencies = {
|
|
gitver = {
|
|
version = "1.6.1";
|
|
sha256 = "sha256-NCyFik4FbD7yMLd5zwf/w4cHwhzLhIRSVw1bWo/CZB4=";
|
|
};
|
|
semver = {
|
|
version = "0.3.2";
|
|
sha256 = "sha256-l6c9hniUd5xNsJepq8x30e0JTjmXs4pYUmv4ws+Nrn4=";
|
|
};
|
|
};
|
|
};
|
|
|
|
postConfigure = ''
|
|
cimgui_dir=("$DUB_HOME"/packages/i2d-imgui/*/i2d-imgui)
|
|
|
|
# `i2d-imgui` isn't able to find SDL2 by default due to it being written in lower case
|
|
# this is only an issue when compiling statically (session)
|
|
substituteInPlace "$cimgui_dir/dub.json" \
|
|
--replace-fail '"sdl2"' '"SDL2"'
|
|
|
|
# The `i2d-cimgui` dub dependency fetched inside the auto-generated `*-deps.nix` file
|
|
# which doesn't know that it's actually a git repo, so it doesn't fetch its submodules.
|
|
# Upstream uses a cmake script to fetch the `cimgui` submodule anyway, which we can't do
|
|
# We get around this by manually pre-fetching the submodule and copying it into the right place
|
|
cp -r --no-preserve=all ${cimgui-src}/* "$cimgui_dir/deps/cimgui"
|
|
|
|
# Disable the original cmake fetcher script
|
|
substituteInPlace "$cimgui_dir/deps/CMakeLists.txt" \
|
|
--replace-fail "PullSubmodules(" "# PullSubmodules(" \
|
|
--replace-fail "\''${cimgui_SUBMOD_DIR}" "cimgui"
|
|
'';
|
|
|
|
preBuild = ''
|
|
# Generate translations (if possible)
|
|
. gentl.sh
|
|
|
|
# Use the fake git to generate version info
|
|
dub build --skip-registry=all --compiler=ldc2 --build=release --config=update-version
|
|
'';
|
|
|
|
# Use the "barebones" configuration so that we don't include the mascot and icon files in out build
|
|
dubFlags = [ "--config=barebones" ];
|
|
|
|
installPhase = ''
|
|
runHook preInstall
|
|
|
|
mkdir -p $out/share/${pname}
|
|
cp -r out/* $out/share/${pname}
|
|
|
|
runHook postInstall
|
|
'';
|
|
|
|
desktopItems = [
|
|
(makeDesktopItem {
|
|
name = pname;
|
|
desktopName = appname;
|
|
exec = pname;
|
|
comment = meta.description;
|
|
categories = [ "Utility" ];
|
|
})
|
|
];
|
|
|
|
postFixup = ''
|
|
# Add support for `open file` dialog
|
|
makeWrapper $out/share/${pname}/${pname} $out/bin/${pname} \
|
|
--prefix PATH : ${lib.makeBinPath [ zenity ]} \
|
|
--prefix LD_LIBRARY_PATH : ${
|
|
lib.makeLibraryPath [
|
|
libGL
|
|
luajit_2_1
|
|
]
|
|
}
|
|
'';
|
|
|
|
meta = {
|
|
homepage = "https://inochi2d.com/";
|
|
license = lib.licenses.bsd2;
|
|
mainProgram = pname;
|
|
maintainers = with lib.maintainers; [ tomasajt ];
|
|
} // meta;
|
|
}
|
|
)
|