mirror of https://github.com/lukechilds/node.git
Browse Source
Too much instability right now. Hopefully we can revisit autoconf soon.v0.7.4-release
Ryan Dahl
14 years ago
45 changed files with 919 additions and 4342 deletions
File diff suppressed because it is too large
@ -1,33 +0,0 @@ |
|||||
# git Makefile configuration, included in main Makefile
|
|
||||
# @configure_input@
|
|
||||
|
|
||||
CC = @CC@ |
|
||||
CPPFLAGS = @CPPFLAGS@ |
|
||||
LDFLAGS = @LDFLAGS@ |
|
||||
AR = @AR@ |
|
||||
TAR = @TAR@ |
|
||||
|
|
||||
prefix = @prefix@ |
|
||||
exec_prefix = @exec_prefix@ |
|
||||
bindir = @bindir@ |
|
||||
datarootdir = @datarootdir@ |
|
||||
PREFIX = @prefix@ |
|
||||
target_cpu = @target_cpu@ |
|
||||
target_vendor = @target_vendor@ |
|
||||
target_os = @target_os@ |
|
||||
arch = @arch@ |
|
||||
platform = @platform@ |
|
||||
|
|
||||
mandir=@mandir@ |
|
||||
|
|
||||
srcdir = @srcdir@ |
|
||||
VPATH = @srcdir@ |
|
||||
DEBUG = @DEBUG@ |
|
||||
|
|
||||
export exec_prefix mandir |
|
||||
export srcdir VPATH PREFIX |
|
||||
|
|
||||
|
|
||||
|
|
||||
HAVE_OPENSSL=@HAVE_OPENSSL@ |
|
||||
WANT_SOCKET=@WANT_SOCKET@ |
|
File diff suppressed because it is too large
@ -1,6 +1,21 @@ |
|||||
#! /bin/sh |
#! /bin/sh |
||||
|
|
||||
cd `dirname "$0"` |
# v8 doesn't like ccache |
||||
autoconf --output configure.real |
if [ ! -z "`echo $CC | grep ccache`" ]; then |
||||
exec ./configure.real "$@" |
echo "Error: V8 doesn't like cache. Please set your CC env var to 'gcc'" |
||||
|
echo " (ba)sh: export CC=gcc" |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
CUR_DIR=$PWD |
||||
|
|
||||
|
#possible relative path |
||||
|
WORKINGDIR=`dirname $0` |
||||
|
cd "$WORKINGDIR" |
||||
|
#abs path |
||||
|
WORKINGDIR=`pwd` |
||||
|
cd "$CUR_DIR" |
||||
|
|
||||
|
"${WORKINGDIR}/tools/waf-light" --jobs=1 configure $* |
||||
|
|
||||
|
exit $? |
||||
|
@ -1,155 +0,0 @@ |
|||||
# -*- Autoconf -*- |
|
||||
# Process this file with autoconf to produce a configure script. |
|
||||
|
|
||||
AC_PREREQ(2.59) |
|
||||
AC_INIT([node], [0.3.0], [ryan@joyent.com]) |
|
||||
|
|
||||
AC_CONFIG_MACRO_DIR([m4]) |
|
||||
AC_CONFIG_SRCDIR([src/node.cc]) |
|
||||
|
|
||||
AC_CANONICAL_BUILD |
|
||||
AC_CANONICAL_TARGET |
|
||||
|
|
||||
config_file=config.mak.autogen |
|
||||
config_append=config.mak.append |
|
||||
config_in=config.mak.in |
|
||||
|
|
||||
echo "# ${config_append}. Generated by configure." > "${config_append}" |
|
||||
|
|
||||
#dnl Search for pkg-config |
|
||||
#AC_PATH_PROG(PKG_CONFIG, pkg-config) |
|
||||
|
|
||||
AC_ARG_ENABLE(debug, |
|
||||
AC_HELP_STRING([--enable-debug], [enable debugging ]), |
|
||||
AC_SUBST(DEBUG,[1])) |
|
||||
|
|
||||
|
|
||||
# TODO support options |
|
||||
# --efence Build with -lefence for debugging [Default: False] |
|
||||
# --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') |
|
||||
# --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 |
|
||||
# --shared-libev Link to a shared libev DLL instead of static linking |
|
||||
# --shared-libev-includes=SHARED_LIBEV_INCLUDES |
|
||||
# Directory containing libev header files |
|
||||
# --shared-libev-libpath=SHARED_LIBEV_LIBPATH |
|
||||
# A directory to search for the shared libev DLL |
|
||||
|
|
||||
# ------------------------------------------------------------------------------ |
|
||||
# Checks |
|
||||
|
|
||||
# $arch (only those we support, i.e. lowest common denominator) |
|
||||
# Customize by e.g: ./configure --target=i386-apple-darwin |
|
||||
AC_MSG_CHECKING([target architecture identifier]) |
|
||||
case "$target_cpu" in |
|
||||
x64|x86_64|ia64) arch=x64 ;; |
|
||||
ia32|i386|i486|i586|i686) arch=ia32 ;; |
|
||||
arm|armeb) arch=arm ;; |
|
||||
*) AC_MSG_ERROR([Unsupported target architecture: $target_cpu]) ;; |
|
||||
esac |
|
||||
AC_SUBST(arch,[${arch}]) |
|
||||
AC_MSG_RESULT([$arch]) |
|
||||
|
|
||||
# CFLAGS += -m{32,64} |
|
||||
if ( echo "$build_cpu" | egrep -q 'x64|x86_64|ia64' ); then |
|
||||
if test "$arch" = "ia32"; then CFLAGS="${CFLAGS} -m32"; fi |
|
||||
else |
|
||||
if test "$arch" = "x64"; then CFLAGS="${CFLAGS} -m64" ;fi |
|
||||
fi |
|
||||
|
|
||||
# $platform (only those we support, i.e. [[ -d deps/c-ares/${platform}-* ]]) |
|
||||
AC_MSG_CHECKING([target platform identifier]) |
|
||||
if test "$target_os" = "none"; then target_os="$build_os"; fi |
|
||||
case "$target_os" in |
|
||||
#android*) platform=android ;; |
|
||||
cygwin*) platform=cygwin ;; |
|
||||
darwin*) platform=darwin ;; |
|
||||
freebsd*) platform=freebsd ;; |
|
||||
linux*) platform=linux ;; |
|
||||
openbsd*) platform=openbsd ;; |
|
||||
*solaris*|sunos*) platform=solaris ;; |
|
||||
#win32*) platform=win32 ;; |
|
||||
*) AC_MSG_ERROR([Unsupported target platform: $target_os]) ;; |
|
||||
esac |
|
||||
AC_SUBST(platform,[${platform}]) |
|
||||
AC_MSG_RESULT([$platform]) |
|
||||
|
|
||||
# Darwin cross-compilation target -arch flag |
|
||||
if test "$platform" = "darwin"; then |
|
||||
CFLAGS="${CFLAGS} -arch ${target_cpu}"; |
|
||||
LDFLAGS="${LDFLAGS} -arch ${target_cpu}" |
|
||||
fi |
|
||||
|
|
||||
# Checks for programs. |
|
||||
AC_CHECK_PROGS(TAR, [gtar tar]) |
|
||||
AC_CHECK_TOOLS(AR, [gar ar], :) |
|
||||
AC_PROG_MKDIR_P |
|
||||
AC_PROG_LN_S |
|
||||
AC_PROG_INSTALL |
|
||||
|
|
||||
# Checks for header files |
|
||||
AC_HEADER_STDC |
|
||||
|
|
||||
# Checks for typedefs, structures, and compiler characteristics. |
|
||||
AC_C_CONST |
|
||||
AC_C_INLINE |
|
||||
AC_C_CHAR_UNSIGNED |
|
||||
AC_TYPE_OFF_T |
|
||||
AC_TYPE_PID_T |
|
||||
AC_TYPE_SIZE_T |
|
||||
|
|
||||
# Checks for library functions. |
|
||||
AC_FUNC_FORK |
|
||||
AC_FUNC_STAT |
|
||||
AC_SEARCH_LIBS([dlopen], [dl dld], [], [ |
|
||||
AC_MSG_ERROR([Unable to find the dlopen() function]) |
|
||||
]) |
|
||||
|
|
||||
# TODO FIXME: Check for OpenSSL -- expect it to exist for now |
|
||||
AC_SUBST([HAVE_OPENSSL],[1]) |
|
||||
|
|
||||
|
|
||||
# check for -lsocket on solaris |
|
||||
AC_CHECK_LIB([c], [socket], [WANT_SOCKET=], [WANT_SOCKET=1]) |
|
||||
AC_SUBST(WANT_SOCKET) |
|
||||
|
|
||||
|
|
||||
|
|
||||
# ------------------------------------------------------------------------------ |
|
||||
# Embedded dependencies |
|
||||
|
|
||||
m4_include([deps/libev/libev.m4]) |
|
||||
m4_include([deps/libeio/libeio.m4]) |
|
||||
|
|
||||
AC_CONFIG_HEADERS([build/deps/libev/config.h:deps/libev/config.h.in]) |
|
||||
AC_CONFIG_HEADERS([build/deps/libeio/config.h:deps/libeio/config.h.in]) |
|
||||
|
|
||||
AC_CONFIG_FILES(["${config_file}":"${config_in}"]) |
|
||||
|
|
||||
mkdir -p build/debug/src build/release/src |
|
||||
mkdir -p build/debug/deps/libev build/release/deps/libev |
|
||||
mkdir -p build/debug/deps/libeio build/release/deps/libeio |
|
||||
mkdir -p build/debug/deps/c-ares build/release/deps/c-ares |
|
||||
mkdir -p build/debug/deps/http_parser build/release/deps/http_parser |
|
||||
mkdir -p build/debug/deps/v8 build/release/deps/v8 |
|
||||
mkdir -p build/debug/lib/pkgconfig build/release/lib/pkgconfig |
|
||||
|
|
||||
# ------------------------------------------------------------------------------ |
|
||||
# Output files |
|
||||
AC_OUTPUT |
|
||||
|
|
||||
# ------------------------------------------------------------------------------ |
|
||||
# Cleanup |
|
||||
rm -f "${config_append}" |
|
@ -0,0 +1,26 @@ |
|||||
|
import Options |
||||
|
import platform |
||||
|
|
||||
|
PLATFORM_IS_DARWIN = platform.platform().find('Darwin') == 0 |
||||
|
PLATFORM_IS_LINUX = platform.platform().find('Linux') == 0 |
||||
|
PLATFORM_IS_SOLARIS = platform.platform().find('Sun') == 0 |
||||
|
PLATFORM_IS_FREEBSD = platform.platform().find('FreeBSD') == 0 |
||||
|
MACHINE_IS_AMD64 = platform.machine().find('amd64') == 0 |
||||
|
MACHINE_IS_I386 = platform.machine().find('i386') == 0 |
||||
|
|
||||
|
def set_options(opt): |
||||
|
pass |
||||
|
|
||||
|
def configure(conf): |
||||
|
conf.env.append_value('CCFLAGS', ['-DHAVE_CONFIG_H=1']) |
||||
|
|
||||
|
def build(bld): |
||||
|
cares = bld.new_task_gen("cc") |
||||
|
cares.source = bld.path.ant_glob('*.c') |
||||
|
cares.target = 'cares' |
||||
|
cares.name = 'cares' |
||||
|
cares.includes = '. ./' + bld.env['DEST_OS'] + '-' + bld.env['DEST_CPU'] |
||||
|
cares.install_path = None |
||||
|
if bld.env["USE_DEBUG"]: |
||||
|
cares.clone("debug"); |
||||
|
|
@ -0,0 +1,127 @@ |
|||||
|
import Options |
||||
|
import sys |
||||
|
|
||||
|
def set_options(opt): |
||||
|
pass |
||||
|
#opt.tool_options('compiler_cc') |
||||
|
|
||||
|
def configure(conf): |
||||
|
print "--- libeio ---" |
||||
|
#conf.check_tool('compiler_cc') |
||||
|
|
||||
|
conf.check(lib='pthread', uselib_store='PTHREAD') |
||||
|
conf.check_cc(lib="pthread", header_name="pthread.h", function_name="pthread_create", mandatory=True) |
||||
|
if not sys.platform.startswith("cygwin"): |
||||
|
conf.check_cc(lib="pthread", header_name="pthread.h", function_name="pthread_atfork", mandatory=True) |
||||
|
else: |
||||
|
conf.check_cc(lib="pthread", header_name="unistd.h", function_name="pthread_atfork", mandatory=True) |
||||
|
|
||||
|
conf.check_cc(msg="Checking for futimes(2)", define_name="HAVE_FUTIMES", fragment=""" |
||||
|
#include <sys/types.h> |
||||
|
#include <sys/time.h> |
||||
|
#include <utime.h> |
||||
|
struct timeval tv[2]; |
||||
|
int res; |
||||
|
int fd; |
||||
|
int main(void) |
||||
|
{ |
||||
|
res = futimes (fd, tv); |
||||
|
return 0; |
||||
|
} |
||||
|
""") |
||||
|
|
||||
|
conf.check_cc(msg="Checking for readahead(2)", define_name="HAVE_READAHEAD", fragment=""" |
||||
|
#include <fcntl.h> |
||||
|
int main(void) |
||||
|
{ |
||||
|
int fd = 0; |
||||
|
size_t count = 2; |
||||
|
ssize_t res; |
||||
|
res = readahead (fd, 0, count); |
||||
|
return 0; |
||||
|
} |
||||
|
""") |
||||
|
|
||||
|
conf.check_cc(msg="Checking for fdatasync(2)", define_name="HAVE_FDATASYNC", fragment=""" |
||||
|
#include <unistd.h> |
||||
|
int main(void) |
||||
|
{ |
||||
|
int fd = 0; |
||||
|
fdatasync (fd); |
||||
|
return 0; |
||||
|
} |
||||
|
""") |
||||
|
|
||||
|
conf.check_cc(msg="Checking for pread(2) and pwrite(2)", define_name="HAVE_PREADWRITE", fragment=""" |
||||
|
#include <unistd.h> |
||||
|
int main(void) |
||||
|
{ |
||||
|
int fd = 0; |
||||
|
size_t count = 1; |
||||
|
char buf; |
||||
|
off_t offset = 1; |
||||
|
ssize_t res; |
||||
|
res = pread (fd, &buf, count, offset); |
||||
|
res = pwrite (fd, &buf, count, offset); |
||||
|
return 0; |
||||
|
} |
||||
|
""") |
||||
|
|
||||
|
conf.check_cc(msg="Checking for sendfile(2)" , define_name="HAVE_SENDFILE" , fragment=""" |
||||
|
# include <sys/types.h> |
||||
|
#if __linux |
||||
|
# include <sys/sendfile.h> |
||||
|
#elif __FreeBSD__ || defined(__APPLE__) |
||||
|
# include <sys/socket.h> |
||||
|
# include <sys/uio.h> |
||||
|
#elif __hpux |
||||
|
# include <sys/socket.h> |
||||
|
#else |
||||
|
# error unsupported architecture |
||||
|
#endif |
||||
|
int main(void) |
||||
|
{ |
||||
|
int fd = 0; |
||||
|
off_t offset = 1; |
||||
|
size_t count = 2; |
||||
|
ssize_t res; |
||||
|
#if __linux |
||||
|
res = sendfile (fd, fd, offset, count); |
||||
|
#elif __FreeBSD__ |
||||
|
res = sendfile (fd, fd, offset, count, 0, &offset, 0); |
||||
|
#elif __APPLE__ |
||||
|
res = sendfile (fd, fd, offset, &offset, 0, 0); |
||||
|
#elif __hpux |
||||
|
res = sendfile (fd, fd, offset, count, 0, 0); |
||||
|
#endif |
||||
|
return 0; |
||||
|
} |
||||
|
""") |
||||
|
|
||||
|
conf.env.append_value("CCFLAGS", "-D_GNU_SOURCE") |
||||
|
conf.check_cc(msg="Checking for sync_file_range(2) ", fragment=""" |
||||
|
#include <fcntl.h> |
||||
|
int main(void) |
||||
|
{ |
||||
|
int fd = 0; |
||||
|
off64_t offset = 1; |
||||
|
off64_t nbytes = 1; |
||||
|
unsigned int flags = SYNC_FILE_RANGE_WAIT_BEFORE|SYNC_FILE_RANGE_WRITE|SYNC_FILE_RANGE_WAIT_AFTER; |
||||
|
ssize_t res; |
||||
|
res = sync_file_range (fd, offset, nbytes, flags); |
||||
|
return 0; |
||||
|
} |
||||
|
""", define_name="HAVE_SYNC_FILE_RANGE") |
||||
|
|
||||
|
def build(bld): |
||||
|
libeio = bld.new_task_gen("cc") |
||||
|
libeio.source = "eio.c" |
||||
|
libeio.target = 'eio' |
||||
|
libeio.name = 'eio' |
||||
|
libeio.includes = '. ../..' |
||||
|
libeio.uselib = "PTHREAD" |
||||
|
libeio.install_path = None |
||||
|
if bld.env["USE_DEBUG"]: |
||||
|
libeio.clone("debug"); |
||||
|
bld.install_files('${PREFIX}/include/node/', 'eio.h'); |
||||
|
|
@ -0,0 +1,85 @@ |
|||||
|
import Options |
||||
|
import platform |
||||
|
|
||||
|
PLATFORM_IS_DARWIN = platform.platform().find('Darwin') == 0 |
||||
|
|
||||
|
def set_options(opt): |
||||
|
pass |
||||
|
#opt.tool_options('compiler_cc') |
||||
|
|
||||
|
def configure(conf): |
||||
|
print "--- libev ---" |
||||
|
#conf.check_tool('compiler_cc') |
||||
|
|
||||
|
# Why to the two checks? One is to define HAVE_SYS_EPOLL_H |
||||
|
# the other is to define HAVE_EPOLL_CTL |
||||
|
# Yes, WAF is a piece of shit. |
||||
|
|
||||
|
if conf.check_cc(header_name="sys/inotify.h"): |
||||
|
conf.check_cc(header_name="sys/inotify.h", function_name="inotify_init") |
||||
|
|
||||
|
if conf.check_cc(header_name="sys/epoll.h"): |
||||
|
conf.check_cc(header_name="sys/epoll.h", function_name="epoll_ctl") |
||||
|
|
||||
|
if conf.check_cc(header_name="port.h"): |
||||
|
conf.check_cc(header_name="port.h", function_name="port_create") |
||||
|
|
||||
|
if conf.check_cc(header_name="poll.h"): |
||||
|
conf.check_cc(header_name="poll.h", function_name="poll") |
||||
|
|
||||
|
conf.check_cc(header_name="sys/event.h") |
||||
|
conf.check_cc(header_name="sys/queue.h") |
||||
|
if PLATFORM_IS_DARWIN: |
||||
|
conf.check_cc(header_name="sys/event.h", function_name="kqueue") |
||||
|
else: |
||||
|
conf.check_cc(header_name="sys/queue.h", function_name="kqueue") |
||||
|
|
||||
|
if conf.check_cc(header_name="sys/select.h"): |
||||
|
conf.check_cc(header_name="sys/select.h", function_name="select") |
||||
|
|
||||
|
if conf.check_cc(header_name="sys/eventfd.h"): |
||||
|
conf.check_cc(header_name="sys/eventfd.h", function_name="eventfd") |
||||
|
|
||||
|
|
||||
|
code = """ |
||||
|
#include <syscall.h> |
||||
|
#include <time.h> |
||||
|
#include <stdio.h> |
||||
|
|
||||
|
int main() { |
||||
|
struct timespec ts; |
||||
|
int status = syscall(SYS_clock_gettime, CLOCK_REALTIME, &ts); |
||||
|
return 0; |
||||
|
} |
||||
|
""" |
||||
|
conf.check_cc(fragment=code, define_name="HAVE_CLOCK_SYSCALL", execute=True, |
||||
|
msg="Checking for SYS_clock_gettime") |
||||
|
|
||||
|
have_librt = conf.check(lib='rt', uselib_store='RT') |
||||
|
if have_librt: |
||||
|
conf.check_cc(lib="rt", header_name="time.h", function_name="clock_gettime") |
||||
|
if PLATFORM_IS_DARWIN: |
||||
|
conf.check_cc(header_name="time.h", function_name="nanosleep") |
||||
|
elif have_librt: |
||||
|
conf.check_cc(lib="rt", header_name="time.h", function_name="nanosleep") |
||||
|
|
||||
|
conf.check_cc(lib="m", header_name="math.h", function_name="ceil") |
||||
|
|
||||
|
conf.define("HAVE_CONFIG_H", 1) |
||||
|
# Not using these. |
||||
|
conf.env.append_value('CPPFLAGS', ['-DEV_FORK_ENABLE=0', |
||||
|
'-DEV_EMBED_ENABLE=0', |
||||
|
'-DEV_MULTIPLICITY=0']) |
||||
|
|
||||
|
def build(bld): |
||||
|
libev = bld.new_task_gen("cc") |
||||
|
libev.source = 'ev.c' |
||||
|
libev.target = 'ev' |
||||
|
libev.name = 'ev' |
||||
|
libev.includes = '. ../..' |
||||
|
libev.uselib = "RT" |
||||
|
libev.install_path = None |
||||
|
if bld.env["USE_DEBUG"]: |
||||
|
libev.clone("debug"); |
||||
|
bld.install_files('${PREFIX}/include/node/', 'ev.h'); |
||||
|
|
@ -1,520 +0,0 @@ |
|||||
#!/bin/sh |
|
||||
# install - install a program, script, or datafile |
|
||||
|
|
||||
scriptversion=2009-04-28.21; # UTC |
|
||||
|
|
||||
# This originates from X11R5 (mit/util/scripts/install.sh), which was |
|
||||
# later released in X11R6 (xc/config/util/install.sh) with the |
|
||||
# following copyright and license. |
|
||||
# |
|
||||
# Copyright (C) 1994 X Consortium |
|
||||
# |
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy |
|
||||
# of this software and associated documentation files (the "Software"), to |
|
||||
# deal in the Software without restriction, including without limitation the |
|
||||
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
|
||||
# sell copies of the Software, and to permit persons to whom the Software is |
|
||||
# furnished to do so, subject to the following conditions: |
|
||||
# |
|
||||
# The above copyright notice and this permission notice shall be included in |
|
||||
# all copies or substantial portions of the Software. |
|
||||
# |
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|
||||
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN |
|
||||
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- |
|
||||
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
|
||||
# |
|
||||
# Except as contained in this notice, the name of the X Consortium shall not |
|
||||
# be used in advertising or otherwise to promote the sale, use or other deal- |
|
||||
# ings in this Software without prior written authorization from the X Consor- |
|
||||
# tium. |
|
||||
# |
|
||||
# |
|
||||
# FSF changes to this file are in the public domain. |
|
||||
# |
|
||||
# Calling this script install-sh is preferred over install.sh, to prevent |
|
||||
# `make' implicit rules from creating a file called install from it |
|
||||
# when there is no Makefile. |
|
||||
# |
|
||||
# This script is compatible with the BSD install script, but was written |
|
||||
# from scratch. |
|
||||
|
|
||||
nl=' |
|
||||
' |
|
||||
IFS=" "" $nl" |
|
||||
|
|
||||
# set DOITPROG to echo to test this script |
|
||||
|
|
||||
# Don't use :- since 4.3BSD and earlier shells don't like it. |
|
||||
doit=${DOITPROG-} |
|
||||
if test -z "$doit"; then |
|
||||
doit_exec=exec |
|
||||
else |
|
||||
doit_exec=$doit |
|
||||
fi |
|
||||
|
|
||||
# Put in absolute file names if you don't have them in your path; |
|
||||
# or use environment vars. |
|
||||
|
|
||||
chgrpprog=${CHGRPPROG-chgrp} |
|
||||
chmodprog=${CHMODPROG-chmod} |
|
||||
chownprog=${CHOWNPROG-chown} |
|
||||
cmpprog=${CMPPROG-cmp} |
|
||||
cpprog=${CPPROG-cp} |
|
||||
mkdirprog=${MKDIRPROG-mkdir} |
|
||||
mvprog=${MVPROG-mv} |
|
||||
rmprog=${RMPROG-rm} |
|
||||
stripprog=${STRIPPROG-strip} |
|
||||
|
|
||||
posix_glob='?' |
|
||||
initialize_posix_glob=' |
|
||||
test "$posix_glob" != "?" || { |
|
||||
if (set -f) 2>/dev/null; then |
|
||||
posix_glob= |
|
||||
else |
|
||||
posix_glob=: |
|
||||
fi |
|
||||
} |
|
||||
' |
|
||||
|
|
||||
posix_mkdir= |
|
||||
|
|
||||
# Desired mode of installed file. |
|
||||
mode=0755 |
|
||||
|
|
||||
chgrpcmd= |
|
||||
chmodcmd=$chmodprog |
|
||||
chowncmd= |
|
||||
mvcmd=$mvprog |
|
||||
rmcmd="$rmprog -f" |
|
||||
stripcmd= |
|
||||
|
|
||||
src= |
|
||||
dst= |
|
||||
dir_arg= |
|
||||
dst_arg= |
|
||||
|
|
||||
copy_on_change=false |
|
||||
no_target_directory= |
|
||||
|
|
||||
usage="\ |
|
||||
Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE |
|
||||
or: $0 [OPTION]... SRCFILES... DIRECTORY |
|
||||
or: $0 [OPTION]... -t DIRECTORY SRCFILES... |
|
||||
or: $0 [OPTION]... -d DIRECTORIES... |
|
||||
|
|
||||
In the 1st form, copy SRCFILE to DSTFILE. |
|
||||
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. |
|
||||
In the 4th, create DIRECTORIES. |
|
||||
|
|
||||
Options: |
|
||||
--help display this help and exit. |
|
||||
--version display version info and exit. |
|
||||
|
|
||||
-c (ignored) |
|
||||
-C install only if different (preserve the last data modification time) |
|
||||
-d create directories instead of installing files. |
|
||||
-g GROUP $chgrpprog installed files to GROUP. |
|
||||
-m MODE $chmodprog installed files to MODE. |
|
||||
-o USER $chownprog installed files to USER. |
|
||||
-s $stripprog installed files. |
|
||||
-t DIRECTORY install into DIRECTORY. |
|
||||
-T report an error if DSTFILE is a directory. |
|
||||
|
|
||||
Environment variables override the default commands: |
|
||||
CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG |
|
||||
RMPROG STRIPPROG |
|
||||
" |
|
||||
|
|
||||
while test $# -ne 0; do |
|
||||
case $1 in |
|
||||
-c) ;; |
|
||||
|
|
||||
-C) copy_on_change=true;; |
|
||||
|
|
||||
-d) dir_arg=true;; |
|
||||
|
|
||||
-g) chgrpcmd="$chgrpprog $2" |
|
||||
shift;; |
|
||||
|
|
||||
--help) echo "$usage"; exit $?;; |
|
||||
|
|
||||
-m) mode=$2 |
|
||||
case $mode in |
|
||||
*' '* | *' '* | *' |
|
||||
'* | *'*'* | *'?'* | *'['*) |
|
||||
echo "$0: invalid mode: $mode" >&2 |
|
||||
exit 1;; |
|
||||
esac |
|
||||
shift;; |
|
||||
|
|
||||
-o) chowncmd="$chownprog $2" |
|
||||
shift;; |
|
||||
|
|
||||
-s) stripcmd=$stripprog;; |
|
||||
|
|
||||
-t) dst_arg=$2 |
|
||||
shift;; |
|
||||
|
|
||||
-T) no_target_directory=true;; |
|
||||
|
|
||||
--version) echo "$0 $scriptversion"; exit $?;; |
|
||||
|
|
||||
--) shift |
|
||||
break;; |
|
||||
|
|
||||
-*) echo "$0: invalid option: $1" >&2 |
|
||||
exit 1;; |
|
||||
|
|
||||
*) break;; |
|
||||
esac |
|
||||
shift |
|
||||
done |
|
||||
|
|
||||
if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then |
|
||||
# When -d is used, all remaining arguments are directories to create. |
|
||||
# When -t is used, the destination is already specified. |
|
||||
# Otherwise, the last argument is the destination. Remove it from $@. |
|
||||
for arg |
|
||||
do |
|
||||
if test -n "$dst_arg"; then |
|
||||
# $@ is not empty: it contains at least $arg. |
|
||||
set fnord "$@" "$dst_arg" |
|
||||
shift # fnord |
|
||||
fi |
|
||||
shift # arg |
|
||||
dst_arg=$arg |
|
||||
done |
|
||||
fi |
|
||||
|
|
||||
if test $# -eq 0; then |
|
||||
if test -z "$dir_arg"; then |
|
||||
echo "$0: no input file specified." >&2 |
|
||||
exit 1 |
|
||||
fi |
|
||||
# It's OK to call `install-sh -d' without argument. |
|
||||
# This can happen when creating conditional directories. |
|
||||
exit 0 |
|
||||
fi |
|
||||
|
|
||||
if test -z "$dir_arg"; then |
|
||||
trap '(exit $?); exit' 1 2 13 15 |
|
||||
|
|
||||
# Set umask so as not to create temps with too-generous modes. |
|
||||
# However, 'strip' requires both read and write access to temps. |
|
||||
case $mode in |
|
||||
# Optimize common cases. |
|
||||
*644) cp_umask=133;; |
|
||||
*755) cp_umask=22;; |
|
||||
|
|
||||
*[0-7]) |
|
||||
if test -z "$stripcmd"; then |
|
||||
u_plus_rw= |
|
||||
else |
|
||||
u_plus_rw='% 200' |
|
||||
fi |
|
||||
cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; |
|
||||
*) |
|
||||
if test -z "$stripcmd"; then |
|
||||
u_plus_rw= |
|
||||
else |
|
||||
u_plus_rw=,u+rw |
|
||||
fi |
|
||||
cp_umask=$mode$u_plus_rw;; |
|
||||
esac |
|
||||
fi |
|
||||
|
|
||||
for src |
|
||||
do |
|
||||
# Protect names starting with `-'. |
|
||||
case $src in |
|
||||
-*) src=./$src;; |
|
||||
esac |
|
||||
|
|
||||
if test -n "$dir_arg"; then |
|
||||
dst=$src |
|
||||
dstdir=$dst |
|
||||
test -d "$dstdir" |
|
||||
dstdir_status=$? |
|
||||
else |
|
||||
|
|
||||
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command |
|
||||
# might cause directories to be created, which would be especially bad |
|
||||
# if $src (and thus $dsttmp) contains '*'. |
|
||||
if test ! -f "$src" && test ! -d "$src"; then |
|
||||
echo "$0: $src does not exist." >&2 |
|
||||
exit 1 |
|
||||
fi |
|
||||
|
|
||||
if test -z "$dst_arg"; then |
|
||||
echo "$0: no destination specified." >&2 |
|
||||
exit 1 |
|
||||
fi |
|
||||
|
|
||||
dst=$dst_arg |
|
||||
# Protect names starting with `-'. |
|
||||
case $dst in |
|
||||
-*) dst=./$dst;; |
|
||||
esac |
|
||||
|
|
||||
# If destination is a directory, append the input filename; won't work |
|
||||
# if double slashes aren't ignored. |
|
||||
if test -d "$dst"; then |
|
||||
if test -n "$no_target_directory"; then |
|
||||
echo "$0: $dst_arg: Is a directory" >&2 |
|
||||
exit 1 |
|
||||
fi |
|
||||
dstdir=$dst |
|
||||
dst=$dstdir/`basename "$src"` |
|
||||
dstdir_status=0 |
|
||||
else |
|
||||
# Prefer dirname, but fall back on a substitute if dirname fails. |
|
||||
dstdir=` |
|
||||
(dirname "$dst") 2>/dev/null || |
|
||||
expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ |
|
||||
X"$dst" : 'X\(//\)[^/]' \| \ |
|
||||
X"$dst" : 'X\(//\)$' \| \ |
|
||||
X"$dst" : 'X\(/\)' \| . 2>/dev/null || |
|
||||
echo X"$dst" | |
|
||||
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ |
|
||||
s//\1/ |
|
||||
q |
|
||||
} |
|
||||
/^X\(\/\/\)[^/].*/{ |
|
||||
s//\1/ |
|
||||
q |
|
||||
} |
|
||||
/^X\(\/\/\)$/{ |
|
||||
s//\1/ |
|
||||
q |
|
||||
} |
|
||||
/^X\(\/\).*/{ |
|
||||
s//\1/ |
|
||||
q |
|
||||
} |
|
||||
s/.*/./; q' |
|
||||
` |
|
||||
|
|
||||
test -d "$dstdir" |
|
||||
dstdir_status=$? |
|
||||
fi |
|
||||
fi |
|
||||
|
|
||||
obsolete_mkdir_used=false |
|
||||
|
|
||||
if test $dstdir_status != 0; then |
|
||||
case $posix_mkdir in |
|
||||
'') |
|
||||
# Create intermediate dirs using mode 755 as modified by the umask. |
|
||||
# This is like FreeBSD 'install' as of 1997-10-28. |
|
||||
umask=`umask` |
|
||||
case $stripcmd.$umask in |
|
||||
# Optimize common cases. |
|
||||
*[2367][2367]) mkdir_umask=$umask;; |
|
||||
.*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; |
|
||||
|
|
||||
*[0-7]) |
|
||||
mkdir_umask=`expr $umask + 22 \ |
|
||||
- $umask % 100 % 40 + $umask % 20 \ |
|
||||
- $umask % 10 % 4 + $umask % 2 |
|
||||
`;; |
|
||||
*) mkdir_umask=$umask,go-w;; |
|
||||
esac |
|
||||
|
|
||||
# With -d, create the new directory with the user-specified mode. |
|
||||
# Otherwise, rely on $mkdir_umask. |
|
||||
if test -n "$dir_arg"; then |
|
||||
mkdir_mode=-m$mode |
|
||||
else |
|
||||
mkdir_mode= |
|
||||
fi |
|
||||
|
|
||||
posix_mkdir=false |
|
||||
case $umask in |
|
||||
*[123567][0-7][0-7]) |
|
||||
# POSIX mkdir -p sets u+wx bits regardless of umask, which |
|
||||
# is incompatible with FreeBSD 'install' when (umask & 300) != 0. |
|
||||
;; |
|
||||
*) |
|
||||
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ |
|
||||
trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 |
|
||||
|
|
||||
if (umask $mkdir_umask && |
|
||||
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 |
|
||||
then |
|
||||
if test -z "$dir_arg" || { |
|
||||
# Check for POSIX incompatibilities with -m. |
|
||||
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or |
|
||||
# other-writeable bit of parent directory when it shouldn't. |
|
||||
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory. |
|
||||
ls_ld_tmpdir=`ls -ld "$tmpdir"` |
|
||||
case $ls_ld_tmpdir in |
|
||||
d????-?r-*) different_mode=700;; |
|
||||
d????-?--*) different_mode=755;; |
|
||||
*) false;; |
|
||||
esac && |
|
||||
$mkdirprog -m$different_mode -p -- "$tmpdir" && { |
|
||||
ls_ld_tmpdir_1=`ls -ld "$tmpdir"` |
|
||||
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" |
|
||||
} |
|
||||
} |
|
||||
then posix_mkdir=: |
|
||||
fi |
|
||||
rmdir "$tmpdir/d" "$tmpdir" |
|
||||
else |
|
||||
# Remove any dirs left behind by ancient mkdir implementations. |
|
||||
rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null |
|
||||
fi |
|
||||
trap '' 0;; |
|
||||
esac;; |
|
||||
esac |
|
||||
|
|
||||
if |
|
||||
$posix_mkdir && ( |
|
||||
umask $mkdir_umask && |
|
||||
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" |
|
||||
) |
|
||||
then : |
|
||||
else |
|
||||
|
|
||||
# The umask is ridiculous, or mkdir does not conform to POSIX, |
|
||||
# or it failed possibly due to a race condition. Create the |
|
||||
# directory the slow way, step by step, checking for races as we go. |
|
||||
|
|
||||
case $dstdir in |
|
||||
/*) prefix='/';; |
|
||||
-*) prefix='./';; |
|
||||
*) prefix='';; |
|
||||
esac |
|
||||
|
|
||||
eval "$initialize_posix_glob" |
|
||||
|
|
||||
oIFS=$IFS |
|
||||
IFS=/ |
|
||||
$posix_glob set -f |
|
||||
set fnord $dstdir |
|
||||
shift |
|
||||
$posix_glob set +f |
|
||||
IFS=$oIFS |
|
||||
|
|
||||
prefixes= |
|
||||
|
|
||||
for d |
|
||||
do |
|
||||
test -z "$d" && continue |
|
||||
|
|
||||
prefix=$prefix$d |
|
||||
if test -d "$prefix"; then |
|
||||
prefixes= |
|
||||
else |
|
||||
if $posix_mkdir; then |
|
||||
(umask=$mkdir_umask && |
|
||||
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break |
|
||||
# Don't fail if two instances are running concurrently. |
|
||||
test -d "$prefix" || exit 1 |
|
||||
else |
|
||||
case $prefix in |
|
||||
*\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; |
|
||||
*) qprefix=$prefix;; |
|
||||
esac |
|
||||
prefixes="$prefixes '$qprefix'" |
|
||||
fi |
|
||||
fi |
|
||||
prefix=$prefix/ |
|
||||
done |
|
||||
|
|
||||
if test -n "$prefixes"; then |
|
||||
# Don't fail if two instances are running concurrently. |
|
||||
(umask $mkdir_umask && |
|
||||
eval "\$doit_exec \$mkdirprog $prefixes") || |
|
||||
test -d "$dstdir" || exit 1 |
|
||||
obsolete_mkdir_used=true |
|
||||
fi |
|
||||
fi |
|
||||
fi |
|
||||
|
|
||||
if test -n "$dir_arg"; then |
|
||||
{ test -z "$chowncmd" || $doit $chowncmd "$dst"; } && |
|
||||
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && |
|
||||
{ test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || |
|
||||
test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 |
|
||||
else |
|
||||
|
|
||||
# Make a couple of temp file names in the proper directory. |
|
||||
dsttmp=$dstdir/_inst.$$_ |
|
||||
rmtmp=$dstdir/_rm.$$_ |
|
||||
|
|
||||
# Trap to clean up those temp files at exit. |
|
||||
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 |
|
||||
|
|
||||
# Copy the file name to the temp name. |
|
||||
(umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && |
|
||||
|
|
||||
# and set any options; do chmod last to preserve setuid bits. |
|
||||
# |
|
||||
# If any of these fail, we abort the whole thing. If we want to |
|
||||
# ignore errors from any of these, just make sure not to ignore |
|
||||
# errors from the above "$doit $cpprog $src $dsttmp" command. |
|
||||
# |
|
||||
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && |
|
||||
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && |
|
||||
{ test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && |
|
||||
{ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && |
|
||||
|
|
||||
# If -C, don't bother to copy if it wouldn't change the file. |
|
||||
if $copy_on_change && |
|
||||
old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && |
|
||||
new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && |
|
||||
|
|
||||
eval "$initialize_posix_glob" && |
|
||||
$posix_glob set -f && |
|
||||
set X $old && old=:$2:$4:$5:$6 && |
|
||||
set X $new && new=:$2:$4:$5:$6 && |
|
||||
$posix_glob set +f && |
|
||||
|
|
||||
test "$old" = "$new" && |
|
||||
$cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 |
|
||||
then |
|
||||
rm -f "$dsttmp" |
|
||||
else |
|
||||
# Rename the file to the real destination. |
|
||||
$doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || |
|
||||
|
|
||||
# The rename failed, perhaps because mv can't rename something else |
|
||||
# to itself, or perhaps because mv is so ancient that it does not |
|
||||
# support -f. |
|
||||
{ |
|
||||
# Now remove or move aside any old file at destination location. |
|
||||
# We try this two ways since rm can't unlink itself on some |
|
||||
# systems and the destination file might be busy for other |
|
||||
# reasons. In this case, the final cleanup might fail but the new |
|
||||
# file should still install successfully. |
|
||||
{ |
|
||||
test ! -f "$dst" || |
|
||||
$doit $rmcmd -f "$dst" 2>/dev/null || |
|
||||
{ $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && |
|
||||
{ $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } |
|
||||
} || |
|
||||
{ echo "$0: cannot unlink or rename $dst" >&2 |
|
||||
(exit 1); exit 1 |
|
||||
} |
|
||||
} && |
|
||||
|
|
||||
# Now rename the file to the real destination. |
|
||||
$doit $mvcmd "$dsttmp" "$dst" |
|
||||
} |
|
||||
fi || exit 1 |
|
||||
|
|
||||
trap '' 0 |
|
||||
fi |
|
||||
done |
|
||||
|
|
||||
# Local variables: |
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp) |
|
||||
# time-stamp-start: "scriptversion=" |
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H" |
|
||||
# time-stamp-time-zone: "UTC" |
|
||||
# time-stamp-end: "; # UTC" |
|
||||
# End: |
|
@ -0,0 +1,604 @@ |
|||||
|
#!/usr/bin/env python |
||||
|
import re |
||||
|
import Options |
||||
|
import sys, os, shutil |
||||
|
from Utils import cmd_output |
||||
|
from os.path import join, dirname, abspath |
||||
|
from logging import fatal |
||||
|
|
||||
|
cwd = os.getcwd() |
||||
|
APPNAME="node.js" |
||||
|
|
||||
|
import js2c |
||||
|
|
||||
|
srcdir = '.' |
||||
|
blddir = 'build' |
||||
|
|
||||
|
|
||||
|
jobs=1 |
||||
|
if os.environ.has_key('JOBS'): |
||||
|
jobs = int(os.environ['JOBS']) |
||||
|
|
||||
|
|
||||
|
def set_options(opt): |
||||
|
# the gcc module provides a --debug-level option |
||||
|
opt.tool_options('compiler_cxx') |
||||
|
opt.tool_options('compiler_cc') |
||||
|
opt.tool_options('misc') |
||||
|
opt.add_option( '--debug' |
||||
|
, action='store_true' |
||||
|
, default=False |
||||
|
, help='Build debug variant [Default: False]' |
||||
|
, dest='debug' |
||||
|
) |
||||
|
opt.add_option( '--efence' |
||||
|
, action='store_true' |
||||
|
, default=False |
||||
|
, help='Build with -lefence for debugging [Default: False]' |
||||
|
, dest='efence' |
||||
|
) |
||||
|
|
||||
|
opt.add_option( '--without-snapshot' |
||||
|
, action='store_true' |
||||
|
, default=False |
||||
|
, help='Build without snapshotting V8 libraries. You might want to set this for cross-compiling. [Default: False]' |
||||
|
, dest='without_snapshot' |
||||
|
) |
||||
|
|
||||
|
opt.add_option( '--without-ssl' |
||||
|
, action='store_true' |
||||
|
, default=False |
||||
|
, help='Build without SSL' |
||||
|
, dest='without_ssl' |
||||
|
) |
||||
|
|
||||
|
|
||||
|
opt.add_option('--shared-v8' |
||||
|
, action='store_true' |
||||
|
, default=False |
||||
|
, help='Link to a shared V8 DLL instead of static linking' |
||||
|
, dest='shared_v8' |
||||
|
) |
||||
|
|
||||
|
opt.add_option( '--shared-v8-includes' |
||||
|
, action='store' |
||||
|
, default=False |
||||
|
, help='Directory containing V8 header files' |
||||
|
, dest='shared_v8_includes' |
||||
|
) |
||||
|
|
||||
|
opt.add_option( '--shared-v8-libpath' |
||||
|
, action='store' |
||||
|
, default=False |
||||
|
, help='A directory to search for the shared V8 DLL' |
||||
|
, dest='shared_v8_libpath' |
||||
|
) |
||||
|
|
||||
|
opt.add_option( '--shared-v8-libname' |
||||
|
, action='store' |
||||
|
, default=False |
||||
|
, help="Alternative lib name to link to (default: 'v8')" |
||||
|
, dest='shared_v8_libname' |
||||
|
) |
||||
|
|
||||
|
|
||||
|
opt.add_option('--shared-cares' |
||||
|
, action='store_true' |
||||
|
, default=False |
||||
|
, help='Link to a shared C-Ares DLL instead of static linking' |
||||
|
, dest='shared_cares' |
||||
|
) |
||||
|
|
||||
|
opt.add_option( '--shared-cares-includes' |
||||
|
, action='store' |
||||
|
, default=False |
||||
|
, help='Directory containing C-Ares header files' |
||||
|
, dest='shared_cares_includes' |
||||
|
) |
||||
|
|
||||
|
opt.add_option( '--shared-cares-libpath' |
||||
|
, action='store' |
||||
|
, default=False |
||||
|
, help='A directory to search for the shared C-Ares DLL' |
||||
|
, dest='shared_cares_libpath' |
||||
|
) |
||||
|
|
||||
|
|
||||
|
opt.add_option('--shared-libev' |
||||
|
, action='store_true' |
||||
|
, default=False |
||||
|
, help='Link to a shared libev DLL instead of static linking' |
||||
|
, dest='shared_libev' |
||||
|
) |
||||
|
|
||||
|
opt.add_option( '--shared-libev-includes' |
||||
|
, action='store' |
||||
|
, default=False |
||||
|
, help='Directory containing libev header files' |
||||
|
, dest='shared_libev_includes' |
||||
|
) |
||||
|
|
||||
|
opt.add_option( '--shared-libev-libpath' |
||||
|
, action='store' |
||||
|
, default=False |
||||
|
, help='A directory to search for the shared libev DLL' |
||||
|
, dest='shared_libev_libpath' |
||||
|
) |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
def configure(conf): |
||||
|
conf.check_tool('compiler_cxx') |
||||
|
if not conf.env.CXX: conf.fatal('c++ compiler not found') |
||||
|
conf.check_tool('compiler_cc') |
||||
|
if not conf.env.CC: conf.fatal('c compiler not found') |
||||
|
|
||||
|
o = Options.options |
||||
|
|
||||
|
conf.env["USE_DEBUG"] = o.debug |
||||
|
conf.env["SNAPSHOT_V8"] = not o.without_snapshot |
||||
|
|
||||
|
conf.env["USE_SHARED_V8"] = o.shared_v8 or o.shared_v8_includes or o.shared_v8_libpath or o.shared_v8_libname |
||||
|
conf.env["USE_SHARED_CARES"] = o.shared_cares or o.shared_cares_includes or o.shared_cares_libpath |
||||
|
conf.env["USE_SHARED_LIBEV"] = o.shared_libev or o.shared_libev_includes or o.shared_libev_libpath |
||||
|
|
||||
|
conf.check(lib='dl', uselib_store='DL') |
||||
|
if not sys.platform.startswith("sunos") and not sys.platform.startswith("cygwin"): |
||||
|
conf.env.append_value("CCFLAGS", "-rdynamic") |
||||
|
conf.env.append_value("LINKFLAGS_DL", "-rdynamic") |
||||
|
|
||||
|
if sys.platform.startswith("freebsd"): |
||||
|
conf.check(lib='kvm', uselib_store='KVM') |
||||
|
|
||||
|
#if Options.options.debug: |
||||
|
# conf.check(lib='profiler', uselib_store='PROFILER') |
||||
|
|
||||
|
if Options.options.efence: |
||||
|
conf.check(lib='efence', libpath=['/usr/lib', '/usr/local/lib'], uselib_store='EFENCE') |
||||
|
|
||||
|
if sys.platform.startswith("freebsd"): |
||||
|
if not conf.check(lib="execinfo", |
||||
|
includes=['/usr/include', '/usr/local/include'], |
||||
|
libpath=['/usr/lib', '/usr/local/lib'], |
||||
|
uselib_store="EXECINFO"): |
||||
|
conf.fatal("Install the libexecinfo port from /usr/ports/devel/libexecinfo.") |
||||
|
|
||||
|
if not Options.options.without_ssl: |
||||
|
if conf.check_cfg(package='openssl', |
||||
|
args='--cflags --libs', |
||||
|
uselib_store='OPENSSL'): |
||||
|
Options.options.use_openssl = conf.env["USE_OPENSSL"] = True |
||||
|
conf.env.append_value("CPPFLAGS", "-DHAVE_OPENSSL=1") |
||||
|
else: |
||||
|
libssl = conf.check_cc(lib='ssl', |
||||
|
header_name='openssl/ssl.h', |
||||
|
function_name='SSL_library_init', |
||||
|
libpath=['/usr/lib', '/usr/local/lib', '/opt/local/lib', '/usr/sfw/lib'], |
||||
|
uselib_store='OPENSSL') |
||||
|
libcrypto = conf.check_cc(lib='crypto', |
||||
|
header_name='openssl/crypto.h', |
||||
|
uselib_store='OPENSSL') |
||||
|
if libcrypto and libssl: |
||||
|
conf.env["USE_OPENSSL"] = Options.options.use_openssl = True |
||||
|
conf.env.append_value("CPPFLAGS", "-DHAVE_OPENSSL=1") |
||||
|
else: |
||||
|
conf.fatal("Could not autodetect OpenSSL support. " + |
||||
|
"Make sure OpenSSL development packages are installed. " + |
||||
|
"Use configure --without-ssl to disable this message.") |
||||
|
else: |
||||
|
Options.options.use_openssl = conf.env["USE_OPENSSL"] = False |
||||
|
|
||||
|
conf.check(lib='rt', uselib_store='RT') |
||||
|
|
||||
|
if sys.platform.startswith("sunos"): |
||||
|
if not conf.check(lib='socket', uselib_store="SOCKET"): |
||||
|
conf.fatal("Cannot find socket library") |
||||
|
if not conf.check(lib='nsl', uselib_store="NSL"): |
||||
|
conf.fatal("Cannot find nsl library") |
||||
|
|
||||
|
conf.sub_config('deps/libeio') |
||||
|
|
||||
|
if conf.env['USE_SHARED_V8']: |
||||
|
v8_includes = []; |
||||
|
if o.shared_v8_includes: v8_includes.append(o.shared_v8_includes); |
||||
|
|
||||
|
v8_libpath = []; |
||||
|
if o.shared_v8_libpath: v8_libpath.append(o.shared_v8_libpath); |
||||
|
|
||||
|
if not o.shared_v8_libname: o.shared_v8_libname = 'v8' |
||||
|
|
||||
|
if not conf.check_cxx(lib=o.shared_v8_libname, header_name='v8.h', |
||||
|
uselib_store='V8', |
||||
|
includes=v8_includes, |
||||
|
libpath=v8_libpath): |
||||
|
conf.fatal("Cannot find v8") |
||||
|
|
||||
|
if o.debug: |
||||
|
if not conf.check_cxx(lib=o.shared_v8_libname + '_g', header_name='v8.h', |
||||
|
uselib_store='V8_G', |
||||
|
includes=v8_includes, |
||||
|
libpath=v8_libpath): |
||||
|
conf.fatal("Cannot find v8_g") |
||||
|
|
||||
|
if conf.env['USE_SHARED_CARES']: |
||||
|
cares_includes = []; |
||||
|
if o.shared_cares_includes: cares_includes.append(o.shared_cares_includes); |
||||
|
cares_libpath = []; |
||||
|
if o.shared_cares_libpath: cares_libpath.append(o.shared_cares_libpath); |
||||
|
if not conf.check_cxx(lib='cares', |
||||
|
header_name='ares.h', |
||||
|
uselib_store='CARES', |
||||
|
includes=cares_includes, |
||||
|
libpath=cares_libpath): |
||||
|
conf.fatal("Cannot find c-ares") |
||||
|
else: |
||||
|
conf.sub_config('deps/c-ares') |
||||
|
|
||||
|
|
||||
|
if conf.env['USE_SHARED_LIBEV']: |
||||
|
libev_includes = []; |
||||
|
if o.shared_libev_includes: libev_includes.append(o.shared_libev_includes); |
||||
|
libev_libpath = []; |
||||
|
if o.shared_libev_libpath: libev_libpath.append(o.shared_libev_libpath); |
||||
|
if not conf.check_cxx(lib='ev', header_name='ev.h', |
||||
|
uselib_store='EV', |
||||
|
includes=libev_includes, |
||||
|
libpath=libev_libpath): |
||||
|
conf.fatal("Cannot find libev") |
||||
|
else: |
||||
|
conf.sub_config('deps/libev') |
||||
|
|
||||
|
|
||||
|
|
||||
|
conf.define("HAVE_CONFIG_H", 1) |
||||
|
|
||||
|
if sys.platform.startswith("sunos"): |
||||
|
conf.env.append_value ('CCFLAGS', '-threads') |
||||
|
conf.env.append_value ('CXXFLAGS', '-threads') |
||||
|
#conf.env.append_value ('LINKFLAGS', ' -threads') |
||||
|
elif not sys.platform.startswith("cygwin"): |
||||
|
threadflags='-pthread' |
||||
|
conf.env.append_value ('CCFLAGS', threadflags) |
||||
|
conf.env.append_value ('CXXFLAGS', threadflags) |
||||
|
conf.env.append_value ('LINKFLAGS', threadflags) |
||||
|
if sys.platform.startswith("darwin"): |
||||
|
# used by platform_darwin_*.cc |
||||
|
conf.env.append_value('LINKFLAGS', ['-framework','Carbon']) |
||||
|
|
||||
|
# Needed for getaddrinfo in libeio |
||||
|
conf.env.append_value("CPPFLAGS", "-DX_STACKSIZE=%d" % (1024*64)) |
||||
|
# LFS |
||||
|
conf.env.append_value('CPPFLAGS', '-D_LARGEFILE_SOURCE') |
||||
|
conf.env.append_value('CPPFLAGS', '-D_FILE_OFFSET_BITS=64') |
||||
|
conf.env.append_value('CPPFLAGS', '-DEV_MULTIPLICITY=0') |
||||
|
|
||||
|
## needed for node_file.cc fdatasync |
||||
|
## Strangely on OSX 10.6 the g++ doesn't see fdatasync but gcc does? |
||||
|
code = """ |
||||
|
#include <unistd.h> |
||||
|
int main(void) |
||||
|
{ |
||||
|
int fd = 0; |
||||
|
fdatasync (fd); |
||||
|
return 0; |
||||
|
} |
||||
|
""" |
||||
|
if conf.check_cxx(msg="Checking for fdatasync(2) with c++", fragment=code): |
||||
|
conf.env.append_value('CPPFLAGS', '-DHAVE_FDATASYNC=1') |
||||
|
else: |
||||
|
conf.env.append_value('CPPFLAGS', '-DHAVE_FDATASYNC=0') |
||||
|
|
||||
|
# platform |
||||
|
conf.env.append_value('CPPFLAGS', '-DPLATFORM="' + conf.env['DEST_OS'] + '"') |
||||
|
|
||||
|
# Split off debug variant before adding variant specific defines |
||||
|
debug_env = conf.env.copy() |
||||
|
conf.set_env_name('debug', debug_env) |
||||
|
|
||||
|
# Configure debug variant |
||||
|
conf.setenv('debug') |
||||
|
debug_env.set_variant('debug') |
||||
|
debug_env.append_value('CPPFLAGS', '-DDEBUG') |
||||
|
debug_compile_flags = ['-g', '-O0', '-Wall', '-Wextra'] |
||||
|
debug_env.append_value('CCFLAGS', debug_compile_flags) |
||||
|
debug_env.append_value('CXXFLAGS', debug_compile_flags) |
||||
|
conf.write_config_header("config.h") |
||||
|
|
||||
|
# Configure default variant |
||||
|
conf.setenv('default') |
||||
|
conf.env.append_value('CPPFLAGS', '-DNDEBUG') |
||||
|
default_compile_flags = ['-g', '-O3'] |
||||
|
conf.env.append_value('CCFLAGS', default_compile_flags) |
||||
|
conf.env.append_value('CXXFLAGS', default_compile_flags) |
||||
|
conf.write_config_header("config.h") |
||||
|
|
||||
|
|
||||
|
def v8_cmd(bld, variant): |
||||
|
scons = join(cwd, 'tools/scons/scons.py') |
||||
|
deps_src = join(bld.path.abspath(),"deps") |
||||
|
v8dir_src = join(deps_src,"v8") |
||||
|
|
||||
|
# NOTE: We want to compile V8 to export its symbols. I.E. Do not want |
||||
|
# -fvisibility=hidden. When using dlopen() it seems that the loaded DSO |
||||
|
# cannot see symbols in the executable which are hidden, even if the |
||||
|
# executable is statically linked together... |
||||
|
|
||||
|
# XXX Change this when v8 defaults x86_64 to native builds |
||||
|
arch = "" |
||||
|
if bld.env['DEST_CPU'] == 'x86': |
||||
|
arch = "" |
||||
|
elif bld.env['DEST_CPU'] == 'x86_64': |
||||
|
arch = "arch=x64" |
||||
|
elif bld.env['DEST_CPU'] == 'arm': |
||||
|
arch = "arch=arm" |
||||
|
else: |
||||
|
raise Exception("supported architectures are 'x86', 'x86_64', and 'arm', but NOT '" + bld.env['DEST_CPU'] + "'.") |
||||
|
|
||||
|
if variant == "default": |
||||
|
mode = "release" |
||||
|
else: |
||||
|
mode = "debug" |
||||
|
|
||||
|
if bld.env["SNAPSHOT_V8"]: |
||||
|
snapshot = "snapshot=on" |
||||
|
else: |
||||
|
snapshot = "" |
||||
|
|
||||
|
cmd_R = 'python "%s" -j %d -C "%s" -Y "%s" visibility=default mode=%s %s library=static %s' |
||||
|
|
||||
|
cmd = cmd_R % ( scons |
||||
|
, Options.options.jobs |
||||
|
, bld.srcnode.abspath(bld.env_of_name(variant)) |
||||
|
, v8dir_src |
||||
|
, mode |
||||
|
, arch |
||||
|
, snapshot |
||||
|
) |
||||
|
|
||||
|
return ("echo '%s' && " % cmd) + cmd |
||||
|
|
||||
|
|
||||
|
def build_v8(bld): |
||||
|
v8 = bld.new_task_gen( |
||||
|
source = 'deps/v8/SConstruct ' |
||||
|
+ bld.path.ant_glob('v8/include/*') |
||||
|
+ bld.path.ant_glob('v8/src/*'), |
||||
|
target = bld.env["staticlib_PATTERN"] % "v8", |
||||
|
rule = v8_cmd(bld, "default"), |
||||
|
before = "cxx", |
||||
|
install_path = None) |
||||
|
v8.uselib = "EXECINFO" |
||||
|
bld.env["CPPPATH_V8"] = "deps/v8/include" |
||||
|
t = join(bld.srcnode.abspath(bld.env_of_name("default")), v8.target) |
||||
|
bld.env_of_name('default').append_value("LINKFLAGS_V8", t) |
||||
|
|
||||
|
|
||||
|
### v8 debug |
||||
|
if bld.env["USE_DEBUG"]: |
||||
|
v8_debug = v8.clone("debug") |
||||
|
v8_debug.rule = v8_cmd(bld, "debug") |
||||
|
v8_debug.target = bld.env["staticlib_PATTERN"] % "v8_g" |
||||
|
v8_debug.uselib = "EXECINFO" |
||||
|
bld.env["CPPPATH_V8_G"] = "deps/v8/include" |
||||
|
t = join(bld.srcnode.abspath(bld.env_of_name("debug")), v8_debug.target) |
||||
|
bld.env_of_name('debug').append_value("LINKFLAGS_V8_G", t) |
||||
|
|
||||
|
bld.install_files('${PREFIX}/include/node/', 'deps/v8/include/*.h') |
||||
|
|
||||
|
|
||||
|
def build(bld): |
||||
|
## This snippet is to show full commands as WAF executes |
||||
|
import Build |
||||
|
old = Build.BuildContext.exec_command |
||||
|
def exec_command(self, cmd, **kw): |
||||
|
if isinstance(cmd, list): print(" ".join(cmd)) |
||||
|
return old(self, cmd, **kw) |
||||
|
Build.BuildContext.exec_command = exec_command |
||||
|
|
||||
|
Options.options.jobs=jobs |
||||
|
|
||||
|
print "DEST_OS: " + bld.env['DEST_OS'] |
||||
|
print "DEST_CPU: " + bld.env['DEST_CPU'] |
||||
|
print "Parallel Jobs: " + str(Options.options.jobs) |
||||
|
|
||||
|
bld.add_subdirs('deps/libeio') |
||||
|
|
||||
|
if not bld.env['USE_SHARED_V8']: build_v8(bld) |
||||
|
if not bld.env['USE_SHARED_LIBEV']: bld.add_subdirs('deps/libev') |
||||
|
if not bld.env['USE_SHARED_CARES']: bld.add_subdirs('deps/c-ares') |
||||
|
|
||||
|
|
||||
|
### http_parser |
||||
|
http_parser = bld.new_task_gen("cc") |
||||
|
http_parser.source = "deps/http_parser/http_parser.c" |
||||
|
http_parser.includes = "deps/http_parser/" |
||||
|
http_parser.name = "http_parser" |
||||
|
http_parser.target = "http_parser" |
||||
|
http_parser.install_path = None |
||||
|
if bld.env["USE_DEBUG"]: |
||||
|
http_parser.clone("debug") |
||||
|
|
||||
|
### src/native.cc |
||||
|
def make_macros(loc, content): |
||||
|
f = open(loc, 'w') |
||||
|
f.write(content) |
||||
|
f.close |
||||
|
|
||||
|
macros_loc_debug = join( |
||||
|
bld.srcnode.abspath(bld.env_of_name("debug")), |
||||
|
"macros.py" |
||||
|
) |
||||
|
|
||||
|
macros_loc_default = join( |
||||
|
bld.srcnode.abspath(bld.env_of_name("default")), |
||||
|
"macros.py" |
||||
|
) |
||||
|
|
||||
|
make_macros(macros_loc_debug, "") # leave debug(x) as is in debug build |
||||
|
# replace debug(x) with nothing in release build |
||||
|
make_macros(macros_loc_default, "macro debug(x) = ;\n") |
||||
|
|
||||
|
def javascript_in_c(task): |
||||
|
env = task.env |
||||
|
source = map(lambda x: x.srcpath(env), task.inputs) |
||||
|
targets = map(lambda x: x.srcpath(env), task.outputs) |
||||
|
source.append(macros_loc_default) |
||||
|
js2c.JS2C(source, targets) |
||||
|
|
||||
|
def javascript_in_c_debug(task): |
||||
|
env = task.env |
||||
|
source = map(lambda x: x.srcpath(env), task.inputs) |
||||
|
targets = map(lambda x: x.srcpath(env), task.outputs) |
||||
|
source.append(macros_loc_debug) |
||||
|
js2c.JS2C(source, targets) |
||||
|
|
||||
|
native_cc = bld.new_task_gen( |
||||
|
source='src/node.js ' + bld.path.ant_glob('lib/*.js'), |
||||
|
target="src/node_natives.h", |
||||
|
before="cxx", |
||||
|
install_path=None |
||||
|
) |
||||
|
|
||||
|
# Add the rule /after/ cloning the debug |
||||
|
# This is a work around for an error had in python 2.4.3 (I'll paste the |
||||
|
# error that was had into the git commit meessage. git-blame to find out |
||||
|
# where.) |
||||
|
if bld.env["USE_DEBUG"]: |
||||
|
native_cc_debug = native_cc.clone("debug") |
||||
|
native_cc_debug.rule = javascript_in_c_debug |
||||
|
|
||||
|
native_cc.rule = javascript_in_c |
||||
|
|
||||
|
### node lib |
||||
|
node = bld.new_task_gen("cxx", "program") |
||||
|
node.name = "node" |
||||
|
node.target = "node" |
||||
|
node.uselib = 'RT EV OPENSSL CARES EXECINFO DL KVM SOCKET NSL' |
||||
|
node.add_objects = 'eio http_parser' |
||||
|
node.install_path = '${PREFIX}/lib' |
||||
|
node.install_path = '${PREFIX}/bin' |
||||
|
node.chmod = 0755 |
||||
|
node.source = """ |
||||
|
src/node_main.cc |
||||
|
src/node.cc |
||||
|
src/node_buffer.cc |
||||
|
src/node_javascript.cc |
||||
|
src/node_extensions.cc |
||||
|
src/node_http_parser.cc |
||||
|
src/node_net.cc |
||||
|
src/node_io_watcher.cc |
||||
|
src/node_child_process.cc |
||||
|
src/node_constants.cc |
||||
|
src/node_cares.cc |
||||
|
src/node_events.cc |
||||
|
src/node_file.cc |
||||
|
src/node_signal_watcher.cc |
||||
|
src/node_stat_watcher.cc |
||||
|
src/node_stdio.cc |
||||
|
src/node_timer.cc |
||||
|
src/node_script.cc |
||||
|
""" |
||||
|
|
||||
|
platform_file = "src/platform_%s.cc" % bld.env['DEST_OS'] |
||||
|
if os.path.exists(join(cwd, platform_file)): |
||||
|
node.source += platform_file |
||||
|
else: |
||||
|
node.source += "src/platform_none.cc " |
||||
|
|
||||
|
|
||||
|
if bld.env["USE_OPENSSL"]: node.source += " src/node_crypto.cc " |
||||
|
|
||||
|
node.includes = """ |
||||
|
src/ |
||||
|
deps/libeio |
||||
|
deps/http_parser |
||||
|
""" |
||||
|
|
||||
|
if not bld.env["USE_SHARED_V8"]: node.includes += ' deps/v8/include ' |
||||
|
|
||||
|
if not bld.env["USE_SHARED_LIBEV"]: |
||||
|
node.add_objects += ' ev ' |
||||
|
node.includes += ' deps/libev ' |
||||
|
|
||||
|
if not bld.env["USE_SHARED_CARES"]: |
||||
|
node.add_objects += ' cares ' |
||||
|
node.includes += ' deps/c-ares deps/c-ares/' + bld.env['DEST_OS'] + '-' + bld.env['DEST_CPU'] |
||||
|
|
||||
|
if sys.platform.startswith('cygwin'): |
||||
|
bld.env.append_value('LINKFLAGS', '-Wl,--export-all-symbols') |
||||
|
bld.env.append_value('LINKFLAGS', '-Wl,--out-implib,default/libnode.dll.a') |
||||
|
bld.env.append_value('LINKFLAGS', '-Wl,--output-def,default/libnode.def') |
||||
|
bld.install_files('${PREFIX}/lib', "build/default/libnode.*") |
||||
|
|
||||
|
def subflags(program): |
||||
|
x = { 'CCFLAGS' : " ".join(program.env["CCFLAGS"]).replace('"', '\\"') |
||||
|
, 'CPPFLAGS' : " ".join(program.env["CPPFLAGS"]).replace('"', '\\"') |
||||
|
, 'LIBFLAGS' : " ".join(program.env["LIBFLAGS"]).replace('"', '\\"') |
||||
|
, 'PREFIX' : program.env["PREFIX"] |
||||
|
, 'VERSION' : '0.3.1-pre' # FIXME should not be hard-coded, see NODE_VERSION_STRING in src/node_version.h |
||||
|
} |
||||
|
return x |
||||
|
|
||||
|
# process file.pc.in -> file.pc |
||||
|
|
||||
|
node_conf = bld.new_task_gen('subst', before="cxx") |
||||
|
node_conf.source = 'src/node_config.h.in' |
||||
|
node_conf.target = 'src/node_config.h' |
||||
|
node_conf.dict = subflags(node) |
||||
|
node_conf.install_path = '${PREFIX}/include/node' |
||||
|
|
||||
|
if bld.env["USE_DEBUG"]: |
||||
|
node_g = node.clone("debug") |
||||
|
node_g.target = "node_g" |
||||
|
node_g.uselib += ' V8_G' |
||||
|
|
||||
|
node_conf_g = node_conf.clone("debug") |
||||
|
node_conf_g.dict = subflags(node_g) |
||||
|
node_conf_g.install_path = None |
||||
|
|
||||
|
# After creating the debug clone, append the V8 dep |
||||
|
node.uselib += ' V8' |
||||
|
|
||||
|
bld.install_files('${PREFIX}/include/node/', """ |
||||
|
config.h |
||||
|
src/node.h |
||||
|
src/node_object_wrap.h |
||||
|
src/node_buffer.h |
||||
|
src/node_events.h |
||||
|
src/node_version.h |
||||
|
""") |
||||
|
|
||||
|
# Only install the man page if it exists. |
||||
|
# Do 'make doc install' to build and install it. |
||||
|
if os.path.exists('doc/node.1'): |
||||
|
bld.install_files('${PREFIX}/share/man/man1/', 'doc/node.1') |
||||
|
|
||||
|
bld.install_files('${PREFIX}/bin/', 'bin/*', chmod=0755) |
||||
|
bld.install_files('${PREFIX}/lib/node/wafadmin', 'tools/wafadmin/*.py') |
||||
|
bld.install_files('${PREFIX}/lib/node/wafadmin/Tools', 'tools/wafadmin/Tools/*.py') |
||||
|
|
||||
|
# create a pkg-config(1) file |
||||
|
node_conf = bld.new_task_gen('subst', before="cxx") |
||||
|
node_conf.source = 'tools/nodejs.pc.in' |
||||
|
node_conf.target = 'tools/nodejs.pc' |
||||
|
node_conf.dict = subflags(node) |
||||
|
|
||||
|
bld.install_files('${PREFIX}/lib/pkgconfig', 'tools/nodejs.pc') |
||||
|
|
||||
|
def shutdown(): |
||||
|
Options.options.debug |
||||
|
# HACK to get binding.node out of build directory. |
||||
|
# better way to do this? |
||||
|
if Options.commands['configure']: |
||||
|
if not Options.options.use_openssl: |
||||
|
print "WARNING WARNING WARNING" |
||||
|
print "OpenSSL not found. Will compile Node without crypto support!" |
||||
|
elif not Options.commands['clean']: |
||||
|
if os.path.exists('build/default/node') and not os.path.exists('node'): |
||||
|
os.symlink('build/default/node', 'node') |
||||
|
if os.path.exists('build/debug/node_g') and not os.path.exists('node_g'): |
||||
|
os.symlink('build/debug/node_g', 'node_g') |
||||
|
else: |
||||
|
if os.path.exists('node'): os.unlink('node') |
||||
|
if os.path.exists('node_g'): os.unlink('node_g') |
Loading…
Reference in new issue