From 215f852bc23ea2aaf892fb25786f9a0380e9bb48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?agentzh=20=28=E7=AB=A0=E4=BA=A6=E6=98=A5=29?= Date: Mon, 7 Mar 2011 02:19:54 +0800 Subject: [PATCH] added a test for --with-luajit. --- Makefile | 2 +- t/Config.pm | 8 +++++ t/sanity.t | 52 +++++++++++++++++++++++---- util/configure | 97 ++++++++++++++++++++++++++++++++++++++++++-------- 4 files changed, 137 insertions(+), 22 deletions(-) diff --git a/Makefile b/Makefile index a47cd39..74e2230 100644 --- a/Makefile +++ b/Makefile @@ -7,5 +7,5 @@ test: all prove -r t try: all - cd ngx_openresty-`./util/ver` && ./configure + cd ngx_openresty-`./util/ver` && ./configure --with-luajit diff --git a/t/Config.pm b/t/Config.pm index 245480a..8c67f5f 100644 --- a/t/Config.pm +++ b/t/Config.pm @@ -12,12 +12,16 @@ sub run_test ($); sub shell (@); sub cd ($); +our $BuildRoot; + sub run_tests { my $ver = `bash util/ver`; chomp $ver; cd "ngx_openresty-$ver"; + $BuildRoot = File::Spec->rel2abs("./build"); + for my $block (blocks()) { run_test($block); } @@ -42,11 +46,15 @@ sub run_test ($) { my $expected_err = $block->err; if (!defined $expected_err) { $expected_err = ''; + } else { + $expected_err =~ s/\$OPENRESTY_BUILD_DIR\b/$BuildRoot/gs; } my $expected_out = $block->out; if (!defined $expected_out) { $expected_out = ''; + } else { + $expected_out =~ s/\$OPENRESTY_BUILD_DIR\b/$BuildRoot/gs; } is($stdout, $expected_out, "$name - stdout ok"); diff --git a/t/sanity.t b/t/sanity.t index 758819c..4022ad8 100644 --- a/t/sanity.t +++ b/t/sanity.t @@ -12,8 +12,6 @@ __DATA__ === TEST 1: --help --- cmd: ./configure --help ---- exit: 0 ---- err --- out --help this message @@ -172,14 +170,17 @@ Options directly inherited from nginx === TEST 2: default --- cmd: ./configure --dry-run ---- exit: 0 ---- err --- out cp -r bundle/ build/ cd build +cd lua-5.1.4 +make linux +make install INSTALL_TOP=$OPENRESTY_BUILD_DIR/lua-root/usr/local/openresty/lua +export LUA_LIB='$OPENRESTY_BUILD_DIR/lua-root/usr/local/openresty/lua/lib' +export LUA_INC='$OPENRESTY_BUILD_DIR/lua-root/usr/local/openresty/lua/include' +cd .. cd nginx-0.8.54 ./configure --prefix=/usr/local/openresty/nginx \ - --with-ld-opt='-Wl,-rpath=/usr/local/openresty/lib' \ --with-cc-opt='-O2' \ --add-module=../echo-nginx-module-0.36rc1 \ --add-module=../xss-nginx-module-0.03rc2 \ @@ -205,9 +206,14 @@ cd nginx-0.8.54 --- out cp -r bundle/ build/ cd build +cd lua-5.1.4 +make linux +make install INSTALL_TOP=$OPENRESTY_BUILD_DIR/lua-root/usr/local/openresty/lua +export LUA_LIB='$OPENRESTY_BUILD_DIR/lua-root/usr/local/openresty/lua/lib' +export LUA_INC='$OPENRESTY_BUILD_DIR/lua-root/usr/local/openresty/lua/include' +cd .. cd nginx-0.8.54 ./configure --prefix=/usr/local/openresty/nginx \ - --with-ld-opt='-Wl,-rpath=/usr/local/openresty/lib' \ --with-cc-opt='-O0' \ --with-debug \ --add-module=../echo-nginx-module-0.36rc1 \ @@ -236,3 +242,37 @@ cd nginx-0.8.54 --with-http_ssl_module conflicts with --without-http_ssl_module --- out + + +=== TEST 5: --with-luajit +--- cmd: ./configure --with-luajit --dry-run +--- out +cp -r bundle/ build/ +cd build +cd LuaJIT-2.0.0-beta6 +make PREFIX=/usr/local/openresty/luajit +make PREFIX=/usr/local/openresty/luajit DESTDIR=$OPENRESTY_BUILD_DIR/luajit-root install +export LUAJIT_LIB='$OPENRESTY_BUILD_DIR/luajit-root/usr/local/openresty/luajit/lib' +export LUAJIT_INC='$OPENRESTY_BUILD_DIR/luajit-root/usr/local/openresty/luajit/include/luajit-2.0' +cd .. +cd nginx-0.8.54 +./configure --prefix=/usr/local/openresty/nginx \ + --with-cc-opt='-O2' \ + --add-module=../echo-nginx-module-0.36rc1 \ + --add-module=../xss-nginx-module-0.03rc2 \ + --add-module=../ngx_devel_kit-0.2.14 \ + --add-module=../set-misc-nginx-module-0.21rc2 \ + --add-module=../form-input-nginx-module-0.07rc4 \ + --add-module=../encrypted-session-nginx-module-0.01 \ + --add-module=../drizzle-nginx-module-0.0.15rc9 \ + --add-module=../lua-nginx-module-0.1.6rc1 \ + --add-module=../headers-more-nginx-module-0.14 \ + --add-module=../srcache-nginx-module-0.12rc1 \ + --add-module=../array-var-nginx-module-0.02 \ + --add-module=../memc-nginx-module-0.12rc1 \ + --add-module=../upstream-keepalive-nginx-module-0.3 \ + --add-module=../auth-request-nginx-module-0.2 \ + --add-module=../rds-json-nginx-module-0.11rc2 \ + --with-ld-opt='-Wl,-rpath=/usr/local/openresty/luajit/lib' \ + --with-http_ssl_module + diff --git a/util/configure b/util/configure index 525259e..a3be87d 100755 --- a/util/configure +++ b/util/configure @@ -6,7 +6,8 @@ use warnings; use File::Spec; -sub shell (@); +sub shell ($@); +sub env ($$); sub cd ($); sub auto_complete ($); sub usage ($); @@ -64,6 +65,7 @@ my $with_resty_mods_regex; my $prefix = '/usr/local/openresty'; my %resty_opts; my $dry_run; +my @ngx_rpaths; my @ngx_opts; for my $opt (@ARGV) { @@ -112,21 +114,29 @@ for my $opt (@ARGV) { my $ngx_prefix = "$prefix/nginx"; my $cmd = "./configure --prefix=$ngx_prefix" - . " \\\n --with-ld-opt='-Wl,-rpath=$prefix/lib'" . build_resty_opts(\%resty_opts) + . (@ngx_rpaths ? " \\\n --with-ld-opt='-Wl,-rpath=" + . join(":", @ngx_rpaths) . "'" : "") . (@ngx_opts ? " \\\n " . join(" ", @ngx_opts) : ""); ; -if ($dry_run) { - print "$cmd\n"; - exit 0; +shell $cmd, $dry_run; + +sub env ($$) { + my ($name, $val) = @_; + print "export $name='$val'\n"; + $ENV{$name} = $val; } -shell $cmd; +sub shell ($@) { + my ($cmd, $dry_run) = @_; -sub shell (@) { - print "@_\n"; - system(@_) == 0 or die "failed to run command @_\n"; + print "$cmd\n"; + + unless ($dry_run) { + system($cmd) == 0 or + die "failed to run command @_\n"; + } } sub auto_complete ($) { @@ -160,8 +170,8 @@ sub build_resty_opts { } } - if ($opts->{luajit}) { - $opts->{no_lua} = 1; + if (! $opts->{luajit} && ! $opts->{no_http_lua}) { + $opts->{lua} = 1; } if (! $opts->{no_http_drizzle}) { @@ -173,13 +183,13 @@ sub build_resty_opts { } if (! $opts->{no_http_ssl} && ! $opts->{http_ssl}) { - $resty_opts{http_ssl} = 1; + $opts->{http_ssl} = 1; push @ngx_opts, '--with-http_ssl_module'; } my $opts_line = ''; - if ($resty_opts{debug}) { + if ($opts->{debug}) { $opts_line .= " \\\n --with-cc-opt='-O0' \\\n --with-debug"; } else { $opts_line .= " \\\n --with-cc-opt='-O2'"; @@ -197,6 +207,62 @@ sub build_resty_opts { cd 'build'; + # build 3rd-party C libraries if required + + if ($opts->{luajit}) { + my $luajit_src = auto_complete 'LuaJIT'; + my $luajit_prefix = "$prefix/luajit"; + my $luajit_root = File::Spec->rel2abs("luajit-root"); + + if (-d $luajit_root) { + shell "rm -rf $luajit_root"; + } + + mkdir $luajit_root or + die "create create directory luajit-root: $!\n"; + + cd $luajit_src; + + shell "make PREFIX=$luajit_prefix", $dry_run; + shell "make PREFIX=$luajit_prefix DESTDIR=$luajit_root install", $dry_run; + + env LUAJIT_LIB => "$luajit_root$luajit_prefix/lib"; + env LUAJIT_INC => "$luajit_root$luajit_prefix/include/luajit-2.0"; + + push @ngx_rpaths, "$luajit_prefix/lib"; + + cd '..'; + + } elsif ($opts->{lua}) { + my $lua_src = glob('lua-5.*'); + + if (!defined $lua_src) { + die "No lua5 found"; + } + + my $lua_prefix = "$prefix/lua"; + my $lua_root = File::Spec->rel2abs("lua-root"); + + if (-d $lua_root) { + shell "rm -rf $lua_root"; + } + + mkdir $lua_root or + die "create create directory lua-root: $!\n"; + + cd $lua_src; + + shell "make linux", $dry_run; + shell "make install INSTALL_TOP=$lua_root$lua_prefix", $dry_run; + + env LUA_LIB => "$lua_root$lua_prefix/lib"; + env LUA_INC => "$lua_root$lua_prefix/include"; + + cd '..'; + } + + # prepare nginx configure line + my $ngx_dir = auto_complete "nginx"; cd $ngx_dir; @@ -205,9 +271,10 @@ sub build_resty_opts { my ($name, $prefix, $attr) = @$mod; if ($attr && $attr eq 'disabled') { - next if not $resty_opts{"$name"}; + next if not $opts->{"$name"}; + } else { - next if $resty_opts{"no_$name"}; + next if $opts->{"no_$name"}; } my $dir = auto_complete "../$prefix";