sword: enable Windows building

Modify build techniques for SWORD so that it compiles on Windows and we
can remove the platforms tag
This commit is contained in:
Greg Hellings
2024-10-25 18:47:30 -05:00
parent 7869ffb010
commit 7fe6b3351a
2 changed files with 123 additions and 48 deletions
+110 -48
View File
@@ -5,60 +5,122 @@
pkg-config,
icu,
clucene_core,
autoreconfHook,
bzip2,
curl,
xz,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "sword";
version = "1.9.0";
stdenv.mkDerivation (
finalAttrs:
let
# Used on Windows, where libpsl doesn't compile, yet
curlDep = curl.override { pslSupport = false; };
in
{
pname = "sword";
version = "1.9.0";
src = fetchurl {
url = "https://www.crosswire.org/ftpmirror/pub/sword/source/v${lib.versions.majorMinor finalAttrs.version}/sword-${finalAttrs.version}.tar.gz";
hash = "sha256-QkCc894vrxEIUj4sWsB0XSH57SpceO2HjuncwwNCa4o=";
};
src = fetchurl {
url = "https://www.crosswire.org/ftpmirror/pub/sword/source/v${lib.versions.majorMinor finalAttrs.version}/sword-${finalAttrs.version}.tar.gz";
hash = "sha256-QkCc894vrxEIUj4sWsB0XSH57SpceO2HjuncwwNCa4o=";
};
nativeBuildInputs = [ pkg-config ];
buildInputs = [
icu
clucene_core
curl
];
nativeBuildInputs =
[
pkg-config
]
++ (lib.optionals stdenv.hostPlatform.isWindows [
autoreconfHook # The Windows patch modifies autotools files
]);
outputs = [
"out"
"dev"
];
buildInputs =
[
icu
]
++ (lib.optionals stdenv.hostPlatform.isUnix [
clucene_core
curl
])
++ (lib.optionals stdenv.hostPlatform.isWindows [
bzip2
curlDep
xz
]);
prePatch = ''
patchShebangs .;
'';
outputs = [
"out"
"dev"
];
configureFlags = [
"--without-conf"
"--enable-tests=no"
];
CXXFLAGS = [
"-Wno-unused-but-set-variable"
"-Wno-unknown-warning-option"
# compat with icu61+ https://github.com/unicode-org/icu/blob/release-64-2/icu4c/readme.html#L554
"-DU_USING_ICU_NAMESPACE=1"
];
meta = {
description = "Software framework that allows research manipulation of Biblical texts";
homepage = "https://www.crosswire.org/sword/";
longDescription = ''
The SWORD Project is the CrossWire Bible Society's free Bible software
project. Its purpose is to create cross-platform open-source tools --
covered by the GNU General Public License -- that allow programmers and
Bible societies to write new Bible software more quickly and easily. We
also create Bible study software for all readers, students, scholars, and
translators of the Bible, and have a growing collection of many hundred
texts in around 100 languages.
prePatch = ''
patchShebangs .;
'';
license = lib.licenses.gpl2;
maintainers = with lib.maintainers; [ AndersonTorres greg ];
platforms = lib.platforms.unix;
};
})
preConfigure = lib.optionalString stdenv.hostPlatform.isWindows ''
substituteInPlace configure --replace-fail "-no-undefined" "-Wl,-no-undefined"
'';
patches = lib.optional stdenv.hostPlatform.isWindows ./sword-1.9.0-diatheke-includes.patch;
configureFlags =
[
"--without-conf"
"--enable-tests=no"
]
++ (lib.optionals stdenv.hostPlatform.isWindows [
"--with-xz"
"--with-bzip2"
"--with-icuregex"
]);
makeFlags = lib.optionals stdenv.hostPlatform.isWindows [
"LDFLAGS=-no-undefined"
];
env = {
# When placed in nativeBuildInputs, icu.dev is finding the native ICU libs, but setting it
# explicitly here has it finding the platform appropriate version
ICU_CONFIG = lib.optionalString stdenv.hostPlatform.isWindows "${icu.dev}/bin/icu-config --noverify";
CURL_CONFIG = lib.optionalString stdenv.hostPlatform.isWindows "${lib.getDev curlDep}/bin/curl-config";
CXXFLAGS = (
builtins.concatStringsSep " " (
[
"-Wno-unused-but-set-variable"
"-Wno-unknown-warning-option"
# compat with icu61+ https://github.com/unicode-org/icu/blob/release-64-2/icu4c/readme.html#L554
"-DU_USING_ICU_NAMESPACE=1"
]
++ (lib.optionals stdenv.hostPlatform.isWindows [
"-Wint-to-pointer-cast"
"-fpermissive"
"-D_ICUSWORD_"
"-DCURL_STATICLIB"
])
)
);
};
meta = {
description = "Software framework that allows research manipulation of Biblical texts";
homepage = "https://www.crosswire.org/sword/";
longDescription = ''
The SWORD Project is the CrossWire Bible Society's free Bible software
project. Its purpose is to create cross-platform open-source tools --
covered by the GNU General Public License -- that allow programmers and
Bible societies to write new Bible software more quickly and easily. We
also create Bible study software for all readers, students, scholars, and
translators of the Bible, and have a growing collection of many hundred
texts in around 100 languages.
'';
license = lib.licenses.gpl2;
maintainers = with lib.maintainers; [
AndersonTorres
greg
];
platforms = lib.platforms.all;
};
}
)
@@ -0,0 +1,13 @@
diff --git a/utilities/diatheke/Makefile.am b/utilities/diatheke/Makefile.am
index 8ba34e5..545af2c 100644
--- a/utilities/diatheke/Makefile.am
+++ b/utilities/diatheke/Makefile.am
@@ -1,5 +1,8 @@
AUTOMAKE_OPTIONS = 1.6
+if USE_INTERNAL_REGEX
+AM_CPPFLAGS = -I$(top_srcdir)/include/internal/regex
+endif
LDADD = $(top_builddir)/lib/libsword.la
bin_PROGRAMS = diatheke