| #!/usr/bin/env python |
| # |
| # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| # for details. All rights reserved. Use of this source code is governed by a |
| # BSD-style license that can be found in the LICENSE file. |
| |
| import os |
| import sys |
| import platform |
| |
| def NormJoin(path1, path2): |
| return os.path.normpath(os.path.join(path1, path2)) |
| |
| |
| def GetProjectGypFile(project_name): |
| project_file = os.path.join(project_name, 'dart-%s.gyp' % project_name) |
| if not os.path.exists(project_file): |
| sys.stderr.write('%s does not exist\n' % project_file) |
| project_file = os.path.join(project_name, 'dart.gyp') |
| return project_file |
| |
| dart_src = NormJoin(os.path.dirname(sys.argv[0]), os.pardir) |
| project_src = sys.argv[1] |
| gyp_pylib = os.path.join(dart_src, 'third_party', 'gyp', 'pylib') |
| |
| if __name__ == '__main__': |
| # If this script is invoked with the -fmake option, we assume that |
| # it is being run automatically via a project Makefile. That can be |
| # problematic (because GYP is really bad at setting up the paths |
| # correctly), so we try to run "gclient runhooks" instead. |
| if '-fmake' in sys.argv: |
| try: |
| sys.exit(os.execvp("gclient", ["gclient", "runhooks"])) |
| except OSError: |
| # Sometimes gclient is not on the PATH. Let the user know that |
| # he must run "gclient runhooks" manually. |
| sys.stderr.write('Error: GYP files are out of date.\n') |
| sys.stderr.write('\n\n*** Please run "gclient runhooks" ***\n\n\n') |
| sys.exit(1) |
| |
| |
| # Add gyp to the imports and if needed get it from the third_party location |
| # inside the standalone dart gclient checkout. |
| try: |
| import gyp |
| except ImportError, e: |
| sys.path.append(os.path.abspath(gyp_pylib)) |
| import gyp |
| |
| |
| if __name__ == '__main__': |
| # Make our own location absolute as it is stored in Makefiles. |
| sys.argv[0] = os.path.abspath(sys.argv[0]) |
| |
| # Add any extra arguments. Needed by compiler/dart.gyp to build v8. |
| args = sys.argv[2:] |
| |
| args += ['--depth', project_src] |
| args += ['-I', './tools/gyp/common.gypi'] |
| |
| if platform.system() == 'Linux': |
| # We need to fiddle with toplevel-dir to work around a GYP bug |
| # that breaks building v8 from compiler/dart.gyp. |
| args += ['--toplevel-dir', os.curdir] |
| args += ['--generator-output', project_src] |
| else: |
| # On at least the Mac, the toplevel-dir should be where the |
| # sources are. Otherwise, Xcode won't show sources correctly. |
| args += ['--toplevel-dir', project_src] |
| |
| if sys.platform == 'win32': |
| # Generate Visual Studio 2008 compatible files by default. |
| if not os.environ.get('GYP_MSVS_VERSION'): |
| args.extend(['-G', 'msvs_version=2008']) |
| |
| # Change into the dart directory as we want the project to be rooted here. |
| # Also, GYP is very sensitive to exacly from where it is being run. |
| os.chdir(dart_src) |
| |
| args += [GetProjectGypFile(project_src)] |
| |
| # Generate the projects. |
| sys.exit(gyp.main(args)) |