2016-10-10 3 views
0

Das OpenGL library for Chez Scheme (derzeit nur Setup für Linux) lädt die GLUT-Bibliothek wie folgt:chez Schema - Last-Shared-Objekt basierend auf der Plattform

(define no-op (load-shared-object "libglut.so.3")) 

hier ein link ist auf diesen Code.

Natürlich möchten wir die Bibliothek laden libglut.so.3 auf Linux aber GLUT.framework/GLUT auf MacOS.

Hier ist ein Beispiel dafür, wie Ypsilon Scheme laden Bibliotheken basierend auf der Plattform:

(define libGLUT 
    (cond 
    (on-darwin (load-shared-object "GLUT.framework/GLUT")) 
    (on-windows (load-shared-object "glut32.dll")) 
    (on-linux (load-shared-object "libglut.so.3")) 
    (on-freebsd (load-shared-object "libglut.so")) 
    (on-openbsd (begin 
      (load-shared-object "libXmu.so.10.0") 
      (load-shared-object "libGLU.so.7.0") 
      (load-shared-object "libglut.so.3.7"))) 
    (else 
    (assertion-violation 
     #f 
      "can not locate GLUT library, unknown operating system")))) 

Was ist ein guter Weg, um die Plattform auf Chez Schema zu überprüfen, so dass wir etwas ähnliches in unseren Bindungen für ausländische Bibliotheken tun können?

Antwort

1

Wie wäre es mit (machine-type)?

~ % uname -m -p -r -s 
Darwin 15.6.0 x86_64 i386 
~ % chez 
Chez Scheme Version 9.4.1 
Copyright 1984-2016 Cisco Systems, Inc. 

> (machine-type) 
ta6osx 
2

Von https://github.com/cisco/ChezScheme/blob/master/examples/socket.ss:

(case (machine-type) 
    [(i3le ti3le) (load-shared-object "libc.so.6")] 
    [(i3osx ti3osx a6osx ta6osx) (load-shared-object "libc.dylib")] 
    [else (load-shared-object "libc.so")]) 

Mit meta-cond stattdessen werden Sie etwas effizienter Laufzeitverhalten geben, da es sich bei der Kompilierung gelöst werden.

Verwandte Themen