summaryrefslogtreecommitdiff
path: root/math/freefem++/Makefile
blob: 5327388f5a5177a780c555c53d3b86432db6a6f1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# New ports collection makefile for:	FreeFem++
# Date created:        17 October 2003
# Whom:                thierry@pompo.net
#
# $FreeBSD$
#

PORTNAME=	freefem++
DISTVERSION=	2.24-1
PORTREVISION=	1
CATEGORIES=	math science
MASTER_SITES=	http://www.freefem.org/ff++/ftp/

MAINTAINER=	ports@FreeBSD.org
COMMENT=	An implementation of a language dedicated to the finite element method

LIB_DEPENDS=	fltk.1:${PORTSDIR}/x11-toolkits/fltk-threads		\
		fftw3.4:${PORTSDIR}/math/fftw3				\
		umfpack.1:${PORTSDIR}/math/suitesparse			\
		arpack.1:${PORTSDIR}/math/arpack			\
		gsl.12:${PORTSDIR}/math/gsl
BUILD_DEPENDS=	convert:${PORTSDIR}/graphics/ImageMagick		\
		dvips:${PORTSDIR}/print/dvipsk-tetex			\
		pdflatex:${PORTSDIR}/print/teTeX-base
RUN_DEPENDS=	dvips:${PORTSDIR}/print/dvipsk-tetex			\
		pdflatex:${PORTSDIR}/print/teTeX-base			\
		bamg:${PORTSDIR}/math/bamg

RESTRICTED=	No resale or commercial use

USE_FORTRAN=		yes
FORTRANLIBDIR=		`${DIRNAME} \`gfortran42 -print-libgcc-file-name\``
FORTRANLIBDIR2=		`${DIRNAME} \`gfortran42 -print-libgcc-file-name\``/../../../
USE_BISON=		build
USE_GL=			yes
USE_GMAKE=		yes
GNU_CONFIGURE=		yes
CONFIGURE_TARGET=	--build=${MACHINE_ARCH}-portbld-freebsd${OSREL}
CONFIGURE_ARGS=		--disable-download					\
			--without-cadna						\
			--with-blas="${BLAS}"					\
			--with-lapack="${LAPACK}"				\
			--with-amd="-lamd"					\
			--with-umfpack="-lumfpack"				\
			--with-arpack="${ARPACK}"
CONFIGURE_ENV=		CPPFLAGS="${MPICFLAGS} -I${LOCALBASE}/include -I${LOCALBASE}/suitesparse/include ${PTHREAD_CFLAGS}"	\
			LDFLAGS="${MPILDFLAGS} -L${LOCALBASE}/lib -L${X11BASE}/lib ${PTHREAD_LIBS}" \
			FC=${FC} F77=${F77} FCFLAGS=${FCFLAGS}

DOC_TARGET=	freefem++doc.pdf
PORTDOCS=	AUTHORS BUGS COPYING HISTORY HISTORY_BEFORE_2005 INNOVATION README TODO ${DOC_TARGET}
BADSAMPLES=	load/myfunction.o

.include <bsd.port.pre.mk>

.if ${ARCH} == "amd64"
MAKE_ARGS+=	"PIC=-fPIC"
.endif

.if ${ARCH} == "sparc64"
CONFIGURE_ARGS+=	--disable-optim
.endif

.if exists(${LOCALBASE}/lib/libatlas_r.so) && !defined(WITH_BLAS)
WITH_ATLAS=	yes
.endif
.if defined(WITH_ATLAS)
LIB_DEPENDS+=	atlas.2:${PORTSDIR}/math/atlas
BLAS=		-lcblas -lf77blas -latlas -L${FORTRANLIBDIR} -L${FORTRANLIBDIR2} -lgfortranbegin -lgfortran
LAPACK=		-lalapack ${BLAS}
ARPACK=		-larpack
.else
LIB_DEPENDS+=	blas.2:${PORTSDIR}/math/blas
LIB_DEPENDS+=	lapack.4:${PORTSDIR}/math/lapack
BLAS=		-lblas
LAPACK=		-llapack ${BLAS}
ARPACK=		-larpack
.endif

.if exists(${LOCALBASE}/mpich2/include/mpicxx.h) && !defined(WITHOUT_MPI)
WITH_MPI=	yes
.endif
.if defined(WITH_MPI)
BUILD_DEPENDS+=	${LOCALBASE}/mpich2/bin/mpicxx:${PORTSDIR}/net/mpich2
RUN_DEPENDS+=	${LOCALBASE}/mpich2/bin/mpiexec:${PORTSDIR}/net/mpich2
MPICFLAGS=	-I${LOCALBASE}/mpich2/include -DMPICH_IGNORE_CXX_SEEK
MPILDFLAGS=	-L${LOCALBASE}/mpich2/lib
CONFIGURE_ENV+=	PATH="$$PATH:${LOCALBASE}/mpich2/bin"
CONFIGURE_ARGS+=	--with-mpi=${LOCALBASE}/mpich2/bin/mpicxx
PLIST_SUB+=	MPI=""
.else
PLIST_SUB+=	MPI="@comment "
CONFIGURE_ARGS+=	--without-mpi
.endif

pre-configure:
	${REINPLACE_CMD} -e "s|-lpthread|${PTHREAD_LIBS}|g"		\
		-e "s|/usr/X11R6|${X11BASE}|g"				\
		${WRKSRC}/${CONFIGURE_SCRIPT}
	${REINPLACE_CMD} -e "s|mpicc|${LOCALBASE}/mpich2/bin/mpicxx|"	\
		${WRKSRC}/src/mpi/Makefile.in
#	${FIND} ${WRKSRC} -name "*.edp" | ${XARGS} \
#		${REINPLACE_CMD} -e 's|exec("medit|// exec("medit|g'

post-build:
.if !defined(NOPORTDOCS)
	(cd ${BUILD_WRKSRC}/DOC;	\
	${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} ${DOC_TARGET}; \
	${CP} ${DOC_TARGET} ${BUILD_WRKSRC})
.endif

post-install:
.if !defined(NOPORTDOCS)
	@${MKDIR} ${DOCSDIR}
	@${INSTALL_DATA} ${PORTDOCS:S|^|${WRKSRC}/|} ${DOCSDIR}
	@${ECHO_MSG} "===>  Documentation installed in ${DOCSDIR}."
. for direx in "" -bug -chapt3 -eigen -load -mpi -other -tutorial
	@cd ${WRKSRC}/examples++${direx} && ${FIND} . -type d	\
		-exec ${MKDIR} ${EXAMPLESDIR}/${direx:S/-//}/{} \;
	@cd ${WRKSRC}/examples++${direx} && ${FIND} -L . -type f	\
		-exec ${INSTALL_DATA} ${WRKSRC}/examples++${direx}/{}	\
			${EXAMPLESDIR}/${direx:S/-//} \;
. endfor
	@${FIND} ${EXAMPLESDIR} -name "Makefile*" -delete
	@${RMDIR} ${EXAMPLESDIR}/load/include
. for sample in ${BADSAMPLES}
	@${RM} ${EXAMPLESDIR}/${sample}
. endfor
	@${ECHO_MSG} "===>  Examples installed in ${EXAMPLESDIR}."
.endif

.if defined(MAINTAINER_MODE)
regression-test:	install
	# Gnuplot and medit needed! Click on the picture to end a set.
.for direx in - -eigen -tutorial
	(cd ${EXAMPLESDIR}/${direx:S/-//} ;	\
	${PREFIX}/bin/FreeFem++ all.edp)
.endfor
.endif

.include <bsd.port.post.mk>