# Created by: Pedro Giffuni <giffunip@asme.org>
# $FreeBSD: tags/RELEASE_11_0_0/cad/gmsh/Makefile 415742 2016-05-23 20:35:01Z amdmi3 $

PORTNAME=	gmsh
PORTVERSION=	2.12.0
CATEGORIES=	cad
MASTER_SITES=	http://www.geuz.org/gmsh/src/ \
		http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/
DISTNAME=	${PORTNAME}-${PORTVERSION}-source
DISTFILES=	${DISTNAME}${EXTRACT_SUFX}
DIST_SUBDIR=	gmsh
EXTRACT_ONLY=	${DISTNAME}${EXTRACT_SUFX}

MAINTAINER=	stephen@FreeBSD.org
COMMENT=	Automatic 3D finite element mesh generator

LIB_DEPENDS=	libfltk.so:x11-toolkits/fltk \
		libpng.so:graphics/png \
		liblapack.so:math/lapack
RUN_DEPENDS=	getdp:science/getdp

BROKEN_powerpc64=	Does not build on powerpc64

WRKSRC=		${WRKDIR}/${PORTNAME}-${PORTVERSION}-source

SLAVEDIRS=	cad/gmsh-occ

USES=		cmake fortran gmake jpeg tar:tgz
USE_GL=		yes
ALL_TARGET=	all

MAKE_JOBS_UNSAFE=	yes

CMAKE_ARGS+=	-DCMAKE_SKIP_RPATH:BOOL=YES

OPTIONS_DEFINE=	STATIC_LIB SHARED_LIB TETGEN METIS TAUCS MED CGNS GMM OCC
OPTIONS_DEFAULT=	STATIC_LIB SHARED_LIB TETGEN METIS MED CGNS GMM

STATIC_LIB_DESC=	Build static library
SHARED_LIB_DESC=	Build shared library
TETGEN_LIB_DESC=	Enable tetgen as an alternative 3D mesh generator
METIS_LIB_DESC=		Enable metis as an alternative 3D mesh generator
TAUCS_LIB_DESC=		Enable the Taucs linear algebra solver
MED_LIB_DESC=		Enable MED support
CGNS_LIB_DESC=		Enable CGNS support
GMM_LIB_DESC=		Enable gmm++ support
OCC_LIB_DESC=		Enable STEP, IGES and BREP support

OPTIONS_SUB=		yes

STATIC_LIB_CMAKE_ON=	-DENABLE_BUILD_LIB=ON
STATIC_LIB_ALL_TARGET=	lib
SHARED_LIB_CMAKE_ON=	-DENABLE_BUILD_SHARED=ON
SHARED_LIB_ALL_TARGET=	shared
SHARED_LIB_VARS=	use_ldconfig=yes
PLIST_SUB+=		SHARED_LIB="" VER=${PORTVERSION} VE=${PORTVERSION:R}
DOCS_CMAKE_OFF=		-DINSTALL_DOCS=OFF
TETGEN_CMAKE_ON=	-DENABLE_TETGEN=ON
TETGEN_CMAKE_OFF=	-DENABLE_TETGEN=OFF
TETGEN_VARS=		"no_cdrom=Contact appropriate authors for commercial purposes if including Tetgen or Metis"
METIS_CMAKE_ON=	-DENABLE_METIS=ON
METIS_CMAKE_OFF=	-DENABLE_METIS=OFF
METIS_VARS=		"no_cdrom=Contact appropriate authors for commercial purposes if including Tetgen or Metis"
METIS_VARS=		distfiles+=manual.pdf
TAUCS_LIB_DEPENDS=	libtaucs.so:math/taucs
TAUCS_CMAKE_ON=		-DENABLE_TAUCS=ON
TAUCS_CMAKE_OFF=	-DENABLE_TAUCS=OFF
MED_LIB_DEPENDS=	libmed.so:french/med
MED_CMAKE_ON=		-DENABLE_MED=ON
MED_CMAKE_OFF=		-DENABLE_MED=OFF
CGNS_LIB_DEPENDS=	libcgns.so:science/cgnslib
CGNS_CMAKE_ON=		-DENABLE_CGNS=ON
CGNS_CMAKE_OFF=		-DENABLE_CGNS=OFF
GMM_CMAKE_OFF=		-DENABLE_GMM=OFF
OCC_LIB_DEPENDS=	libTKernel.so:cad/opencascade
OCC_CMAKE_ON=		-DENABLE_OCC=ON -DOCC_INC=${LOCALBASE}/include/OpenCASCADE
OCC_CFLAGS=		-DHAVE_CONFIG_H -DHAVE_WOK_CONFIG_H -DFREEBSD
OCC_CONFLICTS=		gmsh-2.*
OCC_CMAKE_OFF=		-DENABLE_OCC=OFF
OCC_CONFLICTS_OFF=	gmsh-occ-2.*

.include <bsd.port.options.mk>

# Even though the taucs port pulls in the metis port, we will still need
# METIS set when TAUCS is set, otherwise the linker does not find the
# libraries installed by the metis port.
.if ${PORT_OPTIONS:MTAUCS} && !${PORT_OPTIONS:MMETIS}
IGNORE=		METIS must be set if TAUCS is set
.endif

.if !${PORT_OPTIONS:MMETIS} && ${PORT_OPTIONS:MDOCS}
IGNORE=		the license for Metis requires that its documentation is included
.endif

# TODO
# Dependencies against PythonLibs, swig and petsc are found and registered if installed
# => add knobs to handle them.

PKGMESSAGE=	${WRKDIR}/pkg-message

.include <bsd.port.pre.mk>

post-extract:
	${CP} ${DISTDIR}/${DIST_SUBDIR}/manual.pdf ${WRKDIR}
	${TOUCH} ${PKGMESSAGE}
.if ${PORT_OPTIONS:MTETGEN}
	@${ECHO} >> ${PKGMESSAGE}
	@${ECHO} "The FreeBSD project has been granted redistribution rights" >> ${PKGMESSAGE}
	@${ECHO} "but anyone attempting to redistribute Gmsh with Tetgen" >> ${PKGMESSAGE}
	@${ECHO} "for strict commercial purposes must still contact the author" >> ${PKGMESSAGE}
	@${ECHO} "(Hang Si) and license the code." >> ${PKGMESSAGE}
.endif
.if ${PORT_OPTIONS:MMETIS}
	@${ECHO} >> ${PKGMESSAGE}
	@${ECHO} "The FreeBSD project has been granted redistribution rights" >> ${PKGMESSAGE}
	@${ECHO} "but anyone attempting to redistribute Gmsh with Metis" >> ${PKGMESSAGE}
	@${ECHO} "must still contact the author" >> ${PKGMESSAGE}
	@${ECHO} "http://glaros.dtc.umn.edu/gkhome/metis/metis/faq?q=metis/metis/faq#distribute" >> ${PKGMESSAGE}
	@${ECHO} "\"A Fast and Highly Quality Multilevel Scheme for Partitioning Irregular Graphs\". George Karypis and Vipin Kumar. SIAM Journal on Scientific Computing, Vol. 20, No. 1, pp. 359-392, 1999." >> ${PKGMESSAGE}
.endif
.if ${PORT_OPTIONS:MTAUCS}
	@${ECHO} >> ${PKGMESSAGE}
	@${ECHO} "There might be licensing issues with using Taucs with Gmsh" >> ${PKGMESSAGE}
	@${ECHO} "because Taucs requires Metis." >> ${PKGMESSAGE}
.endif

pre-configure:
	${REINPLACE_CMD} -e s+share/doc/gmsh+${DOCSDIR_REL}+ \
		-e s+share/man/man1+man/man1+ ${WRKSRC}/CMakeLists.txt

post-install:
.if ${PORT_OPTIONS:MMETIS}
	${MKDIR} ${STAGEDIR}${DOCSDIR}/metis
	${INSTALL_DATA} ${WRKDIR}/manual.pdf ${STAGEDIR}${DOCSDIR}/metis
.endif

.include <bsd.port.post.mk>
