Hat jemand eine elegante Loesung fuer das Problem, von einem Package aus
ein in diesem Package benoetigtes MathLink-Programm zu installieren?
Sie sollte moeglichst system- und versionsunabhaengig sein, also auch
unter Version 2.2 laufen. Ich weiss, dass Install[] in 3.0 verbessert
wurde.
-- Hier ist meine jetzige Loesung fuer 2.2 (aus MathSource #0207-469) --
(* install "binary" (the FastBinaryFiles package) if not yet installed.
Use weak heuristics on the setting of $Path on various systems. If
Install[] fails for some reason, print an error message indicating
this problem. *)
If[$LinkSupported,
(* MathLink available *)
If[Not[Or @@ Map[StringMatchQ[ToLowerCase[First[#]], "*binary*"] &,
Links[]]],
(* "binary" not yet installed *)
Which[$OperatingSystem === "Unix",
SetDirectory[Last[$Path]]; (* ../Packages *)
SetDirectory["Utilities"];
link = Install["binary"];
ResetDirectory[];
ResetDirectory[],
$OperatingSystem === "MacOS",
SetDirectory[First[$Path]]; (* ..:Packages *)
SetDirectory["Utilities"];
link = Install["binary"];
ResetDirectory[];
ResetDirectory[],
$OperatingSystem === "Windows",
link = Install[$Path[[3]] <> "UTILITIE\BINARY"],
True, (* other operating system *)
SetDirectory[Last[$Path]]; (* ../Packages (hopefully) *)
SetDirectory["Utilities"];
link = Install["binary"];
ResetDirectory[];
ResetDirectory[]
];
If[link === $Failed || First[LinkError[link]] != 0, (* Error *)
Message[IgorBinary::nobin];
Uninstall[link],
(* else *)
Print["FastBinaryFiles package successfully installed."]
],
(* "binary" was installed before this package was loaded *)
If[FreeQ[$ContextPath, "FastBinaryFiles`"],
PrependTo[$ContextPath, "FastBinaryFiles`"]]
],
(* MathLink not available *)
Message[IgorBinary::nolink]
];
------------------------------------------------------------------------
Mit freundlichen Gruessen
Arnd Roth
Abteilung Zellphysiologie
Max-Planck-Institut fuer Medizinische Forschung
Postfach 10 38 20, D-69028 Heidelberg
|