1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
|
{
lib,
stdenv,
fetchurl,
autoconf269,
automake,
libtool,
pkg-config,
# libs
cjson,
db,
gmp,
libxml2,
ncurses,
# docs
help2man,
texinfo,
texliveBasic,
# test
perl,
}:
let
nistTestSuite = fetchurl {
# Used to check GnuCOBOL with the NIST test suite
url = "mirror://sourceforge/gnucobol/newcob.val.tar.gz";
hash = "sha256-5FE/JqmziRH3v4gv49MzmoC0XKvCyvheswVbD1zofuA=";
};
in
stdenv.mkDerivation (finalAttrs: {
pname = "gnucobol";
version = "3.2";
src = fetchurl {
url = "mirror://gnu/gnucobol/gnucobol-${finalAttrs.version}.tar.xz";
hash = "sha256-O7SK9GztR3n6z0H9wu5g5My4bqqZ0BCzZoUxXfOcLuI=";
};
nativeBuildInputs = [
pkg-config
autoconf269
automake
help2man
libtool
perl
texinfo
texliveBasic
];
buildInputs = [
cjson
db
gmp
libxml2
ncurses
];
outputs = [
"bin"
"dev"
"lib"
"out"
];
# XXX: Without this, we get a cycle between bin and dev
propagatedBuildOutputs = [ ];
# Skips a broken test
postPatch = ''
sed -i '/^AT_CHECK.*crud\.cob/i AT_SKIP_IF([true])' tests/testsuite.src/listings.at
# upstream reports the following tests as known failures
# test 843 (runtime check: write to internal storage (1))
sed -i "/^843;/d" tests/testsuite
# test 875 (INDEXED sample)
sed -i "/^875;/d" tests/testsuite
'';
preConfigure =
''
autoconf
aclocal
automake
''
+ lib.optionalString stdenv.hostPlatform.isDarwin ''
# when building with nix on darwin, configure will use GNU strip,
# which fails due to using --strip-unneeded, which is not supported
substituteInPlace configure --replace-fail '"GNU strip"' 'FAKE GNU strip'
'';
# error: call to undeclared function 'xmlCleanupParser'
# ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
env.CFLAGS = lib.optionalString stdenv.hostPlatform.isDarwin "-Wno-error=implicit-function-declaration";
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
TESTSUITEFLAGS="--jobs=$NIX_BUILD_CORES" make check
# Run NIST tests
cp -v ${nistTestSuite} ./tests/cobol85/newcob.val.tar.gz
TESTSUITEFLAGS="--jobs=$NIX_BUILD_CORES" make test
# 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 = "Free/libre COBOL compiler";
homepage = "https://gnu.org/software/gnucobol/";
license = with licenses; [
gpl3Only
lgpl3Only
];
maintainers = with maintainers; [
ericsagnes
lovesegfault
techknowlogick
kiike
];
platforms = platforms.all;
};
})
|