Manually written makefile relies on inplace re-execution to build shared and static libraries. Then built in parallel it occasionally causes build failures when partially overwritten file gets used by linker. Let's disable parallel builds.
54 lines
1.8 KiB
Nix
54 lines
1.8 KiB
Nix
{ lib, stdenv, fetchurl, gnu-config, IOKit, Carbon }:
|
|
|
|
stdenv.mkDerivation rec {
|
|
pname = "cdparanoia-III";
|
|
version = "10.2";
|
|
|
|
src = fetchurl {
|
|
url = "https://downloads.xiph.org/releases/cdparanoia/cdparanoia-III-${version}.src.tgz";
|
|
sha256 = "1pv4zrajm46za0f6lv162iqffih57a8ly4pc69f7y0gfyigb8p80";
|
|
};
|
|
|
|
patches = lib.optionals stdenv.isDarwin [
|
|
(fetchurl {
|
|
url = "https://trac.macports.org/export/70964/trunk/dports/audio/cdparanoia/files/osx_interface.patch";
|
|
sha256 = "1n86kzm2ssl8fdf5wlhp6ncb2bf6b9xlb5vg0mhc85r69prqzjiy";
|
|
})
|
|
(fetchurl {
|
|
url = "https://trac.macports.org/export/70964/trunk/dports/audio/cdparanoia/files/patch-paranoia_paranoia.c.10.4.diff";
|
|
sha256 = "17l2qhn8sh4jy6ryy5si6ll6dndcm0r537rlmk4a6a8vkn852vad";
|
|
})
|
|
] ++ lib.optional stdenv.hostPlatform.isMusl ./utils.patch
|
|
++ [./fix_private_keyword.patch];
|
|
|
|
propagatedBuildInputs = lib.optionals stdenv.isDarwin [
|
|
Carbon
|
|
IOKit
|
|
];
|
|
|
|
hardeningDisable = [ "format" ];
|
|
|
|
preConfigure = ''
|
|
unset CC
|
|
'' + lib.optionalString (!stdenv.hostPlatform.isx86) ''
|
|
cp ${gnu-config}/config.sub configure.sub
|
|
cp ${gnu-config}/config.guess configure.guess
|
|
'';
|
|
|
|
# Build system reuses the same object file names for shared and static
|
|
# library. Occasionally fails in the middle:
|
|
# gcc -O2 -fsigned-char -g -O2 -c scan_devices.c
|
|
# rm -f *.o core *~ *.out
|
|
# gcc -O2 -fsigned-char -g -O2 -fpic -c scan_devices.c
|
|
# gcc -fpic -shared -o libcdda_interface.so.0.10.2 ... scan_devices.o ...
|
|
# scan_devices.o: file not recognized: file format not recognized
|
|
enableParallelBuilding = false;
|
|
|
|
meta = with lib; {
|
|
homepage = "https://xiph.org/paranoia";
|
|
description = "A tool and library for reading digital audio from CDs";
|
|
license = with licenses; [ gpl2Plus lgpl21Plus ];
|
|
platforms = platforms.unix;
|
|
};
|
|
}
|