#!/usr/bin/env python # Copyright (c) 2009 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import posixpath import sys import os.path output_filename = 'samples_gen.gyp' try: output_file = open(output_filename, "w+") except IOError: sys.stderr.write('Unable to write to generated gyp file %s\n', output_filename) x_up = '1,0,0' y_up = '0,1,0' z_up = '0,0,1' names = { x_up : 'x_up', y_up : 'y_up', z_up : 'z_up', } assets = [ {'path': 'GoogleIO-2009/convert_assets/background.zip', 'up': y_up}, {'path': 'GoogleIO-2009/convert_assets/character.zip', 'up': y_up}, {'path': 'beachdemo/convert_assets/beach-low-poly.dae', 'up': z_up}, {'path': 'beachdemo/convert_assets/beachdemo.zip', 'up': z_up}, {'path': 'convert_assets/dome1.zip', 'up': y_up}, {'path': 'convert_assets/dome2.zip', 'up': y_up}, {'path': 'convert_assets/dome3.zip', 'up': y_up}, {'path': 'convert_assets/dome4.zip', 'up': y_up}, {'path': 'convert_assets/kitty_151_idle_stand05_cff1.zip', 'up': y_up}, {'path': 'convert_assets/part1.zip', 'up': y_up}, {'path': 'convert_assets/part2.zip', 'up': y_up}, {'path': 'convert_assets/part3.zip', 'up': y_up}, {'path': 'convert_assets/seven_shapes.zip', 'up': y_up}, {'path': 'convert_assets/stencil_frame.zip', 'up': y_up}, {'path': 'convert_assets/teapot.zip', 'up': y_up}, {'path': 'convert_assets/yard.zip', 'up': y_up}, {'path': 'home-configurators/convert_cbassets/Agra_Rug.kmz', 'up': z_up}, {'path': 'home-configurators/convert_cbassets/Asimi_Rug.kmz', 'up': z_up}, {'path': 'home-configurators/convert_cbassets/Camden_Chair.kmz', 'up': z_up}, {'path': 'home-configurators/convert_cbassets/Elements_Bookshelf.kmz', 'up': z_up}, {'path': 'home-configurators/convert_cbassets/Ferrara_Rug.kmz', 'up': z_up}, {'path': 'home-configurators/convert_cbassets/House_Roofless.kmz', 'up': z_up}, {'path': 'home-configurators/convert_cbassets/Lounge_Chair.kmz', 'up': z_up}, {'path': 'home-configurators/convert_cbassets/Lounge_Chaise.kmz', 'up': z_up}, {'path': 'home-configurators/convert_cbassets/Lounge_Sofa.kmz', 'up': z_up}, {'path': 'home-configurators/convert_cbassets/Lounge_Storage_Ottoman.kmz', 'up': z_up}, {'path': 'home-configurators/convert_cbassets/Madison_Dining_Table.kmz', 'up': z_up}, {'path': 'home-configurators/convert_cbassets/Miles_Side_Chair.kmz', 'up': z_up}, {'path': 'home-configurators/convert_cbassets/Pullman_Bar_Stool.kmz', 'up': z_up}, {'path': 'home-configurators/convert_cbassets/Puzzle_TV_Stand.kmz', 'up': z_up}, {'path': 'home-configurators/convert_cbassets/Stow_Leather_Ottoman.kmz', 'up': z_up}, {'path': 'home-configurators/convert_cbassets/Tivoli_Dining_Table.kmz', 'up': z_up}, {'path': 'home-configurators/convert_cbassets/Tivoli_Miles_Dining_Set.kmz', 'up': z_up}, {'path': 'home-configurators/convert_cbassets/Troy_Chair.kmz', 'up': z_up}, {'path': 'home-configurators/convert_cbassets/Troy_Ottoman.kmz', 'up': z_up}, {'path': 'home-configurators/convert_cbassets/Troy_Sofa.kmz', 'up': z_up}, {'path': 'home-configurators/convert_cbassets/Troy_Storage_Ottoman.kmz', 'up': z_up}, {'path': 'home-configurators/convert_cbassets/Troy_Twin_Sleeper.kmz', 'up': z_up}, {'path': 'io/convert_levels/all_actors.kmz', 'up': y_up}, {'path': 'io/convert_levels/map1.kmz', 'up': y_up}, {'path': 'simpleviewer/convert_assets/cube.zip', 'up': y_up}, ] output_file.write("""# Copyright (c) 2009 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. { 'variables': { 'chromium_code': 1, }, 'includes': [ '../build/common.gypi', ], 'targets': [ { 'target_name': 'build_samples', 'type': 'none', 'dependencies': [ '../converter/converter.gyp:o3dConverter', ], 'actions': [\n""") for asset in assets: filename = posixpath.splitext(posixpath.basename(asset['path']))[0] filename = filename.replace('.','_') filename = filename.replace('-','_') filename = filename.lower() name = "convert_" + filename output = asset['path'].replace('convert_', '') output = posixpath.splitext(output)[0] + ".o3dtgz" output_dir = posixpath.dirname(output) output_file.write(" {\n") output_file.write(" 'action_name': '%s',\n" % name) output_file.write(" 'inputs': [\n") output_file.write(" '<(PRODUCT_DIR)/o3dConverter',\n") output_file.write(" '../o3d_assets/samples/%s',\n" % asset['path']) output_file.write(" ],\n") output_file.write(" 'outputs': [\n") if sys.platform[:5] == 'linux': # TODO(gspencer): This is a HACK! We shouldn't need to put the # absolute path here, but currently on Linux (scons), it is unable # to copy generated items out of the source tree (because the # repository mojo fails to find it and puts in the wrong path). output_file.write(" '%s',\n" % posixpath.abspath(output)) else: output_file.write(" '../samples/%s',\n" % output) output_file.write(" ],\n") output_file.write(" 'action': [\n") output_file.write(" '<(PRODUCT_DIR)/o3dConverter',\n") output_file.write(" '--no-condition',\n") output_file.write(" '--up-axis=%s',\n" % asset['up']) output_file.write(" '../o3d_assets/samples/%s',\n" % asset['path']) output_file.write(" '<(_outputs)',\n") output_file.write(" ],\n") output_file.write(" },\n") output_file.write(" ],\n") # Coalesce copies by directory so we don't have tons of copies rules # to parse. copies = {} for asset in assets: output = asset['path'].replace('convert_', '') output = posixpath.splitext(output)[0] + ".o3dtgz" output_dir = posixpath.dirname(output) if output_dir in copies: # Make sure we don't add any twice. if not output in copies[output_dir]: copies[output_dir] += [output] else: copies[output_dir] = [output] # Add in all the MANIFEST files to be copied, # Skipping the ones in the assets above (if any). items = eval(open("MANIFEST", "r").read()) if not os.path.exists("../../o3d-internal/jscomp/JSCompiler_deploy.jar"): # add in the o3djs files. js_files = eval(open("o3djs/js_list.manifest", "r").read()) js_files = ["o3djs/" + f for f in js_files] items = items + js_files for item in items: item_dir = posixpath.dirname(item) if item_dir in copies: if not item in copies[item_dir]: copies[item_dir] += [item] else: copies[item_dir] = [item] output_file.write(" 'copies': [\n") for (dir, paths) in copies.items(): output_file.write(" {\n") output_file.write(" 'destination': " \ "'<(PRODUCT_DIR)/samples/%s',\n" % dir) output_file.write(" 'files': [\n") for path in paths: if sys.platform[:5] == 'linux': # TODO(gspencer): This is a HACK! We shouldn't need to put the # absolute path here, but currently on Linux (scons), it is unable # to copy generated items out of the source tree (because the # repository mojo fails to find it and puts in the wrong path). output_file.write(" '%s',\n" % posixpath.abspath(path)) else: output_file.write(" '../samples/%s',\n" % path) output_file.write(" ],\n") output_file.write(" },\n") output_file.write(" ],\n") output_file.write(" },\n") output_file.write(" ],\n") output_file.write("}\n") print output_filename sys.exit(0)