Merge pull request #268619 from tweag/lib-descriptions
[NixPkgs.git] / pkgs / games / ultrastardx / default.nix
blob424781dd8958061e79a7026ec8c89fb43bd76ddd
1 { lib, stdenv
2 , autoreconfHook
3 , fetchFromGitHub
4 , fetchpatch
5 , pkg-config
6 , lua
7 , fpc
8 , pcre
9 , portaudio
10 , freetype
11 , libpng
12 , SDL2
13 , SDL2_image
14 , SDL2_gfx
15 , SDL2_mixer
16 , SDL2_net, SDL2_ttf
17 , ffmpeg_4
18 , sqlite
19 , zlib
20 , libX11
21 , libGLU
22 , libGL
25 let
26   sharedLibs = [
27     pcre portaudio freetype
28     SDL2 SDL2_image SDL2_gfx SDL2_mixer SDL2_net SDL2_ttf
29     sqlite lua zlib libX11 libGLU libGL ffmpeg_4
30   ];
32 in stdenv.mkDerivation rec {
33   pname = "ultrastardx";
34   version = "2023.9.0";
36   src = fetchFromGitHub {
37     owner = "UltraStar-Deluxe";
38     repo = "USDX";
39     rev = "v${version}";
40     hash = "sha256-KvYfWdpgN72F8Y5iFNba0SCjPoS33O3FAdrrC49xoGo=";
41   };
43   nativeBuildInputs = [ pkg-config autoreconfHook ];
44   buildInputs = [ fpc libpng ] ++ sharedLibs;
46   postPatch = ''
47     substituteInPlace src/config.inc.in \
48       --subst-var-by libpcre_LIBNAME libpcre.so.1
50     # ultrastardx binds to libffmpeg (and sublibs), specifying a very restrictive
51     # upper bounds on the minor versions of .so files.
52     # We can assume ffmpeg_4 won’t break any major ABI compatibility, since it's
53     # effectively EOL
54     sed \
55       -e 's/^  LIBAVCODEC_MAX_VERSION_MINOR.*$/  LIBAVCODEC_MAX_VERSION_MINOR = 1000;/' \
56       -i src/lib/ffmpeg-4.0/avcodec.pas
57     sed \
58       -e 's/^  LIBAVFORMAT_MAX_VERSION_MINOR.*$/  LIBAVFORMAT_MAX_VERSION_MINOR = 1000;/' \
59       -i src/lib/ffmpeg-4.0/avformat.pas
60     sed \
61       -e 's/^  LIBAVUTIL_MAX_VERSION_MINOR.*$/  LIBAVUTIL_MAX_VERSION_MINOR = 1000;/' \
62       -i src/lib/ffmpeg-4.0/avutil.pas
63     sed \
64       -e 's/^  LIBSWRESAMPLE_MAX_VERSION_MINOR.*$/  LIBSWRESAMPLE_MAX_VERSION_MINOR = 1000;/' \
65       -i src/lib/ffmpeg-4.0/swresample.pas
66     sed \
67       -e 's/^  LIBSWSCALE_MAX_VERSION_MINOR.*$/  LIBSWSCALE_MAX_VERSION_MINOR = 1000;/' \
68       -i src/lib/ffmpeg-4.0/swscale.pas
69   '';
71   preBuild = with lib;
72     let items = concatMapStringsSep " " (x: "-rpath ${getLib x}/lib") sharedLibs;
73     in ''
74       export NIX_LDFLAGS="$NIX_LDFLAGS ${items}"
75     '';
77   # dlopened libgcc requires the rpath not to be shrinked
78   dontPatchELF = true;
80   meta = with lib; {
81     homepage = "https://usdx.eu/";
82     description = "Free and open source karaoke game";
83     license = licenses.gpl2Plus;
84     maintainers = with maintainers; [ Profpatsch ];
85   };