mirror of
https://github.com/yann64/haikuports.git
synced 2026-04-08 21:00:05 +02:00
231 lines
7.6 KiB
Plaintext
231 lines
7.6 KiB
Plaintext
From 5c24c71c87f14636774bc3acdba2bdcef8ad2269 Mon Sep 17 00:00:00 2001
|
|
From: Sergei Reznikov <diver@gelios.net>
|
|
Date: Tue, 12 Sep 2017 12:46:50 +0300
|
|
Subject: patch from Telegram team
|
|
|
|
|
|
diff --git a/pylib/gyp/generator/cmake.py b/pylib/gyp/generator/cmake.py
|
|
index 4a2041c..0ffb2bf 100644
|
|
--- a/pylib/gyp/generator/cmake.py
|
|
+++ b/pylib/gyp/generator/cmake.py
|
|
@@ -1078,6 +1078,23 @@ def WriteTarget(namer, qualified_target, target_dicts, build_dir, config_to_use,
|
|
|
|
output.write(')\n')
|
|
|
|
+ # Precompile header
|
|
+ precompiled_header = config.get('cmake_precompiled_header', '')
|
|
+ if precompiled_header:
|
|
+ precompiled_header_script = config.get('cmake_precompiled_header_script', '')
|
|
+ if not precompiled_header_script:
|
|
+ print ('ERROR: cmake_precompiled_header requires cmake_precompiled_header_script')
|
|
+ cmake_precompiled_header = NormjoinPath(path_from_cmakelists_to_gyp, precompiled_header)
|
|
+ cmake_precompiled_header_script = NormjoinPathForceCMakeSource(path_from_cmakelists_to_gyp, precompiled_header_script)
|
|
+ output.write('include(')
|
|
+ output.write(cmake_precompiled_header_script)
|
|
+ output.write(')\n')
|
|
+ output.write('add_precompiled_header(')
|
|
+ output.write(cmake_target_name)
|
|
+ output.write(' ')
|
|
+ output.write(cmake_precompiled_header)
|
|
+ output.write(')\n')
|
|
+
|
|
UnsetVariable(output, 'TOOLSET')
|
|
UnsetVariable(output, 'TARGET')
|
|
|
|
diff --git a/pylib/gyp/generator/xcode.py b/pylib/gyp/generator/xcode.py
|
|
index 8bc22be..be1aed4 100644
|
|
--- a/pylib/gyp/generator/xcode.py
|
|
+++ b/pylib/gyp/generator/xcode.py
|
|
@@ -74,6 +74,10 @@ generator_additional_non_configuration_keys = [
|
|
'ios_app_extension',
|
|
'ios_watch_app',
|
|
'ios_watchkit_extension',
|
|
+
|
|
+ 'mac_sandbox', # sandbox support
|
|
+ 'mac_sandbox_development_team',
|
|
+
|
|
'mac_bundle',
|
|
'mac_bundle_resources',
|
|
'mac_framework_headers',
|
|
@@ -774,6 +778,26 @@ def GenerateOutput(target_list, target_dicts, data, params):
|
|
xcode_targets[qualified_target] = xct
|
|
xcode_target_to_target_dict[xct] = spec
|
|
|
|
+ # sandbox support
|
|
+ is_sandbox = int(spec.get('mac_sandbox', 0))
|
|
+ if is_sandbox:
|
|
+ dev_team = spec.get('mac_sandbox_development_team', '%%ERROR%%')
|
|
+ assert dev_team != '%%ERROR%%', (
|
|
+ 'mac_sandbox must be accompanied by mac_sandbox_development_team (target "%s")' %
|
|
+ target_name)
|
|
+ try:
|
|
+ tmp = pbxp._properties['attributes']['TargetAttributes']
|
|
+ except KeyError:
|
|
+ pbxp._properties['attributes']['TargetAttributes'] = {}
|
|
+ pbxp._properties['attributes']['TargetAttributes'][xct] = {
|
|
+ 'DevelopmentTeam': dev_team,
|
|
+ 'SystemCapabilities': {
|
|
+ 'com.apple.Sandbox': {
|
|
+ 'enabled': 1,
|
|
+ },
|
|
+ },
|
|
+ }
|
|
+
|
|
spec_actions = spec.get('actions', [])
|
|
spec_rules = spec.get('rules', [])
|
|
|
|
@@ -1132,7 +1156,8 @@ exit 1
|
|
groups = [x for x in groups if not x.endswith('_excluded')]
|
|
for group in groups:
|
|
for item in rule.get(group, []):
|
|
- pbxp.AddOrGetFileInRootGroup(item)
|
|
+ concrete_item = ExpandXcodeVariables(item, rule_input_dict)
|
|
+ pbxp.AddOrGetFileInRootGroup(concrete_item)
|
|
|
|
# Add "sources".
|
|
for source in spec.get('sources', []):
|
|
--
|
|
2.37.3
|
|
|
|
|
|
From d338394a6f6f73cd634d3b83de3862e367a58a62 Mon Sep 17 00:00:00 2001
|
|
From: Augustin Cavalier <waddlesplash@gmail.com>
|
|
Date: Mon, 30 Jun 2014 14:41:57 -0400
|
|
Subject: Make GYP work on Haiku.
|
|
|
|
Minor adjustments so it applies to latest gyp code. (OscarL, 2023/06/02)
|
|
|
|
diff --git a/gyptest.py b/gyptest.py
|
|
index 1a9ffca..7b643dd 100755
|
|
--- a/gyptest.py
|
|
+++ b/gyptest.py
|
|
@@ -104,6 +104,7 @@ def main(argv=None):
|
|
'linux': ['make', 'ninja'],
|
|
'linux2': ['make', 'ninja'],
|
|
'linux3': ['make', 'ninja'],
|
|
+ 'haiku1': ['make'],
|
|
|
|
# TODO: Re-enable xcode-ninja.
|
|
# https://bugs.chromium.org/p/gyp/issues/detail?id=530
|
|
diff --git a/pylib/gyp/common.py b/pylib/gyp/common.py
|
|
index f3ba8a0..e516793 100644
|
|
--- a/pylib/gyp/common.py
|
|
+++ b/pylib/gyp/common.py
|
|
@@ -430,6 +430,8 @@ def GetFlavor(params):
|
|
return 'netbsd'
|
|
if sys.platform.startswith('aix'):
|
|
return 'aix'
|
|
+ if sys.platform.startswith('haiku'):
|
|
+ return 'haiku'
|
|
if sys.platform.startswith('zos'):
|
|
return 'zos'
|
|
if sys.platform.startswith('os390'):
|
|
@@ -439,7 +441,7 @@ def GetFlavor(params):
|
|
|
|
|
|
def CopyTool(flavor, out_path, generator_flags={}):
|
|
- """Finds (flock|mac|win)_tool.gyp in the gyp directory and copies it
|
|
+ """Finds (flock|mac|win|haiku)_tool.gyp in the gyp directory and copies it
|
|
to |out_path|."""
|
|
# aix and solaris just need flock emulation. mac and win use more complicated
|
|
# support scripts.
|
|
@@ -447,7 +449,8 @@ def CopyTool(flavor, out_path, generator_flags={}):
|
|
'aix': 'flock',
|
|
'solaris': 'flock',
|
|
'mac': 'mac',
|
|
- 'win': 'win'
|
|
+ 'win': 'win',
|
|
+ 'haiku': 'haiku'
|
|
}.get(flavor, None)
|
|
if not prefix:
|
|
return
|
|
diff --git a/pylib/gyp/generator/make.py b/pylib/gyp/generator/make.py
|
|
index 997eec0..f19778b 100644
|
|
--- a/pylib/gyp/generator/make.py
|
|
+++ b/pylib/gyp/generator/make.py
|
|
@@ -522,6 +522,13 @@ quiet_cmd_infoplist = INFOPLIST $@
|
|
cmd_infoplist = $(CC.$(TOOLSET)) -E -P -Wno-trigraphs -x c $(INFOPLIST_DEFINES) "$<" -o "$@"
|
|
"""
|
|
|
|
+SHARED_HEADER_HAIKU_COMMANDS = """
|
|
+# gyp-haiku-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_haiku_tool = HAIKUTOOL $(4) $<
|
|
+cmd_haiku_tool = ./gyp-haiku-tool $(4) $< "$@"
|
|
+"""
|
|
|
|
def WriteRootHeaderSuffixRules(writer):
|
|
extensions = sorted(COMPILABLE_EXTENSIONS.keys(), key=str.lower)
|
|
@@ -2099,6 +2106,12 @@ def GenerateOutput(target_list, target_dicts, data, params):
|
|
'flock': './gyp-flock-tool flock',
|
|
'flock_index': 2,
|
|
})
|
|
+ elif flavor == 'haiku':
|
|
+ header_params.update({
|
|
+ 'flock': './gyp-haiku-tool flock',
|
|
+ 'flock_index': 2,
|
|
+ 'extra_commands': SHARED_HEADER_HAIKU_COMMANDS,
|
|
+ })
|
|
|
|
header_params.update({
|
|
'CC.target': GetEnvironFallback(('CC_target', 'CC'), '$(CC)'),
|
|
diff --git a/pylib/gyp/haiku_tool.py b/pylib/gyp/haiku_tool.py
|
|
new file mode 100644
|
|
index 0000000..44c91b4
|
|
--- /dev/null
|
|
+++ b/pylib/gyp/haiku_tool.py
|
|
@@ -0,0 +1,49 @@
|
|
+#!python3
|
|
+# 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-haiku-tool when using the Makefile
|
|
+generator."""
|
|
+
|
|
+import fcntl
|
|
+import os
|
|
+import struct
|
|
+import subprocess
|
|
+import sys
|
|
+
|
|
+
|
|
+def main(args):
|
|
+ executor = HaikuTool()
|
|
+ executor.Dispatch(args)
|
|
+
|
|
+
|
|
+class HaikuTool(object):
|
|
+ """This class performs all the Haiku 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.
|
|
+ fd = os.open(lockfile, os.O_RDONLY|os.O_NOCTTY|os.O_CREAT, 0o666)
|
|
+ fcntl.flock(fd, fcntl.LOCK_EX)
|
|
+ ret = subprocess.call(cmd_list)
|
|
+ # Haiku bug -- lock is not released on file close?
|
|
+ fcntl.flock(fd, fcntl.LOCK_UN)
|
|
+ return ret
|
|
+
|
|
+
|
|
+if __name__ == '__main__':
|
|
+ sys.exit(main(sys.argv[1:]))
|
|
--
|
|
2.37.3
|
|
|