diff -urN redbook/aaindex.c redbook.patched/aaindex.c
--- redbook/aaindex.c	1997-07-23 03:17:32.000000000 -0500
+++ redbook.patched/aaindex.c	2020-07-11 09:57:23.037115194 -0500
@@ -42,7 +42,13 @@
  *  is typed in the window, the lines are rotated in opposite 
  *  directions.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include "stdlib.h"
 
 #define RAMPSIZE 16
diff -urN redbook/aapoly.c redbook.patched/aapoly.c
--- redbook/aapoly.c	1997-07-23 03:17:32.000000000 -0500
+++ redbook.patched/aapoly.c	2020-07-11 09:57:23.037115194 -0500
@@ -42,7 +42,13 @@
  *  function is used.
  *  Pressing the 't' key turns the antialiasing on and off.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
diff -urN redbook/aargb.c redbook.patched/aargb.c
--- redbook/aargb.c	1997-07-23 03:17:32.000000000 -0500
+++ redbook.patched/aargb.c	2020-07-11 09:57:23.041115256 -0500
@@ -41,7 +41,13 @@
  *  two diagonal lines to form an X; when 'r' is typed in the window, 
  *  the lines are rotated in opposite directions.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 #include <stdio.h>
 
diff -urN redbook/accanti.c redbook.patched/accanti.c
--- redbook/accanti.c	1997-07-23 03:17:32.000000000 -0500
+++ redbook.patched/accanti.c	2020-07-11 09:57:23.041115256 -0500
@@ -39,7 +39,13 @@
  *  Use the accumulation buffer to do full-scene antialiasing
  *  on a scene with orthographic parallel projection.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 #include "jitter.h"
 
diff -urN redbook/accpersp.c redbook.patched/accpersp.c
--- redbook/accpersp.c	1997-07-23 03:17:32.000000000 -0500
+++ redbook.patched/accpersp.c	2020-07-11 09:57:23.041115256 -0500
@@ -40,7 +40,13 @@
  *  on a scene with perspective projection, using the special
  *  routines accFrustum() and accPerspective().
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 #include <math.h>
 #include "jitter.h"
diff -urN redbook/alpha3D.c redbook.patched/alpha3D.c
--- redbook/alpha3D.c	1997-07-23 03:17:32.000000000 -0500
+++ redbook.patched/alpha3D.c	2020-07-11 09:57:23.041115256 -0500
@@ -43,7 +43,13 @@
  *  transparent object through the opaque object.  Press 
  *  the 'r' key to reset the scene.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 #include <stdio.h>
 
diff -urN redbook/alpha.c redbook.patched/alpha.c
--- redbook/alpha.c	1997-07-23 03:17:32.000000000 -0500
+++ redbook.patched/alpha.c	2020-07-11 09:57:23.041115256 -0500
@@ -41,7 +41,13 @@
  *  to demonstrate the effect order has on alpha blending results.
  *  Use the 't' key to toggle the order of drawing polygons.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 
 static int leftFirst = GL_TRUE;
diff -urN redbook/bezcurve.c redbook.patched/bezcurve.c
--- redbook/bezcurve.c	1997-07-23 03:17:32.000000000 -0500
+++ redbook.patched/bezcurve.c	2020-07-11 09:57:23.041115256 -0500
@@ -38,7 +38,13 @@
 /*  bezcurve.c			
  *  This program uses evaluators to draw a Bezier curve.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 
 GLfloat ctrlpoints[4][3] = {
diff -urN redbook/bezmesh.c redbook.patched/bezmesh.c
--- redbook/bezmesh.c	1997-07-23 03:17:32.000000000 -0500
+++ redbook.patched/bezmesh.c	2020-07-11 09:57:23.041115256 -0500
@@ -40,7 +40,12 @@
  *  using two-dimensional evaluators.
  */
 #include <stdlib.h>
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
 
 GLfloat ctrlpoints[4][4][3] = {
    { {-1.5, -1.5, 4.0},
diff -urN redbook/bezsurf.c redbook.patched/bezsurf.c
--- redbook/bezsurf.c	1997-07-23 03:17:32.000000000 -0500
+++ redbook.patched/bezsurf.c	2020-07-11 09:57:23.041115256 -0500
@@ -40,7 +40,12 @@
  *  using two-dimensional evaluators.
  */
 #include <stdlib.h>
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
 
 GLfloat ctrlpoints[4][4][3] = {
    {{-1.5, -1.5, 4.0}, {-0.5, -1.5, 2.0}, 
diff -urN redbook/checker.c redbook.patched/checker.c
--- redbook/checker.c	1997-07-23 03:17:32.000000000 -0500
+++ redbook.patched/checker.c	2020-07-11 09:57:23.041115256 -0500
@@ -42,7 +42,13 @@
  *  If running this program on OpenGL 1.0, texture objects are
  *  not used.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 #include <stdio.h>
 
diff -urN redbook/clip.c redbook.patched/clip.c
--- redbook/clip.c	1997-07-23 03:17:32.000000000 -0500
+++ redbook.patched/clip.c	2020-07-11 09:57:23.041115256 -0500
@@ -39,7 +39,13 @@
  *  clip.c
  *  This program demonstrates arbitrary clipping planes.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 
 void init(void) 
diff -urN redbook/colormat.c redbook.patched/colormat.c
--- redbook/colormat.c	1997-07-23 03:17:32.000000000 -0500
+++ redbook.patched/colormat.c	2020-07-11 09:57:23.041115256 -0500
@@ -41,7 +41,13 @@
  *  ColorMaterial mode.  Interaction:  pressing the 
  *  mouse buttons will change the diffuse reflection values.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 
 GLfloat diffuseMaterial[4] = { 0.5, 0.5, 0.5, 1.0 };
diff -urN redbook/cube.c redbook.patched/cube.c
--- redbook/cube.c	1997-07-23 03:17:32.000000000 -0500
+++ redbook.patched/cube.c	2020-07-11 09:57:23.041115256 -0500
@@ -41,7 +41,13 @@
  *  glScalef() and a single viewing transformation, gluLookAt().
  *  A wireframe cube is rendered.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 
 void init(void) 
diff -urN redbook/dof.c redbook.patched/dof.c
--- redbook/dof.c	1997-07-23 03:17:34.000000000 -0500
+++ redbook.patched/dof.c	2020-07-11 09:57:23.045115319 -0500
@@ -44,7 +44,13 @@
  *  the viewing volume is at the same position, each time.  In
  *  this case, the gold teapot remains in focus.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 #include <math.h>
 #include "jitter.h"
diff -urN redbook/double.c redbook.patched/double.c
--- redbook/double.c	1997-07-23 03:17:34.000000000 -0500
+++ redbook.patched/double.c	2020-07-11 09:57:23.045115319 -0500
@@ -41,7 +41,13 @@
  *  Pressing the left mouse button rotates the rectangle.
  *  Pressing the middle mouse button stops the rotation.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 
 static GLfloat spin = 0.0;
diff -urN redbook/drawf.c redbook.patched/drawf.c
--- redbook/drawf.c	1997-07-23 03:17:34.000000000 -0500
+++ redbook.patched/drawf.c	2020-07-11 09:57:23.045115319 -0500
@@ -40,7 +40,13 @@
  *  Draws the bitmapped letter F on the screen (several times).
  *  This demonstrates use of the glBitmap() call.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 
 GLubyte rasters[24] = {
diff -urN redbook/feedback.c redbook.patched/feedback.c
--- redbook/feedback.c	1997-07-23 03:17:34.000000000 -0500
+++ redbook.patched/feedback.c	2020-07-11 09:57:23.177117395 -0500
@@ -42,7 +42,13 @@
  * Then feedback mode is entered, and the same lines are 
  * drawn.  The results in the feedback buffer are printed.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 #include <stdio.h>
 
diff -urN redbook/fog.c redbook.patched/fog.c
--- redbook/fog.c	1997-07-23 03:17:34.000000000 -0500
+++ redbook.patched/fog.c	2020-07-11 09:57:23.177117395 -0500
@@ -44,7 +44,13 @@
  *  In this program, there is a fixed density value, as well 
  *  as fixed start and end values for the linear fog.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <math.h>
 #include <stdlib.h>
 #include <stdio.h>
diff -urN redbook/fogindex.c redbook.patched/fogindex.c
--- redbook/fogindex.c	1997-07-23 03:17:34.000000000 -0500
+++ redbook.patched/fogindex.c	2020-07-11 09:57:23.177117395 -0500
@@ -40,7 +40,13 @@
  *  This program draws 5 wireframe spheres, each at 
  *  a different z distance from the eye, in linear fog.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <math.h>
 #include <stdlib.h>
 #include <stdio.h>
diff -urN redbook/font.c redbook.patched/font.c
--- redbook/font.c	1997-07-23 03:17:34.000000000 -0500
+++ redbook.patched/font.c	2020-07-11 09:57:23.177117395 -0500
@@ -42,7 +42,13 @@
  *  and other pixel routines.  Also demonstrates use of 
  *  display lists.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 #include <string.h>
 
diff -urN redbook/hello.c redbook.patched/hello.c
--- redbook/hello.c	1997-07-23 03:17:34.000000000 -0500
+++ redbook.patched/hello.c	2020-07-11 09:57:23.177117395 -0500
@@ -39,7 +39,12 @@
  * hello.c
  * This is a simple, introductory OpenGL program.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
 
 void display(void)
 {
diff -urN redbook/image.c redbook.patched/image.c
--- redbook/image.c	1997-07-23 03:17:34.000000000 -0500
+++ redbook.patched/image.c	2020-07-11 09:57:23.181117457 -0500
@@ -46,7 +46,13 @@
  *  factors are reset.  If you press the 'z' or 'Z' keys, you change
  *  the zoom factors.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 #include <stdio.h>
 
diff -urN redbook/light.c redbook.patched/light.c
--- redbook/light.c	1997-07-23 03:17:34.000000000 -0500
+++ redbook.patched/light.c	2020-07-11 09:57:23.181117457 -0500
@@ -41,7 +41,13 @@
  *  model.  A sphere is drawn using a grey material characteristic.
  *  A single light source illuminates the object.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 
 /*  Initialize material property, light source, lighting model,
diff -urN redbook/lines.c redbook.patched/lines.c
--- redbook/lines.c	1997-07-23 03:17:34.000000000 -0500
+++ redbook.patched/lines.c	2020-07-11 09:57:23.181117457 -0500
@@ -40,7 +40,13 @@
  *  This program demonstrates geometric primitives and
  *  their attributes.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 
 #define drawOneLine(x1,y1,x2,y2)  glBegin(GL_LINES);  \
diff -urN redbook/list.c redbook.patched/list.c
--- redbook/list.c	1997-07-23 03:17:34.000000000 -0500
+++ redbook.patched/list.c	2020-07-11 09:57:23.181117457 -0500
@@ -41,7 +41,13 @@
  *  display list.  Note that attributes, such as current 
  *  color and matrix, are changed.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 
 GLuint listName;
diff -urN redbook/Makefile.linux redbook.patched/Makefile.linux
--- redbook/Makefile.linux	1969-12-31 18:00:00.000000000 -0600
+++ redbook.patched/Makefile.linux	2020-07-11 09:59:25.899046944 -0500
@@ -0,0 +1,25 @@
+# debian buster: apt-get install freeglut3-dev
+
+TARGETS = aaindex aapoly aargb accanti accpersp \
+        alpha alpha3D bezcurve bezmesh bezsurf \
+        clip colormat cube dof double \
+        drawf feedback fog fogindex font hello \
+        image light lines list material \
+        model movelight pickdepth picksquare planet \
+        polys quadric robot scene select \
+        smooth stencil stroke surface teapots tess \
+        tesswind checker mipmap \
+	polyoff texbind texgen texprox texsub varray wrap \
+        texturesurf torus trim unproject
+
+LIBS = -lGL -lGLU -lglut -lXext -lX11 -lm
+
+all: $(TARGETS)
+
+$(TARGETS):
+	cc $(LIBS) -o $@ $@.c
+
+clean:  
+	-rm -f *.o $(TARGETS)
+
+.PHONY: clean all
diff -urN redbook/Makefile.mac redbook.patched/Makefile.mac
--- redbook/Makefile.mac	1969-12-31 18:00:00.000000000 -0600
+++ redbook.patched/Makefile.mac	2020-07-11 09:57:23.037115194 -0500
@@ -0,0 +1,23 @@
+TARGETS = aaindex aapoly aargb accanti accpersp \
+        alpha alpha3D bezcurve bezmesh bezsurf \
+        clip colormat cube dof double \
+        drawf feedback fog fogindex font hello \
+        image light lines list material \
+        model movelight pickdepth picksquare planet \
+        polys quadric robot scene select \
+        smooth stencil stroke surface teapots tess \
+        tesswind checker mipmap \
+	polyoff texbind texgen texprox texsub varray wrap \
+        texturesurf torus trim unproject
+
+LIBS = -framework GLUT -framework OpenGL -framework Cocoa
+
+all: $(TARGETS)
+
+$(TARGETS):
+	cc $(LIBS) -o $@ $@.c
+
+clean:  
+	-rm -f *.o $(TARGETS)
+
+.PHONY: clean all
diff -urN redbook/material.c redbook.patched/material.c
--- redbook/material.c	1997-07-23 03:17:34.000000000 -0500
+++ redbook.patched/material.c	2020-07-11 09:57:23.181117457 -0500
@@ -42,7 +42,12 @@
  * A single light source illuminates the objects.
  */
 #include <stdlib.h>
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
 
 /*  Initialize z-buffer, projection matrix, light source, 
  *  and lighting model.  Do not specify a material property here.
diff -urN redbook/mipmap.c redbook.patched/mipmap.c
--- redbook/mipmap.c	1997-07-23 03:17:34.000000000 -0500
+++ redbook.patched/mipmap.c	2020-07-11 09:57:23.181117457 -0500
@@ -42,7 +42,13 @@
  *  Thus, the quadrilateral which is drawn is drawn with several
  *  different colors.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 
 GLubyte mipmapImage32[32][32][4];
diff -urN redbook/model.c redbook.patched/model.c
--- redbook/model.c	1997-07-23 03:17:34.000000000 -0500
+++ redbook.patched/model.c	2020-07-11 09:57:23.181117457 -0500
@@ -39,7 +39,13 @@
  *  model.c
  *  This program demonstrates modeling transformations
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 
 void init(void) 
diff -urN redbook/movelight.c redbook.patched/movelight.c
--- redbook/movelight.c	1997-07-23 03:17:34.000000000 -0500
+++ redbook.patched/movelight.c	2020-07-11 09:57:23.181117457 -0500
@@ -50,7 +50,13 @@
  *  the modeling transformation (x rotation) by 30 degrees.
  *  The scene is then redrawn with the light in a new position.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 
 static int spin = 0;
diff -urN redbook/pickdepth.c redbook.patched/pickdepth.c
--- redbook/pickdepth.c	1997-07-23 03:17:34.000000000 -0500
+++ redbook.patched/pickdepth.c	2020-07-11 09:57:23.181117457 -0500
@@ -45,7 +45,13 @@
  * are "picked."  Pay special attention to the depth 
  * value range, which is returned.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 #include <stdio.h>
 
diff -urN redbook/picksquare.c redbook.patched/picksquare.c
--- redbook/picksquare.c	1997-07-23 03:17:34.000000000 -0500
+++ redbook.patched/picksquare.c	2020-07-11 09:57:23.181117457 -0500
@@ -44,7 +44,12 @@
  */
 #include <stdlib.h>
 #include <stdio.h>
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
 
 int board[3][3];   /*  amount of color for each square	*/
 
diff -urN redbook/planet.c redbook.patched/planet.c
--- redbook/planet.c	1997-07-23 03:17:34.000000000 -0500
+++ redbook.patched/planet.c	2020-07-11 09:57:23.181117457 -0500
@@ -42,7 +42,13 @@
  *  Interaction:  pressing the d and y keys (day and year)
  *  alters the rotation of the planet around the sun.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 
 static int year = 0, day = 0;
diff -urN redbook/polyoff.c redbook.patched/polyoff.c
--- redbook/polyoff.c	1997-07-23 03:17:34.000000000 -0500
+++ redbook.patched/polyoff.c	2020-07-11 09:57:23.185117520 -0500
@@ -41,7 +41,13 @@
  *  polygon and its wireframe counterpart without ugly visual
  *  artifacts ("stitching").
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdio.h>
 #include <stdlib.h>
 
diff -urN redbook/polys.c redbook.patched/polys.c
--- redbook/polys.c	1997-07-23 03:17:34.000000000 -0500
+++ redbook.patched/polys.c	2020-07-11 09:57:23.185117520 -0500
@@ -39,7 +39,13 @@
  *  polys.c
  *  This program demonstrates polygon stippling.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 
 void display(void)
diff -urN redbook/quadric.c redbook.patched/quadric.c
--- redbook/quadric.c	1997-07-23 03:17:34.000000000 -0500
+++ redbook.patched/quadric.c	2020-07-11 09:57:23.185117520 -0500
@@ -43,7 +43,13 @@
  *  Note that the cylinder has no top or bottom and the circle
  *  has a hole in it.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdio.h>
 #include <stdlib.h>
 
diff -urN redbook/robot.c redbook.patched/robot.c
--- redbook/robot.c	1997-07-23 03:17:34.000000000 -0500
+++ redbook.patched/robot.c	2020-07-11 09:57:23.185117520 -0500
@@ -42,7 +42,13 @@
  * Interaction:  pressing the s and e keys (shoulder and elbow)
  * alters the rotation of the robot arm.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 
 static int shoulder = 0, elbow = 0;
diff -urN redbook/scene.c redbook.patched/scene.c
--- redbook/scene.c	1997-07-23 03:17:34.000000000 -0500
+++ redbook.patched/scene.c	2020-07-11 09:57:23.185117520 -0500
@@ -41,7 +41,13 @@
  *  Objects are drawn using a grey material characteristic. 
  *  A single light source illuminates the objects.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 
 /*  Initialize material property and light source.
diff -urN redbook/select.c redbook.patched/select.c
--- redbook/select.c	1997-07-23 03:17:36.000000000 -0500
+++ redbook.patched/select.c	2020-07-11 09:57:23.185117520 -0500
@@ -50,7 +50,13 @@
  * the green triangle causes one hit with the name 1, and 
  * the yellow triangles cause one hit with the name 3.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 #include <stdio.h>
 
diff -urN redbook/smooth.c redbook.patched/smooth.c
--- redbook/smooth.c	1997-07-23 03:17:36.000000000 -0500
+++ redbook.patched/smooth.c	2020-07-11 09:57:23.185117520 -0500
@@ -40,7 +40,13 @@
  * This program demonstrates smooth shading.
  * A smooth shaded polygon is drawn in a 2-D projection.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 
 void init(void) 
diff -urN redbook/stencil.c redbook.patched/stencil.c
--- redbook/stencil.c	1997-07-23 03:17:36.000000000 -0500
+++ redbook.patched/stencil.c	2020-07-11 09:57:23.185117520 -0500
@@ -45,7 +45,13 @@
  *  Then a blue sphere is drawn where the stencil value is 1,
  *  and yellow torii are drawn where the stencil value is not 1.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 
 #define YELLOWMAT   1
diff -urN redbook/stroke.c redbook.patched/stroke.c
--- redbook/stroke.c	1997-07-23 03:17:36.000000000 -0500
+++ redbook.patched/stroke.c	2020-07-11 09:57:23.185117520 -0500
@@ -43,7 +43,13 @@
  *  correspond to the ASCII values of the characters.
  *  Use of glCallLists() is demonstrated.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 #include <string.h>
 
diff -urN redbook/surface.c redbook.patched/surface.c
--- redbook/surface.c	1997-07-23 03:17:36.000000000 -0500
+++ redbook.patched/surface.c	2020-07-11 09:57:23.185117520 -0500
@@ -43,7 +43,13 @@
  *  Note that some of the control points are hidden by the  
  *  surface itself.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 #include <stdio.h>
 
diff -urN redbook/teapots.c redbook.patched/teapots.c
--- redbook/teapots.c	1997-07-23 03:17:36.000000000 -0500
+++ redbook.patched/teapots.c	2020-07-11 09:57:23.185117520 -0500
@@ -41,7 +41,12 @@
  *  A single light source illuminates the objects.
  */
 #include <stdlib.h>
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
 
 GLuint teapotList;
 
diff -urN redbook/tess.c redbook.patched/tess.c
--- redbook/tess.c	1997-07-23 03:17:36.000000000 -0500
+++ redbook.patched/tess.c	2020-07-11 09:57:23.185117520 -0500
@@ -48,7 +48,13 @@
  *  star.  Also note that removing the TessProperty for the 
  *  star will make the interior unshaded (WINDING_ODD).
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 #include <stdio.h>
 
diff -urN redbook/tesswind.c redbook.patched/tesswind.c
--- redbook/tesswind.c	1997-07-23 03:17:36.000000000 -0500
+++ redbook.patched/tesswind.c	2020-07-11 09:57:23.189117583 -0500
@@ -42,7 +42,13 @@
  *  each with very different contours.  When the w key is pressed, 
  *  the objects are drawn with a different winding rule.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 #include <stdio.h>
 
diff -urN redbook/texbind.c redbook.patched/texbind.c
--- redbook/texbind.c	1997-07-23 03:17:36.000000000 -0500
+++ redbook.patched/texbind.c	2020-07-11 09:57:23.189117583 -0500
@@ -39,7 +39,13 @@
  *  This program demonstrates using glBindTexture() by 
  *  creating and managing two textures.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 #include <stdio.h>
 
diff -urN redbook/texgen.c redbook.patched/texgen.c
--- redbook/texgen.c	1997-07-23 03:17:36.000000000 -0500
+++ redbook.patched/texgen.c	2020-07-11 09:57:23.189117583 -0500
@@ -49,7 +49,12 @@
  *  Pressing the 'x' key switches it back to x = 0.
  */
 
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 #include <stdio.h>
 
diff -urN redbook/texprox.c redbook.patched/texprox.c
--- redbook/texprox.c	1997-07-23 03:17:36.000000000 -0500
+++ redbook.patched/texprox.c	2020-07-11 09:57:23.189117583 -0500
@@ -41,7 +41,13 @@
  *  This program only prints out some messages about whether
  *  certain size textures are supported and then exits.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 #include <stdio.h>
 
diff -urN redbook/texsub.c redbook.patched/texsub.c
--- redbook/texsub.c	1997-07-23 03:17:36.000000000 -0500
+++ redbook.patched/texsub.c	2020-07-11 09:57:23.189117583 -0500
@@ -43,7 +43,13 @@
  *  alter the original texture.  If the r key is pressed, 
  *  the original texture is restored.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 #include <stdio.h>
 
diff -urN redbook/texturesurf.c redbook.patched/texturesurf.c
--- redbook/texturesurf.c	1997-07-23 03:17:36.000000000 -0500
+++ redbook.patched/texturesurf.c	2020-07-11 09:57:23.189117583 -0500
@@ -41,7 +41,13 @@
  */
 
 #include <stdlib.h>
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <math.h>
 
 GLfloat ctrlpoints[4][4][3] = {
diff -urN redbook/torus.c redbook.patched/torus.c
--- redbook/torus.c	1997-07-23 03:17:36.000000000 -0500
+++ redbook.patched/torus.c	2020-07-11 09:57:23.189117583 -0500
@@ -40,7 +40,12 @@
  *  This program demonstrates the creation of a display list.
  */
 
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdio.h>
 #include <math.h>
 #include <stdlib.h>
diff -urN redbook/trim.c redbook.patched/trim.c
--- redbook/trim.c	1997-07-23 03:17:36.000000000 -0500
+++ redbook.patched/trim.c	2020-07-11 09:57:23.189117583 -0500
@@ -42,7 +42,13 @@
  *  (piecewise linear) curve to trim part of the surface.
  */
 #include <stdlib.h>
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdio.h>
 
 #ifndef CALLBACK
diff -urN redbook/unproject.c redbook.patched/unproject.c
--- redbook/unproject.c	1997-07-23 03:17:36.000000000 -0500
+++ redbook.patched/unproject.c	2020-07-11 09:57:23.189117583 -0500
@@ -41,7 +41,13 @@
  *  reads the mouse position and determines two 3D points 
  *  from which it was transformed.  Very little is displayed.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 #include <stdio.h>
 
diff -urN redbook/varray.c redbook.patched/varray.c
--- redbook/varray.c	1997-07-23 03:17:36.000000000 -0500
+++ redbook.patched/varray.c	2020-07-11 09:57:23.189117583 -0500
@@ -39,7 +39,13 @@
  *  varray.c
  *  This program demonstrates vertex arrays.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdio.h>
 
 #ifdef GL_VERSION_1_1
diff -urN redbook/wrap.c redbook.patched/wrap.c
--- redbook/wrap.c	1997-07-23 03:17:36.000000000 -0500
+++ redbook.patched/wrap.c	2020-07-11 09:57:23.189117583 -0500
@@ -46,7 +46,13 @@
  *  If running this program on OpenGL 1.0, texture objects are
  *  not used.
  */
+
+#ifdef __APPLE__
+#include <GLUT/glut.h>
+#else
 #include <GL/glut.h>
+#endif
+
 #include <stdlib.h>
 #include <stdio.h>