aboutsummaryrefslogtreecommitdiff
path: root/lang/sml-nj
diff options
context:
space:
mode:
authorJoseph Koshy <jkoshy@FreeBSD.org>2007-08-27 15:24:48 +0000
committerJoseph Koshy <jkoshy@FreeBSD.org>2007-08-27 15:24:48 +0000
commitad03a35ec866b42af7e53b20599ddee5d5816f5d (patch)
tree3301790dbac2c5ae4a1a65c4747a3b0aa50d0e26 /lang/sml-nj
parent93e3d458ea02ae2c145159e5767968d5bc59b522 (diff)
downloadports-ad03a35ec866b42af7e53b20599ddee5d5816f5d.tar.gz
ports-ad03a35ec866b42af7e53b20599ddee5d5816f5d.zip
Notes
Diffstat (limited to 'lang/sml-nj')
-rw-r--r--lang/sml-nj/Makefile29
-rw-r--r--lang/sml-nj/files/pkg-install.in577
-rw-r--r--lang/sml-nj/pkg-plist5
3 files changed, 597 insertions, 14 deletions
diff --git a/lang/sml-nj/Makefile b/lang/sml-nj/Makefile
index 011f7771b805..71465cfc0f70 100644
--- a/lang/sml-nj/Makefile
+++ b/lang/sml-nj/Makefile
@@ -7,10 +7,9 @@
PORTNAME= smlnj
PORTVERSION= 110.0.7
-PORTREVISION= 2
+PORTREVISION= 3
CATEGORIES= lang
-MASTER_SITES= ftp://ftp.research.bell-labs.com/dist/smlnj/release/110.0.7/ \
- http://smlnj.cs.uchicago.edu/dist/release/110.0.7/ \
+MASTER_SITES= http://smlnj.cs.uchicago.edu/dist/release/110.0.7/ \
ftp://flint.cs.yale.edu/pub/smlnj/release/110.0.7/ \
${MASTER_SITE_SOURCEFORGE}
MASTER_SITE_SUBDIR= ${PORTNAME}
@@ -31,11 +30,13 @@ DIST_SUBDIR= sml-nj/${PORTVERSION}
NO_WRKSUBDIR= yes
USE_GMAKE= yes
-CONFLICTS= smlnj-110.[1-9][0-9]*
-
ONLY_FOR_ARCHS= i386
-SML_BASE= ${PREFIX}/lib/sml-nj
+PKGINSTALL= ${WRKDIR}/.pkg-install
+PKGDEINSTALL= ${PKGINSTALL}
+
+SML_BASERELATIVE= lib/sml-nj
+SML_BASE= ${PREFIX}/${SML_BASERELATIVE}
SML_LIBDIR= ${SML_BASE}/lib
SML_BINDIR= ${SML_BASE}/bin
SML_SRCDIR= ${SML_BASE}/src
@@ -88,8 +89,18 @@ do-install:
done
@${CHOWN} -R ${BINOWN}:${BINGRP} ${SML_BINDIR}
@${CHOWN} -R ${SHAREOWN}:${SHAREGRP} ${SML_SRCDIR}
-.for file in ${SML_EXES}
- -${LN} -s ${SML_BINDIR}/${file} ${PREFIX}/bin/${file}
-.endfor
+
+post-install:
+ ${SED} -e 's?%%EXENAMES%%?${SML_EXES}?g' \
+ -e 's?%%EXEBINDIR%%?${SML_BASERELATIVE}/bin?g' \
+ ${FILESDIR}/pkg-install.in > ${PKGINSTALL}
+ PKG_PREFIX=${PREFIX} MULTIEXEC_WRAPPER_VERBOSE=yes \
+ ${SH} ${PKGINSTALL} ${PKGNAME} POST-INSTALL
+
+.ifndef MULTIEXEC_WRAPPER_VERBOSE
+deinstall:
+ export MULTIEXEC_WRAPPER_VERBOSE=yes && \
+ cd ${.CURDIR} && ${MAKE} ${.MAKEFLAGS} deinstall
+.endif
.include <bsd.port.mk>
diff --git a/lang/sml-nj/files/pkg-install.in b/lang/sml-nj/files/pkg-install.in
new file mode 100644
index 000000000000..4750e0388775
--- /dev/null
+++ b/lang/sml-nj/files/pkg-install.in
@@ -0,0 +1,577 @@
+#!/bin/sh
+# This file was automatically created - don't modify it!
+#%%SOURCEINFO-START%%
+# source version: $Id: pkg-install.in,v 1.15 2007/08/19 17:04:15 joemann Exp $
+# installed by port/package: %%SOURCEINFO-PACKAGE%%
+# installed from file: %%SOURCEINFO-FILE%%
+#%%SOURCEINFO-END%%
+if [ -n "$MULTIEXEC_WRAPPER_VERBOSE" ]
+then
+ QUIET=0
+else
+ QUIET=1
+fi
+#%%PKG-INSTALL-START%%
+# ===== IMPORTANT =====
+# If you modify any byte of this script outside of the
+# %%SOURCEINFO-*%% and #%%PKG-INSTALL-*%% sections, then
+# don't forget to bump the MINOR version variable below!
+#
+case "$2" in
+ # no-op cases if called as port/package de/installation script
+ PRE-INSTALL|POST-DEINSTALL)
+ exit 0
+ ;;
+esac
+#%%PKG-INSTALL-END%%
+
+ME=multiexec-wrapper
+CALLED_NAME="`basename $0`"
+PREFIX=%%PREFIX%%
+CONFIG="$PREFIX/etc/$ME.conf"
+
+lookup_executable() {
+ local calledname pkgname name executable rest \
+ portname version envvarname envvarversion result
+ # use global variable for the result to avoid subshell
+ lookup_executable_result=
+ [ -r "$CONFIG" ] || return 1
+ calledname="$1"
+ result=
+ while read pkgname name executable rest
+ do
+ if [ "$name" = "$calledname" -a -n "$executable" ]
+ then
+ result="$executable"
+ portname=`expr "$pkgname" : "\(.*\)-"`
+ envvarname="`echo -n "$portname" | \
+ tr "[:lower:]" "[:upper:]" | \
+ tr -cs "[:alnum:]" "_"`"
+ # <PORTNAME> variable selects package if name matches
+ eval envvarvalue='$'"$envvarname"
+ if [ -n "$envvarvalue" ]
+ then
+ break
+ fi
+ # <PORTNAME>_VERSION variable selects package version
+ version=`expr "$pkgname" : ".*-\([^-_,]*\)"`
+ eval envvarversion='$'"$envvarname"_VERSION
+ if [ "$envvarversion" = "$version" ]
+ then
+ break
+ fi
+ fi
+ done < "$CONFIG"
+ lookup_executable_result="$result"
+}
+
+warn () {
+ echo "${ME}: $1" 1>&2
+}
+
+die () {
+ warn "$1"
+ exit 1
+}
+
+# Normal usage: if called through a symlink,
+# lookup and exec a registered executable.
+
+if [ -L "$0" -a "$CALLED_NAME" != "$ME" ]
+then
+ lookup_executable "$CALLED_NAME"
+ executable="$lookup_executable_result"
+ if [ -x "$executable" ]
+ then
+ exec "$executable" "$@"
+ elif [ -z "$executable" ]
+ then
+ die "no executable registered for '$CALLED_NAME'."
+ elif [ ! -e "$executable" ]
+ then
+ die "$executable does not exist."
+ else
+ die "$executable is not executable."
+ fi
+fi
+
+EPOCH=1
+CONFIG_FORMAT=1
+MAJOR=1
+MINOR=0
+VERSION=$EPOCH.$CONFIG_FORMAT.$MAJOR.$MINOR
+
+usage() {
+ echo "usage: $ME <cmd> <arg> ..."
+ echo " with one of the following <cmd>s:"
+#%%PKG-INSTALL-START%%
+ echo " install-self-to <prefix> <pkgname>"
+ echo " deinstall-self-from <prefix>"
+#%%PKG-INSTALL-END%%
+ echo " deinstall-pkg <pkgname>"
+ echo " register <pkgname> <name> <executable>"
+ echo " unregister <pkgname> <name> <executable>"
+ echo " version"
+ echo " which <name>"
+ echo " list-all-packages"
+ echo " list-packages-for-name <name>"
+ exit 1
+}
+
+say () {
+ [ $QUIET -gt 0 ] || echo "${ME}: $1"
+}
+
+version() {
+ echo "$VERSION"
+ exit 0
+}
+
+which() {
+ local name executable
+ name="$1"
+ lookup_executable "$CALLED_NAME"
+ executable="$lookup_executable_result"
+ [ -z "$executable" ] && return 1
+ echo "$executable"
+}
+
+#%%PKG-INSTALL-START%%
+install_self_to() {
+ local pkgname myself target oldversion
+ PREFIX="$1"
+ pkgname="$2"
+ myself=`realpath "$0"`
+ target="$PREFIX/bin/$ME"
+ MYSELF_INSTALLED="$target"
+ if [ -e "$target" ]
+ then
+ if [ ! -x "$target" ]
+ then
+ die "$target already exists but is not executable."
+ else
+ oldversion=`$target version 2>/dev/null`
+ if [ $? -ne 0 ]
+ then
+ die "bogus $target already exists."
+ elif [ "$oldversion" = "$VERSION" ]
+ then
+ oldmd5=`sed -e '/^#%%PKG-INSTALL-START%%$/,/^#%%PKG-INSTALL-END%%$/d' \
+ -e '/^#%%SOURCEINFO-START%%$/,/^#%%SOURCEINFO-END%%$/d' \
+ -e 's?%%PREFIX%%?'"$PREFIX"'?g' "$target" | \
+ md5 -q`
+ newmd5=`sed -e '/^#%%PKG-INSTALL-START%%$/,/^#%%PKG-INSTALL-END%%$/d' \
+ -e '/^#%%SOURCEINFO-START%%$/,/^#%%SOURCEINFO-END%%$/d' \
+ -e 's?%%PREFIX%%?'"$PREFIX"'?g' "$myself" | \
+ md5 -q`
+ if [ "$newmd5" = "$oldmd5" ]
+ then
+ say "$myself (version $VERSION) already installed as $target."
+ return
+ else
+ die "$myself and $target have same version ($VERSION) but differ."
+ fi
+ elif [ `pkg_version -t "$oldversion" "$VERSION"` != "<" ]
+ then
+ say "$myself (version $VERSION) is not newer than $target (version $oldversion)."
+ fi
+ fi
+ fi
+ if sed -e '/^#%%PKG-INSTALL-START%%$/,/^#%%PKG-INSTALL-END%%$/d' \
+ -e 's?%%SOURCEINFO-PACKAGE%%?'"$pkgname"'?g' \
+ -e 's?%%SOURCEINFO-FILE%%?'"$myself"'?g' \
+ -e 's?%%PREFIX%%?'"$PREFIX"'?g' "$0" > "$target" && \
+ chmod +x "$target"
+ then
+ say "$0 (version $VERSION) installed as $target."
+ return
+ else
+ die "failed to install $ME (version $VERSION) as $target."
+ fi
+}
+
+deinstall_self_from() {
+ local config_empty=1
+ PREFIX="$1"
+ MYSELF_INSTALLED="$PREFIX/bin/$ME"
+ CONFIG="$PREFIX/etc/$ME.conf"
+ if [ ! -e "$CONFIG" ]
+ then
+ say "$CONFIG does not exist."
+ elif grep -v -q "^/SELF/" "$CONFIG"
+ then
+ say "$CONFIG is not empty."
+ config_empty=0
+ elif rm -f "$CONFIG"
+ then
+ say "$CONFIG removed."
+ else
+ warn "failed to remove $CONFIG."
+ fi
+ if [ "$config_empty" -eq 1 ]
+ then
+ if [ ! -e "$MYSELF_INSTALLED" ]
+ then
+ warn "$MYSELF_INSTALLED does not exist."
+ elif rm -f "$MYSELF_INSTALLED"
+ then
+ say "$MYSELF_INSTALLED removed."
+ else
+ warn "failed to remove $MYSELF_INSTALLED."
+ fi
+ fi
+}
+
+#%%PKG-INSTALL-END%%
+
+config_init() {
+ local format oldformat pkgname name executable rest
+ format="$EPOCH.$CONFIG_FORMAT"
+ if [ -r "$CONFIG" -a -s "$CONFIG" ]
+ then
+ oldformat=`cat "$CONFIG" | \
+ while read pkgname name executable rest
+ do
+ if [ "$pkgname" = "/SELF/" -a "$name" = "/FORMAT/" ]
+ then
+ echo "$executable"
+ break
+ fi
+ done`
+ if [ -z "$oldformat" ]
+ then
+ say "old $CONFIG has no format information - backing up ..."
+ if mv "$CONFIG" "$CONFIG.bak"
+ then
+ say "... done"
+ else
+ die "failed to backup old $CONFIG."
+ fi
+ elif [ "$oldformat" = "$format" ]
+ then
+ say "matching format statement found in $CONFIG."
+ else
+ # XXX compare versions and try to upgrade if appropriate
+ die "differing format statement found in $CONFIG ($executable instead of $format)."
+ fi
+ elif echo "/SELF/ /FORMAT/ $format" > "$CONFIG"
+ then
+ say "$CONFIG initialized."
+ else
+ die "failed to initialize $CONFIG"
+ fi
+}
+
+lookup_matches() {
+ local pkgname name executable rest p n e r
+ pkgname="$1"
+ name="$2"
+ executable="$3"
+ [ -r "$CONFIG" ] || return 1
+ cat "$CONFIG" | \
+ while read p n e r
+ do
+ [ "$pkgname" = "" -o "$p" = "$pkgname" ] && \
+ [ "$name" = "" -o "$n" = "$name" ] && \
+ [ "$executable" = "" -o "$e" = "$executable" ] && \
+ echo "$p $n $e"
+ done
+ return 0
+}
+
+config_add() {
+ local pkgname name executable matches
+ pkgname="$1"
+ name="$2"
+ executable="$3"
+ if [ ! -e "$CONFIG" ]
+ then
+ config_init
+ fi
+ if [ ! -r "$CONFIG" ]
+ then
+ die "$CONFIG not readable."
+ else
+ matches=`lookup_matches "$pkgname" "$name" "$executable"`
+ if [ -n "$matches" ]
+ then
+ say "already registered in $CONFIG: $pkgname $name $executable"
+ return
+ elif [ ! -w "$CONFIG" ]
+ then
+ die "$CONFIG is not writeable"
+ fi
+ fi
+ if echo "$pkgname $name $executable" >> "$CONFIG"
+ then
+ say "now added to config: $pkgname $name $executable"
+ else
+ die "write failed while trying to add to $CONFIG: $pkgname $name $executable"
+ fi
+}
+
+config_delete() {
+ local pkgname name executable matches
+ pkgname="$1"
+ name="$2"
+ executable="$3"
+ if [ ! -e "$CONFIG" ]
+ then
+ die "failed to delete from config: $CONFIG does not exist."
+ elif [ ! -r "$CONFIG" ]
+ then
+ die "$CONFIG not readable."
+ else
+ matches=`lookup_matches "$pkgname" "$name" "$executable"`
+ if [ -z "$matches" ]
+ then
+ say "no entry found in config for: $pkgname $name $executable."
+ elif [ ! -w "$CONFIG" ]
+ then
+ die "$CONFIG is not writeable."
+ elif [ ! -w `dirname "$CONFIG"` ]
+ then
+ die "config directory `dirname $CONFIG` is not writeable."
+ elif awk '$1 != "'"$pkgname"'" || \
+ $2 != "'"$name"'" || \
+ $3 != "'"$executable"'"' \
+ "$CONFIG" > "$CONFIG.new"
+ then
+ if diff -q "$CONFIG" "$CONFIG.new" >/dev/null
+ then
+ say "failed to delete from config (match problem): $pkgname $name $executable."
+ rm "$CONFIG.new"
+ elif mv -f "$CONFIG.new" "$CONFIG"
+ then
+ say "deleted from config: $pkgname $name $executable."
+ else
+ die "failed to update $CONFIG."
+ fi
+ else
+ die "failed to create new config $CONFIG.new."
+ fi
+ fi
+}
+
+register() {
+ local pkgname name executable savedwd
+ pkgname="$1"
+ name="$2"
+ executable="$3"
+ savedwd=$PWD
+ if [ ! -e "$executable" ]
+ then
+ die "won't register ${name}: $executable does not exist"
+ elif [ ! -x "$executable" ]
+ then
+ die "won't register ${name}: $executable is not executable"
+ elif cd "$PREFIX/bin"
+ then
+ if [ -e "$name" ]
+ then
+ if [ -L "$name" ]
+ then
+ target=`readlink $name`
+ if [ "$target" = "$ME" ]
+ then
+ say "symlink $name -> $ME already exists."
+ else
+ die "symlink $name already exists, but does not point to $ME (instead to $target)."
+ fi
+ else
+ die "$name already exists, but is not a symlink."
+ fi
+ else
+ if ln -s "$ME" "$name"
+ then
+ say "symlink $name -> $ME created."
+ else
+ die "failed to create symlink $name -> $ME."
+ fi
+ fi
+ config_add "$pkgname" "$name" "$executable"
+ else
+ die "can't cd to $PREFIX/bin."
+ fi
+ cd "$savedwd"
+}
+
+unregister() {
+ local pkgname name executable savedwd matches count
+ pkgname="$1"
+ name="$2"
+ executable="$3"
+ savedwd=$PWD
+ if [ ! -e "$executable" ]
+ then
+ say "while unregistering ${name}: $executable does not exist"
+ elif [ ! -x "$executable" ]
+ then
+ say "while unregistering ${name}: $executable is not executable"
+ fi
+ if cd "$PREFIX/bin"
+ then
+ if [ ! -e "$name" ]
+ then
+ say "symlink $name does not exist."
+ elif [ ! -L "$name" ]
+ then
+ say "$name exists, but is not a symlink."
+ else
+ target=`readlink $name`
+ if [ "$target" != "$ME" ]
+ then
+ say "symlink $name exists, but does not point to $ME (instead to $target)."
+ else
+ matches=`lookup_matches "" "$name"`
+ count=`printf "%s" "$matches" | wc -l`
+ if [ "$count" -eq 0 -o \
+ \( "$count" -eq 1 -a \
+ `expr "$matches" : "${pkgname}-"` -gt 0 \) ]
+ then
+ if rm -f "$name"
+ then
+ say "symlink $name removed."
+ else
+ die "failed to remove symlink $name -> $ME."
+ fi
+ else
+ say "not removing symlink $name because of further config entries."
+ fi
+ fi
+ fi
+ config_delete "$pkgname" "$name" "$executable"
+ else
+ die "can't cd to $PREFIX/bin."
+ fi
+ cd "$savedwd"
+}
+
+deinstall_pkg() {
+ local pkgname matches count p n e r
+ pkgname="$1"
+ matches=`lookup_matches "$pkgname"`
+ if [ $? -ne 0 ]
+ then
+ die "reading $CONFIG failed."
+ elif [ -z "$matches" ]
+ then
+ say "no entries for package $package in $CONFIG."
+ else
+ count=`printf "%s" "$matches" | wc -l`
+ say "trying to unregister $count entries for package $pkgname."
+ cat "$CONFIG" | \
+ while read p n e r
+ do
+ if [ "$p" = "$pkgname" ]
+ then
+ if [ -z "$n" ]
+ then
+ warn "in $CONFIG: incomplete config entry (no name) found for package $pkgname."
+ elif [ -z "$e" ]
+ then
+ warn "in $CONFIG: incomplete config entry (no executable) found for package $pkgname, name $name."
+ else
+ unregister "$pkgname" "$n" "$e"
+ fi
+ fi
+ done
+ fi
+}
+
+
+#%%PKG-INSTALL-START%%
+case "$2" in
+ POST-INSTALL)
+ PKGNAME="$1"
+ install_self_to "$PKG_PREFIX" "$PKGNAME"
+ "$MYSELF_INSTALLED" config-init || die "config-init of $CONFIG failed."
+ for exename in %%EXENAMES%%
+ do
+ exepath="$PKG_PREFIX/%%EXEBINDIR%%/$exename"
+ if [ -x "$exepath" ]
+ then
+ "$MYSELF_INSTALLED" register "$PKGNAME" "$exename" "$exepath" \
+ || die "failure during registration - aborting."
+ else
+ die "not an executable: $exepath."
+ fi
+ done
+ ;;
+ DEINSTALL)
+ PKGNAME="$1"
+ PREFIX="$PKG_PREFIX"
+ CONFIG="$PREFIX/etc/$ME.conf"
+ MYSELF_INSTALLED="$PREFIX/bin/$ME"
+ doitmyself=0
+ if [ ! -e "$MYSELF_INSTALLED" ]
+ then
+ say "$ME was not (or is no longer) installed as $MYSELF_INSTALLED."
+ doitmyself=1
+ elif [ ! -x "$MYSELF_INSTALLED" ]
+ then
+ say "$MYSELF_INSTALLED is not executable."
+ doitmyself=1
+ fi
+ if [ "$doitmyself" -eq 0 ]
+ then
+ "$MYSELF_INSTALLED" deinstall-pkg "$PKGNAME"
+ else
+ deinstall_pkg "$PKGNAME"
+ fi
+ deinstall_self_from "$PKG_PREFIX"
+ ;;
+esac
+#%%PKG-INSTALL-END%%
+
+list_all_packages() {
+ grep -v "^/" "$CONFIG" | \
+ awk '{ print $1 }' | \
+ uniq
+}
+
+list_packages_for_name() {
+ local name="$1"
+ lookup_matches "" "$name" "" | \
+ awk '{ print $1 }'
+}
+
+# main
+
+case "$1" in
+""|-h|--help)
+ usage
+ ;;
+#%%PKG-INSTALL-START%%
+install-self-to)
+ install_self_to "$2" "$3"
+ ;;
+deinstall-self-from)
+ deinstall_self_from "$2"
+ ;;
+#%%PKG-INSTALL-END%%
+version)
+ version
+ ;;
+which)
+ which "$2"
+ ;;
+config-init)
+ config_init
+ ;;
+register)
+ register "$2" "$3" "$4"
+ ;;
+unregister)
+ unregister "$2" "$3" "$4"
+ ;;
+deinstall-pkg)
+ deinstall_pkg "$2"
+ ;;
+list-all-packages)
+ list_all_packages "$2"
+ ;;
+list-packages-for-name)
+ list_packages_for_name "$2"
+ ;;
+esac
diff --git a/lang/sml-nj/pkg-plist b/lang/sml-nj/pkg-plist
index f122b7414fa5..421ab022fade 100644
--- a/lang/sml-nj/pkg-plist
+++ b/lang/sml-nj/pkg-plist
@@ -1,8 +1,3 @@
-bin/ml-burg
-bin/ml-lex
-bin/ml-yacc
-bin/sml
-bin/sml-cm
lib/sml-nj/bin/.arch-n-opsys
lib/sml-nj/bin/.heap/ml-burg.x86-bsd
lib/sml-nj/bin/.heap/ml-lex.x86-bsd