Files

109 lines
2.6 KiB
Nix

{
stdenv,
fetchzip,
ghostscript,
lib,
texliveMedium,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "fastcap";
version = "2.0-18Sep92";
src = fetchzip {
url = "https://www.rle.mit.edu/cpg/codes/fastcap-${finalAttrs.version}.tgz";
hash = "sha256-fnmC6WNd7xk8fphxkMZUq2+Qz+2mWIP2lvBUBAmUvHI";
stripRoot = false;
};
patches = [
./fastcap-mulglobal-drop-conflicting-lib.patch
./fastcap-mulsetup-add-forward-declarations.patch
./fastcap-mulglobal-add-ualloc-declaration.patch
];
nativeBuildInputs = [
ghostscript
texliveMedium
];
postPatch = ''
substituteInPlace ./doc/Makefile \
--replace-fail '/bin/rm' 'rm'
for f in "doc/*.tex" ; do
sed -i -E $f \
-e 's/\\special\{psfile=([^,]*),.*scale=([#0-9.]*).*\}/\\includegraphics[scale=\2]{\1}/' \
-e 's/\\psfig\{figure=([^,]*),.*width=([#0-9.]*in).*\}/\\includegraphics[width=\2]{\1}/' \
-e 's/\\psfig\{figure=([^,]*),.*height=([#0-9.]*in).*\}/\\includegraphics[height=\2]{\1}/' \
-e 's/\\psfig\{figure=([^,]*)\}/\\includegraphics{\1}/'
done
for f in "doc/mtt.tex" "doc/tcad.tex" "doc/ug.tex"; do
sed -i -E $f \
-e 's/^\\documentstyle\[(.*)\]\{(.*)\}/\\documentclass[\1]{\2}\n\\usepackage{graphicx}\n\\usepackage{robinspace}/' \
-e 's/\\setlength\{\\footheight\}\{.*\}/%/' \
-e 's/\\setstretch\{.*\}/%/'
done
'';
dontConfigure = true;
makeFlags = [
"RM=rm"
"SHELL=sh"
"all"
];
env.NIX_CFLAGS_COMPILE = toString [
# gcc14
"-Wno-error=implicit-function-declaration"
"-Wno-error=return-mismatch"
"-Wno-error=implicit-int"
# gcc15
"-std=gnu17"
];
outputs = [
"out"
"doc"
];
postBuild = ''
make manual
pushd doc
find -name '*.dvi' -exec dvipdf {} \;
popd
'';
installPhase = ''
runHook preInstall
mkdir -p $out/
mv bin $out/bin
rm $out/bin/README
mkdir -p $doc/share/doc/fastcap-${finalAttrs.version}
cp doc/*.pdf $doc/share/doc/fastcap-${finalAttrs.version}
mkdir -p $out/share/fastcap
mv examples $out/share/fastcap
runHook postInstall
'';
meta = {
description = "Multipole-accelerated capacitance extraction program";
longDescription = ''
Fastcap is a three dimensional capacitance extraction program that
compute self and mutual capacitances between conductors of arbitrary
shapes, sizes and orientations.
'';
homepage = "https://www.rle.mit.edu/cpg/research_codes.htm";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ fbeffa ];
platforms = lib.platforms.linux;
mainProgram = "fastcap";
};
})