- path = getenv ("GLAZE_LIBGL");
- if (path == NULL) {
- fprintf (stderr, "GLAZE_LIBGL unset. Please set to path of real libGL.so under glaze.\n");
- exit (1);
+ libgl_path = getenv ("GLAZE_LIBGL");
+
+ if (libgl_path == NULL) {
+ Dl_info info;
+ int bits;
+
+ if (dladdr (open_libgl_handle, &info) == 0) {
+ fprintf (stderr, "Internal error: Failed to lookup filename of glaze library with dladdr.\n");
+ exit (1);
+ }
+
+ bits = elf_bits (info.dli_fname);
+
+ if (bits == 32)
+ libgl_path = getenv ("GLAZE_LIBGL_32_AUTO");
+ if (bits == 64)
+ libgl_path = getenv ("GLAZE_LIBGL_64_AUTO");
+
+ if (libgl_path == NULL) {
+ fprintf (stderr,
+ "Error: Failed to detect OpenGL library.\n"
+ "Please set GLAZE_LIBGL to path of real libGL.so\n");
+ exit (1);
+ }
+
+ setenv ("GLAZE_LIBGL", libgl_path, 1);