修改的地方:
1、不能自动编译luajit,因为在cygwin上luajit编完不会正常安装。因此需要先手动编译好,然后在configure时用--with-luajit=/path/to指定
2、cygwin下luajit生成的动态库是cyglua51.dll,不符合-l链接选项的规定,因此刚脆-L和-l都不用,直接指定cyglua51.dll全路径,将其当作跟.o一样的文件共同链接
3、另外,因为直接使用刚编译完(而非安装后)的luajit,头文件和库文件都在其src目录里,不分include/lib,相关路径配置要改一下
安装时的问题:
1、在windows上没有rpath概念,要运行nginx.exe必须把cyglua51.dll拷到同目录下
2、在make install时,若没有指定prefix,会导致生成一个//usr/local/XXX的路径(前面有两个/), 这个在cygwin下解析不了,解决办法是建个符号目录链接/root-->/,然后make DESTDIR=/root install就好了。
这个patch是以ngx_openresty-1.7.2.1为基础做的,而且没有包括手动编译luajit部分,仅供运行验证参考。
diff --git a/ngx_openresty-1.7.2.1/bundle/lua-cjson-2.1.0.1/Makefile b/openresty_backup/bundle/lua-cjson-2.1.0.1/Makefile
index 6fdb1f2..3196367 100644
--- a/ngx_openresty-1.7.2.1/bundle/lua-cjson-2.1.0.1/Makefile
+++ b/openresty_backup/bundle/lua-cjson-2.1.0.1/Makefile
@@ -18,7 +18,7 @@ PREFIX = /usr/local
CFLAGS = -O3 -Wall -pedantic -DNDEBUG
CJSON_CFLAGS = -fpic
CJSON_LDFLAGS = -shared
-LUA_INCLUDE_DIR = $(PREFIX)/include
+LUA_INCLUDE_DIR = $(PREFIX)
LUA_CMODULE_DIR = $(PREFIX)/lib/lua/$(LUA_VERSION)
LUA_MODULE_DIR = $(PREFIX)/share/lua/$(LUA_VERSION)
LUA_BIN_DIR = $(PREFIX)/bin
@@ -48,7 +48,7 @@ LUA_BIN_DIR = $(PREFIX)/bin
#TARGET = cjson.dll
#PREFIX = /home/user/opt
#CJSON_CFLAGS = -DDISABLE_INVALID_NUMBERS
-#CJSON_LDFLAGS = -shared -L$(PREFIX)/lib -llua51
+CJSON_LDFLAGS = -shared -L$(PREFIX)/lib -L$(LUA_INCLUDE_DIR)
#LUA_BIN_SUFFIX = .lua
##### Number conversion configuration #####
@@ -97,7 +97,7 @@ all: $(TARGET)
doc: manual.html performance.html
$(TARGET): $(OBJS)
- $(CC) $(LDFLAGS) $(CJSON_LDFLAGS) -o $@ $(OBJS)
+ $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LUA_INCLUDE_DIR)/cyglua51.dll $(CJSON_LDFLAGS)
install: $(TARGET)
mkdir -p $(DESTDIR)/$(LUA_CMODULE_DIR)
diff --git a/ngx_openresty-1.7.2.1/bundle/lua-rds-parser-0.05/Makefile b/openresty_backup/bundle/lua-rds-parser-0.05/Makefile
index 3a97f4f..36409bc 100644
--- a/ngx_openresty-1.7.2.1/bundle/lua-rds-parser-0.05/Makefile
+++ b/openresty_backup/bundle/lua-rds-parser-0.05/Makefile
@@ -11,6 +11,7 @@ LUA_VERSION = 5.1
## Linux/BSD
PREFIX ?= /usr/local
LDFLAGS += -shared
+LDFLAGS += -L$(PREFIX)/lib -L$(LUA_INCLUDE_DIR)
## OSX (Macports)
#PREFIX ?= /opt/local
@@ -35,7 +36,7 @@ all: parser.so
src/rds_parser.o: src/ddebug.h src/rds_parser.h src/resty_dbd_stream.h
parser.so: src/rds_parser.o
- $(CC) $(LDFLAGS) -o $@ $^
+ $(CC) -o $@ $^ $(LUA_INCLUDE_DIR)/cyglua51.dll $(LDFLAGS)
install:
$(INSTALL) -d $(DESTDIR)/$(LUA_LIB_DIR)/rds
diff --git a/ngx_openresty-1.7.2.1/bundle/lua-redis-parser-0.10/Makefile b/openresty_backup/bundle/lua-redis-parser-0.10/Makefile
index 39c57b3..54c6220 100644
--- a/ngx_openresty-1.7.2.1/bundle/lua-redis-parser-0.10/Makefile
+++ b/openresty_backup/bundle/lua-redis-parser-0.10/Makefile
@@ -11,6 +11,7 @@ LUA_VERSION = 5.1
## Linux/BSD
PREFIX ?= /usr/local
LDFLAGS += -shared
+LDFLAGS += -L$(PREFIX)/lib -L$(LUA_INCLUDE_DIR)
## OSX (Macports)
#PREFIX ?= /opt/local
@@ -35,7 +36,7 @@ all: parser.so
redis-parser.o: ddebug.h
parser.so: redis-parser.o
- $(CC) $(LDFLAGS) -o $@ $^
+ $(CC) -o $@ $^ $(LUA_INCLUDE_DIR)/cyglua51.dll $(LDFLAGS)
install:
$(INSTALL) -d $(DESTDIR)/$(LUA_LIB_DIR)/redis
diff --git a/ngx_openresty-1.7.2.1/bundle/ngx_lua-0.9.10/config b/openresty_backup/bundle/ngx_lua-0.9.10/config
index 2b3440f..f10087c 100644
--- a/ngx_openresty-1.7.2.1/bundle/ngx_lua-0.9.10/config
+++ b/openresty_backup/bundle/ngx_lua-0.9.10/config
@@ -15,6 +15,7 @@ if [ -n "$LUAJIT_INC" -o -n "$LUAJIT_LIB" ]; then
else
ngx_feature_libs="-L$LUAJIT_LIB -lluajit-5.1 -lm"
fi
+ ngx_feature_libs="$LUAJIT_LIB/cyglua51.dll -lm"
. auto/feature
diff --git a/openresty_backup/cfg_cygwin.sh b/openresty_backup/cfg_cygwin.sh
new file mode 100644
index 0000000..b5f0eaf
--- /dev/null
+++ b/openresty_backup/cfg_cygwin.sh
@@ -0,0 +1 @@
+./configure --with-luajit=/home/Administrator/3rd/luajit/src --with-cc-opt="-D FD_SETSIZE=2048"
diff --git a/ngx_openresty-1.7.2.1/configure b/openresty_backup/configure
index e9be2d6..99b7346 100755
--- a/ngx_openresty-1.7.2.1/configure
+++ b/openresty_backup/configure
@@ -523,8 +523,10 @@ _END_
my $luajit_prefix = $opts->{luajit_path};
env LUAJIT_LIB => "$luajit_prefix/lib";
env LUAJIT_INC => "$luajit_prefix/include/luajit-2.1";
+ env LUAJIT_LIB => "$luajit_prefix";
+ env LUAJIT_INC => "$luajit_prefix";
- push @ngx_rpaths, "$luajit_prefix/lib";
+ push @ngx_rpaths, "$luajit_prefix";
} elsif ($opts->{luajit}) {
my $luajit_src = auto_complete 'LuaJIT';