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"` |
|||
autoconf --output configure.real |
|||
exec ./configure.real "$@" |
|||
# v8 doesn't like ccache |
|||
if [ ! -z "`echo $CC | grep ccache`" ]; then |
|||
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