blob: e0296b623be784bda9545348748558dada2828aa (
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
|
#! /bin/sh
# this script jumps in if there is no working mcc on the path:
# - on Mac OS it (hopefully) figures out the location of mcc,
# - on Cygwin it substitutes mcc completely
# last modified 19 Jul 11 th
sdkpath()
{
mathcmd="$1"
shift
mathcmd=`IFS=:
PATH="$PATH:$*" which $mathcmd`
eval `"$mathcmd" -run '
Print["sysid=\"", $SystemID, "\""];
Print["topdir=\"", $TopDirectory, "\""];
Exit[]' < /dev/null | tr '\r' ' ' | tail -2`
# check whether Cygwin's dlltool can handle 64-bit DLLs
test "$sysid" = Windows-x86-64 && {
${DLLTOOL:-dlltool} --help | grep x86-64 > /dev/null || sysid=Windows
}
topdir=`cd "$topdir" ; echo $PWD`
for sdk in \
"$topdir/SystemFiles/Links/MathLink/DeveloperKit/$sysid/CompilerAdditions" \
"$topdir/SystemFiles/Links/MathLink/DeveloperKit/CompilerAdditions" \
"$topdir/AddOns/MathLink/DeveloperKit/$sysid/CompilerAdditions" ; do
test -d "$sdk" && return
done
echo "MathLink SDK not found" 1>&2
exit 1
}
cygmcc()
{
sdkpath math \
"`cygpath '$ProgramW6432'`/Wolfram Research/Mathematica"/* \
"`cygpath '$PROGRAMFILES'`/Wolfram Research/Mathematica"/*
for sdk in "$sdk"/m* ; do
break
done
cache=MLcyg-cache
test -d $cache || mkdir $cache
MLversion=3
for OSbits in 32 64 ; do
dllname=ml${OSbits}i$MLversion
libname="$sdk/lib/${dllname}m.lib"
test -f "$libname" && break
done
lib="$cache/${dllname}m"
test -f "$lib.a" || {
( echo "EXPORTS"
${NM:-nm} -C --defined-only "$libname" | awk '/ T [^.]/ { print $3 }'
) > "$lib.def"
${DLLTOOL:-dlltool} -k --dllname "$dllname.dll" \
--def "$lib.def" --output-lib "$lib.a"
}
tmp=
args="-DWIN$OSbits -I'$sdk/include'"
for arg in "$@" ; do
case "$arg" in
*.tm)
cp "$arg" "$arg.tm"
"$sdk"/bin/mprep -lines -o "$arg.c" "$arg.tm"
tmp="$tmp '$arg.c' '$arg.tm'"
args="$args '$arg.c'" ;;
*)
args="$args '$arg'" ;;
esac
done
trap "rm -f $tmp" 0 1 2 3 15
eval "set -x ; ${CC:-gcc} $args $lib.a -mwindows"
}
macmcc()
{
sdkpath MathKernel \
/Applications/Mathematica*/Contents/MacOS \
$HOME/Desktop/Mathematica*/Contents/MacOS
exec "$sdk/mcc" "$@"
}
defaultmcc()
{
sdkpath math \
/usr/local/bin \
/usr/local/Wolfram/bin \
/usr/local/Wolfram/Mathematica/*/Executables \
/opt/Wolfram/bin \
/opt/Wolfram/Mathematica/*/Executables
exec "$sdk/mcc" "$@"
}
shopt -s nullglob 2> /dev/null
case `uname -s` in
Darwin) macmcc "$@" ;;
CYG*) cygmcc "$@" ;;
*) defaultmcc "$@" ;;
esac
|