mirror of
https://github.com/yann64/haikuports.git
synced 2026-04-23 04:00:05 +02:00
Create GYP recipe.
Requires python_setuptools for the build and install. Worked for me.
This commit is contained in:
51
dev-util/gyp/gyp-r1948.recipe
Normal file
51
dev-util/gyp/gyp-r1948.recipe
Normal file
@@ -0,0 +1,51 @@
|
||||
SUMMARY="GYP can Generate Your Projects."
|
||||
DESCRIPTION="GYP (Generate Your Projects) is a build automation tool. \
|
||||
GYP is created by Google to generate native IDE project files (such as \
|
||||
Visual Studio and Xcode) for building the Chromium web browser and is \
|
||||
licensed as open source software using the BSD software license. \
|
||||
"
|
||||
HOMEPAGE="https://code.google.com/p/gyp/"
|
||||
SRC_URI="svn+http://gyp.googlecode.com/svn/trunk#1948"
|
||||
LICENSE="BSD (2-clause)"
|
||||
COPYRIGHT="2012 Google Inc."
|
||||
REVISION="1"
|
||||
ARCHITECTURES="x86 x86_gcc2 x86_64"
|
||||
|
||||
SOURCE_DIR="gyp-$portVersion"
|
||||
PATCHES="gyp-r1948.patch"
|
||||
|
||||
PROVIDES="
|
||||
gyp = $portVersion
|
||||
cmd:gyp = $portVersion
|
||||
"
|
||||
|
||||
REQUIRES="
|
||||
haiku >= $haikuVersion
|
||||
cmd:python
|
||||
"
|
||||
|
||||
BUILD_REQUIRES="
|
||||
python_setuptools
|
||||
"
|
||||
|
||||
BUILD_PREREQUIRES="
|
||||
haiku_devel >= $haikuVersion
|
||||
cmd:python
|
||||
"
|
||||
|
||||
BUILD()
|
||||
{
|
||||
$portPackageLinksDir/cmd~python/bin/python setup.py build
|
||||
}
|
||||
|
||||
INSTALL()
|
||||
{
|
||||
# GENERIC: all python_setuptools-based installs need this
|
||||
pythonVersion=$(python --version 2>&1 | sed 's/Python //' | head -c3)
|
||||
installLocation=$prefix/lib/python$pythonVersion/vendor-packages/
|
||||
export PYTHONPATH=$installLocation:$PYTHONPATH
|
||||
mkdir -p $installLocation
|
||||
|
||||
$portPackageLinksDir/cmd~python/bin/python setup.py install \
|
||||
--prefix=$prefix
|
||||
}
|
||||
144
dev-util/gyp/patches/gyp-r1948.patch
Normal file
144
dev-util/gyp/patches/gyp-r1948.patch
Normal file
@@ -0,0 +1,144 @@
|
||||
From 7acf243286c74a67a0a3a80faff38572d430f160 Mon Sep 17 00:00:00 2001
|
||||
From: Augustin Cavalier <waddlesplash@gmail.com>
|
||||
Date: Mon, 30 Jun 2014 14:41:57 -0400
|
||||
Subject: [PATCH] Make GYP work on Haiku.
|
||||
|
||||
---
|
||||
gyptest.py | 1 +
|
||||
pylib/gyp/common.py | 7 +++++--
|
||||
pylib/gyp/generator/make.py | 13 ++++++++++++
|
||||
pylib/gyp/haiku_tool.py | 49 +++++++++++++++++++++++++++++++++++++++++++++
|
||||
4 files changed, 68 insertions(+), 2 deletions(-)
|
||||
create mode 100644 pylib/gyp/haiku_tool.py
|
||||
|
||||
diff --git a/gyptest.py b/gyptest.py
|
||||
index 8f3ee0f..88125b0 100755
|
||||
--- a/gyptest.py
|
||||
+++ b/gyptest.py
|
||||
@@ -225,6 +225,7 @@ def main(argv=None):
|
||||
'linux2': ['make', 'ninja'],
|
||||
'linux3': ['make', 'ninja'],
|
||||
'darwin': ['make', 'ninja', 'xcode'],
|
||||
+ 'haiku1': ['make'],
|
||||
}[sys.platform]
|
||||
|
||||
for format in format_list:
|
||||
diff --git a/pylib/gyp/common.py b/pylib/gyp/common.py
|
||||
index df71d97..8f2d888 100644
|
||||
--- a/pylib/gyp/common.py
|
||||
+++ b/pylib/gyp/common.py
|
||||
@@ -420,12 +420,14 @@ def GetFlavor(params):
|
||||
return 'openbsd'
|
||||
if sys.platform.startswith('aix'):
|
||||
return 'aix'
|
||||
+ if sys.platform.startswith('haiku'):
|
||||
+ return 'haiku'
|
||||
|
||||
return 'linux'
|
||||
|
||||
|
||||
def CopyTool(flavor, out_path):
|
||||
- """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.
|
||||
@@ -433,7 +435,8 @@ def CopyTool(flavor, out_path):
|
||||
'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 8c31d10..a7db337 100644
|
||||
--- a/pylib/gyp/generator/make.py
|
||||
+++ b/pylib/gyp/generator/make.py
|
||||
@@ -505,6 +505,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)
|
||||
@@ -2056,6 +2063,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..cf23ca5
|
||||
--- /dev/null
|
||||
+++ b/pylib/gyp/haiku_tool.py
|
||||
@@ -0,0 +1,49 @@
|
||||
+#!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-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)
|
||||
+ # Haiki 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:]))
|
||||
--
|
||||
1.8.3.4
|
||||
|
||||
Reference in New Issue
Block a user