1PORTNAME=	vtk
2DISTVERSION=	9.2.6
3PORTREVISION=	1
4CATEGORIES=	math graphics
5MASTER_SITES=	https://vtk.org/files/release/${VTK_SHORT_VER}/
6PKGNAMESUFFIX=	9
7DISTNAME=	${PORTNAME:tu}-${DISTVERSION}
8
9MAINTAINER=	ports@MidnightBSD.org
10COMMENT=	Visualization toolkit
11WWW=		https://vtk.org/
12
13LICENSE=	bsd3
14
15LIB_DEPENDS=	\
16		libexpat.so:textproc/expat2 \
17		libfreetype.so:print/freetype2 \
18		libhdf5.so:science/hdf5 \
19		libnetcdf.so:science/netcdf \
20		libpng.so:graphics/png \
21		libtiff.so:graphics/tiff
22
23USES=		cmake compiler:c++11-lang gl jpeg localbase xorg
24USE_LDCONFIG=	${PREFIX}/lib/vtk-${VTK_SHORT_VER}
25USE_XORG=	ice x11 xt xext sm xcursor xfixes xrender
26
27CFLAGS_powerpc64le=	-DSQLITE_BYTEORDER=1234
28CMAKE_ON=	BUILD_SHARED_LIBS \
29		VTK_INSTALL_NO_DOCUMENTATION \
30		Module_vtkTestingCore Module_vtkTestingRendering
31.for m in expat freetype hdf5 jpeg netcdf png tiff zlib # mpi4py should be here, but this fails, see https://gitlab.kitware.com/vtk/vtk/-/issues/18693
32CMAKE_ON+=	VTK_MODULE_USE_EXTERNAL_VTK_${m}
33.endfor
34CMAKE_ARGS=	-DVTK_INSTALL_LIBRARY_DIR=lib/vtk-${VTK_SHORT_VER} \
35		-DVTK_INSTALL_ARCHIVE_DIR=lib/vtk-${VTK_SHORT_VER} \
36		-DVTK_INSTALL_QT_DIR=/${QT_LIBDIR_REL}/plugins/designer \
37		-DSTAGEDIR=${STAGEDIR}
38		# all build options are documented here: https://gitlab.kitware.com/vtk/vtk/blob/master/Documentation/dev/build.md
39		# all modules can be obtailed by: find . -name vtk.module
40		# there's also CMake/vtkWrapSettings.cmake with options
41
42# disable finding Qt6
43CMAKE_ON+=	CMAKE_DISABLE_FIND_PACKAGE_Qt6
44
45# enable all modules
46#CMAKE_ON+=	VTK_BUILD_ALL_MODULES
47
48VTK_SHORT_VER=	${PORTVERSION:R}
49
50DOCSDIR=	${PREFIX}/share/doc/vtk-${VTK_SHORT_VER}
51DATADIR=	${PREFIX}/share/vtk-${VTK_SHORT_VER}
52
53# Options
54OPTIONS_DEFINE=	DESIGNER DOCS OMPI OSMESA PYTHON QT5 EXAMPLES
55OPTIONS_DEFAULT=	OMPI PYTHON QT5 # vtk python binding is needed by other packages, and is unfortunately is unseparable. It is a candidate to be a subpackage.
56OSMESA_DESC=	Use Mesa for off-screen rendering
57OMPI_DESC=	OpenMPI (Message Passing Interface) support
58DESIGNER_DESC=	Build the Qt Designer plugin
59OPTIONS_SUB=	yes
60
61# Option groups that enable groups of modules in VTK
62VTK_GROUPS=		JAVA TCLTK
63OPTIONS_GROUP=		GROUPS
64OPTIONS_GROUP_GROUPS=	${VTK_GROUPS}
65GROUPS_DESC=		Groups
66.for w in ${VTK_GROUPS}
67$w_DESC=		Enable $w group
68.endfor
69
70PYTHON_USES=		python
71PYTHON_CMAKE_BOOL=	VTK_WRAP_PYTHON
72PYTHON_CMAKE_ON=	-DVTK_PYTHON_VERSION=${PYTHON_MAJOR_VER} -DPython3_EXECUTABLE=${PYTHON_CMD}
73PYTHON_VARS=		SUB_FILES=PKG-INFO SUB_LIST=PORTVERSION=${PORTVERSION}
74
75QT5_USES=		qt:5
76QT5_USE=		QT=core,declarative,gui,network,opengl,sql,uiplugin,widgets,x11extras,qmake,buildtools # qmake and buildtools should be with :build, but see https://gitlab.kitware.com/vtk/vtk/-/issues/18705
77QT5_CMAKE_ON=		-DVTK_GROUP_ENABLE_Qt:STRING=YES \
78			-DCMAKE_PREFIX_PATH:STRING=${LOCALBASE}/lib/qt5
79
80#QT6_USES=		qt:6
81#QT6_USE=		QT=base,declarative,tools:build
82#QT6_CMAKE_ON=		-DVTK_GROUP_ENABLE_Qt:STRING=YES \
83			-DCMAKE_PREFIX_PATH:STRING=${LOCALBASE}/lib/qt5
84
85DESIGNER_CMAKE_BOOL=	QT_DESIGNER_PLUGIN
86DESIGNER_USE=		QT=designer
87DESIGNER_IMPLIES=	QT5
88
89OMPI_CMAKE_BOOL=	VTK_USE_MPI
90OMPI_USES=		mpi:openmpi
91OMPI_CMAKE_ON=		-DMPI_HOME=${LOCALBASE}/mpi/openmpi
92OMPI_LDFLAGS=		${MPI_LIBS}
93
94OSMESA_CMAKE_ON=	-DVTK_OPENGL_HAS_OSMESA:BOOL=ON \
95			-DOSMESA_INCLUDE_DIR:PATH=${LOCALBASE}/include/Mesa \
96			-DOSMESA_LIBRARY:FILEPATH=${LOCALBASE}/lib/libOSMesa.so \
97			-DOPENGL_gl_LIBRARY:FILEPATH=${LOCALBASE}/lib/libOSMesa.so \
98			-DVTK_USE_X:BOOL=OFF
99OSMESA_LIB_DEPENDS=	libOSMesa.so:graphics/libosmesa
100
101JAVA_USES=		java
102JAVA_CMAKE_BOOL=	VTK_WRAP_JAVA
103JAVA_CMAKE_ON=		-DJAVA_INCLUDE_PATH:PATH=${JAVA_HOME}/include \
104			-DJAVA_AWT_LIBRARY:PATH=${JAVA_HOME}/jre/lib/${ARCH}/libjawt.so \
105			-DJAVA_JVM_LIBRARY:PATH=${JAVA_HOME}/jre/lib/${ATCH}/libjava.so
106
107TCLTK_USES=		tk
108TCLTK_CMAKE_ON=		-DVTK_GROUP_ENABLE_Tk:STRING=YES \
109			-DTCL_INCLUDE_PATH:PATH=${TCL_INCLUDEDIR} \
110			-DTK_INCLUDE_PATH:PATH=${TK_INCLUDEDIR}  \
111			-DVTK_INSTALL_TCL_DIR=lib/vtk-${VTK_SHORT_VER}
112
113DOCS_CMAKE_BOOL=	BUILD_DOCUMENTATION
114DOCS_BUILD_DEPENDS=	doxygen:devel/doxygen
115
116EXAMPLES_CMAKE_BOOL=	BUILD_EXAMPLES
117
118.include <bsd.mport.options.mk>
119
120.if !${PORT_OPTIONS:MOSMESA}
121USES+=		gl
122USE_GL=		gl glu
123.endif
124
125.if ${PORT_OPTIONS:MPYTHON} && ${PORT_OPTIONS:MOMPI}
126BUILD_DEPENDS=	${PYTHON_PKGNAMEPREFIX}mpi4py>0:net/py-mpi4py@${PY_FLAVOR}
127RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}mpi4py>0:net/py-mpi4py@${PY_FLAVOR}
128.endif
129
130CONFLICTS=	vtk6 vtk8
131
132do-install-PYTHON-on:
133	# cmake doesn't install pip's .egg-info: https://gitlab.kitware.com/vtk/vtk/-/issues/18087
134	@${MKDIR} ${FAKE_DESTDIR}${PYTHON_SITELIBDIR}/vtk-${DISTVERSION}-py${PYTHON_VER}.egg-info
135	@${INSTALL_DATA} ${WRKDIR}/PKG-INFO ${FAKE_DESTDIR}${PYTHON_SITELIBDIR}/vtk-${DISTVERSION}-py${PYTHON_VER}.egg-info
136	# workaround for: VTK installs mpi4py which makes it to conflict with the standalone mpi4py package, see https://gitlab.kitware.com/vtk/vtk/-/issues/18691
137	-${RM} -r ${FAKE_DESTDIR}${PYTHON_SITELIBDIR}/mpi4py
138
139post-install: # autoplist: thousands of files, complex dependencies on options
140	@cd ${PREFIX} && \
141		${FIND} * -type f -or -type l >> ${TMPPLIST}
142
143.include <bsd.port.mk>
144