aboutsummaryrefslogtreecommitdiff
path: root/lang/modula3
diff options
context:
space:
mode:
authorJohn Marino <marino@FreeBSD.org>2014-01-02 02:34:47 +0000
committerJohn Marino <marino@FreeBSD.org>2014-01-02 02:34:47 +0000
commitc1690246803ee3d6fa1a38815cc07e828656c365 (patch)
treead72cf66958caa3bc816004e88e896448ce6c587 /lang/modula3
parent8d7342b8a5a26d6ca5395ff16e4768e4cda23e41 (diff)
downloadports-c1690246803ee3d6fa1a38815cc07e828656c365.tar.gz
ports-c1690246803ee3d6fa1a38815cc07e828656c365.zip
Notes
Diffstat (limited to 'lang/modula3')
-rw-r--r--lang/modula3/Makefile166
-rw-r--r--lang/modula3/distinfo4
-rw-r--r--lang/modula3/files/patch-m3-comm_tcp_src_POSIX_IP.m323
-rw-r--r--lang/modula3/files/patch-m3-libs_m3core_src_unix_Common_Unetdb.c39
-rw-r--r--lang/modula3/files/patch-m3-sys_m3cc_gcc_configure35
-rw-r--r--lang/modula3/files/patch-scripts_pkgcmds.sh11
-rw-r--r--lang/modula3/pkg-descr12
7 files changed, 290 insertions, 0 deletions
diff --git a/lang/modula3/Makefile b/lang/modula3/Makefile
new file mode 100644
index 000000000000..70a848aa3c58
--- /dev/null
+++ b/lang/modula3/Makefile
@@ -0,0 +1,166 @@
+# Created by: marino@FreeBSD.org
+# $FreeBSD$
+
+PORTNAME= modula3
+PORTVERSION= 5.8.6
+CATEGORIES= lang
+MASTER_SITES= https://modula3.elegosoft.com/cm3/releng/ \
+ http://download.dragonlace.net/m3/ \
+ http://download.dragonlace.net/m3/:boot
+DISTFILES= ${SRCDISTFILE} ${BOOTDIST}
+
+MAINTAINER= marino@FreeBSD.org
+COMMENT= Critical Mass Modula-3 compiler
+
+LIB_DEPENDS= libodbc.so:${PORTSDIR}/databases/libiodbc
+
+NEWBOOTDIR= ${WRKDIR}/new-bootstrap/bootstrap
+SRCDISTFILE= cm3-src-all-${PORTVERSION}-REL.tgz
+DST1= m3-bootstrap.AMD64.FREEBSD.92.tar.bz2:boot
+DST2= m3-bootstrap.x86_64.DRAGONFLY.36.tar.bz2:boot
+
+ONLY_FOR_ARCHS= amd64
+CONFLICTS_INSTALL= cvsup-*
+
+USES= gmake
+USE_PGSQL= yes
+USE_XORG= xaw xmu xext xt sm ice x11
+USE_GL= gl glu
+NO_MTREE= yes
+
+MAKE_ENV+= CM3_INSTALL="${STAGEDIR}${PREFIX}" \
+ CM3_DEBUG=yes \
+ M3_PORTABLE_RUN_PATH=yes
+BOOTCM3= CM3="${WRKDIR}/bootstrap/bin/cm3"
+BUILTCM3= CM3="${STAGEDIR}${PREFIX}/bin/cm3"
+BSCONTENTS= bin/cm3 bin/cm3cg bin/m3bundle bin/mklib etc/modula3 \
+ lib/libm3core.* lib/libm3.* lib/libsysutils.* \
+ lib/libpatternmatching.* pkg/m3core pkg/libm3 pkg/sysutils \
+ pkg/patternmatching pkg/m3middle pkg/m3objfile pkg/m3linker \
+ pkg/m3back pkg/m3front pkg/m3quake pkg/cm3 pkg/mklib
+
+.include <bsd.port.pre.mk>
+
+M3MAKE_ENV= ${MAKE_ENV:C/^LDFLAGS=.*//:C/^CPPFLAGS=.*//}
+
+# for port maintenance, invoke "make makesum PLUS_BOOTSTRAPS=1"
+.if defined(PLUS_BOOTSTRAPS)
+DISTFILES= ${SRCDISTFILE} ${DST1} ${DST2}
+.else
+
+. if ${OPSYS} == FreeBSD
+BOOTDIST= ${DST1}
+MARCH= AMD64
+. endif
+
+. if ${OPSYS} == DragonFly
+IGNORE= modula-3 has not adapted to DragonFly yet
+BOOTDIST= ${DST2}
+MARCH= x86_64
+. endif
+
+NEWBOOTNAME= m3-bootstrap.${MARCH}.${OPSYS:U}.${OSREL:S/.//}.tar.bz2
+M3TARGET= ${MARCH}_${OPSYS:U}
+.endif
+
+do-extract:
+ @${RM} -rf ${WRKDIR}
+ @${MKDIR} ${WRKSRC}
+ @(cd ${WRKSRC} && tar -xf ${DISTDIR}/${SRCDISTFILE})
+ @(cd ${WRKDIR} && tar -xf ${DISTDIR}/${BOOTDIST:C/:[^:]+$//})
+
+post-patch:
+ @${REINPLACE_CMD} -e 's|/usr/local|${PREFIX}|g' \
+ -e 's|\\\\$$ORIGIN"|${PREFIX}/lib"|' \
+ ${WRKSRC}/m3-sys/cminstall/src/config-no-install/FreeBSD.common
+ @${REINPLACE_CMD} -e 's|/usr/X11R6|${PREFIX}|g' \
+ ${WRKSRC}/m3-sys/cminstall/src/config-no-install/Unix.common
+
+do-bootstrap:
+ @(cd ${WRKSRC}; ${SETENV} ${M3MAKE_ENV} ${BOOTCM3} SHIP=${TRUE} \
+ ${SH} scripts/boot-cm3-with-m3.sh onlybuild)
+ @${FIND} ${WRKSRC} -name \.M3SHIP -print | ${XARGS} ${SED} -i -e \
+ 's|/bootstrap/|/stage${PREFIX}/|g'
+ @(cd ${WRKSRC}; ${SETENV} ${M3MAKE_ENV} ${BOOTCM3} \
+ ${SH} scripts/boot-cm3-with-m3.sh ship)
+ (cd ${WRKSRC}/m3-sys/cminstall/src/config-no-install && \
+ ${COPYTREE_SHARE} . ${STAGEDIR}${PREFIX}/etc/modula3)
+ ${INSTALL_PROGRAM} ${WRKSRC}/m3-sys/cm3/${M3TARGET}/cm3 \
+ ${STAGEDIR}${PREFIX}/bin
+ ${ECHO} "INSTALL_ROOT = \"${STAGEDIR}${PREFIX}\"" > \
+ ${STAGEDIR}${PREFIX}/bin/cm3.cfg
+ ${ECHO} "include(\"${STAGEDIR}${PREFIX}/etc/modula3/${M3TARGET}\")" >> \
+ ${STAGEDIR}${PREFIX}/bin/cm3.cfg
+ @(cd ${WRKSRC}; ${SETENV} ${M3MAKE_ENV} ${BOOTCM3} \
+ ${SH} scripts/boot-cm3-with-m3.sh cleanglobal)
+ @${ECHO} "======================================"
+ @${ECHO} "===== M3 compiler bootstrapped ====="
+ @${ECHO} "======================================"
+ @${ECHO}
+
+do-build: do-bootstrap
+ @(cd ${WRKSRC}; ${SETENV} ${M3MAKE_ENV} ${BUILTCM3} \
+ ${SH} scripts/do-cm3-min.sh buildship)
+ @(cd ${WRKSRC}; ${SETENV} ${M3MAKE_ENV} ${BUILTCM3} \
+ ${SH} scripts/do-cm3-std.sh buildship)
+ @(cd ${WRKSRC}; ${SETENV} ${M3MAKE_ENV} ${BUILTCM3} \
+ ${SH} scripts/do-cm3-caltech-parser.sh buildship)
+
+do-install:
+ ${FIND} ${STAGEDIR}${PREFIX}/pkg -type f -perm +111 -not -name cm3 | \
+ ${XARGS} ${CHMOD} -x
+ ${ECHO} "INSTALL_ROOT = \"${PREFIX}\"" > \
+ ${STAGEDIR}${PREFIX}/bin/cm3.cfg
+ ${ECHO} "include(\"${PREFIX}/etc/modula3/${M3TARGET}\")" >> \
+ ${STAGEDIR}${PREFIX}/bin/cm3.cfg
+ ${MKDIR} ${STAGEDIR}${PREFIX}/share/examples/bin \
+ ${STAGEDIR}${PREFIX}/share/doc
+ ${MV} ${STAGEDIR}${PREFIX}/examples \
+ ${STAGEDIR}${PREFIX}/share/examples/modula3
+ ${MV} ${STAGEDIR}${PREFIX}/www ${STAGEDIR}${PREFIX}/share/doc/modula3
+ ${MV} ${STAGEDIR}${PREFIX}/bin/Cube \
+ ${STAGEDIR}${PREFIX}/bin/Calculator \
+ ${STAGEDIR}${PREFIX}/bin/fisheye \
+ ${STAGEDIR}${PREFIX}/share/examples/bin
+
+# The pkg-plist is well over 6000 entries, so let's just autogen it instead
+post-install:
+ cd ${STAGEDIR}${PREFIX}; ${FIND} * \( -type f -or -type l \) | \
+ ${SORT} | ${SED} -e 's/^man\/man[1578]\/.*[1578]$$/&.gz/' \
+ > ${TMPPLIST}
+ cd ${STAGEDIR}${PREFIX}; ${FIND} * -type d | ${SORT} -r | \
+ ${SED} -e '/^bin$$/d' -e '/^lib$$/d' -e '/^pkg$$/d' \
+ -e '/^share\/examples$$/d' -e '/^share\/doc$$/d' -e '/^share$$/d' \
+ -e '/^etc$$/d' -e '/^man\/man[1578]$$/d' -e '/^man$$/d' \
+ -e 's/^/@dirrm /g' >> ${TMPPLIST}
+ @echo "@unexec rmdir %D/share/doc 2>/dev/null || true" >> ${TMPPLIST}
+ @echo "@unexec rmdir %D/share/examples 2>/dev/null || true" >> ${TMPPLIST}
+ @echo "@unexec rmdir %D/share 2>/dev/null || true" >> ${TMPPLIST}
+ @echo "@unexec rmdir %D/bin 2>/dev/null || true" >> ${TMPPLIST}
+ @echo "@unexec rmdir %D/etc 2>/dev/null || true" >> ${TMPPLIST}
+ @echo "@unexec rmdir %D/lib 2>/dev/null || true" >> ${TMPPLIST}
+ @echo "@unexec rmdir %D/man/man8 2>/dev/null || true" >> ${TMPPLIST}
+ @echo "@unexec rmdir %D/man/man7 2>/dev/null || true" >> ${TMPPLIST}
+ @echo "@unexec rmdir %D/man/man5 2>/dev/null || true" >> ${TMPPLIST}
+ @echo "@unexec rmdir %D/man/man1 2>/dev/null || true" >> ${TMPPLIST}
+ @echo "@unexec rmdir %D/man 2>/dev/null || true" >> ${TMPPLIST}
+ @echo "@unexec rmdir %D/pkg 2>/dev/null || true" >> ${TMPPLIST}
+
+# to create a new bootstrap, invoke "make stage NEW_BOOTSTRAP=1"
+.if defined(NEW_BOOTSTRAP)
+post-stage:
+ @${RM} -rf ${NEWBOOTDIR}
+ @${MKDIR} ${NEWBOOTDIR}/bin ${NEWBOOTDIR}/lib \
+ ${NEWBOOTDIR}/pkg ${NEWBOOTDIR}/etc
+.for X in ${BSCONTENTS}
+ @${CP} -a ${STAGEDIR}${PREFIX}/${X} ${NEWBOOTDIR}/${X:H}/
+.endfor
+ ${ECHO} "INSTALL_ROOT = path() & \"/..\"" \
+ > ${NEWBOOTDIR}/bin/cm3.cfg
+ ${ECHO} "include(path() & \"/../etc/modula3/${M3TARGET}\")" \
+ >> ${NEWBOOTDIR}/bin/cm3.cfg
+ @${FIND} ${NEWBOOTDIR} -type f -perm +111 | ${XARGS} ${STRIP_CMD}
+ (cd ${NEWBOOTDIR}/.. ; tar -cyf ${NEWBOOTNAME} bootstrap)
+.endif
+
+.include <bsd.port.post.mk>
diff --git a/lang/modula3/distinfo b/lang/modula3/distinfo
new file mode 100644
index 000000000000..f24037c8d78f
--- /dev/null
+++ b/lang/modula3/distinfo
@@ -0,0 +1,4 @@
+SHA256 (cm3-src-all-5.8.6-REL.tgz) = ef94f9a5f2a4413a1e544ae94233fb0f475db0be21af652b05f7d8c944b38d78
+SIZE (cm3-src-all-5.8.6-REL.tgz) = 89649351
+SHA256 (m3-bootstrap.AMD64.FREEBSD.92.tar.bz2) = b0396c9048876110683e915b773480fd0717ce3a376e518dae2f9093f18253a1
+SIZE (m3-bootstrap.AMD64.FREEBSD.92.tar.bz2) = 9983846
diff --git a/lang/modula3/files/patch-m3-comm_tcp_src_POSIX_IP.m3 b/lang/modula3/files/patch-m3-comm_tcp_src_POSIX_IP.m3
new file mode 100644
index 000000000000..338a36745e0d
--- /dev/null
+++ b/lang/modula3/files/patch-m3-comm_tcp_src_POSIX_IP.m3
@@ -0,0 +1,23 @@
+--- m3-comm/tcp/src/POSIX/IP.m3.orig 2009-03-09 16:55:46.000000000 +0000
++++ m3-comm/tcp/src/POSIX/IP.m3
+@@ -77,6 +77,8 @@ PROCEDURE GetAddress (ent: Unetdb.struct
+ PROCEDURE GetHostAddr(): Address =
+ VAR hname: ARRAY [0..255] OF CHAR;
+ hostent: Unetdb.struct_hostent;
++ lochost := ARRAY [0..9] OF CHAR {'1', '2', '7', '.', '0', '.', '0',
++ '.', '1', '\000'};
+ BEGIN
+ LOCK mu DO
+ IF Unix.gethostname(ADR(hname[0]), BYTESIZE(hname)) # 0 THEN
+@@ -84,7 +86,10 @@ PROCEDURE GetHostAddr(): Address =
+ END;
+ VAR h := Unetdb.gethostbyname(ADR(hname[0]), ADR(hostent));
+ BEGIN
+- IF h = NIL THEN IPError.Die(); END;
++ IF h = NIL THEN
++ h := Unetdb.gethostbyname(ADR(lochost[0]), ADR(hostent));
++ IF h = NIL THEN IPError.Die(); END;
++ END;
+ RETURN GetAddress(h);
+ END;
+ END;
diff --git a/lang/modula3/files/patch-m3-libs_m3core_src_unix_Common_Unetdb.c b/lang/modula3/files/patch-m3-libs_m3core_src_unix_Common_Unetdb.c
new file mode 100644
index 000000000000..03aa6996086c
--- /dev/null
+++ b/lang/modula3/files/patch-m3-libs_m3core_src_unix_Common_Unetdb.c
@@ -0,0 +1,39 @@
+--- m3-libs/m3core/src/unix/Common/Unetdb.c.orig 2010-04-04 11:59:31.000000000 +0000
++++ m3-libs/m3core/src/unix/Common/Unetdb.c
+@@ -35,23 +35,31 @@ struct _m3_hostent_t
+ static m3_hostent_t* native_to_m3(const hostent_t* native, m3_hostent_t* m3)
+ {
+ if (native == NULL)
++ {
+ return NULL;
+- m3->name = native->h_name;
+- m3->aliases = native->h_aliases;
+- m3->addrtype = native->h_addrtype;
+- m3->length = native->h_length;
+- m3->addr_list = native->h_addr_list;
++ }
++ else
++ {
++ m3->name = native->h_name;
++ m3->aliases = native->h_aliases;
++ m3->addrtype = native->h_addrtype;
++ m3->length = native->h_length;
++ m3->addr_list = native->h_addr_list;
++ }
++ Scheduler__EnableSwitching();
+ return m3;
+ }
+
+ m3_hostent_t* Unetdb__gethostbyname(const char* name, m3_hostent_t* m3)
+ {
++ Scheduler__DisableSwitching();
+ return native_to_m3(gethostbyname(name), m3);
+ }
+
+ m3_hostent_t*
+ Unetdb__gethostbyaddr(const char* addr, int len, int type, m3_hostent_t* m3)
+ {
++ Scheduler__DisableSwitching();
+ return native_to_m3(gethostbyaddr(addr, len, type), m3);
+ }
+
diff --git a/lang/modula3/files/patch-m3-sys_m3cc_gcc_configure b/lang/modula3/files/patch-m3-sys_m3cc_gcc_configure
new file mode 100644
index 000000000000..f69503acdc44
--- /dev/null
+++ b/lang/modula3/files/patch-m3-sys_m3cc_gcc_configure
@@ -0,0 +1,35 @@
+--- m3-sys/m3cc/gcc/configure.orig 2008-04-14 04:36:00.000000000 +0000
++++ m3-sys/m3cc/gcc/configure
+@@ -2147,10 +2147,6 @@ case "${target}" in
+ ;;
+ *-*-freebsd*)
+ noconfigdirs="$noconfigdirs target-newlib target-libgloss"
+- if test "x$with_gmp" = x && test "x$with_gmp_dir" = x \
+- && test -f /usr/local/include/gmp.h; then
+- with_gmp=/usr/local
+- fi
+
+ # Skip some stuff that's unsupported on some FreeBSD configurations.
+ case "${target}" in
+@@ -4415,8 +4411,8 @@ if test "x$with_mpfr_lib" != x; then
+ gmplibs="-L$with_mpfr_lib $gmplibs"
+ fi
+ if test "x$with_mpfr$with_mpfr_include$with_mpfr_lib" = x && test -d ${srcdir}/mpfr; then
+- gmplibs='-L$$r/$(HOST_SUBDIR)/mpfr/.libs -L$$r/$(HOST_SUBDIR)/mpfr/_libs '"$gmplibs"
+- gmpinc='-I$$r/$(HOST_SUBDIR)/mpfr -I$$s/mpfr '"$gmpinc"
++ gmplibs='-L$$r/$(HOST_SUBDIR)/mpfr/.libs '"$gmplibs"
++ gmpinc='-I$$s/mpfr '"$gmpinc"
+ # Do not test the mpfr version. Assume that it is sufficient, since
+ # it is in the source tree, and the library has not been built yet
+ # but it would be included on the link line in the version check below
+@@ -4467,8 +4463,8 @@ if test "x$with_gmp_lib" != x; then
+ gmplibs="-L$with_gmp_lib $gmplibs"
+ fi
+ if test "x$with_gmp$with_gmp_include$with_gmp_lib" = x && test -d ${srcdir}/gmp; then
+- gmplibs='-L$$r/$(HOST_SUBDIR)/gmp/.libs -L$$r/$(HOST_SUBDIR)/gmp/_libs '"$gmplibs"
+- gmpinc='-I$$r/$(HOST_SUBDIR)/gmp -I$$s/gmp '"$gmpinc"
++ gmplibs='-L$$r/$(HOST_SUBDIR)/gmp/.libs '"$gmplibs"
++ gmpinc='-I$$r/$(HOST_SUBDIR)/gmp '"$gmpinc"
+ # Do not test the gmp version. Assume that it is sufficient, since
+ # it is in the source tree, and the library has not been built yet
+ # but it would be included on the link line in the version check below
diff --git a/lang/modula3/files/patch-scripts_pkgcmds.sh b/lang/modula3/files/patch-scripts_pkgcmds.sh
new file mode 100644
index 000000000000..c07c3beb432c
--- /dev/null
+++ b/lang/modula3/files/patch-scripts_pkgcmds.sh
@@ -0,0 +1,11 @@
+--- scripts/pkgcmds.sh.orig 2010-04-15 20:02:46.000000000 +0000
++++ scripts/pkgcmds.sh
+@@ -43,6 +43,8 @@ map_action() {
+ ACTION="${BUILDLOCAL}"
+ elif [ "$1" = "buildglobal" -o "$1" = "buildship" ] ; then
+ ACTION="${BUILDGLOBAL} && ${SHIP}"
++ elif [ "$1" = "onlybuild" ] ; then
++ ACTION="${BUILDGLOBAL}"
+ elif [ "$1" = "ship" ] ; then
+ ACTION="${SHIP}"
+ elif [ "$1" = "clean" -o "$1" = "cleanlocal" ] ; then
diff --git a/lang/modula3/pkg-descr b/lang/modula3/pkg-descr
new file mode 100644
index 000000000000..7515d74f79cf
--- /dev/null
+++ b/lang/modula3/pkg-descr
@@ -0,0 +1,12 @@
+Modula-3 is a systems programming language that descends from Mesa,
+Modula-2, Cedar, and Modula-2+. It also resembles its cousins Oberon,
+Object Pascal, and Euclid.
+
+Modula-3 retains one of Modula-2's most successful features, the provision
+of explicit interfaces between modules. It adds objects and classes,
+exception handling, garbage collection, lightweight processes (or threads),
+and the isolation of unsafe features.
+
+This is the Critical Mass implementation.
+
+WWW: http://www.modula3.org