1 2# Copyright (C) Alexander Borisov 3# Copyright (C) NGINX, Inc. 4 5 6shift 7 8for nxt_option; do 9 10 case "$nxt_option" in 11 -*=*) value=`echo "$nxt_option" | sed -e 's/[-_a-zA-Z0-9]*=//'` ;; 12 *) value="" ;; 13 esac 14 15 case "$nxt_option" in 16 --ruby=*) NXT_RUBY="$value" ;; 17 --module=*) NXT_RUBY_MODULE="$value" ;; 18 19 --help) 20 cat << END 21 22 --ruby=FILE set ruby executable, default: ruby 23 --module=NAME set unit ruby module name 24 25END 26 exit 0 27 ;; 28 29 *) 30 echo 31 echo $0: error: invalid Ruby option \"$nxt_option\" 32 echo 33 exit 1 34 ;; 35 esac 36 37done 38 39 40if [ ! -f $NXT_AUTOCONF_DATA ]; then 41 echo 42 echo Please run common $0 before configuring module \"$nxt_module\". 43 echo 44 exit 1 45fi 46 47. $NXT_AUTOCONF_DATA 48 49$echo "configuring Ruby module" 50$echo "configuring Ruby module ..." >> $NXT_AUTOCONF_ERR 51 52NXT_RUBY=${NXT_RUBY=ruby} 53NXT_RUBY_MODULE=${NXT_RUBY_MODULE=${NXT_RUBY}} 54NXT_RUBY_MOUNTS_HEADER=$NXT_BUILD_DIR/nxt_ruby_mounts.h 55 56nxt_found=no 57 58if /bin/sh -c "$NXT_RUBY -v" >> $NXT_AUTOCONF_ERR 2>&1; then 59 60 NXT_RUBY_RUBYHDRDIR=`$NXT_RUBY -r rbconfig -e 'printf("%s",RbConfig::CONFIG["rubyhdrdir"])'` 61 NXT_RUBY_ARCHHDRDIR=`$NXT_RUBY -r rbconfig -e 'printf("%s",RbConfig::CONFIG["rubyarchhdrdir"])'` 62 NXT_RUBY_SITEARCHDIR=`$NXT_RUBY -r rbconfig -e 'printf("%s",RbConfig::CONFIG["sitearchhdrdir"])'` 63 NXT_RUBY_SITEDIR=`$NXT_RUBY -r rbconfig -e 'printf("%s",RbConfig::CONFIG["sitedir"])'` 64 NXT_RUBY_LIBDIR=`$NXT_RUBY -r rbconfig -e 'printf("%s",RbConfig::CONFIG["rubylibdir"])'` 65 NXT_RUBY_TOPDIR=`$NXT_RUBY -r rbconfig -e 'printf("%s",RbConfig::CONFIG["topdir"])'` 66 NXT_RUBY_PREFIXDIR=`$NXT_RUBY -r rbconfig -e 'printf("%s",RbConfig::CONFIG["rubylibprefix"])'` 67 NXT_RUBY_GEMDIR=`gem environment gemdir` 68 NXT_RUBY_GEMPATH=`gem environment gempath` 69 70 NXT_RUBY_INCPATH="-I$NXT_RUBY_ARCHHDRDIR -I$NXT_RUBY_RUBYHDRDIR" 71 72 NXT_RUBY_LIBNAME=`$NXT_RUBY -r rbconfig -e 'printf("%s",RbConfig::CONFIG["RUBY_SO_NAME"])'` 73 NXT_RUBY_LIBSCONF=`$NXT_RUBY -r rbconfig -e 'printf("%s",RbConfig::CONFIG["LIBS"])'` 74 NXT_RUBY_LIBS="-l$NXT_RUBY_LIBNAME $NXT_RUBY_LIBSCONF" 75 76 nxt_feature="Ruby library" 77 nxt_feature_name="" 78 nxt_feature_run=no 79 nxt_feature_incs="${NXT_RUBY_INCPATH}" 80 nxt_feature_libs="${NXT_RUBY_LIBS}" 81 nxt_feature_test=" 82 #include <ruby.h> 83 84 int main() { 85 ruby_init(); 86 return ruby_cleanup(0); 87 }" 88 89 . auto/feature 90 91 if [ $nxt_found = no ]; then 92 NXT_RUBY_LIBPATH=`$NXT_RUBY -r rbconfig -e 'printf("%s",RbConfig::CONFIG["libdir"])'` 93 NXT_RUBY_LIBS="-L$NXT_RUBY_LIBPATH -Wl,-rpath,${NXT_RUBY_LIBPATH} $NXT_RUBY_LIBS" 94 95 nxt_feature="Ruby library in $NXT_RUBY_LIBPATH" 96 nxt_feature_name="" 97 nxt_feature_run=no 98 nxt_feature_incs="${NXT_RUBY_INCPATH}" 99 nxt_feature_libs="${NXT_RUBY_LIBS}" 100 nxt_feature_test=" 101 #include <ruby.h> 102 103 int main() { 104 ruby_init(); 105 return ruby_cleanup(0); 106 }" 107 108 . auto/feature 109 fi 110 111else 112 $echo "checking for Ruby ... not found" 113fi 114 115if [ $nxt_found = no ]; then 116 $echo 117 $echo $0: error: no Ruby found. 118 $echo 119 exit 1; 120fi 121 122 123nxt_feature="Ruby version" 124nxt_feature_name="" 125nxt_feature_run=value 126nxt_feature_incs="${NXT_RUBY_INCPATH}" 127nxt_feature_libs="${NXT_RUBY_LIBS}" 128nxt_feature_test=" 129 #include <ruby.h> 130 #include <ruby/version.h> 131 132 int main() { 133 printf(\"%s\", ruby_version); 134 return 0; 135 }" 136 137. auto/feature 138 139 140if grep ^$NXT_RUBY_MODULE: $NXT_MAKEFILE 2>&1 > /dev/null; then 141 $echo 142 $echo $0: error: duplicate \"$NXT_RUBY_MODULE\" module configured. 143 $echo 144 exit 1; 145fi 146 147 148cat << END > $NXT_RUBY_MOUNTS_HEADER 149 150static const nxt_fs_mount_t nxt_ruby_mounts[] = { 151 {(u_char *) "$NXT_RUBY_RUBYHDRDIR", (u_char *) "$NXT_RUBY_RUBYHDRDIR", 152 (u_char *) "bind", NXT_MS_BIND | NXT_MS_REC, NULL}, 153 {(u_char *) "$NXT_RUBY_ARCHHDRDIR", (u_char *) "$NXT_RUBY_ARCHHDRDIR", 154 (u_char *) "bind", NXT_MS_BIND | NXT_MS_REC, NULL}, 155 {(u_char *) "$NXT_RUBY_SITEDIR", (u_char *) "$NXT_RUBY_SITEDIR", 156 (u_char *) "bind", NXT_MS_BIND | NXT_MS_REC, NULL}, 157 {(u_char *) "$NXT_RUBY_LIBDIR", (u_char *) "$NXT_RUBY_LIBDIR", 158 (u_char *) "bind", NXT_MS_BIND | NXT_MS_REC, NULL}, 159 {(u_char *) "$NXT_RUBY_GEMDIR", (u_char *) "$NXT_RUBY_GEMDIR", 160 (u_char *) "bind", NXT_MS_BIND | NXT_MS_REC, NULL}, 161 {(u_char *) "$NXT_RUBY_TOPDIR", (u_char *) "$NXT_RUBY_TOPDIR", 162 (u_char *) "bind", NXT_MS_BIND | NXT_MS_REC, NULL}, 163 {(u_char *) "$NXT_RUBY_PREFIXDIR", (u_char *) "$NXT_RUBY_PREFIXDIR", 164 (u_char *) "bind", NXT_MS_BIND | NXT_MS_REC, NULL}, 165 166END 167 168for path in `echo $NXT_RUBY_GEMPATH | tr ':' '\n'`; do 169 $echo "{(u_char *) \"$path\", (u_char *) \"$path\"," >> $NXT_RUBY_MOUNTS_HEADER 170 $echo "(u_char *) \"bind\", NXT_MS_BIND | NXT_MS_REC, NULL}," >> $NXT_RUBY_MOUNTS_HEADER 171done 172 173$echo "};" >> $NXT_RUBY_MOUNTS_HEADER 174 175 176$echo " + Ruby module: ${NXT_RUBY_MODULE}.unit.so" 177 178. auto/cc/deps 179 180$echo >> $NXT_MAKEFILE 181 182NXT_RUBY_MODULE_SRCS=" \ 183 src/ruby/nxt_ruby.c \ 184 src/ruby/nxt_ruby_stream_io.c 185" 186 187# The Ruby module object files. 188 189nxt_objs=$NXT_BUILD_DIR/src/nxt_unit.o 190 191for nxt_src in $NXT_RUBY_MODULE_SRCS; do 192 193 nxt_obj=${nxt_src%.c}-$NXT_RUBY_MODULE.o 194 nxt_dep=${nxt_src%.c}-$NXT_RUBY_MODULE.dep 195 nxt_dep_flags=`nxt_gen_dep_flags` 196 nxt_dep_post=`nxt_gen_dep_post` 197 nxt_objs="$nxt_objs $NXT_BUILD_DIR/$nxt_obj" 198 199 cat << END >> $NXT_MAKEFILE 200 201$NXT_BUILD_DIR/$nxt_obj: $nxt_src $NXT_VERSION_H 202 mkdir -p $NXT_BUILD_DIR/src/ruby 203 \$(CC) -c \$(CFLAGS) \$(NXT_INCS) $NXT_RUBY_INCPATH \\ 204 $nxt_dep_flags \\ 205 -o $NXT_BUILD_DIR/$nxt_obj $nxt_src 206 $nxt_dep_post 207 208-include $NXT_BUILD_DIR/$nxt_dep 209 210END 211 212done 213 214cat << END >> $NXT_MAKEFILE 215 216.PHONY: ${NXT_RUBY_MODULE} 217.PHONY: ${NXT_RUBY_MODULE}-install 218.PHONY: ${NXT_RUBY_MODULE}-uninstall 219 220all: ${NXT_RUBY_MODULE} 221 222${NXT_RUBY_MODULE}: $NXT_BUILD_DIR/${NXT_RUBY_MODULE}.unit.so 223 224$NXT_BUILD_DIR/${NXT_RUBY_MODULE}.unit.so: $nxt_objs 225 \$(NXT_MODULE_LINK) -o $NXT_BUILD_DIR/${NXT_RUBY_MODULE}.unit.so \\ 226 $nxt_objs $NXT_RUBY_LIBS $NXT_LD_OPT 227 228 229install: ${NXT_RUBY_MODULE}-install 230 231${NXT_RUBY_MODULE}-install: ${NXT_RUBY_MODULE} install-check 232 install -d \$(DESTDIR)$NXT_MODULES 233 install -p $NXT_BUILD_DIR/${NXT_RUBY_MODULE}.unit.so \\ 234 \$(DESTDIR)$NXT_MODULES/ 235 236 237uninstall: ${NXT_RUBY_MODULE}-uninstall 238 239${NXT_RUBY_MODULE}-uninstall: 240 rm -f \$(DESTDIR)$NXT_MODULES/${NXT_RUBY_MODULE}.unit.so 241 @rmdir -p \$(DESTDIR)$NXT_MODULES 2>/dev/null || true 242 243END 244