Update lang/ocaml to version 4.01.0_4
[dports.git] / lang / ocaml / Makefile
1 # Created by: Kiriyama Kazuhiko <kiri@kiri.toba-cmt.ac.jp>
2 # $FreeBSD$
3
4 # for committer: bump PORTREVISION for math/facile whenever ocaml gets updated
5 PORTNAME=       ocaml
6 PORTVERSION=    4.01.0
7 PORTREVISION=   4
8 CATEGORIES=     lang
9 MASTER_SITES=   http://caml.inria.fr/pub/distrib/${DISTNAME:R}/ \
10                 ${MASTER_SITE_GENTOO}
11 MASTER_SITE_SUBDIR=     distfiles
12 PKGNAMESUFFIX=  ${SFX}
13 DISTFILES=      ${DISTNAME}${EXTRACT_SUFX}
14 EXTRACT_ONLY=   ${DISTNAME}${EXTRACT_SUFX}
15
16 MAINTAINER=     michipili@gmail.com
17 COMMENT=        The Objective Caml compiler and programming environment
18
19 LICENSE=                QPL10 LGPL20
20 LICENSE_COMB=           multi
21 LICENSE_NAME_QPL10=     Q Public License, Version 1.0
22 LICENSE_FILE_QPL10=     ${WRKSRC}/LICENSE
23 LICENSE_PERMS_QPL10=    auto-accept dist-mirror dist-sell pkg-mirror pkg-sell
24
25 USES=           gmake tar:bzip2
26 REINPLACE_ARGS= -i ""
27 HAS_CONFIGURE=  yes
28 ALL_TARGET=     world.opt
29 STRIP=
30 SSP_UNSAFE=     yes
31 MAKE_JOBS_UNSAFE=       yes
32
33 MAKE_ENV+=      STAGEDIR="${STAGEDIR}"
34 CONFIGURE_ARGS= -verbose -prefix "${PREFIX}" \
35                 -cc "${CC} ${CFLAGS}" \
36                 -as "${AS} ${ASFLAGS}" \
37                 -aspp "${CC} -c" \
38                 -partialld "${LD} -r"
39
40 OPTIONS_DEFINE= X11 TK THREADS DOCS EXAMPLES
41 OPTIONS_DEFAULT=X11 TK THREADS
42 TK_DESC=        LablTk library (requires X11 support)
43 CMP_LIB_DESC=   Install compiler libraries
44 PORTDOCS=       htmlman ${DOCSDISTNAME}-refman.ps.gz \
45                 ${DOCSDISTNAME}-refman.pdf
46
47 MODOPT=         camlp4o camlp4r ocamlc ocamldep ocamldoc ocamllex ocamlopt
48 PATTERN=        [[:space:]]*(do|then)?[[:space:]]*)(\$$\(CP\)|cp)([[:space:]]
49 DOCSDISTNAME=   ${DISTNAME:C/([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)/\1.\2/}
50
51 CONFLICTS=      metaocaml-[0-9]*
52
53 .include <bsd.port.options.mk>
54
55 .if ${PORT_OPTIONS:MDOCS}
56 DISTFILES+=     ${DOCSDISTNAME}-refman-html.tar.gz \
57                 ${DOCSDISTNAME}-refman.ps.gz \
58                 ${DOCSDISTNAME}-refman.pdf
59 EXTRACT_ONLY+=  ${DOCSDISTNAME}-refman-html.tar.gz
60 PLIST_SUB+=     DOC=""
61 PORTDOCS=       htmlman ${DOCSDISTNAME}-refman.ps.gz ${DOCSDISTNAME}-refman.pdf
62 .else
63 PLIST_SUB+=     DOC="@comment "
64 .endif
65
66 .if ${ARCH} == armv6
67 CONFIGURE_ARGS+= -as "${AS} ${ASFLAGS} -mfpu=softvfp -meabi=5"
68 .else
69 CONFIGURE_ARGS+= -as "${AS} ${ASFLAGS}"
70 .endif
71
72 .if ${PORT_OPTIONS:MTHREADS}
73 PLIST_SUB+=     THREADS=""
74 THR_CPP=        ${PTHREAD_CFLAGS}
75 THR_LD=         ${PTHREAD_LIBS}
76 .else
77 PLIST_SUB+=     THREADS="@comment "
78 THR_CPP=        #empty
79 THR_LD=         #empty
80 CONFIGURE_ARGS+=-no-pthread
81 .endif
82
83 .if ${PORT_OPTIONS:MX11}
84 PLIST_SUB+=     X11=""
85 USE_XORG=       x11
86 CONFLICTS+=     ocaml-nox11-[0-9]*
87 CONFIGURE_ARGS+=-x11include ${LOCALBASE}/include -x11lib ${LOCALBASE}/lib
88 .else
89 PLIST_SUB+=     X11="@comment "
90 SFX=            -nox11
91 CONFLICTS+=     ocaml-[0-9]*
92 CONFIGURE_ARGS+=-no-graph
93 .endif
94
95 .if ${PORT_OPTIONS:MTK}
96 . if ${PORT_OPTIONS:MEXAMPLES}
97 PORTEXAMPLES=   examples_camltk examples_labltk
98 .endif
99 . if ! ${PORT_OPTIONS:MX11}
100 IGNORE=requires X11 support to build TK bindings
101 . endif
102 USES+=          tk:84+
103 PLIST_SUB+=     TK=""
104 CONFIGURE_ARGS+=        -tkdefs \
105                         "-I${TCL_INCLUDEDIR} -I${TK_INCLUDEDIR} ${THR_CPP}" \
106                         -tklibs "-L${LOCALBASE}/lib -ltk${TK_VER:S|.||} \
107                         -ltcl${TCL_VER:S|.||} ${THR_LD}"
108 .else
109 PLIST_SUB+=     TK="@comment "
110 CONFIGURE_ARGS+=-no-tk
111 .endif
112
113 .include <bsd.port.pre.mk>
114 .include "${FILESDIR}/manfiles"
115
116 OCAML_ARCH= ${ARCH:S/x86_64/amd64/:S/powerpc/power/:S/armv6/arm/}
117
118 .if defined(NO_PROFILE) || ${OCAML_ARCH} == power || ${OPSYS} == DragonFly
119 PLIST_SUB+=     PROF="@comment "
120 .else
121 PLIST_SUB+=     PROF=""
122 .endif
123
124 .if ${OCAML_ARCH} == sparc64
125 BROKEN= ocamlc.opt seg-faults on ${ARCH}, please try to fix
126 .endif
127
128 post-extract:
129 .if ${PORT_OPTIONS:MDOCS}
130         @if ! (cd ${WRKDIR} && \
131           ${TAR} xf ${_DISTDIR}${DOCSDISTNAME}-refman-html.tar.gz \
132         ) \
133         then \
134           exit 1; \
135         fi;
136 .endif
137
138 post-patch:
139         @${REINPLACE_CMD} \
140                 -e '\|MKLIB=|s|ar rc|${AR} rc|' \
141                 -e '\|RANLIB|s|ranlib|${RANLIB}|' \
142                 -e '\|bytecclinkopts=|s|""|"${LDFLAGS}"|' \
143                 -e "\|nativecclinkopts=|s|''|\"${LDFLAGS:C/-Wl,//}\"|" \
144                 -e '\|mksharedlib=|s|$$bytecc|& $$bytecclinkopts|' \
145                 -e 's|-lbfd -ldl|-lbfd $$dllib|' \
146                 ${WRKSRC}/configure
147 # don't hardcode gcc for depend target
148 # be aware of staging
149         @${REINPLACE_CMD} -E \
150                 -e 's|gcc|$$(CC)|' \
151                 -e '/^install/,/^$$/s@\$$\(((INSTALL_)?(BIN|LIB|STUBLIB|COMPLIB|MANO?|INSTALL|INSTALL_CUSTOM)DIR)\)@$$(STAGEDIR)$$(\1)@g' \
152                 `find ${WRKSRC} -name 'Makefile*'`
153         @${REINPLACE_CMD} -E -e 's/^DIR=/DIR=$$(STAGEDIR)/' ${WRKSRC}/man/Makefile
154 .if ${PORT_OPTIONS:MTK}
155         @${REINPLACE_CMD} -e 's|/usr/bin/wish|${WISH}|' \
156                 ${WRKSRC}/otherlibs/labltk/examples_labltk/hello.tcl
157 .endif
158
159 post-configure:
160 # CFLAGS safeness
161         @${REINPLACE_CMD} -E \
162                 -e 's|(BYTECCCOMPOPTS[ \t]*=.*)|\1 ${CFLAGS} ${THR_CPP}|' \
163                 -e 's|(NATIVECCCOMPOPTS[ \t]*=.*)|\1 ${CFLAGS} ${THR_CPP}|' \
164                 -e '/^PTHREAD_LINK/s,-pthread,${THR_LD},g' \
165                 ${WRKSRC}/config/Makefile
166
167 # INSTALL* safeness (which preserves the correct permissions despite
168 # user's umask(1)
169         @${FIND} ${WRKDIR} -type f -name Makefile -print0 | \
170                 ${XARGS} -0 -n 5 -x ${REINPLACE_CMD} -E \
171                 -e 's,\$$\(ARCH\),${OCAML_ARCH},g'      \
172                 -e 's,^(${PATTERN}+.*INSTALLDIR),\1\$${BSD_INSTALL_DATA} \4,' \
173                 -e 's,^(${PATTERN}+.*BINDIR),\1\$${BSD_INSTALL_PROGRAM} \4,' \
174                 -e 's,^(${PATTERN}+.*LIBDIR),\1\$${BSD_INSTALL_DATA} \4,' \
175                 -e 's,(${PATTERN}+.*(MANDIR|MANODIR|MANEXT)),\1\$${BSD_INSTALL_MAN} \4,'
176
177 check test: install
178         @cd ${WRKSRC}/testsuite; ${RM} -f _log; for d in tests/* ; do \
179         ${SETENV} ${MAKE_ENV} ${MAKE_CMD} ${MAKE_ARGS} one DIR=$${d} \
180         2>&1 | tee -a _log || ${TRUE} ; done ; \
181         ${SETENV} ${MAKE_ENV} ${MAKE_CMD} ${MAKE_ARGS} report
182
183 post-install:
184         ${RMDIR} ${STAGEDIR}${PREFIX}/lib/ocaml/ocamldoc/custom
185         @${CHMOD} 755 ${STAGEDIR}${PREFIX}/lib/ocaml/expunge
186 .if ${PORT_OPTIONS:MTK}
187         @${MKDIR} ${STAGEDIR}${EXAMPLESDIR}
188         (cd ${WRKSRC}/otherlibs/labltk && \
189                 ${COPYTREE_SHARE} examples_labltk ${STAGEDIR}${EXAMPLESDIR} \
190                 "! -name .ignore" && \
191                 ${COPYTREE_SHARE} examples_camltk ${STAGEDIR}${EXAMPLESDIR} \
192                 "! -name .ignore")
193 .endif
194 .if ${PORT_OPTIONS:MDOCS}
195         ${MKDIR} ${STAGEDIR}${DOCSDIR}
196         (cd ${WRKDIR} && ${COPYTREE_SHARE} htmlman ${STAGEDIR}${DOCSDIR})
197         ${INSTALL_DATA} ${_DISTDIR}${DOCSDISTNAME}-refman.ps.gz ${STAGEDIR}${DOCSDIR}
198         ${INSTALL_DATA} ${_DISTDIR}${DOCSDISTNAME}-refman.pdf ${STAGEDIR}${DOCSDIR}
199 .endif
200
201 # Fix permissions for ld.conf
202         @${CHMOD} 644 ${STAGEDIR}${PREFIX}/lib/ocaml/ld.conf
203
204 .include <bsd.port.post.mk>