Browse Source

build: configure node, v8, cares and openssl

Ben Noordhuis 14 years ago
parent
commit
9f986981f8
  1. 263
      configure-gyp
  2. 9
      node.gyp

263
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

9
node.gyp

@ -51,6 +51,10 @@
],
},
'includes': [
'./options.gypi'
],
'targets': [
{
'target_name': 'node',
@ -136,7 +140,10 @@
[ 'node_use_openssl=="true"', {
'defines': [ 'HAVE_OPENSSL=1' ],
'sources': [ 'src/node_crypto.cc' ],
'dependencies': [ './deps/openssl/openssl.gyp:openssl' ]
'conditions': [
[ 'node_use_system_openssl=="false"', {
'dependencies': [ './deps/openssl/openssl.gyp:openssl' ],
}]]
}, {
'defines': [ 'HAVE_OPENSSL=0' ]
}],

Loading…
Cancel
Save