packages feed

GLUT 2.7.0.8 → 2.7.0.9

raw patch · 3 files changed

+93/−104 lines, 3 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

Files

CHANGELOG.md view
@@ -1,3 +1,8 @@+2.7.0.9+--------+* The GLUT package compiles without any additional library/framework now.+* Windows: We search for a native freeglut DLL, a MinGW freeglut DLL and a classic GLUT DLL, in that order.+ 2.7.0.8 -------- * Relaxed upper version bound for `OpenGLRaw`.
GLUT.cabal view
@@ -1,5 +1,5 @@ name: GLUT-version: 2.7.0.8+version: 2.7.0.9 synopsis: A binding for the OpenGL Utility Toolkit description:   A Haskell binding for the OpenGL Utility Toolkit, a window system independent@@ -46,7 +46,7 @@ flag UseNativeWindowsLibraries   description:     When compiling under Windows, use the native libraries instead of e.g. the-    ones coming with Cygwin.+    ones coming with Cygwin or MSYS.  flag BuildExamples   description: Build various OpenGL/GLUT examples.@@ -100,14 +100,9 @@     else       cpp-options: "-DCALLCONV=ccall"     cc-options: "-DUSE_GETPROCADDRESS"-    extra-libraries: glut32   else     cpp-options: "-DCALLCONV=ccall"     cc-options: "-DUSE_DLSYM"-    if os(darwin)-      frameworks: GLUT-    else-      extra-libraries: glut  executable BOGLGP01-OnYourOwn1   if !flag(BuildExamples)
cbits/HsGLUT.c view
@@ -1,7 +1,7 @@ /* -----------------------------------------------------------------------------  *  * Module      :  C support for Graphics.UI.GLUT.Raw- * Copyright   :  (c) Sven Panne 2002-2013+ * Copyright   :  (c) Sven Panne 2002-2016  * License     :  BSD3  *  * Maintainer  :  Sven Panne <svenpanne@gmail.com>@@ -10,68 +10,6 @@  *  * -------------------------------------------------------------------------- */ -#if defined(_MSC_VER) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__WATCOMC__)--#define GLUT_STROKE_ROMAN          ((void *)0x0000)-#define GLUT_STROKE_MONO_ROMAN     ((void *)0x0001)-#define GLUT_BITMAP_9_BY_15        ((void *)0x0002)-#define GLUT_BITMAP_8_BY_13        ((void *)0x0003)-#define GLUT_BITMAP_TIMES_ROMAN_10 ((void *)0x0004)-#define GLUT_BITMAP_TIMES_ROMAN_24 ((void *)0x0005)-#define GLUT_BITMAP_HELVETICA_10   ((void *)0x0006)-#define GLUT_BITMAP_HELVETICA_12   ((void *)0x0007)-#define GLUT_BITMAP_HELVETICA_18   ((void *)0x0008)--#else--extern void* glutStrokeRoman;-extern void* glutStrokeMonoRoman;-extern void* glutBitmap9By15;-extern void* glutBitmap8By13;-extern void* glutBitmapTimesRoman10;-extern void* glutBitmapTimesRoman24;-extern void* glutBitmapHelvetica10;-extern void* glutBitmapHelvetica12;-extern void* glutBitmapHelvetica18;--#define GLUT_STROKE_ROMAN          ((void *)&glutStrokeRoman)-#define GLUT_STROKE_MONO_ROMAN     ((void *)&glutStrokeMonoRoman)-#define GLUT_BITMAP_9_BY_15        ((void *)&glutBitmap9By15)-#define GLUT_BITMAP_8_BY_13        ((void *)&glutBitmap8By13)-#define GLUT_BITMAP_TIMES_ROMAN_10 ((void *)&glutBitmapTimesRoman10)-#define GLUT_BITMAP_TIMES_ROMAN_24 ((void *)&glutBitmapTimesRoman24)-#define GLUT_BITMAP_HELVETICA_10   ((void *)&glutBitmapHelvetica10)-#define GLUT_BITMAP_HELVETICA_12   ((void *)&glutBitmapHelvetica12)-#define GLUT_BITMAP_HELVETICA_18   ((void *)&glutBitmapHelvetica18)--#endif--void*-hs_GLUT_marshalBitmapFont(int fontID)-{-  switch (fontID) {-  case 0 : return GLUT_BITMAP_8_BY_13;-  case 1 : return GLUT_BITMAP_9_BY_15;-  case 2 : return GLUT_BITMAP_TIMES_ROMAN_10;-  case 3 : return GLUT_BITMAP_TIMES_ROMAN_24;-  case 4 : return GLUT_BITMAP_HELVETICA_10;-  case 5 : return GLUT_BITMAP_HELVETICA_12;-  case 6 : return GLUT_BITMAP_HELVETICA_18;-  }-  return (void*)0;-}--void*-hs_GLUT_marshalStrokeFont(int fontID)-{-  switch (fontID) {-  case 0 : return GLUT_STROKE_ROMAN;-  case 1 : return GLUT_STROKE_MONO_ROMAN;-  }-  return (void*)0;-}--/* -------------------------------------------------------------------------- */ #if defined(USE_GETPROCADDRESS)  #define WIN32_LEAN_AND_MEAN@@ -85,70 +23,121 @@    if (firstTime) {     firstTime = 0;-    handle = LoadLibrary(TEXT("glut32"));++    /* Try to load freeglut first, it has a few extra features compared to+       classic GLUT. */+    handle = LoadLibrary(TEXT("freeglut"));++    /* The MinGW-w64 version of freeglut prefixes "lib" onto the DLL name. */+    if (!handle) {+      handle = LoadLibrary(TEXT("libfreeglut"));+    }++    /* If no freeglut version is found, try plain old glut32 instead. */+    if (!handle) {+      handle = LoadLibrary(TEXT("glut32"));+    }   }    return handle ? GetProcAddress(handle, name) : NULL; }  /* -------------------------------------------------------------------------- */-#elif defined(USE_NSADDRESSOFSYMBOL)+#elif defined(USE_DLSYM) -#include <mach-o/dyld.h> #include <stdlib.h>-#include <string.h>+#include <dlfcn.h> +#ifdef __APPLE__+#define FILENAME "/System/Library/Frameworks/GLUT.framework/GLUT"+#else+#define FILENAME "libglut.so"+#endif+ void* hs_GLUT_getProcAddress(const char *name) {-  NSSymbol symbol;+  static int firstTime = 1;+  static void *handle = NULL; -  /* Prepend a '_' for the Unix C symbol mangling convention */-  char* symbolName = (char*)malloc(strlen(name) + 2);-  if (!symbolName) {-    return NULL;+  if (firstTime) {+    firstTime = 0;+    handle = dlopen(FILENAME, RTLD_LAZY | RTLD_GLOBAL);   }-  symbolName[0] = '_';-  strcpy(symbolName + 1, name); -  if (!NSIsSymbolNameDefined(symbolName)) {-    free(symbolName);-    return NULL;-  }+  return handle ? dlsym(handle, name) : NULL;+} -  symbol = NSLookupAndBindSymbol(symbolName);-  free(symbolName);-  if (!symbol) {-    return NULL;-  }+/* -------------------------------------------------------------------------- */+#else -  return NSAddressOfSymbol(symbol);-}+#error "Don't know how to retrieve GLUT entries" +#endif+ /* -------------------------------------------------------------------------- */-#elif defined(USE_DLSYM) -#include <stdlib.h>-#include <dlfcn.h>+/* Note: This #if below is in sync with freeglut_std.h, classic GLUT simply used+   #if defined(_WIN32). */+#if defined(_MSC_VER) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__WATCOMC__)+#define INIT_FONT(name,num) hs_##name = ((void*)(num))+#else+#define INIT_FONT(name,num) hs_##name = hs_GLUT_getProcAddress(#name)+#endif  void*-hs_GLUT_getProcAddress(const char *name)+hs_GLUT_marshalBitmapFont(int fontID) {   static int firstTime = 1;-  static void *handle = NULL;+  static void *hs_glutBitmap9By15        = NULL;+  static void *hs_glutBitmap8By13        = NULL;+  static void *hs_glutBitmapTimesRoman10 = NULL;+  static void *hs_glutBitmapTimesRoman24 = NULL;+  static void *hs_glutBitmapHelvetica10  = NULL;+  static void *hs_glutBitmapHelvetica12  = NULL;+  static void *hs_glutBitmapHelvetica18  = NULL;    if (firstTime) {     firstTime = 0;-    /* Get a handle for our executable. */-    handle = dlopen(NULL, RTLD_LAZY);++    INIT_FONT(glutBitmap9By15, 0x0002);+    INIT_FONT(glutBitmap8By13, 0x0003);+    INIT_FONT(glutBitmapTimesRoman10, 0x0004);+    INIT_FONT(glutBitmapTimesRoman24, 0x0005);+    INIT_FONT(glutBitmapHelvetica10, 0x0006);+    INIT_FONT(glutBitmapHelvetica12, 0x0007);+    INIT_FONT(glutBitmapHelvetica18, 0x0008);   } -  return handle ? dlsym(handle, name) : NULL;+  switch (fontID) {+  case 0 : return hs_glutBitmap8By13;+  case 1 : return hs_glutBitmap9By15;+  case 2 : return hs_glutBitmapTimesRoman10;+  case 3 : return hs_glutBitmapTimesRoman24;+  case 4 : return hs_glutBitmapHelvetica10;+  case 5 : return hs_glutBitmapHelvetica12;+  case 6 : return hs_glutBitmapHelvetica18;+  }+  return (void*)0; } -/* -------------------------------------------------------------------------- */-#else+void*+hs_GLUT_marshalStrokeFont(int fontID)+{+  static int firstTime = 1;+  static void *hs_glutStrokeRoman     = NULL;+  static void *hs_glutStrokeMonoRoman = NULL; -#error "Don't know how to retrieve GLUT entries"+  if (firstTime) {+    firstTime = 0; -#endif+    INIT_FONT(glutStrokeRoman, 0x0000);+    INIT_FONT(glutStrokeMonoRoman, 0x0001);+  }++  switch (fontID) {+  case 0 : return hs_glutStrokeRoman;+  case 1 : return hs_glutStrokeMonoRoman;+  }+  return (void*)0;+}