scons: Fix dependencies of generated headers.
authorJosé Fonseca <jfonseca@vmware.com>
Mon, 21 Jan 2013 17:47:51 +0000 (17:47 +0000)
committerJosé Fonseca <jfonseca@vmware.com>
Mon, 21 Jan 2013 19:10:54 +0000 (19:10 +0000)
It appears that scons implicit dependency scanners fail to chain
dependencies of generated headers when these are outside the build tree.

This patch ensures generated source files are _always_ put in the build
tree. I'm not 100% this will fix all depency issues, but from my
experiments it does seem to fix this.

NOTE: For this to be effective it is necessary to clean the source tree
from generated header/source files.

Reviewed-by: Brian Paul <brianp@vmware.com>
src/gallium/state_trackers/vega/SConscript
src/gallium/targets/libgl-xlib/SConscript
src/glx/SConscript
src/mapi/glapi/SConscript
src/mapi/glapi/gen/SConscript
src/mapi/vgapi/SConscript
src/mesa/SConscript
src/mesa/drivers/osmesa/SConscript
src/mesa/drivers/x11/SConscript

index 3dada1013396d7db0e40358e120181ebb753cf6b..b68a73299a1f868dbcf914ee86dd5758d5526580 100644 (file)
@@ -9,6 +9,7 @@ env = env.Clone()
 
 env.Append(CPPPATH = [
     '#/src/mapi',
+    Dir('.'),
 ])
 env.Append(CPPDEFINES = [
     'VEGA_VERSION_STRING=',
@@ -47,13 +48,12 @@ vega_sources = [
     'vgu.c'
 ]
 
-api_tmp = env.CodeGenerate(
-        target = '#/src/gallium/state_trackers/vega/api_tmp.h',
+api_tmp, = env.CodeGenerate(
+        target = 'api_tmp.h',
         script = '#src/mapi/mapi/mapi_abi.py',
         source = '#src/mapi/vgapi/vgapi.csv',
         command = python_cmd + ' $SCRIPT --printer vgapi --mode app $SOURCE > $TARGET'
 )
-env.Depends(vega_sources, api_tmp)
 
 st_vega = env.ConvenienceLibrary(
     target = 'st_vega',
index dc1ce89ca49f12a6fd77913b16a59847bacfc72e..58ed6d4a30f35113f4194f85cb38565094099fd6 100644 (file)
@@ -10,6 +10,7 @@ env.Append(CPPPATH = [
     '#/src/mesa',
     '#/src/mesa/main',
     '#src/gallium/state_trackers/glx/xlib',
+    Dir('../../../mapi'), # src/mapi build path for python-generated GL API files/headers
 ])
 
 env.Append(CPPDEFINES = ['USE_XSHM'])
@@ -36,9 +37,6 @@ sources = [
     'xlib.c',
 ]
 
-# The sources depend on the python-generated GL API files/headers.
-env.Depends(sources, glapi_headers)
-
 if True:
     env.Append(CPPDEFINES = ['GALLIUM_TRACE', 'GALLIUM_RBUG', 'GALLIUM_GALAHAD', 'GALLIUM_SOFTPIPE'])
     env.Prepend(LIBS = [trace, rbug, galahad, softpipe])
index c921eef70372c564920ad358883a56164d6b3683..09e0e16861cf4d0be854771c9f0f29f0fe21cce0 100644 (file)
@@ -114,16 +114,14 @@ env.CodeGenerate(
     command = python_cmd + ' $SCRIPT -f $SOURCE -m init_c > $TARGET'
 )
 
-headers = []
-
-headers += env.CodeGenerate(
+env.CodeGenerate(
     target = 'indirect_size.h',
     script = GLAPI + 'gen/glX_proto_size.py',
     source = GLAPI + 'gen/gl_API.xml',
     command = python_cmd + ' $SCRIPT -f $SOURCE -m size_h --only-set -h _INDIRECT_SIZE_H > $TARGET'
 )
 
-headers += env.CodeGenerate(
+env.CodeGenerate(
     target = 'indirect.h',
     script = GLAPI + 'gen/glX_proto_send.py',
     source = GLAPI + 'gen/gl_API.xml',
@@ -131,9 +129,6 @@ headers += env.CodeGenerate(
     )
 
 
-env.Depends(sources, headers)
-
-
 libgl = env.InstallSharedLibrary(libgl, version=(1, 2))
 
 env.Alias('glx', libgl)
index 153374cc551f8b90030ccc80090221ba485f566c..00cce3e7fda08e02dd9abdce3d7dae0cc2c6b67e 100644 (file)
@@ -26,6 +26,7 @@ if env['platform'] == 'windows':
 env.Append(CPPPATH = [
     '#/src/mapi',
     '#/src/mesa',
+    Dir('..'), # src/mapi build path
 ])
 
 glapi_sources = [
@@ -103,6 +104,3 @@ glapi = env.ConvenienceLibrary(
     source = glapi_sources,
 )
 Export('glapi')
-
-
-env.Depends(glapi_sources, glapi_headers)
index 353d0217591dfdf3a2588f0ded4fdef5d0732735..6d36248e783f0cd3ff90e06ed9029797a7dd194b 100644 (file)
@@ -7,43 +7,37 @@ from sys import executable as python_cmd
 # Mesa and GLX tree.  Other .c and .h files are generated elsewhere
 # if they're only used in one place.
 
-GLAPI = '#src/mapi/glapi/'
-
-glapi_headers = []
-
-glapi_headers += env.CodeGenerate(
-    target = '#src/mesa/main/dispatch.h',
-    script = GLAPI + 'gen/gl_table.py',
-    source = GLAPI + 'gen/gl_and_es_API.xml',
+env.CodeGenerate(
+    target = '../../../mesa/main/dispatch.h',
+    script = 'gl_table.py',
+    source = 'gl_and_es_API.xml',
     command = python_cmd + ' $SCRIPT -m remap_table -f $SOURCE > $TARGET',
     )
 
-glapi_headers += env.CodeGenerate(
-    target = '#src/mapi/glapi/glapitable.h',
-    script = GLAPI + 'gen/gl_table.py',
-    source = GLAPI + 'gen/gl_and_es_API.xml',
+env.CodeGenerate(
+    target = '../../../mapi/glapi/glapitable.h',
+    script = 'gl_table.py',
+    source = 'gl_and_es_API.xml',
     command = python_cmd + ' $SCRIPT -f $SOURCE > $TARGET'
     )
 
-glapi_headers += env.CodeGenerate(
-    target = '#src/mapi/glapi/glapitemp.h',
-    script = GLAPI + 'gen/gl_apitemp.py',
-    source = GLAPI + 'gen/gl_and_es_API.xml',
+env.CodeGenerate(
+    target = '../../../mapi/glapi/glapitemp.h',
+    script = 'gl_apitemp.py',
+    source = 'gl_and_es_API.xml',
     command = python_cmd + ' $SCRIPT -f $SOURCE > $TARGET'
     )
 
-glapi_headers += env.CodeGenerate(
-    target = '#src/mapi/glapi/glprocs.h',
-    script = GLAPI + 'gen/gl_procs.py',
-    source = GLAPI + 'gen/gl_and_es_API.xml',
+env.CodeGenerate(
+    target = '../../../mapi/glapi/glprocs.h',
+    script = 'gl_procs.py',
+    source = 'gl_and_es_API.xml',
     command = python_cmd + ' $SCRIPT -f $SOURCE > $TARGET'
     )
 
-glapi_headers += env.CodeGenerate(
-    target = '#src/mesa/main/remap_helper.h',
-    script = GLAPI + 'gen/remap_helper.py',
-    source = GLAPI + 'gen/gl_and_es_API.xml',
+env.CodeGenerate(
+    target = '../../../mesa/main/remap_helper.h',
+    script = 'remap_helper.py',
+    source = 'gl_and_es_API.xml',
     command = python_cmd + ' $SCRIPT -f $SOURCE > $TARGET'
     )
-
-env.Export('glapi_headers')
index 10241fd08c77ac2cf3ee27e311158b41010ebe94..fd4467bb2310e458eeeb8bf57ba61c1bc0ac5338 100644 (file)
@@ -7,8 +7,8 @@ Import('*')
 
 env = env.Clone()
 
-vgapi_header = env.CodeGenerate(
-    target = '#src/mapi/vgapi/vgapi_tmp.h',
+vgapi_header, = env.CodeGenerate(
+    target = 'vgapi_tmp.h',
     script = '../mapi/mapi_abi.py',
     source = 'vgapi.csv',
     command = python_cmd + ' $SCRIPT --printer vgapi --mode lib $SOURCE > $TARGET'
@@ -23,6 +23,7 @@ env.Append(CPPDEFINES = [
 env.Append(CPPPATH = [
     '#/include',
     '#/src/mapi',
+    Dir('..'), # vgapi/vgapi_tmp.h build path
 ])
 
 mapi_sources = [
index e03d6a6a3afc1586183e19128f0f0cb46dc817da..ca9b70bad931f492a9cde28d208ff61a47520c52 100644 (file)
@@ -14,6 +14,8 @@ env.Append(CPPPATH = [
     '#/src/mapi',
     '#/src/glsl',
     '#/src/mesa',
+    Dir('../mapi'), # src/mapi build path
+    Dir('.'), # src/mesa build path
 ])
 
 enabled_apis = []
@@ -290,9 +292,6 @@ program_lex = env.CFile('program/lex.yy.c', 'program/program_lexer.l')
 program_parse = env.CFile('program/program_parse.tab.c',
                           'program/program_parse.y')
 
-# Make program/program_parse.tab.h reacheable from the include path
-env.Append(CPPPATH = [Dir('.').abspath])
-
 program_sources = [
     'program/arbprogparse.c',
     'program/prog_hash_table.c',
@@ -341,19 +340,6 @@ if env['gles']:
 
     enabled_apis += ['ES1', 'ES2']
 
-    # generate GLES sources
-    gles_sources = []
-
-    # generate GLES headers
-    gles_headers = []
-
-    env.Depends(gles_sources, gles_headers)
-
-    # gles_sources #include gles_headers with full path
-    env.Append(CPPPATH = [gles_headers[0].dir.up().up()])
-
-    mesa_sources += gles_sources
-
 env.Append(CPPDEFINES = ["FEATURE_%s=1" % api for api in enabled_apis])
 
 get_hash_gen_opts = ' '.join(["-a %s" % api for api in enabled_apis])
@@ -366,8 +352,6 @@ get_hash_header = env.CodeGenerate(
                 ' -f $SOURCE > $TARGET'
 )
 
-env.Depends(glget_sources, get_hash_header)
-
 #
 # Assembly sources
 #
@@ -453,9 +437,6 @@ env.CodeGenerate(
     command = python_cmd + ' $SCRIPT -f $SOURCE > $TARGET'
     )
 
-# We also depend on the auto-generated GL API headers
-env.Depends(mesa_sources, glapi_headers)
-
 
 def write_git_sha1_h_file(filename):
     """Mesa looks for a git_sha1.h file at compile time in order to display
index e4f23c2ac5eca82cef67a75cc85c7b660b1f2dd8..fb2d98cadc5542e201e4fa5688130798f30bf2eb 100644 (file)
@@ -5,6 +5,7 @@ env = env.Clone()
 env.Prepend(CPPPATH = [
     '#src/mapi',
     '#src/mesa',
+    Dir('../../../mapi'), # src/mapi build path for python-generated GL API files/headers
 ])
 
 env.Prepend(LIBS = [
@@ -34,5 +35,3 @@ osmesa = env.SharedLibrary(
 )
 
 env.Alias('osmesa', osmesa)
-
-env.Depends(sources, glapi_headers)
index 984e6cef4e8001b01938844c9b2c1c4687eaa5a4..b0173bee94c1f961f21c1d2fd2d2344544e97b29 100644 (file)
@@ -6,6 +6,7 @@ env.Append(CPPPATH = [
     '#/src/mapi',
     '#/src/mesa',
     '#/src/mesa/main',
+    Dir('../../../mapi'), # src/mapi build path for python-generated GL API files/headers
 ])
 
 env.Append(CPPDEFINES = ['USE_XSHM'])
@@ -30,9 +31,6 @@ sources = [
        'xm_tri.c',
 ]
 
-# The sources depend on the python-generated GL API files/headers.
-env.Depends(sources, glapi_headers)
-
 # libGL.so.1.6
 libgl_1_6 = env.SharedLibrary(
     target ='GL',