xref: /unit/auto/modules/ruby (revision 1489)
1584Salexander.borisov@nginx.com
2584Salexander.borisov@nginx.com# Copyright (C) Alexander Borisov
3584Salexander.borisov@nginx.com# Copyright (C) NGINX, Inc.
4584Salexander.borisov@nginx.com
5584Salexander.borisov@nginx.com
6584Salexander.borisov@nginx.comshift
7584Salexander.borisov@nginx.com
8584Salexander.borisov@nginx.comfor nxt_option; do
9584Salexander.borisov@nginx.com
10584Salexander.borisov@nginx.com    case "$nxt_option" in
11584Salexander.borisov@nginx.com        -*=*) value=`echo "$nxt_option" | sed -e 's/[-_a-zA-Z0-9]*=//'`     ;;
12584Salexander.borisov@nginx.com           *) value="" ;;
13584Salexander.borisov@nginx.com    esac
14584Salexander.borisov@nginx.com
15584Salexander.borisov@nginx.com    case "$nxt_option" in
16584Salexander.borisov@nginx.com        --ruby=*)    NXT_RUBY="$value"                                    ;;
17584Salexander.borisov@nginx.com        --module=*)  NXT_RUBY_MODULE="$value"                             ;;
18584Salexander.borisov@nginx.com
19584Salexander.borisov@nginx.com        --help)
20584Salexander.borisov@nginx.com            cat << END
21584Salexander.borisov@nginx.com
22584Salexander.borisov@nginx.com    --ruby=FILE    set ruby executable, default: ruby
23584Salexander.borisov@nginx.com    --module=NAME  set unit ruby module name
24584Salexander.borisov@nginx.com
25584Salexander.borisov@nginx.comEND
26584Salexander.borisov@nginx.com            exit 0
27584Salexander.borisov@nginx.com        ;;
28584Salexander.borisov@nginx.com
29584Salexander.borisov@nginx.com        *)
30584Salexander.borisov@nginx.com            echo
31584Salexander.borisov@nginx.com            echo $0: error: invalid Ruby option \"$nxt_option\"
32584Salexander.borisov@nginx.com            echo
33584Salexander.borisov@nginx.com            exit 1
34584Salexander.borisov@nginx.com        ;;
35584Salexander.borisov@nginx.com    esac
36584Salexander.borisov@nginx.com
37584Salexander.borisov@nginx.comdone
38584Salexander.borisov@nginx.com
39584Salexander.borisov@nginx.com
40584Salexander.borisov@nginx.comif [ ! -f $NXT_AUTOCONF_DATA ]; then
41584Salexander.borisov@nginx.com   echo
42584Salexander.borisov@nginx.com   echo Please run common $0 before configuring module \"$nxt_module\".
43584Salexander.borisov@nginx.com   echo
44584Salexander.borisov@nginx.com   exit 1
45584Salexander.borisov@nginx.comfi
46584Salexander.borisov@nginx.com
47584Salexander.borisov@nginx.com. $NXT_AUTOCONF_DATA
48584Salexander.borisov@nginx.com
49584Salexander.borisov@nginx.com$echo "configuring Ruby module"
50584Salexander.borisov@nginx.com$echo "configuring Ruby module ..." >> $NXT_AUTOCONF_ERR
51584Salexander.borisov@nginx.com
52584Salexander.borisov@nginx.comNXT_RUBY=${NXT_RUBY=ruby}
53584Salexander.borisov@nginx.comNXT_RUBY_MODULE=${NXT_RUBY_MODULE=${NXT_RUBY}}
54*1489St.nateldemoura@f5.comNXT_RUBY_MOUNTS_HEADER=$NXT_BUILD_DIR/nxt_ruby_mounts.h
55584Salexander.borisov@nginx.com
56584Salexander.borisov@nginx.comnxt_found=no
57584Salexander.borisov@nginx.com
58584Salexander.borisov@nginx.comif /bin/sh -c "$NXT_RUBY -v" >> $NXT_AUTOCONF_ERR 2>&1; then
59584Salexander.borisov@nginx.com
60584Salexander.borisov@nginx.com    NXT_RUBY_RUBYHDRDIR=`$NXT_RUBY -r rbconfig -e 'printf("%s",RbConfig::CONFIG["rubyhdrdir"])'`
61584Salexander.borisov@nginx.com    NXT_RUBY_ARCHHDRDIR=`$NXT_RUBY -r rbconfig -e 'printf("%s",RbConfig::CONFIG["rubyarchhdrdir"])'`
62*1489St.nateldemoura@f5.com    NXT_RUBY_SITEARCHDIR=`$NXT_RUBY -r rbconfig -e 'printf("%s",RbConfig::CONFIG["sitearchhdrdir"])'`
63*1489St.nateldemoura@f5.com    NXT_RUBY_SITEDIR=`$NXT_RUBY -r rbconfig -e 'printf("%s",RbConfig::CONFIG["sitedir"])'`
64*1489St.nateldemoura@f5.com    NXT_RUBY_LIBDIR=`$NXT_RUBY -r rbconfig -e 'printf("%s",RbConfig::CONFIG["rubylibdir"])'`
65*1489St.nateldemoura@f5.com    NXT_RUBY_TOPDIR=`$NXT_RUBY -r rbconfig -e 'printf("%s",RbConfig::CONFIG["topdir"])'`
66*1489St.nateldemoura@f5.com    NXT_RUBY_PREFIXDIR=`$NXT_RUBY -r rbconfig -e 'printf("%s",RbConfig::CONFIG["rubylibprefix"])'`
67*1489St.nateldemoura@f5.com    NXT_RUBY_GEMDIR=`gem environment gemdir`
68*1489St.nateldemoura@f5.com    NXT_RUBY_GEMPATH=`gem environment gempath`
69*1489St.nateldemoura@f5.com
70584Salexander.borisov@nginx.com    NXT_RUBY_INCPATH="-I$NXT_RUBY_ARCHHDRDIR -I$NXT_RUBY_RUBYHDRDIR"
71584Salexander.borisov@nginx.com
72584Salexander.borisov@nginx.com    NXT_RUBY_LIBNAME=`$NXT_RUBY -r rbconfig -e 'printf("%s",RbConfig::CONFIG["RUBY_SO_NAME"])'`
73584Salexander.borisov@nginx.com    NXT_RUBY_LIBSCONF=`$NXT_RUBY -r rbconfig -e 'printf("%s",RbConfig::CONFIG["LIBS"])'`
74863Svbart@nginx.com    NXT_RUBY_LIBS="-l$NXT_RUBY_LIBNAME $NXT_RUBY_LIBSCONF"
75584Salexander.borisov@nginx.com
76863Svbart@nginx.com    nxt_feature="Ruby library"
77584Salexander.borisov@nginx.com    nxt_feature_name=""
78584Salexander.borisov@nginx.com    nxt_feature_run=no
79584Salexander.borisov@nginx.com    nxt_feature_incs="${NXT_RUBY_INCPATH}"
80584Salexander.borisov@nginx.com    nxt_feature_libs="${NXT_RUBY_LIBS}"
81584Salexander.borisov@nginx.com    nxt_feature_test="
82584Salexander.borisov@nginx.com        #include <ruby.h>
83584Salexander.borisov@nginx.com
84584Salexander.borisov@nginx.com        int main() {
85584Salexander.borisov@nginx.com            ruby_init();
86584Salexander.borisov@nginx.com            return ruby_cleanup(0);
87584Salexander.borisov@nginx.com        }"
88584Salexander.borisov@nginx.com
89584Salexander.borisov@nginx.com    . auto/feature
90584Salexander.borisov@nginx.com
91863Svbart@nginx.com    if [ $nxt_found = no ]; then
92863Svbart@nginx.com        NXT_RUBY_LIBPATH=`$NXT_RUBY -r rbconfig -e 'printf("%s",RbConfig::CONFIG["libdir"])'`
93863Svbart@nginx.com        NXT_RUBY_LIBS="-L$NXT_RUBY_LIBPATH -Wl,-rpath,${NXT_RUBY_LIBPATH} $NXT_RUBY_LIBS"
94863Svbart@nginx.com
95863Svbart@nginx.com        nxt_feature="Ruby library in $NXT_RUBY_LIBPATH"
96863Svbart@nginx.com        nxt_feature_name=""
97863Svbart@nginx.com        nxt_feature_run=no
98863Svbart@nginx.com        nxt_feature_incs="${NXT_RUBY_INCPATH}"
99863Svbart@nginx.com        nxt_feature_libs="${NXT_RUBY_LIBS}"
100863Svbart@nginx.com        nxt_feature_test="
101863Svbart@nginx.com            #include <ruby.h>
102863Svbart@nginx.com
103863Svbart@nginx.com            int main() {
104863Svbart@nginx.com                ruby_init();
105863Svbart@nginx.com                return ruby_cleanup(0);
106863Svbart@nginx.com            }"
107863Svbart@nginx.com
108863Svbart@nginx.com        . auto/feature
109863Svbart@nginx.com    fi
110863Svbart@nginx.com
111584Salexander.borisov@nginx.comelse
112584Salexander.borisov@nginx.com    $echo "checking for Ruby ... not found"
113584Salexander.borisov@nginx.comfi
114584Salexander.borisov@nginx.com
115584Salexander.borisov@nginx.comif [ $nxt_found = no ]; then
116584Salexander.borisov@nginx.com    $echo
117584Salexander.borisov@nginx.com    $echo $0: error: no Ruby found.
118584Salexander.borisov@nginx.com    $echo
119584Salexander.borisov@nginx.com    exit 1;
120584Salexander.borisov@nginx.comfi
121584Salexander.borisov@nginx.com
122612Salexander.borisov@nginx.com
123612Salexander.borisov@nginx.comnxt_feature="Ruby version"
124612Salexander.borisov@nginx.comnxt_feature_name=""
125612Salexander.borisov@nginx.comnxt_feature_run=value
126612Salexander.borisov@nginx.comnxt_feature_incs="${NXT_RUBY_INCPATH}"
127612Salexander.borisov@nginx.comnxt_feature_libs="${NXT_RUBY_LIBS}"
128612Salexander.borisov@nginx.comnxt_feature_test="
129612Salexander.borisov@nginx.com    #include <ruby.h>
130612Salexander.borisov@nginx.com    #include <ruby/version.h>
131612Salexander.borisov@nginx.com
132612Salexander.borisov@nginx.com    int main() {
133612Salexander.borisov@nginx.com        printf(\"%s\", ruby_version);
134612Salexander.borisov@nginx.com        return 0;
135612Salexander.borisov@nginx.com    }"
136612Salexander.borisov@nginx.com
137612Salexander.borisov@nginx.com. auto/feature
138612Salexander.borisov@nginx.com
139584Salexander.borisov@nginx.com
140584Salexander.borisov@nginx.comif grep ^$NXT_RUBY_MODULE: $NXT_MAKEFILE 2>&1 > /dev/null; then
141584Salexander.borisov@nginx.com    $echo
142584Salexander.borisov@nginx.com    $echo $0: error: duplicate \"$NXT_RUBY_MODULE\" module configured.
143584Salexander.borisov@nginx.com    $echo
144584Salexander.borisov@nginx.com    exit 1;
145584Salexander.borisov@nginx.comfi
146584Salexander.borisov@nginx.com
147*1489St.nateldemoura@f5.com
148*1489St.nateldemoura@f5.comcat << END > $NXT_RUBY_MOUNTS_HEADER
149*1489St.nateldemoura@f5.com
150*1489St.nateldemoura@f5.comstatic const nxt_fs_mount_t  nxt_ruby_mounts[] = {
151*1489St.nateldemoura@f5.com    {(u_char *) "$NXT_RUBY_RUBYHDRDIR", (u_char *) "$NXT_RUBY_RUBYHDRDIR",
152*1489St.nateldemoura@f5.com     (u_char *) "bind", NXT_MS_BIND | NXT_MS_REC, NULL},
153*1489St.nateldemoura@f5.com    {(u_char *) "$NXT_RUBY_ARCHHDRDIR", (u_char *) "$NXT_RUBY_ARCHHDRDIR",
154*1489St.nateldemoura@f5.com     (u_char *) "bind", NXT_MS_BIND | NXT_MS_REC, NULL},
155*1489St.nateldemoura@f5.com    {(u_char *) "$NXT_RUBY_SITEDIR", (u_char *) "$NXT_RUBY_SITEDIR",
156*1489St.nateldemoura@f5.com     (u_char *) "bind", NXT_MS_BIND | NXT_MS_REC, NULL},
157*1489St.nateldemoura@f5.com    {(u_char *) "$NXT_RUBY_LIBDIR", (u_char *) "$NXT_RUBY_LIBDIR",
158*1489St.nateldemoura@f5.com     (u_char *) "bind", NXT_MS_BIND | NXT_MS_REC, NULL},
159*1489St.nateldemoura@f5.com    {(u_char *) "$NXT_RUBY_GEMDIR", (u_char *) "$NXT_RUBY_GEMDIR",
160*1489St.nateldemoura@f5.com     (u_char *) "bind", NXT_MS_BIND | NXT_MS_REC, NULL},
161*1489St.nateldemoura@f5.com    {(u_char *) "$NXT_RUBY_TOPDIR", (u_char *) "$NXT_RUBY_TOPDIR",
162*1489St.nateldemoura@f5.com     (u_char *) "bind", NXT_MS_BIND | NXT_MS_REC, NULL},
163*1489St.nateldemoura@f5.com    {(u_char *) "$NXT_RUBY_PREFIXDIR", (u_char *) "$NXT_RUBY_PREFIXDIR",
164*1489St.nateldemoura@f5.com     (u_char *) "bind", NXT_MS_BIND | NXT_MS_REC, NULL},
165*1489St.nateldemoura@f5.com
166*1489St.nateldemoura@f5.comEND
167*1489St.nateldemoura@f5.com
168*1489St.nateldemoura@f5.comfor path in `echo $NXT_RUBY_GEMPATH | tr ':' '\n'`; do
169*1489St.nateldemoura@f5.com   $echo "{(u_char *) \"$path\", (u_char *) \"$path\"," >> $NXT_RUBY_MOUNTS_HEADER
170*1489St.nateldemoura@f5.com   $echo "(u_char *) \"bind\", NXT_MS_BIND | NXT_MS_REC, NULL}," >> $NXT_RUBY_MOUNTS_HEADER
171*1489St.nateldemoura@f5.comdone
172*1489St.nateldemoura@f5.com
173*1489St.nateldemoura@f5.com$echo "};" >> $NXT_RUBY_MOUNTS_HEADER
174*1489St.nateldemoura@f5.com
175*1489St.nateldemoura@f5.com
176584Salexander.borisov@nginx.com$echo " + Ruby module: ${NXT_RUBY_MODULE}.unit.so"
177584Salexander.borisov@nginx.com
178584Salexander.borisov@nginx.com. auto/cc/deps
179584Salexander.borisov@nginx.com
180584Salexander.borisov@nginx.com$echo >> $NXT_MAKEFILE
181584Salexander.borisov@nginx.com
182584Salexander.borisov@nginx.comNXT_RUBY_MODULE_SRCS=" \
183584Salexander.borisov@nginx.com    src/ruby/nxt_ruby.c \
184584Salexander.borisov@nginx.com    src/ruby/nxt_ruby_stream_io.c
185584Salexander.borisov@nginx.com"
186584Salexander.borisov@nginx.com
187584Salexander.borisov@nginx.com# The Ruby module object files.
188584Salexander.borisov@nginx.com
189743Smax.romanov@nginx.comnxt_objs=$NXT_BUILD_DIR/src/nxt_unit.o
190584Salexander.borisov@nginx.com
191584Salexander.borisov@nginx.comfor nxt_src in $NXT_RUBY_MODULE_SRCS; do
192584Salexander.borisov@nginx.com
193584Salexander.borisov@nginx.com    nxt_obj=${nxt_src%.c}-$NXT_RUBY_MODULE.o
194584Salexander.borisov@nginx.com    nxt_dep=${nxt_src%.c}-$NXT_RUBY_MODULE.dep
195584Salexander.borisov@nginx.com    nxt_dep_flags=`nxt_gen_dep_flags`
196584Salexander.borisov@nginx.com    nxt_dep_post=`nxt_gen_dep_post`
197584Salexander.borisov@nginx.com    nxt_objs="$nxt_objs $NXT_BUILD_DIR/$nxt_obj"
198584Salexander.borisov@nginx.com
199584Salexander.borisov@nginx.com    cat << END >> $NXT_MAKEFILE
200584Salexander.borisov@nginx.com
2011217Smax.romanov@nginx.com$NXT_BUILD_DIR/$nxt_obj:	$nxt_src $NXT_VERSION_H
202584Salexander.borisov@nginx.com	mkdir -p $NXT_BUILD_DIR/src/ruby
203584Salexander.borisov@nginx.com	\$(CC) -c \$(CFLAGS) \$(NXT_INCS) $NXT_RUBY_INCPATH \\
204584Salexander.borisov@nginx.com	$nxt_dep_flags \\
205584Salexander.borisov@nginx.com	-o $NXT_BUILD_DIR/$nxt_obj $nxt_src
206584Salexander.borisov@nginx.com	$nxt_dep_post
207584Salexander.borisov@nginx.com
208584Salexander.borisov@nginx.com-include $NXT_BUILD_DIR/$nxt_dep
209584Salexander.borisov@nginx.com
210584Salexander.borisov@nginx.comEND
211584Salexander.borisov@nginx.com
212584Salexander.borisov@nginx.comdone
213584Salexander.borisov@nginx.com
214584Salexander.borisov@nginx.comcat << END >> $NXT_MAKEFILE
215584Salexander.borisov@nginx.com
216584Salexander.borisov@nginx.com.PHONY: ${NXT_RUBY_MODULE}
217584Salexander.borisov@nginx.com.PHONY: ${NXT_RUBY_MODULE}-install
218584Salexander.borisov@nginx.com.PHONY: ${NXT_RUBY_MODULE}-uninstall
219584Salexander.borisov@nginx.com
220584Salexander.borisov@nginx.comall: ${NXT_RUBY_MODULE}
221584Salexander.borisov@nginx.com
222584Salexander.borisov@nginx.com${NXT_RUBY_MODULE}:	$NXT_BUILD_DIR/${NXT_RUBY_MODULE}.unit.so
223584Salexander.borisov@nginx.com
224584Salexander.borisov@nginx.com$NXT_BUILD_DIR/${NXT_RUBY_MODULE}.unit.so:	$nxt_objs
225584Salexander.borisov@nginx.com	\$(NXT_MODULE_LINK) -o $NXT_BUILD_DIR/${NXT_RUBY_MODULE}.unit.so \\
226584Salexander.borisov@nginx.com	$nxt_objs $NXT_RUBY_LIBS $NXT_LD_OPT
227584Salexander.borisov@nginx.com
228584Salexander.borisov@nginx.com
229584Salexander.borisov@nginx.cominstall: ${NXT_RUBY_MODULE}-install
230584Salexander.borisov@nginx.com
231706Sigor@sysoev.ru${NXT_RUBY_MODULE}-install: ${NXT_RUBY_MODULE} install-check
232584Salexander.borisov@nginx.com	install -d \$(DESTDIR)$NXT_MODULES
233584Salexander.borisov@nginx.com	install -p $NXT_BUILD_DIR/${NXT_RUBY_MODULE}.unit.so \\
234584Salexander.borisov@nginx.com		\$(DESTDIR)$NXT_MODULES/
235584Salexander.borisov@nginx.com
236584Salexander.borisov@nginx.com
237584Salexander.borisov@nginx.comuninstall: ${NXT_RUBY_MODULE}-uninstall
238584Salexander.borisov@nginx.com
239584Salexander.borisov@nginx.com${NXT_RUBY_MODULE}-uninstall:
240584Salexander.borisov@nginx.com	rm -f \$(DESTDIR)$NXT_MODULES/${NXT_RUBY_MODULE}.unit.so
241584Salexander.borisov@nginx.com	@rmdir -p \$(DESTDIR)$NXT_MODULES 2>/dev/null || true
242584Salexander.borisov@nginx.com
243584Salexander.borisov@nginx.comEND
244