Index: native_client_sdk/src/build_tools/build.scons |
diff --git a/native_client_sdk/src/build_tools/build.scons b/native_client_sdk/src/build_tools/build.scons |
index 06efa1c8cb43fb3f8695d894e3ea563553953041..067c03f3653e50a6877625df6ea793e72a2f9fad 100644 |
--- a/native_client_sdk/src/build_tools/build.scons |
+++ b/native_client_sdk/src/build_tools/build.scons |
@@ -131,9 +131,30 @@ if env['IS_WINDOWS']: |
# Put together the toolchain |
import gyp_extract |
+import re |
+ |
+def GypSources(gyp_data, pattern): |
+ """Extract a sources from a target matching a given pattern. |
+ |
+ Args: |
+ gyp_data: list containing sources from gyp file. |
+ pattern: re pattern that sources must match. |
+ Returns: |
+ A list of strings containing source filenames. |
+ """ |
+ # Extract source files that match. |
+ re_compiled = re.compile(pattern) |
+ return [source_file for source_file in gyp_data |
+ if re_compiled.match(source_file)] |
ppapi_base = os.path.join(env['SRC_DIR'], 'ppapi') |
+# Unfortunately gyp_extract does not handle variables or includes so we must |
+# pull the list of sources from ppapi_sources.gypi directly. |
+ppapi_sources_gypi = open(os.path.join(ppapi_base, |
+ 'ppapi_sources.gypi'), 'r').read() |
+ppapi_sources_map = eval(ppapi_sources_gypi)['variables'] |
+ |
# Load ppapi_cpp.gypi |
ppapi_cpp_gypi = gyp_extract.LoadGypFile(os.path.join(ppapi_base, |
'ppapi_cpp.gypi')) |
@@ -143,25 +164,22 @@ ppapi_gl_gypi = gyp_extract.LoadGypFile(os.path.join(ppapi_base, |
'ppapi_gl.gypi')) |
# From ppapi_cpp.gypi:ppapi_c:c/[^/]*\.h |
-c_headers = gyp_extract.GypTargetSources( |
- ppapi_cpp_gypi, 'ppapi_c', 'c/[^/]*\.h') |
+c_headers = GypSources(ppapi_sources_map['c_sources'], 'c/[^/]*\.h') |
# From ppapi_cpp.gypi:ppapi_c:c/dev/[^/]*\.h |
-c_dev_headers = gyp_extract.GypTargetSources( |
- ppapi_cpp_gypi, 'ppapi_c', 'c/dev/[^/]*\.h') |
+c_dev_headers = GypSources(ppapi_sources_map['c_sources'], 'c/dev/[^/]*\.h') |
# From ppapi_cpp.gypi:ppapi_cpp_objects:cpp/[^/]*\.h |
# From ppapi_cpp.gypi:ppapi_cpp:cpp/[^/]*\.h |
cpp_headers = ( |
- gyp_extract.GypTargetSources( |
- ppapi_cpp_gypi, 'ppapi_cpp_objects', 'cpp/[^/]*\.h') + |
+ GypSources(ppapi_sources_map['cpp_sources'], 'cpp/[^/]*\.h') + |
gyp_extract.GypTargetSources( |
ppapi_cpp_gypi, 'ppapi_cpp', 'cpp/[^/]*\.h') |
) |
# From ppapi_cpp.gypi:ppapi_cpp_objects:cpp/dev/[^/]*\.h |
-cpp_dev_headers = gyp_extract.GypTargetSources( |
- ppapi_cpp_gypi, 'ppapi_cpp_objects', 'cpp/dev/[^/]*\.h') |
+cpp_dev_headers = GypSources(ppapi_sources_map['cpp_sources'], |
+ 'cpp/dev/[^/]*\.h') |
# From ppapi_gl.gypi:ppapi_gles2:.*\.h |
gles2_headers = gyp_extract.GypTargetSources( |
@@ -186,8 +204,7 @@ cpp_dev_header_install = env.AddHeaderToSdk( |
# From ppapi_cpp.gypi:ppapi_cpp_objects:cpp/[^/]*\.cc |
# From ppapi_cpp.gypi:ppapi_cpp:cpp/[^/]*\.cc |
cpp_trusted_sources = ( |
- gyp_extract.GypTargetSources( |
- ppapi_cpp_gypi, 'ppapi_cpp_objects', 'cpp/[^/]*\.cc') + |
+ GypSources(ppapi_sources_map['cpp_sources'], 'cpp/[^/]*\.cc') + |
gyp_extract.GypTargetSources( |
ppapi_cpp_gypi, 'ppapi_cpp', 'cpp/[^/]*\.cc') |
) |