summaryrefslogtreecommitdiffstats
path: root/third_party/rust/khronos_api/build.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/khronos_api/build.rs')
-rw-r--r--third_party/rust/khronos_api/build.rs61
1 files changed, 61 insertions, 0 deletions
diff --git a/third_party/rust/khronos_api/build.rs b/third_party/rust/khronos_api/build.rs
new file mode 100644
index 0000000000..54fbe01209
--- /dev/null
+++ b/third_party/rust/khronos_api/build.rs
@@ -0,0 +1,61 @@
+// Copyright 2015 Brendan Zabarauskas and the gl-rs developers
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// This build script is used to discover all of the accepted extensions
+// described in the Khronos WebGL repository, and construct a static slice
+// containing the XML specifications for all of them.
+use std::env;
+use std::fs::File;
+use std::io::Write;
+use std::path::*;
+
+fn main() {
+ // Create and open a file in the output directory to contain our generated rust code
+ let dest = env::var("OUT_DIR").unwrap();
+ let mut file = File::create(&Path::new(&dest).join("webgl_exts.rs")).unwrap();
+
+ // Find the absolute path to the folder containing the WebGL extensions.
+ // The absolute path is needed, because we don't know where the output
+ // directory will be, and `include_bytes!(..)` resolves paths relative to the
+ // containing file.
+ let root = env::current_dir().unwrap().join("api_webgl/extensions");
+
+ // Generate a slice literal, looking like this:
+ // `&[&*include_bytes!(..), &*include_bytes!(..), ..]`
+ writeln!(file, "&[").unwrap();
+
+ // The slice will have one entry for each WebGL extension. To find the
+ // extensions we mirror the behaviour of the `api_webgl/extensions/find-exts`
+ // shell script.
+ for entry in root.read_dir().unwrap() {
+ let entry = entry.unwrap();
+ let path = entry.path();
+ let ext_name = path.file_name().unwrap().to_str().unwrap();
+
+ // Each item which is a directory, and is not named `template`, may be
+ // an extension.
+ if path.is_dir() && ext_name != "template" {
+ // If the directory contains a file named `extension.xml`, then this
+ // really is an extension.
+ let ext_path = path.join("extension.xml");
+ if ext_path.is_file() {
+ // Include the XML file, making sure to use an absolute path.
+ writeln!(file, "&*include_bytes!({:?}),", ext_path.to_str().unwrap()).unwrap();
+ }
+ }
+ }
+
+ // Close the slice
+ writeln!(file, "]").unwrap();
+}