Mesa (master): scons: Build progs together with everything else.

Jose Fonseca jrfonseca at kemper.freedesktop.org
Fri Jan 1 12:20:08 UTC 2010


Module: Mesa
Branch: master
Commit: 7bbf7f94ea786e41ff1364cedaf7dd5c0bbf605a
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=7bbf7f94ea786e41ff1364cedaf7dd5c0bbf605a

Author: José Fonseca <jfonseca at vmware.com>
Date:   Thu Dec 31 21:10:25 2009 +0000

scons: Build progs together with everything else.

This is a substantial reorganization, This particular commit enables:
- building the progs for unices platforms
- glew is now built as a shared library (it is the default, and it is
inconvenient and pointless to shift away from that default)
- all progs get built by default

---

 SConstruct               |    8 +++-
 docs/install.html        |    9 ---
 progs/SConscript         |   38 ++++++++++++++
 progs/SConstruct         |   65 ------------------------
 progs/demos/SConscript   |  124 ++++++++++++++++++++--------------------------
 progs/fp/SConscript      |   15 +-----
 progs/glsl/SConscript    |   20 +-------
 progs/perf/SConscript    |   11 +---
 progs/redbook/SConscript |   20 +-------
 progs/samples/SConscript |   20 +-------
 progs/tests/SConscript   |   20 +-------
 progs/trivial/SConscript |   11 +---
 progs/vp/SConscript      |   11 +---
 progs/vpglsl/SConscript  |   11 +---
 progs/wgl/SConscript     |   14 +----
 src/glew/SConscript      |   31 ++++++++----
 src/glut/glx/SConscript  |   66 ++++++++++++++++--------
 17 files changed, 180 insertions(+), 314 deletions(-)

diff --git a/SConstruct b/SConstruct
index 0a545d5..ed92518 100644
--- a/SConstruct
+++ b/SConstruct
@@ -177,7 +177,7 @@ if env['platform'] != common.default_platform:
 
     SConscript(
         'src/glsl/SConscript',
-        variant_dir = env['build'] + '/host',
+        variant_dir = os.path.join(env['build'], 'host'),
         duplicate = 0, # http://www.scons.org/doc/0.97/HTML/scons-user/x2261.html
         exports={'env':host_env},
     )
@@ -187,3 +187,9 @@ SConscript(
 	variant_dir = env['build'],
 	duplicate = 0 # http://www.scons.org/doc/0.97/HTML/scons-user/x2261.html
 )
+
+SConscript(
+	'progs/SConscript',
+	variant_dir = os.path.join('progs', env['build']),
+	duplicate = 0 # http://www.scons.org/doc/0.97/HTML/scons-user/x2261.html
+)
diff --git a/docs/install.html b/docs/install.html
index 8c24cee..5aea92e 100644
--- a/docs/install.html
+++ b/docs/install.html
@@ -352,19 +352,10 @@ by -debug for debug builds.
 </p>
 
 <p>
-The sample programs are built seperately. To build them do
-<pre>
-    scons -C progs
-</pre>
-And the build output will be placed in progs/build/...
-</p>
-
-<p>
 To build Mesa with SCons for Windows on Linux using the MinGW crosscompiler toolchain do
 </p>
 <pre>
     scons platform=windows toolchain=crossmingw machine=x86 statetrackers=mesa drivers=softpipe,trace winsys=gdi
-    scons -C progs platform=windows toolchain=crossmingw machine=x86 -k
 </pre>
 <p>
 This will create:
diff --git a/progs/SConscript b/progs/SConscript
index 66eaf9e..3b180d0 100644
--- a/progs/SConscript
+++ b/progs/SConscript
@@ -1,5 +1,43 @@
 SConscript([
     'util/SConscript',
+])
+
+Import('*')
+
+progs_env = env.Clone()
+
+if progs_env['platform'] == 'windows':
+    progs_env.Append(CPPDEFINES = ['NOMINMAX'])
+    progs_env.Prepend(LIBS = [
+        'winmm',
+        'kernel32',
+        'user32',
+        'gdi32',
+    ])
+
+# OpenGL
+if progs_env['platform'] == 'windows':
+    progs_env.Prepend(LIBS = ['glu32', 'opengl32'])
+else:
+    progs_env.Prepend(LIBS = ['GLU', 'GL'])
+
+# Glut
+progs_env.Prepend(LIBS = [glut])
+
+# GLEW
+progs_env.Prepend(LIBS = [glew])
+
+progs_env.Prepend(CPPPATH = [
+	'#progs/util',
+])
+
+progs_env.Prepend(LIBS = [
+	util,
+])
+
+Export('progs_env')
+
+SConscript([
     'demos/SConscript',
     'glsl/SConscript',
     'redbook/SConscript',
diff --git a/progs/SConstruct b/progs/SConstruct
deleted file mode 100644
index 4d268cc..0000000
--- a/progs/SConstruct
+++ /dev/null
@@ -1,65 +0,0 @@
-import os
-import os.path
-import sys
-
-env = Environment(
-    tools = ['generic'],
-    toolpath = ['../scons'],
-    ENV = os.environ,
-)
-
-
-# Use Mesa's headers and libs
-if 1:
-    build_topdir = 'build'
-    build_subdir = env['platform']
-    if env['machine'] != 'generic':
-        build_subdir += '-' + env['machine']
-    if env['debug']:
-        build_subdir += "-debug"
-    if env['profile']:
-        build_subdir += "-profile"
-    build_dir = os.path.join(build_topdir, build_subdir)
-
-    env.Append(CPPDEFINES = ['GLEW_STATIC'])
-    env.Append(CPPPATH = ['#../include'])
-    env.Append(LIBPATH = [
-        '#../' + build_dir + '/glew/',
-        '#../' + build_dir + '/glut/glx',
-    ])
-
-
-conf = Configure(env)
-
-# OpenGL
-if env['platform'] == 'windows':
-    env.Prepend(LIBS = ['glu32', 'opengl32'])
-else:
-    env.Prepend(LIBS = ['GLU', 'GL'])
-
-# Glut
-env['GLUT'] = False
-if conf.CheckCHeader('GL/glut.h'):
-    if env['platform'] == 'windows':
-        env['GLUT_LIB'] = 'glut32'
-    else:
-        env['GLUT_LIB'] = 'glut'
-    env['GLUT'] = True
-
-# GLEW
-env['GLEW'] = False
-if conf.CheckCHeader('GL/glew.h'):
-    env['GLEW_LIB'] = 'glew'
-    env['GLEW'] = True
-    env.Prepend(LIBS = ['glew'])
-
-conf.Finish()
-
-
-Export('env')
-
-SConscript(
-    'SConscript',
-    build_dir = env['build'],
-    duplicate = 0 # http://www.scons.org/doc/0.97/HTML/scons-user/x2261.html
-)
diff --git a/progs/demos/SConscript b/progs/demos/SConscript
index f851870..742dd66 100644
--- a/progs/demos/SConscript
+++ b/progs/demos/SConscript
@@ -1,84 +1,66 @@
 Import('*')
 
-if not env['GLUT']:
-    Return()
-
-env = env.Clone()
-
-env.Prepend(CPPPATH = [
-	'../util',
-])
-
-env.Prepend(LIBS = [
-	util,
-	'$GLUT_LIB'
-])
-
-if env['platform'] == 'windows':
-    env.Append(CPPDEFINES = ['NOMINMAX'])
-    env.Prepend(LIBS = ['winmm'])
-
 progs = [
-	'arbfplight',
-	'arbfslight',
-	'arbocclude',
-	'bounce',
-	'clearspd',
-	'copypix',
-	'cubemap',
-	'drawpix',
-	'engine',
-	'fbo_firecube',
-	'fire',
-	'fogcoord',
-	'fplight',
-	'fslight',
-	'gamma',
-	'gearbox',
-	'gears',
-	'geartrain',
-	'glinfo',
-	'gloss',
-	'gltestperf',
-	'ipers',
-	'isosurf',
-	'lodbias',
-	'morph3d',
-	'multiarb',
-	'paltex',
-	'pointblast',
-	'ray',
-	'readpix',
-	'reflect',
-	'renormal',
-	'shadowtex',
-	'singlebuffer',
-	'spectex',
-	'spriteblast',
-	'stex3d',
-	'teapot',
-	'terrain',
-	'tessdemo',
-	'texcyl',
-	'texenv',
-	'textures',
-	'trispd',
-	'tunnel',
-	'tunnel2',
-	'vao_demo',
-	'winpos',
-        'dinoshade',
-        'fbotexture',
-        'projtex',
+    'arbfplight',
+    'arbfslight',
+    'arbocclude',
+    'bounce',
+    'clearspd',
+    'copypix',
+    'cubemap',
+    'drawpix',
+    'engine',
+    'fbo_firecube',
+    'fire',
+    'fogcoord',
+    'fplight',
+    'fslight',
+    'gamma',
+    'gearbox',
+    'gears',
+    'geartrain',
+    'glinfo',
+    'gloss',
+    'gltestperf',
+    'ipers',
+    'isosurf',
+    'lodbias',
+    'morph3d',
+    'multiarb',
+    'paltex',
+    'pointblast',
+    'ray',
+    'readpix',
+    'reflect',
+    'renormal',
+    'shadowtex',
+    'singlebuffer',
+    'spectex',
+    'spriteblast',
+    'stex3d',
+    'teapot',
+    'terrain',
+    'tessdemo',
+    'texcyl',
+    'texenv',
+    'textures',
+    'trispd',
+    'tunnel',
+    'tunnel2',
+    'vao_demo',
+    'winpos',
+    'dinoshade',
+    'fbotexture',
+    'projtex',
 ]
 
 for prog in progs:
-    env.Program(
+    progs_env.Program(
         target = prog,
         source = prog + '.c',
     )
     
-env.Program(
+progs_env.Program(
     target = 'rain',
     source = [
         'rain.cxx',
diff --git a/progs/fp/SConscript b/progs/fp/SConscript
index a783185..113e11a 100644
--- a/progs/fp/SConscript
+++ b/progs/fp/SConscript
@@ -1,15 +1,4 @@
-Import('env')
-
-if not env['GLUT']:
-    Return()
-
-env = env.Clone()
-
-env.Prepend(CPPPATH = [
-	'../util',
-])
-
-env.Prepend(LIBS = ['$GLUT_LIB'])
+Import('*')
 
 progs = [
     'fp-tri',
@@ -24,7 +13,7 @@ progs = [
 ]
 
 for prog in progs:
-    env.Program(
+    progs_env.Program(
         target = prog,
         source = [prog + '.c'],
     )
diff --git a/progs/glsl/SConscript b/progs/glsl/SConscript
index 7a4549c..8f2ebcf 100644
--- a/progs/glsl/SConscript
+++ b/progs/glsl/SConscript
@@ -1,23 +1,5 @@
 Import('*')
 
-if not env['GLUT']:
-    Return()
-
-env = env.Clone()
-
-env.Prepend(CPPPATH = [
-	'../util',
-])
-
-env.Prepend(LIBS = [
-	util,
-	'$GLUT_LIB'
-])
-
-if env['platform'] == 'windows':
-    env.Append(CPPDEFINES = ['NOMINMAX'])
-    env.Prepend(LIBS = ['winmm'])
-
 progs = [
       'array',
       'bitmap',
@@ -48,7 +30,7 @@ progs = [
 ]
 
 for prog in progs:
-    env.Program(
+    progs_env.Program(
         target = prog,
         source = prog + '.c',
     )
diff --git a/progs/perf/SConscript b/progs/perf/SConscript
index a5ec9a7..691478a 100644
--- a/progs/perf/SConscript
+++ b/progs/perf/SConscript
@@ -1,11 +1,4 @@
-Import('env')
-
-if not env['GLUT']:
-    Return()
-
-env = env.Clone()
-
-env.Prepend(LIBS = ['$GLUT_LIB'])
+Import('*')
 
 progs = [
       'copytex',
@@ -21,7 +14,7 @@ progs = [
 ]
 
 for prog in progs:
-    env.Program(
+    progs_env.Program(
         target = prog,
         source = [
             prog + '.c',
diff --git a/progs/redbook/SConscript b/progs/redbook/SConscript
index 242cb66..24d7cff 100644
--- a/progs/redbook/SConscript
+++ b/progs/redbook/SConscript
@@ -1,23 +1,5 @@
 Import('*')
 
-if not env['GLUT']:
-    Return()
-
-env = env.Clone()
-
-env.Prepend(CPPPATH = [
-	'../util',
-])
-
-env.Prepend(LIBS = [
-	util,
-	'$GLUT_LIB'
-])
-
-if env['platform'] == 'windows':
-    env.Append(CPPDEFINES = ['NOMINMAX'])
-    env.Prepend(LIBS = ['winmm'])
-
 progs = [
     'aaindex',
     'aapoly',
@@ -85,7 +67,7 @@ progs = [
 ]
 
 for prog in progs:
-    env.Program(
+    progs_env.Program(
         target = prog,
         source = prog + '.c',
     )
diff --git a/progs/samples/SConscript b/progs/samples/SConscript
index 7a8a0d6..134dfa9 100644
--- a/progs/samples/SConscript
+++ b/progs/samples/SConscript
@@ -1,23 +1,5 @@
 Import('*')
 
-if not env['GLUT']:
-    Return()
-
-env = env.Clone()
-
-env.Prepend(CPPPATH = [
-	'../util',
-])
-
-env.Prepend(LIBS = [
-	util,
-	'$GLUT_LIB'
-])
-
-if env['platform'] == 'windows':
-    env.Append(CPPDEFINES = ['NOMINMAX'])
-    env.Prepend(LIBS = ['winmm'])
-
 progs = [
     'accum',
     'bitmap1',
@@ -52,7 +34,7 @@ progs = [
 ]
 
 for prog in progs:
-    env.Program(
+    progs_env.Program(
         target = prog,
         source = prog + '.c',
     )
diff --git a/progs/tests/SConscript b/progs/tests/SConscript
index ae6488b..e2c6538 100644
--- a/progs/tests/SConscript
+++ b/progs/tests/SConscript
@@ -1,23 +1,5 @@
 Import('*')
 
-if not env['GLUT']:
-    Return()
-
-env = env.Clone()
-
-env.Prepend(CPPPATH = [
-	'../util',
-])
-
-env.Prepend(LIBS = [
-	util,
-	'$GLUT_LIB'
-])
-
-if env['platform'] == 'windows':
-    env.Append(CPPDEFINES = ['NOMINMAX'])
-    env.Prepend(LIBS = ['winmm'])
-
 linux_progs = [
     'api_speed',
 ]
@@ -140,7 +122,7 @@ progs = [
 ]
 
 for prog in progs:
-    env.Program(
+    progs_env.Program(
         target = prog,
         source = prog + '.c',
     )
diff --git a/progs/trivial/SConscript b/progs/trivial/SConscript
index 9a1f357..613383c 100644
--- a/progs/trivial/SConscript
+++ b/progs/trivial/SConscript
@@ -1,11 +1,4 @@
-Import('env')
-
-if not env['GLUT']:
-    Return()
-
-env = env.Clone()
-
-env.Prepend(LIBS = ['$GLUT_LIB'])
+Import('*')
 
 progs = [
     'clear-fbo-tex',
@@ -154,7 +147,7 @@ progs = [
 ]
 
 for prog in progs:
-    prog = env.Program(
+    prog = progs_env.Program(
         target = prog,
         source = prog + '.c',
     )
diff --git a/progs/vp/SConscript b/progs/vp/SConscript
index 640c5dd..787cb79 100644
--- a/progs/vp/SConscript
+++ b/progs/vp/SConscript
@@ -1,13 +1,6 @@
-Import('env')
+Import('*')
 
-if not env['GLUT']:
-    Return()
-
-env = env.Clone()
-
-env.Prepend(LIBS = ['$GLUT_LIB'])
-
-env.Program(
+progs_env.Program(
         target = 'vp-tris',
         source = ['vp-tris.c'],
     )
diff --git a/progs/vpglsl/SConscript b/progs/vpglsl/SConscript
index 640c5dd..787cb79 100644
--- a/progs/vpglsl/SConscript
+++ b/progs/vpglsl/SConscript
@@ -1,13 +1,6 @@
-Import('env')
+Import('*')
 
-if not env['GLUT']:
-    Return()
-
-env = env.Clone()
-
-env.Prepend(LIBS = ['$GLUT_LIB'])
-
-env.Program(
+progs_env.Program(
         target = 'vp-tris',
         source = ['vp-tris.c'],
     )
diff --git a/progs/wgl/SConscript b/progs/wgl/SConscript
index 31f6167..248cc53 100644
--- a/progs/wgl/SConscript
+++ b/progs/wgl/SConscript
@@ -1,25 +1,17 @@
 Import('*')
 
-if env['platform'] != 'windows':
+if progs_env['platform'] != 'windows':
     Return()
 
-env = env.Clone()
-
-env.Append(LIBS = [
-    'kernel32',
-    'user32',
-    'gdi32',
-])
-
 progs = [
     'sharedtex_mt',
     'wglthreads',
 ]
 
 for prog in progs:
-    env.Program(
+    progs_env.Program(
         target = prog,
         source = prog + '/' + prog + '.c',
     )
 
-env.Program('wglinfo', ['wglinfo.c'])
+progs_env.Program('wglinfo', ['wglinfo.c'])
diff --git a/src/glew/SConscript b/src/glew/SConscript
index 1161be6..b4541a7 100644
--- a/src/glew/SConscript
+++ b/src/glew/SConscript
@@ -7,7 +7,7 @@ env = env.Clone()
 
 env.Append(CPPDEFINES = [
     'GLEW_BUILD',
-    'GLEW_STATIC',
+    #'GLEW_STATIC',
     #'GLEW_MX', # Multiple Rendering Contexts support
 ])
 
@@ -15,15 +15,6 @@ env.PrependUnique(CPPPATH = [
     '#/include',
 ])
 
-glew = env.StaticLibrary(
-    target = 'glew',
-    source = [
-        'glew.c',
-    ],
-)
-
-env = env.Clone()
-
 if env['platform'] == 'windows':
     env.PrependUnique(LIBS = [
         'glu32', 
@@ -37,6 +28,24 @@ else:
         'GL',
         'X11',
     ])
+
+if env['platform'] == 'windows':
+    target = 'glew'
+else:
+    target = 'GLEW'
+
+glew = env.SharedLibrary(
+    target = target,
+    source = [
+        'glew.c',
+    ],
+)
+
+if env['platform'] == 'windows':
+    glew = env.FindIxes(glew, 'LIBPREFIX', 'LIBSUFFIX')
+
+env = env.Clone()
+
 env.Prepend(LIBS = [glew])
 
 env.Program(
@@ -48,3 +57,5 @@ env.Program(
     target = 'visualinfo',
     source = ['visualinfo.c'],
 )
+
+Export('glew')
diff --git a/src/glut/glx/SConscript b/src/glut/glx/SConscript
index 938fec0..5234e6d 100644
--- a/src/glut/glx/SConscript
+++ b/src/glut/glx/SConscript
@@ -2,11 +2,6 @@ Import('*')
 
 env = env.Clone()
 
-if env['platform'] != 'windows':
-    Return()
-
-target = 'glut32'
-
 env.Replace(CPPDEFINES = [
     'BUILD_GLUT32', 
     'GLUT_BUILDING_LIB', 
@@ -18,14 +13,6 @@ env.AppendUnique(CPPPATH = [
     '#/include',
 ])
 
-env.PrependUnique(LIBS = [
-    'winmm', 
-    'gdi32', 
-    'user32', 
-    'opengl32', 
-    'glu32',
-])
-
 sources = [
     'glut_bitmap.c',
     'glut_bwidth.c',
@@ -61,12 +48,6 @@ sources = [
     'glut_warp.c',
     'glut_win.c',
     'glut_winmisc.c',
-
-    'win32_glx.c',
-    'win32_menu.c',
-    'win32_util.c',
-    'win32_winproc.c',
-    'win32_x11.c',
     
     'glut_8x13.c',
     'glut_9x15.c',
@@ -77,11 +58,52 @@ sources = [
     'glut_roman.c',
     'glut_tr10.c',
     'glut_tr24.c',
-
-    'glut.def',
 ]
 
-env.SharedLibrary(
+if env['platform'] == 'windows':
+    env.PrependUnique(LIBS = [
+        'winmm', 
+        'gdi32', 
+        'user32', 
+        'opengl32', 
+        'glu32',
+    ])
+    target = 'glut32'
+    sources += [
+        'win32_glx.c',
+        'win32_menu.c',
+        'win32_util.c',
+        'win32_winproc.c',
+        'win32_x11.c',
+        'glut.def',
+    ]
+else:
+    env.PrependUnique(LIBS = [
+        'GLU',
+        'GL',
+        'X11',
+        'Xext',
+        'Xmu',
+        'Xi',
+    ])
+    target = 'glut'
+    sources += [
+        'glut_fcb.c',
+        'glut_menu.c',
+        'glut_menu2.c',
+        'glut_glxext.c',
+        'layerutil.c',
+    ]
+
+
+glut = env.SharedLibrary(
     target = target,
     source = sources,
 )
+
+env.InstallSharedLibrary(glut, version=(3, 7, 1))
+
+if env['platform'] == 'windows':
+    glut = env.FindIxes(glut, 'LIBPREFIX', 'LIBSUFFIX')
+
+Export('glut')




More information about the mesa-commit mailing list