948d828955
Since commit fb777be7d2
, linking programs
in /tmp will no longer work, since with this commit (hardcoded) /tmp
will no longer be treated a valid temporary directory by the purity
checking logic.
Essentially what that logic does is checking whether the link target is
either relative, in some temporary directory or in the Nix store and if
that's not the case, an error is thrown like in this case:
gcc -c /tmp/build.24.tmp.c -o /tmp/build.24.tmp.c.o
gcc /tmp/build.24.tmp.c.o -o /tmp/build.24.tmp.out
impure path `/tmp/build.24.tmp.out' used in link
collect2: error: ld returned 1 exit status
Note here, that $TMP and $TMPDIR point to /build while the output here
still refers to /tmp. This is because the custom build system of uqm
simply hardcodes /tmp and doesn't honor any of these variables.
To fix this, all we need to do is the latter and we're now using $TMPDIR
instead of /tmp for these compile-tests during configure.
While the pull request[1] introducing said commit has a few comments
regarding other issues and it could still be either reverted or changed,
using $TMPDIR in the uqm build script is entirely backwards-compatible
and shouldn't hurt in any case.
[1]: https://github.com/NixOS/nixpkgs/pull/93560
Signed-off-by: aszlig <aszlig@nix.build>
110 lines
3.7 KiB
Nix
110 lines
3.7 KiB
Nix
{ stdenv, lib, fetchurl, pkgconfig, libGLU, libGL
|
|
, SDL, SDL_image, libpng, libvorbis, libogg, libmikmod
|
|
|
|
, use3DOVideos ? false, requireFile ? null, writeText ? null
|
|
, haskellPackages ? null
|
|
|
|
, useRemixPacks ? false
|
|
}:
|
|
|
|
assert use3DOVideos -> requireFile != null && writeText != null
|
|
&& haskellPackages != null;
|
|
|
|
let
|
|
videos = import ./3dovideo.nix {
|
|
inherit stdenv requireFile writeText fetchurl haskellPackages;
|
|
};
|
|
|
|
remixPacks = lib.imap1 (num: sha256: fetchurl rec {
|
|
name = "uqm-remix-disc${toString num}.uqm";
|
|
url = "mirror://sourceforge/sc2/${name}";
|
|
inherit sha256;
|
|
}) [
|
|
"1s470i6hm53l214f2rkrbp111q4jyvnxbzdziqg32ffr8m3nk5xn"
|
|
"1pmsq65k8gk4jcbyk3qjgi9yqlm0dlaimc2r8hz2fc9f2124gfvz"
|
|
"07g966ylvw9k5q9jdzqdczp7c5qv4s91xjlg4z5z27fgcs7rzn76"
|
|
"1l46k9aqlcp7d3fjkjb3n05cjfkxx8rjlypgqy0jmdx529vikj54"
|
|
];
|
|
|
|
in stdenv.mkDerivation rec {
|
|
pname = "uqm";
|
|
version = "0.7.0";
|
|
|
|
src = fetchurl {
|
|
url = "mirror://sourceforge/sc2/uqm-${version}-source.tgz";
|
|
sha256 = "08dj7fsvflxx69an6vpf3wx050mk0ycmdv401yffrrqbgxgmqsd3";
|
|
};
|
|
|
|
content = fetchurl {
|
|
url = "mirror://sourceforge/sc2/uqm-${version}-content.uqm";
|
|
sha256 = "1gx39ns698hyczd4nx73mr0z86bbi4q3h8sw3pxjh1lzla5xpxmq";
|
|
};
|
|
|
|
voice = fetchurl {
|
|
url = "mirror://sourceforge/sc2/uqm-${version}-voice.uqm";
|
|
sha256 = "0yf9ff5sxk229202gsa7ski6wn7a8hkjjyr1yr7mjdxsnh0zik5w";
|
|
};
|
|
|
|
music = fetchurl {
|
|
url = "mirror://sourceforge/sc2/uqm-${version}-3domusic.uqm";
|
|
sha256 = "10nbvcrr0lc0mxivxfkcbxnibwk3vwmamabrlvwdsjxd9pk8aw65";
|
|
};
|
|
|
|
nativeBuildInputs = [ pkgconfig ];
|
|
buildInputs = [ SDL SDL_image libpng libvorbis libogg libmikmod libGLU libGL ];
|
|
|
|
postUnpack = ''
|
|
mkdir -p uqm-${version}/content/packages
|
|
mkdir -p uqm-${version}/content/addons
|
|
ln -s "$content" "uqm-${version}/content/packages/uqm-0.7.0-content.uqm"
|
|
ln -s "$music" "uqm-${version}/content/addons/uqm-0.7.0-3domusic.uqm"
|
|
ln -s "$voice" "uqm-${version}/content/addons/uqm-0.7.0-voice.uqm"
|
|
'' + lib.optionalString useRemixPacks (lib.concatMapStrings (disc: ''
|
|
ln -s "${disc}" "uqm-$version/content/addons/${disc.name}"
|
|
'') remixPacks) + lib.optionalString use3DOVideos ''
|
|
ln -s "${videos}" "uqm-${version}/content/addons/3dovideo"
|
|
'';
|
|
|
|
postPatch = ''
|
|
# Using _STRINGS_H as include guard conflicts with glibc.
|
|
sed -i -e '/^#/s/_STRINGS_H/_UQM_STRINGS_H/g' src/uqm/comm/*/strings.h
|
|
# See https://github.com/NixOS/nixpkgs/pull/93560
|
|
sed -i -e 's,/tmp/,$TMPDIR/,' build/unix/config_functions
|
|
'';
|
|
|
|
# uqm has a 'unique' build system with a root script incidentally called
|
|
# 'build.sh'.
|
|
configurePhase = ''
|
|
echo "INPUT_install_prefix_VALUE='$out'" >> config.state
|
|
echo "INPUT_install_bindir_VALUE='$out/bin'" >> config.state
|
|
echo "INPUT_install_libdir_VALUE='$out/lib'" >> config.state
|
|
echo "INPUT_install_sharedir_VALUE='$out/share'" >> config.state
|
|
PREFIX=$out ./build.sh uqm config
|
|
'';
|
|
|
|
buildPhase = ''
|
|
./build.sh uqm
|
|
'';
|
|
|
|
installPhase = ''
|
|
./build.sh uqm install
|
|
sed -i $out/bin/uqm -e "s%/usr/local/games/%$out%g"
|
|
'';
|
|
|
|
meta = {
|
|
description = "Remake of Star Control II";
|
|
longDescription = ''
|
|
The goals for the The Ur-Quan Masters project are:
|
|
- to bring Star Control II to modern platforms, thereby making a lot of
|
|
people happy
|
|
- to make game translations easy, thereby making even more people happy
|
|
- to adapt the code so that people can more easily make their own
|
|
spin-offs, thereby making zillions more people happy!
|
|
'';
|
|
homepage = "http://sc2.sourceforge.net/";
|
|
license = stdenv.lib.licenses.gpl2;
|
|
maintainers = with lib.maintainers; [ jcumming aszlig ];
|
|
platforms = with lib.platforms; linux;
|
|
};
|
|
}
|