summaryrefslogtreecommitdiff
path: root/lang/smlnj/Makefile
blob: b9d9a277884313cae7ec88af218c324aa87716d9 (plain)
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
142
143
144
145
# $NetBSD: Makefile,v 1.31 2016/07/03 19:21:44 dholland Exp $
#

DISTNAME=	boot.${BOX}-unix
PKGNAME=	smlnj-${SML_VERSION}
CATEGORIES=	lang
MASTER_SITES=	http://smlnj.cs.uchicago.edu/dist/working/${SML_VERSION}/
DISTFILES=	MLRISC.tgz			\
		boot.${BOX}-unix.tgz		\
		ckit.tgz			\
		cm.tgz				\
		cml.tgz				\
		compiler.tgz			\
		config.tgz			\
		eXene.tgz			\
		ml-burg.tgz			\
		ml-lex.tgz			\
		nlffi.tgz			\
		ml-yacc.tgz			\
		runtime.tgz			\
		smlnj-lib.tgz			\
		system.tgz			\
		ml-lpt.tgz			\
		pgraph.tgz			\
		trace-debug-profile.tgz		\
		heap2asm.tgz			\
		smlnj-c.tgz

MAINTAINER=	richards+netbsd@CS.Princeton.EDU
HOMEPAGE=	http://www.smlnj.org/index.html
COMMENT=	Popular functional language from Bell Labs

SML_VERSION=	110.73
PKGREVISION=	1

WRKSRC=		${WRKDIR}
DIST_SUBDIR=	smlnj-${SML_VERSION}
USE_TOOLS+=	gmake pax

# previous versions of the package had an additional '-'
CONFLICTS=	sml-nj-[0-9]*

SML_BASE=	${PREFIX}/lib/smlnj
SML_LIBDIR=	${SML_BASE}/lib
SML_BINDIR=	${SML_BASE}/bin
SML_SCRIPTS=	_link-sml _run-sml _ml-build _ml-makedepend

# while building, the work directory is the "installation"
BUILD_ENV+=	SMLNJ_HOME="${WRKDIR}"

# the build uses patch directly (yuk)
BUILD_ENV+=	PATCH=${PATCH:Q} PATCH_ARGS=${PATCH_ARGS:Q}

# note that this includes bsd.prefs.mk
.include "../../lang/smlnj/Makefile.common"

#
# For smlnj reasons the runtime system needs to be unpacked twice, once
# in work/src and once in work/base.
#
# As of 20160624, instead of inconsistently patching one copy or the
# other and hoping, or patching both and duplicating all the patches,
# we'll patch only work/src, and then *after* patching clone work/src
# into work/base.
#

# create parent directories for the runtime system
pre-extract:
	${MKDIR} ${WRKDIR}/src || ${TRUE}
	${MKDIR} ${WRKDIR}/base || ${TRUE}

# make it easier to patch the runtime system
do-extract:
	${RUN} extract_file="${_DISTDIR}/config.tgz";	\
		export extract_file;			\
		cd ${WRKDIR}; ${EXTRACT_CMD}
	${RUN} extract_file="${_DISTDIR}/runtime.tgz";	\
		export extract_file;			\
		cd ${WRKDIR}/src; ${EXTRACT_CMD}

# symlink the rest of the distfiles
post-extract:
	cd ${WRKDIR} && ${LN} -sf ${_DISTDIR}/* .

# make the necessary copy of the runtime, _after_ patching src
post-patch:
	cd ${WRKDIR}/src && pax -rw runtime ${WRKDIR}/base/

# Turn of nlffi on powerpc (I guess it doesn't work?)
#
# XXX: this switch doesn't work any more as the line in question doesn't
# exist in the current version. Someone with a PPC build machine,
# please check it out and either change it to match the file if still
# needed, or get rid of it.
.if ${MACHINE_ARCH} == "powerpc"
SUBST_CLASSES+=		nlffi
SUBST_STAGE.nlffi=	pre-configure
SUBST_MESSAGE.nlffi=	Turning off nlffi
SUBST_FILES.nlffi=	config/targets
SUBST_SED.nlffi=	-e '/^request nlffi$$/d'
.endif # powerpc

# resolve definition of SML_BASE
SUBST_CLASSES+=		smlbase
SUBST_STAGE.smlbase=	pre-configure
SUBST_MESSAGE.smlbase=	Setting SML_BASE
SUBST_FILES.smlbase=	${SML_SCRIPTS:S/^/config\//}
SUBST_VARS.smlbase=	SML_BASE

# resolve definition of CFLAGS in patched files
# (note that we need to do this in both src/runtime and base/runtime)
SUBST_CLASSES+=		cflags
SUBST_STAGE.cflags=	pre-configure
SUBST_MESSAGE.cflags=	Setting CFLAGS
SUBST_FILES.cflags=	src/runtime/objs/* base/runtime/objs/*
SUBST_VARS.cflags=	CFLAGS

# use the proper shell
SUBST_CLASSES+=		shell
SUBST_STAGE.shell=	pre-configure
SUBST_MESSAGE.shell=	Choosing the right shell
SUBST_FILES.shell=	config/install.sh
SUBST_VARS.shell=	CONFIG_SHELL

# nothing here any more
do-configure:
	${DO_NADA}

# The build target needs to run $WRKDIR/config/install.sh
do-build:
	cd ${WRKDIR} && unset PWD && ${SETENV} ${BUILD_ENV} \
		${CONFIG_SHELL} ./config/install.sh

# install target
# (see ftp://ftp.research.bell-labs.com/dist/smlnj/working/110.38/INSTALL)
# 1. create installation directories
# 2. copy the ./bin and ./lib directories across
# 3. install links to executables in $PREFIX/bin
INSTALLATION_DIRS=	bin
do-install:
	${INSTALL_DATA_DIR} ${DESTDIR}${SML_BASE}
	cd ${WRKDIR} && pax -rw -pam bin lib ${DESTDIR}${SML_BASE}
	cd ${DESTDIR}${PREFIX}/bin && ${LN} -sf ../lib/smlnj/bin/* .

.include "../../mk/bsd.pkg.mk"