vtk: clean up / reduce code repetition (#107617)

vtk: clean up / reduce code repetition

This refactors the vtk expressions to use a generic base expression,
which is used for all 3 versions.

vtk 7.x no longer uses gcc 8, since the quirk of it not building with
gcc 9 seems to have been fixed.

This also makes the python bindings available for all 3 versions, and
fixes building them for vtk 8 by adding a patch.
This commit is contained in:
Linus Heckemann 2020-12-26 23:27:39 +01:00 committed by GitHub
parent 8e334e6992
commit e71634eece
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 129 additions and 246 deletions

View file

@ -1,74 +1,9 @@
{ stdenv, fetchurl, cmake, libGLU, libGL, libX11, xorgproto, libXt, libtiff
, fetchpatch
, qtLib ? null
, enablePython ? false, python ? null
# Darwin support
, Cocoa, CoreServices, DiskArbitration, IOKit, CFNetwork, Security, GLUT, OpenGL
, ApplicationServices, CoreText, IOSurface, ImageIO, xpc, libobjc }:
with stdenv.lib;
let
os = stdenv.lib.optionalString;
import ./generic.nix {
majorVersion = "7.1";
minorVersion = "1";
version = "${majorVersion}.${minorVersion}";
in
stdenv.mkDerivation rec {
name = "vtk-${os (qtLib != null) "qvtk-"}${version}";
src = fetchurl {
url = "${meta.homepage}files/release/${majorVersion}/VTK-${version}.tar.gz";
sha256 = "0nm7xwwj7rnsxjdv2ssviys8nhci4n9iiiqm2y14s520hl2dsp1d";
};
patches = [
(fetchpatch {
url = "https://gitlab.kitware.com/vtk/vtk/-/commit/706f1b397df09a27ab8981ab9464547028d0c322.diff";
sha256 = "1q3pi5h40g05pzpbqp75xlgzvbfvyw8raza51svmi7d8dlslqybx";
})
];
nativeBuildInputs = [ cmake ];
buildInputs = [ libtiff ]
++ optional (qtLib != null) qtLib
++ optionals stdenv.isLinux [ libGLU libGL libX11 xorgproto libXt ]
++ optionals stdenv.isDarwin [ xpc Cocoa CoreServices DiskArbitration IOKit
CFNetwork Security ApplicationServices CoreText
IOSurface ImageIO OpenGL GLUT ]
++ optional enablePython [
python
];
propagatedBuildInputs = stdenv.lib.optionals stdenv.isDarwin [ libobjc ];
preBuild = ''
export LD_LIBRARY_PATH="$(pwd)/lib";
'';
# Shared libraries don't work, because of rpath troubles with the current
# nixpkgs cmake approach. It wants to call a binary at build time, just
# built and requiring one of the shared objects.
# At least, we use -fPIC for other packages to be able to use this in shared
# objects.
cmakeFlags = [ "-DCMAKE_C_FLAGS=-fPIC" "-DCMAKE_CXX_FLAGS=-fPIC" "-DVTK_USE_SYSTEM_TIFF=1" "-DOPENGL_INCLUDE_DIR=${libGL}/include" ]
++ optional (qtLib != null) [ "-DVTK_Group_Qt:BOOL=ON" ]
++ optional stdenv.isDarwin [ "-DOPENGL_INCLUDE_DIR=${OpenGL}/Library/Frameworks" ]
++ optional enablePython [ "-DVTK_WRAP_PYTHON:BOOL=ON" ];
postPatch = stdenv.lib.optionalString stdenv.isDarwin ''
sed -i 's|COMMAND vtkHashSource|COMMAND "DYLD_LIBRARY_PATH=''${VTK_BINARY_DIR}/lib" ''${VTK_BINARY_DIR}/bin/vtkHashSource-${majorVersion}|' ./Parallel/Core/CMakeLists.txt
sed -i 's/fprintf(output, shift)/fprintf(output, "%s", shift)/' ./ThirdParty/libxml2/vtklibxml2/xmlschemas.c
sed -i 's/fprintf(output, shift)/fprintf(output, "%s", shift)/g' ./ThirdParty/libxml2/vtklibxml2/xpath.c
'';
enableParallelBuilding = true;
meta = {
description = "Open source libraries for 3D computer graphics, image processing and visualization";
homepage = "https://www.vtk.org/";
license = stdenv.lib.licenses.bsd3;
maintainers = with stdenv.lib.maintainers; [ knedlsepp ];
platforms = with stdenv.lib.platforms; unix;
};
sourceSha256 = "0nm7xwwj7rnsxjdv2ssviys8nhci4n9iiiqm2y14s520hl2dsp1d";
patchesToFetch = [{
url = "https://gitlab.kitware.com/vtk/vtk/-/commit/706f1b397df09a27ab8981ab9464547028d0c322.diff";
sha256 = "1q3pi5h40g05pzpbqp75xlgzvbfvyw8raza51svmi7d8dlslqybx";
}];
}

View file

@ -0,0 +1,9 @@
import ./generic.nix {
majorVersion = "8.2";
minorVersion = "0";
sourceSha256 = "1fspgp8k0myr6p2a6wkc21ldcswb4bvmb484m12mxgk1a9vxrhrl";
patchesToFetch = [{
url = "https://gitlab.kitware.com/vtk/vtk/-/commit/257b9d7b18d5f3db3fe099dc18f230e23f7dfbab.diff";
sha256 = "0qdahp4f4gcaznr28j06d5fyxiis774ys0p335aazf7h51zb8rzy";
}];
}

View file

@ -1,95 +1,5 @@
{ stdenv, mkDerivation, fetchurl, cmake, libGLU, libGL, libX11, xorgproto, libXt, libtiff
, fetchpatch
, enableQt ? false, qtbase, qtx11extras, qttools
, enablePython ? false, python ? null
# Darwin support
, Cocoa, CoreServices, DiskArbitration, IOKit, CFNetwork, Security, GLUT, OpenGL
, ApplicationServices, CoreText, IOSurface, ImageIO, xpc, libobjc }:
with stdenv.lib;
let
os = stdenv.lib.optionalString;
import ./generic.nix {
majorVersion = "9.0";
minorVersion = "1";
version = "${majorVersion}.${minorVersion}";
in
mkDerivation rec {
name = "vtk-${os enableQt "qvtk-"}${version}";
src = fetchurl {
url = "${meta.homepage}files/release/${majorVersion}/VTK-${version}.tar.gz";
sha256 = "1ir2lq9i45ls374lcmjzw0nrm5l5hnm1w47lg8g8d0n2j7hsaf8v";
};
nativeBuildInputs = [ cmake ];
buildInputs = [ libtiff ]
++ optionals enableQt [ qtbase qtx11extras qttools ]
++ optionals stdenv.isLinux [
libGLU
libGL
libX11
xorgproto
libXt
] ++ optionals stdenv.isDarwin [
xpc
Cocoa
CoreServices
DiskArbitration
IOKit
CFNetwork
Security
ApplicationServices
CoreText
IOSurface
ImageIO
OpenGL
GLUT
]
++ optional enablePython [
python
];
propagatedBuildInputs = stdenv.lib.optionals stdenv.isDarwin [ libobjc ];
preBuild = ''
export LD_LIBRARY_PATH="$(pwd)/lib";
'';
# Shared libraries don't work, because of rpath troubles with the current
# nixpkgs cmake approach. It wants to call a binary at build time, just
# built and requiring one of the shared objects.
# At least, we use -fPIC for other packages to be able to use this in shared
# objects.
cmakeFlags = [
"-DCMAKE_C_FLAGS=-fPIC"
"-DCMAKE_CXX_FLAGS=-fPIC"
"-DVTK_USE_SYSTEM_TIFF=1"
"-DOPENGL_INCLUDE_DIR=${libGL}/include"
"-DCMAKE_INSTALL_LIBDIR=lib"
"-DCMAKE_INSTALL_INCLUDEDIR=include"
"-DCMAKE_INSTALL_BINDIR=bin"
]
++ optionals enableQt [ "-DVTK_Group_Qt:BOOL=ON" ]
++ optionals stdenv.isDarwin [ "-DOPENGL_INCLUDE_DIR=${OpenGL}/Library/Frameworks" ]
++ optionals enablePython [
"-DVTK_WRAP_PYTHON:BOOL=ON"
"-DVTK_PYTHON_VERSION:STRING=3"
];
postPatch = stdenv.lib.optionalString stdenv.isDarwin ''
sed -i 's|COMMAND vtkHashSource|COMMAND "DYLD_LIBRARY_PATH=''${VTK_BINARY_DIR}/lib" ''${VTK_BINARY_DIR}/bin/vtkHashSource-${majorVersion}|' ./Parallel/Core/CMakeLists.txt
sed -i 's/fprintf(output, shift)/fprintf(output, "%s", shift)/' ./ThirdParty/libxml2/vtklibxml2/xmlschemas.c
sed -i 's/fprintf(output, shift)/fprintf(output, "%s", shift)/g' ./ThirdParty/libxml2/vtklibxml2/xpath.c
'';
enableParallelBuilding = true;
meta = with stdenv.lib; {
description = "Open source libraries for 3D computer graphics, image processing and visualization";
homepage = "https://www.vtk.org/";
license = licenses.bsd3;
maintainers = with maintainers; [ tfmoraes ];
platforms = with platforms; unix;
};
sourceSha256 = "1ir2lq9i45ls374lcmjzw0nrm5l5hnm1w47lg8g8d0n2j7hsaf8v";
}

View file

@ -1,75 +0,0 @@
{ stdenv, fetchurl, cmake, libGLU, libGL, libX11, xorgproto, libXt, libtiff
, fetchpatch
, qtLib ? null
, enablePython ? false, python ? null
# Darwin support
, Cocoa, CoreServices, DiskArbitration, IOKit, CFNetwork, Security, GLUT, OpenGL
, ApplicationServices, CoreText, IOSurface, ImageIO, xpc, libobjc }:
with stdenv.lib;
let
os = stdenv.lib.optionalString;
majorVersion = "8.2";
minorVersion = "0";
version = "${majorVersion}.${minorVersion}";
in
stdenv.mkDerivation rec {
name = "vtk-${os (qtLib != null) "qvtk-"}${version}";
src = fetchurl {
url = "${meta.homepage}files/release/${majorVersion}/VTK-${version}.tar.gz";
sha256 = "1fspgp8k0myr6p2a6wkc21ldcswb4bvmb484m12mxgk1a9vxrhrl";
};
patches = [
# Fix compilation with Qt 5.15
(fetchpatch {
url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/sci-libs/vtk/files/vtk-8.2.0-qt-5.15.patch?id=3ca9613d7ad604c93d714e29b116952561e4e41c";
sha256 = "sha256-BFjoKws1hVD3Ly9RS4lGN62J6RTyI1E8ATHrZdzg7ds=";
})
];
nativeBuildInputs = [ cmake ];
buildInputs = [ libtiff ]
++ optionals (qtLib != null) (with qtLib; [ qtbase qtx11extras qttools ])
++ optionals stdenv.isLinux [ libGLU libGL libX11 xorgproto libXt ]
++ optionals stdenv.isDarwin [ xpc Cocoa CoreServices DiskArbitration IOKit
CFNetwork Security ApplicationServices CoreText
IOSurface ImageIO OpenGL GLUT ]
++ optional enablePython [
python
];
propagatedBuildInputs = stdenv.lib.optionals stdenv.isDarwin [ libobjc ];
preBuild = ''
export LD_LIBRARY_PATH="$(pwd)/lib";
'';
# Shared libraries don't work, because of rpath troubles with the current
# nixpkgs cmake approach. It wants to call a binary at build time, just
# built and requiring one of the shared objects.
# At least, we use -fPIC for other packages to be able to use this in shared
# objects.
cmakeFlags = [ "-DCMAKE_C_FLAGS=-fPIC" "-DCMAKE_CXX_FLAGS=-fPIC" "-DVTK_USE_SYSTEM_TIFF=1" "-DOPENGL_INCLUDE_DIR=${libGL}/include" ]
++ optional (qtLib != null) [ "-DVTK_Group_Qt:BOOL=ON" ]
++ optional stdenv.isDarwin [ "-DOPENGL_INCLUDE_DIR=${OpenGL}/Library/Frameworks" ]
++ optional enablePython [ "-DVTK_WRAP_PYTHON:BOOL=ON" ];
postPatch = stdenv.lib.optionalString stdenv.isDarwin ''
sed -i 's|COMMAND vtkHashSource|COMMAND "DYLD_LIBRARY_PATH=''${VTK_BINARY_DIR}/lib" ''${VTK_BINARY_DIR}/bin/vtkHashSource-${majorVersion}|' ./Parallel/Core/CMakeLists.txt
sed -i 's/fprintf(output, shift)/fprintf(output, "%s", shift)/' ./ThirdParty/libxml2/vtklibxml2/xmlschemas.c
sed -i 's/fprintf(output, shift)/fprintf(output, "%s", shift)/g' ./ThirdParty/libxml2/vtklibxml2/xpath.c
'';
enableParallelBuilding = true;
meta = {
description = "Open source libraries for 3D computer graphics, image processing and visualization";
homepage = "https://www.vtk.org/";
license = stdenv.lib.licenses.bsd3;
maintainers = with stdenv.lib.maintainers; [ knedlsepp ];
platforms = with stdenv.lib.platforms; unix;
};
}

View file

@ -0,0 +1,96 @@
{ majorVersion, minorVersion, sourceSha256, patchesToFetch ? [] }:
{ stdenv, lib, fetchurl, cmake, libGLU, libGL, libX11, xorgproto, libXt, libtiff
, fetchpatch
, enableQt ? false, wrapQtAppsHook, qtbase, qtx11extras, qttools
, enablePython ? false, pythonInterpreter ? throw "vtk: Python support requested, but no python interpreter was given."
# Darwin support
, Cocoa, CoreServices, DiskArbitration, IOKit, CFNetwork, Security, GLUT, OpenGL
, ApplicationServices, CoreText, IOSurface, ImageIO, xpc, libobjc
}:
let
inherit (lib) optionalString optionals optional;
pythonMajor = lib.substring 0 1 pythonInterpreter.pythonVersion;
in stdenv.mkDerivation rec {
pname = "vtk${optionalString enableQt "-qvtk"}";
version = "${majorVersion}.${minorVersion}";
src = fetchurl {
url = "${meta.homepage}files/release/${majorVersion}/VTK-${version}.tar.gz";
sha256 = sourceSha256;
};
nativeBuildInputs = [ cmake ];
buildInputs = [ libtiff ]
++ optionals enableQt [ qtbase qtx11extras qttools ]
++ optionals stdenv.isLinux [
libGLU
libGL
libX11
xorgproto
libXt
] ++ optionals stdenv.isDarwin [
xpc
Cocoa
CoreServices
DiskArbitration
IOKit
CFNetwork
Security
ApplicationServices
CoreText
IOSurface
ImageIO
OpenGL
GLUT
] ++ optional enablePython [
pythonInterpreter
];
propagatedBuildInputs = optionals stdenv.isDarwin [ libobjc ];
patches = map fetchpatch patchesToFetch;
preBuild = ''
export LD_LIBRARY_PATH="$(pwd)/lib";
'';
# Shared libraries don't work, because of rpath troubles with the current
# nixpkgs cmake approach. It wants to call a binary at build time, just
# built and requiring one of the shared objects.
# At least, we use -fPIC for other packages to be able to use this in shared
# objects.
cmakeFlags = [
"-DCMAKE_C_FLAGS=-fPIC"
"-DCMAKE_CXX_FLAGS=-fPIC"
"-DVTK_USE_SYSTEM_TIFF=1"
"-DOPENGL_INCLUDE_DIR=${libGL}/include"
"-DCMAKE_INSTALL_LIBDIR=lib"
"-DCMAKE_INSTALL_INCLUDEDIR=include"
"-DCMAKE_INSTALL_BINDIR=bin"
]
++ optionals enableQt [ "-DVTK_Group_Qt:BOOL=ON" ]
++ optionals stdenv.isDarwin [ "-DOPENGL_INCLUDE_DIR=${OpenGL}/Library/Frameworks" ]
++ optionals enablePython [
"-DVTK_WRAP_PYTHON:BOOL=ON"
"-DVTK_PYTHON_VERSION:STRING=${pythonMajor}"
];
postPatch = optionalString stdenv.isDarwin ''
sed -i 's|COMMAND vtkHashSource|COMMAND "DYLD_LIBRARY_PATH=''${VTK_BINARY_DIR}/lib" ''${VTK_BINARY_DIR}/bin/vtkHashSource-${majorVersion}|' ./Parallel/Core/CMakeLists.txt
sed -i 's/fprintf(output, shift)/fprintf(output, "%s", shift)/' ./ThirdParty/libxml2/vtklibxml2/xmlschemas.c
sed -i 's/fprintf(output, shift)/fprintf(output, "%s", shift)/g' ./ThirdParty/libxml2/vtklibxml2/xpath.c
'';
enableParallelBuilding = true;
meta = with lib; {
description = "Open source libraries for 3D computer graphics, image processing and visualization";
homepage = "https://www.vtk.org/";
license = licenses.bsd3;
maintainers = with maintainers; [ knedlsepp tfmoraes lheckemann ];
platforms = with platforms; unix;
};
}

View file

@ -16431,16 +16431,14 @@ in
vte_290 = callPackage ../development/libraries/vte/2.90.nix { };
vtk = callPackage ../development/libraries/vtk {
vtk_7 = libsForQt515.callPackage ../development/libraries/vtk/7.x.nix {
inherit (darwin) libobjc;
inherit (darwin.apple_sdk.libs) xpc;
inherit (darwin.apple_sdk.frameworks) Cocoa CoreServices DiskArbitration
IOKit CFNetwork Security ApplicationServices
CoreText IOSurface ImageIO OpenGL GLUT;
};
vtk_7 = callPackage ../development/libraries/vtk/7.x.nix {
stdenv = if stdenv.isDarwin then stdenv else gcc8Stdenv;
vtk_8 = libsForQt515.callPackage ../development/libraries/vtk/8.x.nix {
inherit (darwin) libobjc;
inherit (darwin.apple_sdk.libs) xpc;
inherit (darwin.apple_sdk.frameworks) Cocoa CoreServices DiskArbitration
@ -16456,6 +16454,9 @@ in
CoreText IOSurface ImageIO OpenGL GLUT;
};
vtk = vtk_8;
vtkWithQt5 = vtk.override { enableQt = true; };
vulkan-extension-layer = callPackage ../tools/graphics/vulkan-extension-layer { };
vulkan-headers = callPackage ../development/libraries/vulkan-headers { };
vulkan-loader = callPackage ../development/libraries/vulkan-loader { };
@ -16463,8 +16464,6 @@ in
vulkan-tools-lunarg = callPackage ../tools/graphics/vulkan-tools-lunarg { };
vulkan-validation-layers = callPackage ../development/tools/vulkan-validation-layers { };
vtkWithQt5 = vtk.override { qtLib = qt515; };
vxl = callPackage ../development/libraries/vxl {
libpng = libpng12;
stdenv = gcc6Stdenv; # upstream code incompatible with gcc7

View file

@ -7746,8 +7746,17 @@ in {
vsts-cd-manager = callPackage ../development/python-modules/vsts-cd-manager { };
vtk = toPythonModule (pkgs.vtk_7.override {
inherit (self) python;
vtk = self.vtk_7;
vtk_7 = toPythonModule (pkgs.vtk_7.override {
pythonInterpreter = python;
enablePython = true;
});
vtk_8 = toPythonModule (pkgs.vtk_8.override {
pythonInterpreter = python;
enablePython = true;
});
vtk_9 = toPythonModule (pkgs.vtk_9.override {
pythonInterpreter = python;
enablePython = true;
});