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}} 54584Salexander.borisov@nginx.com 55584Salexander.borisov@nginx.comnxt_found=no 56584Salexander.borisov@nginx.com 57584Salexander.borisov@nginx.comif /bin/sh -c "$NXT_RUBY -v" >> $NXT_AUTOCONF_ERR 2>&1; then 58584Salexander.borisov@nginx.com 59*2080Salx.manpages@gmail.com NXT_RUBY_CFLAGS= 601539Svbart@nginx.com NXT_RUBY_RUBYHDRDIR=`$NXT_RUBY -rrbconfig -e 'print RbConfig::CONFIG["rubyhdrdir"]'` 611539Svbart@nginx.com NXT_RUBY_ARCHHDRDIR=`$NXT_RUBY -rrbconfig -e 'print RbConfig::CONFIG["rubyarchhdrdir"]'` 621539Svbart@nginx.com NXT_RUBY_SITEDIR=`$NXT_RUBY -rrbconfig -e 'print RbConfig::CONFIG["sitedir"]'` 631539Svbart@nginx.com NXT_RUBY_LIBDIR=`$NXT_RUBY -rrbconfig -e 'print RbConfig::CONFIG["rubylibdir"]'` 641539Svbart@nginx.com NXT_RUBY_TOPDIR=`$NXT_RUBY -rrbconfig -e 'print RbConfig::CONFIG["topdir"]'` 651539Svbart@nginx.com NXT_RUBY_PREFIXDIR=`$NXT_RUBY -rrbconfig -e 'print RbConfig::CONFIG["rubylibprefix"]'` 661540Svbart@nginx.com 671540Svbart@nginx.com NXT_RUBY_GEMPATH=`$NXT_RUBY -rrubygems -e 'print Gem.default_path().join(":")'` 681489St.nateldemoura@f5.com 69584Salexander.borisov@nginx.com NXT_RUBY_INCPATH="-I$NXT_RUBY_ARCHHDRDIR -I$NXT_RUBY_RUBYHDRDIR" 70584Salexander.borisov@nginx.com 711539Svbart@nginx.com NXT_RUBY_LIBNAME=`$NXT_RUBY -rrbconfig -e 'print RbConfig::CONFIG["RUBY_SO_NAME"]'` 721539Svbart@nginx.com NXT_RUBY_LIBSCONF=`$NXT_RUBY -rrbconfig -e 'print RbConfig::CONFIG["LIBS"]'` 731539Svbart@nginx.com NXT_RUBY_LIBPATH=`$NXT_RUBY -rrbconfig -e 'print RbConfig::CONFIG["libdir"]'` 74863Svbart@nginx.com NXT_RUBY_LIBS="-l$NXT_RUBY_LIBNAME $NXT_RUBY_LIBSCONF" 75584Salexander.borisov@nginx.com 76*2080Salx.manpages@gmail.com if [ $NXT_CC_NAME = clang ]; then 77*2080Salx.manpages@gmail.com # Workaround Clang bug 78*2080Salx.manpages@gmail.com nxt_feature="-fdeclspec" 79*2080Salx.manpages@gmail.com nxt_feature_name= 80*2080Salx.manpages@gmail.com nxt_feature_run= 81*2080Salx.manpages@gmail.com nxt_feature_incs="-fdeclspec" 82*2080Salx.manpages@gmail.com nxt_feature_libs= 83*2080Salx.manpages@gmail.com nxt_feature_test="#include <stdlib.h> 84*2080Salx.manpages@gmail.com 85*2080Salx.manpages@gmail.com __declspec(noreturn) static void f(void); 86*2080Salx.manpages@gmail.com 87*2080Salx.manpages@gmail.com static void f(void) { 88*2080Salx.manpages@gmail.com exit(0); 89*2080Salx.manpages@gmail.com } 90*2080Salx.manpages@gmail.com 91*2080Salx.manpages@gmail.com int main(void) { 92*2080Salx.manpages@gmail.com f(); 93*2080Salx.manpages@gmail.com }" 94*2080Salx.manpages@gmail.com . auto/feature 95*2080Salx.manpages@gmail.com 96*2080Salx.manpages@gmail.com if [ $nxt_found = yes ]; then 97*2080Salx.manpages@gmail.com NXT_RUBY_CFLAGS="$NXT_RUBY_CFLAGS -fdeclspec" 98*2080Salx.manpages@gmail.com fi 99*2080Salx.manpages@gmail.com fi 100*2080Salx.manpages@gmail.com 101863Svbart@nginx.com nxt_feature="Ruby library" 102584Salexander.borisov@nginx.com nxt_feature_name="" 1031537Svbart@nginx.com nxt_feature_run=value 104584Salexander.borisov@nginx.com nxt_feature_incs="${NXT_RUBY_INCPATH}" 105584Salexander.borisov@nginx.com nxt_feature_libs="${NXT_RUBY_LIBS}" 106584Salexander.borisov@nginx.com nxt_feature_test=" 107584Salexander.borisov@nginx.com #include <ruby.h> 108584Salexander.borisov@nginx.com 109584Salexander.borisov@nginx.com int main() { 1101537Svbart@nginx.com static const char *argv[3] = { 1111537Svbart@nginx.com \"NGINX_Unit\", \"-rrbconfig\", 1121537Svbart@nginx.com \"-eprint RbConfig::CONFIG['libdir']\" 1131537Svbart@nginx.com }; 1141537Svbart@nginx.com 1151537Svbart@nginx.com RUBY_INIT_STACK; 116584Salexander.borisov@nginx.com ruby_init(); 1171537Svbart@nginx.com return ruby_run_node(ruby_options(3, (char **) argv)); 118584Salexander.borisov@nginx.com }" 119584Salexander.borisov@nginx.com 120584Salexander.borisov@nginx.com . auto/feature 121584Salexander.borisov@nginx.com 1221537Svbart@nginx.com if [ "$nxt_feature_value" != "$NXT_RUBY_LIBPATH" ]; then 123863Svbart@nginx.com NXT_RUBY_LIBS="-L$NXT_RUBY_LIBPATH -Wl,-rpath,${NXT_RUBY_LIBPATH} $NXT_RUBY_LIBS" 124863Svbart@nginx.com 125863Svbart@nginx.com nxt_feature="Ruby library in $NXT_RUBY_LIBPATH" 126863Svbart@nginx.com nxt_feature_name="" 127863Svbart@nginx.com nxt_feature_run=no 128863Svbart@nginx.com nxt_feature_incs="${NXT_RUBY_INCPATH}" 129863Svbart@nginx.com nxt_feature_libs="${NXT_RUBY_LIBS}" 130863Svbart@nginx.com nxt_feature_test=" 131863Svbart@nginx.com #include <ruby.h> 132863Svbart@nginx.com 133863Svbart@nginx.com int main() { 134863Svbart@nginx.com ruby_init(); 135863Svbart@nginx.com return ruby_cleanup(0); 136863Svbart@nginx.com }" 137863Svbart@nginx.com 138863Svbart@nginx.com . auto/feature 139863Svbart@nginx.com fi 140863Svbart@nginx.com 141584Salexander.borisov@nginx.comelse 142584Salexander.borisov@nginx.com $echo "checking for Ruby ... not found" 143584Salexander.borisov@nginx.comfi 144584Salexander.borisov@nginx.com 145584Salexander.borisov@nginx.comif [ $nxt_found = no ]; then 146584Salexander.borisov@nginx.com $echo 147584Salexander.borisov@nginx.com $echo $0: error: no Ruby found. 148584Salexander.borisov@nginx.com $echo 149584Salexander.borisov@nginx.com exit 1; 150584Salexander.borisov@nginx.comfi 151584Salexander.borisov@nginx.com 152612Salexander.borisov@nginx.com 153612Salexander.borisov@nginx.comnxt_feature="Ruby version" 154612Salexander.borisov@nginx.comnxt_feature_name="" 155612Salexander.borisov@nginx.comnxt_feature_run=value 156612Salexander.borisov@nginx.comnxt_feature_incs="${NXT_RUBY_INCPATH}" 157612Salexander.borisov@nginx.comnxt_feature_libs="${NXT_RUBY_LIBS}" 158612Salexander.borisov@nginx.comnxt_feature_test=" 159612Salexander.borisov@nginx.com #include <ruby.h> 160612Salexander.borisov@nginx.com #include <ruby/version.h> 161612Salexander.borisov@nginx.com 162612Salexander.borisov@nginx.com int main() { 163612Salexander.borisov@nginx.com printf(\"%s\", ruby_version); 164612Salexander.borisov@nginx.com return 0; 165612Salexander.borisov@nginx.com }" 166612Salexander.borisov@nginx.com 167612Salexander.borisov@nginx.com. auto/feature 168612Salexander.borisov@nginx.com 169584Salexander.borisov@nginx.com 170584Salexander.borisov@nginx.comif grep ^$NXT_RUBY_MODULE: $NXT_MAKEFILE 2>&1 > /dev/null; then 171584Salexander.borisov@nginx.com $echo 172584Salexander.borisov@nginx.com $echo $0: error: duplicate \"$NXT_RUBY_MODULE\" module configured. 173584Salexander.borisov@nginx.com $echo 174584Salexander.borisov@nginx.com exit 1; 175584Salexander.borisov@nginx.comfi 176584Salexander.borisov@nginx.com 1771489St.nateldemoura@f5.com 1781532St.nateldemoura@f5.comNXT_RUBY_MOUNTS_HEADER=nxt_${NXT_RUBY_MODULE}_mounts.h 1791532St.nateldemoura@f5.comNXT_RUBY_MOUNTS_PATH=$NXT_BUILD_DIR/$NXT_RUBY_MOUNTS_HEADER 1801532St.nateldemoura@f5.com 1811532St.nateldemoura@f5.comcat << END > $NXT_RUBY_MOUNTS_PATH 1821489St.nateldemoura@f5.com 1831489St.nateldemoura@f5.comstatic const nxt_fs_mount_t nxt_ruby_mounts[] = { 1841489St.nateldemoura@f5.com {(u_char *) "$NXT_RUBY_RUBYHDRDIR", (u_char *) "$NXT_RUBY_RUBYHDRDIR", 1851673St.nateldemoura@f5.com NXT_FS_BIND, (u_char *) "bind", 0, NULL, 1, 1}, 1861489St.nateldemoura@f5.com {(u_char *) "$NXT_RUBY_ARCHHDRDIR", (u_char *) "$NXT_RUBY_ARCHHDRDIR", 1871673St.nateldemoura@f5.com NXT_FS_BIND, (u_char *) "bind", 0, NULL, 1, 1}, 1881489St.nateldemoura@f5.com {(u_char *) "$NXT_RUBY_SITEDIR", (u_char *) "$NXT_RUBY_SITEDIR", 1891673St.nateldemoura@f5.com NXT_FS_BIND, (u_char *) "bind", 0, NULL, 1, 1}, 1901489St.nateldemoura@f5.com {(u_char *) "$NXT_RUBY_LIBDIR", (u_char *) "$NXT_RUBY_LIBDIR", 1911673St.nateldemoura@f5.com NXT_FS_BIND, (u_char *) "bind", 0, NULL, 1, 1}, 1921489St.nateldemoura@f5.com {(u_char *) "$NXT_RUBY_TOPDIR", (u_char *) "$NXT_RUBY_TOPDIR", 1931673St.nateldemoura@f5.com NXT_FS_BIND, (u_char *) "bind", 0, NULL, 1, 1}, 1941489St.nateldemoura@f5.com {(u_char *) "$NXT_RUBY_PREFIXDIR", (u_char *) "$NXT_RUBY_PREFIXDIR", 1951673St.nateldemoura@f5.com NXT_FS_BIND, (u_char *) "bind", 0, NULL, 1, 1}, 1961489St.nateldemoura@f5.com 1971489St.nateldemoura@f5.comEND 1981489St.nateldemoura@f5.com 1991489St.nateldemoura@f5.comfor path in `echo $NXT_RUBY_GEMPATH | tr ':' '\n'`; do 2001532St.nateldemoura@f5.com $echo "{(u_char *) \"$path\", (u_char *) \"$path\"," >> $NXT_RUBY_MOUNTS_PATH 2011673St.nateldemoura@f5.com $echo "NXT_FS_BIND, (u_char *) \"bind\", 0, NULL, 1, 1}," >> $NXT_RUBY_MOUNTS_PATH 2021489St.nateldemoura@f5.comdone 2031489St.nateldemoura@f5.com 2041532St.nateldemoura@f5.com$echo "};" >> $NXT_RUBY_MOUNTS_PATH 2051489St.nateldemoura@f5.com 2061489St.nateldemoura@f5.com 207584Salexander.borisov@nginx.com$echo " + Ruby module: ${NXT_RUBY_MODULE}.unit.so" 208584Salexander.borisov@nginx.com 209584Salexander.borisov@nginx.com. auto/cc/deps 210584Salexander.borisov@nginx.com 211584Salexander.borisov@nginx.com$echo >> $NXT_MAKEFILE 212584Salexander.borisov@nginx.com 213584Salexander.borisov@nginx.comNXT_RUBY_MODULE_SRCS=" \ 214584Salexander.borisov@nginx.com src/ruby/nxt_ruby.c \ 215584Salexander.borisov@nginx.com src/ruby/nxt_ruby_stream_io.c 216584Salexander.borisov@nginx.com" 217584Salexander.borisov@nginx.com 218584Salexander.borisov@nginx.com# The Ruby module object files. 219584Salexander.borisov@nginx.com 220743Smax.romanov@nginx.comnxt_objs=$NXT_BUILD_DIR/src/nxt_unit.o 221584Salexander.borisov@nginx.com 222584Salexander.borisov@nginx.comfor nxt_src in $NXT_RUBY_MODULE_SRCS; do 223584Salexander.borisov@nginx.com 224584Salexander.borisov@nginx.com nxt_obj=${nxt_src%.c}-$NXT_RUBY_MODULE.o 225584Salexander.borisov@nginx.com nxt_dep=${nxt_src%.c}-$NXT_RUBY_MODULE.dep 226584Salexander.borisov@nginx.com nxt_dep_flags=`nxt_gen_dep_flags` 227584Salexander.borisov@nginx.com nxt_dep_post=`nxt_gen_dep_post` 228584Salexander.borisov@nginx.com nxt_objs="$nxt_objs $NXT_BUILD_DIR/$nxt_obj" 229584Salexander.borisov@nginx.com 230584Salexander.borisov@nginx.com cat << END >> $NXT_MAKEFILE 231584Salexander.borisov@nginx.com 2321217Smax.romanov@nginx.com$NXT_BUILD_DIR/$nxt_obj: $nxt_src $NXT_VERSION_H 233584Salexander.borisov@nginx.com mkdir -p $NXT_BUILD_DIR/src/ruby 234*2080Salx.manpages@gmail.com \$(CC) -c \$(CFLAGS) $NXT_RUBY_CFLAGS -DNXT_RUBY_MOUNTS_H=\"$NXT_RUBY_MOUNTS_HEADER\" \\ 2351532St.nateldemoura@f5.com \$(NXT_INCS) $NXT_RUBY_INCPATH \\ 236584Salexander.borisov@nginx.com $nxt_dep_flags \\ 237584Salexander.borisov@nginx.com -o $NXT_BUILD_DIR/$nxt_obj $nxt_src 238584Salexander.borisov@nginx.com $nxt_dep_post 239584Salexander.borisov@nginx.com 240584Salexander.borisov@nginx.com-include $NXT_BUILD_DIR/$nxt_dep 241584Salexander.borisov@nginx.com 242584Salexander.borisov@nginx.comEND 243584Salexander.borisov@nginx.com 244584Salexander.borisov@nginx.comdone 245584Salexander.borisov@nginx.com 246584Salexander.borisov@nginx.comcat << END >> $NXT_MAKEFILE 247584Salexander.borisov@nginx.com 248584Salexander.borisov@nginx.com.PHONY: ${NXT_RUBY_MODULE} 249584Salexander.borisov@nginx.com.PHONY: ${NXT_RUBY_MODULE}-install 250584Salexander.borisov@nginx.com.PHONY: ${NXT_RUBY_MODULE}-uninstall 251584Salexander.borisov@nginx.com 252584Salexander.borisov@nginx.comall: ${NXT_RUBY_MODULE} 253584Salexander.borisov@nginx.com 254584Salexander.borisov@nginx.com${NXT_RUBY_MODULE}: $NXT_BUILD_DIR/${NXT_RUBY_MODULE}.unit.so 255584Salexander.borisov@nginx.com 256584Salexander.borisov@nginx.com$NXT_BUILD_DIR/${NXT_RUBY_MODULE}.unit.so: $nxt_objs 257584Salexander.borisov@nginx.com \$(NXT_MODULE_LINK) -o $NXT_BUILD_DIR/${NXT_RUBY_MODULE}.unit.so \\ 258584Salexander.borisov@nginx.com $nxt_objs $NXT_RUBY_LIBS $NXT_LD_OPT 259584Salexander.borisov@nginx.com 260584Salexander.borisov@nginx.com 261584Salexander.borisov@nginx.cominstall: ${NXT_RUBY_MODULE}-install 262584Salexander.borisov@nginx.com 263706Sigor@sysoev.ru${NXT_RUBY_MODULE}-install: ${NXT_RUBY_MODULE} install-check 264584Salexander.borisov@nginx.com install -d \$(DESTDIR)$NXT_MODULES 265584Salexander.borisov@nginx.com install -p $NXT_BUILD_DIR/${NXT_RUBY_MODULE}.unit.so \\ 266584Salexander.borisov@nginx.com \$(DESTDIR)$NXT_MODULES/ 267584Salexander.borisov@nginx.com 268584Salexander.borisov@nginx.com 269584Salexander.borisov@nginx.comuninstall: ${NXT_RUBY_MODULE}-uninstall 270584Salexander.borisov@nginx.com 271584Salexander.borisov@nginx.com${NXT_RUBY_MODULE}-uninstall: 272584Salexander.borisov@nginx.com rm -f \$(DESTDIR)$NXT_MODULES/${NXT_RUBY_MODULE}.unit.so 273584Salexander.borisov@nginx.com @rmdir -p \$(DESTDIR)$NXT_MODULES 2>/dev/null || true 274584Salexander.borisov@nginx.com 275584Salexander.borisov@nginx.comEND 276