use ExtUtils::MakeMaker; use ExtUtils::Liblist; use Config; # See lib/ExtUtils/MakeMaker.pm for details of how to influence # the contents of the Makefile that is written. # ExtUtils::Liblist is broken @findlib::ISA = qw(ExtUtils::Liblist); sub findlib::lsdir { shift; grep /$_[0]/, <$_[1]>} sub findlib::file_name_is_absolute { 1 } # Used for warnings only... # Extra library paths to search on $libdirs = '-L/usr/X11R6/lib -L/usr/local/lib -L/usr/openwin/lib'; # Extra include paths to search on $includes = '-I/usr/X11R6/include -I/usr/local/include -I/usr/openwin/include'; $pm_lib = (grep /^X11$/, @ARGV) ? '' : '-lopengl'; $libs = "-lGLU -lGLUT -lGLX $pm_lib -lMesaGLU -lMesaGLUT -lMesaGLX -lglut"; @libs = findlib->ext("$libdirs $libs"); $l = "@libs"; # find anywhere... $DEFS = "-DHAVE_GL"; # Primary OpenGL system # Mesa 3D version 3.4 needs this so that all extension constants (even # obsolete ones) will be defined. Without this, about 13 or so won't be # known. It can't hurt for other distributions, so we won't even check. $DEFS .= " -DGL_GLEXT_LEGACY"; # GL Utility library (on OS/2 built into -lopengl) $DEFS .= " -DHAVE_GLU" if $l =~ /(^|\s)-l(\w*GLU|opengl)\b/; # Simple User interface Toolkit $DEFS .= " -DHAVE_GLUT" if $l =~ /(^|\s)-l\w*(GLUT|glut)\b/; # On OS/2 build a PM version by default - override by X11 on the command line $x = grep /^X11$/, @ARGV; @ARGV = (grep !/^X11$/, @ARGV); $nox = ($^O eq 'os2' and $l =~ /(^|\s)-lopengl\b/ and not $x); sub cfile_text { my $filename = shift; # Use $Config{cpprun}, instead of $Config{cpp}. cpp is simply set to # 'cpp' after Configure has run, which is not useful, since it lives # in /lib/ on many systems, which is normally not on the path. This # is documented, but silly behaviour. $Config{cpprun} is what is # documented to be set to a cpp that will take stuff on stdin my $cmd = "echo '\#include \"$filename\"' | $Config{cpprun} $includes $Config{cppflags} $Config{cppminus} 2>&1"; `$cmd`; } unless ($nox) { $x = ($l =~ /(^|\s)-l(Mesa)GLX\b/); unless ($x) { # quite often GLX is in -lGL... Test for GL/glx.h instead... $out = cfile_text 'GL/glx.h'; # The cpp would not let this macro through. Check for something else # that still exists after the cpp pass. a typedef, or type would work #$x = 1 if $out =~ /GLX_RGBA/; $x = 1 if $out =~ /GLXContext/; print STDERR "#\n### GLX not found (neigher library, nor headers).\n#\n" unless $x; } } # Interface to X/Windows for OpenGL -- emulated on several non-X systems. $DEFS .= " -DHAVE_GLX" if $x; $DEFS .= ' -DOS2_GL_DISABLE_MISSING_EXT -DAPIENTRY= -D__PM__' if $^O eq 'os2' and not $x; # Should be deduced automatically, but how?! $no_lgcc = (grep /^NO_LGCC$/, @ARGV); @ARGV = grep !/^NO_LGCC$/, @ARGV; $gcclib = ''; unless ($no_lgcc) { # This may be a gcc compiler in disguise. Should check for gccversion # as well. #if (not defined $Config{gcc}) { if ($Config{cc} ne 'gcc' && !$Config{gccversion}) { $gccout = `gcc -v 2>&1`; if ($gccout =~ /specs from (.*)/) { # gcc present ($gcclibdir = $1) =~ s,\bspecs\s*$,,; $gcclib = "-L$gcclibdir -lgcc"; print STDERR < 'OpenGL', 'VERSION_FROM' => 'OpenGL.pm', 'DEFINE' => $DEFS, 'XSPROTOARG' => '-noprototypes', 'OBJECT' => '$(BASEEXT)$(OBJ_EXT) gl_util$(OBJ_EXT)', 'LIBS' => "$libdirs @LIBS", 'INC' => $includes, 'PM' => {'OpenGL.pm' => '$(INST_LIBDIR)/OpenGL.pm'}, );