descent3: init at 1.5.0-beta-unstable-2024-10-29 (#355710)

This commit is contained in:
Arne Keller
2024-12-16 14:12:57 +01:00
committed by GitHub
2 changed files with 212 additions and 0 deletions
@@ -0,0 +1,152 @@
{
SDL2,
cmake,
fetchFromGitHub,
glm,
lib,
runCommand,
stdenv,
unstableGitUpdater,
writeShellScript,
zlib,
}:
stdenv.mkDerivation rec {
pname = "descent3-unwrapped";
# Im using an unstable version here because we need to use -additionaldir in
# the wrapped version of Descent 3. Once theres a stable version of Descent
# 3 that supports the -additionaldir command-line option, we can stop using
# an unstable version of Descent 3.
version = "1.5.0-beta-unstable-2024-10-29";
src = fetchFromGitHub {
owner = "DescentDevelopers";
repo = "Descent3";
rev = "d51ce964c7a925333ea64f00cf8d9ae15ee63a6b";
fetchSubmodules = true;
leaveDotGit = true;
# Descent 3 is supposed to display its Git commit hash in the bottom right
# corner of the main menu. That feature only works if either the .git
# directory or a git-hash.txt file exists at build time. We dont want .git
# to exist at build time (see #8567), so we create a git-hash.txt file and
# then delete the .git directory.
#
# Technically, we could simplify the code by reading the value of src.rev.
# src.rev contains a Git commit hash at the moment, but it wont contain a
# Git commit hash in the future when we switch to a stable version of
# Descent 3.
#
# Upstream expects git-hash.txt to contain a short commit hash, but Ive
# decided to use a full commit hash. Full commit hashes are more
# reproducible. The short hash “1234” might correspond to one commit today,
# but correspond to two commits tomorrow. Full commit hashes dont have
# that problem.
#
# Also, upstream expects git-hash.txt to contain no newlines. If
# git-hash.txt contains a newline, then Descent 3 will fail to build.
postFetch = ''
cd "$out"
git rev-parse --verify HEAD | tr --delete '\n' > git-hash.txt
rm -r .git
'';
hash = "sha256-C6r06cntQ14jPFO9EUzLisZjsl22cIaJb8I7xFzXrNc=";
};
hardeningDisable = [ "format" ];
nativeBuildInputs = [ cmake ];
buildInputs = [
SDL2
glm
zlib
];
cmakeFlags = [ "-DFORCE_PORTABLE_INSTALL=OFF" ];
# This is a workaround for a problem that will eventually get fixed upstream.
postInstall = ''
cd "$out"
mv lib/* share/
rmdir lib
'';
passthru = {
# The idea here is to make sure that we dont forget to update meta.license
# when reviewing a pull request from @r-ryantm.
tests.licenseInfoIsUpToDate = runCommand "${pname}-license-info-is-up-to-date" { } ''
function on_success {
echo Test succeeded. > "$out"
}
function on_failure {
echo \
It looks like at least one of Descent 3s licensing-related files \
changed. Before you continue to update this package, you should \
check to see if meta.license needs to be updated. Once youve done \
that, you can update the hashes in the \
passthru.tests.licenseInfoIsUpToDate script and then try running the \
package tests again. >&2
return 1
}
cd ${lib.strings.escapeShellArg src}
sha256sum --check << EOF && on_success || on_failure
8b1ba204bb69a0ade2bfcf65ef294a920f6bb361b317dba43c7ef29d96332b9b LICENSE
55d65dbf5d785111cf7029941cb7f72dbef084509e6126bcc58b6bb20203f8c6 THIRD_PARTY.md
EOF
'';
updateScript = unstableGitUpdater {
shallowClone = false;
# unstableGitUpdater assumes that the version number should be 0 if there
# isnt any tags in the repos default branch. For most packages, that is
# the correct decision, but for Descent 3 its not. Descent 3s source
# code lived in private repos until 2024. In 2024, a new public repo was
# created [1], but the old commit history wasnt imported into the new
# repo. Version 1.5.0-beta from 2005 [2] was the last release that was
# created from one of the private repos.*
#
# *Technically, there was one release that came after the 2005 one. There
# was a Linux version and a macOS version of Descent 3 that were released
# on Steam in 2020 [3][4][5]. Those versions dont count because they
# havent been fully merged into the public repo yet [6].
#
# [1]: <https://github.com/DescentDevelopers/Descent3/commit/637df31ca1e47371fb8ca822f928734c13afd8cf>
# [2]: <http://descent3.com/downloads.php>
# [3]: <https://www.patreon.com/posts/project-descent-33611585>
# [4]: <https://steamdb.info/depot/273592>
# [5]: <https://steamdb.info/depot/273593>
# [6]: <https://github.com/DescentDevelopers/Descent3/issues/240>
tagConverter = writeShellScript "${pname}-tag-converter.sh" ''
read -r input_tag
if [ "$input_tag" = 0 ]
then
printf '%s' 1.5.0-beta
else
printf '%s' "$input_tag"
fi
'';
};
};
meta = {
description = "Game engine for a 6DOF first-person shooter";
homepage = "https://github.com/DescentDevelopers/Descent3";
license = with lib.licenses; [
# See LICENSE and header thats at the top of many source files.
gpl3Plus
# See THIRD_PARTY.md.
isc
mit
];
mainProgram = "Descent3";
maintainers = [ lib.maintainers.jayman2000 ];
platforms = lib.platforms.all;
badPlatforms = [
# Descent 3 stores modules in HOG2 archives. It extracts those modules
# and then tries to dlopen() them at runtime.
lib.systems.inspect.platformPatterns.isStatic
# When you build Descent 3 on Darwin, it produces a different directory
# structure (no bin/ directory) [1]. Im sure that this derivation could be
# updated to account for that different directory structure, but I dont
# have any Darwin systems to test things on at the moment.
#
# [1]: <https://logs.ofborg.org/?key=nixos/nixpkgs.355710&attempt_id=747dd630-5068-4ba9-9c50-6f150634ef1a>
] ++ lib.platforms.darwin;
};
}
+60
View File
@@ -0,0 +1,60 @@
{
descent3-unwrapped,
lib,
makeBinaryWrapper,
runCommand,
}:
runCommand "descent3-${descent3-unwrapped.version}"
{
pname = "descent3";
inherit (descent3-unwrapped) version;
nativeBuildInputs = [ makeBinaryWrapper ];
passthru.unwrapped = descent3-unwrapped;
meta = descent3-unwrapped.meta // {
# The code that produces the wrapper is in the Nixpkgs repo, and the
# Nixpkgs repo is MIT Licensed.
license = [ lib.licenses.mit ];
longDescription = ''
Playing Descent 3 using the Nix package manager is a little bit awkward
at the moment. This wrapper makes it slightly less awkward. Heres how
you use this wrapper:
1. Install the `descent3` package, or start an ephemeral shell with the
`descent3` package.
2. Find the documentation folder for `descent3-unwrapped` by running this
command:
```bash
nix-instantiate --eval --expr '(import <nixpkgs> { }).descent3-unwrapped + "/share/doc/Descent3"'
```
3. Open `<descent3-unwrapped-doc-folder>/USAGE.md`.
4. Follow steps 16 of Descent 3s usage instructions.
5. Change directory into the `D3-open-source` folder:
```bash
cd <path-to-D3-open-source>
```
6. Start Descent 3 by running this command:
```bash
Descent3
```
'';
};
}
''
mkdir --parents "$out/bin"
descent3_unwrapped=${lib.strings.escapeShellArg descent3-unwrapped}
makeBinaryWrapper \
"$descent3_unwrapped/bin/Descent3" \
"$out/bin/Descent3" \
--append-flags -additionaldir \
--append-flags "$descent3_unwrapped/share"
''