# New ports collection makefile for:	OpenFOAM
# Date created:		Sat 17 dec 2005
# Whom:			thierry@pompo.net
#
# $FreeBSD: ports/science/openfoam/Makefile,v 1.12 2006/10/26 20:15:08 thierry Exp $
#

PORTNAME=	${REALNAME:L}
PORTVERSION=	1.3
PORTREVISION=	4
CATEGORIES=	science math
MASTER_SITES=	${MASTER_SITE_SOURCEFORGE}
MASTER_SITE_SUBDIR=	foam
DISTNAME=	${REALNAME}-${PORTVERSION}.General
EXTRACT_SUFX=	.gtgz

MAINTAINER=	thierry@FreeBSD.org
COMMENT=	Open Field Operation and Manipulation - CFD Simulation Toolbox

BUILD_DEPENDS=	micod:${PORTSDIR}/devel/mico						\
		cmake:${PORTSDIR}/devel/cmake						\
		${X11BASE}/lib/libode.a:${PORTSDIR}/devel/ode				\
		${PARAVIEW_LIB}/ParaViewConfig.cmake:${PORTSDIR}/science/paraview	\
		${LOCALBASE}/share/java/java3d/jar/j3dutils.jar:${PORTSDIR}/java/java3d	\
		${LOCALBASE}/include/libiberty/demangle.h:${PORTSDIR}/devel/gnulibiberty\
		${LOCALBASE}/include/vtk/vtkDataSetSource.h:${PORTSDIR}/math/vtk-headers\
		${X11BASE}/lib/X11/fonts/freefont-ttf/FreeSans.ttf:${PORTSDIR}/x11-fonts/freefont-ttf
LIB_DEPENDS=	execinfo:${PORTSDIR}/devel/libexecinfo
RUN_DEPENDS=	micod:${PORTSDIR}/devel/mico						\
		dx:${PORTSDIR}/graphics/opendx						\
		${LOCALBASE}/lib/libiberty.a:${PORTSDIR}/devel/gnulibiberty		\
		${LOCALBASE}/share/java/java3d/jar/j3dutils.jar:${PORTSDIR}/java/java3d	\
		paraview:${PORTSDIR}/science/paraview

.if !defined(NOPORTDOCS)
BUILD_DEPENDS+=	doxygen:${PORTSDIR}/devel/doxygen	\
		dot:${PORTSDIR}/graphics/graphviz
.endif

USE_GCC=	3.4+
USE_JAVA=	yes
JAVA_VERSION=	1.5+
USE_GL=		yes
REINPLACE_ARGS=	-i ""

WRKSRC=		${WRKDIR}/${REALNAME}-${PORTVERSION}
PKGMESSAGE=	${WRKDIR}/pkg-message
SUB_FILES=	pkg-message
SUB_LIST=	REALNAME=${REALNAME} VER=${PORTVERSION} APPSUBDIR=${APPSUBDIR}
PLIST_SUB=	${SUB_LIST}

#MAKE_SHELL=	${CSH}
MAKE_ENV=	WM_PROJECT_DIR=${BUILD_WRKSRC} WM_ARCH=${OPSYS}			\
		WM_PROJECT_INST_DIR=${PREFIX}/${REALNAME} WM_COMPILER=""	\
		WM_COMPILER_ARCH=${ARCH} WM_COMPILER_LIB_ARCH=${ARCH}		\
		WM_PROJECT_VERSION=${PORTVERSION} WM_PROJECT=${REALNAME}	\
		LD_LIBRARY_PATH="" WM_JAVAC_OPTION=${COMPOPT}			\
		WM_PROJECT_USER_DIR=${HOME}/${REALNAME}				\
		MICO_VERSION=${MICO_VER} MICO_ARCH_PATH=${LOCALBASE}		\
		WM_PRECISION_OPTION=${PRECISION} WM_COMPILE_OPTION=${COMPOPT}	\
		PTHREAD_CFLAGS=${PTHREAD_CFLAGS} PTHREAD_LIBS=${PTHREAD_LIBS}

CSH=		/bin/csh
REALNAME=	OpenFOAM
PRECISION?=	DP
COMPOPT?=	Opt
PARAVIEW_VER?=	2.4.2
PARAVIEW_LIB=	${LOCALBASE}/lib/paraview-${PARAVIEW_VER:R}
GCC_VER=	${_GCCVERSION:S/0/-/:S/0/./g}

BATCHRC=	.bashrc .cshrc
SHELLRC=	bashrc cshrc
DIR2CLEAN=	.${REALNAME}-${PORTVERSION} bin wmake applications
DIR2INST=	.${REALNAME}-${PORTVERSION} bin lib wmake
APP2INST=	solvers test utilities
THRD2FIX=	c++ mplibLAM
VER2FIX=	applications/utilities/mesh/manipulation/patchTool/C++/PatchToolServer/Make/omniOptions	\
		applications/utilities/mesh/manipulation/patchTool/C++/FoamXServer/Make/omniOptions	\
		applications/utilities/preProcessing/FoamX/C++/FoamXLib/Make/omniOptions
GL2FIX=		applications/utilities/miscellaneous/foamDebugSwitches/Make/options
PARARC=		bashrc cshrc
PS2FIX=		runFoamXHB patchTool foamJob killFoamX foamEndJob
BASH2FIX=	wmake/bashScripts/makeFiles wmake/bashScripts/makeOptions wmake/bashScripts/addCompile	\
		wmake/bashScripts/mkObjectDir .OpenFOAM-${PORTVERSION}/apps/ensightFoam/bashrc
DIR2PRUNE=	applications/utilities/mesh/manipulation/setSet/readline-5.0/platforms
APPSUBDIR=	${OPSYS}${PRECISION}${COMPOPT}
APPDIR=		applications/bin/${APPSUBDIR}

DOCS=		README doc/Guides-a4 doc/Guides-usletter

.if defined(WITH_LAM)
BUILD_DEPENDS+=	${LOCALBASE}/bin/mpicc:${PORTSDIR}/net/lam
RUN_DEPENDS+=	${LOCALBASE}/bin/mpirun:${PORTSDIR}/net/lam
MAKE_ENV+=	WM_MPLIB=LAM LAM_ARCH_PATH=${LOCALBASE}
MPICH_VER=	1.0.4
LAM_VER=	`${LOCALBASE}/bin/laminfo -version lam full | ${AWK} '{print $$2}'`
MPI_LIB=	LAM
PLIST_SUB+=	MPI="@comment " LAM="" LAM_VER=${LAM_VERSION}
.else	# TODO: add support for OpenMPI
BUILD_DEPENDS+=	${LOCALBASE}/mpich2/bin/mpicc:${PORTSDIR}/net/mpich2
RUN_DEPENDS+=	${LOCALBASE}/mpich2/bin/mpirun:${PORTSDIR}/net/mpich2
MAKE_ENV+=	WM_MPLIB=MPICH MPICH_ARCH_PATH=${LOCALBASE}/mpich2
MPICH_VER=	`${LOCALBASE}/mpich2/bin/mpich2version --version`
LAM_VER=	7.1.2
MPI_LIB=	MPICH
PLIST_SUB+=	MPI="" LAM="@comment " MPICH_VER=${MPICH_VERSION}
.endif

.include <bsd.port.pre.mk>

.if ${OSVERSION} < 500000
BROKEN=	Does not compile with gcc-2.95
.endif

.if ${OSVERSION} <= 504103
EXTRACT_DEPENDS+=	bsdtar:${PORTSDIR}/archivers/libarchive
TAR=		${LOCALBASE}/bin/bsdtar
.endif

.if exists(${LOCALBASE}/bin/mico-config)
MICO_VER=	`${LOCALBASE}/bin/mico-config --version`
.else
MICO_VER=	2.3.12
.endif

.if defined(WITH_LAM)
. if exists(${LOCALBASE}/bin/laminfo)
LAM_VERSION!=	${LOCALBASE}/bin/laminfo -version lam full | ${AWK} '{print $$2}'
. else
LAM_VERSION=	${LAM_VER}
. endif
.else
. if exists(${LOCALBASE}/mpich2/bin/mpich2version)
MPICH_VERSION!=	${LOCALBASE}/mpich2/bin/mpich2version --version
. else
MPICH_VERSION=	${MPICH_VER}
. endif
.endif

OSVERMAJ=	${OSREL:R}

post-extract:
	${CP} -Rp ${WRKSRC}/wmake/rules/linux ${WRKSRC}/wmake/rules/${OPSYS}
	${RM} ${WRKSRC}/wmake/rules/${OPSYS}/dirToString

pre-configure:
	${FIND} ${DIR2CLEAN:S|^|${WRKSRC}/|} -name "*.orig" -delete
	${REINPLACE_CMD} -e "s|/usr/local|${PREFIX}|"		\
		-e "s|#!/bin/bash|#!${LOCALBASE}/bin/bash|"	\
		-e "s|%%MPILIB%%|${MPI_LIB}|"			\
		${SHELLRC:S|^|${WRKSRC}/.${REALNAME}-${PORTVERSION}/|}
	${REINPLACE_CMD} -e "s|%%JAVA_HOME%%|${JAVA_HOME}|"			\
		-e "s|^#!/bin/bash|#! ${LOCALBASE}/bin/bash|"			\
		-e "s|gcc-3.4.3|gcc${GCC_VER}|"					\
		-e "s|2\.3\.11|${MICO_VER}|"					\
		-e "s|\$$MICO_PATH/platforms/\$$WM_OPTIONS|${LOCALBASE}|"	\
		-e "s|1\.2\.4|${MPICH_VER}|"					\
		-e "s|\$$MPICH_PATH/platforms/\$$WM_OPTIONS|${LOCALBASE}/mpich2|"\
		-e "s|7\.1\.1|${LAM_VER}|"					\
		-e "s|\$$LAMHOME/platforms/\$$WM_OPTIONS|${LOCALBASE}|"		\
		-e "s|^SOURCE |source |"					\
		${BATCHRC:S|^|${WRKSRC}/|}
	${REINPLACE_CMD} -e "s|-lGL|-L${X11BASE}/lib -lGL|"	\
		${GL2FIX:S|^|${WRKSRC}/|}
	${REINPLACE_CMD} -e "s|GCC_VERSION=4.1.0|GCC_VERSION=${GCC_VER:S/_//}|"	\
		-e "s|JAVA_VERSION=1.4.2+|JAVA_VERSION=${JAVA_PORT_VERSION}|"	\
		${WRKSRC}/bin/foamInstallationTest
	${REINPLACE_CMD} -e "s|#!/bin/bash|#! ${LOCALBASE}/bin/bash|"	\
		${BASH2FIX:S|^|${WRKSRC}/|}
.for f in ${THRD2FIX}
	${REINPLACE_CMD} -e "s|-pthread|${PTHREAD_LIBS}|"	\
		-e "s|-lpthread|${PTHREAD_LIBS}|"		\
		${WRKSRC}/wmake/rules/${OPSYS}/${f}
.endfor
	${REINPLACE_CMD} -e "s|/usr/X11R6|${X11BASE}|"		\
		${WRKSRC}/wmake/rules/${OPSYS}/X
.for f in ${VER2FIX}
	${REINPLACE_CMD} -e "s|%%ARCH%%|${ARCH}|"	\
		-e "s|%%OSVERMAJ%%|${OSVERMAJ}|"	\
		-e "s|-lpthread|${PTHREAD_LIBS}|"	\
		${WRKSRC}/${f}
.endfor
.for f in ${PS2FIX}
	${REINPLACE_CMD} -e "s|ps -u|ps -U|" ${WRKSRC}/bin/${f}
.endfor
.for f in ${PARARC}
	${REINPLACE_CMD} -e "s|/usr/local|${LOCALBASE}|"		\
		-e "s|#!/bin/bash|#!${LOCALBASE}/bin/bash|"		\
		-e "s|2.4.2|${PARAVIEW_VER}|"				\
		-e "s|paraview-2.4|paraview-${PARAVIEW_VER:R}|"		\
		${WRKSRC}/.${REALNAME}-${PORTVERSION}/apps/paraview/${f}
.endfor

do-build:
	(cd ${BUILD_WRKSRC};			\
	${SETENV} ${MAKE_ENV} ./Allwmake)

.if !defined(NOPORTDOCS)
post-build:
	@${ECHO_MSG} "===>  Building documentation."
	(cd ${BUILD_WRKSRC};			\
	${SETENV} ${MAKE_ENV} ./Allwmake doc)
.endif

do-install:
	${MKDIR} ${PREFIX}/${REALNAME}/applications
	${CP} -R ${BATCHRC:S|^|${WRKSRC}/|} ${PREFIX}/${REALNAME}
	${CP} -R ${DIR2INST:S|^|${WRKSRC}/|} ${PREFIX}/${REALNAME}
	${CP} -R ${APP2INST:S|^|${WRKSRC}/applications/|} ${PREFIX}/${REALNAME}/applications
	${FIND} ${PREFIX}/${REALNAME}/applications -type d			\
		\( -name ${APPSUBDIR} -o -name linuxDebug -o -name linuxOpt \)	\
		-exec ${RM} -rf {} \; 2>/dev/null || ${TRUE}
	${MKDIR} ${PREFIX}/${REALNAME}/${APPDIR} ${PREFIX}/${REALNAME}/jobControl
	cd ${WRKSRC}/${APPDIR}					\
	&& ${FIND} . -type f -exec ${INSTALL_PROGRAM} {}	\
		${PREFIX}/${REALNAME}/${APPDIR}/{} \;
	${RMDIR} ${DIR2PRUNE:S|^|${PREFIX}/${REALNAME}/|}
	${TOUCH} ${PREFIX}/${REALNAME}/jobControl/.keepme
.if !defined(NOPORTDOCS)
	${CP} -R ${DOCS:S|^|${WRKSRC}/|} ${PREFIX}/${REALNAME}
	${CP} -R ${WRKSRC}/tutorials ${PREFIX}/${REALNAME}
.endif

post-install:
	@${ECHO_MSG}
	@${CAT} ${PKGMESSAGE}
	@${ECHO_MSG}

.include <bsd.port.post.mk>
