mirror of
https://github.com/openresty/openresty.git
synced 2024-10-13 00:29:41 +00:00
Compare commits
28 Commits
Author | SHA1 | Date | |
---|---|---|---|
458b8f5456 | |||
95e12baff4 | |||
843cb73393 | |||
1276fbdf48 | |||
5aa4947cb1 | |||
dd2d1d04b8 | |||
b255299212 | |||
a50e578d0e | |||
23d0222ed3 | |||
6e5f3ce9b5 | |||
6431074de4 | |||
2654f60c1b | |||
da11207dea | |||
5c208328e2 | |||
5e2df4bb9a | |||
106f9751e5 | |||
77e510abdc | |||
88272c5503 | |||
4004360b4c | |||
177e1bfcdf | |||
0bf8bbe040 | |||
8ba0a37a42 | |||
557f52794c | |||
b7e7398fc9 | |||
68aac430ae | |||
d2c3802134 | |||
918e884175 | |||
cbce5daa05 |
2
README
2
README
@ -11,7 +11,7 @@ The bundled software components are copyrighted by the respective copyright hold
|
|||||||
|
|
||||||
The homepage for this project is http://openresty.org.
|
The homepage for this project is http://openresty.org.
|
||||||
|
|
||||||
For the users:
|
For users:
|
||||||
Visit http://openresty.org/#Download to download the latest bundle tarball, and
|
Visit http://openresty.org/#Download to download the latest bundle tarball, and
|
||||||
follow the installation instructions in the page http://openresty.org/#Installation.
|
follow the installation instructions in the page http://openresty.org/#Installation.
|
||||||
|
|
||||||
|
241
misc/unwind-generic.h
Normal file
241
misc/unwind-generic.h
Normal file
@ -0,0 +1,241 @@
|
|||||||
|
/* Exception handling and frame unwind runtime interface routines.
|
||||||
|
Copyright (C) 2001, 2003, 2004, 2006 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||||
|
License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GCC; see the file COPYING. If not, write to the Free
|
||||||
|
Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
|
02110-1301, USA. */
|
||||||
|
|
||||||
|
/* As a special exception, if you include this header file into source
|
||||||
|
files compiled by GCC, this header file does not by itself cause
|
||||||
|
the resulting executable to be covered by the GNU General Public
|
||||||
|
License. This exception does not however invalidate any other
|
||||||
|
reasons why the executable file might be covered by the GNU General
|
||||||
|
Public License. */
|
||||||
|
|
||||||
|
/* This is derived from the C++ ABI for IA-64. Where we diverge
|
||||||
|
for cross-architecture compatibility are noted with "@@@". */
|
||||||
|
|
||||||
|
#ifndef _UNWIND_H
|
||||||
|
#define _UNWIND_H
|
||||||
|
|
||||||
|
#ifndef HIDE_EXPORTS
|
||||||
|
#pragma GCC visibility push(default)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Level 1: Base ABI */
|
||||||
|
|
||||||
|
/* @@@ The IA-64 ABI uses uint64 throughout. Most places this is
|
||||||
|
inefficient for 32-bit and smaller machines. */
|
||||||
|
typedef unsigned _Unwind_Word __attribute__((__mode__(__word__)));
|
||||||
|
typedef signed _Unwind_Sword __attribute__((__mode__(__word__)));
|
||||||
|
#if defined(__ia64__) && defined(__hpux__)
|
||||||
|
typedef unsigned _Unwind_Ptr __attribute__((__mode__(__word__)));
|
||||||
|
#else
|
||||||
|
typedef unsigned _Unwind_Ptr __attribute__((__mode__(__pointer__)));
|
||||||
|
#endif
|
||||||
|
typedef unsigned _Unwind_Internal_Ptr __attribute__((__mode__(__pointer__)));
|
||||||
|
|
||||||
|
/* @@@ The IA-64 ABI uses a 64-bit word to identify the producer and
|
||||||
|
consumer of an exception. We'll go along with this for now even on
|
||||||
|
32-bit machines. We'll need to provide some other option for
|
||||||
|
16-bit machines and for machines with > 8 bits per byte. */
|
||||||
|
typedef unsigned _Unwind_Exception_Class __attribute__((__mode__(__DI__)));
|
||||||
|
|
||||||
|
/* The unwind interface uses reason codes in several contexts to
|
||||||
|
identify the reasons for failures or other actions. */
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
_URC_NO_REASON = 0,
|
||||||
|
_URC_FOREIGN_EXCEPTION_CAUGHT = 1,
|
||||||
|
_URC_FATAL_PHASE2_ERROR = 2,
|
||||||
|
_URC_FATAL_PHASE1_ERROR = 3,
|
||||||
|
_URC_NORMAL_STOP = 4,
|
||||||
|
_URC_END_OF_STACK = 5,
|
||||||
|
_URC_HANDLER_FOUND = 6,
|
||||||
|
_URC_INSTALL_CONTEXT = 7,
|
||||||
|
_URC_CONTINUE_UNWIND = 8
|
||||||
|
} _Unwind_Reason_Code;
|
||||||
|
|
||||||
|
|
||||||
|
/* The unwind interface uses a pointer to an exception header object
|
||||||
|
as its representation of an exception being thrown. In general, the
|
||||||
|
full representation of an exception object is language- and
|
||||||
|
implementation-specific, but it will be prefixed by a header
|
||||||
|
understood by the unwind interface. */
|
||||||
|
|
||||||
|
struct _Unwind_Exception;
|
||||||
|
|
||||||
|
typedef void (*_Unwind_Exception_Cleanup_Fn) (_Unwind_Reason_Code,
|
||||||
|
struct _Unwind_Exception *);
|
||||||
|
|
||||||
|
struct _Unwind_Exception
|
||||||
|
{
|
||||||
|
_Unwind_Exception_Class exception_class;
|
||||||
|
_Unwind_Exception_Cleanup_Fn exception_cleanup;
|
||||||
|
_Unwind_Word private_1;
|
||||||
|
_Unwind_Word private_2;
|
||||||
|
|
||||||
|
/* @@@ The IA-64 ABI says that this structure must be double-word aligned.
|
||||||
|
Taking that literally does not make much sense generically. Instead we
|
||||||
|
provide the maximum alignment required by any type for the machine. */
|
||||||
|
} __attribute__((__aligned__));
|
||||||
|
|
||||||
|
|
||||||
|
/* The ACTIONS argument to the personality routine is a bitwise OR of one
|
||||||
|
or more of the following constants. */
|
||||||
|
typedef int _Unwind_Action;
|
||||||
|
|
||||||
|
#define _UA_SEARCH_PHASE 1
|
||||||
|
#define _UA_CLEANUP_PHASE 2
|
||||||
|
#define _UA_HANDLER_FRAME 4
|
||||||
|
#define _UA_FORCE_UNWIND 8
|
||||||
|
#define _UA_END_OF_STACK 16
|
||||||
|
|
||||||
|
/* This is an opaque type used to refer to a system-specific data
|
||||||
|
structure used by the system unwinder. This context is created and
|
||||||
|
destroyed by the system, and passed to the personality routine
|
||||||
|
during unwinding. */
|
||||||
|
struct _Unwind_Context;
|
||||||
|
|
||||||
|
/* Raise an exception, passing along the given exception object. */
|
||||||
|
extern _Unwind_Reason_Code _Unwind_RaiseException (struct _Unwind_Exception *);
|
||||||
|
|
||||||
|
/* Raise an exception for forced unwinding. */
|
||||||
|
|
||||||
|
typedef _Unwind_Reason_Code (*_Unwind_Stop_Fn)
|
||||||
|
(int, _Unwind_Action, _Unwind_Exception_Class,
|
||||||
|
struct _Unwind_Exception *, struct _Unwind_Context *, void *);
|
||||||
|
|
||||||
|
extern _Unwind_Reason_Code _Unwind_ForcedUnwind (struct _Unwind_Exception *,
|
||||||
|
_Unwind_Stop_Fn,
|
||||||
|
void *);
|
||||||
|
|
||||||
|
/* Helper to invoke the exception_cleanup routine. */
|
||||||
|
extern void _Unwind_DeleteException (struct _Unwind_Exception *);
|
||||||
|
|
||||||
|
/* Resume propagation of an existing exception. This is used after
|
||||||
|
e.g. executing cleanup code, and not to implement rethrowing. */
|
||||||
|
extern void _Unwind_Resume (struct _Unwind_Exception *);
|
||||||
|
|
||||||
|
/* @@@ Resume propagation of an FORCE_UNWIND exception, or to rethrow
|
||||||
|
a normal exception that was handled. */
|
||||||
|
extern _Unwind_Reason_Code _Unwind_Resume_or_Rethrow (struct _Unwind_Exception *);
|
||||||
|
|
||||||
|
/* @@@ Use unwind data to perform a stack backtrace. The trace callback
|
||||||
|
is called for every stack frame in the call chain, but no cleanup
|
||||||
|
actions are performed. */
|
||||||
|
typedef _Unwind_Reason_Code (*_Unwind_Trace_Fn)
|
||||||
|
(struct _Unwind_Context *, void *);
|
||||||
|
|
||||||
|
extern _Unwind_Reason_Code _Unwind_Backtrace (_Unwind_Trace_Fn, void *);
|
||||||
|
|
||||||
|
/* These functions are used for communicating information about the unwind
|
||||||
|
context (i.e. the unwind descriptors and the user register state) between
|
||||||
|
the unwind library and the personality routine and landing pad. Only
|
||||||
|
selected registers maybe manipulated. */
|
||||||
|
|
||||||
|
extern _Unwind_Word _Unwind_GetGR (struct _Unwind_Context *, int);
|
||||||
|
extern void _Unwind_SetGR (struct _Unwind_Context *, int, _Unwind_Word);
|
||||||
|
|
||||||
|
extern _Unwind_Ptr _Unwind_GetIP (struct _Unwind_Context *);
|
||||||
|
extern _Unwind_Ptr _Unwind_GetIPInfo (struct _Unwind_Context *, int *);
|
||||||
|
extern void _Unwind_SetIP (struct _Unwind_Context *, _Unwind_Ptr);
|
||||||
|
|
||||||
|
/* @@@ Retrieve the CFA of the given context. */
|
||||||
|
extern _Unwind_Word _Unwind_GetCFA (struct _Unwind_Context *);
|
||||||
|
|
||||||
|
extern void *_Unwind_GetLanguageSpecificData (struct _Unwind_Context *);
|
||||||
|
|
||||||
|
extern _Unwind_Ptr _Unwind_GetRegionStart (struct _Unwind_Context *);
|
||||||
|
|
||||||
|
|
||||||
|
/* The personality routine is the function in the C++ (or other language)
|
||||||
|
runtime library which serves as an interface between the system unwind
|
||||||
|
library and language-specific exception handling semantics. It is
|
||||||
|
specific to the code fragment described by an unwind info block, and
|
||||||
|
it is always referenced via the pointer in the unwind info block, and
|
||||||
|
hence it has no ABI-specified name.
|
||||||
|
|
||||||
|
Note that this implies that two different C++ implementations can
|
||||||
|
use different names, and have different contents in the language
|
||||||
|
specific data area. Moreover, that the language specific data
|
||||||
|
area contains no version info because name of the function invoked
|
||||||
|
provides more effective versioning by detecting at link time the
|
||||||
|
lack of code to handle the different data format. */
|
||||||
|
|
||||||
|
typedef _Unwind_Reason_Code (*_Unwind_Personality_Fn)
|
||||||
|
(int, _Unwind_Action, _Unwind_Exception_Class,
|
||||||
|
struct _Unwind_Exception *, struct _Unwind_Context *);
|
||||||
|
|
||||||
|
/* @@@ The following alternate entry points are for setjmp/longjmp
|
||||||
|
based unwinding. */
|
||||||
|
|
||||||
|
struct SjLj_Function_Context;
|
||||||
|
extern void _Unwind_SjLj_Register (struct SjLj_Function_Context *);
|
||||||
|
extern void _Unwind_SjLj_Unregister (struct SjLj_Function_Context *);
|
||||||
|
|
||||||
|
extern _Unwind_Reason_Code _Unwind_SjLj_RaiseException
|
||||||
|
(struct _Unwind_Exception *);
|
||||||
|
extern _Unwind_Reason_Code _Unwind_SjLj_ForcedUnwind
|
||||||
|
(struct _Unwind_Exception *, _Unwind_Stop_Fn, void *);
|
||||||
|
extern void _Unwind_SjLj_Resume (struct _Unwind_Exception *);
|
||||||
|
extern _Unwind_Reason_Code _Unwind_SjLj_Resume_or_Rethrow (struct _Unwind_Exception *);
|
||||||
|
|
||||||
|
/* @@@ The following provide access to the base addresses for text
|
||||||
|
and data-relative addressing in the LDSA. In order to stay link
|
||||||
|
compatible with the standard ABI for IA-64, we inline these. */
|
||||||
|
|
||||||
|
#ifdef __ia64__
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
static inline _Unwind_Ptr
|
||||||
|
_Unwind_GetDataRelBase (struct _Unwind_Context *_C)
|
||||||
|
{
|
||||||
|
/* The GP is stored in R1. */
|
||||||
|
return _Unwind_GetGR (_C, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline _Unwind_Ptr
|
||||||
|
_Unwind_GetTextRelBase (struct _Unwind_Context *_C __attribute__ ((__unused__)))
|
||||||
|
{
|
||||||
|
abort ();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* @@@ Retrieve the Backing Store Pointer of the given context. */
|
||||||
|
extern _Unwind_Word _Unwind_GetBSP (struct _Unwind_Context *);
|
||||||
|
#else
|
||||||
|
extern _Unwind_Ptr _Unwind_GetDataRelBase (struct _Unwind_Context *);
|
||||||
|
extern _Unwind_Ptr _Unwind_GetTextRelBase (struct _Unwind_Context *);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* @@@ Given an address, return the entry point of the function that
|
||||||
|
contains it. */
|
||||||
|
extern void * _Unwind_FindEnclosingFunction (void *pc);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HIDE_EXPORTS
|
||||||
|
#pragma GCC visibility pop
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* unwind.h */
|
483
patches/nginx-1.0.4-no_pool.patch
Normal file
483
patches/nginx-1.0.4-no_pool.patch
Normal file
@ -0,0 +1,483 @@
|
|||||||
|
diff -ur nginx-1.0.4/src/core/nginx.h nginx-1.0.4-no-pool/src/core/nginx.h
|
||||||
|
--- nginx-1.0.4/src/core/nginx.h 2011-05-26 15:31:40.000000000 +0800
|
||||||
|
+++ nginx-1.0.4-no-pool/src/core/nginx.h 2011-06-30 17:00:43.540946999 +0800
|
||||||
|
@@ -10,7 +10,7 @@
|
||||||
|
|
||||||
|
#define nginx_version 1000004
|
||||||
|
#define NGINX_VERSION "1.0.4"
|
||||||
|
-#define NGINX_VER "ngx_openresty/" NGINX_VERSION ".unknown"
|
||||||
|
+#define NGINX_VER "ngx_openresty/" NGINX_VERSION ".unknown (no pool)"
|
||||||
|
|
||||||
|
#define NGINX_VAR "NGINX"
|
||||||
|
#define NGX_OLDPID_EXT ".oldbin"
|
||||||
|
diff -ur nginx-1.0.4/src/core/ngx_array.c nginx-1.0.4-no-pool/src/core/ngx_array.c
|
||||||
|
--- nginx-1.0.4/src/core/ngx_array.c 2008-06-17 23:00:30.000000000 +0800
|
||||||
|
+++ nginx-1.0.4-no-pool/src/core/ngx_array.c 2011-06-30 17:00:43.540946999 +0800
|
||||||
|
@@ -39,13 +39,7 @@
|
||||||
|
|
||||||
|
p = a->pool;
|
||||||
|
|
||||||
|
- if ((u_char *) a->elts + a->size * a->nalloc == p->d.last) {
|
||||||
|
- p->d.last -= a->size * a->nalloc;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- if ((u_char *) a + sizeof(ngx_array_t) == p->d.last) {
|
||||||
|
- p->d.last = (u_char *) a;
|
||||||
|
- }
|
||||||
|
+ ngx_pfree(p, a);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -64,29 +58,17 @@
|
||||||
|
|
||||||
|
p = a->pool;
|
||||||
|
|
||||||
|
- if ((u_char *) a->elts + size == p->d.last
|
||||||
|
- && p->d.last + a->size <= p->d.end)
|
||||||
|
- {
|
||||||
|
- /*
|
||||||
|
- * the array allocation is the last in the pool
|
||||||
|
- * and there is space for new allocation
|
||||||
|
- */
|
||||||
|
-
|
||||||
|
- p->d.last += a->size;
|
||||||
|
- a->nalloc++;
|
||||||
|
-
|
||||||
|
- } else {
|
||||||
|
- /* allocate a new array */
|
||||||
|
-
|
||||||
|
- new = ngx_palloc(p, 2 * size);
|
||||||
|
- if (new == NULL) {
|
||||||
|
- return NULL;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- ngx_memcpy(new, a->elts, size);
|
||||||
|
- a->elts = new;
|
||||||
|
- a->nalloc *= 2;
|
||||||
|
+ /* allocate a new array */
|
||||||
|
+
|
||||||
|
+ new = ngx_palloc(p, 2 * size);
|
||||||
|
+ if (new == NULL) {
|
||||||
|
+ return NULL;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ ngx_memcpy(new, a->elts, size);
|
||||||
|
+ a->elts = new;
|
||||||
|
+ a->nalloc *= 2;
|
||||||
|
+
|
||||||
|
}
|
||||||
|
|
||||||
|
elt = (u_char *) a->elts + a->size * a->nelts;
|
||||||
|
@@ -112,31 +94,16 @@
|
||||||
|
|
||||||
|
p = a->pool;
|
||||||
|
|
||||||
|
- if ((u_char *) a->elts + a->size * a->nalloc == p->d.last
|
||||||
|
- && p->d.last + size <= p->d.end)
|
||||||
|
- {
|
||||||
|
- /*
|
||||||
|
- * the array allocation is the last in the pool
|
||||||
|
- * and there is space for new allocation
|
||||||
|
- */
|
||||||
|
-
|
||||||
|
- p->d.last += size;
|
||||||
|
- a->nalloc += n;
|
||||||
|
-
|
||||||
|
- } else {
|
||||||
|
- /* allocate a new array */
|
||||||
|
-
|
||||||
|
- nalloc = 2 * ((n >= a->nalloc) ? n : a->nalloc);
|
||||||
|
-
|
||||||
|
- new = ngx_palloc(p, nalloc * a->size);
|
||||||
|
- if (new == NULL) {
|
||||||
|
- return NULL;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- ngx_memcpy(new, a->elts, a->nelts * a->size);
|
||||||
|
- a->elts = new;
|
||||||
|
- a->nalloc = nalloc;
|
||||||
|
+ nalloc = 2 * ((n >= a->nalloc) ? n : a->nalloc);
|
||||||
|
+
|
||||||
|
+ new = ngx_palloc(p, nalloc * a->size);
|
||||||
|
+ if (new == NULL) {
|
||||||
|
+ return NULL;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ ngx_memcpy(new, a->elts, a->nelts * a->size);
|
||||||
|
+ a->elts = new;
|
||||||
|
+ a->nalloc = nalloc;
|
||||||
|
}
|
||||||
|
|
||||||
|
elt = (u_char *) a->elts + a->size * a->nelts;
|
||||||
|
diff -ur nginx-1.0.4/src/core/ngx_palloc.c nginx-1.0.4-no-pool/src/core/ngx_palloc.c
|
||||||
|
--- nginx-1.0.4/src/core/ngx_palloc.c 2009-12-17 20:25:46.000000000 +0800
|
||||||
|
+++ nginx-1.0.4-no-pool/src/core/ngx_palloc.c 2011-06-30 17:06:36.060946999 +0800
|
||||||
|
@@ -8,24 +8,31 @@
|
||||||
|
#include <ngx_core.h>
|
||||||
|
|
||||||
|
|
||||||
|
-static void *ngx_palloc_block(ngx_pool_t *pool, size_t size);
|
||||||
|
static void *ngx_palloc_large(ngx_pool_t *pool, size_t size);
|
||||||
|
|
||||||
|
|
||||||
|
ngx_pool_t *
|
||||||
|
ngx_create_pool(size_t size, ngx_log_t *log)
|
||||||
|
{
|
||||||
|
- ngx_pool_t *p;
|
||||||
|
+ ngx_pool_t *p;
|
||||||
|
+ ngx_pool_data_t *d;
|
||||||
|
|
||||||
|
- p = ngx_memalign(NGX_POOL_ALIGNMENT, size, log);
|
||||||
|
+ size = sizeof(ngx_pool_t);
|
||||||
|
+ p = ngx_alloc(size, log);
|
||||||
|
if (p == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
- p->d.last = (u_char *) p + sizeof(ngx_pool_t);
|
||||||
|
- p->d.end = (u_char *) p + size;
|
||||||
|
- p->d.next = NULL;
|
||||||
|
- p->d.failed = 0;
|
||||||
|
+ d = ngx_alloc(sizeof(ngx_pool_data_t), log);
|
||||||
|
+
|
||||||
|
+ if (d == NULL) {
|
||||||
|
+ return NULL;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ d->next = d;
|
||||||
|
+ d->prev = d;
|
||||||
|
+ d->alloc = NULL;
|
||||||
|
+ p->d = d;
|
||||||
|
|
||||||
|
size = size - sizeof(ngx_pool_t);
|
||||||
|
p->max = (size < NGX_MAX_ALLOC_FROM_POOL) ? size : NGX_MAX_ALLOC_FROM_POOL;
|
||||||
|
@@ -43,7 +50,7 @@
|
||||||
|
void
|
||||||
|
ngx_destroy_pool(ngx_pool_t *pool)
|
||||||
|
{
|
||||||
|
- ngx_pool_t *p, *n;
|
||||||
|
+ ngx_pool_data_t *d, *n;
|
||||||
|
ngx_pool_large_t *l;
|
||||||
|
ngx_pool_cleanup_t *c;
|
||||||
|
|
||||||
|
@@ -55,7 +62,7 @@
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- for (l = pool->large; l; l = l->next) {
|
||||||
|
+ for (l = pool->large; l ; l = l->next) {
|
||||||
|
|
||||||
|
ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", l->alloc);
|
||||||
|
|
||||||
|
@@ -71,34 +78,45 @@
|
||||||
|
* so we can not use this log while the free()ing the pool
|
||||||
|
*/
|
||||||
|
|
||||||
|
- for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
|
||||||
|
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
|
||||||
|
ngx_log_debug2(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
|
||||||
|
- "free: %p, unused: %uz", p, p->d.end - p->d.last);
|
||||||
|
+ "free: %p", d);
|
||||||
|
|
||||||
|
- if (n == NULL) {
|
||||||
|
+ if (n == pool->d) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
+ if (pool->d->next == pool->d) {
|
||||||
|
+ ngx_free(pool->d);
|
||||||
|
+ } else {
|
||||||
|
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
|
||||||
|
+ if (d->alloc) {
|
||||||
|
+ ngx_free(d->alloc);
|
||||||
|
+ }
|
||||||
|
+ ngx_free(d);
|
||||||
|
|
||||||
|
- for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
|
||||||
|
- ngx_free(p);
|
||||||
|
-
|
||||||
|
- if (n == NULL) {
|
||||||
|
- break;
|
||||||
|
+ if (n == pool->d) {
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ ngx_free(pool);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ngx_reset_pool(ngx_pool_t *pool)
|
||||||
|
{
|
||||||
|
- ngx_pool_t *p;
|
||||||
|
- ngx_pool_large_t *l;
|
||||||
|
+ ngx_pool_data_t *p, *tmp;
|
||||||
|
+ ngx_pool_large_t *l;
|
||||||
|
+
|
||||||
|
+ for (l = pool->large; l ; l = l->next) {
|
||||||
|
+
|
||||||
|
+ ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", l->alloc);
|
||||||
|
|
||||||
|
- for (l = pool->large; l; l = l->next) {
|
||||||
|
if (l->alloc) {
|
||||||
|
ngx_free(l->alloc);
|
||||||
|
}
|
||||||
|
@@ -106,109 +124,65 @@
|
||||||
|
|
||||||
|
pool->large = NULL;
|
||||||
|
|
||||||
|
- for (p = pool; p; p = p->d.next) {
|
||||||
|
- p->d.last = (u_char *) p + sizeof(ngx_pool_t);
|
||||||
|
+ p = pool->d->next;
|
||||||
|
+ while (p != pool->d) {
|
||||||
|
+ tmp = p;
|
||||||
|
+ ngx_free(p->alloc);
|
||||||
|
+ p->prev->next = p->next;
|
||||||
|
+ p->next->prev = p->prev;
|
||||||
|
+ p = p->next;
|
||||||
|
+ ngx_free(tmp);
|
||||||
|
}
|
||||||
|
-}
|
||||||
|
|
||||||
|
+ ngx_free(pool->d->alloc);
|
||||||
|
+ pool->d->alloc = NULL;
|
||||||
|
+
|
||||||
|
+}
|
||||||
|
|
||||||
|
void *
|
||||||
|
-ngx_palloc(ngx_pool_t *pool, size_t size)
|
||||||
|
+ngx_malloc(ngx_pool_t *pool, size_t size)
|
||||||
|
{
|
||||||
|
- u_char *m;
|
||||||
|
- ngx_pool_t *p;
|
||||||
|
-
|
||||||
|
- if (size <= pool->max) {
|
||||||
|
+ ngx_pool_data_t *new;
|
||||||
|
+ void *m;
|
||||||
|
|
||||||
|
- p = pool->current;
|
||||||
|
-
|
||||||
|
- do {
|
||||||
|
- m = ngx_align_ptr(p->d.last, NGX_ALIGNMENT);
|
||||||
|
-
|
||||||
|
- if ((size_t) (p->d.end - m) >= size) {
|
||||||
|
- p->d.last = m + size;
|
||||||
|
-
|
||||||
|
- return m;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- p = p->d.next;
|
||||||
|
-
|
||||||
|
- } while (p);
|
||||||
|
+ m = ngx_alloc(size, pool->log);
|
||||||
|
+ if (m == NULL) {
|
||||||
|
+ return NULL;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
- return ngx_palloc_block(pool, size);
|
||||||
|
+ new = ngx_alloc(sizeof(ngx_pool_data_t), pool->log);
|
||||||
|
+ if (new == NULL){
|
||||||
|
+ ngx_free(m);
|
||||||
|
+ return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
- return ngx_palloc_large(pool, size);
|
||||||
|
+ new->alloc = m;
|
||||||
|
+ new->next = pool->d;
|
||||||
|
+ new->prev = pool->d->prev;
|
||||||
|
+ pool->d->prev->next = new;
|
||||||
|
+ pool->d->prev = new;
|
||||||
|
+ return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
-
|
||||||
|
void *
|
||||||
|
-ngx_pnalloc(ngx_pool_t *pool, size_t size)
|
||||||
|
+ngx_palloc(ngx_pool_t *pool, size_t size)
|
||||||
|
{
|
||||||
|
- u_char *m;
|
||||||
|
- ngx_pool_t *p;
|
||||||
|
-
|
||||||
|
- if (size <= pool->max) {
|
||||||
|
-
|
||||||
|
- p = pool->current;
|
||||||
|
-
|
||||||
|
- do {
|
||||||
|
- m = p->d.last;
|
||||||
|
-
|
||||||
|
- if ((size_t) (p->d.end - m) >= size) {
|
||||||
|
- p->d.last = m + size;
|
||||||
|
-
|
||||||
|
- return m;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- p = p->d.next;
|
||||||
|
-
|
||||||
|
- } while (p);
|
||||||
|
-
|
||||||
|
- return ngx_palloc_block(pool, size);
|
||||||
|
+ if (size <= 1024) {
|
||||||
|
+ return ngx_malloc(pool, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ngx_palloc_large(pool, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-static void *
|
||||||
|
-ngx_palloc_block(ngx_pool_t *pool, size_t size)
|
||||||
|
+void *
|
||||||
|
+ngx_pnalloc(ngx_pool_t *pool, size_t size)
|
||||||
|
{
|
||||||
|
- u_char *m;
|
||||||
|
- size_t psize;
|
||||||
|
- ngx_pool_t *p, *new, *current;
|
||||||
|
-
|
||||||
|
- psize = (size_t) (pool->d.end - (u_char *) pool);
|
||||||
|
-
|
||||||
|
- m = ngx_memalign(NGX_POOL_ALIGNMENT, psize, pool->log);
|
||||||
|
- if (m == NULL) {
|
||||||
|
- return NULL;
|
||||||
|
+ if (size <= 1024) {
|
||||||
|
+ return ngx_malloc(pool, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
- new = (ngx_pool_t *) m;
|
||||||
|
-
|
||||||
|
- new->d.end = m + psize;
|
||||||
|
- new->d.next = NULL;
|
||||||
|
- new->d.failed = 0;
|
||||||
|
-
|
||||||
|
- m += sizeof(ngx_pool_data_t);
|
||||||
|
- m = ngx_align_ptr(m, NGX_ALIGNMENT);
|
||||||
|
- new->d.last = m + size;
|
||||||
|
-
|
||||||
|
- current = pool->current;
|
||||||
|
-
|
||||||
|
- for (p = current; p->d.next; p = p->d.next) {
|
||||||
|
- if (p->d.failed++ > 4) {
|
||||||
|
- current = p->d.next;
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- p->d.next = new;
|
||||||
|
-
|
||||||
|
- pool->current = current ? current : new;
|
||||||
|
-
|
||||||
|
- return m;
|
||||||
|
+ return ngx_palloc_large(pool, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -226,18 +200,7 @@
|
||||||
|
|
||||||
|
n = 0;
|
||||||
|
|
||||||
|
- for (large = pool->large; large; large = large->next) {
|
||||||
|
- if (large->alloc == NULL) {
|
||||||
|
- large->alloc = p;
|
||||||
|
- return p;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- if (n++ > 3) {
|
||||||
|
- break;
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- large = ngx_palloc(pool, sizeof(ngx_pool_large_t));
|
||||||
|
+ large = ngx_malloc(pool, sizeof(ngx_pool_large_t));
|
||||||
|
if (large == NULL) {
|
||||||
|
ngx_free(p);
|
||||||
|
return NULL;
|
||||||
|
@@ -262,7 +225,7 @@
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
- large = ngx_palloc(pool, sizeof(ngx_pool_large_t));
|
||||||
|
+ large = ngx_malloc(pool, sizeof(ngx_pool_large_t));
|
||||||
|
if (large == NULL) {
|
||||||
|
ngx_free(p);
|
||||||
|
return NULL;
|
||||||
|
@@ -279,17 +242,41 @@
|
||||||
|
ngx_int_t
|
||||||
|
ngx_pfree(ngx_pool_t *pool, void *p)
|
||||||
|
{
|
||||||
|
- ngx_pool_large_t *l;
|
||||||
|
+ ngx_pool_large_t *l;
|
||||||
|
+ ngx_pool_large_t *ll;
|
||||||
|
+ ngx_pool_data_t *d, *n;
|
||||||
|
|
||||||
|
- for (l = pool->large; l; l = l->next) {
|
||||||
|
+ for (l = pool->large, ll = l; l; ll = l, l = l->next) {
|
||||||
|
if (p == l->alloc) {
|
||||||
|
ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
|
||||||
|
"free: %p", l->alloc);
|
||||||
|
ngx_free(l->alloc);
|
||||||
|
l->alloc = NULL;
|
||||||
|
+ if (l == pool->large) {
|
||||||
|
+ pool->large = NULL;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ ll->next = l->next;
|
||||||
|
+ p = l;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
|
||||||
|
+ for (d = pool->d, n = d->next; ; d = n, n = d->next) {
|
||||||
|
+ if (p == d->alloc) {
|
||||||
|
+ ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", d->alloc);
|
||||||
|
+ if (d->alloc) {
|
||||||
|
+ ngx_free(d->alloc);
|
||||||
|
+ }
|
||||||
|
+ d->alloc = NULL;
|
||||||
|
+ d->prev->next = d->next;
|
||||||
|
+ d->next->prev = d->prev;
|
||||||
|
+ ngx_free(d);
|
||||||
|
return NGX_OK;
|
||||||
|
}
|
||||||
|
+ if (d->next == pool->d) {
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
return NGX_DECLINED;
|
||||||
|
Only in nginx-1.0.4-no-pool/src/core: ngx_palloc.c~
|
||||||
|
diff -ur nginx-1.0.4/src/core/ngx_palloc.h nginx-1.0.4-no-pool/src/core/ngx_palloc.h
|
||||||
|
--- nginx-1.0.4/src/core/ngx_palloc.h 2009-12-17 20:25:46.000000000 +0800
|
||||||
|
+++ nginx-1.0.4-no-pool/src/core/ngx_palloc.h 2011-06-30 17:00:43.540946999 +0800
|
||||||
|
@@ -38,6 +38,7 @@
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct ngx_pool_large_s ngx_pool_large_t;
|
||||||
|
+typedef struct ngx_pool_data_s ngx_pool_data_t;
|
||||||
|
|
||||||
|
struct ngx_pool_large_s {
|
||||||
|
ngx_pool_large_t *next;
|
||||||
|
@@ -45,16 +46,15 @@
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
-typedef struct {
|
||||||
|
- u_char *last;
|
||||||
|
- u_char *end;
|
||||||
|
- ngx_pool_t *next;
|
||||||
|
- ngx_uint_t failed;
|
||||||
|
-} ngx_pool_data_t;
|
||||||
|
+struct ngx_pool_data_s{
|
||||||
|
+ ngx_pool_data_t *next;
|
||||||
|
+ ngx_pool_data_t *prev;
|
||||||
|
+ void *alloc;
|
||||||
|
+};
|
||||||
|
|
||||||
|
|
||||||
|
struct ngx_pool_s {
|
||||||
|
- ngx_pool_data_t d;
|
||||||
|
+ ngx_pool_data_t *d;
|
||||||
|
size_t max;
|
||||||
|
ngx_pool_t *current;
|
||||||
|
ngx_chain_t *chain;
|
@ -5,8 +5,8 @@
|
|||||||
# Parent 610e909bb9e29766188aa86fae3abe0bd3432940
|
# Parent 610e909bb9e29766188aa86fae3abe0bd3432940
|
||||||
Core: fix body if it's preread and there are extra data.
|
Core: fix body if it's preread and there are extra data.
|
||||||
|
|
||||||
--- nginx-0.8.54/src/http/ngx_http_request_body.c 2011-07-05 12:11:21.619264633 +0800
|
--- nginx-1.0.4/src/http/ngx_http_request_body.c 2011-07-05 12:11:21.619264633 +0800
|
||||||
+++ nginx-0.8.54-patched/src/http/ngx_http_request_body.c 2011-07-05 12:14:30.694321554 +0800
|
+++ nginx-1.0.4-patched/src/http/ngx_http_request_body.c 2011-07-05 12:14:30.694321554 +0800
|
||||||
@@ -141,6 +141,7 @@
|
@@ -141,6 +141,7 @@
|
||||||
|
|
||||||
/* the whole request body was pre-read */
|
/* the whole request body was pre-read */
|
||||||
|
922
t/sanity.t
922
t/sanity.t
File diff suppressed because it is too large
Load Diff
195
util/configure
vendored
195
util/configure
vendored
@ -14,6 +14,9 @@ sub usage ($);
|
|||||||
|
|
||||||
my (@make_cmds, @make_install_cmds);
|
my (@make_cmds, @make_install_cmds);
|
||||||
|
|
||||||
|
my $root_dir = `pwd`;
|
||||||
|
chomp $root_dir;
|
||||||
|
|
||||||
my $OS = $^O;
|
my $OS = $^O;
|
||||||
|
|
||||||
my $ngx_dir;
|
my $ngx_dir;
|
||||||
@ -51,10 +54,10 @@ if ($OS =~ /solaris|sunos/i) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
my @modules = (
|
my @modules = (
|
||||||
|
[ndk => 'ngx_devel_kit'],
|
||||||
[http_iconv => 'iconv-nginx-module', 'disabled'],
|
[http_iconv => 'iconv-nginx-module', 'disabled'],
|
||||||
[http_echo => 'echo-nginx-module'],
|
[http_echo => 'echo-nginx-module'],
|
||||||
[http_xss => 'xss-nginx-module'],
|
[http_xss => 'xss-nginx-module'],
|
||||||
[ndk => 'ngx_devel_kit'],
|
|
||||||
[http_set_misc => 'set-misc-nginx-module'],
|
[http_set_misc => 'set-misc-nginx-module'],
|
||||||
[http_form_input => 'form-input-nginx-module'],
|
[http_form_input => 'form-input-nginx-module'],
|
||||||
[http_encrypted_session => 'encrypted-session-nginx-module'],
|
[http_encrypted_session => 'encrypted-session-nginx-module'],
|
||||||
@ -105,17 +108,29 @@ my $prefix = '/usr/local/openresty';
|
|||||||
my %resty_opts;
|
my %resty_opts;
|
||||||
my $dry_run;
|
my $dry_run;
|
||||||
my @ngx_rpaths;
|
my @ngx_rpaths;
|
||||||
|
my $cc;
|
||||||
|
|
||||||
my (@ngx_opts, @ngx_cc_opts, @ngx_ld_opts);
|
my (@ngx_opts, @ngx_cc_opts, @ngx_ld_opts);
|
||||||
|
|
||||||
for my $opt (@ARGV) {
|
for my $opt (@ARGV) {
|
||||||
next unless defined $opt;
|
next unless defined $opt;
|
||||||
|
|
||||||
|
if ($opt =~ /^--with-cc=(.+)/) {
|
||||||
|
$cc = $1;
|
||||||
|
push @ngx_opts, $opt;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
if ($opt eq '--dry-run') {
|
if ($opt eq '--dry-run') {
|
||||||
$dry_run = 1;
|
$dry_run = 1;
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($opt =~ /^--with-make=(.*)/) {
|
||||||
|
$resty_opts{make} = $1;
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
if ($opt =~ /^--prefix=(.*)/) {
|
if ($opt =~ /^--prefix=(.*)/) {
|
||||||
$prefix = $1;
|
$prefix = $1;
|
||||||
|
|
||||||
@ -150,6 +165,23 @@ for my $opt (@ARGV) {
|
|||||||
} elsif ($opt =~ /^--with-libdrizzle=(.*)/) {
|
} elsif ($opt =~ /^--with-libdrizzle=(.*)/) {
|
||||||
$resty_opts{libdrizzle} = $1;
|
$resty_opts{libdrizzle} = $1;
|
||||||
|
|
||||||
|
} elsif ($opt =~ /^--with-libpq=(.*)/) {
|
||||||
|
$resty_opts{libpq} = $1;
|
||||||
|
if ($resty_opts{pg_config}) {
|
||||||
|
die "--with-libpq is not allowed when ",
|
||||||
|
"--with-pg_config is already specified.\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
} elsif ($opt =~ /^--with-pg_config=(.*)/) {
|
||||||
|
$resty_opts{pg_config} = $1;
|
||||||
|
if ($resty_opts{libpq}) {
|
||||||
|
die "--with-pg_config is not allowed when ",
|
||||||
|
"--with-libpq is already specified.\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
} elsif ($opt eq '--with-no-pool-patch') {
|
||||||
|
$resty_opts{no_pool} = 1;
|
||||||
|
|
||||||
} elsif ($opt eq '--with-http_ssl_module') {
|
} elsif ($opt eq '--with-http_ssl_module') {
|
||||||
$resty_opts{http_ssl} = 1;
|
$resty_opts{http_ssl} = 1;
|
||||||
push @ngx_opts, $opt;
|
push @ngx_opts, $opt;
|
||||||
@ -169,6 +201,8 @@ print "platform: $platform ($OS)\n";
|
|||||||
|
|
||||||
my $ngx_prefix = "$prefix/nginx";
|
my $ngx_prefix = "$prefix/nginx";
|
||||||
|
|
||||||
|
my $postamble = '';
|
||||||
|
|
||||||
my $resty_opts = build_resty_opts(\%resty_opts);
|
my $resty_opts = build_resty_opts(\%resty_opts);
|
||||||
|
|
||||||
if (@ngx_rpaths) {
|
if (@ngx_rpaths) {
|
||||||
@ -188,10 +222,10 @@ my $cmd = "./configure --prefix=$ngx_prefix"
|
|||||||
|
|
||||||
shell $cmd, $dry_run;
|
shell $cmd, $dry_run;
|
||||||
|
|
||||||
push @make_cmds, "cd build/$ngx_dir && "
|
push @make_cmds, "cd $root_dir/build/$ngx_dir && "
|
||||||
. "\$(MAKE)";
|
. "\$(MAKE)";
|
||||||
|
|
||||||
push @make_install_cmds, "cd build/$ngx_dir && "
|
push @make_install_cmds, "cd $root_dir/build/$ngx_dir && "
|
||||||
. "\$(MAKE) install DESTDIR=\$(DESTDIR)";
|
. "\$(MAKE) install DESTDIR=\$(DESTDIR)";
|
||||||
|
|
||||||
cd '../..'; # to the root
|
cd '../..'; # to the root
|
||||||
@ -199,6 +233,10 @@ cd '../..'; # to the root
|
|||||||
|
|
||||||
gen_makefile();
|
gen_makefile();
|
||||||
|
|
||||||
|
if ($postamble) {
|
||||||
|
print $postamble;
|
||||||
|
}
|
||||||
|
|
||||||
sub env ($$) {
|
sub env ($$) {
|
||||||
my ($name, $val) = @_;
|
my ($name, $val) = @_;
|
||||||
print "export $name='$val'\n";
|
print "export $name='$val'\n";
|
||||||
@ -237,6 +275,40 @@ sub cd ($) {
|
|||||||
sub build_resty_opts {
|
sub build_resty_opts {
|
||||||
my $opts = shift;
|
my $opts = shift;
|
||||||
|
|
||||||
|
my $make;
|
||||||
|
|
||||||
|
if ($opts->{make}) {
|
||||||
|
$make = $opts->{make};
|
||||||
|
if (! can_run($make)) {
|
||||||
|
die "make utility $make cannot be run.\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if (can_run("gmake")) {
|
||||||
|
$make = 'gmake';
|
||||||
|
|
||||||
|
} else {
|
||||||
|
# no gmake found
|
||||||
|
|
||||||
|
if ($platform =~ /bsd/i && $opts->{luajit}) {
|
||||||
|
die "you need to install gmake to build LuaJIT.\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (can_run("make")) {
|
||||||
|
$make = "make";
|
||||||
|
|
||||||
|
} else {
|
||||||
|
die "No gmake nor make found in PATH.\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$postamble .= <<"_END_";
|
||||||
|
Type the following commands to build and install:
|
||||||
|
$make
|
||||||
|
$make install
|
||||||
|
_END_
|
||||||
|
|
||||||
if ($opts->{no_ndk}) {
|
if ($opts->{no_ndk}) {
|
||||||
for my $name (qw(lua set_misc iconv lz_session form_input array_var)) {
|
for my $name (qw(lua set_misc iconv lz_session form_input array_var)) {
|
||||||
if (! $opts->{"no_http_$name"}) {
|
if (! $opts->{"no_http_$name"}) {
|
||||||
@ -264,6 +336,14 @@ sub build_resty_opts {
|
|||||||
die "The http_drizzle_module is not enabled while --with-libdrizzle is specified.\n";
|
die "The http_drizzle_module is not enabled while --with-libdrizzle is specified.\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (! $opts->{http_postgres} && $opts->{libpq}) {
|
||||||
|
die "The http_postgres_module is not enabled while --with-libpq is specified.\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $opts->{http_postgres} && $opts->{pg_config}) {
|
||||||
|
die "The http_postgres_module is not enabled while --with-pg_config is specified.\n";
|
||||||
|
}
|
||||||
|
|
||||||
if ($platform eq 'linux' && $opts->{luajit} && ! can_run("ldconfig")) {
|
if ($platform eq 'linux' && $opts->{luajit} && ! can_run("ldconfig")) {
|
||||||
die "you need to have ldconfig in your PATH env when enabling luajit.\n";
|
die "you need to have ldconfig in your PATH env when enabling luajit.\n";
|
||||||
}
|
}
|
||||||
@ -275,10 +355,12 @@ sub build_resty_opts {
|
|||||||
$opts_line .= " \\\n --with-debug";
|
$opts_line .= " \\\n --with-debug";
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
unshift @ngx_cc_opts, '-O2';
|
#unshift @ngx_cc_opts, '-O2';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (@ngx_cc_opts) {
|
||||||
$opts_line .= " \\\n --with-cc-opt='@ngx_cc_opts'";
|
$opts_line .= " \\\n --with-cc-opt='@ngx_cc_opts'";
|
||||||
|
}
|
||||||
|
|
||||||
if (-d 'build') {
|
if (-d 'build') {
|
||||||
system("rm -rf build");
|
system("rm -rf build");
|
||||||
@ -294,13 +376,52 @@ sub build_resty_opts {
|
|||||||
|
|
||||||
# build 3rd-party C libraries if required
|
# build 3rd-party C libraries if required
|
||||||
|
|
||||||
|
if ($opts->{no_pool}) {
|
||||||
|
if (! can_run("patch")) {
|
||||||
|
die "no \"patch\" utility found in your PATH environment.\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
shell "patch -p0 < nginx-no_pool.patch";
|
||||||
|
}
|
||||||
|
|
||||||
if (my $drizzle_prefix = $opts->{libdrizzle}) {
|
if (my $drizzle_prefix = $opts->{libdrizzle}) {
|
||||||
my $drizzle_lib = "$drizzle_prefix/lib";
|
my $drizzle_lib = "$drizzle_prefix/lib";
|
||||||
env LIBDRIZZLE_LIB => "$drizzle_prefix/lib";
|
env LIBDRIZZLE_LIB => $drizzle_lib;
|
||||||
env LIBDRIZZLE_INC => "$drizzle_prefix/include/libdrizzle-1.0";
|
env LIBDRIZZLE_INC => "$drizzle_prefix/include/libdrizzle-1.0";
|
||||||
push @ngx_rpaths, $drizzle_lib;
|
push @ngx_rpaths, $drizzle_lib;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (my $pg_prefix = $opts->{libpq}) {
|
||||||
|
my $pg_lib = "$pg_prefix/lib";
|
||||||
|
env LIBPQ_LIB => $pg_lib;
|
||||||
|
env LIBPQ_INC => "$pg_prefix/include";
|
||||||
|
push @ngx_rpaths, $pg_lib;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (my $pg_config = $opts->{pg_config}) {
|
||||||
|
if (!can_run($pg_config)) {
|
||||||
|
die "pg_config is not runnable.\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
my $cmd = "$pg_config --libdir";
|
||||||
|
my $pg_lib = `$cmd`;
|
||||||
|
chomp $pg_lib;
|
||||||
|
if (!defined $pg_lib) {
|
||||||
|
die "Failed to run command $cmd\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
$cmd = "$pg_config --includedir";
|
||||||
|
my $pg_inc = `$cmd`;
|
||||||
|
chomp $pg_inc;
|
||||||
|
if (!defined $pg_inc) {
|
||||||
|
die "Failed to run command $cmd\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
env LIBPQ_LIB => $pg_lib;
|
||||||
|
env LIBPQ_INC => $pg_inc;
|
||||||
|
push @ngx_rpaths, $pg_lib;
|
||||||
|
}
|
||||||
|
|
||||||
if ($opts->{luajit}) {
|
if ($opts->{luajit}) {
|
||||||
my $luajit_src = auto_complete 'LuaJIT';
|
my $luajit_src = auto_complete 'LuaJIT';
|
||||||
my $luajit_prefix = "$prefix/luajit";
|
my $luajit_prefix = "$prefix/luajit";
|
||||||
@ -315,14 +436,34 @@ sub build_resty_opts {
|
|||||||
|
|
||||||
cd $luajit_src;
|
cd $luajit_src;
|
||||||
|
|
||||||
shell "make PREFIX=$luajit_prefix", $dry_run;
|
my $extra_opts = ' TARGET_STRIP=@:';
|
||||||
shell "make install PREFIX=$luajit_prefix DESTDIR=$luajit_root", $dry_run;
|
|
||||||
|
|
||||||
push @make_cmds, "cd build/$luajit_src && "
|
if ($opts->{debug}) {
|
||||||
. "\$(MAKE) PREFIX=$luajit_prefix";
|
$extra_opts = ' CCDEBUG=-g Q=';
|
||||||
|
}
|
||||||
|
|
||||||
push @make_install_cmds, "cd build/$luajit_src && "
|
if ($platform =~ /bsd/i) {
|
||||||
. "\$(MAKE) install PREFIX=$luajit_prefix DESTDIR=\$(DESTDIR)";
|
$extra_opts .= ' CFLAGS=-I..';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($on_solaris) {
|
||||||
|
$extra_opts .= " INSTALL_X='$root_dir/build/install -m 0755' " .
|
||||||
|
"INSTALL_F='$root_dir/build/install -m 0644'";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (defined $cc) {
|
||||||
|
$extra_opts .= " CC=$cc";
|
||||||
|
}
|
||||||
|
|
||||||
|
shell "${make}$extra_opts PREFIX=$luajit_prefix", $dry_run;
|
||||||
|
|
||||||
|
shell "${make} install$extra_opts PREFIX=$luajit_prefix DESTDIR=$luajit_root", $dry_run;
|
||||||
|
|
||||||
|
push @make_cmds, "cd $root_dir/build/$luajit_src && "
|
||||||
|
. "\$(MAKE)$extra_opts PREFIX=$luajit_prefix";
|
||||||
|
|
||||||
|
push @make_install_cmds, "cd $root_dir/build/$luajit_src && "
|
||||||
|
. "\$(MAKE) install$extra_opts PREFIX=$luajit_prefix DESTDIR=\$(DESTDIR)";
|
||||||
|
|
||||||
env LUAJIT_LIB => "$luajit_root$luajit_prefix/lib";
|
env LUAJIT_LIB => "$luajit_root$luajit_prefix/lib";
|
||||||
env LUAJIT_INC => "$luajit_root$luajit_prefix/include/luajit-2.0";
|
env LUAJIT_INC => "$luajit_root$luajit_prefix/include/luajit-2.0";
|
||||||
@ -352,16 +493,21 @@ sub build_resty_opts {
|
|||||||
|
|
||||||
cd $lua_src;
|
cd $lua_src;
|
||||||
|
|
||||||
shell "make $platform", $dry_run;
|
my $extra_opts = '';
|
||||||
shell "make install INSTALL_TOP=$lua_root$lua_prefix", $dry_run;
|
if (defined $cc) {
|
||||||
|
$extra_opts .= " CC=$cc";
|
||||||
|
}
|
||||||
|
|
||||||
|
shell "${make}$extra_opts $platform", $dry_run;
|
||||||
|
shell "${make} install$extra_opts INSTALL_TOP=$lua_root$lua_prefix", $dry_run;
|
||||||
|
|
||||||
env LUA_LIB => "$lua_root$lua_prefix/lib";
|
env LUA_LIB => "$lua_root$lua_prefix/lib";
|
||||||
env LUA_INC => "$lua_root$lua_prefix/include";
|
env LUA_INC => "$lua_root$lua_prefix/include";
|
||||||
|
|
||||||
push @make_cmds, "cd build/$lua_src && \$(MAKE) $platform";
|
push @make_cmds, "cd $root_dir/build/$lua_src && \$(MAKE)$extra_opts $platform";
|
||||||
|
|
||||||
push @make_install_cmds, "cd build/$lua_src && "
|
push @make_install_cmds, "cd $root_dir/build/$lua_src && "
|
||||||
. "\$(MAKE) install INSTALL_TOP=\$(DESTDIR)$lua_prefix";
|
. "\$(MAKE) install$extra_opts INSTALL_TOP=\$(DESTDIR)$lua_prefix";
|
||||||
|
|
||||||
cd '..';
|
cd '..';
|
||||||
}
|
}
|
||||||
@ -397,7 +543,10 @@ sub usage ($) {
|
|||||||
|
|
||||||
--prefix=PATH set the installation prefix
|
--prefix=PATH set the installation prefix
|
||||||
|
|
||||||
--with-debug enable the debugging logging and also enable -O0
|
--with-debug enable the debugging logging and also enable -O0 -g for gcc.
|
||||||
|
this not only affects nginx, but also other components.
|
||||||
|
|
||||||
|
--with-no-pool-patch enable the no-pool patch for debugging memory issues.
|
||||||
|
|
||||||
_EOC_
|
_EOC_
|
||||||
|
|
||||||
@ -455,7 +604,9 @@ _EOC_
|
|||||||
|
|
||||||
--without-lua51 disable the bundled Lua 5.1 interpreter
|
--without-lua51 disable the bundled Lua 5.1 interpreter
|
||||||
--with-luajit enable LuaJIT 2.0
|
--with-luajit enable LuaJIT 2.0
|
||||||
--with-libdrizzle=DIR specify the libdrizzle 1.0 installation prefix
|
--with-libdrizzle=DIR specify the libdrizzle 1.0 (or drizzle) installation prefix
|
||||||
|
--with-libpq=DIR specify the libpq (or postgresql) installation prefix
|
||||||
|
--with-pg_config=PATH specify the path of the pg_config utility
|
||||||
|
|
||||||
Options directly inherited from nginx
|
Options directly inherited from nginx
|
||||||
|
|
||||||
@ -554,6 +705,8 @@ Options directly inherited from nginx
|
|||||||
pentium, pentiumpro, pentium3, pentium4,
|
pentium, pentiumpro, pentium3, pentium4,
|
||||||
athlon, opteron, sparc32, sparc64, ppc64
|
athlon, opteron, sparc32, sparc64, ppc64
|
||||||
|
|
||||||
|
--with-make=PATH specify the default make utility to be used
|
||||||
|
|
||||||
--without-pcre disable PCRE library usage
|
--without-pcre disable PCRE library usage
|
||||||
--with-pcre force PCRE library usage
|
--with-pcre force PCRE library usage
|
||||||
--with-pcre=DIR set path to PCRE library sources
|
--with-pcre=DIR set path to PCRE library sources
|
||||||
@ -596,7 +749,7 @@ sub gen_makefile {
|
|||||||
open my $out, ">Makefile" or
|
open my $out, ">Makefile" or
|
||||||
die "Cannot open Makefile for writing: $!\n";
|
die "Cannot open Makefile for writing: $!\n";
|
||||||
|
|
||||||
print $out ".PHONY: all install\n\n";
|
print $out ".PHONY: all install clean\n\n";
|
||||||
|
|
||||||
print $out "all:\n\t" . join("\n\t", @make_cmds) . "\n\n";
|
print $out "all:\n\t" . join("\n\t", @make_cmds) . "\n\n";
|
||||||
|
|
||||||
@ -615,6 +768,8 @@ sub can_run {
|
|||||||
my $_cmd = $cmd;
|
my $_cmd = $cmd;
|
||||||
return $_cmd if -x $_cmd;
|
return $_cmd if -x $_cmd;
|
||||||
|
|
||||||
|
return undef if $_cmd =~ m{[\\/]};
|
||||||
|
|
||||||
# FIXME: this is a hack; MSWin32 is not supported anyway
|
# FIXME: this is a hack; MSWin32 is not supported anyway
|
||||||
my $path_sep = ':';
|
my $path_sep = ':';
|
||||||
|
|
||||||
@ -624,6 +779,6 @@ sub can_run {
|
|||||||
return $abs if -x $abs;
|
return $abs if -x $abs;
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,12 +44,19 @@ for my $t_file (@t_files) {
|
|||||||
|
|
||||||
warn "\n- $orig";
|
warn "\n- $orig";
|
||||||
warn "+ $_";
|
warn "+ $_";
|
||||||
} elsif (s{\bbuild/$pat\S+}{build/$dir}g && $orig ne $_) {
|
|
||||||
|
} elsif (s{ngx_openresty-\d+\.\d+\.\d+\.\d+(?:rc\d+)?}{ngx_openresty-$ver} && $orig ne $_) {
|
||||||
$changed++;
|
$changed++;
|
||||||
|
|
||||||
warn "\n- $orig";
|
warn "\n- $orig";
|
||||||
warn "+ $_";
|
warn "+ $_";
|
||||||
} elsif (s{^cd $pat\S+}{cd $dir}g && $orig ne $_) {
|
|
||||||
|
} elsif (s{\bbuild/$pat[^/ \t\n]*\d[^/ \t\n]*}{build/$dir}g && $orig ne $_) {
|
||||||
|
$changed++;
|
||||||
|
|
||||||
|
warn "\n- $orig";
|
||||||
|
warn "+ $_";
|
||||||
|
} elsif (s{^cd $pat[^/ \t\n]+}{cd $dir}g && $orig ne $_) {
|
||||||
$changed++;
|
$changed++;
|
||||||
|
|
||||||
warn "\n- $orig";
|
warn "\n- $orig";
|
||||||
|
79
util/install
Executable file
79
util/install
Executable file
@ -0,0 +1,79 @@
|
|||||||
|
#!/usr/bin/env perl
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
use Getopt::Std qw(getopts);
|
||||||
|
|
||||||
|
my %opts;
|
||||||
|
getopts("m:", \%opts) or usage();
|
||||||
|
|
||||||
|
my $mode = $opts{m};
|
||||||
|
|
||||||
|
if (!defined $mode) {
|
||||||
|
die "No -m option specified.\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
my $mod = $opts{m};
|
||||||
|
|
||||||
|
if (@ARGV < 2) {
|
||||||
|
usage();
|
||||||
|
}
|
||||||
|
|
||||||
|
my $dst = pop;
|
||||||
|
|
||||||
|
my @src = @ARGV;
|
||||||
|
|
||||||
|
my $target_dir;
|
||||||
|
|
||||||
|
if (@src > 1 || $dst =~ m{/$}) {
|
||||||
|
$target_dir = $dst;
|
||||||
|
|
||||||
|
} elsif (-d $dst) {
|
||||||
|
$target_dir = $dst;
|
||||||
|
|
||||||
|
} elsif ($dst =~ m{(.+)/}) {
|
||||||
|
$target_dir = $1;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
$target_dir = '.';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!-d $target_dir) {
|
||||||
|
shell("mkdir -p $target_dir");
|
||||||
|
}
|
||||||
|
|
||||||
|
shell("cp @src $dst");
|
||||||
|
|
||||||
|
if (-f $dst) {
|
||||||
|
chmod oct($mode), $dst or
|
||||||
|
die "failed to change mode of $dst to $mode.\n";
|
||||||
|
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
for my $src (@src) {
|
||||||
|
my $name;
|
||||||
|
|
||||||
|
if ($src =~ m{/([^/]+)$}) {
|
||||||
|
$name = $1;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
$name = $src;
|
||||||
|
}
|
||||||
|
|
||||||
|
my $target = "$target_dir/$name";
|
||||||
|
chmod oct($mode), $target or
|
||||||
|
die "failed to change mode of $target to $mode.\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
sub usage {
|
||||||
|
die "Usage: install -m <attrs> <src>... <dst>\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
sub shell {
|
||||||
|
my $cmd = shift;
|
||||||
|
system($cmd) == 0 or
|
||||||
|
die "failed to run command $cmd\n";
|
||||||
|
}
|
||||||
|
|
@ -48,10 +48,15 @@ rm -f *.patch || exit 1
|
|||||||
|
|
||||||
cd .. || exit 1
|
cd .. || exit 1
|
||||||
|
|
||||||
|
cp $root/patches/nginx-$main_ver-no_pool.patch ./nginx-no_pool.patch || exit 1
|
||||||
|
sed -i $"s/NGINX_VERSION \".unknown/NGINX_VERSION \".$minor_ver/" \
|
||||||
|
./nginx-no_pool.patch || exit 1
|
||||||
|
rm -rf no-pool-nginx-$ver
|
||||||
|
|
||||||
ver=0.37rc1
|
ver=0.37rc1
|
||||||
$root/util/get-tarball "http://github.com/agentzh/echo-nginx-module/tarball/v$ver" -O echo-nginx-module-$ver.tar.gz || exit 1
|
$root/util/get-tarball "http://github.com/agentzh/echo-nginx-module/tarball/v$ver" -O echo-nginx-module-$ver.tar.gz || exit 1
|
||||||
tar -xzf echo-nginx-module-$ver.tar.gz
|
tar -xzf echo-nginx-module-$ver.tar.gz || exit 1
|
||||||
mv agentzh-echo-nginx-module-* echo-nginx-module-$ver
|
mv agentzh-echo-nginx-module-* echo-nginx-module-$ver || exit 1
|
||||||
|
|
||||||
ver=0.03rc3
|
ver=0.03rc3
|
||||||
$root/util/get-tarball "http://github.com/agentzh/xss-nginx-module/tarball/v$ver" -O xss-nginx-module-$ver.tar.gz || exit 1
|
$root/util/get-tarball "http://github.com/agentzh/xss-nginx-module/tarball/v$ver" -O xss-nginx-module-$ver.tar.gz || exit 1
|
||||||
@ -63,12 +68,12 @@ $root/util/get-tarball "http://github.com/simpl/ngx_devel_kit/tarball/v$ver" -O
|
|||||||
tar -xzf ngx_devel_kit-$ver.tar.gz || exit 1
|
tar -xzf ngx_devel_kit-$ver.tar.gz || exit 1
|
||||||
mv simpl-ngx_devel_kit-* ngx_devel_kit-$ver || exit 1
|
mv simpl-ngx_devel_kit-* ngx_devel_kit-$ver || exit 1
|
||||||
|
|
||||||
ver=0.21
|
ver=0.22rc2
|
||||||
$root/util/get-tarball "http://github.com/agentzh/set-misc-nginx-module/tarball/v$ver" -O set-misc-nginx-module-$ver.tar.gz || exit 1
|
$root/util/get-tarball "http://github.com/agentzh/set-misc-nginx-module/tarball/v$ver" -O set-misc-nginx-module-$ver.tar.gz || exit 1
|
||||||
tar -xzf set-misc-nginx-module-$ver.tar.gz || exit 1
|
tar -xzf set-misc-nginx-module-$ver.tar.gz || exit 1
|
||||||
mv agentzh-set-misc-nginx-module-* set-misc-nginx-module-$ver || exit 1
|
mv agentzh-set-misc-nginx-module-* set-misc-nginx-module-$ver || exit 1
|
||||||
|
|
||||||
ver=0.11
|
ver=0.12rc1
|
||||||
$root/util/get-tarball "http://github.com/agentzh/rds-json-nginx-module/tarball/v$ver" -O rds-json-nginx-module-$ver.tar.gz || exit 1
|
$root/util/get-tarball "http://github.com/agentzh/rds-json-nginx-module/tarball/v$ver" -O rds-json-nginx-module-$ver.tar.gz || exit 1
|
||||||
tar -xzf rds-json-nginx-module-$ver.tar.gz || exit 1
|
tar -xzf rds-json-nginx-module-$ver.tar.gz || exit 1
|
||||||
mv agentzh-rds-json-nginx-module-* rds-json-nginx-module-$ver || exit 1
|
mv agentzh-rds-json-nginx-module-* rds-json-nginx-module-$ver || exit 1
|
||||||
@ -80,21 +85,21 @@ mv agentzh-headers-more-nginx-module-* headers-more-nginx-module-$ver || exit 1
|
|||||||
|
|
||||||
#################################
|
#################################
|
||||||
|
|
||||||
ver=0.1.1rc1
|
ver=0.1.1rc3
|
||||||
$root/util/get-tarball "http://github.com/chaoslawful/drizzle-nginx-module/tarball/v$ver" -O drizzle-nginx-module-$ver.tar.gz || exit 1
|
$root/util/get-tarball "http://github.com/chaoslawful/drizzle-nginx-module/tarball/v$ver" -O drizzle-nginx-module-$ver.tar.gz || exit 1
|
||||||
tar -xzf drizzle-nginx-module-$ver.tar.gz || exit 1
|
tar -xzf drizzle-nginx-module-$ver.tar.gz || exit 1
|
||||||
mv chaoslawful-drizzle-nginx-module-* drizzle-nginx-module-$ver || exit 1
|
mv chaoslawful-drizzle-nginx-module-* drizzle-nginx-module-$ver || exit 1
|
||||||
|
|
||||||
#################################
|
#################################
|
||||||
|
|
||||||
ver=0.2.0
|
ver=0.2.1rc4
|
||||||
$root/util/get-tarball "http://github.com/chaoslawful/lua-nginx-module/tarball/v$ver" -O lua-nginx-module-$ver.tar.gz || exit 1
|
$root/util/get-tarball "http://github.com/chaoslawful/lua-nginx-module/tarball/v$ver" -O lua-nginx-module-$ver.tar.gz || exit 1
|
||||||
tar -xzf lua-nginx-module-$ver.tar.gz || exit 1
|
tar -xzf lua-nginx-module-$ver.tar.gz || exit 1
|
||||||
mv chaoslawful-lua-nginx-module-* ngx_lua-$ver || exit 1
|
mv chaoslawful-lua-nginx-module-* ngx_lua-$ver || exit 1
|
||||||
|
|
||||||
#################################
|
#################################
|
||||||
|
|
||||||
ver=0.02
|
ver=0.03rc1
|
||||||
$root/util/get-tarball "http://github.com/agentzh/array-var-nginx-module/tarball/v$ver" -O array-var-nginx-module-$ver.tar.gz || exit 1
|
$root/util/get-tarball "http://github.com/agentzh/array-var-nginx-module/tarball/v$ver" -O array-var-nginx-module-$ver.tar.gz || exit 1
|
||||||
tar -xzf array-var-nginx-module-$ver.tar.gz || exit 1
|
tar -xzf array-var-nginx-module-$ver.tar.gz || exit 1
|
||||||
mv agentzh-array-var-nginx-module-* array-var-nginx-module-$ver || exit 1
|
mv agentzh-array-var-nginx-module-* array-var-nginx-module-$ver || exit 1
|
||||||
@ -115,14 +120,14 @@ mv agentzh-srcache-nginx-module-* srcache-nginx-module-$ver || exit 1
|
|||||||
|
|
||||||
#################################
|
#################################
|
||||||
|
|
||||||
ver=0.07rc4
|
ver=0.07rc5
|
||||||
$root/util/get-tarball "http://github.com/calio/form-input-nginx-module/tarball/v$ver" -O form-input-nginx-module-$ver.tar.gz || exit 1
|
$root/util/get-tarball "http://github.com/calio/form-input-nginx-module/tarball/v$ver" -O form-input-nginx-module-$ver.tar.gz || exit 1
|
||||||
tar -xzf form-input-nginx-module-$ver.tar.gz || exit 1
|
tar -xzf form-input-nginx-module-$ver.tar.gz || exit 1
|
||||||
mv calio-form-input-nginx-module-* form-input-nginx-module-$ver || exit 1
|
mv calio-form-input-nginx-module-* form-input-nginx-module-$ver || exit 1
|
||||||
|
|
||||||
#################################
|
#################################
|
||||||
|
|
||||||
ver=0.10rc3
|
ver=0.10rc4
|
||||||
$root/util/get-tarball "http://github.com/calio/iconv-nginx-module/tarball/v$ver" -O iconv-nginx-module-$ver.tar.gz || exit 1
|
$root/util/get-tarball "http://github.com/calio/iconv-nginx-module/tarball/v$ver" -O iconv-nginx-module-$ver.tar.gz || exit 1
|
||||||
tar -xzf iconv-nginx-module-$ver.tar.gz || exit 1
|
tar -xzf iconv-nginx-module-$ver.tar.gz || exit 1
|
||||||
mv calio-iconv-nginx-module-* iconv-nginx-module-$ver || exit 1
|
mv calio-iconv-nginx-module-* iconv-nginx-module-$ver || exit 1
|
||||||
@ -151,14 +156,14 @@ mv ngx_http_auth_request_module-* auth-request-nginx-module-$ver || exit 1
|
|||||||
|
|
||||||
#################################
|
#################################
|
||||||
|
|
||||||
ver=0.8
|
ver=0.9rc1
|
||||||
$root/util/get-tarball "https://github.com/FRiCKLE/ngx_postgres/tarball/$ver" -O ngx_postgres-$ver.tar.gz || exit 1
|
$root/util/get-tarball "https://github.com/FRiCKLE/ngx_postgres/tarball/$ver" -O ngx_postgres-$ver.tar.gz || exit 1
|
||||||
tar -xzf ngx_postgres-$ver.tar.gz || exit 1
|
tar -xzf ngx_postgres-$ver.tar.gz || exit 1
|
||||||
mv FRiCKLE-ngx_postgres-* ngx_postgres-$ver || exit 1
|
mv FRiCKLE-ngx_postgres-* ngx_postgres-$ver || exit 1
|
||||||
|
|
||||||
#################################
|
#################################
|
||||||
|
|
||||||
ver=0.07rc5
|
ver=0.07
|
||||||
$root/util/get-tarball "http://github.com/agentzh/redis2-nginx-module/tarball/v$ver" -O redis2-nginx-module-$ver.tar.gz || exit 1
|
$root/util/get-tarball "http://github.com/agentzh/redis2-nginx-module/tarball/v$ver" -O redis2-nginx-module-$ver.tar.gz || exit 1
|
||||||
tar -xzf redis2-nginx-module-$ver.tar.gz || exit 1
|
tar -xzf redis2-nginx-module-$ver.tar.gz || exit 1
|
||||||
mv agentzh-redis2-nginx-module-* redis2-nginx-module-$ver || exit 1
|
mv agentzh-redis2-nginx-module-* redis2-nginx-module-$ver || exit 1
|
||||||
@ -181,7 +186,7 @@ cp $root/patches/lua-$ver-makefile_install_fix.patch lua-makefile-fix.patch || e
|
|||||||
|
|
||||||
patch -p0 < lua-makefile-fix.patch || exit 1
|
patch -p0 < lua-makefile-fix.patch || exit 1
|
||||||
|
|
||||||
rm lua-makefile-fix.patch
|
rm lua-makefile-fix.patch || exit 1
|
||||||
|
|
||||||
#################################
|
#################################
|
||||||
|
|
||||||
@ -189,7 +194,12 @@ ver=2.0.0-beta8
|
|||||||
$root/util/get-tarball "http://luajit.org/download/LuaJIT-$ver.tar.gz" -O "LuaJIT-$ver.tar.gz" || exit 1
|
$root/util/get-tarball "http://luajit.org/download/LuaJIT-$ver.tar.gz" -O "LuaJIT-$ver.tar.gz" || exit 1
|
||||||
tar -xzf LuaJIT-$ver.tar.gz || exit 1
|
tar -xzf LuaJIT-$ver.tar.gz || exit 1
|
||||||
|
|
||||||
#patch -p0 < $root/patches/LuaJIT-$ver-symlink_lib.patch || exit 1
|
cd LuaJIT-$ver || exit 1;
|
||||||
|
$root/util/get-tarball http://luajit.org/download/beta8_hotfix1.patch -O beta8_hotfix1.patch
|
||||||
|
patch -p1 < beta8_hotfix1.patch || exit 1
|
||||||
|
rm beta8_hotfix1.patch || exit 1
|
||||||
|
cp $root/misc/unwind-generic.h ./unwind.h || exit 1
|
||||||
|
cd ..
|
||||||
|
|
||||||
#################################
|
#################################
|
||||||
|
|
||||||
@ -198,6 +208,7 @@ rm *.tar.gz
|
|||||||
cd ..
|
cd ..
|
||||||
cp $root/util/configure ./
|
cp $root/util/configure ./
|
||||||
cp $root/README ./
|
cp $root/README ./
|
||||||
|
cp $root/util/install bundle/
|
||||||
|
|
||||||
cd $root
|
cd $root
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user