153 lines
3.9 KiB
Nix
153 lines
3.9 KiB
Nix
{ lib
|
|
, stdenv
|
|
, fetchFromGitHub
|
|
, runCommand
|
|
, libtool
|
|
, cmake
|
|
, zlib
|
|
, bzip2
|
|
, enableRexx ? stdenv.isLinux, regina
|
|
}:
|
|
let
|
|
herculesCpu =
|
|
if stdenv.hostPlatform.isx86 then "x86"
|
|
else stdenv.hostPlatform.qemuArch;
|
|
herculesBits = if stdenv.hostPlatform.is32bit then "32" else "64";
|
|
|
|
herculesLibDir =
|
|
if stdenv.hostPlatform.isx86 then "lib"
|
|
else "lib/${herculesCpu}";
|
|
|
|
mkExtPkg = depName: attrFn: (stdenv.mkDerivation {
|
|
pname = "hercules-${depName}";
|
|
|
|
postPatch = ''
|
|
patchShebangs build
|
|
sed -i build \
|
|
-e "s%_tool=.*$%_tool=${cmake}/bin/cmake%" \
|
|
-e "s/CPUS=.*$/CPUS=$NIX_BUILD_CORES/"
|
|
'';
|
|
|
|
dontUseCmakeConfigure = true;
|
|
|
|
buildPhase = ''
|
|
mkdir ../build $out
|
|
# In source builds are not allowed.
|
|
cd ../build
|
|
../source/build \
|
|
--pkgname ${depName} \
|
|
--cpu ${herculesCpu} \
|
|
--arch ${herculesBits} \
|
|
--install "$out"
|
|
'';
|
|
|
|
nativeBuildInputs = [ cmake ];
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
meta = with lib; {
|
|
description = "Hercules ${depName} library";
|
|
license = lib.licenses.free; # Mixture of Public Domain, ICU (MIT compatible) and others
|
|
maintainers = with maintainers; [ anna328p vifino ];
|
|
};
|
|
}).overrideAttrs (default: attrFn default);
|
|
|
|
|
|
crypto = mkExtPkg "crypto" (default: {
|
|
version = "1.0.0";
|
|
src = fetchFromGitHub {
|
|
owner = "SDL-Hercules-390";
|
|
repo = "crypto";
|
|
rev = "a5096e5dd79f46b568806240c0824cd8cb2fcda2";
|
|
hash = "sha256-VWjM8WxPMynyW49Z8U/r6SsF7u7Xbk7Dd0gR35lIw28=";
|
|
};
|
|
});
|
|
|
|
decNumber = mkExtPkg "decNumber" (default: {
|
|
version = "3.68.0";
|
|
src = fetchFromGitHub {
|
|
owner = "SDL-Hercules-390";
|
|
repo = "decNumber";
|
|
rev = "3aa2f4531b5fcbd0478ecbaf72ccc47079c67280";
|
|
hash = "sha256-PfPhnYUSIw1sYiGRM3iHRTbHHbQ+sK7oO12pH/yt+MQ=";
|
|
};
|
|
});
|
|
|
|
softFloat = mkExtPkg "SoftFloat" (default: {
|
|
version = "3.5.0";
|
|
src = fetchFromGitHub {
|
|
owner = "SDL-Hercules-390";
|
|
repo = "SoftFloat";
|
|
rev = "4b0c326008e174610969c92e69178939ed80653d";
|
|
hash = "sha256-DEIT5Xk6IqUXCIGD2Wj0h9xPOR0Mid2Das7aKMQMDaM=";
|
|
};
|
|
});
|
|
|
|
telnet = mkExtPkg "telnet" (default: {
|
|
version = "1.0.0";
|
|
src = fetchFromGitHub {
|
|
owner = "SDL-Hercules-390";
|
|
repo = "telnet";
|
|
rev = "729f0b688c1426018112c1e509f207fb5f266efa";
|
|
hash = "sha256-ED0Cl+VcK6yl59ShgJBZKy25oAFC8eji36pNLwMxTM0=";
|
|
};
|
|
});
|
|
|
|
extpkgs = runCommand "hercules-extpkgs" {} ''
|
|
OUTINC="$out/include"
|
|
OUTLIB="$out/${herculesLibDir}"
|
|
mkdir -p "$OUTINC" "$OUTLIB"
|
|
for dep in "${crypto}" "${decNumber}" "${softFloat}" "${telnet}"; do
|
|
ln -s $dep/include/* "$OUTINC"
|
|
ln -s $dep/${herculesLibDir}/* "$OUTLIB"
|
|
done
|
|
'';
|
|
in
|
|
stdenv.mkDerivation rec {
|
|
pname = "hercules";
|
|
version = "4.6";
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "SDL-Hercules-390";
|
|
repo = "hyperion";
|
|
rev = "Release_${version}";
|
|
hash = "sha256-ZhMTun6tmTsmIiFPTRFudwRXzWydrih61RsLyv0p24U=";
|
|
};
|
|
|
|
postPatch = ''
|
|
patchShebangs _dynamic_version
|
|
'';
|
|
|
|
nativeBuildInputs = [ libtool ];
|
|
buildInputs = [
|
|
(lib.getOutput "lib" libtool)
|
|
zlib
|
|
bzip2
|
|
extpkgs
|
|
] ++ lib.optionals enableRexx [
|
|
regina
|
|
];
|
|
|
|
configureFlags = [
|
|
"--enable-extpkgs=${extpkgs}"
|
|
"--without-included-ltdl"
|
|
"--enable-ipv6"
|
|
"--enable-cckd-bzip2"
|
|
"--enable-het-bzip2"
|
|
] ++ lib.optionals enableRexx [
|
|
"--enable-regina-rexx"
|
|
];
|
|
|
|
meta = with lib; {
|
|
homepage = "https://sdl-hercules-390.github.io/html/";
|
|
description = "IBM mainframe emulator";
|
|
longDescription = ''
|
|
Hercules is an open source software implementation of the mainframe
|
|
System/370 and ESA/390 architectures, in addition to the latest 64-bit
|
|
z/Architecture. Hercules runs under Linux, Windows, Solaris, FreeBSD, and
|
|
Mac OS X.
|
|
'';
|
|
license = licenses.qpl;
|
|
maintainers = with maintainers; [ anna328p vifino ];
|
|
};
|
|
}
|