freebsd-ports/lang/mlton/Makefile
Timothy Beyer 042847b1b4 lang/mlton: Update to 20210816
and fix build for FreeBSD 12 and 13.

PR:		259261
2021-10-20 16:42:18 +09:00

218 lines
7.1 KiB
Makefile

# Created by: Stephen Weeks <sweeks@sweeks.com>
# Previously maintained by Jesper Louis Andersen
# (jesper.louis.andersen@gmail.com) and Geoffrey Mainland
# (mainland@apeiron.net)
#
# Because MLton is written in SML, it needs an SML compiler to build.
# It is easiest to use another (earlier) binary version of MLton as
# the SML compiler. So, this Makefile fetches and installs an
# already-built version of MLton, BOOT_DIST, to use for bootstrapping.
PORTNAME= mlton
PORTVERSION= 20210816
CATEGORIES= lang
MASTER_SITES+= https://github.com/beyert/mlton-freebsd_bootstrap/raw/c7371c1/:bootstrap
DISTFILES+= ${BOOTNAME}.i386-${OPSYS:tl}-13.txz:bootstrap \
${BOOTNAME}.amd64-${OPSYS:tl}-13.txz:bootstrap \
${BOOTNAME}.i386-${OPSYS:tl}-12.txz:bootstrap \
${BOOTNAME}.amd64-${OPSYS:tl}-12.txz:bootstrap \
${BOOTNAME}.i386-${OPSYS:tl}-11.txz:bootstrap \
${BOOTNAME}.amd64-${OPSYS:tl}-11.txz:bootstrap
MAINTAINER= beyert@cs.ucr.edu
COMMENT= Optimizing Standard ML compiler
LICENSE= HPND
LICENSE_GROUPS= COPYFREE OSI
LICENSE_NAME= Historical Permission Notice and Disclaimer
LICENSE_FILE= ${WRKSRC}/LICENSE
LICENSE_PERMS= ${_LICENSE_PERMS_DEFAULT}
ONLY_FOR_ARCHS= amd64 i386
BUILD_DEPENDS= bash:shells/bash
LIB_DEPENDS= libgmp.so:math/gmp
RUN_DEPENDS= bash:shells/bash
USES= compiler:c11 gmake
BOOTNAME= ${BOOTNAMEPREFIX}${PORTNAME}${BOOTNAMESUFFIX}-${BOOTVERSIONPREFIX}${BOOTVERSION}${BOOTVERSIONSUFFIX}
BOOTVERSIONSUFFIX=
BOOTVERSION= ${PORTVERSION}
BOOTOSMAJ= ${OSREL:R}
OPTIONS_DEFINE= DOCS EXAMPLES
OPTIONS_SINGLE= TARGET BOOTSTRAP
OPTIONS_SINGLE_TARGET= NATIVE MINGW32
OPTIONS_SINGLE_BOOTSTRAP= MLTON SMLNJ POLYML WINE
OPTIONS_DEFAULT= NATIVE MLTON
MLTON_DESC= Bootstrap with MLton (ideal if supported)
SMLNJ_DESC= Bootstrap with SML/NJ (can take many hours)
POLYML_DESC= Bootstrap with PolyML
WINE_DESC= Bootstrap MINGW32 with wine
NATIVE_DESC= Use default target for given architecture
MINGW32_DESC= Add mingw32 Windows target (requires wine)
.include <bsd.port.options.mk>
.if ${PORT_OPTIONS:MMINGW32}
BROKEN+= not yet implemented MINGW32 option in modern versions of ${PORTNAME}
.endif
BOOT_WRKSRC= ${WRKSRC}/build
BOOT_WRKTMP= ${WRKDIR}/mlton-bootstrap
.if ! ${PORT_OPTIONS:MMLTON}
MAKE_ARGS= DESTDIR='' MLTON_VERSION=${PORTVERSION} \
PATH=${WRKSRC}/build/bin:${WRKDIR}/bin:${PATH} \
PREFIX=${PREFIX} \
WITH_GMP_DIR=${PREFIX}
.else
MAKE_ARGS= DESTDIR='' MLTON_VERSION=${PORTVERSION} \
PATH=${WRKSRC}/build/bin:${BOOT_WRKSRC}/bin:${PATH} \
PREFIX=${PREFIX} \
SML_LIB=${BOOT_WRKSRC}/lib/sml WITH_GMP_DIR=${PREFIX} \
PREFIX=${PREFIX} LIB=${BOOT_WRKSRC}/lib \
TDOC=${STAGEDIR}${DOCSDIR} \
TEXM=${STAGEDIR}${EXAMPLESDIR}
.endif
.if ${PORT_OPTIONS:MDOCS}
BUILD_DEPENDS+= htmldoc:textproc/htmldoc
MAKE_ARGS+= MLTON_BINARY_RELEASE_WITH_DOCS=true
#USE_TEX= latex:build
USE_TEX= latex:formats
INSTALL_TARGET= install-docs install
ALL_TARGET= install-docs all
.else
MAKE_ARGS+= MLTON_BINARY_RELEASE_WITH_DOCS=false
INSTALL_TARGET= install
ALL_TARGET= all
.endif
.if ${PORT_OPTIONS:MSMLNJ}
BUILD_DEPENDS+= smlnj>=110.65:lang/smlnj
BOOT_DIST=
MAKE_JOBS_UNSAFE= yes
MAKE_ENV+= SMLNJ_DEVEL=yes
.if ! ${PORT_OPTIONS:MDOCS}
ALL_TARGET= smlnj-mlton all
.else
ALL_TARGET= smlnj-mlton install-docs all
.endif
.elif ${PORT_OPTIONS:MPOLYML}
BUILD_DEPENDS+= polyc:lang/polyml
BOOT_DIST=
MAKE_JOBS_UNSAFE= yes
#CPPFLAGS+= -L/usr/local/lib -lpolyml -lpolymain
#LDFLAGS+= -L/usr/local/lib -lpolyml -lpolymain
.if ! ${PORT_OPTIONS:MDOCS}
ALL_TARGET= polyml-mlton all
.else
ALL_TARGET= polyml-mlton install-docs all
.endif
.elif ${PORT_OPTIONS:MNATIVE}
BOOT_DIST= ${BOOTNAME}.${ARCH}-${OPSYS:tl}-${BOOTOSMAJ}.txz
.else
BOOT_DIST=
.endif
BOOT_DIST_NEW= ${PKGNAME}${DISTVERSIONSUFFIX}.${ARCH}-${OPSYS:tl}-${OSREL:R}-${HOST}${BOOT_SUFX}
.if ${PORT_OPTIONS:MMINGW32} && ${PORT_OPTIONS:MWINE}
BUILD_DEPENDS+= wine:emulators/wine \
mingw32-gcc:devel/mingw32-gcc \
${LOCALBASE}/mingw32/lib/libgmp.a:math/mingw32-libgmp
RUN_DEPENDS+= mingw32-gcc:devel/mingw32-gcc \
${LOCALBASE}/mingw32/lib/libgmp.a:math/mingw32-libgmp
SSP_CFLAGS?= -fstack-protector # XXX -strong isn't supported by GCC < 4.9
PLIST_SUB+= MINGW32CROSS=""
.else
PLIST_SUB+= MINGW32CROSS="@comment "
.endif
USE_GITHUB= yes
GH_ACCOUNT= MLton
GH_PROJECT= mlton
GH_TAGNAME= b2fca3d
BOOT_CMD= --xz
BOOT_SUFX= .txz
post-extract:
@${MKDIR} ${BOOT_WRKSRC}
.if ${PORT_OPTIONS:MMLTON}
@${TAR} xf ${DISTDIR}/${BOOT_DIST} ${BOOT_CMD} -C ${BOOT_WRKSRC}
@${REINPLACE_CMD} \
's|/usr/local/lib/mlton|${BOOT_WRKSRC}/lib/mlton|g' \
${BOOT_WRKSRC}/bin/mlton
@${REINPLACE_CMD} 's|$$gcc|$$CC|g' ${BOOT_WRKSRC}/bin/mlton
.endif
@${REINPLACE_CMD} 's/CC := cc/CC := ${CC}/g' ${WRKSRC}/Makefile.config
@${REINPLACE_CMD} 's|gcc|${CC}|g' ${WRKSRC}/doc/examples/ffi/Makefile
@${REINPLACE_CMD} \
's|-lpolymain -lpolyml|-L ${PREFIX}/lib -lpolymain -lpolyml|g' \
${WRKSRC}/mlton/Makefile
.if ${PORT_OPTIONS:MDOCS}
@${MKDIR} ${STAGEDIR}${EXAMPLESDIR}
.endif
.if ${ARCH} == "i386"
.if ${OSREL:R} == 13
@${REINPLACE_CMD} -e 's/ram-slop 0\.7/ram-slop 0.8/' \
-e 's|COMPILE_XARGS :=|COMPILE_XARGS := -polyvariance false|' \
${WRKSRC}/mlton/Makefile
.else
@${REINPLACE_CMD} -e 's/ram-slop 0\.7/ram-slop 0.7/' \
-e 's|COMPILE_XARGS :=|COMPILE_XARGS := -polyvariance false|' \
${WRKSRC}/mlton/Makefile
.endif
@${REINPLACE_CMD} -e 's/ram-slop 0\.7/ram-slop 0.8/' \
-e 's|^OLD_MLTON_RUNTIME_ARGS :=|OLD_MLTON_RUNTIME_ARGS := ram-slop 0.8|' \
-e 's|^OLD_MLTON_COMPILE_ARGS :=|OLD_MLTON_COMPILE_ARGS := -polyvariance false|' \
${WRKSRC}/Makefile.config
.endif
@${REINPLACE_CMD} 's|gcc|${CC}|g' ${WRKSRC}/mlnlffigen/gen-cppcmd
@${REINPLACE_CMD} 's|"cc"|"${CC}"|g' ${WRKSRC}/bin/mlton-script
@${FIND} ${WRKDIR} | ${GREP} '\.bak$$' | ${AWK} '{ system("${RM} "$$0); }'
post-install:
.if ${PORT_OPTIONS:MDOCS} && ${PORT_OPTIONS:MEXAMPLES}
${MV} ${STAGEDIR}${DOCSDIR}/examples/* ${STAGEDIR}${EXAMPLESDIR}/
.elif ${PORT_OPTIONS:MDOCS}
${RM} -r ${STAGEDIR}${DOCSDIR}/examples
${RMDIR} ${STAGEDIR}${EXAMPLESDIR}
.elif ${PORT_OPTIONS:MEXAMPLES}
# ${MV} ${STAGEDIR}${DOCSDIR}/examples/* ${STAGEDIR}${EXAMPLESDIR}/
# ${RM} -r ${STAGEDIR}${DOCSDIR}
BROKEN+= In port ${PORTNAME}, EXAMPLES requires DOCS
.endif
@${FIND} ${WRKDIR} | ${GREP} '\.bak$$' | ${AWK} '{ system("${RM} "$$0); }'
makebootstrap: all
@${ECHO_MSG} "====> Making new bootstrap image (${BOOT_DIST_NEW})"
# @${FIND} ${WRKDIR} | ${GREP} '\.bak$$' | ${AWK} '{ system("${RM} "$$0); }'
@${MKDIR} ${BOOT_WRKTMP}
@cd ${STAGEDIR}${PREFIX} && ${CP} -pR lib bin ${BOOT_WRKTMP}/
@${MKDIR} ${BOOT_WRKTMP}/doc && cd ${WRKSRC}/doc && \
${CP} -pR license README.adoc CHANGELOG.adoc ${BOOT_WRKTMP}/doc/
@cd ${WRKSRC} && ${CP} -pR LICENSE README.adoc CHANGELOG.adoc \
${BOOT_WRKTMP}/
@cd ${BOOT_WRKTMP} && \
${TAR} cfp ${BOOT_WRKTMP}/${BOOT_DIST_NEW} ${BOOT_CMD} \
lib bin doc LICENSE README.adoc CHANGELOG.adoc
@${ECHO_MSG} "====> Installing new bootstrap image (${BOOT_DIST_NEW})"
@${CP} -p ${BOOT_WRKTMP}/${BOOT_DIST_NEW} ${DISTDIR}/
@${ECHO_MSG} "====> Backing up new bootstrap image (${BOOT_DIST_NEW})"
@${MV} ${BOOT_WRKTMP}/${BOOT_DIST_NEW} ${MASTERDIR}/
## @${RMDIR} ${BOOT_WRKTMP}
post-build-MINGW32-on:
@${ECHO} Adding mingw32 target...
${WRKSRC}/bin/add-local-cross mingw32 x86 mingw
.include <bsd.port.mk>