summaryrefslogtreecommitdiff
path: root/tools/gyp
diff options
context:
space:
mode:
authorBen Noordhuis <info@bnoordhuis.nl>2011-10-21 13:43:49 -0700
committerBen Noordhuis <info@bnoordhuis.nl>2011-10-21 13:49:29 -0700
commit3c3ec7b2d76b2678930aafb63ae784eb0a49730c (patch)
treec6647e2ceb4f2a11a41c515bf98a68d6c8db01a3 /tools/gyp
parent9b2335a35600ad4f9a04ed37da3f3f4a9fea869f (diff)
downloadandroid-node-v8-3c3ec7b2d76b2678930aafb63ae784eb0a49730c.tar.gz
android-node-v8-3c3ec7b2d76b2678930aafb63ae784eb0a49730c.tar.bz2
android-node-v8-3c3ec7b2d76b2678930aafb63ae784eb0a49730c.zip
gyp: upgrade to r1081
Diffstat (limited to 'tools/gyp')
-rw-r--r--tools/gyp/pylib/gyp/generator/make.py81
-rw-r--r--tools/gyp/pylib/gyp/sun_tool.py53
2 files changed, 112 insertions, 22 deletions
diff --git a/tools/gyp/pylib/gyp/generator/make.py b/tools/gyp/pylib/gyp/generator/make.py
index de920a71bb..23ca939469 100644
--- a/tools/gyp/pylib/gyp/generator/make.py
+++ b/tools/gyp/pylib/gyp/generator/make.py
@@ -62,7 +62,14 @@ generator_wants_sorted_dependencies = False
def GetFlavor(params):
"""Returns |params.flavor| if it's set, the system's default flavor else."""
- return params.get('flavor', 'mac' if sys.platform == 'darwin' else 'linux')
+ flavors = {
+ 'darwin': 'mac',
+ 'sunos5': 'solaris',
+ 'freebsd7': 'freebsd',
+ 'freebsd8': 'freebsd',
+ }
+ flavor = flavors.get(sys.platform, 'linux')
+ return params.get('flavor', flavor)
def CalculateVariables(default_variables, params):
@@ -71,7 +78,8 @@ def CalculateVariables(default_variables, params):
default_variables['LINKER_SUPPORTS_ICF'] = \
gyp.system_test.TestLinkerSupportsICF(cc_command=cc_target)
- if GetFlavor(params) == 'mac':
+ flavor = GetFlavor(params)
+ if flavor == 'mac':
default_variables.setdefault('OS', 'mac')
default_variables.setdefault('SHARED_LIB_SUFFIX', '.dylib')
default_variables.setdefault('SHARED_LIB_DIR',
@@ -94,7 +102,10 @@ def CalculateVariables(default_variables, params):
global COMPILABLE_EXTENSIONS
COMPILABLE_EXTENSIONS.update({'.m': 'objc', '.mm' : 'objcxx'})
else:
- default_variables.setdefault('OS', 'linux')
+ operating_system = flavor
+ if flavor == 'android':
+ operating_system = 'linux' # Keep this legacy behavior for now.
+ default_variables.setdefault('OS', operating_system)
default_variables.setdefault('SHARED_LIB_SUFFIX', '.so')
default_variables.setdefault('SHARED_LIB_DIR','$(builddir)/lib.$(TOOLSET)')
default_variables.setdefault('LIB_DIR', '$(obj).$(TOOLSET)')
@@ -349,7 +360,7 @@ cmd_cc = $(CC.$(TOOLSET)) $(GYP_CFLAGS) $(DEPFLAGS) $(CFLAGS.$(TOOLSET)) -c -o $
quiet_cmd_cxx = CXX($(TOOLSET)) $@
cmd_cxx = $(CXX.$(TOOLSET)) $(GYP_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $<
-%(mac_commands)s
+%(extra_commands)s
quiet_cmd_touch = TOUCH $@
cmd_touch = touch $@
@@ -480,6 +491,14 @@ quiet_cmd_mac_package_framework = PACKAGE FRAMEWORK $@
cmd_mac_package_framework = ./gyp-mac-tool package-framework "$@" $(4)
"""
+SHARED_HEADER_SUN_COMMANDS = """
+# gyp-sun-tool is written next to the root Makefile by gyp.
+# Use $(4) for the command, since $(2) and $(3) are used as flag by do_cmd
+# already.
+quiet_cmd_sun_tool = SUNTOOL $(4) $<
+cmd_sun_tool = ./gyp-sun-tool $(4) $< "$@"
+"""
+
def WriteRootHeaderSuffixRules(writer):
extensions = sorted(COMPILABLE_EXTENSIONS.keys(), key=str.lower)
@@ -2407,11 +2426,13 @@ $(obj).$(TOOLSET)/$(TARGET)/%%.o: $(obj)/%%%s FORCE_DO_CMD
env['UNLOCALIZED_RESOURCES_FOLDER_PATH'] = \
self.xcode_settings.GetBundleResourceFolder()
env['INFOPLIST_PATH'] = self.xcode_settings.GetBundlePlistPath()
+ env['WRAPPER_NAME'] = self.xcode_settings.GetWrapperName()
# TODO(thakis): Remove this.
env['EXECUTABLE_PATH'] = QuoteSpaces(env['EXECUTABLE_PATH'])
env['CONTENTS_FOLDER_PATH'] = QuoteSpaces(env['CONTENTS_FOLDER_PATH'])
env['INFOPLIST_PATH'] = QuoteSpaces(env['INFOPLIST_PATH'])
+ env['WRAPPER_NAME'] = QuoteSpaces(env['WRAPPER_NAME'])
return env
@@ -2576,17 +2597,32 @@ def RunSystemTests(flavor):
'LINK_flags': link_flags }
-def CopyMacTool(out_path):
- """Finds mac_tool.gyp in the gyp directory and copies it to |out_path|."""
+def CopyTool(flavor, out_path):
+ """Finds (mac|sun)_tool.gyp in the gyp directory and copies it
+ to |out_path|."""
+ prefix = { 'solaris': 'sun', 'mac': 'mac' }.get(flavor, None)
+ if not prefix:
+ return
+
+ tool_path = os.path.join(out_path, 'gyp-%s-tool' % prefix)
+ if os.path.exists(tool_path):
+ os.remove(tool_path)
+
+ # Slurp input file.
source_path = os.path.join(
- os.path.dirname(os.path.abspath(__file__)), '..', 'mac_tool.py')
+ os.path.dirname(os.path.abspath(__file__)), '..', '%s_tool.py' % prefix)
source_file = open(source_path)
source = source_file.readlines()
source_file.close()
- mactool_file = open(out_path, 'w')
- mactool_file.write(
+
+ # Add header and write it out.
+ tool_file = open(tool_path, 'w')
+ tool_file.write(
''.join([source[0], '# Generated by gyp. Do not edit.\n'] + source[1:]))
- mactool_file.close()
+ tool_file.close()
+
+ # Make file executable.
+ os.chmod(tool_path, 0755)
def GenerateOutput(target_list, target_dicts, data, params):
@@ -2641,7 +2677,7 @@ def GenerateOutput(target_list, target_dicts, data, params):
'flock': flock_command,
'flock_index': 1,
'link_commands': LINK_COMMANDS_LINUX,
- 'mac_commands': '',
+ 'extra_commands': '',
'srcdir': srcdir,
}
if flavor == 'mac':
@@ -2650,12 +2686,22 @@ def GenerateOutput(target_list, target_dicts, data, params):
'flock': flock_command,
'flock_index': 2,
'link_commands': LINK_COMMANDS_MAC,
- 'mac_commands': SHARED_HEADER_MAC_COMMANDS,
+ 'extra_commands': SHARED_HEADER_MAC_COMMANDS,
})
- if flavor == 'android':
+ elif flavor == 'android':
header_params.update({
'link_commands': LINK_COMMANDS_ANDROID,
})
+ elif flavor == 'solaris':
+ header_params.update({
+ 'flock': './gyp-sun-tool flock',
+ 'flock_index': 2,
+ 'extra_commands': SHARED_HEADER_SUN_COMMANDS,
+ })
+ elif flavor == 'freebsd':
+ header_params.update({
+ 'flock': 'lockf',
+ })
header_params.update(RunSystemTests(flavor))
build_file, _, _ = gyp.common.ParseQualifiedTarget(target_list[0])
@@ -2693,13 +2739,8 @@ def GenerateOutput(target_list, target_dicts, data, params):
WriteRootHeaderSuffixRules(root_makefile)
# Put mac_tool next to the root Makefile.
- if flavor == 'mac':
- mactool_path = os.path.join(os.path.dirname(makefile_path), 'gyp-mac-tool')
- if os.path.exists(mactool_path):
- os.remove(mactool_path)
- CopyMacTool(mactool_path)
- # Make file executable.
- os.chmod(mactool_path, 0755)
+ dest_path = os.path.dirname(makefile_path)
+ CopyTool(flavor, dest_path)
# Find the list of targets that derive from the gyp file(s) being built.
needed_targets = set()
diff --git a/tools/gyp/pylib/gyp/sun_tool.py b/tools/gyp/pylib/gyp/sun_tool.py
index 6ccec473b8..fe5d97dcc8 100644
--- a/tools/gyp/pylib/gyp/sun_tool.py
+++ b/tools/gyp/pylib/gyp/sun_tool.py
@@ -3,7 +3,8 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-"""These functions are executed via gyp-sun-tool when using the Makefile generator."""
+"""These functions are executed via gyp-sun-tool when using the Makefile
+generator."""
import fcntl
import os
@@ -38,7 +39,55 @@ class SunTool(object):
# where fcntl.flock(fd, LOCK_EX) always fails
# with EBADF, that's why we use this F_SETLK
# hack instead.
- fd = os.open(lockfile, os.O_WRONLY|os.O_NOCTTY|os.O_CREAT, 0o666)
+ fd = os.open(lockfile, os.O_WRONLY|os.O_NOCTTY|os.O_CREAT, 0666)
+ op = struct.pack('hhllhhl', fcntl.F_WRLCK, 0, 0, 0, 0, 0, 0)
+ fcntl.fcntl(fd, fcntl.F_SETLK, op)
+ return subprocess.call(cmd_list)
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv[1:]))
+#!/usr/bin/env python
+# Copyright (c) 2011 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""These functions are executed via gyp-sun-tool when using the Makefile
+generator."""
+
+import fcntl
+import os
+import struct
+import subprocess
+import sys
+
+def main(args):
+ executor = SunTool()
+ executor.Dispatch(args)
+
+class SunTool(object):
+ """This class performs all the SunOS tooling steps. The methods can either be
+ executed directly, or dispatched from an argument list."""
+
+ def Dispatch(self, args):
+ """Dispatches a string command to a method."""
+ if len(args) < 1:
+ raise Exception("Not enough arguments")
+
+ method = "Exec%s" % self._CommandifyName(args[0])
+ getattr(self, method)(*args[1:])
+
+ def _CommandifyName(self, name_string):
+ """Transforms a tool name like copy-info-plist to CopyInfoPlist"""
+ return name_string.title().replace('-', '')
+
+ def ExecFlock(self, lockfile, *cmd_list):
+ """Emulates the most basic behavior of Linux's flock(1)."""
+ # Rely on exception handling to report errors.
+ # Note that the stock python on SunOS has a bug
+ # where fcntl.flock(fd, LOCK_EX) always fails
+ # with EBADF, that's why we use this F_SETLK
+ # hack instead.
+ fd = os.open(lockfile, os.O_WRONLY|os.O_NOCTTY|os.O_CREAT, 0666)
op = struct.pack('hhllhhl', fcntl.F_WRLCK, 0, 0, 0, 0, 0, 0)
fcntl.fcntl(fd, fcntl.F_SETLK, op)
return subprocess.call(cmd_list)