summaryrefslogtreecommitdiff
path: root/configure-gyp
diff options
context:
space:
mode:
authorBen Noordhuis <info@bnoordhuis.nl>2011-08-30 00:01:43 +0200
committerBen Noordhuis <info@bnoordhuis.nl>2011-09-12 21:48:29 +0000
commit9f986981f8b0818e610b0ed73e7341c5d934e762 (patch)
tree8d75b91810285301540358f95dd52d1cfaff4079 /configure-gyp
parentfe7e00d51a05f379ad6323628226ea1b7c0ed339 (diff)
downloadnode-new-9f986981f8b0818e610b0ed73e7341c5d934e762.tar.gz
build: configure node, v8, cares and openssl
Diffstat (limited to 'configure-gyp')
-rwxr-xr-xconfigure-gyp263
1 files changed, 198 insertions, 65 deletions
diff --git a/configure-gyp b/configure-gyp
index 4d43cb5061..edd21b16ac 100755
--- a/configure-gyp
+++ b/configure-gyp
@@ -9,95 +9,228 @@ root_dir = os.path.dirname(__file__)
sys.path.insert(0, os.path.join(root_dir, 'deps', 'v8', 'tools'))
import utils # GuessArchitecture
+# parse our options
+parser = optparse.OptionParser()
+
+parser.add_option("--debug",
+ action="store_true",
+ dest="debug",
+ help="Also build debug build")
+
+parser.add_option("--prefix",
+ action="store",
+ dest="prefix",
+ help="Select the install prefix (defaults to /usr/local)")
+
+parser.add_option("--without-ssl",
+ action="store_true",
+ dest="without_ssl",
+ help="Build without SSL")
+
+parser.add_option("--without-snapshot",
+ action="store_true",
+ dest="without_snapshot",
+ help="Build without snapshotting V8 libraries. You might want to set"
+ " this for cross-compiling. [Default: False]")
+
+parser.add_option("--shared-v8",
+ action="store_true",
+ dest="shared_v8",
+ help="Link to a shared V8 DLL instead of static linking")
+
+parser.add_option("--shared-v8-includes",
+ action="store",
+ dest="shared_v8_includes",
+ help="Directory containing V8 header files")
+
+parser.add_option("--shared-v8-libpath",
+ action="store",
+ dest="shared_v8_libpath",
+ help="A directory to search for the shared V8 DLL")
+
+parser.add_option("--shared-v8-libname",
+ action="store",
+ dest="shared_v8_libname",
+ help="Alternative lib name to link to (default: 'v8')")
+
+parser.add_option("--openssl-includes",
+ action="store",
+ dest="openssl_includes",
+ help="A directory to search for the OpenSSL includes")
+
+parser.add_option("--openssl-libpath",
+ action="store",
+ dest="openssl_libpath",
+ help="A directory to search for the OpenSSL libraries")
+
+parser.add_option("--no-ssl2",
+ action="store_true",
+ dest="no_ssl2",
+ help="Disable OpenSSL v2")
+
+parser.add_option("--shared-cares",
+ action="store_true",
+ dest="shared_cares",
+ help="Link to a shared C-Ares DLL instead of static linking")
+
+parser.add_option("--shared-cares-includes",
+ action="store",
+ dest="shared_cares_includes",
+ help="Directory containing C-Ares header files")
+
+parser.add_option("--shared-cares-libpath",
+ action="store",
+ dest="shared_cares_libpath",
+ help="A directory to search for the shared C-Ares DLL")
+
+parser.add_option("--with-dtrace",
+ action="store_true",
+ dest="with_dtrace",
+ help="Build with DTrace (experimental)")
+
+# CHECKME does this still work with recent releases of V8?
+parser.add_option("--gdb",
+ action="store_true",
+ dest="gdb",
+ help="add gdb support")
+
+parser.add_option("--dest-cpu",
+ action="store",
+ dest="dest_cpu",
+ help="CPU architecture to build for. Valid values are: arm, ia32, x64")
+
+(options, args) = parser.parse_args()
+
+
def pkg_config(pkg):
cmd = os.popen('pkg-config --libs %s' % pkg, 'r')
libs = cmd.readline().strip()
ret = cmd.close()
- if (ret): return 0
+ if (ret): return None
cmd = os.popen('pkg-config --cflags %s' % pkg, 'r')
cflags = cmd.readline().strip()
ret = cmd.close()
- if (ret): return 0
+ if (ret): return None
return (libs, cflags)
-# parse our options
-parser = optparse.OptionParser()
-parser.add_option("--debug", action="store_true", dest="debug",
- default=False, help="Also build debug build")
+def uname(switch):
+ f = os.popen('uname %s' % switch)
+ s = f.read().strip()
+ f.close()
+ return s
-parser.add_option("--prefix", action="store", dest="prefix",
- help="Select the install prefix (defaults to /usr/local)")
+def host_arch():
+ """Host architecture. One of arm, ia32 or x64."""
+ arch = uname('-p')
-# TODO options to support for backwards compatibility
-#
-# --without-snapshot
-# Build without snapshotting V8 libraries. You might want to set this for
-# cross-compiling. [Default: False]
-#
-# --without-ssl
-# Build without SSL
-#
-# --shared-v8
-# Link to a shared V8 DLL instead of static linking
-#
-# --shared-v8-includes=SHARED_V8_INCLUDES
-# Directory containing V8 header files
-#
-# --shared-v8-libpath=SHARED_V8_LIBPATH
-# A directory to search for the shared V8 DLL
-#
-# --shared-v8-libname=SHARED_V8_LIBNAME
-# Alternative lib name to link to (default: 'v8')
-#
-# --openssl-includes=OPENSSL_INCLUDES
-# A directory to search for the OpenSSL includes
-#
-# --openssl-libpath=OPENSSL_LIBPATH
-# A directory to search for the OpenSSL libraries
-#
-# --no-ssl2
-# Disable OpenSSL v2
-#
-# --gdb
-# add gdb support
-#
-# --shared-cares
-# Link to a shared C-Ares DLL instead of static linking
-#
-# --shared-cares-includes=SHARED_CARES_INCLUDES
-# Directory containing C-Ares header files
-#
-# --shared-cares-libpath=SHARED_CARES_LIBPATH
-# A directory to search for the shared C-Ares DLL
-#
-# --with-dtrace
-# Build with DTrace (experimental)
-#
-# --dest-cpu=DEST_CPU
-# CPU architecture to build for. Valid values are: arm, ia32, x64
+ if arch == 'unknown':
+ arch = uname('-m')
+ return {
+ 'arm': 'arm',
+ 'x86': 'ia32',
+ 'i386': 'ia32',
+ 'x86_64': 'x64',
+ }.get(arch, 'ia32')
+
+
+def target_arch():
+ # TODO act on options.dest_cpu
+ return host_arch()
+
+
+def configure_node(o):
+ # TODO add gdb and dest_cpu
+ o['variables']['node_debug'] = 'true' if options.debug else 'false'
+ o['variables']['node_prefix'] = options.prefix if options.prefix else ''
+ o['variables']['node_use_dtrace'] = 'true' if options.with_dtrace else 'false'
+ o['variables']['host_arch'] = host_arch()
+ o['variables']['target_arch'] = target_arch()
+
+
+def configure_libz(o):
+ o['libraries'] += ['-lz']
+
+
+def configure_v8(o):
+ o['variables']['v8_use_snapshot'] = 'true' if not options.without_snapshot else 'false'
+ o['variables']['node_shared_v8'] = 'true' if options.shared_v8 else 'false'
+
+ # assume shared_v8 if one of these is set?
+ if options.shared_v8_libpath:
+ o['libraries'] += ['-L%s' % options.shared_v8_libpath]
+ if options.shared_v8_libname:
+ o['libraries'] += ['-l%s' % options.shared_v8_libname]
+ if options.shared_v8_includes:
+ o['include_dirs'] += [options.shared_v8_includes]
+
+
+def configure_cares(o):
+ o['variables']['node_shared_cares'] = 'true' if options.shared_cares else 'false'
+
+ # assume shared_cares if one of these is set?
+ if options.shared_cares_libpath:
+ o['libraries'] += ['-L%s' % options.shared_cares_libpath]
+ if options.shared_cares_includes:
+ o['include_dirs'] += [options.shared_cares_includes]
+
+
+def configure_openssl(o):
+ o['variables']['node_use_openssl'] = 'false' if options.without_ssl else 'true'
+
+ if options.without_ssl:
+ return
+
+ if options.no_ssl2:
+ o['defines'] += ['OPENSSL_NO_SSL2=1']
+
+ out = pkg_config('openssl')
+ (libs, cflags) = out if out else ('', '')
+
+ if options.openssl_libpath:
+ o['libraries'] += ['-L%s' % options.openssl_libpath, '-lssl', '-lcrypto']
+ else:
+ o['libraries'] += libs.split()
+
+ if options.openssl_includes:
+ o['include_dirs'] += [options.openssl_includes]
+ else:
+ o['cflags'] += cflags.split()
+
+ if libs or cflags or options.openssl_libpath or options.openssl_includes:
+ o['variables']['node_use_system_openssl'] = 'true'
+ else:
+ o['variables']['node_use_system_openssl'] = 'false'
-(options, args) = parser.parse_args()
print "configure options:", options
output = {
- 'variables': {
- 'node_debug': 'true' if options.debug else 'false',
- 'node_prefix': options.prefix if options.prefix else ''
- }
+ 'variables': {},
+ 'include_dirs': [],
+ 'libraries': [],
+ 'defines': [],
+ 'cflags': [],
}
-out = pkg_config('openssl')
-if out:
- output['variables']['node_use_openssl'] = 'true'
- output['variables']['openssl_libs'] = '-lssl -lcrypto -lz' #out[0]
- output['variables']['openssl_cflags'] = out[1]
+configure_node(output)
+configure_libz(output)
+configure_v8(output)
+configure_cares(output)
+configure_openssl(output)
+# variables should be a root level element,
+# move everything else to target_defaults
+variables = output['variables']
+del output['variables']
+output = {
+ 'variables': variables,
+ 'target_defaults': output
+}
fn = os.path.join(root_dir, 'options.gypi')
print "creating ", fn