gnu-cobol: refactor
This is a major refactoring of the gnu-cobol package, which gives us: 1. Split outputs, allowing for small container images for COBOL applications. 2. Tests running (for Linux) 3. Parallel building 4. Documentation building 5. XML and JSON support Co-authored-by: Chad Crawford <chad@cacrawford.org>
This commit is contained in:
parent
ed6613cfea
commit
63e4402739
@ -1,5 +1,22 @@
|
||||
{ lib, stdenv, fetchurl, gcc, makeWrapper
|
||||
, db, gmp, ncurses }:
|
||||
{ lib
|
||||
, stdenv
|
||||
, fetchurl
|
||||
, autoconf269
|
||||
, automake
|
||||
, libtool
|
||||
# libs
|
||||
, cjson
|
||||
, db
|
||||
, gmp
|
||||
, libxml2
|
||||
, ncurses
|
||||
# docs
|
||||
, help2man
|
||||
, texinfo
|
||||
, texlive
|
||||
# test
|
||||
, writeText
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "gnu-cobol";
|
||||
@ -10,27 +27,76 @@ stdenv.mkDerivation rec {
|
||||
sha256 = "0x15ybfm63g7c9340fc6712h9v59spnbyaz4rf85pmnp3zbhaw2r";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
nativeBuildInputs = [
|
||||
autoconf269
|
||||
automake
|
||||
libtool
|
||||
help2man
|
||||
texinfo
|
||||
texlive.combined.scheme-basic
|
||||
];
|
||||
|
||||
buildInputs = [ db gmp ncurses ];
|
||||
buildInputs = [
|
||||
cjson
|
||||
db
|
||||
gmp
|
||||
libxml2
|
||||
ncurses
|
||||
];
|
||||
|
||||
cflags = lib.concatMapStringsSep " " (p: "-L" + (lib.getLib p) + "/lib ") buildInputs;
|
||||
ldflags = lib.concatMapStringsSep " " (p: "-I" + (lib.getDev p) + "/include ") buildInputs;
|
||||
outputs = [ "bin" "dev" "lib" "out" ];
|
||||
# XXX: Without this, we get a cycle between bin and dev
|
||||
propagatedBuildOutputs = [];
|
||||
|
||||
cobolCCFlags = "-I$out/include ${ldflags} -L$out/lib ${cflags}";
|
||||
# Skips a broken test
|
||||
postPatch = ''
|
||||
sed -i '/^AT_CHECK.*crud\.cob/i AT_SKIP_IF([true])' tests/testsuite.src/listings.at
|
||||
'';
|
||||
|
||||
postInstall = with lib; ''
|
||||
wrapProgram "$out/bin/cobc" \
|
||||
--set COB_CC "${gcc}/bin/gcc" \
|
||||
--prefix COB_LDFLAGS " " "${cobolCCFlags}" \
|
||||
--prefix COB_CFLAGS " " "${cobolCCFlags}"
|
||||
preConfigure = ''
|
||||
autoconf
|
||||
aclocal
|
||||
automake
|
||||
'';
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
installFlags = [ "install-pdf" "install-html" "localedir=$out/share/locale" ];
|
||||
|
||||
# Tests must run after install.
|
||||
doCheck = false;
|
||||
|
||||
doInstallCheck = true;
|
||||
installCheckPhase = ''
|
||||
runHook preInstallCheck
|
||||
|
||||
# Run tests
|
||||
make -j$NIX_BUILD_CORES check
|
||||
|
||||
# Sanity check
|
||||
message="Hello, COBOL!"
|
||||
# XXX: Don't for a second think you can just get rid of these spaces, they
|
||||
# are load bearing.
|
||||
tee hello.cbl <<EOF
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. HELLO.
|
||||
|
||||
PROCEDURE DIVISION.
|
||||
DISPLAY "$message".
|
||||
STOP RUN.
|
||||
EOF
|
||||
$bin/bin/cobc -x -o hello-cobol "hello.cbl"
|
||||
hello="$(./hello-cobol | tee >(cat >&2))"
|
||||
[[ "$hello" == "$message" ]] || exit 1
|
||||
|
||||
runHook postInstallCheck
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "An open-source COBOL compiler";
|
||||
homepage = "https://sourceforge.net/projects/gnucobol/";
|
||||
license = with licenses; [ gpl3Only lgpl3Only ];
|
||||
maintainers = with maintainers; [ ericsagnes ];
|
||||
maintainers = with maintainers; [ ericsagnes lovesegfault ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user