DMUG-Archiv 1998

Frühere

 

Chronologischer Index

 

Spätere

Vorherige

 

Thematischer Index

 

Nächste

Automatisches Install[] beim Laden eines Packages

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


Frühere

 

Chronologischer Index

 

Spätere

Vorherige

 

Thematischer Index

 

Nächste

DMUG-Archiv, http://www.mathematica.ch/dmug-liste.html; Letzte Änderung: 08.09.2003 20:44