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 --perl=*) NXT_PERL="$value" ;; 17 --module=*) NXT_PERL_MODULE="$value" ;; 18 19 --help) 20 cat << END 21 22 --perl=FILE set perl executable, default: perl 23 --module=NAME set unit perl module name 24 25END 26 exit 0 27 ;; 28 29 *) 30 echo 31 echo $0: error: invalid Perl 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 Perl module" 50$echo "configuring Perl module ..." >> $NXT_AUTOCONF_ERR 51 52NXT_PERL=${NXT_PERL=perl} 53NXT_PERL_MODULE=${NXT_PERL_MODULE=${NXT_PERL##*/}} 54 55nxt_found=no 56 57if /bin/sh -c "$NXT_PERL -MConfig -e 'print \"Perl version: \", 58 \$Config{version}, \"\\n\"'" >> $NXT_AUTOCONF_ERR 2>&1; then 59 60 NXT_PERL_INCLUDE=`$NXT_PERL -MExtUtils::Embed -e perl_inc | sed -e 's/^ //;s/ $//'` 61 NXT_PERL_LDOPTS=`$NXT_PERL -MExtUtils::Embed -e ldopts | sed -e 's/^ //;s/ $//'` 62 63 if [ "$NXT_SYSTEM" = "Darwin" ]; then 64 # OS X system perl wants to link universal binaries 65 NXT_PERL_LDOPTS=`echo $NXT_PERL_LDOPTS \ 66 | sed -e 's/-arch i386//' -e 's/-arch x86_64//'` 67 fi 68 69 nxt_feature="Perl" 70 nxt_feature_name="" 71 nxt_feature_run=no 72 nxt_feature_incs="${NXT_PERL_INCLUDE}" 73 nxt_feature_libs="${NXT_PERL_LDOPTS}" 74 nxt_feature_test=" 75 #define _GNU_SOURCE 76 #include <EXTERN.h> 77 #include <perl.h> 78 79 static PerlInterpreter *my_perl; 80 81 int main() { 82 char argv[] = \"\\0-e\\00\"; 83 char *embedding[] = { &argv[0], &argv[1], &argv[4] }; 84 85 int pargc = 0; 86 char **pargv = NULL, **penv = NULL; 87 PERL_SYS_INIT3(&pargc, &pargv, &penv); 88 89 my_perl = perl_alloc(); 90 perl_construct(my_perl); 91 perl_parse(my_perl, NULL, 3, embedding, NULL); 92 PL_exit_flags |= PERL_EXIT_DESTRUCT_END; 93 perl_run(my_perl); 94 95 perl_destruct(my_perl); 96 perl_free(my_perl); 97 PERL_SYS_TERM(); 98 99 return 0; 100 }" 101 102 . auto/feature 103 104else 105 $echo "checking for Perl ... not found" 106fi 107 108if [ $nxt_found = no ]; then 109 $echo 110 $echo $0: error: no Perl found. 111 $echo 112 exit 1; 113fi 114 115 116nxt_feature="Perl version" 117nxt_feature_name="" 118nxt_feature_run=value 119nxt_feature_incs="${NXT_PERL_INCLUDE}" 120nxt_feature_libs="${NXT_PERL_LDOPTS}" 121nxt_feature_test=" 122 #define _GNU_SOURCE 123 #include <EXTERN.h> 124 #include <perl.h> 125 126 int main() { 127 printf(\"%s\", PERL_VERSION_STRING); 128 return 0; 129 }" 130 131. auto/feature 132 133 134if grep ^$NXT_PERL_MODULE: $NXT_MAKEFILE 2>&1 > /dev/null; then 135 $echo 136 $echo $0: error: duplicate \"$NXT_PERL_MODULE\" module configured. 137 $echo 138 exit 1; 139fi 140 141$echo " + Perl module: ${NXT_PERL_MODULE}.unit.so" 142 143. auto/cc/deps 144 145$echo >> $NXT_MAKEFILE 146 147NXT_PERL_MODULE_SRCS=" \ 148 src/perl/nxt_perl_psgi.c \ 149 src/perl/nxt_perl_psgi_layer.c 150" 151 152# The Perl module object files. 153 154nxt_objs=$NXT_BUILD_DIR/src/nxt_unit.o 155 156for nxt_src in $NXT_PERL_MODULE_SRCS; do 157 158 nxt_obj=${nxt_src%.c}-$NXT_PERL_MODULE.o 159 nxt_dep=${nxt_src%.c}-$NXT_PERL_MODULE.dep 160 nxt_dep_flags=`nxt_gen_dep_flags` 161 nxt_dep_post=`nxt_gen_dep_post` 162 nxt_objs="$nxt_objs $NXT_BUILD_DIR/$nxt_obj" 163 164 cat << END >> $NXT_MAKEFILE 165 166$NXT_BUILD_DIR/$nxt_obj: $nxt_src 167 mkdir -p $NXT_BUILD_DIR/src/perl 168 \$(CC) -c \$(CFLAGS) \$(NXT_INCS) $NXT_PERL_INCLUDE \\ 169 $nxt_dep_flags \\ 170 -o $NXT_BUILD_DIR/$nxt_obj $nxt_src 171 $nxt_dep_post 172 173-include $NXT_BUILD_DIR/$nxt_dep 174 175END 176 177done 178 179cat << END >> $NXT_MAKEFILE 180 181.PHONY: ${NXT_PERL_MODULE} 182.PHONY: ${NXT_PERL_MODULE}-install 183.PHONY: ${NXT_PERL_MODULE}-uninstall 184 185all: ${NXT_PERL_MODULE} 186 187${NXT_PERL_MODULE}: $NXT_BUILD_DIR/${NXT_PERL_MODULE}.unit.so 188 189$NXT_BUILD_DIR/${NXT_PERL_MODULE}.unit.so: $nxt_objs 190 \$(NXT_MODULE_LINK) -o $NXT_BUILD_DIR/${NXT_PERL_MODULE}.unit.so \\ 191 $nxt_objs $NXT_PERL_LDOPTS $NXT_LD_OPT 192 193 194install: ${NXT_PERL_MODULE}-install 195 196${NXT_PERL_MODULE}-install: ${NXT_PERL_MODULE} install-check 197 install -d \$(DESTDIR)$NXT_MODULES 198 install -p $NXT_BUILD_DIR/${NXT_PERL_MODULE}.unit.so \\ 199 \$(DESTDIR)$NXT_MODULES/ 200 201 202uninstall: ${NXT_PERL_MODULE}-uninstall 203 204${NXT_PERL_MODULE}-uninstall: 205 rm -f \$(DESTDIR)$NXT_MODULES/${NXT_PERL_MODULE}.unit.so 206 @rmdir -p \$(DESTDIR)$NXT_MODULES 2>/dev/null || true 207 208END 209