diff --git a/src/glsl/bezier.c b/src/glsl/bezier.c
index 84e0367..62996fb 100644
--- a/src/glsl/bezier.c
+++ b/src/glsl/bezier.c
@@ -13,7 +13,7 @@
 #include "glut_wrap.h"
 #include "shaderutil.h"
 
-static const char *filename = "bezier.geom";
+static const char *filename = DEMOS_DATA_DIR "bezier.geom";
 
 static GLuint fragShader;
 static GLuint vertShader;
diff --git a/src/glsl/blinking-teapot.c b/src/glsl/blinking-teapot.c
index 62451e9..3420066 100644
--- a/src/glsl/blinking-teapot.c
+++ b/src/glsl/blinking-teapot.c
@@ -63,8 +63,8 @@ init_opengl (void)
      exit(1);
   }     
 
-  vshad_id = CompileShaderFile (GL_VERTEX_SHADER, "blinking-teapot.vert");
-  fshad_id = CompileShaderFile (GL_FRAGMENT_SHADER, "blinking-teapot.frag");
+  vshad_id = CompileShaderFile (GL_VERTEX_SHADER, DEMOS_DATA_DIR "blinking-teapot.vert");
+  fshad_id = CompileShaderFile (GL_FRAGMENT_SHADER, DEMOS_DATA_DIR "blinking-teapot.frag");
   prog_id = LinkShaders (vshad_id, fshad_id);
 
   glUseProgram (prog_id);
diff --git a/src/glsl/brick.c b/src/glsl/brick.c
index 00d8349..f9f0ec7 100644
--- a/src/glsl/brick.c
+++ b/src/glsl/brick.c
@@ -14,8 +14,8 @@
 #include "shaderutil.h"
 
 
-static char *FragProgFile = "CH06-brick.frag";
-static char *VertProgFile = "CH06-brick.vert";
+static char *FragProgFile = DEMOS_DATA_DIR "CH06-brick.frag";
+static char *VertProgFile = DEMOS_DATA_DIR "CH06-brick.vert";
 
 /* program/shader objects */
 static GLuint fragShader;
diff --git a/src/glsl/bump.c b/src/glsl/bump.c
index 95ad19f..f40cba0 100644
--- a/src/glsl/bump.c
+++ b/src/glsl/bump.c
@@ -15,9 +15,9 @@
 #include "readtex.h"
 
 
-static char *FragProgFile = "CH11-bumpmap.frag";
-static char *FragTexProgFile = "CH11-bumpmaptex.frag";
-static char *VertProgFile = "CH11-bumpmap.vert";
+static char *FragProgFile = DEMOS_DATA_DIR "CH11-bumpmap.frag";
+static char *FragTexProgFile = DEMOS_DATA_DIR "CH11-bumpmaptex.frag";
+static char *VertProgFile = DEMOS_DATA_DIR "CH11-bumpmap.vert";
 static char *TextureFile = DEMOS_DATA_DIR "tile.rgb";
 
 /* program/shader objects */
diff --git a/src/glsl/convolutions.c b/src/glsl/convolutions.c
index 567b358..4c681dd 100644
--- a/src/glsl/convolutions.c
+++ b/src/glsl/convolutions.c
@@ -340,7 +340,7 @@ static void init(void)
 
    menuInit();
    readTexture(textureLocation);
-   createProgram("convolution.vert", "convolution.frag");
+   createProgram(DEMOS_DATA_DIR "convolution.vert", DEMOS_DATA_DIR "convolution.frag");
 
    glEnable(GL_TEXTURE_2D);
    glClearColor(1.0, 1.0, 1.0, 1.0);
diff --git a/src/glsl/mandelbrot.c b/src/glsl/mandelbrot.c
index 18b817c..6bbeffd 100644
--- a/src/glsl/mandelbrot.c
+++ b/src/glsl/mandelbrot.c
@@ -14,8 +14,8 @@
 #include "shaderutil.h"
 
 
-static char *FragProgFile = "CH18-mandel.frag";
-static char *VertProgFile = "CH18-mandel.vert";
+static char *FragProgFile = DEMOS_DATA_DIR "CH18-mandel.frag";
+static char *VertProgFile = DEMOS_DATA_DIR "CH18-mandel.vert";
 
 /* program/shader objects */
 static GLuint fragShader;
diff --git a/src/glsl/meson.build b/src/glsl/meson.build
index db8c613..13564a4 100644
--- a/src/glsl/meson.build
+++ b/src/glsl/meson.build
@@ -83,3 +83,38 @@ executable(
   ],
   install: true
 )
+
+glsl_data = [
+  'bezier.geom',
+  'blinking-teapot.frag',
+  'blinking-teapot.vert',
+  'brick.shtest',
+  'CH06-brick.frag',
+  'CH06-brick.vert',
+  'CH11-bumpmap.frag',
+  'CH11-bumpmaptex.frag',
+  'CH11-bumpmap.vert',
+  'CH11-toyball.frag',
+  'CH11-toyball.vert',
+  'CH18-mandel.frag',
+  'CH18-mandel.vert',
+  'convolution.frag',
+  'convolution.vert',
+  'cubemap.frag',
+  'mandelbrot.shtest',
+  'multitex.frag',
+  'multitex.shtest',
+  'multitex.vert',
+  'reflect.vert',
+  'shadowtex.frag',
+  'simple.vert',
+  'simplex-noise.glsl',
+  'skinning.frag',
+  'skinning.vert',
+  'toyball.shtest',
+]
+
+install_data(
+  glsl_data,
+  install_dir: get_option('datadir') / 'mesa-demos'
+)
diff --git a/src/glsl/multitex.c b/src/glsl/multitex.c
index 2f9a2fa..b51aba3 100644
--- a/src/glsl/multitex.c
+++ b/src/glsl/multitex.c
@@ -35,8 +35,8 @@
 
 static const char *Demo = "multitex";
 
-static const char *VertFile = "multitex.vert";
-static const char *FragFile = "multitex.frag";
+static const char *VertFile = DEMOS_DATA_DIR "multitex.vert";
+static const char *FragFile = DEMOS_DATA_DIR "multitex.frag";
 
 static const char *TexFiles[2] = 
    {
diff --git a/src/glsl/simplex-noise.c b/src/glsl/simplex-noise.c
index a687508..9a2a029 100644
--- a/src/glsl/simplex-noise.c
+++ b/src/glsl/simplex-noise.c
@@ -169,7 +169,7 @@ SpecialKey(int key, int x, int y)
 static void
 Init(void)
 {
-   const char *filename = "simplex-noise.glsl";
+   const char *filename = DEMOS_DATA_DIR "simplex-noise.glsl";
    char noiseText[10000];
    FILE *f;
    int len;
diff --git a/src/glsl/skinning.c b/src/glsl/skinning.c
index b451d13..0f4e943 100644
--- a/src/glsl/skinning.c
+++ b/src/glsl/skinning.c
@@ -20,8 +20,8 @@
 #define M_PI 3.1415926535
 #endif
 
-static char *FragProgFile = "skinning.frag";
-static char *VertProgFile = "skinning.vert";
+static char *FragProgFile = DEMOS_DATA_DIR "skinning.frag";
+static char *VertProgFile = DEMOS_DATA_DIR "skinning.vert";
 
 /* program/shader objects */
 static GLuint fragShader;
diff --git a/src/glsl/texdemo1.c b/src/glsl/texdemo1.c
index 861d696..42308d1 100644
--- a/src/glsl/texdemo1.c
+++ b/src/glsl/texdemo1.c
@@ -35,11 +35,11 @@
 
 static const char *Demo = "texdemo1";
 
-static const char *ReflectVertFile = "reflect.vert";
-static const char *CubeFragFile = "cubemap.frag";
+static const char *ReflectVertFile = DEMOS_DATA_DIR "reflect.vert";
+static const char *CubeFragFile = DEMOS_DATA_DIR "cubemap.frag";
 
-static const char *SimpleVertFile = "simple.vert";
-static const char *SimpleTexFragFile = "shadowtex.frag";
+static const char *SimpleVertFile = DEMOS_DATA_DIR "simple.vert";
+static const char *SimpleTexFragFile = DEMOS_DATA_DIR "shadowtex.frag";
 
 static const char *GroundImage = DEMOS_DATA_DIR "tile.rgb";
 
diff --git a/src/glsl/toyball.c b/src/glsl/toyball.c
index 17aa765..5b1f7d3 100644
--- a/src/glsl/toyball.c
+++ b/src/glsl/toyball.c
@@ -14,8 +14,8 @@
 #include "shaderutil.h"
 
 
-static char *FragProgFile = "CH11-toyball.frag";
-static char *VertProgFile = "CH11-toyball.vert";
+static char *FragProgFile = DEMOS_DATA_DIR "CH11-toyball.frag";
+static char *VertProgFile = DEMOS_DATA_DIR "CH11-toyball.vert";
 
 /* program/shader objects */
 static GLuint fragShader;
