summaryrefslogtreecommitdiffstats
path: root/Source/gyp/configure
diff options
context:
space:
mode:
Diffstat (limited to 'Source/gyp/configure')
-rwxr-xr-xSource/gyp/configure88
1 files changed, 69 insertions, 19 deletions
diff --git a/Source/gyp/configure b/Source/gyp/configure
index cd2b126..28d6677 100755
--- a/Source/gyp/configure
+++ b/Source/gyp/configure
@@ -31,35 +31,85 @@
import os
import subprocess
+from optparse import OptionParser
-PROJECTS = [
- "JavaScriptGlue",
- "JavaScriptCore",
- "WebCore",
-]
+def chdir_to_source():
+ source_directory = os.path.abspath(os.path.join(__file__, '..', '..'))
+ os.chdir(source_directory)
+
+def gyp():
+ return os.path.join('ThirdParty', 'gyp', 'gyp')
+class Project:
+ def __init__(self, name):
+ self._name = name
-def create_project(project):
- subprocess.call([
- 'gyp', # FIXME: gyp shouldn't need to be in the PATH.
- os.path.join(project, 'gyp', project + '.gyp'),
- '-G',
- 'xcode_list_excluded_files=0',
- '--depth=.',
- ])
+ def name(self):
+ return self._name
+ def inputs(self):
+ return [
+ os.path.join(self._name, 'gyp', self._name + '.gyp'),
+ os.path.join(self._name, self._name + '.gypi'),
+ os.path.join('gyp', 'common.gypi'),
+ ]
-def create_all_projects():
- for project in PROJECTS:
- create_project(project)
+ def output(self):
+ return os.path.join(self._name, 'gyp', self._name + '.xcodeproj', 'project.pbxproj')
+ def should_generate(self):
+ if not os.path.exists(self.output()):
+ return True
+ return os.path.getmtime(self.output()) < self._newest(self.inputs())
+
+ def generate(self):
+ subprocess.call([
+ gyp(),
+ self.inputs()[0],
+ '-G',
+ 'xcode_list_excluded_files=0',
+ '--depth=.',
+ ])
+ # GYP doesn't always touch the output file, but we want to touch the
+ # file so that we don't keep trying to regenerate it.
+ os.utime(self.output(), None)
+
+ @staticmethod
+ def _newest(paths):
+ return max([os.path.getmtime(path) for path in paths])
+
+PROJECTS = [
+ Project("JavaScriptCore"),
+ Project("WebCore"),
+]
+
+def projects_to_generate():
+ should_generate = [project for project in PROJECTS if project.should_generate()]
+ already_generated = [project.name() for project in set(PROJECTS) - set(should_generate)]
+
+ if already_generated:
+ print "Not generating %s because the generated files exist and are newer than the GYP files." % ', '.join(already_generated)
+ print "Pass --regenerate-projects to override."
+
+ return should_generate
def main():
- source_directory = os.path.abspath(os.path.join(__file__, '..', '..'))
- os.chdir(source_directory)
+ chdir_to_source()
+
+ parser = OptionParser()
# FIXME: The user should be able to pass which port on the command line.
- create_all_projects()
+ parser.add_option("--regenerate-projects", dest="regenerate_projects",
+ default=False, action="store_true",
+ help="Generate all project files even if they appear to be up to date.")
+ (options, args) = parser.parse_args()
+
+ projects = PROJECTS
+ if not options.regenerate_projects:
+ projects = projects_to_generate()
+ for project in projects:
+ print "Generating %s." % project.name()
+ project.generate()
if __name__ == "__main__":
main()