summaryrefslogtreecommitdiff
path: root/lang/modula-3/Makefile
blob: 1c3a355f2a99b244a29a1fcfbdda103c80e433ea (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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
# New ports collection makefile for:	modula-3
# Version required:	3.6
# Date created:		18 Mar 1996
# Whom:			John Polstra <jdp@polstra.com>
#
# $Id: Makefile,v 1.4 1996/09/12 00:39:41 jdp Exp $
#

DISTNAME=	modula-3-3.6
CATEGORIES+=	lang
MASTER_SITES=	ftp://freefall.FreeBSD.ORG/pub/FreeBSD/LOCAL_PORTS/
DISTFILES=	m3-fbsd-src-3.6.tar.gz m3-fbsd-m3cc-3.6.tar.gz
# Note: Depending on what is already installed on the system, the code
# below may add some more DISTFILES.

MAINTAINER=	jdp@polstra.com

NO_WRKSUBDIR=	yes

# There are two distfiles that may or may not be needed, depending on
# what is already installed on the system.  First, we need an executable
# for the Modula-3 compiler, in order to compile the new compiler, which
# is written in Modula-3.  Often, there will already be such an executable
# installed on the system.  Second, we need many files from gcc-2.7.2.1.
# Often, we can find these in the system sources, under "/usr/src/contrib".
#
# This code tries to avoid fetching the distfiles, unless necessary.
# We look on the system to see whether the necessary files are present,
# and use those if we can.  If we cannot find the needed files, we
# fetch the distfiles.

# For the Modula-3 compiler, we look in ${PREFIX} and in /usr/local.
.ifdef PREFIX
have_boot!=	/bin/sh scripts/check_files files/T.boot installed ${PREFIX}
.else
have_boot=
.endif
.if empty(have_boot)
have_boot!=	/bin/sh scripts/check_files files/T.boot installed /usr/local
.endif
.if empty(have_boot)
DISTFILES+=	m3-fbsd-boot-3.6.tar.gz
.endif

# For gcc-2.7.2.1, we look in /usr/src/contrib.
have_gcc!=	/bin/sh scripts/check_files files/T.gcc m3cc /usr/src/contrib
.if empty(have_gcc)
DISTFILES+=	m3-fbsd-gcc-3.6.tar.gz
.endif

# Startup script, run at boot time
startup_dir=	${PREFIX}/etc/rc.d
startup_script=	${startup_dir}/m3.sh

# The Modula-3 build process insists on installing each individual
# component immediately after that component is built.  To avoid having
# to do the entire build as root, we arrange for everything to first
# be "installed" into the following directory, which we own.
temp_prefix=	${WRKDIR}/installed

# Some parts of the system depend on absolute pathnames into the
# installed tree.  Those parts have to be built after we have moved
# the tree to its final resting place.
late_builds=	m3configvars

post-extract:
	@${DO_NADA}
.if !empty(have_boot)
	@echo "Copying bootstrap modula-3 compiler from ${have_boot}"
	@/bin/sh ${SCRIPTDIR}/copy_files ${FILESDIR}/T.boot installed \
	    ${have_boot} ${WRKDIR}
.endif
.if !empty(have_gcc)
	@echo "Copying gcc sources from ${have_gcc}"
	@/bin/sh ${SCRIPTDIR}/copy_files ${FILESDIR}/T.gcc m3cc \
	    ${have_gcc} ${WRKDIR}
.endif

do-build:
	@test -d ${temp_prefix}/bin || mkdir -p ${temp_prefix}/bin
	@test -d ${temp_prefix}/man/man1 || mkdir -p ${temp_prefix}/man/man1
	@test -d ${temp_prefix}/lib/m3/pkg/m3build/templates || \
	    mkdir -p ${temp_prefix}/lib/m3/pkg/m3build/templates
	@echo "++++++++++ quake ++++++++++"
	@test -d ${WRKSRC}/m3/quake/FreeBSD2 || \
	    mkdir -p ${WRKSRC}/m3/quake/FreeBSD2
	@cd ${WRKSRC}/m3/quake/FreeBSD2; \
	    make -f ../src/makefile TARGET=FreeBSD2 COPT=-O CDEBUG= ; \
	    cp -p quake ${temp_prefix}/bin; \
	    cp -p ../src/quake.1 ${temp_prefix}/man/man1
	@echo "++++++++++ m3build ++++++++++"
	@cd ${WRKSRC}/m3/m3build; \
	    PATH=${temp_prefix}/bin:$$PATH ./build FreeBSD2; \
	    cp -p FreeBSD2/m3build FreeBSD2/m3ship FreeBSD2/m3where \
		${temp_prefix}/bin; \
	    cp -p FreeBSD2/m3mkdir ${temp_prefix}/lib/m3/FreeBSD2; \
	    cp -p templates/CLEANUP templates/COMMON templates/COMMON.BOOT \
		templates/FreeBSD2 templates/PLATFORMS templates/POSIX \
		${temp_prefix}/lib/m3/pkg/m3build/templates; \
	    cp -p FreeBSD2/m3build.1 FreeBSD2/m3ship.1 FreeBSD2/m3where.1 \
		${temp_prefix}/man/man1
	@echo "++++++++++ m3cc ++++++++++"
	@test -d ${WRKSRC}/m3cc/FreeBSD2 || mkdir -p ${WRKSRC}/m3cc/FreeBSD2
	@cd ${WRKSRC}/m3cc/FreeBSD2; \
	    ../gcc/configure i486-unknown-freebsd; \
	    make m3cgc1 CC=cc CFLAGS=-O; \
	    cp -p m3cgc1 ${temp_prefix}/lib/m3/FreeBSD2
	@echo "++++++++++ everything else ++++++++++"
	@cd ${WRKSRC}/m3; \
	    LD_LIBRARY_PATH=${temp_prefix}/lib/m3/FreeBSD2:$$LD_LIBRARY_PATH; \
	    PATH=${temp_prefix}/bin:$$PATH; \
	    export LD_LIBRARY_PATH PATH; \
	    m3build

pre-install:
	@echo "Checking for conflicting shared libraries"
	@PREFIX=${PREFIX} /bin/sh ${PKGDIR}/INSTALL ${PKGNAME} PRE-INSTALL

do-install:
	@echo "Deleting extraneous cruft"
	@cd ${temp_prefix}/lib/m3/pkg; \
	    rm -rf m3 m3front m3middle m3linker
	@cd ${temp_prefix}/lib/m3/FreeBSD2; \
	    rm -f libm3front.so.*.* libm3link.so.*.* libm3middle.so.*.*
	@echo "Setting permissions of installed files"
	@/usr/sbin/chown -R ${BINOWN}.${BINGRP} ${temp_prefix}/*
	@chmod -R go=u-w ${temp_prefix}/*
	@echo "Copying files to ${PREFIX}"
	@cp -R -P -p ${temp_prefix}/* ${PREFIX}
	@echo "Fixing absolute pathnames in installed files"
	@/bin/sh ${SCRIPTDIR}/fix_pathnames ${temp_prefix} ${PREFIX}
	@echo "Rebuilding and shipping m3build with correct pathnames"
	@cd ${WRKSRC}/m3/m3build; \
	    LD_LIBRARY_PATH=${PREFIX}/lib/m3/FreeBSD2:$$LD_LIBRARY_PATH; \
	    PATH=${PREFIX}/bin:$$PATH; \
	    export LD_LIBRARY_PATH PATH; \
	    umask 022; \
	    rm -rf FreeBSD2; \
	    mkdir FreeBSD2; \
	    cd FreeBSD2; \
	    quake -D_bootstrap -D_all -DPACKAGE_DIR=${WRKSRC}/m3/m3build \
		-DPACKAGE=m3build -DBUILD_DIR=FreeBSD2 \
		${PREFIX}/lib/m3/pkg/m3build/templates/FreeBSD2 \
		${WRKSRC}/m3/m3build/src/m3makefile; \
	    ./m3ship
	@for i in ${late_builds}; do \
	    echo "Building and shipping $${i}"; \
	    cd ${WRKSRC}/m3/$${i}; \
	    LD_LIBRARY_PATH=${PREFIX}/lib/m3/FreeBSD2:$$LD_LIBRARY_PATH; \
	    export LD_LIBRARY_PATH; \
	    PATH=${PREFIX}/bin:$$PATH; \
	    export PATH; \
	    umask 022; \
	    rm -rf FreeBSD2; \
	    m3build; \
	    m3ship; \
	    done
	@echo "Stripping executables"
	@cd ${temp_prefix}; \
	    find bin -type f ! -name recordheap | (cd ${PREFIX}; xargs strip)
	@cd ${PREFIX}/lib/m3/FreeBSD2; strip m3 m3cgc1 m3mkdir
.if !defined(NOMANCOMPRESS)
	@echo "Compressing manual pages"
	@cd ${temp_prefix}; \
	    find man -type f | (cd ${PREFIX}; xargs gzip -9nf)
.endif
	@if [ ! -f ${startup_script} ]; then \
	    echo "Installing ${startup_script} file"; \
	    test -d ${startup_dir} || mkdir -p ${startup_dir}; \
	    echo "#!/bin/sh" > ${startup_script}; \
	    echo "echo -n ' Modula-3'" >> ${startup_script}; \
	    echo "/sbin/ldconfig -m ${PREFIX}/lib/m3/FreeBSD2" >> \
		    ${startup_script}; \
	    chmod 755 ${startup_script}; \
	fi
	@echo "Running ldconfig"
	@/sbin/ldconfig -m ${PREFIX}/lib/m3/FreeBSD2

.include <bsd.port.mk>