ports/110144: New port: math/Matlab7
Jason Bacon
bacon at smithers.neuro.mcw.edu
Tue Apr 3 18:20:11 UTC 2007
The following reply was made to PR ports/110144; it has been noted by GNATS.
From: Jason Bacon <bacon at smithers.neuro.mcw.edu>
To: bug-followup at freebsd.org, bacon at smithers.neuro.mcw.edu
Cc:
Subject: Re: ports/110144: New port: math/Matlab7
Date: Tue, 3 Apr 2007 12:39:01 -0500
Not quite sure of the best way to submit this update. There were too many
changes for a diff to be practical in my opinion, so I'm including a whole
new shar file below. If resubmitting it with send-pr would make life easier
for the committers, please let me know.
Cheers,
JB
# This is a shell archive. Save it in a file, remove anything before
# this line, and then unpack it by entering "sh file". Note, it may
# create directories; files and directories will be owned by you and
# have default permissions.
#
# This archive contains:
#
# math/Matlab7
# math/Matlab7/files
# math/Matlab7/files/pkg-message.in
# math/Matlab7/files/finish.m
# math/Matlab7/files/finish.sh
# math/Matlab7/files/flexlm.sh
# math/Matlab7/files/install_flexlm.sh
# math/Matlab7/files/install_matlab-r14
# math/Matlab7/files/gcc-wrapper.c
# math/Matlab7/Makefile
# math/Matlab7/distinfo
# math/Matlab7/pkg-descr
#
echo c - math/Matlab7
mkdir -p math/Matlab7 > /dev/null 2>&1
echo c - math/Matlab7/files
mkdir -p math/Matlab7/files > /dev/null 2>&1
echo x - math/Matlab7/files/pkg-message.in
sed 's/^X//' >math/Matlab7/files/pkg-message.in
<< 'END-of-math/Matlab7/files/pkg-message.in'
X====================================================================
XSince the Matlab installation directory undergoes changes over time,
X"make deinstall" may fail to remove all files, and you will need to
Xmanually remove %%PREFIX%%/matlab.
X
XIf you want to enable flexlm on this host, run
X%%PREFIX%%/matlab/bin/install_flexlm.sh %%PREFIX%%/matlab
X
XIf you did not allow the Matlab installer to create symbolic links
Xto the Matlab binaries, users will need %%PREFIX%%/matlab/bin
Xin their PATH to run matlab.
X
XUsers who wish to run mex, mcc, etc. should add the following to their
X.cshrc, or equivalent startup file:
X
X# If shell is a child of Linux Matlab, put Matlab bin in front of PATH
X# so the MEX compilations use the gcc wrapper for linux_dist-gentoo.
Xif ( $?MATLAB && -e %%PREFIX%% ) then
X set path = (%%PREFIX%%/matlab/bin $path)
Xendif
X
XPlease report any problems with this port to the maintainer at
X
X http://www.neuro.mcw.edu/~bacon/FreeBSD_MRI
X====================================================================
END-of-math/Matlab7/files/pkg-message.in
echo x - math/Matlab7/files/finish.m
sed 's/^X//' >math/Matlab7/files/finish.m
<< 'END-of-math/Matlab7/files/finish.m'
X! $MATLAB/bin/finish.sh
X
END-of-math/Matlab7/files/finish.m
echo x - math/Matlab7/files/finish.sh
sed 's/^X//' >math/Matlab7/files/finish.sh
<< 'END-of-math/Matlab7/files/finish.sh'
X#!/usr/compat/linux/bin/sh
X
X(sleep 5; killall -1 matlab_helper) &
Xexit 0
X
END-of-math/Matlab7/files/finish.sh
echo x - math/Matlab7/files/flexlm.sh
sed 's/^X//' >math/Matlab7/files/flexlm.sh
<< 'END-of-math/Matlab7/files/flexlm.sh'
X#!/bin/sh
X
X# Quiet FreeBSD expr -r errors
XPATH=/compat/linux/bin:/compat/linux/usr/bin:$PATH
Xexport PATH
X
Xcase "$1" in
Xstart)
X if [ -e /usr/local/etc/lmboot_TMW ]; then
X /usr/local/etc/lmboot_TMW -glnx86 -u matlab && echo 'MATLAB_lmgrd'
X fi
X ;;
Xstop)
X if [ -e /usr/local/etc/lmdown_TMW ]; then
X /usr/local/etc/lmdown_TMW > /dev/null 2>&1
X fi
X ;;
X*)
X echo "Usage: $0 {start|stop}"
X exit 1
X ;;
Xesac
X
END-of-math/Matlab7/files/flexlm.sh
echo x - math/Matlab7/files/install_flexlm.sh
sed 's/^X//' >math/Matlab7/files/install_flexlm.sh
<< 'END-of-math/Matlab7/files/install_flexlm.sh'
X#!/bin/sh
X
Xif [ $# != 1 ]; then
X echo "Usage: $0 <install-dir>"
X exit 1
Xfi
X
Xinstall_dir=$1
X
X# FLEXLM License Manager, if installed
Xif [ -e ${install_dir}/etc/lmboot ]; then
X ln -sf ${install_dir}/etc/lmboot /usr/local/etc/lmboot_TMW
X ln -sf ${install_dir}/etc/lmdown /usr/local/etc/lmdown_TMW
X install -m 0555 ${install_dir}/etc/flexlm.sh /usr/local/etc/rc.d
X /usr/local/etc/rc.d/flexlm.sh start
X echo "The following files or links were installed outside the Matlab"
X echo "installation tree:"
X echo ""
X echo " /usr/local/etc/lmboot_TMW"
X echo " /usr/local/etc/lmdown_TMW"
X echo " /usr/local/etc/rc.d/flexlm.sh"
X echo ""
X echo "You will need to manually remove them if you decide to deinstall"
X echo "or deactivate flexlm."
X
X matlabuser=`awk -F':' '$1 == "matlab"' /etc/passwd`
X if [ "${matlabuser}" = "" ]; then
X echo "There is no 'matlab' user on this system. You must either create"
X echo "one, or edit /usr/local/etc/rc.d/flexlm.sh to change the username"
X echo "flexlm will run under. Note that flexlm cannot be run as root."
X fi
Xfi
X
END-of-math/Matlab7/files/install_flexlm.sh
echo x - math/Matlab7/files/install_matlab-r14
sed 's/^X//' >math/Matlab7/files/install_matlab-r14
<< 'END-of-math/Matlab7/files/install_matlab-r14'
X#!/bin/sh
X
X#########################################################################
X# Matlab 7.3.0 R2006b FreeBSD installation script
X#
X# Author: Jason W. Bacon
X# Medical College of Wisconsin
X#
X# Usage:
X#
X# This script is a wrapper around the Matlab graphical installation
X# utility. It installs and updates license files for use with a
X# FLEXlm license server, and contains workarounds for installing
X# Matlab on FreeBSD using Linux compatibility.
X#
X# Redistribution and use in source and binary forms, with or without
X# modification, are permitted provided that the following conditions are
X# met:
X#
X# Redistributions of source code must retain the above copyright notice,
X# this list of conditions and the following disclaimer. Redistributions
X# in binary form must reproduce the above copyright notice, this list of
X# conditions and the following disclaimer in the documentation and/or
X# other materials provided with the distribution.
X#
X# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
X# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
X# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
X# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
X# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
X# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
X# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
X# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
X# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
X# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
X# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
X
Xif [ $# != 2 ]; then
X echo "Usage: $0 <install-directory> <patch-directory>"
X exit 1
Xfi
X
X# Port PREFIX
Xprefix="$1"
X
X# Install into PREFIX/matlab
Xinstall_dir=${prefix}/matlab
X
X# WRKSRC directory contains patches and install scripts
Xwrksrc="$2"
X
X# Remember where we started
Xport_dir=`pwd`
Xpkg_plist=${port_dir}/pkg-plist
X
X# A little eye candy
Xalias
drawline='echo -e "\n====================================================================\n"'
X
X# License file must be copied into install directory before starting
X# Matlab installer.
Xlicense_file=""
Xwhile [ "${license_file}" = "" ]; do
X drawline
X echo 'Enter the full pathname of your license.dat file: '
X read license_file
X if [ ! -e ${license_file} ]; then
X echo 'Error: ${license_file} does not exist. Please try again.'
X license_file=""
X fi
Xdone
X
Xdrawline
Xecho "Should this installation fail, please see the Matlab manual"
Xecho "installation instructions in the FreeBSD Handbook."
Xdrawline
X
X# Input installation source. Offer standard CDROM mount point
X# as a default.
Xdefault_source_dir='/cdrom'
X
Xecho "If you are using a remote license server,"
Xecho "be sure to remove FLEXlm from the Items to"
Xecho "Install list in the Matlab installer."
Xecho ""
Xecho -n "Press return to continue..."
Xread andthrowaway
X
X# Prime loop for 'install another disk' question at end
Xans='y'
X
X# Run installer from within install directory
Xwhile [ "${ans}" = "y" ]; do
X drawline
X
X # Disks in multiple CD set can be loaded in any order.
X echo ""
X echo "If you are installing from CDs, insert the first CD now."
X echo "Otherwise, enter the full pathname of the directory"
X echo "containing the Matlab 'install' script."
X echo ""
X echo -n "Location of install sources? [${default_source_dir}] "
X read source_dir
X if [ "${source_dir}" = "" ]; then
X source_dir="${default_source_dir}"
X else
X default_source_dir="${source_dir}"
X fi
X
X # Try to determine if this is loadable media
X dev=`awk -v dir=${source_dir} '$2 == dir && $4 ~ "noauto" { print
$1 }' /etc/fstab`
X if [ "${dev}" != '' ]; then
X mount=1
X echo "Mounting $dev..."
X mount ${source_dir}
X else
X mount=0
X fi
X
X # Run Matlab installer
X if [ ! -d ${install_dir} ]; then
X mkdir -p ${install_dir}
X if [ $? != 0 ]; then
X echo "Error creating ${install_dir}, aborting installation..."
X echo "Make sure you are logged in as root, or have appropriate"
X echo "permissions on the install directory."
X exit 1
X fi
X fi
X
X # License file must be in install directory when Matlab installer starts
X echo "Installing skeletal license file..."
X if [ ! -e ${license_file} ]; then
X echo "Missing license file: ${license_file}"
X fi
X cp ${license_file} ${install_dir}
X
X # Matlab installer installs into current working directory.
X cd ${install_dir}
X
X # Invoke the installer from a Linux shell so that it senses
X # a valid environment. Set PATH so that Linux binaries will be
X # used where possible. (FreeBSD expr does not
X # support -r flag, so this will silence errors during install
X # by using the Linux expr.)
X savepath="${PATH}"
X PATH="/compat/linux/bin:/compat/linux/usr/bin:${PATH}"
X export PATH
X
X echo "Running Matlab install tool. Note that pathnames referred to"
X echo "by the installer are relative to /compat/linux."
X
X # Make sure boot.ftp has been unpacked
X if [ ! -e "${source_dir}/update" ]; then
X (cd $source_dir; tar xvf boot.ftp)
X fi
X
X # Remove old links, if present
X for file in matlab mex mcc mbuild
X do
X rm -f /compat/linux/usr/local/bin/${file}
X rm -f /usr/local/bin/${file}
X done
X
X # Test connection to X server and run graphical install if possible.
X xhost > /dev/null 2> /dev/null
X if [ $? = 0 ]; then
X /compat/linux/bin/sh ${source_dir}/install
X else
X echo "Cannot connect to DISPLAY $DISPLAY. Using text mode install."
X /compat/linux/bin/sh ${source_dir}/install -t
X fi
X
X # Restore old path without Linux bins so that the rest of the
X # script runs native FreeBSD commands.
X PATH="${savepath}"
X export PATH
X
X # Unmount disk if necessary
X if [ $mount = 1 ]; then
X echo "Unmounting..."
X umount ${source_dir}
X fi
X
X echo "Done with ${source_dir}."
X echo -n 'Install another disk? (y/n) '
X read ans
Xdone
X
X# Create Matlab launch script to set up Linux environment for Matlab.
X# Put Linux bin directories first in the path, so Matlab scripts will
X# use Linux binaries rather than the FreeBSD binaries wherever possible.
X# This will, at minimum, quiet the annoying 'invalid -r flag' errors
X# produced by the FreeBSD expr command.
X
Xscript=${prefix}/matlab/bin/matlab
X# Rename original "matlab" script so it doesn't get run directly
Xmv -f ${script} ${script}.sh
X
X# Replace "matlab" with wrapper that sets the environment and calls
X# the original as "matlab.sh"
Xecho '#!/bin/sh' > ${script}
Xecho '' >> ${script}
Xecho 'PATH="/compat/linux/bin:/compat/linux/usr/bin:${PATH}"' >> ${script}
Xecho 'export PATH' >> ${script}
Xecho "${install_dir}"'/bin/matlab.sh -glnx86 $*' >> ${script}
Xchmod 555 ${script}
X
X# Flexlm installation scripts for convenience
Xinstall -m 0555 ${wrksrc}/install_flexlm.sh ${install_dir}/bin
Xinstall -m 0555 ${wrksrc}/flexlm.sh ${install_dir}/etc
X
X# Link to working linux jre
Xln -s /usr/local/linux-sun-jdk1.4.2/jre \
X ${install_dir}/sys/java/jre/glnx86/jre1.4.2
Xmv ${install_dir}/sys/java/jre/glnx86/jre.cfg \
X ${install_dir}/sys/java/jre/glnx86/jre.cfg.orig
Xecho "1.4.2" > ${install_dir}/sys/java/jre/glnx86/jre.cfg
X
X# Set default browser
Xecho "Please select a WEB browser for use by Matlab. You must ensure"
Xecho "that the browser is installed and in each Matlab user's PATH."
Xecho "Examples are firefox, konqueror, mozilla..."
Xecho "Just press <Enter> to accept the default [firefox]: "
Xread browser
Xif [ x${browser} = "x" ]; then
X browser="firefox"
Xfi
Xecho "Setting ${browser} as the default browser for Matlab..."
Xsed -e "s|netscape|${browser}|g" ${install_dir}/toolbox/local/docopt.m
> /tmp/docopt.m
Xmv -f /tmp/docopt.m ${install_dir}/toolbox/local
X
X######################################################################
X# Generate pkg-plist
X
Xrm -f ${pkg_plist}
X(cd ${prefix} && find -d matlab \! -type d) >> ${pkg_plist}
X(cd ${prefix} && find -d matlab -type d) | \
X sed -e 's#^#@dirrm #' >> ${pkg_plist}
X
END-of-math/Matlab7/files/install_matlab-r14
echo x - math/Matlab7/files/gcc-wrapper.c
sed 's/^X//' >math/Matlab7/files/gcc-wrapper.c
<< 'END-of-math/Matlab7/files/gcc-wrapper.c'
X#include <stdio.h>
X#include <stdlib.h>
X#include <string.h>
X#include <errno.h>
X#include <unistd.h>
X
X#define DEBUG 0
X#define MAX_ARG_SIZE 1024
X#define PREFIX "/usr/local/gentoo-stage3"
X
Xint main(int argc,char *argv[])
X
X{
X extern int errno;
X int c;
X char *p,
X *temp;
X
X /*
X * Gentoo gcc contains hard-coded paths to files such as
X * /usr/bin/gcc-config, which will not be found in the FreeBSD root
X * tree. We must chroot() to /usr/local/gentoo-stage3 in order for
X * gcc to function.
X */
X if ( chroot("/usr/local/gentoo-stage3") != 0 )
X {
X fprintf(stderr,"Error: chroot() failed: %s\n",strerror(errno));
X return 1;
X }
X
X /* Relinquish root euid after chroot() */
X seteuid(getuid());
X
X#if DEBUG == 1
X printf("UID = %d EUID = %d\n",getuid(),geteuid());
X#endif
X
X /* Update paths in gcc arguments to reflect chroot to gentoo-base3 */
X for (c=0; argv[c] != NULL; ++c)
X {
X p = strstr(argv[c],PREFIX);
X if ( p != NULL )
X {
X /* Null-terminate string preceding PREFIX in original arg */
X *p = '\0';
X
X /* Build new arg with / replacing PREFIX */
X temp = malloc(MAX_ARG_SIZE+1);
X snprintf(temp,MAX_ARG_SIZE,"%s%s",
X argv[c], /* Points to string before PREFIX */
X p+strlen(PREFIX) /* Points to string after PREFIX */
X );
X
X /* Replace old arg with new in argv[] */
X argv[c] = temp;
X }
X }
X
X /* Check arguments */
X#if DEBUG == 1
X putchar('\n');
X for (c=0; argv[c] != NULL; ++c)
X puts(argv[c]);
X#endif
X
X execvp("/usr/bin/gcc",argv);
X return 0;
X}
X
END-of-math/Matlab7/files/gcc-wrapper.c
echo x - math/Matlab7/Makefile
sed 's/^X//' >math/Matlab7/Makefile << 'END-of-math/Matlab7/Makefile'
X# New ports collection Makefile for: Linux Matlab 7.3.0 R2006b
X# Date created: 20 Mar 2007
X# Whom: bacon at smithers.neuro.mcw.edu
X#
X# $FreeBSD$
X#
X
XPORTNAME= Matlab
XPORTVERSION= 7.3.0
XCATEGORIES= math science
XMASTER_SITES=
XPKGNAMEPREFIX= linux-
XDISTFILES=
X
XMAINTAINER= bacon at smithers.neuro.mcw.edu
XCOMMENT= Mathworks(r) Matlab 7.3.0 R2006b
X
X# Install linux_base-fc4 before any dependencies install a different one.
X# Matlab7 won't work under linux_base8, and is untested under others.
XEXTRACT_DEPENDS=${LINUX_BASE_PORT}:${PORTSDIR}/emulators/linux_base-fc4
XRUN_DEPENDS= ${LOCALBASE}/linux-sun-jdk1.4.2:${PORTSDIR}/java/linux-sun-jdk14
X
XUSE_LINUX= fc4
XUSE_XLIB= yes
X
XOPTIONS= MEX "Requires linux_dist-gentoo-stage3" off
X
XONLY_FOR_ARCHS= i386
X
XIS_INTERACTIVE= yes
X
X.include <bsd.port.pre.mk>
X
X.if defined(WITH_MEX)
XPREFIX= ${LOCALBASE}/gentoo-stage3
XEXTRACT_DEPENDS+= ${LOCALBASE}/gentoo-stage3:
${PORTSDIR}/emulators/linux_dist-gentoo-stage3
X.else
XPREFIX= ${LINUXBASE}
X.endif
X
XSUB_FILES= pkg-message
X
Xpost-extract:
X.if defined(WITH_MEX)
X ${CP} ${FILESDIR}/gcc-wrapper.c ${WRKDIR}/gcc.c
X ${REINPLACE_CMD} -e "s|/usr/local/gentoo-stage3|${PREFIX}|g" \
X ${WRKDIR}/gcc.c
X.endif
X
Xdo-build:
X.if defined(WITH_MEX)
X (cd ${WRKDIR}; ${CC} -O gcc.c -o gcc)
X.endif
X
X# Run installation script under pre-install, so the packing list
X# can be generated AFTER the files are in place. The installed
X# toolboxes will vary immensely depending on the user's license options
X# and selection.
Xpre-install:
X ${FILESDIR}/install_matlab-r14 ${PREFIX} ${FILESDIR}
X.if defined(WITH_MEX)
X ${INSTALL_PROGRAM} ${WRKDIR}/gcc ${PREFIX}/matlab/bin
X ${CHMOD} 4555 ${PREFIX}/matlab/bin/gcc
X.endif
X
Xdo-install:
X @${ECHO_MSG} "Installation complete."
X
Xpost-install:
X @${CAT} ${WRKDIR}/pkg-message
X
X.include <bsd.port.post.mk>
END-of-math/Matlab7/Makefile
echo x - math/Matlab7/distinfo
sed 's/^X//' >math/Matlab7/distinfo << 'END-of-math/Matlab7/distinfo'
XMD5 (Matlab-7r14.tar.gz) = 3ff76719a6679603210af0a7086a4665
XSHA256 (Matlab-7r14.tar.gz) =
2d7a1756749a004acf8a9998eee154f7fe4c039cb01965ef68a6eee249edf795
XSIZE (Matlab-7r14.tar.gz) = 4026
END-of-math/Matlab7/distinfo
echo x - math/Matlab7/pkg-descr
sed 's/^X//' >math/Matlab7/pkg-descr << 'END-of-math/Matlab7/pkg-descr'
XThis is Mathworks (r) Matlab 6.5r13 for Linux. It requires installation
Xmedia and a license file from Mathworks, Inc., and linux_base-8.
END-of-math/Matlab7/pkg-descr
exit
More information about the freebsd-ports-bugs
mailing list